From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH igt] tools/intel_reg: Add reading and writing registers through engine Date: Mon, 22 Jan 2018 18:08:57 +0200 Message-ID: <871siheuzq.fsf@gaia.fi.intel.com> References: <151213877121.9425.7682275503076761140@mail.alporthouse.com> <20180108141202.8718-1-mika.kuoppala@linux.intel.com> <87mv1o8lsg.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 B4DDC6E24C for ; Mon, 22 Jan 2018 16:09:00 +0000 (UTC) In-Reply-To: <87mv1o8lsg.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 , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org SmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGludGVsLmNvbT4gd3JpdGVzOgoKPiBPbiBNb24sIDA4 IEphbiAyMDE4LCBNaWthIEt1b3BwYWxhIDxtaWthLmt1b3BwYWxhQGxpbnV4LmludGVsLmNvbT4g d3JvdGU6Cj4+IEFkZCBvcHRpb24gdG8gc3BlY2lmeSBlbmdpbmUgZm9yIHJlZ2lzdGVyIHJlYWQv d3JpdGUgb3BlcmF0aW9uLgo+PiBJZiBlbmdpbmUgaXMgc3BlY2lmaWVkLCB1c2UgTUlfTE9BRF9S RUdJU1RFUl9JTU0gYW5kIE1JX1NUT1JFX1JFR0lTVEVSX0lNTQo+PiB0byB3cml0ZSBhbmQgcmVh ZCByZWdpc3RlciB1c2luZyBhIGJhdGNoIHRhcmdldGVkIGF0IHRoYXQgZW5naW5lLgo+Cj4gQ29w eS1wYXN0aW5nIGZyb20gdGhlIG1hbiBwYWdlLCB3ZSBhbHJlYWR5IGhhdmUgdGhlIG5vdGF0aW9u Ogo+Cj4gIlJlZ2lzdGVycyBhcmUgZGVmaW5lZCBhcyBbKFBPUlROQU1FfFBPUlROVU18TU1JTy1P RkZTRVQpOl0oUkVHTkFNRXxSRUdBRERSKS4iCj4KPiBXaHkgZG9uJ3Qgd2UgYWRkIHRoaXMgYXMg RU5HSU5FOlJFR05BTUUgb3Igc29tZXRoaW5nIGluc3RlYWQgb2YgYW4gZXh0cmEKPiAtLWVuZ2lu ZSBwYXJhbWV0ZXI/IEFzIGEgInBvcnQiLiBTdXJlLCBpdCdzIG1vcmUgd29yaywgYnV0IEkgcmVh bGx5IGxpa2UKPiB0aGUgY3VycmVudCBwb3NzaWJpbGl0eSBvZiByZWFkaW5nIGFsbCB0eXBlcyBv ZiByZWdpc3RlcnMgYXQgb25jZS4gTm93Cj4geW91IHByZXZlbnQgZHVtcHMgdGhhdCB3b3VsZCBj b250YWluIGJvdGggbW1pbyBhbmQgYmF0Y2ggYmFzZWQgcmVhZHMuCj4KCkFyZSB5b3Ugb2sgd2l0 aCB0aGUgbGF0ZXN0IHZlcnNpb24/IEFzIGRpc2N1c3NlZCBpbiBpcmMsIHRoZXJlIGFyZQpwcm9i bGVtcyB3aXRoIHRyeWluZyB0byBhZGQgZW5naW5lcyBhcyBwb3J0cywgZHVlIHRvIGR5bmFtaWMg bmF0dXJlCmFuZCBhbHNvIHRoYXQgdGhlIGV4aXN0aW5nIGluZnJhIHJlbGllcyBvbiBQT1JUTkFN RSBiZWluZyBtbWlvCmZvciBzeW1ib2xpYyByZWdpc3RlciBkdW1waW5nIHRvIHdvcmsgY29ycmVj dGx5LgoKZm9yIHRoZSB3YXJ0IG9mIGlmIChyZWctPmVuZ2luZSkgaW4gcmVhZC93cml0ZSBwYXRo cwp3ZSBnYWluIHRoZSBiZW5lZml0cyBvZiBtbWlvIGR1bXBzIHdpdGggZW5naW5lcy4KCi1NaWth Cgo+IEJSLAo+IEphbmkuCj4KPgo+Pgo+PiB2Mjogbm8gTUlfTk9PUCBhZnRlciBCQkUgKENocmlz KQo+PiB2MzogdXNlIG1vZGVybiBlbmdpbmUgbmFtZXMgKENocmlzKSwgdXNlIGdsb2JhbCBmZAo+ Pgo+PiBDYzogSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGludGVsLmNvbT4KPj4gQ2M6IENocmlz IFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+PiBDQzogSm9vbmFzIExhaHRpbmVu IDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgo+PiBTaWduZWQtb2ZmLWJ5OiBNaWth IEt1b3BwYWxhIDxtaWthLmt1b3BwYWxhQGxpbnV4LmludGVsLmNvbT4KPj4gLS0tCj4+ICB0b29s cy9pbnRlbF9yZWcuYyB8IDE1NiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0KPj4gIDEgZmlsZSBjaGFuZ2VkLCAxNTQgaW5zZXJ0aW9ucygrKSwg MiBkZWxldGlvbnMoLSkKPj4KPj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2ludGVsX3JlZy5jIGIvdG9v bHMvaW50ZWxfcmVnLmMKPj4gaW5kZXggMDBkMmE0YTEuLjdmMzQ5NGVmIDEwMDY0NAo+PiAtLS0g YS90b29scy9pbnRlbF9yZWcuYwo+PiArKysgYi90b29scy9pbnRlbF9yZWcuYwo+PiBAQCAtMzMs NiArMzMsNyBAQAo+PiAgI2luY2x1ZGUgPHVuaXN0ZC5oPgo+PiAgCj4+ICAjaW5jbHVkZSAiaWd0 LmgiCj4+ICsjaW5jbHVkZSAiaWd0X2d0LmgiCj4+ICAjaW5jbHVkZSAiaW50ZWxfaW8uaCIKPj4g ICNpbmNsdWRlICJpbnRlbF9jaGlwc2V0LmgiCj4+ICAKPj4gQEAgLTczLDYgKzc0LDExIEBAIHN0 cnVjdCBjb25maWcgewo+PiAgCj4+ICAJLyogcmVnaXN0ZXIgc3BlYyAqLwo+PiAgCWNoYXIgKnNw ZWNmaWxlOwo+PiArCj4+ICsJLyogZW5naW5lIHRvIHVzZSBmb3IgbHJpICh3cml0ZSkgYW5kIHNy bSAocmVhZCkgKi8KPj4gKwljaGFyICplbmdpbmU7Cj4+ICsJaW50IGZkOwo+PiArCj4+ICAJc3Ry dWN0IHJlZyAqcmVnczsKPj4gIAlzc2l6ZV90IHJlZ2NvdW50Owo+PiAgCj4+IEBAIC0yMzYsMTMg KzI0MiwxNDAgQEAgc3RhdGljIHZvaWQgZHVtcF9kZWNvZGUoc3RydWN0IGNvbmZpZyAqY29uZmln LCBzdHJ1Y3QgcmVnICpyZWcsIHVpbnQzMl90IHZhbCkKPj4gIAl9Cj4+ICB9Cj4+ICAKPj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmZpbmRfZW5naW5lKGNv bnN0IGNoYXIgKm5hbWUsCj4+ICsJCQkJCQkJIGJvb2wgKnNlY3VyZSkKPj4gK3sKPj4gKwljb25z dCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmU7Cj4+ICsKPj4gKwlpZiAoc3RybGVu KG5hbWUpIDwgMikKPj4gKwkJZ290byBvdXQ7Cj4+ICsKPj4gKwlpZiAobmFtZVswXSA9PSAnLScp IHsKPj4gKwkJKnNlY3VyZSA9IGZhbHNlOwo+PiArCQluYW1lKys7Cj4+ICsJfSBlbHNlIHsKPj4g KwkJKnNlY3VyZSA9IHRydWU7Cj4+ICsJfQo+PiArCj4+ICsJZm9yIChlID0gaW50ZWxfZXhlY3V0 aW9uX2VuZ2luZXMyOyBlLT5uYW1lOyBlKyspIHsKPj4gKwkJaWYgKCFzdHJjbXAoZS0+bmFtZSwg bmFtZSkpCj4+ICsJCQlyZXR1cm4gZTsKPj4gKwl9Cj4+ICsKPj4gK291dDoKPj4gKwlmcHJpbnRm KHN0ZGVyciwgIm5vIHN1Y2ggZW5naW5lIGFzICclcydcbiIsIG5hbWUpOwo+PiArCj4+ICsJZnBy aW50ZihzdGRlcnIsICJ2YWxpZCBlbmdpbmVzOiIpOwo+PiArCWZvciAoZSA9IGludGVsX2V4ZWN1 dGlvbl9lbmdpbmVzMjsgZS0+bmFtZTsgZSsrKQo+PiArCQlmcHJpbnRmKHN0ZGVyciwgIiAlcyIs IGUtPm5hbWUpOwo+PiArCj4+ICsJZnByaW50ZihzdGRlcnIsICJcbiIpOwo+PiArCj4+ICsJZXhp dChFWElUX0ZBSUxVUkUpOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW50IHJlZ2lzdGVyX3NybShz dHJ1Y3QgY29uZmlnICpjb25maWcsIHN0cnVjdCByZWcgKnJlZywKPj4gKwkJCXVpbnQzMl90ICp2 YWxfaW4pCj4+ICt7Cj4+ICsJY29uc3QgaW50IGdlbiA9IGludGVsX2dlbihjb25maWctPmRldmlk KTsKPj4gKwljb25zdCBib29sIHI2NGIgPSBnZW4gPj0gODsKPj4gKwljb25zdCB1aW50MzJfdCBj dHggPSAwOwo+PiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9ialsyXTsKPj4g KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgcmVsb2NbMV07Cj4+ICsJc3Ry dWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+PiArCXVpbnQzMl90ICpiYXRj aCwgKnI7Cj4+ICsJY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplbmdpbmU7 Cj4+ICsJYm9vbCBzZWN1cmU7Cj4+ICsJaW50IGZkLCBpOwo+PiArCXVpbnQzMl90IHZhbDsKPj4g Kwo+PiArCWlmIChjb25maWctPmZkID09IC0xKSB7Cj4+ICsJCWNvbmZpZy0+ZmQgPSBfX2RybV9v cGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwo+PiArCQlpZiAoY29uZmlnLT5mZCA9PSAtMSkgewo+ PiArCQkJZnByaW50ZihzdGRlcnIsICJFcnJvciBvcGVuaW5nIGRyaXZlcjogJXMiLAo+PiArCQkJ CXN0cmVycm9yKGVycm5vKSk7Cj4+ICsJCQlleGl0KEVYSVRfRkFJTFVSRSk7Cj4+ICsJCX0KPj4g Kwl9Cj4+ICsKPj4gKwlmZCA9IGNvbmZpZy0+ZmQ7Cj4+ICsJZW5naW5lID0gZmluZF9lbmdpbmUo Y29uZmlnLT5lbmdpbmUsICZzZWN1cmUpOwo+PiArCj4+ICsJbWVtc2V0KG9iaiwgMCwgc2l6ZW9m KG9iaikpOwo+PiArCW9ialswXS5oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKPj4gKwlv YmpbMV0uaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7Cj4+ICsJb2JqWzFdLnJlbG9jc19w dHIgPSB0b191c2VyX3BvaW50ZXIocmVsb2MpOwo+PiArCW9ialsxXS5yZWxvY2F0aW9uX2NvdW50 ID0gMTsKPj4gKwo+PiArCWJhdGNoID0gZ2VtX21tYXBfX2NwdShmZCwgb2JqWzFdLmhhbmRsZSwg MCwgNDA5NiwgUFJPVF9XUklURSk7Cj4+ICsJZ2VtX3NldF9kb21haW4oZmQsIG9ialsxXS5oYW5k bGUsCj4+ICsJCSAgICAgICBJOTE1X0dFTV9ET01BSU5fQ1BVLCBJOTE1X0dFTV9ET01BSU5fQ1BV KTsKPj4gKwo+PiArCWkgPSAwOwo+PiArCWlmICh2YWxfaW4pIHsKPj4gKwkJYmF0Y2hbaSsrXSA9 IE1JX05PT1A7Cj4+ICsJCWJhdGNoW2krK10gPSBNSV9OT09QOwo+PiArCj4+ICsJCWJhdGNoW2kr K10gPSBNSV9MT0FEX1JFR0lTVEVSX0lNTTsKPj4gKwkJYmF0Y2hbaSsrXSA9IHJlZy0+YWRkcjsK Pj4gKwkJYmF0Y2hbaSsrXSA9ICp2YWxfaW47Cj4+ICsJCWJhdGNoW2krK10gPSBNSV9OT09QOwo+ PiArCX0KPj4gKwo+PiArCWJhdGNoW2krK10gPSAweDI0IDw8IDIzIHwgKDEgKyByNjRiKTsgLyog U1JNICovCj4+ICsJYmF0Y2hbaSsrXSA9IHJlZy0+YWRkcjsKPj4gKwlyZWxvY1swXS50YXJnZXRf aGFuZGxlID0gb2JqWzBdLmhhbmRsZTsKPj4gKwlyZWxvY1swXS5wcmVzdW1lZF9vZmZzZXQgPSBv YmpbMF0ub2Zmc2V0Owo+PiArCXJlbG9jWzBdLm9mZnNldCA9IGkgKiBzaXplb2YodWludDMyX3Qp Owo+PiArCXJlbG9jWzBdLmRlbHRhID0gMDsKPj4gKwlyZWxvY1swXS5yZWFkX2RvbWFpbnMgPSBJ OTE1X0dFTV9ET01BSU5fUkVOREVSOwo+PiArCXJlbG9jWzBdLndyaXRlX2RvbWFpbiA9IEk5MTVf R0VNX0RPTUFJTl9SRU5ERVI7Cj4+ICsJYmF0Y2hbaSsrXSA9IHJlbG9jWzBdLmRlbHRhOwo+PiAr CWlmIChyNjRiKQo+PiArCQliYXRjaFtpKytdID0gMDsKPj4gKwo+PiArCWJhdGNoW2krK10gPSBN SV9CQVRDSF9CVUZGRVJfRU5EOwo+PiArCW11bm1hcChiYXRjaCwgNDA5Nik7Cj4+ICsKPj4gKwlt ZW1zZXQoJmV4ZWNidWYsIDAsIHNpemVvZihleGVjYnVmKSk7Cj4+ICsJZXhlY2J1Zi5idWZmZXJz X3B0ciA9IHRvX3VzZXJfcG9pbnRlcihvYmopOwo+PiArCWV4ZWNidWYuYnVmZmVyX2NvdW50ID0g MjsKPj4gKwlleGVjYnVmLmZsYWdzID0gZ2VtX2NsYXNzX2luc3RhbmNlX3RvX2ViX2ZsYWdzKGZk LAo+PiArCQkJCQkJICAgICAgIGVuZ2luZS0+Y2xhc3MsCj4+ICsJCQkJCQkgICAgICAgZW5naW5l LT5pbnN0YW5jZSk7Cj4+ICsJaWYgKHNlY3VyZSkKPj4gKwkJZXhlY2J1Zi5mbGFncyB8PSBJOTE1 X0VYRUNfU0VDVVJFOwo+PiArCj4+ICsJaWYgKGNvbmZpZy0+dmVyYm9zaXR5ID4gMCkKPj4gKwkJ cHJpbnRmKCIlczogdXNpbmcgJXNwcml2aWxlZ2VkIGJhdGNoXG4iLAo+PiArCQkgICAgICAgZW5n aW5lLT5uYW1lLAo+PiArCQkgICAgICAgc2VjdXJlID8gIiIgOiAibm9uLSIpOwo+PiArCj4+ICsJ ZXhlY2J1Zi5yc3ZkMSA9IGN0eDsKPj4gKwlnZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOwo+PiAr CWdlbV9jbG9zZShmZCwgb2JqWzFdLmhhbmRsZSk7Cj4+ICsKPj4gKwlyID0gZ2VtX21tYXBfX2Nw dShmZCwgb2JqWzBdLmhhbmRsZSwgMCwgNDA5NiwgUFJPVF9SRUFEKTsKPj4gKwlnZW1fc2V0X2Rv bWFpbihmZCwgb2JqWzBdLmhhbmRsZSwgSTkxNV9HRU1fRE9NQUlOX0NQVSwgMCk7Cj4+ICsKPj4g Kwl2YWwgPSByWzBdOwo+PiArCW11bm1hcChyLCA0MDk2KTsKPj4gKwo+PiArCWdlbV9jbG9zZShm ZCwgb2JqWzBdLmhhbmRsZSk7Cj4+ICsKPj4gKwlyZXR1cm4gdmFsOwo+PiArfQo+PiArCj4+ICBz dGF0aWMgaW50IHJlYWRfcmVnaXN0ZXIoc3RydWN0IGNvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgcmVn ICpyZWcsIHVpbnQzMl90ICp2YWxwKQo+PiAgewo+PiAgCXVpbnQzMl90IHZhbCA9IDA7Cj4+ICAK Pj4gIAlzd2l0Y2ggKHJlZy0+cG9ydF9kZXNjLnBvcnQpIHsKPj4gIAljYXNlIFBPUlRfTU1JTzoK Pj4gLQkJdmFsID0gSU5SRUcocmVnLT5tbWlvX29mZnNldCArIHJlZy0+YWRkcik7Cj4+ICsJCWlm IChjb25maWctPmVuZ2luZSkKPj4gKwkJCXZhbCA9IHJlZ2lzdGVyX3NybShjb25maWcsIHJlZywg TlVMTCk7Cj4+ICsJCWVsc2UKPj4gKwkJCXZhbCA9IElOUkVHKHJlZy0+bW1pb19vZmZzZXQgKyBy ZWctPmFkZHIpOwo+PiAgCQlicmVhazsKPj4gIAljYXNlIFBPUlRfUE9SVElPX1ZHQToKPj4gIAkJ aW9wbCgzKTsKPj4gQEAgLTI5OSw3ICs0MzIsMTEgQEAgc3RhdGljIGludCB3cml0ZV9yZWdpc3Rl cihzdHJ1Y3QgY29uZmlnICpjb25maWcsIHN0cnVjdCByZWcgKnJlZywgdWludDMyX3QgdmFsKQo+ PiAgCj4+ICAJc3dpdGNoIChyZWctPnBvcnRfZGVzYy5wb3J0KSB7Cj4+ICAJY2FzZSBQT1JUX01N SU86Cj4+IC0JCU9VVFJFRyhyZWctPm1taW9fb2Zmc2V0ICsgcmVnLT5hZGRyLCB2YWwpOwo+PiAr CQlpZiAoY29uZmlnLT5lbmdpbmUpIHsKPj4gKwkJCXJlZ2lzdGVyX3NybShjb25maWcsIHJlZywg JnZhbCk7Cj4+ICsJCX0gZWxzZSB7Cj4+ICsJCQlPVVRSRUcocmVnLT5tbWlvX29mZnNldCArIHJl Zy0+YWRkciwgdmFsKTsKPj4gKwkJfQo+PiAgCQlicmVhazsKPj4gIAljYXNlIFBPUlRfUE9SVElP X1ZHQToKPj4gIAkJaWYgKHZhbCA+IDB4ZmYpIHsKPj4gQEAgLTY0MSw2ICs3NzgsNyBAQCBzdGF0 aWMgaW50IGludGVsX3JlZ19oZWxwKHN0cnVjdCBjb25maWcgKmNvbmZpZywgaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKPj4gIAlwcmludGYoIiAtLXNwZWM9UEFUSCAgICBSZWFkIHJlZ2lzdGVyIHNw ZWMgZnJvbSBkaXJlY3Rvcnkgb3IgZmlsZVxuIik7Cj4+ICAJcHJpbnRmKCIgLS1tbWlvPUZJTEUg ICAgVXNlIGFuIE1NSU8gc25hcHNob3RcbiIpOwo+PiAgCXByaW50ZigiIC0tZGV2aWQ9REVWSUQg IFNwZWNpZnkgUENJIGRldmljZSBJRCBmb3IgLS1tbWlvPUZJTEVcbiIpOwo+PiArCXByaW50Zigi IC0tZW5naW5lPVstXUVOR0lORSBVc2UgYSBzcGVjaWZpYyBlbmdpbmUgdG8gcmVhZC93cml0ZVxu Iik7Cj4+ICAJcHJpbnRmKCIgLS1hbGwgICAgICAgICAgRGVjb2RlIHJlZ2lzdGVycyBmb3IgYWxs IGtub3duIHBsYXRmb3Jtc1xuIik7Cj4+ICAJcHJpbnRmKCIgLS1iaW5hcnkgICAgICAgQmluYXJ5 IGR1bXAgcmVnaXN0ZXJzXG4iKTsKPj4gIAlwcmludGYoIiAtLXZlcmJvc2UgICAgICBJbmNyZWFz ZSB2ZXJib3NpdHlcbiIpOwo+PiBAQCAtNzU4LDYgKzg5Niw3IEBAIGVudW0gb3B0IHsKPj4gIAlP UFRfQUxMLAo+PiAgCU9QVF9CSU5BUlksCj4+ICAJT1BUX1NQRUMsCj4+ICsJT1BUX0VOR0lORSwK Pj4gIAlPUFRfVkVSQk9TRSwKPj4gIAlPUFRfUVVJRVQsCj4+ICAJT1BUX0hFTFAsCj4+IEBAIC03 NzEsMTEgKzkxMCwxMyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQo+PiAgCWNv bnN0IHN0cnVjdCBjb21tYW5kICpjb21tYW5kID0gTlVMTDsKPj4gIAlzdHJ1Y3QgY29uZmlnIGNv bmZpZyA9IHsKPj4gIAkJLmNvdW50ID0gMSwKPj4gKwkJLmZkID0gLTEsCj4+ICAJfTsKPj4gIAli b29sIGhlbHAgPSBmYWxzZTsKPj4gIAo+PiAgCXN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIG9wdGlvbnNb XSA9IHsKPj4gIAkJLyogZ2xvYmFsIG9wdGlvbnMgKi8KPj4gKwkJeyAiZW5naW5lIiwJcmVxdWly ZWRfYXJndW1lbnQsCU5VTEwsCU9QVF9FTkdJTkUgfSwKPj4gIAkJeyAic3BlYyIsCXJlcXVpcmVk X2FyZ3VtZW50LAlOVUxMLAlPUFRfU1BFQyB9LAo+PiAgCQl7ICJ2ZXJib3NlIiwJbm9fYXJndW1l bnQsCQlOVUxMLAlPUFRfVkVSQk9TRSB9LAo+PiAgCQl7ICJxdWlldCIsCW5vX2FyZ3VtZW50LAkJ TlVMTCwJT1BUX1FVSUVUIH0sCj4+IEBAIC04MzAsNiArOTcxLDE0IEBAIGludCBtYWluKGludCBh cmdjLCBjaGFyICphcmd2W10pCj4+ICAJCQkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKPj4gIAkJCX0K Pj4gIAkJCWJyZWFrOwo+PiArCQljYXNlIE9QVF9FTkdJTkU6Cj4+ICsJCQljb25maWcuZW5naW5l ID0gc3RyZHVwKG9wdGFyZyk7Cj4+ICsJCQlpZiAoIWNvbmZpZy5lbmdpbmUpIHsKPj4gKwkJCQlm cHJpbnRmKHN0ZGVyciwgInN0cmR1cDogJXNcbiIsCj4+ICsJCQkJCXN0cmVycm9yKGVycm5vKSk7 Cj4+ICsJCQkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKPj4gKwkJCX0KPj4gKwkJCWJyZWFrOwo+PiAg CQljYXNlIE9QVF9BTEw6Cj4+ICAJCQljb25maWcuYWxsX3BsYXRmb3JtcyA9IHRydWU7Cj4+ICAJ CQlicmVhazsKPj4gQEAgLTg5OCw1ICsxMDQ3LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg KmFyZ3ZbXSkKPj4gIAo+PiAgCWZyZWUoY29uZmlnLm1taW9maWxlKTsKPj4gIAo+PiArCWlmIChj b25maWcuZmQgPj0gMCkKPj4gKwkJY2xvc2UoY29uZmlnLmZkKTsKPj4gKwo+PiAgCXJldHVybiBy ZXQ7Cj4+ICB9Cj4KPiAtLSAKPiBKYW5pIE5pa3VsYSwgSW50ZWwgT3BlbiBTb3VyY2UgVGVjaG5v bG9neSBDZW50ZXIKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3Jn Cmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4 Cg==