From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mario Kleiner Subject: Re: [PATCH] drm/vblank: Fixup and document timestamp update/read barriers Date: Thu, 07 May 2015 19:33:57 +0200 Message-ID: <554BA205.7050702@gmail.com> References: <1429082222-20820-1-git-send-email-daniel.vetter@ffwll.ch> <552E60D4.3070307@hurleysoftware.com> <20150415173153.GA6092@phenom.ffwll.local> <552FAB7F.4040707@hurleysoftware.com> <20150416130323.GG5082@phenom.ffwll.local> <5546FB02.4010508@gmail.com> <5548D568.3050109@hurleysoftware.com> <20150505154206.GB30184@phenom.ffwll.local> <5548E876.4010706@hurleysoftware.com> <20150506085640.GH30184@phenom.ffwll.local> <554B5301.5030905@hurleysoftware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <554B5301.5030905@hurleysoftware.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Peter Hurley , Daniel Vetter Cc: Daniel Vetter , Intel Graphics Development , =?UTF-8?B?TWljaGVsIETDpG56ZXI=?= , DRI Development , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org T24gMDUvMDcvMjAxNSAwMTo1NiBQTSwgUGV0ZXIgSHVybGV5IHdyb3RlOgo+IE9uIDA1LzA2LzIw MTUgMDQ6NTYgQU0sIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4+IE9uIFR1ZSwgTWF5IDA1LCAyMDE1 IGF0IDExOjU3OjQyQU0gLTA0MDAsIFBldGVyIEh1cmxleSB3cm90ZToKPj4+IE9uIDA1LzA1LzIw MTUgMTE6NDIgQU0sIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4+Pj4gT24gVHVlLCBNYXkgMDUsIDIw MTUgYXQgMTA6MzY6MjRBTSAtMDQwMCwgUGV0ZXIgSHVybGV5IHdyb3RlOgo+Pj4+PiBPbiAwNS8w NC8yMDE1IDEyOjUyIEFNLCBNYXJpbyBLbGVpbmVyIHdyb3RlOgo+Pj4+Pj4gT24gMDQvMTYvMjAx NSAwMzowMyBQTSwgRGFuaWVsIFZldHRlciB3cm90ZToKPj4+Pj4+PiBPbiBUaHUsIEFwciAxNiwg MjAxNSBhdCAwODozMDo1NUFNIC0wNDAwLCBQZXRlciBIdXJsZXkgd3JvdGU6Cj4+Pj4+Pj4+IE9u IDA0LzE1LzIwMTUgMDE6MzEgUE0sIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4+Pj4+Pj4+PiBPbiBX ZWQsIEFwciAxNSwgMjAxNSBhdCAwOTowMDowNEFNIC0wNDAwLCBQZXRlciBIdXJsZXkgd3JvdGU6 Cj4+Pj4+Pj4+Pj4gSGkgRGFuaWVsLAo+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4gT24gMDQvMTUvMjAx NSAwMzoxNyBBTSwgRGFuaWVsIFZldHRlciB3cm90ZToKPj4+Pj4+Pj4+Pj4gVGhpcyB3YXMgYSBi aXQgdG9vIG11Y2ggY2FyZ28tY3VsdGVkLCBzbyBsZXRzIG1ha2UgaXQgc29saWQ6Cj4+Pj4+Pj4+ Pj4+IC0gdmJsYW5rLT5jb3VudCBkb2Vzbid0IG5lZWQgdG8gYmUgYW4gYXRvbWljLCB3cml0ZXMg YXJlIGFsd2F5cyBkb25lCj4+Pj4+Pj4+Pj4+ICAgICB1bmRlciB0aGUgcHJvdGVjdGlvbiBvZiBk ZXYtPnZibGFua190aW1lX2xvY2suIFN3aXRjaCB0byBhbiB1bnNpZ25lZAo+Pj4+Pj4+Pj4+PiAg ICAgbG9uZyBpbnN0ZWFkIGFuZCB1cGRhdGUgY29tbWVudHMuIE5vdGUgdGhhdCBhdG9taWNfcmVh ZCBpcyBqdXN0IGEKPj4+Pj4+Pj4+Pj4gICAgIG5vcm1hbCByZWFkIG9mIGEgdm9sYXRpbGUgdmFy aWFibGUsIHNvIG5vIG5lZWQgdG8gYXVkaXQgYWxsIHRoZQo+Pj4+Pj4+Pj4+PiAgICAgcmVhZC1z aWRlIGFjY2VzcyBzcGVjaWZpY2FsbHkuCj4+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4+IC0gVGhlIGJh cnJpZXJzIGZvciB0aGUgdmJsYW5rIGNvdW50ZXIgc2VxbG9jayB3ZXJlbid0IGNvbXBsZXRlOiBU aGUKPj4+Pj4+Pj4+Pj4gICAgIHJlYWQtc2lkZSB3YXMgbWlzc2luZyB0aGUgZmlyc3QgYmFycmll ciBiZXR3ZWVuIHRoZSBjb3VudGVyIHJlYWQgYW5kCj4+Pj4+Pj4+Pj4+ICAgICB0aGUgdGltZXN0 YW1wIHJlYWQsIGl0IG9ubHkgaGFkIGEgYmFycmllciBiZXR3ZWVuIHRoZSB0cyBhbmQgdGhlCj4+ Pj4+Pj4+Pj4+ICAgICBjb3VudGVyIHJlYWQuIFdlIG5lZWQgYm90aC4KPj4+Pj4+Pj4+Pj4KPj4+ Pj4+Pj4+Pj4gLSBCYXJyaWVycyB3ZXJlbid0IHByb3Blcmx5IGRvY3VtZW50ZWQuIFNpbmNlIGJh cnJpZXJzIG9ubHkgd29yayBpZgo+Pj4+Pj4+Pj4+PiAgICAgeW91IGhhdmUgdGhlbSBvbiBib3Ro cyBzaWRlcyBvZiB0aGUgdHJhbnNhY3Rpb24gaXQncyBwcnVkZW50IHRvCj4+Pj4+Pj4+Pj4+ICAg ICByZWZlcmVuY2Ugd2hlcmUgdGhlIG90aGVyIHNpZGUgaXMuIFRvIGF2b2lkIGR1cGxpY2F0aW5n IHRoZQo+Pj4+Pj4+Pj4+PiAgICAgd3JpdGUtc2lkZSBjb21tZW50IDMgdGltZXMgZXh0cmFjdCBh IGxpdHRsZSBzdG9yZV92YmxhbmsoKSBoZWxwZXIuCj4+Pj4+Pj4+Pj4+ICAgICBJbiB0aGF0IGhl bHBlciBhbHNvIGFzc2VydCB0aGF0IHdlIGRvIGluZGVlZCBob2xkCj4+Pj4+Pj4+Pj4+ICAgICBk ZXYtPnZibGFua190aW1lX2xvY2ssIHNpbmNlIGluIHNvbWUgY2FzZXMgdGhlIGxvY2sgaXMgYWNx dWlyZWQgYQo+Pj4+Pj4+Pj4+PiAgICAgZmV3IGZ1bmN0aW9ucyB1cCBpbiB0aGUgY2FsbGNoYWlu Lgo+Pj4+Pj4+Pj4+Pgo+Pj4+Pj4+Pj4+PiBTcG90dGVkIHdoaWxlIHJldmlld2luZyBhIHBhdGNo IGZyb20gQ2hyaXMgV2lsc29uIHRvIGFkZCBhIGZhc3RwYXRoIHRvCj4+Pj4+Pj4+Pj4+IHRoZSB2 Ymxhbmtfd2FpdCBpb2N0bC4KPj4+Pj4+Pj4+Pj4KPj4+Pj4+Pj4+Pj4gQ2M6IENocmlzIFdpbHNv biA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+Pj4+Pj4+Pj4+PiBDYzogTWFyaW8gS2xlaW5l ciA8bWFyaW8ua2xlaW5lci5kZUBnbWFpbC5jb20+Cj4+Pj4+Pj4+Pj4+IENjOiBWaWxsZSBTeXJq w6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+Pj4+Pj4+Pj4+PiBDYzogTWlj aGVsIETDpG56ZXIgPG1pY2hlbEBkYWVuemVyLm5ldD4KPj4+Pj4+Pj4+Pj4gU2lnbmVkLW9mZi1i eTogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBpbnRlbC5jb20+Cj4+Pj4+Pj4+Pj4+IC0t LQo+Pj4+Pj4+Pj4+PiAgICBkcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jIHwgOTIgKysrKysrKysr KysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPj4+Pj4+Pj4+Pj4gICAgaW5j bHVkZS9kcm0vZHJtUC5oICAgICAgICB8ICA4ICsrKy0tCj4+Pj4+Pj4+Pj4+ICAgIDIgZmlsZXMg Y2hhbmdlZCwgNTQgaW5zZXJ0aW9ucygrKSwgNDYgZGVsZXRpb25zKC0pCj4+Pj4+Pj4+Pj4+Cj4+ Pj4+Pj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jIGIvZHJpdmVy cy9ncHUvZHJtL2RybV9pcnEuYwo+Pj4+Pj4+Pj4+PiBpbmRleCBjOGEzNDQ3NjU3MGEuLjIzYmZi YzYxYTQ5NCAxMDA2NDQKPj4+Pj4+Pj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pcnEu Ywo+Pj4+Pj4+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lycS5jCj4+Pj4+Pj4+Pj4+ IEBAIC03NCw2ICs3NCwzMyBAQCBtb2R1bGVfcGFyYW1fbmFtZWQodmJsYW5rb2ZmZGVsYXksIGRy bV92Ymxhbmtfb2ZmZGVsYXksIGludCwgMDYwMCk7Cj4+Pj4+Pj4+Pj4+ICAgIG1vZHVsZV9wYXJh bV9uYW1lZCh0aW1lc3RhbXBfcHJlY2lzaW9uX3VzZWMsIGRybV90aW1lc3RhbXBfcHJlY2lzaW9u LCBpbnQsIDA2MDApOwo+Pj4+Pj4+Pj4+PiAgICBtb2R1bGVfcGFyYW1fbmFtZWQodGltZXN0YW1w X21vbm90b25pYywgZHJtX3RpbWVzdGFtcF9tb25vdG9uaWMsIGludCwgMDYwMCk7Cj4+Pj4+Pj4+ Pj4+Cj4+Pj4+Pj4+Pj4+ICtzdGF0aWMgdm9pZCBzdG9yZV92Ymxhbmsoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgaW50IGNydGMsCj4+Pj4+Pj4+Pj4+ICsgICAgICAgICAgICAgdW5zaWduZWQgdmJs YW5rX2NvdW50X2luYywKPj4+Pj4+Pj4+Pj4gKyAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAq dF92YmxhbmspCj4+Pj4+Pj4+Pj4+ICt7Cj4+Pj4+Pj4+Pj4+ICsgICAgc3RydWN0IGRybV92Ymxh bmtfY3J0YyAqdmJsYW5rID0gJmRldi0+dmJsYW5rW2NydGNdOwo+Pj4+Pj4+Pj4+PiArICAgIHUz MiB0c2xvdDsKPj4+Pj4+Pj4+Pj4gKwo+Pj4+Pj4+Pj4+PiArICAgIGFzc2VydF9zcGluX2xvY2tl ZCgmZGV2LT52YmxhbmtfdGltZV9sb2NrKTsKPj4+Pj4+Pj4+Pj4gKwo+Pj4+Pj4+Pj4+PiArICAg IGlmICh0X3ZibGFuaykgewo+Pj4+Pj4+Pj4+PiArICAgICAgICB0c2xvdCA9IHZibGFuay0+Y291 bnQgKyB2YmxhbmtfY291bnRfaW5jOwo+Pj4+Pj4+Pj4+PiArICAgICAgICB2Ymxhbmt0aW1lc3Rh bXAoZGV2LCBjcnRjLCB0c2xvdCkgPSAqdF92Ymxhbms7Cj4+Pj4+Pj4+Pj4+ICsgICAgfQo+Pj4+ Pj4+Pj4+PiArCj4+Pj4+Pj4+Pj4+ICsgICAgLyoKPj4+Pj4+Pj4+Pj4gKyAgICAgKiB2Ymxhbmsg dGltZXN0YW1wIHVwZGF0ZXMgYXJlIHByb3RlY3RlZCBvbiB0aGUgd3JpdGUgc2lkZSB3aXRoCj4+ Pj4+Pj4+Pj4+ICsgICAgICogdmJsYW5rX3RpbWVfbG9jaywgYnV0IG9uIHRoZSByZWFkIHNpZGUg ZG9uZSBsb2NrbGVzc2x5IHVzaW5nIGEKPj4+Pj4+Pj4+Pj4gKyAgICAgKiBzZXF1ZW5jZS1sb2Nr IG9uIHRoZSB2YmxhbmsgY291bnRlci4gRW5zdXJlIGNvcnJlY3Qgb3JkZXJpbmcgdXNpbmcKPj4+ Pj4+Pj4+Pj4gKyAgICAgKiBtZW1vcnkgYmFycnJpZXJzLiBXZSBuZWVkIHRoZSBiYXJyaWVyIGJv dGggYmVmb3JlIGFuZCBhbHNvIGFmdGVyIHRoZQo+Pj4+Pj4+Pj4+PiArICAgICAqIGNvdW50ZXIg dXBkYXRlIHRvIHN5bmNocm9uaXplIHdpdGggdGhlIG5leHQgdGltZXN0YW1wIHdyaXRlLgo+Pj4+ Pj4+Pj4+PiArICAgICAqIFRoZSByZWFkLXNpZGUgYmFycmllcnMgZm9yIHRoaXMgYXJlIGluIGRy bV92YmxhbmtfY291bnRfYW5kX3RpbWUuCj4+Pj4+Pj4+Pj4+ICsgICAgICovCj4+Pj4+Pj4+Pj4+ ICsgICAgc21wX3dtYigpOwo+Pj4+Pj4+Pj4+PiArICAgIHZibGFuay0+Y291bnQgKz0gdmJsYW5r X2NvdW50X2luYzsKPj4+Pj4+Pj4+Pj4gKyAgICBzbXBfd21iKCk7Cj4+Pj4+Pj4+Pj4KPj4+Pj4+ Pj4+PiBUaGUgY29tbWVudCBhbmQgdGhlIGNvZGUgYXJlIGVhY2ggc2VsZi1jb250cmFkaWN0b3J5 Lgo+Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4gSWYgdmJsYW5rLT5jb3VudCB3cml0ZXMgYXJlIGFsd2F5 cyBwcm90ZWN0ZWQgYnkgdmJsYW5rX3RpbWVfbG9jayAoc29tZXRoaW5nIEkKPj4+Pj4+Pj4+PiBk aWQgbm90IHZlcmlmeSBidXQgdGhhdCB0aGUgY29tbWVudCBhYm92ZSBhc3NlcnRzKSwgdGhlbiB0 aGUgdHJhaWxpbmcgd3JpdGUKPj4+Pj4+Pj4+PiBiYXJyaWVyIGlzIG5vdCByZXF1aXJlZCAoYW5k IHRoZSBhc3NlcnRpb24gdGhhdCBpdCBpcyBpbiB0aGUgY29tbWVudCBpcyBpbmNvcnJlY3QpLgo+ Pj4+Pj4+Pj4+Cj4+Pj4+Pj4+Pj4gQSBzcGluIHVubG9jayBvcGVyYXRpb24gaXMgYWx3YXlzIGEg d3JpdGUgYmFycmllci4KPj4+Pj4+Pj4+Cj4+Pj4+Pj4+PiBIbSB5ZWFoLiBPdG9oIHRvIG1lIHRo YXQncyBib3JkZXJpbmcgb24gImNvZGUgdG9vIGNsZXZlciBmb3IgbXkgb3duIGdvb2QiLgo+Pj4+ Pj4+Pj4gVGhhdCB0aGUgc3BpbmxvY2sgaXMgaGVsZCBJIGNhbiBhc3N1cmUuIFRoYXQgbm8gb25l IGdvZXMgYXJvdW5kIGFuZCBkb2VzCj4+Pj4+Pj4+PiBtdWx0aXBsZSB2YmxhbmsgdXBkYXRlcyAo YmVjYXVzZSBzb21laG93IHRoYXQgY29kZSByYWNlZCB3aXRoIHRoZSBodwo+Pj4+Pj4+Pj4gaXRz ZWxmKSBJIGNhbid0IGVhc2lseSBhc3N1cmUgd2l0aCBhIHNpbXBsZSBhc3NlcnQgb3Igc29tZXRo aW5nIHNpbWlsYXIuCj4+Pj4+Pj4+PiBJdCdzIG5vdCB0aGUgY2FzZSByaWdodCBub3csIGJ1dCB0 aGF0IGNhbiBjaGFuZ2VzLgo+Pj4+Pj4+Pgo+Pj4+Pj4+PiBUaGUgYWxnb3JpdGhtIHdvdWxkIGJl IGJyb2tlbiBpZiBtdWx0aXBsZSB1cGRhdGVzIGZvciB0aGUgc2FtZSB2YmxhbmsKPj4+Pj4+Pj4g Y291bnQgd2VyZSBhbGxvd2VkOyB0aGF0J3Mgd2h5IGl0IGNoZWNrcyB0byBzZWUgaWYgdGhlIHZi bGFuayBjb3VudCBoYXMKPj4+Pj4+Pj4gbm90IGFkdmFuY2VkIGJlZm9yZSBzdG9yaW5nIGEgbmV3 IHRpbWVzdGFtcC4KPj4+Pj4+Pj4KPj4+Pj4+Pj4gT3RoZXJ3aXNlLCB0aGUgcmVhZCBzaWRlIHdv dWxkIG5vdCBiZSBhYmxlIHRvIGRldGVybWluZSB0aGF0IHRoZQo+Pj4+Pj4+PiB0aW1lc3RhbXAg aXMgdmFsaWQgYnkgZG91YmxlLWNoZWNraW5nIHRoYXQgdGhlIHZibGFuayBjb3VudCBoYXMgbm90 Cj4+Pj4+Pj4+IGNoYW5nZWQuCj4+Pj4+Pj4+Cj4+Pj4+Pj4+IEFuZCBiZXNpZGVzLCBldmVuIGlm IHRoZSBjb2RlIGxvb3BlZCB3aXRob3V0IGRyb3BwaW5nIHRoZSBzcGlubG9jaywKPj4+Pj4+Pj4g dGhlIGNvcnJlY3Qgd3JpdGUgb3JkZXIgd291bGQgc3RpbGwgYmUgb2JzZXJ2ZWQgYmVjYXVzZSBp dCB3b3VsZCBzdGlsbAo+Pj4+Pj4+PiBiZSBleGVjdXRpbmcgb24gdGhlIHNhbWUgY3B1Lgo+Pj4+ Pj4+Pgo+Pj4+Pj4+PiBNeSBvYmplY3Rpb24gdG8gdGhlIHdyaXRlIG1lbW9yeSBiYXJyaWVyIGlz IG5vdCBhYm91dCBvcHRpbWl6YXRpb247Cj4+Pj4+Pj4+IGl0J3MgYWJvdXQgY29ycmVjdCBjb2Rl Lgo+Pj4+Pj4+Cj4+Pj4+Pj4gV2VsbCBkaWZmPTAgaXMgbm90IGFsbG93ZWQsIEkgZ3Vlc3MgSSBj b3VsZCBlbmZvcmNlIHRoaXMgd2l0aCBzb21lCj4+Pj4+Pj4gV0FSTl9PTi4gQW5kIEkgc3RpbGwg dGhpbmsgbXkgcG9pbnQgb2Ygbm9uLWxvY2FsIGNvcnJlY3RuZXNzIGlzIHNvbGlkLgo+Pj4+Pj4+ IFdpdGggdGhlIHNtcF93bWIoKSByZW1vdmVkIHRoZSBmb2xsb3dpbmcgc3RpbGwgd29ya3MgY29y cmVjdGx5Ogo+Pj4+Pj4+Cj4+Pj4+Pj4gc3Bpbl9sb2NrKHZibGFua190aW1lX2xvY2spOwo+Pj4+ Pj4+IHN0b3JlX3ZibGFuayhkZXYsIGNydGMsIDEsIHRzMSk7Cj4+Pj4+Pj4gc3Bpbl91bmxvY2so dmJsYW5rX3RpbWVfbG9jayk7Cj4+Pj4+Pj4KPj4+Pj4+PiBzcGluX2xvY2sodmJsYW5rX3RpbWVf bG9jayk7Cj4+Pj4+Pj4gc3RvcmVfdmJsYW5rKGRldiwgY3J0YywgMSwgdHMyKTsKPj4+Pj4+PiBz cGluX3VubG9jayh2YmxhbmtfdGltZV9sb2NrKTsKPj4+Pj4+Pgo+Pj4+Pj4+IEJ1dCB3aXRoIHRo ZSBzbXBfd21iKCk7IHJlbW92ZWQgdGhlIGZvbGxvd2luZyB3b3VsZCBiZSBicm9rZW46Cj4+Pj4+ Pj4KPj4+Pj4+PiBzcGluX2xvY2sodmJsYW5rX3RpbWVfbG9jayk7Cj4+Pj4+Pj4gc3RvcmVfdmJs YW5rKGRldiwgY3J0YywgMSwgdHMxKTsKPj4+Pj4+PiBzdG9yZV92YmxhbmsoZGV2LCBjcnRjLCAx LCB0czIpOwo+Pj4+Pj4+IHNwaW5fdW5sb2NrKHZibGFua190aW1lX2xvY2spOwo+Pj4+Pj4+Cj4+ Pj4+Pj4gYmVjYXVzZSB0aGUgY29tcGlsZXIvY3B1IGlzIGZyZWUgdG8gcmVvcmRlciB0aGUgc3Rv cmUgZm9yIHZibGFuay0+Y291bnQKPj4+Pj4+PiBfYWhlYWRfIG9mIHRoZSBzdG9yZSBmb3IgdGhl IHRpbWVzdGFtcC4gQW5kIHRoYXQgd291bGQgdHJpY2sgcmVhZGVycyBpbnRvCj4+Pj4+Pj4gYmVs aWV2aW5nIHRoYXQgdGhleSBoYXZlIGEgdmFsaWQgdGltZXN0YW1wIHdoZW4gdGhleSBwb3RlbnRp YWxseSByYWNlZC4KPj4+Pj4+Pgo+Pj4+Pj4+IE5vdyB5b3UncmUgY29ycmVjdCB0aGF0IHJpZ2h0 IG5vdyB0aGVyZSdzIG5vIHN1Y2ggdGhpbmcgZ29pbmcgb24sIGFuZCBpdCdzCj4+Pj4+Pj4gdW5s aWtlbHkgdG8gaGFwcGVuIChnaXZlbiB0aGUgbmF0dXJlIG9mIHZibGFuayB1cGRhdGVzKS4gQnV0 IG15IHBvaW50IGlzCj4+Pj4+Pj4gdGhhdCBpZiB3ZSBvcHRpbWl6ZSB0aGlzIHRoZW4gdGhlIGNv cnJlY3RuZXNzIGNhbid0IGJlIHByb3ZlbiBsb2NhbGx5Cj4+Pj4+Pj4gYW55bW9yZSBieSBqdXN0 IGxvb2tpbmcgYXQgc3RvcmVfdmJsYW5rLCBidXQgaW5zdGVhZCB5b3UgbXVzdCBhdWRpdCBhbGwK Pj4+Pj4+PiB0aGUgY2FsbGVycy4gQW5kIGxlYWtpbmcgbG9ja2luZy9iYXJyaWVycyBsaWtlIHRo YXQgaXMgdG9vIGZyYWdpbGUgZGVzaWduCj4+Pj4+Pj4gZm9yIG15IHRhc3RlLgo+Pj4+Pj4+Cj4+ Pj4+Pj4gQnV0IHlvdSBpbnNpc3QgdGhhdCBteSBhcHByb2FjaCBpcyBicm9rZW4gc29tZWhvdyBh bmQgZHJvcHBpbmcgdGhlIHNtcF93bWIKPj4+Pj4+PiBpcyBuZWVkZWQgZm9yIGNvcnJlY3RuZXNz LiBJIGRvbid0IHNlZSBob3cgdGhhdCdzIHRoZSBjYXNlIGF0IGFsbC4KPj4+Pj4KPj4+Pj4gRGFu aWVsLAo+Pj4+Pgo+Pj4+PiBJJ3ZlIGJlZW4gcmVhbGx5IGJ1c3kgdGhpcyBsYXN0IHdlZWs7IG15 IGFwb2xvZ2llcyBmb3Igbm90IHJlcGx5aW5nIHByb21wdGx5Lgo+Pj4+Pgo+Pj4+Pj4gRndpdywg aSBzcGVudCBzb21lIHRpbWUgcmVlZHVjYXRpbmcgbXlzZWxmIGFib3V0IG1lbW9yeSBiYXJyaWVy cyAodGhhbmtzIGZvciB5b3VyIGV4cGxhbmF0aW9ucykgYW5kIHRoaW5raW5nIGFib3V0IHRoaXMs IGFuZCB0aGUgbGFzdCB2ZXJzaW9uIG9mIHlvdXIgcGF0Y2ggbG9va3MgZ29vZCB0byBtZS4gSXQg YWxzbyBtYWtlcyBzZW5zZSB0byBtZSB0byBsZWF2ZSB0aGF0IGxhc3Qgc21iX3dtYigpIGluIHBs YWNlIHRvIG1ha2UgZnV0dXJlIHVzZSBvZiB0aGUgaGVscGVyIHJvYnVzdCAtIGZvciBub24tbG9j YWwgY29ycmVjdG5lc3MsIHRvIGF2b2lkIGhhdmluZyB0byBhdWRpdCBhbGwgZnV0dXJlIGNhbGxl cnMgb2YgdGhhdCBoZWxwZXIuCj4+Pj4+Cj4+Pj4+IE15IGNvbmNlcm4gd3J0IHRvIHVubmVjZXNz YXJ5IGJhcnJpZXJzIGluIHRoaXMgYWxnb3JpdGhtIGlzIHRoYXQgdGhlIHRyYWlsaW5nCj4+Pj4+ IGJhcnJpZXIgbm93IGFwcGVhcnMgbWFuZGF0b3J5LCB3aGVuIGluIGZhY3QgaXQgaXMgbm90Lgo+ Pj4+Pgo+Pj4+PiBNb3Jlb3ZlciwgdGhpcyBhbGdvcml0aG0gaXMsIGluIGdlbmVyYWwsIGZyYWdp bGUgYW5kIG5vdCBkZXNpZ25lZCB0byBoYW5kbGUKPj4+Pj4gcmFuZG9tIG9yIHBvb3JseS1yZXNl YXJjaGVkIGNoYW5nZXMuCj4+Pj4KPj4+PiBMZXNzIGZyYWdpbGl0eSBpcyBleGFjdGx5IHdoeSBJ IHdhbnQgdGhhdCBzdXJwbHVzIGJhcnJpZXIuIEJ1dCBJJ3ZlIHJ1bgo+Pj4+IG91dCBvZiBuZXcg aWRlYXMgZm9yIGhvdyB0byBleHBsYWluIHRoYXQgLi4uCj4+Pj4KPj4+Pj4gRm9yIGV4YW1wbGUs IGlmIG9ubHkgdGhlIHJlYWQgYW5kIHN0b3JlIG9wZXJhdGlvbnMgYXJlIGNvbnNpZGVyZWQsIGl0 J3Mgb2J2aW91c2x5Cj4+Pj4+IHVuc2FmZSwgc2luY2UgYSByZWFkIG1heSB1bndpdHRpbmdseSBy ZXRyaWV2ZSBhbiBzdG9yZSBpbiBwcm9ncmVzcy4KPj4+Pj4KPj4+Pj4KPj4+Pj4gQ1BVIDAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQ1BVIDEKPj4+Pj4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cj4+Pj4+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8qIHZibGFuay0+Y291bnQgPT0gMCAqLwo+Pj4+PiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwKPj4+Pj4gZHJtX3ZibGFua19jb3VudF9hbmRfdGlt ZSgpICAgICAgICAgICAgIHwgc3RvcmVfdmJsYW5rKC4uLCBpbmMgPSAyLCAuLi4pCj4+Pj4+ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+Pj4+PiAgICBjdXJfdmJs YW5rIDw9IExPQUQgdmJsYW5rLT5jb3VudCAgICAgIHwKPj4+Pj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB8ICAgdHNsb3QgPSB2YmxhbmstPmNvdW50ICsgMgo+Pj4+ PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAvKiB0c2xvdCA9 PSAyICovCj4+Pj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg IFNUT1JFIHZibGFua3RpbWVbMF0KPj4+Pgo+Pj4+IFRoaXMgbGluZSBoZXJlIGlzIHdyb25nLCBp dCBzaG91bGQgYmUgIlNUT1JFIHZibGFua3RpbWVbMl0iCj4+Pj4KPj4+PiBUaGUgIlNUT1JFIHZi bGFua3RpbWVbMF0iIGhhcHBlbmVkIHdheSBlYXJsaWVyLCBiZWZvcmUgMiBzbXBfd21iIGFuZCB0 aGUKPj4+PiBwcmV2aW91cyB1cGRhdGluZyBvZiB2YmxhbmstPmNvdW50Lgo+Pj4KPj4+ICZ2Ymxh bmt0aW1lWzBdID09ICZ2Ymxhbmt0aW1lWzJdCj4+Pgo+Pj4gVGhhdCdzIHdoeSBJIGtlZXAgdHJ5 aW5nIHRvIGV4cGxhaW4geW91IGFjdHVhbGx5IGhhdmUgdG8gbG9vayBhdCBhbmQKPj4+IHVuZGVy c3RhbmQgdGhlIGFsZ29yaXRobSBiZWZvcmUgYmxpbmRseSBhc3N1bWluZyBsb2NhbCBiZWhhdmlv ciBpcwo+Pj4gc3VmZmljaWVudC4KPj4KPj4gT2sgbm93IEkgdGhpbmsgSSBnb3QgaXQsIHRoZSBp c3N1ZSBpcyB3aGVuIHRoZSBhcnJheSAod2hpY2ggaXMgb25seSAyCj4+IGVsZW1lbnRzIGJpZykg d3JhcHMgYXJvdW5kLiBBbmQgdGhhdCdzIHJhY3kgYmVjYXVzZSB3ZSBkb24ndCB0b3VjaCB0aGUK Pj4gaW5jcmVtZW50IGJlZm9yZSBfYW5kXyBhZnRlciB0aGUgd3JpdGUgc2lkZSB1cGRhdGUuIEJ1 dCB0aGF0IHNlZW1zIGxpa2UgYQo+PiBidWcgdGhhdCdzIGFsd2F5cyBiZWVuIHRoZXJlPwo+Cj4g SSdtIG5vdCBzdXJlIGlmIHRob3NlIGNvbmRpdGlvbnMgY2FuIGFjdHVhbGx5IG9jY3VyOyBpdCdz IGJlZW4gYSBsb25nIHRpbWUKPiBzaW5jZSBJIGFuYWx5emVkIHZibGFuayB0aW1lc3RhbXBpbmcu Cj4KPgoKVGhleSBzaG91bGRuJ3Qgb2NjdXIgdW5kZXIgY29ycmVjdCB1c2UuIE5vcm1hbGx5IG9u ZSBoYXMgdG8gd3JhcCBhbnkgCmNhbGwgdG8gZHJtX3ZibGFua19jb3VudCgpIG9yIGRybV92Ymxh bmtfY291bnRfYW5kX3RpbWUoKSBpbnRvIGEgcGFpciBvZiAKZHJtX3ZibGFua19nZXQoKSAtPiBx dWVyeSAtPiBkcm1fdmJsYW5rX3B1dCgpLiBPbmx5IGRybV92YmxhbmtfZ2V0KCkgCndpbGwgY2Fs bCBkcm1fdXBkYXRlX3ZibGFuaygpIG9uIGEgcmVmY291bnQgMCAtPiAxIHRyYW5zaXRpb24gaWYg dmJsYW5rcyAKd2VyZSBwcmV2aW91c2x5IG9mZiwgYW5kIG9ubHkgdGhhdCBmdW5jdGlvbiBidW1w cyB0aGUgY291bnQgYnkgbW9yZSB0aGFuIAorMS4gSW93LiB0aGUgb3ZlcmZsb3cgY2FzZSBpc24n dCBleGVjdXRlZCBpbiBwYXJhbGxlbCB3aXRoIHF1ZXJpZXMgLT4gCnByb2JsZW0gYXZvaWRlZC4K ClByb3BlciBfZ2V0KCktPnF1ZXJ5LT5wdXQoKSBzZXF1ZW5jZSBpcyBnaXZlbiBmb3IgcXVldWVp bmcgdmJsYW5rIApldmVudHMsIHdhaXRpbmcgZm9yIHRhcmdldCB2YmxhbmsgY291bnRzIG9yIGR1 cmluZyBwYWdlZmxpcCBjb21wbGV0aW9uLgoKVGhlIG9uZSBleGNlcHRpb24gd291bGQgYmUgaW4g Q2hyaXMgcmVjZW50bHkgcHJvcG9zZWQgImxvY2tsZXNzIGluc3RhbnQgCnF1ZXJ5IiBwYXRjaCB3 aGVyZSBhIHB1cmUgcXVlcnkgaXMgZG9uZSAtIFRoYXQgcGF0Y2ggdGhhdCB0cmlnZ2VyZWQgCkRh bmllbHMgY2xlYW51cCBwYXRjaC4gSSB3YXMganVzdCBhYm91dCB0byBvayB0aGF0IG9uZSwgYW5k IHRlc3Rpbmcgd2l0aCAKbXkgdGltaW5nIHRlc3RzIGFuZCB1bmRlciBub3JtYWwgdXNlIGRpZG4n dCBzaG93IHByb2JsZW1zLiBUaGVyZSAKZHJtX3ZibGFua19jb3VudF9hbmRfdGltZSgpIGlzIHVz ZWQgb3V0c2lkZSBhIGdldC9wdXQgcHJvdGVjdGVkIHBhdGguIApJJ20gbm90IHN1cmUgaWYgc29t ZSByYWNlIHRoZXJlIGNvdWxkIGhhcHBlbiB1bmRlciByZWFsaXN0aWMgY29uZGl0aW9ucy4KCi1t YXJpbwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRl bC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=