From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: Questions on page flips and atomic modeset Date: Fri, 9 Feb 2018 18:24:46 +0200 Message-ID: <20180209162446.GM5453@intel.com> References: <8c3a7024-598b-49b5-0f52-30fb35a27868@gmail.com> <20180205164736.GK5453@intel.com> <66bbd5cc-e93c-78dd-6c57-87bc879bbfe1@gmail.com> <20180206160420.GM5453@intel.com> <37306d83-2ee1-faca-086e-a86c6ea44b99@gmail.com> <20180209155350.GL5453@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 39DE96E683 for ; Fri, 9 Feb 2018 16:24:50 +0000 (UTC) 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: Oleksandr Andrushchenko Cc: "dri-devel@lists.freedesktop.org" List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBGZWIgMDksIDIwMTggYXQgMDY6MDk6MDlQTSArMDIwMCwgT2xla3NhbmRyIEFuZHJ1 c2hjaGVua28gd3JvdGU6Cj4gT24gMDIvMDkvMjAxOCAwNTo1MyBQTSwgVmlsbGUgU3lyasOkbMOk IHdyb3RlOgo+ID4gT24gVGh1LCBGZWIgMDgsIDIwMTggYXQgMTE6NTM6MzBBTSArMDIwMCwgT2xl a3NhbmRyIEFuZHJ1c2hjaGVua28gd3JvdGU6Cj4gPj4gSGVsbG8sIFZpbGxlIQo+ID4+Cj4gPj4g T24gMDIvMDYvMjAxOCAwNjowNCBQTSwgVmlsbGUgU3lyasOkbMOkIHdyb3RlOgo+ID4+PiBPbiBU dWUsIEZlYiAwNiwgMjAxOCBhdCAxMTo1OTozN0FNICswMjAwLCBPbGVrc2FuZHIgQW5kcnVzaGNo ZW5rbyB3cm90ZToKPiA+Pj4+IEhlbGxvLCBWaWxsZSEKPiA+Pj4+Cj4gPj4+PiBUaGFuayB5b3Ug dmVyeSBtdWNoIGZvciBzdWNoIGEgY29tcHJlaGVuc2l2ZSBhbnN3ZXIuCj4gPj4+Pgo+ID4+Pj4g UGxlYXNlIHNlZSBpbmxpbmUKPiA+Pj4+Cj4gPj4+Pgo+ID4+Pj4gT24gMDIvMDUvMjAxOCAwNjo0 NyBQTSwgVmlsbGUgU3lyasOkbMOkIHdyb3RlOgo+ID4+Pj4+IE9uIE1vbiwgRmViIDA1LCAyMDE4 IGF0IDA2OjAzOjI1UE0gKzAyMDAsIE9sZWtzYW5kciBBbmRydXNoY2hlbmtvIHdyb3RlOgo+ID4+ Pj4+PiBIZWxsbywKPiA+Pj4+Pj4KPiA+Pj4+Pj4KPiA+Pj4+Pj4gSSBoYXZlIGEgRFJNIGRyaXZl ciB3aGljaCBpbXBsZW1lbnRzIGRpc3BsYXkgcHJvdG9jb2wgZm9yIFhlbiBbMV0KPiA+Pj4+Pj4g YW5kIHRoaXMgcHJvdG9jb2wgaGFzIGEgZGVkaWNhdGVkIFhFTkRJU1BMX09QX1BHX0ZMSVAgcmVx dWVzdCB3aGljaAo+ID4+Pj4+PiB0ZWxscyB0aGUgb3RoZXIgZW5kIHRoYXQgc29tZSBkaXNwbGF5 IGJ1ZmZlciBuZWVkcyB0byBiZSBkaXNwbGF5ZWQsCj4gPj4+Pj4+IGUuZy4gaXQgaXMgaXNzdWVk IGJ5IHRoZSBmcm9udGVuZCBEUk0gZHJpdmVyIHRvIHRoZSBjb3JyZXNwb25kaW5nCj4gPj4+Pj4+ IGJhY2tlbmQgd2hlbiB0aGUgZm9ybWVyIHdhbnRzIHRvIGRpc3BsYXkgYSBidWZmZXIuCj4gPj4+ Pj4+IFR3byBub3RlczoKPiA+Pj4+Pj4gMS4gQ29tbXVuaWNhdGlvbiBiZXR3ZWVuIHR3byByZW1v dGUgcGFydGllcyBjYW4gb2J2aW91c2x5IGZhaWwuCj4gPj4+Pj4+IDIuIEF0IHRoZSBtb21lbnQg b25seSBwcmltYXJ5IHBsYW5lIGlzIHN1cHBvcnRlZCwgc28gd2UgY2FuIHRoaW5rIG9mCj4gPj4+ Pj4+IHRoZSBkaXNwbGF5IGJ1ZmZlciBhcyBvZiBDUlRDJ3MgcHJpbWFyeSBmYi4KPiA+Pj4+Pj4K PiA+Pj4+Pj4gVGhlcmUgYXJlIHR3byBBUElzIGF2YWlsYWJsZSBmb3IgdXNlci1zcGFjZSB0byBp bml0aWF0ZSBhIHBhZ2UtZmxpcAo+ID4+Pj4+PiAocGxlYXNlIGNvcnJlY3QgbWUgaWYgSSBhbSB3 cm9uZyBoZXJlKTogbGVnYWN5IHZpYSBEUk1fSU9DVExfTU9ERV9QQUdFX0ZMSVAKPiA+Pj4+Pj4g YW5kIG1vcmUgcmVjZW50IHZpYSBEUk1fSU9DVExfTU9ERV9BVE9NSUMuIE15IGN1cnJlbnQgaW1w bGVtZW50YXRpb24KPiA+Pj4+Pj4gKHdoaWNoIGlzIDQuOSBiYXNlZCkgdXNlcyBkcm1fY3J0Y19m dW5jcy5wYWdlX2ZsaXAgY2FsbGJhY2sgdG8gc2VuZAo+ID4+Pj4+PiBYRU5ESVNQTF9PUF9QR19G TElQIHJlcXVlc3QgdG8gdGhlIGJhY2tlbmQsIHNvIGlmIGNvbW11bmljYXRpb24gZmFpbHMKPiA+ Pj4+Pj4gSSBjYW4gcmV0dXJuIGFuIGVycm9yIGNvZGUsIHNvIHRoZSBEUk0gY29yZSBrbm93cyB0 aGF0IHBhZ2UgZmxpcAo+ID4+Pj4+PiBjYW5ub3QgYmUgZG9uZS4KPiA+Pj4+Pj4KPiA+Pj4+Pj4g QnV0IG5vdyBJIGFtIGFib3V0IHRvIGVuYWJsZSBwYWdlIGZsaXBwaW5nIHZpYSBEUk1fSU9DVExf TU9ERV9BVE9NSUMgZm9yCj4gPj4+Pj4+IHdoaWNoIHRoaXMgaGFwcGVucyB3aXRob3V0IERSTV9J T0NUTF9NT0RFX1BBR0VfRkxJUCwgYnV0IHZpYSAuYXRvbWljX2NoZWNrICsKPiA+Pj4+Pj4gLmF0 b21pY19mbHVzaCBjYWxsYmFja3MuCj4gPj4+Pj4+Cj4gPj4+Pj4+IFRoZSBzb2x1dGlvbiBJIGhh dmUgaW4gbWluZCBpcyB0aGF0IEkgbW92ZSB0aGUgWEVORElTUExfT1BfUEdfRkxJUCByZXF1ZXN0 Cj4gPj4+Pj4+IHRvIHRoZSAuYXRvbWljX2ZsdXNoIGNhbGxiYWNrIHdoaWNoIHNlZW1zIHRvIGJl IHRoZSByaWdodCBwbGFjZSB0byBzZXJ2ZQo+ID4+Pj4+PiBib3RoIERSTV9JT0NUTF9NT0RFX1BB R0VfRkxJUCBhbmQgRFJNX0lPQ1RMX01PREVfQVRPTUlDIChpcyB0aGlzPykuCj4gPj4+Pj4+Cj4g Pj4+Pj4+IFRoZSBxdWVzdGlvbnMgSSBoYXZlIHdpdGggdGhpcyBhcmU6Cj4gPj4+Pj4+Cj4gPj4+ Pj4+IDEuIFdoYXQgaXMgdGhlIGZyYW1lYnVmZmVyIEkgY2FuIHNlbmQgdG8gdGhlIGJhY2tlbmQ/ Cj4gPj4+Pj4+IEkgYXNzdW1lIEkgY2FuIHVzZSBjcnRjLT5wcmltYXJ5LT5mYiBmcm9tCj4gPj4+ Pj4+IGRybV9jcnRjX2hlbHBlcl9mdW5jcy5hdG9taWNfZmx1c2gsCj4gPj4+Pj4+IGlzIHRoaXMg YXNzdW1wdGlvbiBjb3JyZWN0Pwo+ID4+Pj4+IFBsYW5lcyBhcmUgZXhwbGljaXQgaW4gdGhlIGF0 b21pYyB3b3JsZCwgc28geW91IHNob3VsZCBqdXN0IGRlYWwgd2l0aAo+ID4+Pj4+IHRoZSBwbGFu ZSBpZiBhbmQgd2hlbiBpdCdzIHBhcnQgb2YgdGhlIGRybV9hdG9taWNfc3RhdGUuIExvb2sgYXQg ZWcuCj4gPj4+Pj4gZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X3BsYW5lcygpIGhvdyB0byBmaWd1 cmUgb3V0IHdoYXQncyBpbiB0aGUKPiA+Pj4+PiBzdGF0ZS4KPiA+Pj4+IFllcywgdGhpcyBpcyBj bGVhci4gVGhlIHF1ZXN0aW9uIHdhcyBhYm91dCB0aGUgZnJhbWUgYnVmZmVyCj4gPj4+PiBJIGdl dCBpbiBkcm1fY3J0Y19oZWxwZXJfZnVuY3MuYXRvbWljX2ZsdXNoIHdoaWNoIG9ubHkgaGFzCj4g Pj4+PiBvbGRfY3J0Y19zdGF0ZSwgc28gSSBhc3N1bWVkIEkgY2FuIHVzZSBjcnRjLT5wcmltYXJ5 LT5mYiB0aGVyZS4KPiA+Pj4+IE9yIHlvdSBtZWFuIEkgaGF2ZSB0byBkaWcgaW50byBvbGRfY3J0 Y19zdGF0ZS0+c3RhdGUgdG8gZmluZAo+ID4+Pj4gb3V0IGlmIHRoZXJlIGlzIGEgcGxhbmUgYW5k IGlmIGl0IGhhcyBhIGZyYW1idWZmZXIgYW5kIGlmIHNvCj4gPj4+PiB1c2UgaXQgaW5zdGVhZCBv ZiBjcnRjLT5wcmltYXJ5LT5mYj8KPiA+Pj4gWW91IHdpbGwgZ2V0IHRoZSBwbGFuZSBleHBsaWNp dGx5IGFzIHBhcnQgb2YgdGhlIGRybV9hdG9taWNfc3RhdGUuCj4gPj4+IE5vcm1hbGx5IHlvdSBz aG91bGRuJ3QgbmVlZCB0byBnbyBmaW5kIGl0IHZpYSBvdGhlciBtZWFucy4KPiA+Pj4KPiA+Pj4g T2gsIGFuZCBuZXZlciB1c2UgdGhlIHBsYW5lLT5mYiBldGMuIHBvaW50ZXJzIGluIGFuIGF0b21p YyBkcml2ZXIuCj4gPj4+IFRob3NlIGFyZSBmb3IgbGVnYWN5IHB1cnBvc2VzIG9ubHkuIEF0b21p YyBkcml2ZXJzIHNob3VsZCBvbmx5IGV2ZXIKPiA+Pj4gZGVhbCB3aXRoIHByb3BlciBzdGF0ZSBv YmplY3RzLgo+ID4+IEkgYW0gdXNpbmcgZmIgZnJvbSBjb3JyZXNwb25kaW5nIHN0YXRlIG5vdywg dGhhbmsgeW91Cj4gPj4+Pj4gICAgIEFuZCBJIGd1ZXNzIHlvdSdyZSBhbHJlYWR5IHBsYW5uaW5n IG9uIHVzaW5nIHRoYXQgaGVscGVyIHNpbmNlCj4gPj4+Pj4geW91IG1lbnRpb24gLmF0b21pY19m bHVzaCgpLgo+ID4+Pj4gTm90IGRpcmVjdGx5LCBidXQgdmlhIGRybV9tb2RlX2NvbmZpZ19mdW5j cy5hdG9taWNfY29tbWl0Cj4gPj4+IC5hdG9taWNfY29tbWl0KCkgaXMgYSBob29rIHRoZSBkcml2 ZXIgaGFzIHRvIHByb3ZpZGUuIE1vc3QgZHJpdmVycyB1c2UKPiA+Pj4gdGhlIGhlbHBlciBmb3Ig aXQsIHdoaWNoIGluIHR1cm4gcmVxdWlyZXMgdGhlIGRyaXZlciB0byBwcm92aWRlIG90aGVyCj4g Pj4+IGhvb2tzIHN1Y2ggYXMgLmF0b21pY19mbHVzaCgpLiBUaGF0IGlzIHdoYXQgeW91IGFwcGVh ciB0byBiZSBkb2luZy4KPiA+PiB5b3UgYXJlIGNvcnJlY3QKPiA+Pj4+PiBPbmUgc2hvdWxkIHJl YWxseSB0aGluayBvZiB0aGUgZHJtX2F0b21pY19zdGF0ZSBhcyBtb3JlIG9mIGEgdHJhbnNhY3Rp b24KPiA+Pj4+PiByYXRoZXIgdGhhbiBhcyBhIHN0YXRlIChzaW5jZSBub3QgYWxsIG9iamVjdHMg bmVlZCBiZSBwYXJ0IG9mIGl0KS4KPiA+Pj4+IFRoYW5rIHlvdQo+ID4+Pj4+PiAyLiBJcyB0aGUg Y2hlY2sgKGVpdGhlciB0byBzZW5kIG9yIG5vdCkgZm9yIGNydGMtPnByaW1hcnktPmZiICE9IE5V TEwKPiA+Pj4+Pj4gZW5vdWdoPwo+ID4+Pj4+PiBJIGFzc3VtZSB0aGVyZSBhcmUgb3RoZXIgY2Fz ZXMgd2hlbiAuYXRvbWljX2ZsdXNoIGdldHMgY2FsbGVkLAo+ID4+Pj4+PiBzbyBpcyB0aGVyZSBh IHdheSBJIGNhbiBmaWx0ZXIgb3V0IHVubmVlZGVkIGNhc2VzPyBFLmcuIHRob3NlIHdoaWNoCj4g Pj4+Pj4+IGFyZSBub3QgZm9yIHBhZ2UgZmxpcHBpbmc/Cj4gPj4+Pj4gRWFjaCBvYmplY3QgdGFr aW5nIHBhcnQgaW4gdGhlIHRyYW5zYWN0aW9uIHdpbGwgaGF2ZSBhbiBhc3NvY2lhdGVkCj4gPj4+ Pj4gbmV3IHN0YXRlIGFuZCBvbGQgc3RhdGUuCj4gPj4+PiBBcyBJIHJlcGxpZWQgYWJvdmUgSSBv bmx5IGhhdmUgb2xkIHN0YXRlIGluIC5hdG9taWNfZmx1c2gKPiA+Pj4gT2ggcmlnaHQuIFRoYXQg d2F5IG9mIHBhc3NpbmcgdGhlIG9sZCBzdGF0ZSBvbmx5IGRhdGVzIGJhY2sgdG8gZWFybGllcgo+ ID4+PiBkYXlzIG9mIGF0b21pYy4gVG8gZmluZCB0aGUgbmV3IHN0YXRlIHdoYXQgeW91IHNob3Vs ZCBkbyB0aGVzZSBkYXlzCj4gPj4+IGlzIHNvbWV0aGluZyBsaWtlOgo+ID4+Pgo+ID4+PiBmb28o c3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgZHJtX2NydGNfc3RhdGUgKm9sZF9zdGF0ZSkK PiA+Pj4gewo+ID4+PiAJc3RydWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlID0gb2xkX3N0YXRl LT5zdGF0ZTsKPiA+Pj4gCXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqbmV3X3N0YXRlID0KPiA+Pj4g CQlkcm1fYXRvbWljX2dldF9uZXdfY3J0Y19zdGF0ZShzdGF0ZSwgY3J0Yyk7Cj4gPj4+IAkuLi4K PiA+Pj4KPiA+Pj4gVGhlIG9sZCB3YXkgd2FzIHRvIHVzZSB0aGUgY3J0Yy0+c3RhdGUgcG9pbnRl ciBhcyBlaXRoZXIgdGhlIG9sZAo+ID4+PiBvciBuZXcgc3RhdGUgZGVwZW5kaW5nIG9uIHdoZXJl IHlvdSBhcmUgaW4gdGhlIGNvbW1pdCBzZXF1ZW5jZS4KPiA+Pj4gQnV0IHRoYXQgd2Fzbid0IHZl cnkgZ29vZCBzbyBNYWFydGVuIGNoYW5nZWQgdGhpbmdzIHNvIHRoYXQgd2UKPiA+Pj4gbm93IGhh dmUgZXhwbGljaXQgb2xkIGFuZCBuZXcgc3RhdGVzIGZvciBlYWNoIG9iamVjdCB0cmFja2VkIGlu Cj4gPj4+IHRoZSBkcm1fYXRvbWljX3N0YXRlLgo+ID4+Pgo+ID4+PiBJIHRoaW5rIHdoYXQgd2Ug c2hvdWxkIHJlYWxseSBkbyBpcyBjaGFuZ2UgbW9zdCBvZiB0aGUgaG9va3MgdG8KPiA+Pj4gcGFz cyBjcnRjK2RybV9hdG9taWNfc3RhdGUgaW5zdGVhZCwgYW5kIGxldCBlYWNoIGZ1bmN0aW9uIGdy YWIKPiA+Pj4gdGhlIG9sZCBhbmQvb3IgbmV3IGNydGMgc3RhdGUgZnJvbSB0aGUgZHJtX2F0b21p Y19zdGF0ZSBhcyBuZWVkZWQuCj4gPj4+IEkgYmVsaWV2ZSB0aGF0IHdvdWxkIGF2b2lkIGNvbmZ1 c2luZyBwZW9wbGUgd2l0aCBqdXN0IHRoZSBvbGQgb3IKPiA+Pj4gbmV3IHN0YXRlLgo+ID4+IFRo YXQgd291bGQgYmUgZ3JlYXQKPiA+Pj4+PiAgICAgWW91IGNhbiBjb21wYXJlIHRoZSB0d28gdG8g ZmlndXJlIG91dCB3aGF0Cj4gPj4+Pj4gY2hhbmdlZCwgYW5kIGluIGFkZGl0aW9uIHRoZXJlIG1h eSBhbHJlYWR5IHNvbWUgZmxhZ3MgaW4gdGhlIGJhc2UKPiA+Pj4+PiBjbGFzcyBmb3IgdGhlIHN0 YXRlIHRoYXQgaW5kaWNhdGUgd2hhdCBtYXkgaGF2ZSBjaGFuZ2VkIChlZy4KPiA+Pj4+PiBkcm1f Y3J0Y19zdGF0ZTo6bW9kZV9jaGFuZ2VkIGV0Yy4pLiBTdWNoIGZsYWdzIG1heSBiZSBzZXQgYnkg dGhlCj4gPj4+Pj4gY29yZSB0byBoZWxwIGZpZ3VyZSBvdXQgd2hhdCBuZWVkcyBkb2luZy4KPiA+ Pj4+IFllcywgdGhhbmsgeW91Cj4gPj4+Pj4+IDMuIElmIGNvbW11bmljYXRpb24gd2l0aCB0aGUg YmFja2VuZCBmYWlscyB0aGVyZSBpcyBubyB3YXkgZm9yIG1lCj4gPj4+Pj4+IHRvIHRlbGwgdGhl IERSTSBjb3JlIGFib3V0IHRoaXMgYXMgLmF0b21pY19mbHVzaCBpcyBjYWxsZWQgYWZ0ZXIKPiA+ Pj4+Pj4gInRoZSBwb2ludCBvZiBubyByZXR1cm4iLiBEbyB5b3UgdGhpbmsgSSBjYW4gcmVtZW1i ZXIgdGhlIGVycm9yCj4gPj4+Pj4+IGNvZGUgYW5kIHJlcG9ydCBpdCBuZXh0IHRpbWUgLmF0b21p Y19jaGVjayBpcyBjYWxsZWQ/IFNvLCBvdGhlciBwYWdlCj4gPj4+Pj4+IGZsaXBzIHdpbGwgbm90 IHJ1biBvbiBicm9rZW4gY29ubmVjdGlvbiwgZm9yIGV4YW1wbGUuCj4gPj4+Pj4gRG8geW91IGtu b3cgd2hlbiBpdCBtaWdodCBmYWlsPwo+ID4+Pj4gTm90IHJlYWxseSwgdGhpcyBpcyBhIHNvZnR3 YXJlIHByb3RvY29sIHRvIHRhbGsgZnJvbQo+ID4+Pj4gdGhlIGZyb250ZW5kIHBhcmEtdmlydHVh bCBEUk0gZHJpdmVyIHRvIGl0cyBiYWNrZW5kCj4gPj4+PiBpbiBvdGhlciBYZW4gZG9tYWluCj4g Pj4+IEkgc2VlLiBXZWxsLCB3aXRob3V0IGV2aWRlbmNlIHRvIHRoZSBjb250cmFyeSBJJ2QgcHJv YmFibHkganVzdCBhc3N1bWUKPiA+Pj4gaXQnbGwgbmV2ZXIgZmFpbC4KPiA+PiBJIGFtIG5vdCBz dXJlIEkgY2FuIGd1YXJhbnRlZSB0aGlzCj4gPj4+ICAgIFRoYXQgYXZvaWRzIGNvbXBsaWNhdGlu ZyB0aGUgY29kZSB3aXRoIHBvdGVudGlhbGx5Cj4gPj4+IHVzZWxlc3MgbG9naWMuCj4gPj4gVW5m b3J0dW5hdGVseSwgSSdsbCBoYXZlIHRvIHB1dCBzb21ldGhpbmcgaW4KPiA+Pj4gICAgSGFtbWVy aW5nIGl0IHdpdGggc29tZXRoaW5nIGxpa2UgaWd0IGZvciBhIHdoaWxlIG1pZ2h0Cj4gPj4+IHNl cnZlIGFzIGEgZ29vZCB3YXkgdG8gdGVzdCB0aGF0IGFzc3VtcHRpb24uIE5vdCBzdXJlIGhvdyBt YW55IHRlc3RzIGluCj4gPj4+IGlndCBjdXJyZW50bHkgcnVuIG9uIG5vbi1pOTE1IHRob3VnaC4K PiA+PiBUaGUgZmlyc3QgdGVzdCBzdWl0ZSBJIHRyaWVkIHdhcyBJR1QgaW5kZWVkLCBidXQgdW5m b3J0dW5hdGVseQo+ID4+IGl0IGlzIGNvdXBsZWQgd2l0aCBpOTE1IHRvbyBtdWNoLCBzbyBvbmx5 IHZlcnkgYmFzaWMgdGVzdHMKPiA+PiBjb3VsZCBiZSBydW4uIFRoZW4gSSBmb3VuZCBbMV0gd2hp Y2ggY2FuIGJlIGVhc2lseSBleHRlbmRlZAo+ID4+IHdpdGhvdXQgbXVjaCBlZmZvcnRzLCBzbyBJ IHN0aWNrIHRvIGZvcmsgb2YgaXQgKGhvcGUgdG8gY29udHJpYnV0ZQo+ID4+IHRoZXJlIGxhdGVy LCBmb3IgZXhhbXBsZSwgYnkgYWRkaW5nIElPTiB0ZXN0cykKPiA+Pj4+PiAgICAgSWYgc28geW91 IHNob3VsZCBpbXBsZW1lbnQgdGhlIGFwcHJvcHJpYXRlCj4gPj4+Pj4gY2hlY2tzIGluIC5hdG9t aWNfY2hlY2soKSBldGMuIHRvIHRyeSBhbmQgbWFrZSBzdXJlIGl0IG5ldmVyIGhhcHBlbnMKPiA+ Pj4+PiAoYmFycmluZyBhIHRvdGFsIGhhcmR3YXJlIGZhaWx1cmUgZm9yIGV4YW1wbGUpLgo+ID4+ Pj4+Cj4gPj4+Pj4gR2VuZXJhbGx5IHdoYXQgd2UgKGk5MTUpIGRvIGlzIHRyeSB0byBjaGVjayBl dmVyeXRoaW5nIHVwIGZyb250LCBidXQgaWYKPiA+Pj4+PiBhbiB1bmV4cGVjdGVkIGVycm9yIGRv ZXMgaGFwcGVuIGxhdGVyIHdlIGp1c3QgbXVkZGxlIHRocm91Z2ggYW5kIGxvZyBhbgo+ID4+Pj4+ IGVycm9yLgo+ID4+Pj4+Cj4gPj4+Pj4gRm9yIHVzIEkgdGhpbmsgdGhlIG1vc3QgY29tbW9uIGxh dGUgZmFpbHVyZSBpcyBEUCBsaW5rIHRyYWluaW5nIGZhaWx1cmUuCj4gPj4+Pj4gVGhhdCB3ZSBj YW4ndCBmdWxseSBjaGVjayB1cCBmcm9udCBzaW5jZSBpdCBkZXBlbmRzIG9uIGV4dGVybmFsIGZh Y3RvcnM6Cj4gPj4+Pj4gc2luaywgZG9uZ2xlcywgY2FibGluZywgZXRjLiBGb3IgdGhvc2Ugd2Ug YWRkZWQgYSBuZXcgY29ubmVjdG9yIHByb3BlcnR5Cj4gPj4+Pj4gdG8gc2lnbmFsIHRvIHVzZXJz cGFjZSB0aGF0IHRoZSBsaW5rIGlzIGhhdmluZyBpc3N1ZXMsIGFsbG93aW5nCj4gPj4+Pj4gdXNl cnNwYWNlIHRvIHJlY29uZmlndXJlIHRoaW5ncyBzdWNoIHRoYXQgd2UgbG93ZXIgdGhlIGxpbmsg YmFuZHdpZHRoCj4gPj4+Pj4gcmVxdWlyZW1lbnRzLgo+ID4+Pj4gSSBjYW5ub3QgZG8gdGhhdCB0 aGlzIHdheSwgYmVjYXVzZSB0aGUgZHJpdmVyIGhhcyB0byBydW4KPiA+Pj4+IHNlYW1sZXNzbHkg Zm9yIHVzZXItc3BhY2UsIG5vIHNwZWNpZmljIHV0aWxpdGllc8KgIGFyZQo+ID4+Pj4gZXhwZWN0 ZWQgdG8gcnVuLgo+ID4+PiBUaGVyZSBtdXN0IGJlIHNvbWV0aGluZyBydW5uaW5nIG9yIHlvdSBu ZXZlciBnZXQgYW55dGhpbmcgb24gdGhlIHNjcmVlbi4KPiA+Pj4KPiA+PiBZZXMsIHNvcnJ5IGZv ciBub3QgYmVpbmcgcHJlY2lzZTogSSBtZWFudCB0aGF0IG5vdGhpbmcKPiA+PiBkcml2ZXIgc3Bl Y2lmaWMsIGUuZy4gd2hpY2gga25vd3MgaW50ZXJuYWxzIG9mIHRoZSBkcml2ZXIuCj4gPj4+Pj4g VGhlIGxpbmtfc3RhdHVzIG1lY2hhbmlzbSBjb3VsZCBwZXJoYXBzIGJlIHVzZWQgdG8gdG8gd29y ayBhcm91bmQgb3RoZXIKPiA+Pj4+PiAibGF0ZSBlcnJvcnMiLiBCdXQgaW4gZ2VuZXJhbCBpZiB5 b3Ugd2FudCB0byBzb21laG93IGZpeCB0aGF0IGVycm9yIHlvdQo+ID4+Pj4+IGhhdmUgdG8ga25v dyB3aGF0IGNhdXNlZCBpdCwgbm8/Cj4gPj4+PiBUaGF0IGlzIGNvcnJlY3QsIHNvIEkgd2lsbCBw cmludCBhbiBlcnJvciBtZXNzYWdlIG9uCj4gPj4+PiBwYWdlIGZsaXAgZXJyb3Igc28gdXNlciBo YXMgYXQgbGlzdCBhIGNsdWUgb24gd2hhdCdzCj4gPj4+PiB3cm9uZwo+ID4+Pj4+ICAgICBTbyBp ZiB5b3UganVzdCBnZXQgYSByYW5kb20gZXJyb3IgZm9yCj4gPj4+Pj4gc2VlbWluZ2x5IG5vIHJl YXNvbiB0aGVyZSdzIHZlcnkgbGl0dGxlIHlvdSBjYW4gZG8gYXBhcnQgZnJvbSBibGluZGx5Cj4g Pj4+Pj4gcmV0cnlpbmcgYW5kIGxvZ2dpbmcgYW4gZXJyb3IuIEZvciB0aGUgRFAgY2FzZSB0aGUg ZmFsbGJhY2sgbWVjaGFuaXNtIGlzCj4gPj4+Pj4gcHJldHR5IGNsZWFyOiByZWR1Y2UgbGluayBy YXRlIGFuZC9vciBudW1iZXIgb2YgbGFuZXMuCj4gPj4+Pj4KPiA+Pj4+PiBBcyBmb3Igc2lnbmFs bGluZyB0aGUgZXJyb3IgaW4gdGhlIG5leHQgaW9jdGwgY2FsbCwgdGhhdCBjb3VsZCBiZSBkb25l Cj4gPj4+Pj4gSSBzdXBwb3NlLgo+ID4+Pj4gSSB0cmllZCB0aGF0IGFwcHJvYWNoIGFuZCBpdCBz ZWVtcyB0byB3b3JrLgo+ID4+Pj4+ICAgICBCdXQgYWdhaW4gdGhlIHF1ZXN0aW9uIGlzIGhvdyB3 b3VsZCB1c2Vyc3BhY2Uga25vdyB3aGF0Cj4gPj4+Pj4gKGlmIGFueXRoaW5nKSBpdCBjYW4gZG8g dG8gZml4IHRoZSBwcm9ibGVtPwo+ID4+Pj4gV2VsbCwgdGhpcyB3b3VsZCBiZSBzZWVuIGFzIGp1 c3QgYW4gZXJyb3IgdG8gdXNlci1zcGFjZQo+ID4+Pj4gYW5kIHVuZm9ydHVuYXRlbHkgaWYgaXQg aXMgbm90IHByZXBhcmVkIHRvIGRlYWwgd2l0aCB0aGVuIGl0IHdpbGwKPiA+Pj4+IGNsb3NlLiBO b3Qgc3VyZSBJIGNhbiBkbyBhbnl0aGluZyBzbWFydCBhYm91dCBpdAo+ID4+Pj4+PiA0LiBBcyBw ZXIgbXkgdW5kZXJzdGFuZGluZyBJIGNhbm5vdCBwdXQgWEVORElTUExfT1BfUEdfRkxJUCByZXF1 ZXN0Cj4gPj4+Pj4+IGludG8gLmF0b21pY19jaGVjayBhcyB0aGUgY2hlY2sgZG9lc24ndCBndWFy YW50ZWUgdGhhdCAuYXRvbWljX2ZsdXNoCj4gPj4+Pj4+IHdpbGwgZm9sbG93LiBJcyB0aGlzIGNv cnJlY3Qgb3IgdGhlcmUgaXMgYSBtb3JlIG5lYXQgc29sdXRpb24gZXhpc3RzPwo+ID4+Pj4+IFRo b3Ugc2hhbHQgbm90IHRvdWNoIHRoZSBoYXJkd2FyZSB1bnRpbCAuYXRvbWljX2NvbW1pdCgpLiBO b3RlIHRoYXQKPiA+Pj4+PiAuYXRvbWljX2NvbW1pdCgpIGl0c2VsZiBpcyBzdGlsbCBhbGxvd2Vk IHRvIGZhaWwsIGJ1dCBvbmx5IGlmIHlvdQo+ID4+Pj4+IGNhbiBmYWlsIGF0b21pY2FsbHkuCj4g Pj4+Pj4KPiA+Pj4+PiBUaGUgLmF0b21pY19mbHVzaCgpICYgY28uIGhlbHBlciBzdHVmZiBpcyBk ZXNpZ25lZCBpbiBhIHdheSB0aGF0Cj4gPj4+Pj4gZXhwZWN0cyBubyBmYWlsdXJlcyBhdCB0aGF0 IGxhdGUgc3RhZ2Ugb2YgdGhlIGNvbW1pdC4gSWYgdGhhdAo+ID4+Pj4+IGRvZXNuJ3Qgc3VpdCB5 b3VyIGhhcmR3YXJlIGRlc2lnbiB0aGVuIHlvdSBtYXkgb3B0IHRvIG5vdCB1c2UgdGhlCj4gPj4+ Pj4gaGVscGVyLgo+ID4+Pj4+Cj4gPj4+Pj4gQWxzbyBub3RlIHRoYXQgbm9uLWJsb2NraW5nIG9w ZXJhdGlvbnMgY2FuIG1ha2UgdGhpcyBldmVuIG1vcmUgZGlmZmljdWx0Cj4gPj4+Pj4gYmVjYXVz ZSBpbiB0aGF0IGNhc2UgZXZlbiAuYXRvbWljX2NvbW1pdCgpIGRvZXNuJ3QgZ2VuZXJhbGx5IHRv dWNoCj4gPj4+Pj4gdGhlIGhhcmR3YXJlIGFuZCBpbnN0ZWFkIHRoYXQgdGFzayBpcyBkZWxlZ2F0 ZWQgdG8gZWcuIGEgd29yayBxdWV1ZS4KPiA+Pj4+PiBTbyBieSB0aGUgdGltZSB0aGUgaGFyZHdh cmUgaW5kaWNhdGVzIGFuIGVycm9yIHRoZSBpb2N0bCBoYXMgbG9uZyBzaW5jZQo+ID4+Pj4+IHJl dHVybmVkIHRvIHVzZXJzcGFjZS4KPiA+Pj4+Pgo+ID4+Pj4gVGhpcyBpcyBteSBjYXNlIGFzIEkg c2VuZCBhIHBhZ2UgZmxpcCByZXF1ZXN0IHRvIHRoZSBiYWNrZW5kCj4gPj4+PiBhbmQgbGF0ZXIg aW4gdGltZSByZWNlaXZlIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlLgo+ID4+Pj4KPiA+Pj4+ IERvIHlvdSBtaW5kIGxvb2tpbmcgYXQgbXkgY3VycmVudCBXSVAgaW1wbGVtZW50YXRpb24gb2YK PiA+Pj4+IGF0b21pYyBjb21taXQgWzFdLCBbMl0/IFRoaXMgd29yayBpcyBkb25lIGFzIGEgcHJl cGFyYXRpb24gZm9yCj4gPj4+PiB1cHN0cmVhbWluZyB0aGUgZHJpdmVyIGFuZCBpcyBzdGlsbCBp biBwcm9ncmVzcyB0aG91Z2guCj4gPj4+IFVzdWFsbHkgb25lIHdvdWxkIGhhbmRsZSBwYWdlIGZs aXBzIGZyb20gdGhlIHBsYW5lJ3MgLmF0b21pY191cGRhdGUoKQo+ID4+PiBob29rIGluc3RlYWQg b2YgdGhlIGNydGMncyAuYXRvbWljX2ZsdXNoKCkuIEJ1dCBpZiB5b3Ugb25seSBoYXZlIHRoZSBv bmUKPiA+Pj4gcGxhbmUgdGhlbiB0aGlzIGNvdWxkIHdvcmsuIEJ1dCB5b3Ugc2hvdWxkIGdldCBh dCB0aGUgcGxhbmUgZmIgdmlhCj4gPj4+IGRybV9hdG9taWNfZ2V0X25ld19wbGFuZV9zdGF0ZSgp IGV0Yy4KPiA+Pj4KPiA+Pj4gR2VuZXJhbGx5IGxvb2tzIGxpa2UgeW91IG5lZWQgc29tZSBtb3Jl IHdvcmsgb24gdGhlIHBsYW5lIC5hdG9taWNfY2hlY2soKQo+ID4+PiBmdW5jdGlvbi4gVXNpbmcg ZHJtX2F0b21pY19oZWxwZXJfY2hlY2tfcGxhbmVfc3RhdGUoKSBzaG91bGQgZ2V0IHlvdQo+ID4+ PiBtb3N0IG9mIHRoZSB3YXkgdGhlcmUgSSdkIGltYWdpbmUuIE5vdCBzdXJlIGlmIGRpc2FibGlu ZyB0aGUgcGxhbmUKPiA+Pj4gaW5kZXBlbmRlbnRseSBvZiB0aGUgY3J0YyBtYWtlcyBhbnkgc2Vu c2UsIGJ1dCBpZiBub3QgeW91IHNob3VsZAo+ID4+PiBsb29rIGF0IGRybV9zaW1wbGVfa21zX2hl bHBlci5jIGZvciBhbiBleGFtcGxlLiBIbW0uIE5vdCBzdXJlIGlmIHlvdQo+ID4+PiBjb3VsZG4n dCBqdXN0IHVzZSBkcm1fc2ltcGxlX2ttc19oZWxwZXIuYyB5b3Vyc2VsZiBhY3R1YWxseS4KPiA+ PiBHcmVhdCEgQXMgSSBhbSBtb3ZpbmcgYXdheSBmcm9tIGxlZ2FjeSBzdHVmZiB0aGlzIGlzIGEK PiA+PiBwZXJmZWN0IGZpdCBub3cuIFNvLCBJIHdpbGwgYmFzZSBvbiBkcm1fc2ltcGxlX2ttc19o ZWxwZXIuCj4gPj4KPiA+PiBCVFcsIGl0IGhhcyBhIHNtYWxsIGlzc3VlIHdoaWNoIGNhbiBiZSBl YXNpbHkgc29sdmVkIGluIHRoZQo+ID4+IERSTSBjb3JlIEkgYmVsaWV2ZTogaWYgeW91ciBkcml2 ZXIgbmVlZHMgdG8gd29yayB3aXRoIHZibGFua3MsCj4gPj4gdGhlbiB5b3UgaGF2ZSB0byBwcm92 aWRlIGRybV9kcml2ZXIuZW5hYmxlX3ZibGFuay9kaXNhYmxlX3ZibGFuawo+ID4+IGJlY2F1c2Ug ZHJtX3NpbXBsZV9rbXNfaGVscGVyLmRybV9jcnRjX2Z1bmNzIGRvIG5vdCBwcm92aWRlIGFueS4K PiA+PiBUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgZHJtX2RyaXZlci5lbmFibGVfdmJsYW5rL2Rp c2FibGVfdmJsYW5rCj4gPj4gYXJlIG1vc3QgcHJvYmFibHkgZHVtbXkgZnVuY3Rpb25zIGFuZCB3 aGF0IGlzIG1vcmUgdGhleSBhcmUgbWFya2VkCj4gPj4gYXMgZGVwcmVjYXRlZC4KPiA+IEhtbS4g T2gsIEkgdGhpbmsgc29tZW9uZSBqdXN0IHdhbnRlZCBwZW9wbGUgdG8gbW92ZSB0byB1c2luZyB0 aGUKPiA+IGNvcnJlc3BvbmRpbmcgaG9va3MgaW4gdGhlIGNydGMgZnVuY3MuCj4gTXkgdW5kZXJz dGFuZGluZyBpcyB0aGF0IHRoYXQgd2FzIHRoZSBpbnRlbnRpb24KPiA+IEknbSBub3Qgc3VyZSBo b3cgcGVvcGxlIGRvIHRoaW5ncwo+ID4gd2hlbiB0aGV5IGRvbid0IGhhdmUgdmJsYW5rIGludGVy cnVwdHMsIGJ1dCBJIHRoaW5rIGluIGdlbmVyYWwgaWYgeW91Cj4gPiBkb24ndCBpbml0aWFsaXpl IHZibGFuayBzdXBwb3J0IHRob3NlIGhvb2tzIHNob3VsZG4ndCBnZXQgY2FsbGVkLgo+IFRoYXQg aXMgY29ycmVjdCwgYnV0IGlmIHRoZSBkcml2ZXIgaXMgZHJtX3NpbXBsZV9rbXNfaGVscGVyCj4g YmFzZWQgYW5kIHdhbnRzIHZibGFua3MsIHRoZW4geW91J2xsIGhhdmUgdG8gZG8gc29tZXRoaW5n Cj4gbGlrZSBbMV0sIFsyXS4KPiBBdCB0aGUgc2FtZSB0aW1lIFszXSwgWzRdIHNheSBlbmFibGVf dmJsYW5rL2Rpc2FibGVfdmJsYW5rCj4gYXJlIGRlcHJlY2F0ZWQgaW4gc3RydWN0IGRybV9kcml2 ZXIuCj4gU28sIEkgdGhpbmsgdGhhdCBkcm1fc2ltcGxlX2ttc19oZWxwZXIgYW5kIGl0cyBkcm1f Y3J0Y19mdW5jcwo+IHNob3VsZCBwcm92aWRlIGNvcnJlc3BvbmRpbmcgY2FsbGJhY2tzIGluIG9y ZGVyIHRvIGF2b2lkIHVzaW5nCj4gZGVwcmVjYXRlZCBmdW5jdGlvbmFsaXR5LgoKSSBzZWUuIFdl bGwsIEknbSBzdXJlIHBlb3BsZSBhcmUgd2lsbGluZyB0byBlbnRlcnRhaW4gcGF0Y2hlcyA7KQoK PiBbMV0gCj4gaHR0cDovL2VsaXhpci5ib290bGluLmNvbS9saW51eC92NC4xNS4yL3NvdXJjZS9k cml2ZXJzL2dwdS9kcm0vcGwxMTEvcGwxMTFfZHJ2LmMjTDE4MQo+IFsyXSAKPiBodHRwOi8vZWxp eGlyLmJvb3RsaW4uY29tL2xpbnV4L3Y0LjE1LjIvc291cmNlL2RyaXZlcnMvZ3B1L2RybS9teHNm Yi9teHNmYl9kcnYuYyNMMzM2Cj4gWzNdIAo+IGh0dHA6Ly9lbGl4aXIuYm9vdGxpbi5jb20vbGlu dXgvdjQuMTUuMi9zb3VyY2UvaW5jbHVkZS9kcm0vZHJtX2Rydi5oI0wyMDYKPiBbNF0gCj4gaHR0 cDovL2VsaXhpci5ib290bGluLmNvbS9saW51eC92NC4xNS4yL3NvdXJjZS9pbmNsdWRlL2RybS9k cm1fZHJ2LmgjTDIyMgoKLS0gClZpbGxlIFN5cmrDpGzDpApJbnRlbCBPVEMKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlz dApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==