From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v2 1/8] drm/rect: Add some drm_clip_rect utility functions Date: Mon, 25 Apr 2016 18:05:20 +0200 Message-ID: <20160425160520.GV2510@phenom.ffwll.local> References: <1461530942-22485-1-git-send-email-noralf@tronnes.org> <1461530942-22485-2-git-send-email-noralf@tronnes.org> <20160425123907.GY4329@intel.com> <571E13D8.4060100@tronnes.org> <20160425130229.GZ4329@intel.com> <571E23A1.2040100@tronnes.org> <20160425150944.GB4329@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x229.google.com (mail-wm0-x229.google.com [IPv6:2a00:1450:400c:c09::229]) by gabe.freedesktop.org (Postfix) with ESMTPS id 311C96E666 for ; Mon, 25 Apr 2016 16:05:26 +0000 (UTC) Received: by mail-wm0-x229.google.com with SMTP id n3so135654846wmn.0 for ; Mon, 25 Apr 2016 09:05:26 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20160425150944.GB4329@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Cc: linux-fbdev@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, tomi.valkeinen@ti.com, laurent.pinchart@ideasonboard.com List-Id: dri-devel@lists.freedesktop.org T24gTW9uLCBBcHIgMjUsIDIwMTYgYXQgMDY6MDk6NDRQTSArMDMwMCwgVmlsbGUgU3lyasOkbMOk IHdyb3RlOgo+IE9uIE1vbiwgQXByIDI1LCAyMDE2IGF0IDA0OjAzOjEzUE0gKzAyMDAsIE5vcmFs ZiBUcsO4bm5lcyB3cm90ZToKPiA+IAo+ID4gRGVuIDI1LjA0LjIwMTYgMTU6MDIsIHNrcmV2IFZp bGxlIFN5cmrDpGzDpDoKPiA+ID4gT24gTW9uLCBBcHIgMjUsIDIwMTYgYXQgMDI6NTU6NTJQTSAr MDIwMCwgTm9yYWxmIFRyw7hubmVzIHdyb3RlOgo+ID4gPj4gRGVuIDI1LjA0LjIwMTYgMTQ6Mzks IHNrcmV2IFZpbGxlIFN5cmrDpGzDpDoKPiA+ID4+PiBPbiBTdW4sIEFwciAyNCwgMjAxNiBhdCAx MDo0ODo1NVBNICswMjAwLCBOb3JhbGYgVHLDuG5uZXMgd3JvdGU6Cj4gPiA+Pj4+IEFkZCBzb21l IHV0aWxpdHkgZnVuY3Rpb25zIGZvciBzdHJ1Y3QgZHJtX2NsaXBfcmVjdC4KPiA+ID4+PiBMb29r cyBsaWtlIG1vc3RseSB5b3UncmUganVzdCBkdXBsaWNhdGluZyB0aGUgZHJtX3JlY3Qgc3R1ZmYu IFdoeSBjYW4ndAo+ID4gPj4+IHlvdSB1c2Ugd2hhdCdzIHRoZXJlIGFscmVhZHk/Cj4gPiA+PiBU aGF0J3MgYmVjYXVzZSB0aGUgZnJhbWVidWZmZXIgZmx1c2hpbmcgdXNlcyBkcm1fY2xpcF9yZWN0 IGFuZCBub3QgZHJtX3JlY3Q6Cj4gPiA+IENvbnZlcnRpbmcgdG8gZHJtX3JlY3QgaXMgbm90IGFu IG9wdGlvbj8KPiA+IAo+ID4gVGhhdCdzIGRpZmZpY3VsdCBvciBhdCBsZWFzdCB2ZXJib3NlIHRv IGRvIGJlY2F1c2UgY2xpcHMgaXMgYW4gYXJyYXkuCj4gPiBJIGNvdWxkIHVzZSBkcm1fcmVjdCBv biB0aGUgY2FsbGluZyBzaWRlIChmYmRldikgc2luY2UgaXQncyBvbmx5IG9uZSBjbGlwCj4gPiB3 aGljaCB0aGUgY2hhbmdlcyBhcmUgbWVyZ2VkIGludG8sIGFuZCB0aGVuIGNvbnZlcnQgaXQgd2hl biBJIGNhbGwgZGlydHkoKS4KPiA+IEJ1dCB0aGUgZHJpdmVyIGNhbiBnZXQgemVybyBvciBtb3Jl IGNsaXBzIGZyb20gdGhlIGRpcnR5IGlvY3RsIHNvIEkgZG9uJ3QKPiA+IHNlZSBhIGNsZWFuIHdh eSB0byBjb252ZXJ0IHRoaXMgYXJyYXkgdG8gZHJtX3JlY3Qgd2l0aG91dCBtb3JlIGNvZGUgdGhh bgo+ID4gdGhpcyBwcm9wb3NhbCBoYXMuCj4gCj4gSnVzdCBzb21lIGtpbmQgb2Ygc2ltcGxlIGRy bV9jbGlwX3JlY3RfdG9fcmVjdCgpIHRoaW5nIHNob3VsZCBiZSBlbm91Z2ggQUZBSUNTLgoKWWVh aCwgZHJtX2NsaXBfcmVjdCBpcyB0aGUgdWFwaSBzdHJ1Y3QsIGRybV9yZWN0IGlzIHRoZSBpbnRl cm5hbCBvbmUuClNpbWlsYXIgY2FzZSBpcyBkcm1fZGlzcGxheV9tb2RlIHZzLiBkcm1fbW9kZV9t b2RlaW5mby4gV2UgaGF2ZQp1bW9kZV90b19tb2RlIGFuZCBtb2RlX3RvX3Vtb2RlIGhlbHBlcnMg dG8gZGVhbCB3aXRoIHRoYXQuIEkgZG8gYWdyZWUgdGhhdAppdCB3b3VsZCBtYWtlIHNlbnNlIHRv IHN3aXRjaCB0aGUgaW50ZXJuYWwgLT5kaXJ0eSBjYWxsYmFjayBvdmVyIHRvIHRoZQppbnRlcm5h bCBkcm1fc3RydWN0LiBXb3VsZCBuZWVkIGEga21hbGxvYytjb3B5IGluIHRoZSBkaXJ0eWZiIGlv Y3RsLCBidXQKc2luY2UgdGhlIHN0cnVjdHMgYWN0dWFsbHkgbWF0Y2ggaW4gdGhlaXIgbWVtYmVy IG5hbWVzIChqdXN0IG5vdCB0aGUKc2l6ZS9zaWduZWRuZXNzLCBzaWdoKSB0aGVyZSBzaG91bGRu J3QgYmUgYW55IG5lZWQgZm9yIGRyaXZlciBjaGFuZ2VzLiBTbwpmYWlybHkgc2ltcGxlIHBhdGNo LgoKT2ZjIHlvdSBuZWVkIHRvIGNvbXBpbGUtdGVzdCBhbGwgdGhlIGRyaXZlcnMgKGF0IGxlYXN0 IHRob3NlIHVzaW5nIC0+ZGlydHkKaG9vaykgdG8gbWFrZSBzdXJlIGdjYyBpcyBzdGlsbCBoYXBw eSB3aXRoIGFsbCB0aGUgc2lnbmVkIHZzLiB1bnNpZ25lZApzdHVmZi4gTWF5YmUgdGhhdCB0dXJu cyB1cCBzb21ldGhpbmcsIGJ1dCBob3BlZnVsbHkgbm90LgoKU29ycnkgZm9yIHRoYXQgbGF0ZSBy ZXF1ZXN0LCBidXQgSSByZWFsbHkgZGlkbid0IHJlYWxpemUgd2hhdCdzIGdvaW5nIG9uCmhlcmUg OigKLURhbmllbAoKPiAKPiA+IAo+ID4gSGVyZSdzIHRoZSBkcml2ZXIgc2lkZToKPiA+IAo+ID4g c3RhdGljIGludCBtaXBpX2RiaV9kaXJ0eWZiKHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLCB2 b2lkICp2bWVtLAo+ID4gICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmbGFncywgdW5zaWduZWQg Y29sb3IsCj4gPiAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpjbGlwcywg dW5zaWduZWQgbnVtX2NsaXBzKQo+ID4gewo+ID4gICAgICBzdHJ1Y3QgdGlueWRybV9kZXZpY2Ug KnRkZXYgPSBmYi0+ZGV2LT5kZXZfcHJpdmF0ZTsKPiA+ICAgICAgc3RydWN0IGxjZHJlZyAqcmVn ID0gdGRldi0+bGNkcmVnOwo+ID4gICAgICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCBmdWxsX2NsaXAg PSB7Cj4gPiAgICAgICAgICAueDEgPSAwLAo+ID4gICAgICAgICAgLngyID0gZmItPndpZHRoLAo+ ID4gICAgICAgICAgLnkxID0gMCwKPiA+ICAgICAgICAgIC55MiA9IGZiLT5oZWlnaHQsCj4gPiAg ICAgIH07Cj4gPiAgICAgIHN0cnVjdCBkcm1fY2xpcF9yZWN0IGNsaXA7Cj4gPiAgICAgIGludCBy ZXQ7Cj4gPiAKPiA+ICAgICAgZHJtX2NsaXBfcmVjdF9yZXNldCgmY2xpcCk7Cj4gPiAgICAgIGRy bV9jbGlwX3JlY3RfbWVyZ2UoJmNsaXAsIGNsaXBzLCBudW1fY2xpcHMsIGZsYWdzLAo+ID4gICAg ICAgICAgICAgICAgICBmYi0+d2lkdGgsIGZiLT5oZWlnaHQpOwo+ID4gICAgICBpZiAoIWRybV9j bGlwX3JlY3RfaW50ZXJzZWN0KCZjbGlwLCAmZnVsbF9jbGlwKSkgewo+ID4gICAgICAgICAgRFJN X0RFQlVHX0tNUygiRW1wdHkgY2xpcFxuIik7Cj4gPiAgICAgICAgICByZXR1cm4gLUVJTlZBTDsK PiA+ICAgICAgfQo+ID4gWy4uLl0KPiAKPiA+IAo+ID4gPj4gc3RydWN0IGRybV9mcmFtZWJ1ZmZl cl9mdW5jcyB7Cj4gPiA+PiBbLi4uXQo+ID4gPj4gICAgICAgICAgIGludCAoKmRpcnR5KShzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyICpmcmFtZWJ1ZmZlciwKPiA+ID4+ICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsIHVuc2lnbmVkIGZsYWdzLAo+ID4gPj4g ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjb2xvciwgc3RydWN0IGRybV9jbGlwX3Jl Y3QgKmNsaXBzLAo+ID4gPj4gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBudW1fY2xp cHMpOwo+ID4gPj4gfTsKPiA+ID4+Cj4gPiA+Pj4+IFNpZ25lZC1vZmYtYnk6IE5vcmFsZiBUcsO4 bm5lcyA8bm9yYWxmQHRyb25uZXMub3JnPgo+ID4gPj4+PiAtLS0KPiA+ID4+Pj4gICAgZHJpdmVy cy9ncHUvZHJtL2RybV9yZWN0LmMgfCA2NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwo+ID4gPj4+PiAgICBpbmNsdWRlL2RybS9kcm1fcmVjdC5oICAgICB8IDY5 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiA+ID4+Pj4g ICAgMiBmaWxlcyBjaGFuZ2VkLCAxMzYgaW5zZXJ0aW9ucygrKQo+ID4gPj4+Pgo+ID4gPj4+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9yZWN0LmMgYi9kcml2ZXJzL2dwdS9kcm0v ZHJtX3JlY3QuYwo+ID4gPj4+PiBpbmRleCBhOGUyYzg2Li5hOWZiMWE4IDEwMDY0NAo+ID4gPj4+ PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3JlY3QuYwo+ID4gPj4+PiArKysgYi9kcml2ZXJz L2dwdS9kcm0vZHJtX3JlY3QuYwo+ID4gPj4+PiBAQCAtNDM0LDMgKzQzNCw3MCBAQCB2b2lkIGRy bV9yZWN0X3JvdGF0ZV9pbnYoc3RydWN0IGRybV9yZWN0ICpyLAo+ID4gPj4+PiAgICAJfQo+ID4g Pj4+PiAgICB9Cj4gPiA+Pj4+ICAgIEVYUE9SVF9TWU1CT0woZHJtX3JlY3Rfcm90YXRlX2ludik7 Cj4gPiA+Pj4+ICsKPiA+ID4+Pj4gKy8qKgo+ID4gPj4+PiArICogZHJtX2NsaXBfcmVjdF9pbnRl cnNlY3QgLSBpbnRlcnNlY3QgdHdvIGNsaXAgcmVjdGFuZ2xlcwo+ID4gPj4+PiArICogQHIxOiBm aXJzdCBjbGlwIHJlY3RhbmdsZQo+ID4gPj4+PiArICogQHIyOiBzZWNvbmQgY2xpcCByZWN0YW5n bGUKPiA+ID4+Pj4gKyAqCj4gPiA+Pj4+ICsgKiBDYWxjdWxhdGUgdGhlIGludGVyc2VjdGlvbiBv ZiBjbGlwIHJlY3RhbmdsZXMgQHIxIGFuZCBAcjIuCj4gPiA+Pj4+ICsgKiBAcjEgd2lsbCBiZSBv dmVyd3JpdHRlbiB3aXRoIHRoZSBpbnRlcnNlY3Rpb24uCj4gPiA+Pj4+ICsgKgo+ID4gPj4+PiAr ICogUkVUVVJOUzoKPiA+ID4+Pj4gKyAqICV0cnVlIGlmIHJlY3RhbmdsZSBAcjEgaXMgc3RpbGwg dmlzaWJsZSBhZnRlciB0aGUgb3BlcmF0aW9uLAo+ID4gPj4+PiArICogJWZhbHNlIG90aGVyd2lz ZS4KPiA+ID4+Pj4gKyAqLwo+ID4gPj4+PiArYm9vbCBkcm1fY2xpcF9yZWN0X2ludGVyc2VjdChz dHJ1Y3QgZHJtX2NsaXBfcmVjdCAqcjEsCj4gPiA+Pj4+ICsJCQkgICAgIGNvbnN0IHN0cnVjdCBk cm1fY2xpcF9yZWN0ICpyMikKPiA+ID4+Pj4gK3sKPiA+ID4+Pj4gKwlyMS0+eDEgPSBtYXgocjEt PngxLCByMi0+eDEpOwo+ID4gPj4+PiArCXIxLT55MSA9IG1heChyMS0+eTEsIHIyLT55MSk7Cj4g PiA+Pj4+ICsJcjEtPngyID0gbWluKHIxLT54MiwgcjItPngyKTsKPiA+ID4+Pj4gKwlyMS0+eTIg PSBtaW4ocjEtPnkyLCByMi0+eTIpOwo+ID4gPj4+PiArCj4gPiA+Pj4+ICsJcmV0dXJuIGRybV9j bGlwX3JlY3RfdmlzaWJsZShyMSk7Cj4gPiA+Pj4+ICt9Cj4gPiA+Pj4+ICtFWFBPUlRfU1lNQk9M KGRybV9jbGlwX3JlY3RfaW50ZXJzZWN0KTsKPiA+ID4+Pj4gKwo+ID4gPj4+PiArLyoqCj4gPiA+ Pj4+ICsgKiBkcm1fY2xpcF9yZWN0X21lcmdlIC0gTWVyZ2UgY2xpcCByZWN0YW5nbGVzCj4gPiA+ Pj4+ICsgKiBAZHN0OiBkZXN0aW5hdGlvbiBjbGlwIHJlY3RhbmdsZQo+ID4gPj4+PiArICogQHNy Yzogc291cmNlIGNsaXAgcmVjdGFuZ2xlKHMpLCBjYW4gYmUgTlVMTAo+ID4gPj4+PiArICogQG51 bV9jbGlwczogbnVtYmVyIG9mIHNvdXJjZSBjbGlwIHJlY3RhbmdsZXMKPiA+ID4+Pj4gKyAqIEBm bGFnczogZHJtX21vZGVfZmJfZGlydHlfY21kIGZsYWdzIChEUk1fTU9ERV9GQl9ESVJUWV9BTk5P VEFURV9DT1BZKQo+ID4gPj4+PiArICogQHdpZHRoOiB3aWR0aCBvZiBjbGlwIHJlY3RhbmdsZSBp ZiBAc3JjIGlzIE5VTEwKPiA+ID4+Pj4gKyAqIEBoZWlnaHQ6IGhlaWdodCBvZiBjbGlwIHJlY3Rh bmdsZSBpZiBAc3JjIGlzIE5VTEwKPiA+ID4+Pj4gKyAqCj4gPiA+Pj4+ICsgKiBUaGUgZGlydHlm YiBpb2N0bCBhbGxvd3MgZm9yIGEgTlVMTCBjbGlwIHJlY3RhbmdsZSB0byBiZSBwYXNzZWQgaW4s Cj4gPiA+Pj4+ICsgKiBzbyBpZiBAc3JjIGlzIE5VTEwsIHdpZHRoIGFuZCBoZWlnaHQgaXMgdXNl ZCB0byBzZXQgYSBmdWxsIGNsaXAgcmVjdGFuZ2xlLgo+ID4gPj4+PiArICogQGRzdCB0YWtlcyBw YXJ0IGluIHRoZSBtZXJnZSB1bmxlc3MgaXQgaXMgZW1wdHkgezAsMCwwLDB9Lgo+ID4gPj4+PiAr ICovCj4gPiA+Pj4+ICt2b2lkIGRybV9jbGlwX3JlY3RfbWVyZ2Uoc3RydWN0IGRybV9jbGlwX3Jl Y3QgKmRzdCwKPiA+ID4+Pj4gKwkJCSBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqc3JjLCB1bnNpZ25l ZCBudW1fY2xpcHMsCj4gPiA+Pj4+ICsJCQkgdW5zaWduZWQgZmxhZ3MsIHUzMiB3aWR0aCwgdTMy IGhlaWdodCkKPiA+ID4+Pj4gK3sKPiA+ID4+Pj4gKwlpbnQgaTsKPiA+ID4+Pj4gKwo+ID4gPj4+ PiArCWlmICghc3JjIHx8ICFudW1fY2xpcHMpIHsKPiA+ID4+Pj4gKwkJZHN0LT54MSA9IDA7Cj4g PiA+Pj4+ICsJCWRzdC0+eDIgPSB3aWR0aDsKPiA+ID4+Pj4gKwkJZHN0LT55MSA9IDA7Cj4gPiA+ Pj4+ICsJCWRzdC0+eTIgPSBoZWlnaHQ7Cj4gPiA+Pj4+ICsJCXJldHVybjsKPiA+ID4+Pj4gKwl9 Cj4gPiA+Pj4+ICsKPiA+ID4+Pj4gKwlpZiAoZHJtX2NsaXBfcmVjdF9pc19lbXB0eShkc3QpKSB7 Cj4gPiA+Pj4+ICsJCWRzdC0+eDEgPSB+MDsKPiA+ID4+Pj4gKwkJZHN0LT55MSA9IH4wOwo+ID4g Pj4+PiArCX0KPiA+ID4+Pj4gKwo+ID4gPj4+PiArCWZvciAoaSA9IDA7IGkgPCBudW1fY2xpcHM7 IGkrKykgewo+ID4gPj4+PiArCQlpZiAoZmxhZ3MgJiBEUk1fTU9ERV9GQl9ESVJUWV9BTk5PVEFU RV9DT1BZKQo+ID4gPj4+PiArCQkJaSsrOwo+ID4gPj4+PiArCQlkc3QtPngxID0gbWluKGRzdC0+ eDEsIHNyY1tpXS54MSk7Cj4gPiA+Pj4+ICsJCWRzdC0+eDIgPSBtYXgoZHN0LT54Miwgc3JjW2ld LngyKTsKPiA+ID4+Pj4gKwkJZHN0LT55MSA9IG1pbihkc3QtPnkxLCBzcmNbaV0ueTEpOwo+ID4g Pj4+PiArCQlkc3QtPnkyID0gbWF4KGRzdC0+eTIsIHNyY1tpXS55Mik7Cj4gPiA+Pj4+ICsJfQo+ ID4gPj4+PiArfQo+ID4gPj4+PiArRVhQT1JUX1NZTUJPTChkcm1fY2xpcF9yZWN0X21lcmdlKTsK PiA+ID4+Pj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9yZWN0LmggYi9pbmNsdWRlL2Ry bS9kcm1fcmVjdC5oCj4gPiA+Pj4+IGluZGV4IDgzYmIxNTYuLjkzNmFkOGQgMTAwNjQ0Cj4gPiA+ Pj4+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9yZWN0LmgKPiA+ID4+Pj4gKysrIGIvaW5jbHVkZS9k cm0vZHJtX3JlY3QuaAo+ID4gPj4+PiBAQCAtMjQsNiArMjQsOCBAQAo+ID4gPj4+PiAgICAjaWZu ZGVmIERSTV9SRUNUX0gKPiA+ID4+Pj4gICAgI2RlZmluZSBEUk1fUkVDVF9ICj4gPiA+Pj4+ICAg IAo+ID4gPj4+PiArI2luY2x1ZGUgPHVhcGkvZHJtL2RybS5oPgo+ID4gPj4+PiArCj4gPiA+Pj4+ ICAgIC8qKgo+ID4gPj4+PiAgICAgKiBET0M6IHJlY3QgdXRpbHMKPiA+ID4+Pj4gICAgICoKPiA+ ID4+Pj4gQEAgLTE3MSw0ICsxNzMsNzEgQEAgdm9pZCBkcm1fcmVjdF9yb3RhdGVfaW52KHN0cnVj dCBkcm1fcmVjdCAqciwKPiA+ID4+Pj4gICAgCQkJIGludCB3aWR0aCwgaW50IGhlaWdodCwKPiA+ ID4+Pj4gICAgCQkJIHVuc2lnbmVkIGludCByb3RhdGlvbik7Cj4gPiA+Pj4+ICAgIAo+ID4gPj4+ PiArLyoqCj4gPiA+Pj4+ICsgKiBkcm1fY2xpcF9yZWN0X3dpZHRoIC0gZGV0ZXJtaW5lIHRoZSBj bGlwIHJlY3RhbmdsZSB3aWR0aAo+ID4gPj4+PiArICogQHI6IGNsaXAgcmVjdGFuZ2xlIHdob3Nl IHdpZHRoIGlzIHJldHVybmVkCj4gPiA+Pj4+ICsgKgo+ID4gPj4+PiArICogUkVUVVJOUzoKPiA+ ID4+Pj4gKyAqIFRoZSB3aWR0aCBvZiB0aGUgY2xpcCByZWN0YW5nbGUuCj4gPiA+Pj4+ICsgKi8K PiA+ID4+Pj4gK3N0YXRpYyBpbmxpbmUgaW50IGRybV9jbGlwX3JlY3Rfd2lkdGgoY29uc3Qgc3Ry dWN0IGRybV9jbGlwX3JlY3QgKnIpCj4gPiA+Pj4+ICt7Cj4gPiA+Pj4+ICsJcmV0dXJuIHItPngy IC0gci0+eDE7Cj4gPiA+Pj4+ICt9Cj4gPiA+Pj4+ICsKPiA+ID4+Pj4gKy8qKgo+ID4gPj4+PiAr ICogZHJtX2NsaXBfcmVjdF9oZWlnaHQgLSBkZXRlcm1pbmUgdGhlIGNsaXAgcmVjdGFuZ2xlIGhl aWdodAo+ID4gPj4+PiArICogQHI6IGNsaXAgcmVjdGFuZ2xlIHdob3NlIGhlaWdodCBpcyByZXR1 cm5lZAo+ID4gPj4+PiArICoKPiA+ID4+Pj4gKyAqIFJFVFVSTlM6Cj4gPiA+Pj4+ICsgKiBUaGUg aGVpZ2h0IG9mIHRoZSBjbGlwIHJlY3RhbmdsZS4KPiA+ID4+Pj4gKyAqLwo+ID4gPj4+PiArc3Rh dGljIGlubGluZSBpbnQgZHJtX2NsaXBfcmVjdF9oZWlnaHQoY29uc3Qgc3RydWN0IGRybV9jbGlw X3JlY3QgKnIpCj4gPiA+Pj4+ICt7Cj4gPiA+Pj4+ICsJcmV0dXJuIHItPnkyIC0gci0+eTE7Cj4g PiA+Pj4+ICt9Cj4gPiA+Pj4+ICsKPiA+ID4+Pj4gKy8qKgo+ID4gPj4+PiArICogZHJtX2NsaXBf cmVjdF92aXNpYmxlIC0gZGV0ZXJtaW5lIGlmIHRoZSB0aGUgY2xpcCByZWN0YW5nbGUgaXMgdmlz aWJsZQo+ID4gPj4+PiArICogQHI6IGNsaXAgcmVjdGFuZ2xlIHdob3NlIHZpc2liaWxpdHkgaXMg cmV0dXJuZWQKPiA+ID4+Pj4gKyAqCj4gPiA+Pj4+ICsgKiBSRVRVUk5TOgo+ID4gPj4+PiArICog JXRydWUgaWYgdGhlIGNsaXAgcmVjdGFuZ2xlIGlzIHZpc2libGUsICVmYWxzZSBvdGhlcndpc2Uu Cj4gPiA+Pj4+ICsgKi8KPiA+ID4+Pj4gK3N0YXRpYyBpbmxpbmUgYm9vbCBkcm1fY2xpcF9yZWN0 X3Zpc2libGUoY29uc3Qgc3RydWN0IGRybV9jbGlwX3JlY3QgKnIpCj4gPiA+Pj4+ICt7Cj4gPiA+ Pj4+ICsJcmV0dXJuIGRybV9jbGlwX3JlY3Rfd2lkdGgocikgPiAwICYmIGRybV9jbGlwX3JlY3Rf aGVpZ2h0KHIpID4gMDsKPiA+ID4+Pj4gK30KPiA+ID4+Pj4gKwo+ID4gPj4+PiArLyoqCj4gPiA+ Pj4+ICsgKiBkcm1fY2xpcF9yZWN0X3Jlc2V0IC0gUmVzZXQgY2xpcCByZWN0YW5nbGUKPiA+ID4+ Pj4gKyAqIEBjbGlwOiBjbGlwIHJlY3RhbmdsZQo+ID4gPj4+PiArICoKPiA+ID4+Pj4gKyAqIFNl dHMgY2xpcCByZWN0YW5nbGUgdG8gezAsMCwwLDB9Lgo+ID4gPj4+PiArICovCj4gPiA+Pj4+ICtz dGF0aWMgaW5saW5lIHZvaWQgZHJtX2NsaXBfcmVjdF9yZXNldChzdHJ1Y3QgZHJtX2NsaXBfcmVj dCAqY2xpcCkKPiA+ID4+Pj4gK3sKPiA+ID4+Pj4gKwljbGlwLT54MSA9IDA7Cj4gPiA+Pj4+ICsJ Y2xpcC0+eDIgPSAwOwo+ID4gPj4+PiArCWNsaXAtPnkxID0gMDsKPiA+ID4+Pj4gKwljbGlwLT55 MiA9IDA7Cj4gPiA+Pj4+ICt9Cj4gPiA+Pj4+ICsKPiA+ID4+Pj4gKy8qKgo+ID4gPj4+PiArICog ZHJtX2NsaXBfcmVjdF9pc19lbXB0eSAtIElzIGNsaXAgcmVjdGFuZ2xlIGVtcHR5Pwo+ID4gPj4+ PiArICogQGNsaXA6IGNsaXAgcmVjdGFuZ2xlCj4gPiA+Pj4+ICsgKgo+ID4gPj4+PiArICogUmV0 dXJucyB0cnVlIGlmIGNsaXAgcmVjdGFuZ2xlIGlzIHswLDAsMCwwfS4KPiA+ID4+Pj4gKyAqLwo+ ID4gPj4+PiArc3RhdGljIGlubGluZSBib29sIGRybV9jbGlwX3JlY3RfaXNfZW1wdHkoc3RydWN0 IGRybV9jbGlwX3JlY3QgKmNsaXApCj4gPiA+Pj4+ICt7Cj4gPiA+Pj4+ICsJcmV0dXJuICghY2xp cC0+eDEgJiYgIWNsaXAtPngyICYmICFjbGlwLT55MSAmJiAhY2xpcC0+eTIpOwo+ID4gPj4+PiAr fQo+ID4gPj4+PiArCj4gPiA+Pj4+ICtib29sIGRybV9jbGlwX3JlY3RfaW50ZXJzZWN0KHN0cnVj dCBkcm1fY2xpcF9yZWN0ICpyMSwKPiA+ID4+Pj4gKwkJCSAgICAgY29uc3Qgc3RydWN0IGRybV9j bGlwX3JlY3QgKnIyKTsKPiA+ID4+Pj4gK3ZvaWQgZHJtX2NsaXBfcmVjdF9tZXJnZShzdHJ1Y3Qg ZHJtX2NsaXBfcmVjdCAqZHN0LAo+ID4gPj4+PiArCQkJIHN0cnVjdCBkcm1fY2xpcF9yZWN0ICpz cmMsIHVuc2lnbmVkIG51bV9jbGlwcywKPiA+ID4+Pj4gKwkJCSB1bnNpZ25lZCBmbGFncywgdTMy IHdpZHRoLCB1MzIgaGVpZ2h0KTsKPiA+ID4+Pj4gKwo+ID4gPj4+PiAgICAjZW5kaWYKPiA+ID4+ Pj4gLS0gCj4gPiA+Pj4+IDIuMi4yCj4gPiA+Pj4+Cj4gPiA+Pj4+IF9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gPiA+Pj4+IGRyaS1kZXZlbCBtYWlsaW5n IGxpc3QKPiA+ID4+Pj4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ID4gPj4+PiBo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo+ IAo+IC0tIAo+IFZpbGxlIFN5cmrDpGzDpAo+IEludGVsIE9UQwo+IF9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZHJpLWRldmVsIG1haWxpbmcgbGlzdAo+ IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAoKLS0gCkRhbmllbCBWZXR0ZXIKU29m dHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBt YWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=