From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jim Bride Subject: Re: [PATCH 4/4] drm/i915/psr: Account for sink CRC raciness on some panels Date: Mon, 8 May 2017 12:26:54 -0700 Message-ID: <20170508192654.GA4987@shiv> References: <1494018126-30190-1-git-send-email-jim.bride@linux.intel.com> <1494018126-30190-5-git-send-email-jim.bride@linux.intel.com> <87lgq7af00.fsf@intel.com> <20170508172923.GC3243@shiv> <874lwv9qcr.fsf@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2139F6E181 for ; Mon, 8 May 2017 19:29:00 +0000 (UTC) Content-Disposition: inline In-Reply-To: <874lwv9qcr.fsf@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Jani Nikula Cc: intel-gfx@lists.freedesktop.org, Paulo Zanoni , Rodrigo Vivi List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBNYXkgMDgsIDIwMTcgYXQgMDk6MDU6MDhQTSArMDMwMCwgSmFuaSBOaWt1bGEgd3Jv dGU6Cj4gT24gTW9uLCAwOCBNYXkgMjAxNywgSmltIEJyaWRlIDxqaW0uYnJpZGVAbGludXguaW50 ZWwuY29tPiB3cm90ZToKPiA+IE9uIE1vbiwgTWF5IDA4LCAyMDE3IGF0IDEyOjEyOjQ3UE0gKzAz MDAsIEphbmkgTmlrdWxhIHdyb3RlOgo+ID4+IE9uIFNhdCwgMDYgTWF5IDIwMTcsIEppbSBCcmlk ZSA8amltLmJyaWRlQGxpbnV4LmludGVsLmNvbT4gd3JvdGU6Cj4gPj4gPiBBY2NvcmRpbmcgdG8g dGhlIGVEUCBzcGVjLCB3aGVuIHRoZSBjb3VudCBmaWVsZCBpbiBURVNUX1NJTktfTUlTQwo+ID4+ ID4gaW5jcmVtZW50cyB0aGVuIHRoZSBzaXggYnl0ZXMgb2Ygc2luayBDUkMgaW5mb3JtYXRpb24g aW4gdGhlIERQQ0QKPiA+PiA+IHNob3VsZCBiZSB2YWxpZC4gIFVuZm9ydHVuYXRlbHksIHRoaXMg ZG9lc24ndCBzZWVtIHRvIGJlIHRoZSBjYXNlCj4gPj4gPiBvbiBzb21lIHBhbmVscywgYW5kIGFz IGEgcmVzdWx0IHdlIGdldCBzb21lIGluY29ycmVjdCBhbmQgaW5jb25zaXN0ZW50Cj4gPj4gPiB2 YWx1ZXMgZnJvbSB0aGUgc2luayBDUkMgRFBDRCBsb2NhdGlvbnMgYXQgdGltZXMuICBUaGlzIHBy b2JsZW0gZXhoaWJpdHMKPiA+PiA+IGl0c2VsZiBtb3JlIG9uIGZhc3RlciBwcm9jZXNzb3JzIChy ZWxhdGl2ZSBmYWlsdXJlIHJhdGVzIEhTVyA8IFNLTCA8IEtCTC4pCj4gPj4gPiBJbiBvcmRlciB0 byB0cnkgYW5kIGFjY291bnQgZm9yIHRoaXMsIHdlIHRyeSBhIGxvdCBoYXJkZXIgdG8gcmVhZCB0 aGUgc2luawo+ID4+ID4gQ1JDIHVudGlsIHdlIGdldCBjb25zaXN0ZW50IHZhbHVlcyB0d2ljZSBp biBhIHJvdyBiZWZvcmUgcmV0dXJuaW5nIHdoYXQgd2UKPiA+PiA+IHJlYWQgYW5kIGRlbGF5IGZv ciBhIHRpbWUgYmVmb3JlIHRyeWluZyB0byByZWFkLiAgV2Ugc3RpbGwgc2VlIHNvbWUKPiA+PiA+ IG9jY2FzaW9uYWwgZmFpbHVyZXMsIGJ1dCByZWFkaW5nIHRoZSBzaW5rIENSQyBpcyBtdWNoIG1v cmUgcmVsaWFibGUsCj4gPj4gPiBwYXJ0aWN1bGFybHkgb24gU0tMIGFuZCBLQkwsIHdpdGggdGhl c2UgY2hhbmdlcyB0aGFuIHdpdGhvdXQuCj4gPj4gCj4gPj4gUmV0cnlpbmcgc2VlbXMgbGlrZSBh IGdvb2QgaWRlYS4gQnV0IHRoaXMgcGF0Y2ggcmV0cmllcyB1cCB0byAzNiB0aW1lcwo+ID4+IGlm IHRoZSB0d28gY29uc2VjdXRpdmUgcmVhZHMgZG9uJ3QgbWF0Y2gsIHdoaWNoIGlzIGV4Y2Vzc2l2 ZS4KPiA+Cj4gPiBJIGRvbid0IHNlZSB3aGVyZSB5b3UncmUgZ2V0dGluZyAzNiBmcm9tOyB0aGUg bG9vcCBydW5zIHRocm91Z2ggc2l4IHRpbWVzLgo+IAo+IGk5MTVfc2lua19jcmMoKSBjYWxscyBp bnRlbF9kcF9zaW5rX2NyYygpLCByZXRyeWluZyBvbiBFVElNRURPVVQuIEluCj4gdHVybiwgaW50 ZWxfZHBfc2lua19jcmMoKSByZWFkcyBDUkMsIHJldHJ5aW5nIG9uIG1pc21hdGNoZWQgQ1JDIGFu ZAo+IHJldHVybmluZyBFVElNRURPVVQgdG8gaTkxNV9zaW5rX2NyYygpIG9uIGVycm9ycy4gQWRt aXR0ZWRseSB0aGUgbG9vcCBpbgo+IGludGVsX2RwX3NpbmtfY3JjKCkgd2lsbCBhbHdheXMgcnVu IGF0IGxlYXN0IHR3aWNlIHRvIGdldCB0d28gcmVzdWx0cyB0bwo+IGNvbXBhcmUsIHNvIEkgZ3Vl c3MgaXQgd291bGQgYmUgZmFpciB0byBzYXkgdGhlIGNvbWJvIHRyaWVzIENSQyByZWFkIHVwCj4g dG8gNiAqIDUgPSAzMCB0aW1lcy4KCkknbGwgcGxheSBhcm91bmQgd2l0aCBtYWtpbmcgaTkxNV9z aW5rX2NyYygpIGEgbGl0dGxlIGxlc3MKcGVyc2lzdGVudCBhbmQgc2VlIHdoYXQgaXQgZG9lcy4g IFRoZSBsb29wIGluIGludGVsX2RwX3NpbmtfY3JjKCkKZnJlcXVlbnRseSBnb2VzIDMrIHRyaWVz LCBzbyBJJ2QgcHJlZmVyIHRvIGtlZXAgdGhhdCBvbmUgYXMgaXQgaXMuCgoKPiA+PiBUaGUgc2xl ZXBzIHNob3VsZCBwcm9iYWJseSBiZSBhIHNlcGFyYXRlIGNoYW5nZS4gQWxzbyBub3QgaGFwcHkg YWJvdXQKPiA+PiB0aGUgbWFnaWMgbnVtYmVycyB0aGVyZS4KPiA+Cj4gPiBMb29waW5nIHcvbyB0 aGUgc2xlZXBzIGRvZXNuJ3QgbWFrZSBhIHRvbiBvZiBzZW5zZSBJTUhPLiAgVGhlIG51bWJlcnMK PiA+IHdlcmUgZm91bmQgZXhwZXJpbWVudGFsbHkgb24gS0JMLCB3aGljaCBzZWVtZWQgdG8gbW9y ZSBlYXNpbHkKPiA+IGV4ZXJjaXNlIHRoZSByYWNlIHRoYXQgdGhpcyBwYXRjaCBpcyBtZWFudCB0 byBhZGRyZXNzLiAgSWRlYWxseSB0aGUKPiA+IHBhbmVscyB3b3VsZCBub3QgaW5jcmVtZW50IHRo ZSBjb3VudGVyIHVudGlsIHRoZXkgd2VyZSBzdXJlIHRoYXQgdGhlCj4gPiBDUkMgZGF0YSBpbiB0 aGUgRFBDRCBhY3R1YWxseSByZWZsZWN0ZWQgcmVhbGl0eS4gIFVuZm9ydHVuYXRlbHksIHRoaXMK PiA+IGlzbid0IHdoYXQgd2UncmUgc2VlaW5nLiAgSSB3aWxsIGNyZWF0ZSBhIGNvdXBsZSBvZiAj ZGVmaW5lcyBmb3IgdGhlCj4gPiBzbGVlcCB2YWx1ZXMsIGF0IGxlYXN0LCB3aXRoIHNvbWUgY29t bWVudHMgYWJvdXQgdGhlbS4gIAo+IAo+IEl0J3MganVzdCB0aGF0IHRoZSBtYWdpYyBzbGVlcHMg YXJlIGVlcmlseSBjbG9zZSB0byBhIGZyYW1lIGF0IDYwCj4gSHouIERpZCB5b3UgdHJ5IGFub3Ro ZXIgdmJsYW5rIHdhaXQgaW5zdGVhZD8gT3IgbWF5YmUgaXQncyB0aGUgc3luYyB0bwo+IHZibGFu ayB0aGF0IGlzIHRoZSBpc3N1ZS4KClRoaXMgYnJpbmdzIHVwIGFuIGludGVyZXN0aW5nIHBvaW50 LiAgSU1ITyByZWx5aW5nIG9uIHZibGFua3MgZm9yIFBTUgpyZWxhdGVkIHN0dWZmIGlzIGEgYmFk IGlkZWEsIGF0IGxlYXN0IHdoaWxlIFBTUiBpcyBhY3RpdmUuICBUaGUKcmVhc29uIEkgc2F5IHRo aXMgaXMgdGhhdCBpZiBQU1IgaXMgYWN0aXZlLCB0aGVuIHRoZSBsaW5rIGl0c2VsZiBtYXkKb3Ig bWF5IG5vdCBiZSBhY3RpdmUuICBXZSBjZXJ0YWlubHkgc2hvdWxkbid0IGJlIHNlbmRpbmcgZnJh bWVzIG9mCmRhdGEsIHZibGFua3MsICBvciBhbnl0aGluZyBvZiB0aGF0IGlsay4gIFRoZXJlJ3Mg YSBwYXRjaCBzZXJpZXMgdGhhdApSb2RyaWdvIHdyb3RlIGxhc3QgQXVndXN0IHRoYXQgSSBwbGFu IHRvIHdyaXRlIGEgSUdUIHRlc3QgY2FzZSBmb3IgKEkKd2FudGVkIHRvIHNlZSBJR1Qgd29ya2lu ZyByaWdodCBmb3IgUFNSIHRlc3RzIGluIGdlbmVyYWwgYmVmb3JlIGRvaW5nCnRoaXMpIHRoYXQg YmFzaWNhbGx5IG1ha2VzIHN1cmUgdGhhdCB2YmxhbmtzIGFyZSBkaXNhYmxlZCBpZiBQU1IgaXMK YWN0aXZlLCBhbmQgdGhhdCBlbmFibGluZyB2YmxhbmtzIGNhdXNlcyBQU1IgdG8gZXhpdC4gIFJl dmlldwpmZWVkYmFjayBvbiB0aGF0IHNlcmllcyB3YXMgdGhhdCBpdCBuZWVkZWQgYW4gSUdUIHRl c3QuICBXaGVuIHRoaW5raW5nCmFib3V0IHRoaXMgc2VyaWVzLCBJJ3ZlIGJlZW4gdG95aW5nIHdp dGggdGhlIGlkZWEgb2YgZG9pbmcgYSBzbGVlcApiYXNlZCBvbiB0aGUgdGltZSBuZWVkZWQgdG8g cmVuZGVyIGEgZnJhbWUgKyB0aGUgYXBwcm9wcmlhdGUgYmxhbmtpbmcKaW50ZXJ2YWxzIGluc3Rl YWQgb2YgZG9pbmcgYWxsIG9mIHRoZSB2Ymxhbmsgd2FpdHMgYW55aG93LCBhdCBsZWFzdApmb3Ig dGhlIHNpbmsgQ1JDIHN0dWZmIHNpbmNlIHdlIG5lZWQgdG8gZ2V0IHRoYXQgZGF0YSBvdXQgd2hp bGUgUFNSCmlzIGFjdGl2ZS4gIE5vdyBJJ20gd29uZGVyaW5nIGlmIHdlIHNob3VsZCBnbyBhaGVh ZCBhbmQgZG8gdGhhdCBmb3IKYWxsIGJ1dCB0aGUgUFNSIGV4aXQgY2FzZSBub3csIHBlcmhhcHMu ICBUaG91Z2h0cz8KCj4gPj4gQWxzbywgdGhlcmUgYXJlIHBsZW50eSBvZiB3aGF0IHNlZW0gbGlr ZSB1bnJlbGF0ZWQgY2hhbmdlcy4gV2hpdGVzcGFjZSwKPiA+PiBkZWJ1ZyBsb2dnaW5nLCBlcnJv ciBjaGVja2luZywgZXRjLgo+ID4KPiA+IEkgbG9va2VkIGF0IHRoaXMgYXMgcmVmYWN0b3Jpbmcg dGhlIGV4aXN0aW5nIGltcGxlbWVudGF0aW9uLCBzbyBJCj4gPiB3ZW50IGFoZWFkIGFuZCBhZGRl ZCBzb21lIGRlYnVnZ2luZyBpbmZvOyB0aGUgZXJyb3IgY2hlY2tpbmcgaXMKPiA+IHBhcnQgb2Yg dGhlIHJlZmFjdG9yaW5nLiAgR2l2ZW4gdGhlIGhpc3Rvcnkgb2YgcHJvYmxlbXMgd2l0aCB0aGlz Cj4gPiBmdW5jdGlvbmFsaXR5IHRoYXQgc2VlbWVkIHdhcnJhbnRlZC4gIEkgZGlkIG5vdGljZSBv bmUgbGluZSBvZgo+ID4gd2hpdGVzcGFjZSBjaGFuZ2UgdGhhdCBzbnVjayBpbiAod2hlcmUgSSBt aXNzZWQgdGhhdCBJIHJlbW92ZWQgYQo+ID4gYmxhbmsgbGluZS4pICBJIGNhbiB0YWtlIG91dCB0 aGUgZGVidWcgcHJpbnRzIGZvciB0aGUgc3VjY2Vzcwo+ID4gY2FzZXMgaWYgdGhleSBzZWVtIGV4 Y2Vzc2l2ZSAoYW5kIEknbGwgcmVzdG9yZSB0aGUgZGVsZXRlZAo+ID4gYmxhbmsgbGluZSBmb3Ig dGhlIG5leHQgdmVyc2lvbiBvZiB0aGUgcGF0Y2guKQo+IAo+IFRoZSB0aGluZyBpcywgYnkgbm93 IEknbSBsb29raW5nIGF0IGJhc2ljYWxseSBhbnkgc2luayB2aXNpYmxlCj4gZnVuY3Rpb25hbCBj aGFuZ2VzIHRvIGVEUCwgYW5kIFBTUiBpbiBwYXJ0aWN1bGFyLCB3aXRoIHRoZSB0aG91Z2h0IHRo YXQKPiB0aGlzIG1heSBoYXZlIHRvIGJlIHJldmVydGVkIGR1ZSB0byByZWdyZXNzaW9ucyBsYXRl ci4gVGhhdCBoYXMgbm90aGluZwo+IHRvIGRvIHdpdGggdGhlc2UgcGF0Y2hlcywgYnV0IHJhdGhl ciBvdXIgdHJhY2sgcmVjb3JkIHdpdGggZURQIGFuZAo+IFBTUi4gKEFuZCB0aGF0IGFsc28gc2F5 cyBhIGxvdCBhYm91dCBlRFAgc2luayBxdWFsaXR5IGluIGdlbmVyYWwuKQo+IAo+IFNvIEknZCBy YXRoZXIgc2VlIHRoZSBvdGhlciBjaGFuZ2VzIHNwbGl0IG91dCBzbyB3ZSBoYXZlIGEgc21hbGxl ciBkaWZmCj4gdG8gcmV2ZXJ0LCBpbiBjYXNlIHdlIGhhdmUgdG8gcmV2ZXJ0LiBUaGUgcGVzc2lt aXN0IGRvZXMgbm90IGdldAo+IGRpc2FwcG9pbnRlZC4gQW5kIHNvIGZhciBQU1IgaGFzbid0IGdp dmVuIHVzIGFueSByZWFzb25zIGZvciBvcHRpbWlzbS4KCkxldCBtZSBzZWUgd2hhdCBJIGNhbiBk by4gIEkgbWlnaHQgYmUgYWJsZSB0byBhdCBsZWFzdCBzcGxpdCBvdXQgc29tZQpvZiB0aGUgZGVi dWcgLyBlcnJvciBjaGVja2luZyBpbnRvIGEgc2VwYXJhdGUgcGF0Y2guCgpKaW0KCj4gQlIsCj4g SmFuaS4KPiAKPiAKPiAKPiA+Cj4gPiBKaW0KPiA+Cj4gPgo+ID4+IAo+ID4+IEJSLAo+ID4+IEph bmkuCj4gPj4gCj4gPj4gCj4gPj4gPgo+ID4+ID4gQ2M6IFJvZHJpZ28gVml2aSA8cm9kcmlnby52 aXZpQGludGVsLmNvbT4KPiA+PiA+IENjOiBQYXVsbyBaYW5vbmkgPHBhdWxvLnIuemFub25pQGlu dGVsLmNvbT4KPiA+PiA+IFNpZ25lZC1vZmYtYnk6IEppbSBCcmlkZSA8amltLmJyaWRlQGxpbnV4 LmludGVsLmNvbT4KPiA+PiA+IC0tLQo+ID4+ID4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf ZGVidWdmcy5jIHwgMTQgKysrKysrKy0tCj4gPj4gPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZHAuYyAgICAgfCA1NyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tCj4g Pj4gPiAgMiBmaWxlcyBjaGFuZ2VkLCA2MSBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkK PiA+PiA+Cj4gPj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1 Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+ID4+ID4gaW5kZXgg ODcwYzQ3MC4uNDkwMjQ3MyAxMDA2NDQKPiA+PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZGVidWdmcy5jCj4gPj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rl YnVnZnMuYwo+ID4+ID4gQEAgLTI3MTgsNyArMjcxOCw3IEBAIHN0YXRpYyBpbnQgaTkxNV9zaW5r X2NyYyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCj4gPj4gPiAgCXN0cnVjdCBpbnRl bF9jb25uZWN0b3IgKmNvbm5lY3RvcjsKPiA+PiA+ICAJc3RydWN0IGRybV9jb25uZWN0b3JfbGlz dF9pdGVyIGNvbm5faXRlcjsKPiA+PiA+ICAJc3RydWN0IGludGVsX2RwICppbnRlbF9kcCA9IE5V TEw7Cj4gPj4gPiAtCWludCByZXQ7Cj4gPj4gPiArCWludCByZXQsIHRyaWVzID0gNjsKPiA+PiA+ ICAJdTggY3JjWzZdOwo+ID4+ID4gIAo+ID4+ID4gIAlkcm1fbW9kZXNldF9sb2NrX2FsbChkZXYp Owo+ID4+ID4gQEAgLTI3MzgsOSArMjczOCwxNyBAQCBzdGF0aWMgaW50IGk5MTVfc2lua19jcmMo c3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQo+ID4+ID4gIAo+ID4+ID4gIAkJaW50ZWxf ZHAgPSBlbmNfdG9faW50ZWxfZHAoY29ubmVjdG9yLT5iYXNlLnN0YXRlLT5iZXN0X2VuY29kZXIp Owo+ID4+ID4gIAo+ID4+ID4gLQkJcmV0ID0gaW50ZWxfZHBfc2lua19jcmMoaW50ZWxfZHAsIGNy Yyk7Cj4gPj4gPiAtCQlpZiAocmV0KQo+ID4+ID4gKwkJbWVtc2V0KGNyYywgMCwgNik7Cj4gPj4g PiArCQlkbyB7Cj4gPj4gPiArCQkJcmV0ID0gaW50ZWxfZHBfc2lua19jcmMoaW50ZWxfZHAsIGNy Yyk7Cj4gPj4gPiArCQkJaWYgKHJldCA9PSAtRVRJTUVET1VUKQo+ID4+ID4gKwkJCQl1c2xlZXBf cmFuZ2UoNTAwLCA3MDApOwo+ID4+ID4gKwkJfSB3aGlsZSAoKHJldCA9PSAtRVRJTUVET1VUKSAm JiAtLXRyaWVzKTsKPiA+PiA+ICsKPiA+PiA+ICsJCWlmIChyZXQgIT0gMCkgewo+ID4+ID4gKwkJ CXNlcV9wcmludGYobSwgIjAwMDAwMDAwMDAwMFxuIik7Cj4gPj4gPiAgCQkJZ290byBvdXQ7Cj4g Pj4gPiArCQl9Cj4gPj4gPiAgCj4gPj4gPiAgCQlzZXFfcHJpbnRmKG0sICIlMDJ4JTAyeCUwMngl MDJ4JTAyeCUwMnhcbiIsCj4gPj4gPiAgCQkJICAgY3JjWzBdLCBjcmNbMV0sIGNyY1syXSwKPiA+ PiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYwo+ID4+ID4gaW5kZXggMDZiOGJkNC4uMjE3YmMwNiAx MDA2NDQKPiA+PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKPiA+PiA+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKPiA+PiA+IEBAIC0zODc3LDEz ICszODc3LDE1IEBAIHN0YXRpYyBpbnQgaW50ZWxfZHBfc2lua19jcmNfc3RvcChzdHJ1Y3QgaW50 ZWxfZHAgKmludGVsX2RwKQo+ID4+ID4gIAo+ID4+ID4gIAlkbyB7Cj4gPj4gPiAgCQlpbnRlbF93 YWl0X2Zvcl92YmxhbmsoZGV2X3ByaXYsIGludGVsX2NydGMtPnBpcGUpOwo+ID4+ID4gLQo+ID4+ ID4gKwkJdXNsZWVwX3JhbmdlKDE2NzAwLCAxNzAwMCk7Cj4gPj4gPiAgCQlpZiAoZHJtX2RwX2Rw Y2RfcmVhZGIoJmludGVsX2RwLT5hdXgsCj4gPj4gPiAgCQkJCSAgICAgIERQX1RFU1RfU0lOS19N SVNDLCAmYnVmKSA8IDApIHsKPiA+PiA+ICsJCQlEUk1fREVCVUdfS01TKCJDb3VsZCBub3QgcmVh ZCBURVNUX1NJTktfTUlTQ1xuIik7Cj4gPj4gPiAgCQkJcmV0ID0gLUVJTzsKPiA+PiA+ICAJCQln b3RvIG91dDsKPiA+PiA+ICAJCX0KPiA+PiA+ICAJCWNvdW50ID0gYnVmICYgRFBfVEVTVF9DT1VO VF9NQVNLOwo+ID4+ID4gKwkJRFJNX0RFQlVHX0tNUygiUFNSIGNvdW50IGlzICVkXG4iLCBjb3Vu dCk7Cj4gPj4gPiAgCX0gd2hpbGUgKC0tYXR0ZW1wdHMgJiYgY291bnQpOwo+ID4+ID4gIAo+ID4+ ID4gIAlpZiAoYXR0ZW1wdHMgPT0gMCkgewo+ID4+ID4gQEAgLTM5MjgsNiArMzkzMCw4IEBAIHN0 YXRpYyBpbnQgaW50ZWxfZHBfc2lua19jcmNfc3RhcnQoc3RydWN0IGludGVsX2RwICppbnRlbF9k cCkKPiA+PiA+ICAJfQo+ID4+ID4gIAo+ID4+ID4gIAlpbnRlbF93YWl0X2Zvcl92YmxhbmsoZGV2 X3ByaXYsIGludGVsX2NydGMtPnBpcGUpOwo+ID4+ID4gKwl1c2xlZXBfcmFuZ2UoMTY3MDAsIDE3 MDAwKTsKPiA+PiA+ICsJRFJNX0RFQlVHX0tNUygiUFNSIFN1Y2Nlc3NmdWxseSBzdGFydGVkIHNp bmsgQ1JDXG4iKTsKPiA+PiA+ICAJcmV0dXJuIDA7Cj4gPj4gPiAgfQo+ID4+ID4gIAo+ID4+ID4g QEAgLTM5MzksMjEgKzM5NDMsMzAgQEAgaW50IGludGVsX2RwX3NpbmtfY3JjKHN0cnVjdCBpbnRl bF9kcCAqaW50ZWxfZHAsIHU4ICpjcmMpCj4gPj4gPiAgCXU4IGJ1ZjsKPiA+PiA+ICAJaW50IGNv dW50LCByZXQ7Cj4gPj4gPiAgCWludCBhdHRlbXB0cyA9IDY7Cj4gPj4gPiArCXU4IG9sZF9jcmNb Nl07Cj4gPj4gPiArCj4gPj4gPiArCWlmIChjcmMgIT0gTlVMTCkKPiA+PiA+ICsJCW1lbXNldChj cmMsIDAsIDYpOwo+ID4+ID4gKwllbHNlCj4gPj4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+PiA+ ICAKPiA+PiA+ICAJcmV0ID0gaW50ZWxfZHBfc2lua19jcmNfc3RhcnQoaW50ZWxfZHApOwo+ID4+ ID4gLQlpZiAocmV0KQo+ID4+ID4gKwlpZiAocmV0KSB7Cj4gPj4gPiArCQlEUk1fREVCVUdfS01T KCJDb3VsZCBub3Qgc3RhcnQgc2luayBjcmM7IHJldCAlZFxuIiwgcmV0KTsKPiA+PiA+ICAJCXJl dHVybiByZXQ7Cj4gPj4gPiArCX0KPiA+PiA+ICAKPiA+PiA+ICAJZG8gewo+ID4+ID4gIAkJaW50 ZWxfd2FpdF9mb3JfdmJsYW5rKGRldl9wcml2LCBpbnRlbF9jcnRjLT5waXBlKTsKPiA+PiA+ICsJ CXVzbGVlcF9yYW5nZSgxNjcwMCwgMTcwMDApOwo+ID4+ID4gIAo+ID4+ID4gIAkJaWYgKGRybV9k cF9kcGNkX3JlYWRiKCZpbnRlbF9kcC0+YXV4LAo+ID4+ID4gIAkJCQkgICAgICBEUF9URVNUX1NJ TktfTUlTQywgJmJ1ZikgPCAwKSB7Cj4gPj4gPiArCQkJRFJNX0RFQlVHX0tNUygiQ291bmQgbm90 IHJlYWQgVEVTVF9TSU5LX01JU0NcbiIpOwo+ID4+ID4gIAkJCXJldCA9IC1FSU87Cj4gPj4gPiAg CQkJZ290byBzdG9wOwo+ID4+ID4gIAkJfQo+ID4+ID4gIAkJY291bnQgPSBidWYgJiBEUF9URVNU X0NPVU5UX01BU0s7Cj4gPj4gPiAtCj4gPj4gPiAgCX0gd2hpbGUgKC0tYXR0ZW1wdHMgJiYgY291 bnQgPT0gMCk7Cj4gPj4gPiAgCj4gPj4gPiAgCWlmIChhdHRlbXB0cyA9PSAwKSB7Cj4gPj4gPiBA QCAtMzk2MiwxMSArMzk3NSw0MSBAQCBpbnQgaW50ZWxfZHBfc2lua19jcmMoc3RydWN0IGludGVs X2RwICppbnRlbF9kcCwgdTggKmNyYykKPiA+PiA+ICAJCWdvdG8gc3RvcDsKPiA+PiA+ICAJfQo+ ID4+ID4gIAo+ID4+ID4gLQlpZiAoZHJtX2RwX2RwY2RfcmVhZCgmaW50ZWxfZHAtPmF1eCwgRFBf VEVTVF9DUkNfUl9DUiwgY3JjLCA2KSA8IDApIHsKPiA+PiA+IC0JCXJldCA9IC1FSU87Cj4gPj4g PiAtCQlnb3RvIHN0b3A7Cj4gPj4gPiAtCX0KPiA+PiA+ICsJYXR0ZW1wdHMgPSA2Owo+ID4+ID4g KwltZW1zZXQob2xkX2NyYywgMHhGRiwgNik7Cj4gPj4gPiArCWRvIHsKPiA+PiA+ICsJCWludGVs X3dhaXRfZm9yX3ZibGFuayhkZXZfcHJpdiwgaW50ZWxfY3J0Yy0+cGlwZSk7Cj4gPj4gPiArCQl1 c2xlZXBfcmFuZ2UoMTY1MDAsIDE3MDAwKTsKPiA+PiA+ICsJCWlmIChkcm1fZHBfZHBjZF9yZWFk KCZpbnRlbF9kcC0+YXV4LCBEUF9URVNUX0NSQ19SX0NSLAo+ID4+ID4gKwkJCQkgICAgIGNyYywg NikgPCAwKSB7Cj4gPj4gPiArCQkJRFJNX0RFQlVHX0tNUygiQ291bGQgbm90IHJlYWQgc2luayBj cmNcbiIpOwo+ID4+ID4gKwkJCXJldCA9IC1FSU87Cj4gPj4gPiArCQkJZ290byBzdG9wOwo+ID4+ ID4gKwkJfQo+ID4+ID4gKwo+ID4+ID4gKwkJaWYgKG1lbWNtcChvbGRfY3JjLCBjcmMsIDYpID09 IDApIHsKPiA+PiA+ICsJCQlEUk1fREVCVUdfS01TKCJQU1IgQWN0aXZlOiAlM3MgTWF0Y2hpbmcg Y3JjIHZhbHVlcyBmb3VuZDoiCj4gPj4gPiArCQkJCSAgICAgICIlMDJ4JTAyeCUwMnglMDJ4JTAy eCUwMnhcbiIsCj4gPj4gPiArCQkJCSAgICAgIHllc25vKGRldl9wcml2LT5wc3IuYWN0aXZlKSwK PiA+PiA+ICsJCQkJICAgICAgY3JjWzBdLCBjcmNbMV0sIGNyY1syXSwKPiA+PiA+ICsJCQkJICAg ICAgY3JjWzNdLCBjcmNbNF0sIGNyY1s1XSk7Cj4gPj4gPiArCQkJcmV0ID0gMDsKPiA+PiA+ICsJ CQlnb3RvIHN0b3A7Cj4gPj4gPiArCQl9IGVsc2Ugewo+ID4+ID4gKwkJCURSTV9ERUJVR19LTVMo IlBTUiBBY3RpdmU6ICUzcyBjcmMgJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4ICIKPiA+PiA+ICsJ CQkJICAgICAgImRvZXNuJ3QgbWF0Y2ggIgo+ID4+ID4gKwkJCQkgICAgICAicHJldmlvdXMgJTAy eCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAo+ID4+ID4gKwkJCQkgICAgICB5ZXNubyhkZXZfcHJp di0+cHNyLmFjdGl2ZSksCj4gPj4gPiArCQkJCSAgICAgIGNyY1swXSwgY3JjWzFdLCBjcmNbMl0s Cj4gPj4gPiArCQkJCSAgICAgIGNyY1szXSwgY3JjWzRdLCBjcmNbNV0sCj4gPj4gPiArCQkJCSAg ICAgIG9sZF9jcmNbMF0sIG9sZF9jcmNbMV0sIG9sZF9jcmNbMl0sCj4gPj4gPiArCQkJCSAgICAg IG9sZF9jcmNbM10sIG9sZF9jcmNbNF0sIG9sZF9jcmNbNV0pOwo+ID4+ID4gKwkJCW1lbWNweShv bGRfY3JjLCBjcmMsIDYpOwo+ID4+ID4gKwkJfQo+ID4+ID4gKwl9IHdoaWxlICgtLWF0dGVtcHRz KTsKPiA+PiA+ICAKPiA+PiA+ICsJRFJNX0RFQlVHX0tNUygiRmFpbGVkIHRvIGdldCBDUkMgYWZ0 ZXIgNiBhdHRlbXB0cy5cbiIpOwo+ID4+ID4gKwlyZXQgPSAtRVRJTUVET1VUOwo+ID4+ID4gIHN0 b3A6Cj4gPj4gPiAgCWludGVsX2RwX3NpbmtfY3JjX3N0b3AoaW50ZWxfZHApOwo+ID4+ID4gIAly ZXR1cm4gcmV0Owo+ID4+IAo+ID4+IC0tIAo+ID4+IEphbmkgTmlrdWxhLCBJbnRlbCBPcGVuIFNv dXJjZSBUZWNobm9sb2d5IENlbnRlcgo+IAo+IC0tIAo+IEphbmkgTmlrdWxhLCBJbnRlbCBPcGVu IFNvdXJjZSBUZWNobm9sb2d5IENlbnRlcgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngK