From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v2 4/4] drm/i915/icl: Add Multi-segmented gamma support Date: Mon, 6 May 2019 15:25:22 +0300 Message-ID: <20190506122522.GV24299@intel.com> References: <20190430152108.31814-1-shashank.sharma@intel.com> <20190430152108.31814-5-shashank.sharma@intel.com> <20190503155054.GS24299@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id D9D11898C8 for ; Mon, 6 May 2019 12:25:26 +0000 (UTC) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "Sharma, Shashank" Cc: Daniel Vetter , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBNYXkgMDYsIDIwMTkgYXQgMDQ6MDk6MzNQTSArMDUzMCwgU2hhcm1hLCBTaGFzaGFu ayB3cm90ZToKPiBSZWdhcmRzCj4gCj4gU2hhc2hhbmsKPiAKPiBPbiA1LzMvMjAxOSA5OjIwIFBN LCBWaWxsZSBTeXJqw6Rsw6Qgd3JvdGU6Cj4gPiBPbiBUdWUsIEFwciAzMCwgMjAxOSBhdCAwODo1 MTowOFBNICswNTMwLCBTaGFzaGFuayBTaGFybWEgd3JvdGU6Cj4gPj4gSUNMIGludHJvZHVjZXMg YSBuZXcgZ2FtbWEgY29ycmVjdGlvbiBtb2RlIGluIGRpc3BsYXkgZW5naW5lLCBjYWxsZWQKPiA+ PiBtdWx0aS1zZWdtZW50ZWQtZ2FtbWEgbW9kZS4gVGhpcyBtb2RlIGFsbG93cyB1c2VycyB0byBw cm9ncmFtIHRoZQo+ID4+IGRhcmtlciByZWdpb24gb2YgdGhlIGdhbW1hIGN1cnZlIHdpdGggc3Vl cHJmaW5lIHByZWNpc2lvbi4gQW4KPiA+PiBleGFtcGxlIHVzZSBjYXNlIGZvciB0aGlzIGlzIEhE UiBjdXJ2ZXMgKGxpa2UgUFEgU1QtMjA4NCkuCj4gPj4KPiA+PiBJZiB3ZSBwbG90IGEgZ2FtbWEg Y29ycmVjdGlvbiBjdXJ2ZSBmcm9tIHZhbHVlIHJhbmdlIGJldHdlZW4gMC4wIHRvIDEuMCwKPiA+ PiBJQ0wncyBtdWx0aS1zZWdtZW50IGhhcyAzIGRpZmZlcmVudCBzZWN0aW9uczoKPiA+PiAtIHN1 cGVyZmluZSBzZWdtZW50OiA5IHZhbHVlcywgcmFuZ2VzIGJldHdlZW4gMCAtIDEvKDEyOCAqIDI1 NikKPiA+PiAtIGZpbmUgc2VnbWVudDogMjU3IHZhbHVlcywgcmFuZ2VzIGJldHdlZW4gMCAtIDEv KDEyOCkKPiA+PiAtIGNvcmFzZSBzZWdtZW50OiAyNTcgdmFsdWVzLCByYW5nZXMgYmV0d2VlbiAw IC0gMQo+ID4+Cj4gPj4gVGhpcyBwYXRjaDoKPiA+PiAtIENoYW5nZXMgZ2FtbWEgTFVUcyBzaXpl IGZvciBJQ0wvR0VOMTEgdG8gMjYyMTQ0IGVudHJpZXMgKDggKiAxMjggKiAyNTYpLAo+ID4+ICAg IHNvIHRoYXQgdXNlcnNwYWNlIGNhbiBwcm9ncmFtIHdpdGggaGlnaGVzdCBwcmVjaXNpb24gc3Vw cG9ydGVkLgo+ID4+IC0gQ2hhbmdlcyBkZWZhdWx0IGdhbW1hIG1vZGUgKG5vbi1sZWdhY3kpIHRv IG11bHRpLXNlZ21lbnRlZC1nYW1tYSBtb2RlLgo+ID4+IC0gQWRkcyBmdW5jdGlvbnMgdG8gcHJv Z3JhbS9kZXRlY3QgbXVsdGktc2VnbWVudCBnYW1tYS4KPiA+Pgo+ID4+IFYyOiBBZGRyZXNzZWQg cmV2aWV3IGNvbW1lbnRzIGZyb20gVmlsbGUKPiA+PiAgICAgIC0gc2VwYXJhdGUgZnVuY3Rpb24g Zm9yIHN1cGVyZmluZSBhbmQgZmluZSBzZWdtZW50cy4KPiA+PiAgICAgIC0gcmVtb3ZlIGVudW0g Zm9yIHNlZ21lbnRzLgo+ID4+ICAgICAgLSByZXVzZSBsYXN0IGVudHJ5IG9mIHRoZSBMVVQgYXMg Z2NfbWF4IHZhbHVlLgo+ID4+ICAgICAgLSByZXBsYWNlIGlmKCkgLi4uLmNvbmQgd2l0aCBzd2l0 Y2guLi5jYXNlIGluIGljbF9sb2FkX2x1dHMuCj4gPj4gICAgICAtIGFkZCBhbiBlbnRyeSB2YXJp YWJsZSwgaW5zdGVhZCBvZiAnd29yZCcKPiA+Pgo+ID4+IENjOiBWaWxsZSBTeXJqw6Rsw6QgPHZp bGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+ID4+IENjOiBNYWFydGVuIExhbmtob3JzdCA8 bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29tPgo+ID4+IENjOiBEYW5pZWwgVmV0dGVy IDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgo+ID4+Cj4gPj4gU3VnZ2VzdGVkLWJ5OiBWaWxsZSBT eXJqw6Rsw6QgPHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tPgo+ID4+IFNpZ25lZC1vZmYt Ynk6IFNoYXNoYW5rIFNoYXJtYSA8c2hhc2hhbmsuc2hhcm1hQGludGVsLmNvbT4KPiA+PiBTaWdu ZWQtb2ZmLWJ5OiBVbWEgU2hhbmthciA8dW1hLnNoYW5rYXJAaW50ZWwuY29tPgo+ID4+IC0tLQo+ ID4+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wY2kuYyAgICB8ICAgMyArLQo+ID4+ICAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY29sb3IuYyB8IDEyNSArKysrKysrKysrKysrKysr KysrKysrKysrKysrLQo+ID4+ICAgMiBmaWxlcyBjaGFuZ2VkLCAxMjMgaW5zZXJ0aW9ucygrKSwg NSBkZWxldGlvbnMoLSkKPiA+Pgo+ID4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3BjaS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wY2kuYwo+ID4+IGluZGV4 IGZmYTJlZTcwYTAzZC4uODM2OTg5NTE3NjBiIDEwMDY0NAo+ID4+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcGNpLmMKPiA+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3BjaS5jCj4gPj4gQEAgLTc0OSw3ICs3NDksOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVs X2RldmljZV9pbmZvIGludGVsX2Nhbm5vbmxha2VfaW5mbyA9IHsKPiA+PiAgIAlHRU4oMTEpLCBc Cj4gPj4gICAJLmRkYl9zaXplID0gMjA0OCwgXAo+ID4+ICAgCS5oYXNfbG9naWNhbF9yaW5nX2Vs c3EgPSAxLCBcCj4gPj4gLQkuY29sb3IgPSB7IC5kZWdhbW1hX2x1dF9zaXplID0gMzMsIC5nYW1t YV9sdXRfc2l6ZSA9IDEwMjQgfQo+ID4+ICsJLmNvbG9yID0geyAuZGVnYW1tYV9sdXRfc2l6ZSA9 IDMzLCAuZ2FtbWFfbHV0X3NpemUgPSAyNjIxNDQgfQo+ID4gVWdoLiBUaGF0cyBvbmUgYmlnIExV VC4gQnV0IGxvb2tzIGNvcnJlY3QuCj4gPgo+ID4+ICsKPiA+IEJvZ3VzIG5ld2xpbmUuCj4gR290 IGl0Lgo+ID4+ICAgCj4gPj4gICBzdGF0aWMgY29uc3Qgc3RydWN0IGludGVsX2RldmljZV9pbmZv IGludGVsX2ljZWxha2VfMTFfaW5mbyA9IHsKPiA+PiAgIAlHRU4xMV9GRUFUVVJFUywKPiA+PiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY29sb3IuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2NvbG9yLmMKPiA+PiBpbmRleCA2YzM0MWJlYTUxNGMuLjQ5ODMx ZThkMDJmYiAxMDA2NDQKPiA+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jb2xv ci5jCj4gPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfY29sb3IuYwo+ID4+IEBA IC00MSw2ICs0MSw5IEBACj4gPj4gICAjZGVmaW5lIENUTV9DT0VGRl9BQlMoY29lZmYpCQkoKGNv ZWZmKSAmIChDVE1fQ09FRkZfU0lHTiAtIDEpKQo+ID4+ICAgCj4gPj4gICAjZGVmaW5lIExFR0FD WV9MVVRfTEVOR1RICQkyNTYKPiA+PiArI2RlZmluZSBJQ0xfR0FNTUFfTVVMVElTRUdfTFVUX0xF TkdUSAkJKDI1NiAqIDEyOCAqIDgpCj4gPj4gKyNkZWZpbmUgSUNMX0dBTU1BX1NVUEVSRklORV9T RUdfTEVOR1RICTkKPiA+PiArCj4gPj4gICAvKgo+ID4+ICAgICogRXh0cmFjdCB0aGUgQ1NDIGNv ZWZmaWNpZW50IGZyb20gYSBDVE0gY29lZmZpY2llbnQgKGluIFUzMi4zMiBmaXhlZCBwb2ludAo+ ID4+ICAgICogZm9ybWF0KS4gVGhpcyBtYWNybyB0YWtlcyB0aGUgY29lZmZpY2llbnQgd2Ugd2Fu dCB0cmFuc2Zvcm1lZCBhbmQgdGhlCj4gPj4gQEAgLTc2Nyw2ICs3NzAsMTEzIEBAIHN0YXRpYyB2 b2lkIGdsa19sb2FkX2x1dHMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUpCj4gPj4gICAJfQo+ID4+ICAgfQo+ID4+ICAgCj4gPj4gKy8qIGlsaysgIjEyLjQiIGludGVy cG9sYXRlZCBmb3JtYXQgKGhpZ2ggMTAgYml0cykgKi8KPiA+PiArc3RhdGljIHUzMiBpbGtfbHV0 XzEycDRfbGR3KGNvbnN0IHN0cnVjdCBkcm1fY29sb3JfbHV0ICpjb2xvcikKPiA+PiArewo+ID4+ ICsJcmV0dXJuIChjb2xvci0+cmVkID4+IDYpIDw8IDIwIHwgKGNvbG9yLT5ncmVlbiA+PiA2KSA8 PCAxMCB8Cj4gPj4gKwkJKGNvbG9yLT5ibHVlID4+IDYpOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICsv KiBpbGsrICIxMi40IiBpbnRlcnBvbGF0ZWQgZm9ybWF0IChsb3cgNiBiaXRzKSAqLwo+ID4+ICtz dGF0aWMgdTMyIGlsa19sdXRfMTJwNF91ZHcoY29uc3Qgc3RydWN0IGRybV9jb2xvcl9sdXQgKmNv bG9yKQo+ID4+ICt7Cj4gPj4gKwlyZXR1cm4gKGNvbG9yLT5yZWQgJiAweDNmKSA8PCAyNCB8IChj b2xvci0+Z3JlZW4gJiAweDNmKSA8PCAxNCB8Cj4gPj4gKwkJKGNvbG9yLT5ibHVlICYgMHgzZik7 Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0YXRpYyB2b2lkCj4gPj4gK2ljbF9sb2FkX2djbWF4KGNv bnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlLAo+ID4+ICsJCQljb25zdCBz dHJ1Y3QgZHJtX2NvbG9yX2x1dCAqZW50cnkpCj4gPiBJbmRlbnRhdGlvbiBsb29rcyBvZmYuIEFs c28gcy9lbnRyeS9jb2xvci8gdG8gbWF0Y2ggdGhlIG90aGVyIHNpbWlsYXJpc2gKPiA+IGZ1bmNz IG1heWJlPwo+IFN1cmUuCj4gPj4gK3sKPiA+PiArCXN0cnVjdCBpbnRlbF9jcnRjICpjcnRjID0g dG9faW50ZWxfY3J0YyhjcnRjX3N0YXRlLT5iYXNlLmNydGMpOwo+ID4+ICsJc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjcnRjLT5iYXNlLmRldik7Cj4gPj4gKwll bnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7Cj4gPj4gKwo+ID4+ICsJLyogRml4bWU6IExVVCBl bnRyaWVzIGFyZSAxNiBiaXQgb25seSwgc28gd2UgY2FuIHByb2cgMHhGRkZGIG1heCAqLwo+ID4+ ICsJSTkxNV9XUklURShQUkVDX1BBTF9HQ19NQVgocGlwZSwgMCksIGVudHJ5LT5yZWQpOwo+ID4+ ICsJSTkxNV9XUklURShQUkVDX1BBTF9HQ19NQVgocGlwZSwgMSksIGVudHJ5LT5ncmVlbik7Cj4g Pj4gKwlJOTE1X1dSSVRFKFBSRUNfUEFMX0dDX01BWChwaXBlLCAyKSwgZW50cnktPmJsdWUpOwo+ ID4+ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMgdm9pZAo+ID4+ICtpY2xfcHJvZ3JhbV9nYW1tYV9z dXBlcmZpbmVfc2VnbWVudChjb25zdCBzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0 ZSkKPiA+PiArewo+ID4+ICsJc3RydWN0IGludGVsX2NydGMgKmNydGMgPSB0b19pbnRlbF9jcnRj KGNydGNfc3RhdGUtPmJhc2UuY3J0Yyk7Cj4gPj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsKPiA+PiArCWNvbnN0IHN0cnVjdCBk cm1fcHJvcGVydHlfYmxvYiAqYmxvYiA9IGNydGNfc3RhdGUtPmJhc2UuZ2FtbWFfbHV0Owo+ID4+ ICsJY29uc3Qgc3RydWN0IGRybV9jb2xvcl9sdXQgKmx1dCA9IGJsb2ItPmRhdGE7Cj4gPj4gKwll bnVtIHBpcGUgcGlwZSA9IGNydGMtPnBpcGU7Cj4gPj4gKwl1MzIgaTsKPiA+PiArCj4gPj4gKwlp ZiAoIWx1dCB8fCBkcm1fY29sb3JfbHV0X3NpemUoYmxvYikgPCBJQ0xfR0FNTUFfU1VQRVJGSU5F X1NFR19MRU5HVEgpCj4gPj4gKwkJcmV0dXJuOwo+ID4gVGhlc2UgY2hlY2tzIGFyZW4ndCBuZWVk ZWQuIEp1c3QgZGVhZCBjb2RlLgo+IFdpbGwgcmVtb3ZlIHRoaXMgYW5kIHNpbWlsYXJzLgo+ID4+ ICsKPiA+PiArCS8qCj4gPj4gKwkgKiBFdmVyeSBlbnRyeSBpbiB0aGUgbXVsdGktc2VnbWVudCBM VVQgaXMgY29ycmVzcG9uZGluZyB0byBhIHN1cGVyZmluZQo+ID4+ICsJICogc2VnbWVudCBzdGVw IHdoaWNoIGlzIDEvKDggKiAxMjggKiAyNTYpLgo+ID4+ICsJICoKPiA+PiArCSAqIFN1cGVyZmlu ZSBzZWdtZW50IGhhcyA5IGVudHJpZXMsIGNvcnJlc3BvbmRpbmcgdG8gdmFsdWVzCj4gPj4gKwkg KiAwLCAxLyg4ICogMTI4ICogMjU2KSwgMi8oOCAqIDEyOCAqIDI1NikgLi4uLiA4Lyg4ICogMTI4 ICogMjU2KS4KPiA+PiArCSAqLwo+ID4+ICsJSTkxNV9XUklURShQUkVDX1BBTF9NVUxUSV9TRUdf SU5ERVgocGlwZSksIFBBTF9QUkVDX0FVVE9fSU5DUkVNRU5UKTsKPiA+PiArCj4gPj4gKwlmb3Ig KGkgPSAwOyBpIDwgOTsgaSsrKSB7Cj4gPj4gKwkJY29uc3Qgc3RydWN0IGRybV9jb2xvcl9sdXQg KmVudHJ5ID0gJmx1dFtpXTsKPiA+PiArCj4gPj4gKwkJSTkxNV9XUklURShQUkVDX1BBTF9NVUxU SV9TRUdfREFUQShwaXBlKSwKPiA+PiArCQkJICAgaWxrX2x1dF8xMnA0X3VkdyhlbnRyeSkpOwo+ ID4gbGR3IHNob3VsZCBjb21lIGJlZm9yZSB1ZHcuCj4gR290IGl0Lgo+ID4+ICsJCUk5MTVfV1JJ VEUoUFJFQ19QQUxfTVVMVElfU0VHX0RBVEEocGlwZSksCj4gPj4gKwkJCSAgIGlsa19sdXRfMTJw NF9sZHcoZW50cnkpKTsKPiA+PiArCX0KPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIHZvaWQK PiA+PiAraWNsX3Byb2dyYW1fZ2FtbWFfbXVsdGlfc2VnbWVudChjb25zdCBzdHJ1Y3QgaW50ZWxf Y3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiA+PiArewo+ID4+ICsJc3RydWN0IGludGVsX2NydGMg KmNydGMgPSB0b19pbnRlbF9jcnRjKGNydGNfc3RhdGUtPmJhc2UuY3J0Yyk7Cj4gPj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNydGMtPmJhc2UuZGV2KTsK PiA+PiArCWNvbnN0IHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYiA9IGNydGNfc3RhdGUt PmJhc2UuZ2FtbWFfbHV0Owo+ID4+ICsJY29uc3Qgc3RydWN0IGRybV9jb2xvcl9sdXQgKmx1dCA9 IGJsb2ItPmRhdGE7Cj4gPj4gKwljb25zdCBzdHJ1Y3QgZHJtX2NvbG9yX2x1dCAqZW50cnk7Cj4g PiAnZW50cnknIGRlY2xhcmF0aW9uIGNhbiBiZSBtb3ZlZCBpbnRvIHRoZSBsb29wcy4KPiBJdHMg YmVpbmcgdXNlZCBpbiBtdWx0aXBsZSBsb29wcywKCklNTyBzdGlsbCBiZXR0ZXIgdG8gbW92ZSBp bnRvIHRoZSBsb29wcy4gV2UgZG9uJ3Qgd2FudCB0byBwYXNzIGFueQppbmZvcm1hdGlvbiBiZXR3 ZWVuIHRoZSBsb29wcy4KCj4gYWxzbyBiZWluZyB1c2VkIGZvciBHQ01heCBvdXRzaWRlIHRoZSAK PiBsb29wLgoKSG1tLiBUaGF0IG1pZ2h0IGJlIGFuIGFyZ3VlbW50IGZvciBrZWVwaW5nIGl0IG91 dC4gQnV0IHRoZSBjdXJyZW50CmdjbWF4IHVzYWdlIGxvb2tzIGJyb2tlbi4gWW91J3JlIHByb2dy YW1taW5nIHRoZSBzYW1lIHZhbHVlIGludG8KdGhlIGxhc3QgUEFMX1BSRUMgaW5kZXggYW5kIEdD TUFYLgoKPiA+PiArCWVudW0gcGlwZSBwaXBlID0gY3J0Yy0+cGlwZTsKPiA+PiArCXUzMiBpOwo+ ID4+ICsKPiA+PiArCWlmICghbHV0IHx8IChkcm1fY29sb3JfbHV0X3NpemUoYmxvYikgPCBJQ0xf R0FNTUFfTVVMVElTRUdfTFVUX0xFTkdUSCkpCj4gPj4gKwkJcmV0dXJuOwo+ID4gTW9yZSBjaGVj a3MgdGhhdCBhcmVuJ3QgbmVlZGVkLgo+IEdvdCBpdC4KPiA+PiArCj4gPj4gKwkvKgo+ID4+ICsJ ICogRXZlcnkgZW50cnkgaW4gdGhlIG11bHRpLXNlZ21lbnQgTFVUIGlzIGNvcnJlc3BvbmRpbmcg dG8gYSBzdXBlcmZpbmUKPiA+PiArCSAqIHNlZ21lbnQgc3RlcCB3aGljaCBpcyAxLyg4KjEyOCoy NTYpLgo+ID4+ICsJICoKPiA+PiArCSAqIEZpbmUgc2VnbWVudCdzIHN0ZXAgaXMgMS8oMTI4ICog MjU2KSBpZSAxLygxMjggKiAyNTYpLCAgMi8oMTI4KjI1NikKPiA+PiArCSAqIC4uLiAyNTYvKDEy OCoyNTYpLiBTbyBpbiBvcmRlciB0byBwcm9ncmFtIGZpbmUgc2VnbWVudCBvZiBMVVQgd2UKPiA+ PiArCSAqIG5lZWQgdG8gcGljayBldmVyeSA4J3RoIGVudHJ5IGluIExVVCwgYW5kIHByb2dyYW0g MjU2IGluZGV4ZXMuCj4gPj4gKwkgKiBGaW5lIHNlZ21lbnQncyBpbmRleCAwIGlzIHByb2dyYW1t ZWQgaW4gSFcsIGFuZCBpdCBzdGFydHMgZnJvbQo+ID4+ICsJICogaW5kZXggMS4KPiA+IFRoZSB3 b3JkaW5nIGhlcmUgaXMgYSBiaXQgY29uZnVzaW5nLiBJIGd1ZXNzIHRoZSBwcm9ibGVtIGlzIHdo YXQgdG8gY2FsbAo+ID4gdGhpbmdzLiBQQUxfUFJFQ19JTkRFWFswLzFdIGlzIHdoYXQgd2UgcHJv Z3JhbSwgYnV0IHRoYXQgbWFwcyB0byB0aGUgcG9pbnQKPiA+IHNlZzJbMV0gd2l0aCBzZWcyWzBd IGJlaW5nIHVudXNlZCBieSB0aGUgaHcuIFdlbGwsIHRoZSBzcGVjIHNheXMgaXQncwo+ID4gaW1w bGljaXQgYnV0IElJUkMgSSB3YXMgdG9sZCBsb25nIGFnbyB0aGF0IGl0J3Mgbm90IGFjdHVhbGx5 IHVzZWQuCj4gPgo+ID4gTm90IHN1cmUgaG93IHRvIHdvcmQgdGhhdCBpbiB0aGUgYmVzdCB3YXku IE1heWJlIHNvbWV0aGluZyBsaWtlPwo+ID4KPiA+IC8qCj4gPiAgICogRmluZSBzZWdtZW50IChz ZWcyKSAuLi4KPiA+ICAgKgo+ID4gICAqIFBBTF9QUkVDX0lOREVYWzBdIGFuZCBQQUxfUFJFQ19J TkRFWFsxXSBtYXAgdG8gc2VnMlsxXSwKPiA+ICAgKiB3aXRoIHNlZzJbMF0gYmVpbmcgdW51c2Vk IGJ5IHRoZSBoYXJkd2FyZS4KPiA+ICAgKi8KPiA+Cj4gPiBOb3Qgc3VyZSB0aGF0J3MgYW55IGNs ZWFyZXIuCj4gT2ssIHdpbGwgdHJ5IHRvIGNvbWUgdXAgd2l0aCBzb21ldGhpbmcgaW4gc2ltaWxh ciBsaW5lcy4KPiA+PiArCSAqLwo+ID4+ICsJSTkxNV9XUklURShQUkVDX1BBTF9JTkRFWChwaXBl KSwgUEFMX1BSRUNfQVVUT19JTkNSRU1FTlQpOwo+ID4+ICsJZm9yIChpID0gMTsgaSA8IDI1Nzsg aSsrKSB7Cj4gPj4gKwkJZW50cnkgPSAmbHV0W2kgKiA4XTsKPiA+PiArCQlJOTE1X1dSSVRFKFBS RUNfUEFMX0RBVEEocGlwZSksIGlsa19sdXRfMTJwNF91ZHcoZW50cnkpKTsKPiA+PiArCQlJOTE1 X1dSSVRFKFBSRUNfUEFMX0RBVEEocGlwZSksIGlsa19sdXRfMTJwNF9sZHcoZW50cnkpKTsKPiA+ PiArCX0KPiA+PiArCj4gPj4gKwkvKgo+ID4+ICsJICogQ29hcnNlIHNlZ21lbnQncyBzdGFydHMg ZnJvbSBpbmRleCAwIGFuZCBpdCdzIHN0ZXAgaXMgMS8yNTYgaWUgMCwKPiA+PiArCSAqIDEvMjU2 LCAyLzI1NiAuLi4yNTYvMjU2LiBBcyBwZXIgdGhlIGRlc2NyaXB0aW9uIG9mIGVhY2ggZW50cnkg aW4gTFVUCj4gPj4gKwkgKiBhYm92ZSwgd2UgbmVlZCB0byBwaWNrIGV2ZXJ5IDggKiAxMjggPSAx MDI0dGggZW50cnkgaW4gTFVULCBhbmQKPiA+PiArCSAqIHByb2dyYW0gMjU2IG9mIHRob3NlLgo+ ID4+ICsJICovCj4gPiBDb3VsZCBtYWtlIGEgbm90ZSBoZXJlIHN0YXRpbmcgdGhhdCBzZWczWzBd IGFuZCBzZWczWzFdIGFyZSBhbHNvIHVudXNlZAo+ID4gYnkgdGhlIGhhcmR3YXJlLCBldmVuIHRo b3VnaCB3ZSBoYXZlIHRvIHByb2dyYW0gdGhlbSB0byBhZHZhbmNlIHRoZQo+ID4gaW5kZXguIEkg ZG9uJ3Qgc2VlIGl0IG1lbnRpb25lZCBpbiB0aGUgc3BlYywgYnV0IHRoaXMgb25lIEkgZGVmaW5p dGVseQo+ID4gcmVtZW1iZXIgY29uZmlybWluZyBmcm9tIEFydCB3YXkgYmFjayB3aGVuLiBIb3dl dmVyIEkgbmV2ZXIgdmVyaWZpZWQKPiA+IHRoYXQgb24gYWN0dWFsIGh3LiBXZSBjb3VsZCBhbHNv IGNvbnNpZGVyIGp1c3QgcHJvZ3JhbW1pbmcgdGhvc2UgdHdvCj4gPiBlbnRyaWVzIHRvIDAgYW5k IHN0YXJ0IHRoZSBhY3R1YWwgY29hcnNlIHNlZ21lbnQgcHJvZ3JhbW1pbmcgZnJvbSBpbmRleCAy Lgo+ID4gT3Igd2UgY291bGQgc2tpcCB0aGVtIGJ5IHJlcHJvZ3JhbW1pbmcgdGhlIGluZGV4IGRp cmVjdGx5Lgo+IElmIHRoZXkgYXJlIG5vdCBiZWluZyB1c2VkLCBkb2VzIGl0IG1hdHRlciB3aGF0 IGFuZCBpZiB3ZSBwcm9ncmFtIGludG8gCj4gdGhlbSA/IFdlIGNhbiBhZGQgYSBub3RlIHRob3Vn aCwgbWVudGlvbmluZyB0aGlzLgoKSXQgc2hvdWxkbid0IG1hdHRlciB3aGF0IHdlIHByb2dyYW1p bmcgaW50byB0aGVtLiBCdXQgYXMgbWVudGlvbmVkIEkKbmV2ZXIgYWN0dWFsbHkgY29uZmlybWVk IHRoaXMgb24gYWN0dWFsIGhhcmR3YXJlLiBXb3VsZCBiZSBuaWNlIHRvCmRvdWJsZSBjaGVjayB0 aGF0IHNvIHdlIGRvbid0IGVuZCB1cCB3aXRoIGluY29ycmVjdCBjb21tZW50LgoKPiA+PiArCWZv ciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewo+ID4+ICsJCWVudHJ5ID0gJmx1dFtpICogMTAyNF07 Cj4gPiBzLzEwMjQvOCAqIDEyOC8gbWF5YmU/Cj4gCj4gU3VyZS4KPiAKPiBSZWdhcmRzCj4gCj4g U2hhc2hhbmsKPiAKPiA+Cj4gPj4gKwkJSTkxNV9XUklURShQUkVDX1BBTF9EQVRBKHBpcGUpLCBp bGtfbHV0XzEycDRfdWR3KGVudHJ5KSk7Cj4gPj4gKwkJSTkxNV9XUklURShQUkVDX1BBTF9EQVRB KHBpcGUpLCBpbGtfbHV0XzEycDRfbGR3KGVudHJ5KSk7Cj4gPj4gKwl9Cj4gPj4gKwo+ID4+ICsJ aWNsX2xvYWRfZ2NtYXgoY3J0Y19zdGF0ZSwgZW50cnkpOwo+ID4+ICsJaXZiX2xvYWRfbHV0X2V4 dF9tYXgoY3J0Yyk7Cj4gPj4gK30KPiA+PiArCj4gPj4gICBzdGF0aWMgdm9pZCBpY2xfbG9hZF9s dXRzKGNvbnN0IHN0cnVjdCBpbnRlbF9jcnRjX3N0YXRlICpjcnRjX3N0YXRlKQo+ID4+ICAgewo+ ID4+ICAgCWNvbnN0IHN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqZ2FtbWFfbHV0ID0gY3J0Y19z dGF0ZS0+YmFzZS5nYW1tYV9sdXQ7Cj4gPj4gQEAgLTc3NSwxMCArODg1LDE3IEBAIHN0YXRpYyB2 b2lkIGljbF9sb2FkX2x1dHMoY29uc3Qgc3RydWN0IGludGVsX2NydGNfc3RhdGUgKmNydGNfc3Rh dGUpCj4gPj4gICAJaWYgKGNydGNfc3RhdGUtPmJhc2UuZGVnYW1tYV9sdXQpCj4gPj4gICAJCWds a19sb2FkX2RlZ2FtbWFfbHV0KGNydGNfc3RhdGUpOwo+ID4+ICAgCj4gPj4gLQlpZiAoKGNydGNf c3RhdGUtPmdhbW1hX21vZGUgJiBHQU1NQV9NT0RFX01PREVfTUFTSykgPT0KPiA+PiAtCSAgICBH QU1NQV9NT0RFX01PREVfOEJJVCkgewo+ID4+ICsJc3dpdGNoIChjcnRjX3N0YXRlLT5nYW1tYV9t b2RlICYgR0FNTUFfTU9ERV9NT0RFX01BU0spIHsKPiA+PiArCWNhc2UgR0FNTUFfTU9ERV9NT0RF XzhCSVQ6Cj4gPj4gICAJCWk5eHhfbG9hZF9sdXRzKGNydGNfc3RhdGUpOwo+ID4+IC0JfSBlbHNl IHsKPiA+PiArCQlicmVhazsKPiA+PiArCj4gPj4gKwljYXNlIEdBTU1BX01PREVfTU9ERV8xMkJJ VF9NVUxUSV9TRUdNRU5URUQ6Cj4gPj4gKwkJaWNsX3Byb2dyYW1fZ2FtbWFfc3VwZXJmaW5lX3Nl Z21lbnQoY3J0Y19zdGF0ZSk7Cj4gPj4gKwkJaWNsX3Byb2dyYW1fZ2FtbWFfbXVsdGlfc2VnbWVu dChjcnRjX3N0YXRlKTsKPiA+PiArCQlicmVhazsKPiA+PiArCj4gPj4gKwlkZWZhdWx0Ogo+ID4+ ICAgCQliZHdfbG9hZF9sdXRfMTAoY3J0YywgZ2FtbWFfbHV0LCBQQUxfUFJFQ19JTkRFWF9WQUxV RSgwKSk7Cj4gPj4gICAJCWl2Yl9sb2FkX2x1dF9leHRfbWF4KGNydGMpOwo+ID4+ICAgCX0KPiA+ PiBAQCAtMTIwOSw3ICsxMzI2LDcgQEAgc3RhdGljIHUzMiBpY2xfZ2FtbWFfbW9kZShjb25zdCBz dHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZSkKPiA+PiAgIAkgICAgY3J0Y19zdGF0 ZV9pc19sZWdhY3lfZ2FtbWEoY3J0Y19zdGF0ZSkpCj4gPj4gICAJCWdhbW1hX21vZGUgfD0gR0FN TUFfTU9ERV9NT0RFXzhCSVQ7Cj4gPj4gICAJZWxzZQo+ID4+IC0JCWdhbW1hX21vZGUgfD0gR0FN TUFfTU9ERV9NT0RFXzEwQklUOwo+ID4+ICsJCWdhbW1hX21vZGUgfD0gR0FNTUFfTU9ERV9NT0RF XzEyQklUX01VTFRJX1NFR01FTlRFRDsKPiA+PiAgIAo+ID4+ICAgCXJldHVybiBnYW1tYV9tb2Rl Owo+ID4+ICAgfQo+ID4+IC0tIAo+ID4+IDIuMTcuMQoKLS0gClZpbGxlIFN5cmrDpGzDpApJbnRl bApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1n ZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=