From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 2/4] drm/i915: Verify the engine workarounds stick on application Date: Mon, 15 Apr 2019 11:41:43 +0100 Message-ID: <9ced15e2-63c3-4356-977b-2ca482cc7179@linux.intel.com> References: <20190413125820.14112-1-chris@chris-wilson.co.uk> <20190413125820.14112-2-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id DF41F89498 for ; Mon, 15 Apr 2019 10:41:45 +0000 (UTC) In-Reply-To: <20190413125820.14112-2-chris@chris-wilson.co.uk> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDEzLzA0LzIwMTkgMTM6NTgsIENocmlzIFdpbHNvbiB3cm90ZToKPiBSZWFkIHRoZSBlbmdp bmUgd29ya2Fyb3VuZHMgYmFjayB1c2luZyB0aGUgR1BVIGFmdGVyIGxvYWRpbmcgdGhlIGluaXRp YWwKPiBjb250ZXh0IHN0YXRlIHRvIHZlcmlmeSB0aGF0IHdlIGFyZSBzZXR0aW5nIHRoZW0gY29y cmVjdGx5LCBhbmQgYmFpbCBpZgo+IGl0IGZhaWxzLgoKQXJlbid0IHRoZSBjb250ZXh0IHdhLyBv bmVzIHdlIGV4cGVjdCB0byBzZWUgc2F2ZWQgaW4gdGhlIGNvbnRleHQ/IEFzIApzdWNoLCB3aGF0 IGRpZmZlcmVuY2UgZG8geW91IGV4cGVjdCB0byBzZWUgYmV0d2VlbiBtbWlvIGFuZCBzcm0gCnZl cmlmaWNhdGlvbj8gU2hvdWxkIGV2ZW4gYm90aCBiZSBkb25lPwoKPiAKPiBTaWduZWQtb2ZmLWJ5 OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiBDYzogVHZydGtvIFVy c3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtLmMgICAgICAgICAgICAgICB8ICAgNiArCj4gICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5jICAgICAgfCAxMjAgKysrKysrKysrKysrKysrKysr Cj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5oICAgICAgfCAgIDIg Kwo+ICAgLi4uL2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF93b3JrYXJvdW5kcy5jICAgIHwgIDUz ICstLS0tLS0tCj4gICA0IGZpbGVzIGNoYW5nZWQsIDEzNCBpbnNlcnRpb25zKCspLCA0NyBkZWxl dGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0u YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKPiBpbmRleCAwYTgxOGE2MGFkMzEu Ljk1YWU2OTc1M2U5MSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwo+IEBAIC00NzE3LDYg KzQ3MTcsMTIgQEAgc3RhdGljIGludCBfX2ludGVsX2VuZ2luZXNfcmVjb3JkX2RlZmF1bHRzKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAgCQlpOTE1X3JlcXVlc3RfYWRkKHJxKTsK PiAgIAkJaWYgKGVycikKPiAgIAkJCWdvdG8gZXJyX2FjdGl2ZTsKPiArCj4gKwkJaWYgKElTX0VO QUJMRUQoQ09ORklHX0RSTV9JOTE1X0RFQlVHX0dFTSkgJiYKPiArCQkgICAgaW50ZWxfZW5naW5l X3ZlcmlmeV93b3JrYXJvdW5kcyhlbmdpbmUsICJsb2FkIikpIHsKPiArCQkJZXJyID0gLUVJTzsK PiArCQkJZ290byBlcnJfYWN0aXZlOwoKSSBhbSBub3Qgc3VyZSB0aGF0IHdlZGdpbmcgaXMgcmVx dWlyZWQgZXZlbiBpZiBvbmx5IGluIGRlYnVnIGJ1aWxkcy4gSXMgCkRSTV9FUlJPUiBub3QgZW5v dWdoIHRvIGZsYWcgZmFpbHVyZXM/Cgo+ICsJCX0KPiAgIAl9Cj4gICAKPiAgIAkvKiBGbHVzaCB0 aGUgZGVmYXVsdCBjb250ZXh0IGltYWdlIHRvIG1lbW9yeSwgYW5kIGVuYWJsZSBwb3dlcnNhdmlu Zy4gKi8KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3Vu ZHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3dvcmthcm91bmRzLmMKPiBpbmRleCAx YzU0YjUwMzA4MDcuLmRiOTlmMmU2NzZiYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF93b3JrYXJvdW5kcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfd29ya2Fyb3VuZHMuYwo+IEBAIC0xMjU5LDYgKzEyNTksMTI2IEBAIHZvaWQgaW50ZWxfZW5n aW5lX2FwcGx5X3dvcmthcm91bmRzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAg IAl3YV9saXN0X2FwcGx5KGVuZ2luZS0+dW5jb3JlLCAmZW5naW5lLT53YV9saXN0KTsKPiAgIH0K PiAgIAo+ICtzdGF0aWMgc3RydWN0IGk5MTVfdm1hICoKPiArY3JlYXRlX3NjcmF0Y2goc3RydWN0 IGk5MTVfYWRkcmVzc19zcGFjZSAqdm0sIGludCBjb3VudCkKPiArewo+ICsJc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iajsKPiArCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICsJdW5zaWdu ZWQgaW50IHNpemU7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCXNpemUgPSByb3VuZF91cChjb3VudCAq IDQsIFBBR0VfU0laRSk7Cj4gKwlvYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX2ludGVybmFs KHZtLT5pOTE1LCBzaXplKTsKPiArCWlmIChJU19FUlIob2JqKSkKPiArCQlyZXR1cm4gRVJSX0NB U1Qob2JqKTsKPiArCj4gKwlpOTE1X2dlbV9vYmplY3Rfc2V0X2NhY2hlX2NvaGVyZW5jeShvYmos IEk5MTVfQ0FDSEVfTExDKTsKPiArCj4gKwl2bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShvYmosIHZt LCBOVUxMKTsKPiArCWlmIChJU19FUlIodm1hKSkgewo+ICsJCWVyciA9IFBUUl9FUlIodm1hKTsK PiArCQlnb3RvIGVycl9vYmo7Cj4gKwl9Cj4gKwo+ICsJZXJyID0gaTkxNV92bWFfcGluKHZtYSwg MCwgMCwKPiArCQkJICAgaTkxNV92bWFfaXNfZ2d0dCh2bWEpID8gUElOX0dMT0JBTCA6IFBJTl9V U0VSKTsKPiArCWlmIChlcnIpCj4gKwkJZ290byBlcnJfb2JqOwo+ICsKPiArCXJldHVybiB2bWE7 Cj4gKwo+ICtlcnJfb2JqOgo+ICsJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+ICsJcmV0dXJu IEVSUl9QVFIoZXJyKTsKPiArfQo+ICsKPiArc3RhdGljIGludAo+ICt3YV9saXN0X3NybShzdHJ1 Y3QgaTkxNV9yZXF1ZXN0ICpycSwKPiArCSAgICBjb25zdCBzdHJ1Y3QgaTkxNV93YV9saXN0ICp3 YWwsCj4gKwkgICAgc3RydWN0IGk5MTVfdm1hICp2bWEpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBp OTE1X3dhICp3YTsKPiArCXUzMiBzcm0sICpjczsKPiArCWludCBpOwo+ICsKPiArCXNybSA9IE1J X1NUT1JFX1JFR0lTVEVSX01FTSB8IE1JX1NSTV9MUk1fR0xPQkFMX0dUVDsKPiArCWlmIChJTlRF TF9HRU4ocnEtPmk5MTUpID49IDgpCj4gKwkJc3JtKys7Cj4gKwo+ICsJY3MgPSBpbnRlbF9yaW5n X2JlZ2luKHJxLCA0ICogd2FsLT5jb3VudCk7Cj4gKwlpZiAoSVNfRVJSKGNzKSkKPiArCQlyZXR1 cm4gUFRSX0VSUihjcyk7Cj4gKwo+ICsJZm9yIChpID0gMCwgd2EgPSB3YWwtPmxpc3Q7IGkgPCB3 YWwtPmNvdW50OyBpKyssIHdhKyspIHsKPiArCQkqY3MrKyA9IHNybTsKPiArCQkqY3MrKyA9IGk5 MTVfbW1pb19yZWdfb2Zmc2V0KHdhLT5yZWcpOwo+ICsJCSpjcysrID0gaTkxNV9nZ3R0X29mZnNl dCh2bWEpICsgc2l6ZW9mKHUzMikgKiBpOwo+ICsJCSpjcysrID0gMDsKPiArCX0KPiArCWludGVs X3JpbmdfYWR2YW5jZShycSwgY3MpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGVuZ2luZV93YV9saXN0X3ZlcmlmeShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUsCj4gKwkJCQkgY29uc3Qgc3RydWN0IGk5MTVfd2FfbGlzdCAqIGNvbnN0IHdhbCwKPiArCQkJ CSBjb25zdCBjaGFyICpmcm9tKQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3QgaTkxNV93YSAqd2E7Cj4g KwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKPiArCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+ICsJ dW5zaWduZWQgaW50IGk7Cj4gKwl1MzIgKnJlc3VsdHM7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWlm ICghd2FsLT5jb3VudCkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwl2bWEgPSBjcmVhdGVfc2NyYXRj aCgmZW5naW5lLT5pOTE1LT5nZ3R0LnZtLCB3YWwtPmNvdW50KTsKPiArCWlmIChJU19FUlIodm1h KSkKPiArCQlyZXR1cm4gUFRSX0VSUih2bWEpOwo+ICsKPiArCXJxID0gaTkxNV9yZXF1ZXN0X2Fs bG9jKGVuZ2luZSwgZW5naW5lLT5rZXJuZWxfY29udGV4dC0+Z2VtX2NvbnRleHQpOwo+ICsJaWYg KElTX0VSUihycSkpIHsKPiArCQllcnIgPSBQVFJfRVJSKHJxKTsKPiArCQlnb3RvIGVycl92bWE7 Cj4gKwl9Cj4gKwo+ICsJZXJyID0gd2FfbGlzdF9zcm0ocnEsIHdhbCwgdm1hKTsKPiArCWlmIChl cnIpCj4gKwkJZ290byBlcnJfdm1hOwo+ICsKPiArCWk5MTVfcmVxdWVzdF9hZGQocnEpOwo+ICsJ aWYgKGk5MTVfcmVxdWVzdF93YWl0KHJxLCBJOTE1X1dBSVRfTE9DS0VELCBIWiAvIDUpIDwgMCkg ewo+ICsJCWVyciA9IC1FVElNRTsKPiArCQlnb3RvIGVycl92bWE7Cj4gKwl9Cj4gKwo+ICsJcmVz dWx0cyA9IGk5MTVfZ2VtX29iamVjdF9waW5fbWFwKHZtYS0+b2JqLCBJOTE1X01BUF9XQik7Cj4g KwlpZiAoSVNfRVJSKHJlc3VsdHMpKSB7Cj4gKwkJZXJyID0gUFRSX0VSUihyZXN1bHRzKTsKPiAr CQlnb3RvIGVycl92bWE7Cj4gKwl9Cj4gKwo+ICsJZXJyID0gMDsKPiArCWZvciAoaSA9IDAsIHdh ID0gd2FsLT5saXN0OyBpIDwgd2FsLT5jb3VudDsgaSsrLCB3YSsrKQo+ICsJCWlmICghd2FfdmVy aWZ5KHdhLCByZXN1bHRzW2ldLCB3YWwtPm5hbWUsIGZyb20pKQo+ICsJCQllcnIgPSAtRU5YSU87 Cj4gKwo+ICsJaTkxNV9nZW1fb2JqZWN0X3VucGluX21hcCh2bWEtPm9iaik7Cj4gKwo+ICtlcnJf dm1hOgo+ICsJaTkxNV92bWFfdW5waW4odm1hKTsKPiArCWk5MTVfdm1hX3B1dCh2bWEpOwo+ICsJ cmV0dXJuIGVycjsKPiArfQo+ICsKPiAraW50IGludGVsX2VuZ2luZV92ZXJpZnlfd29ya2Fyb3Vu ZHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICsJCQkJICAgIGNvbnN0IGNoYXIg KmZyb20pCj4gK3sKPiArCXJldHVybiBlbmdpbmVfd2FfbGlzdF92ZXJpZnkoZW5naW5lLCAmZW5n aW5lLT53YV9saXN0LCBmcm9tKTsKPiArfQo+ICsKPiAgICNpZiBJU19FTkFCTEVEKENPTkZJR19E Uk1fSTkxNV9TRUxGVEVTVCkKPiAgICNpbmNsdWRlICJzZWxmdGVzdHMvaW50ZWxfd29ya2Fyb3Vu ZHMuYyIKPiAgICNlbmRpZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF93b3JrYXJvdW5kcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfd29ya2Fyb3VuZHMu aAo+IGluZGV4IDM0ZWVlNWVjNTExZS4uZmRmN2ViYjkwZjI4IDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2ludGVsX3dvcmthcm91bmRzLmgKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pbnRlbF93b3JrYXJvdW5kcy5oCj4gQEAgLTMwLDUgKzMwLDcgQEAgdm9pZCBpbnRl bF9lbmdpbmVfYXBwbHlfd2hpdGVsaXN0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7 Cj4gICAKPiAgIHZvaWQgaW50ZWxfZW5naW5lX2luaXRfd29ya2Fyb3VuZHMoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKTsKPiAgIHZvaWQgaW50ZWxfZW5naW5lX2FwcGx5X3dvcmthcm91 bmRzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4gK2ludCBpbnRlbF9lbmdpbmVf dmVyaWZ5X3dvcmthcm91bmRzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiArCQkJ CSAgICBjb25zdCBjaGFyICpmcm9tKTsKPiAgIAo+ICAgI2VuZGlmCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF93b3JrYXJvdW5kcy5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX3dvcmthcm91bmRzLmMKPiBpbmRleCA1Njdi NmY4ZGFlODYuLmEzNjM3NDhhN2E0ZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9zZWxmdGVzdHMvaW50ZWxfd29ya2Fyb3VuZHMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9pbnRlbF93b3JrYXJvdW5kcy5jCj4gQEAgLTM0MCw0OSArMzQwLDYgQEAg c3RhdGljIGludCBjaGVja193aGl0ZWxpc3RfYWNyb3NzX3Jlc2V0KHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSwKPiAgIAlyZXR1cm4gZXJyOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBzdHJ1 Y3QgaTkxNV92bWEgKmNyZWF0ZV9zY3JhdGNoKHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgp Cj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gLQlzdHJ1Y3QgaTkx NV92bWEgKnZtYTsKPiAtCXZvaWQgKnB0cjsKPiAtCWludCBlcnI7Cj4gLQo+IC0Jb2JqID0gaTkx NV9nZW1fb2JqZWN0X2NyZWF0ZV9pbnRlcm5hbChjdHgtPmk5MTUsIFBBR0VfU0laRSk7Cj4gLQlp ZiAoSVNfRVJSKG9iaikpCj4gLQkJcmV0dXJuIEVSUl9DQVNUKG9iaik7Cj4gLQo+IC0JaTkxNV9n ZW1fb2JqZWN0X3NldF9jYWNoZV9jb2hlcmVuY3kob2JqLCBJOTE1X0NBQ0hFX0xMQyk7Cj4gLQo+ IC0JcHRyID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAob2JqLCBJOTE1X01BUF9XQik7Cj4gLQlp ZiAoSVNfRVJSKHB0cikpIHsKPiAtCQllcnIgPSBQVFJfRVJSKHB0cik7Cj4gLQkJZ290byBlcnJf b2JqOwo+IC0JfQo+IC0JbWVtc2V0KHB0ciwgMHhjNSwgUEFHRV9TSVpFKTsKPiAtCWk5MTVfZ2Vt X29iamVjdF9mbHVzaF9tYXAob2JqKTsKPiAtCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAob2Jq KTsKPiAtCj4gLQl2bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShvYmosICZjdHgtPnBwZ3R0LT52bSwg TlVMTCk7Cj4gLQlpZiAoSVNfRVJSKHZtYSkpIHsKPiAtCQllcnIgPSBQVFJfRVJSKHZtYSk7Cj4g LQkJZ290byBlcnJfb2JqOwo+IC0JfQo+IC0KPiAtCWVyciA9IGk5MTVfdm1hX3Bpbih2bWEsIDAs IDAsIFBJTl9VU0VSKTsKPiAtCWlmIChlcnIpCj4gLQkJZ290byBlcnJfb2JqOwo+IC0KPiAtCWVy ciA9IGk5MTVfZ2VtX29iamVjdF9zZXRfdG9fY3B1X2RvbWFpbihvYmosIGZhbHNlKTsKPiAtCWlm IChlcnIpCj4gLQkJZ290byBlcnJfb2JqOwo+IC0KPiAtCXJldHVybiB2bWE7Cj4gLQo+IC1lcnJf b2JqOgo+IC0JaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+IC0JcmV0dXJuIEVSUl9QVFIoZXJy KTsKPiAtfQo+IC0KPiAgIHN0YXRpYyBzdHJ1Y3QgaTkxNV92bWEgKmNyZWF0ZV9iYXRjaChzdHJ1 Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+ICAgewo+ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmo7Cj4gQEAgLTQ3NSw3ICs0MzIsNyBAQCBzdGF0aWMgaW50IGNoZWNrX2RpcnR5 X3doaXRlbGlzdChzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4LAo+ICAgCWludCBlcnIgPSAw LCBpLCB2Owo+ICAgCXUzMiAqY3MsICpyZXN1bHRzOwo+ICAgCj4gLQlzY3JhdGNoID0gY3JlYXRl X3NjcmF0Y2goY3R4KTsKPiArCXNjcmF0Y2ggPSBjcmVhdGVfc2NyYXRjaCgmY3R4LT5wcGd0dC0+ dm0sIDIgKiBBUlJBWV9TSVpFKHZhbHVlcykgKyAxKTsKPiAgIAlpZiAoSVNfRVJSKHNjcmF0Y2gp KQo+ICAgCQlyZXR1cm4gUFRSX0VSUihzY3JhdGNoKTsKPiAgIAo+IEBAIC03NTIsOSArNzA5LDEx IEBAIHN0YXRpYyBib29sIHZlcmlmeV9ndF9lbmdpbmVfd2Eoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUsCj4gICAKPiAgIAlvayAmPSB3YV9saXN0X3ZlcmlmeSgmaTkxNS0+dW5jb3JlLCAm bGlzdHMtPmd0X3dhX2xpc3QsIHN0cik7Cj4gICAKPiAtCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUs IGk5MTUsIGlkKQo+IC0JCW9rICY9IHdhX2xpc3RfdmVyaWZ5KGVuZ2luZS0+dW5jb3JlLAo+IC0J CQkJICAgICAmbGlzdHMtPmVuZ2luZVtpZF0ud2FfbGlzdCwgc3RyKTsKPiArCWZvcl9lYWNoX2Vu Z2luZShlbmdpbmUsIGk5MTUsIGlkKSB7Cj4gKwkJb2sgJj0gZW5naW5lX3dhX2xpc3RfdmVyaWZ5 KGVuZ2luZSwKPiArCQkJCQkgICAgJmxpc3RzLT5lbmdpbmVbaWRdLndhX2xpc3QsCj4gKwkJCQkJ ICAgIHN0cikgPT0gMDsKPiArCX0KPiAgIAo+ICAgCXJldHVybiBvazsKPiAgIH0KPiAKClJlZ2Fy ZHMsCgpUdnJ0a28KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4