From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6BFA26E21F for ; Thu, 14 Jun 2018 10:44:03 +0000 (UTC) Date: Thu, 14 Jun 2018 13:43:59 +0300 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Message-ID: <20180614104359.GU23723@intel.com> References: <20180614071141.144275-1-tarun.vyas@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20180614071141.144275-1-tarun.vyas@intel.com> Subject: Re: [igt-dev] [PATCH i-g-t] tools: Add a simple tool to read/write/decode dpcd registers List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Tarun Vyas Cc: igt-dev@lists.freedesktop.org, dhinakaran.pandiyan@intel.com List-ID: T24gVGh1LCBKdW4gMTQsIDIwMTggYXQgMTI6MTE6NDFBTSAtMDcwMCwgVGFydW4gVnlhcyB3cm90 ZToKPiBUaGlzIHRvb2wgc2VydmVzIGFzIGEgd3JhcHBlciBhcm91bmQgdGhlIGNvbnN0cnVjdHMg cHJvdmlkZWQgYnkgdGhlCj4gZHJtX2RwY2RfYXV4X2RldiBrZXJuZWwgbW9kdWxlIGJ5IHdvcmtp bmcgb24gdGhlIC9kZXYvZHJtX2RwX2F1eFtuXQo+IGRldmljZXMgY3JlYXRlZCBieSB0aGUga2Vy bmVsIG1vZHVsZS4KPiBJdCBzdXBwb3J0cyByZWFkaW5nIGFuZCB3cml0aW5nIGRwY2QgcmVnaXN0 ZXJzIG9uIHRoZSBjb25uZWN0ZWQgYXV4Cj4gY2hhbm5lbHMuCj4gSW4gdGhlIGZvbGxvdy11cCBw YXRjaCwgc3VwcG9ydCBmb3IgZGVjb2RpbmcgdGhlc2UgcmVnaXN0ZXJzIHdpbGwgYmUKPiBhZGRl ZCB0byBmYWNpbGF0ZSBkZWJ1Z2dpbmcgcGFuZWwgcmVsYXRlZCBpc3N1ZXMuCj4gCj4gU3VnZ2Vz dGVkLWJ5OiBEaGluYWthcmFuIFBhbmRpeWFuIDxkaGluYWthcmFuLnBhbmRpeWFuQGludGVsLmNv bT4KPiBTaWduZWQtb2ZmLWJ5OiBUYXJ1biBWeWFzIDx0YXJ1bi52eWFzQGludGVsLmNvbT4KPiAt LS0KPiAgdG9vbHMvTWFrZWZpbGUuYW0gICAgICB8ICAgMiArLQo+ICB0b29scy9NYWtlZmlsZS5z b3VyY2VzIHwgICA0ICstCj4gIHRvb2xzL2RwY2RfcmVnLmMgICAgICAgfCAyMTkgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAzIGZpbGVzIGNoYW5n ZWQsIDIyMyBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgdG9vbHMvZHBjZF9yZWcuYwo+IAo+IGRpZmYgLS1naXQgYS90b29scy9NYWtlZmlsZS5hbSBi L3Rvb2xzL01ha2VmaWxlLmFtCj4gaW5kZXggMDliNmRiY2MzZWNlLi5iNzg4MjRkYWRmZGIgMTAw NjQ0Cj4gLS0tIGEvdG9vbHMvTWFrZWZpbGUuYW0KPiArKysgYi90b29scy9NYWtlZmlsZS5hbQo+ IEBAIC03LDcgKzcsNyBAQCBiaW5fUFJPR1JBTVMgKz0gJChMSUJEUk1fSU5URUxfQklOKQo+ICBp bnRlbF9lcnJvcl9kZWNvZGVfTERGTEFHUyA9IC1sego+ICBlbmRpZgo+ICAKPiAtYmluX1BST0dS QU1TICs9IGludGVsX2RwX2NvbXBsaWFuY2UKPiArYmluX1BST0dSQU1TICs9IGludGVsX2RwX2Nv bXBsaWFuY2UgZHBjZF9yZWcKCk5vdCB0aGUgYmVzdCBwbGFjZSBmb3IgdGhpcyBJIHRoaW5rLgoK TWlzc2luZyBtZXNvbi5idWlsZCBzbyBubyBvbmUgaXMgYWN0dWFsbHkgZ29pbmcgdG8gYnVpbGQg dGhpcy4KCj4gIGludGVsX2RwX2NvbXBsaWFuY2VfQ0ZMQUdTID0gJChBTV9DRkxBR1MpICQoR0xJ Ql9DRkxBR1MpCj4gIGludGVsX2RwX2NvbXBsaWFuY2VfTERBREQgPSAkKHRvcF9idWlsZGRpcikv bGliL2xpYmludGVsX3Rvb2xzLmxhCj4gIAo+IGRpZmYgLS1naXQgYS90b29scy9NYWtlZmlsZS5z b3VyY2VzIGIvdG9vbHMvTWFrZWZpbGUuc291cmNlcwo+IGluZGV4IGFiZDIzYTBmNDYyOC4uZGI2 MDZiMjg1NjBmIDEwMDY0NAo+IC0tLSBhL3Rvb2xzL01ha2VmaWxlLnNvdXJjZXMKPiArKysgYi90 b29scy9NYWtlZmlsZS5zb3VyY2VzCj4gQEAgLTY0LDQgKzY0LDYgQEAgaW50ZWxfZHBfY29tcGxp YW5jZV9TT1VSQ0VTID0gXAo+ICAgICAgICAgIGludGVsX2RwX2NvbXBsaWFuY2UuaCBcCj4gICAg ICAgICAgaW50ZWxfZHBfY29tcGxpYW5jZV9ob3RwbHVnLmMgXAo+ICAgICAgICAgICQoTlVMTCkK PiAtCj4gK2RwY2RfcmVnX1NPVVJDRVMgPSBcCj4gKwlkcGNkX3JlZy5jIFwKPiArCSQoTlVMTCkK PiBkaWZmIC0tZ2l0IGEvdG9vbHMvZHBjZF9yZWcuYyBiL3Rvb2xzL2RwY2RfcmVnLmMKPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4uMjg0ODI3N2FhNzkyCj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL3Rvb2xzL2RwY2RfcmVnLmMKPiBAQCAtMCwwICsxLDIxOSBAQAo+ ICsvKgo+ICsgKiBDb3B5cmlnaHQgwqkgMjAxOCBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsg KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGlu IHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1p dGF0aW9uCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2Yg dGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29m dHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29u ZGl0aW9uczoKPiArICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNo YWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2Yg dGhlCj4gKyAqIFNvZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1F UkNIQU5UQUJJTElUWSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5E IE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9S IENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9U SEVSCj4gKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRP UlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCj4gKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNU SU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhF Cj4gKyAqIFNPRlRXQVJFLgo+ICsgKgo+ICsgKiAJCURQQ0QgcmVnaXN0ZXIgcmVhZC9kZWNvZGUg dG9vbAo+ICsgKiBUaGlzIHRvb2wgd3JhcHMgYXJvdW5kIERSTV9EUF9BVVhfREVWIG1vZHVsZSB0 byBwcm92aWRlIERQQ0QgcmVnaXN0ZXIgcmVhZCwKPiArICogd3JpdGUgYW5kIGRlY29kZSwgc28g Q09ORklHX0RSTV9EUF9BVVhfREVWIG5lZWRzIHRvIGJlIHNldC4KPiArICovCj4gKwo+ICsjaW5j bHVkZSAiaWd0X2NvcmUuaCIKPiArI2luY2x1ZGUgPGVycm5vLmg+Cj4gKyNpbmNsdWRlIDxmY250 bC5oPgo+ICsKPiArI2RlZmluZSBJTlZBTElECTB4ZmYKPiArI2RlZmluZSBSV19TSVpFCTEKPiAr Cj4gK2NvbnN0IGNoYXIgYXV4X2RldltdID0gIi9kZXYvZHJtX2RwX2F1eCI7Cj4gKwo+ICtzdGF0 aWMgdm9pZCBwcmludF91c2FnZShjaGFyICp0b29sLCBpbnQgaGVscCkKPiArewo+ICsJaWd0X2lu Zm8oIkRQQ0QgcmVnaXN0ZXIgcncgYW5kIGRlY29kZSB0b29sXG5cbiIpOwo+ICsJaWd0X2luZm8o IlRoaXMgdG9vbCByZXF1aXJlcyBDT05GSUdfRFJNX0RQX0FVWF9DSEFSREVWXG4iCj4gKwkJICJ0 byBiZSBzZXQgaW4gdGhlIGtlcm5lbCBjb25maWcuXG4iKTsKPiArCWlndF9pbmZvKCJVc2FnZSAl cyBjb21tYW5kIFtvcHRpb25zLi4uXVxuIiwgdG9vbCk7Cj4gKwlpZ3RfaW5mbygiU3VwcG9ydGVk IGNvbW1hbmRzIGFyZTpcbiIKPiArCQkgIlx0cmVhZDogUmVhZCBhIGRwY2QgcmVnIGF0IGFuIG9m ZnNldFxuIgo+ICsJCSAiXHR3cml0ZTogV3JpdGUgYSBkcGNkIHJlZyBhdCBhbiBvZmZzZXRcbiIK PiArCQkgIlx0ZGVjb2RlOiBEZWNvZGUgdGhlIHZhbHVlIG9mIGEgZHBjZCByZWdcbiIpOwoKWW91 IGRpZG4ndCBpbXBsZW1lbnQgZGVjb2RlIHNvIG5vIHBvaW50IGluIG1lbnRpb25pbmcgaXQuCgo+ ICsJaWd0X2luZm8oIk9wdGlvbnMgZm9yIHRoZSBhYm92ZSBjb21tYW5kcyBhcmVcbiIKPiArCQkg Ilx0LS1kZXZpY2U6IEF1eCBkZXZpY2UgaWQsIElTX1JFUVVJUkVEXG4iCj4gKwkJICJcdC0taGVs cDogcHJpbnQgdGhlIHVzYWdlXG4iCj4gKwkJICJcdC0tb2Zmc2V0OiBEUENEIHJlZ2lzdGVyIG9m ZnNldCBpbiBoZXgsIElTX1JFUVVJUkVEXG4iCj4gKwkJICJcdC0tc3BlYzogU3BlY2lmeSBEUC9l RFAgc3BlYyB2ZXJzaW9uIGZvciBkZWNvZGluZywgSVNfT1BUSU9OQUxcbiIKPiArCQkgIlx0LS12 YWw6IFNwZWNpZnkgYSB2YWx1ZSwgZm9yIHJlZyB3cml0ZXNcbiIpOwoKSSB0aGluayB5b3Ugc2hv dWxkIG1vZGVsIHRoZSBVSSBiYXNlZCBvbiBpbnRlbF9yZWcuCgo+ICsJZXhpdCgoaGVscCA9PSAx KT8gRVhJVF9TVUNDRVNTIDogRVhJVF9GQUlMVVJFKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBk cGNkX3JlYWQoY2hhciAqZGV2aWNlLCBjb25zdCB1aW50MzJfdCAqb2Zmc2V0KQoKV2h5IGlzIG9m ZnNldCBhIHBvaW50ZXI/Cgo+ICt7Cj4gKwlpbnQgZmQsIHJldDsKPiArCXZvaWQgKmJ1ZiA9IG1h bGxvYyhzaXplb2YodWludDhfdCkpOwoKUG9pbnRsZXNzIG1hbGxvYy4KCj4gKwo+ICsJaWYoTlVM TCAhPSBidWYpCj4gKwkJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKHVpbnQ4X3QpKTsKPiArCWVsc2Ug ewo+ICsJCWlndF93YXJuKCJDYW4ndCBhbGxvY2F0ZSByZWFkIGJ1ZmZlclxuIik7Cj4gKwkJcmV0 ID0gRVhJVF9GQUlMVVJFOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCWZkID0gb3Blbihk ZXZpY2UsIE9fUkRPTkxZKTsKPiArCWlmIChmZCA+IDApIHsKPiArCQlyZXQgPSBwcmVhZChmZCwg YnVmLCBSV19TSVpFLCAqb2Zmc2V0KTsKPiArCQljbG9zZShmZCk7Cj4gKwkJaWYgKHJldCA8IDAp IHsKPiArCQkJaWd0X3dhcm4oIkZhaWxlZCB0byByZWFkIGZyb20gJXMgYXV4IGRldmljZSAtIGVy cm9yICVzXG4iLCBkZXZpY2UsIHN0cmVycm9yKGVycm5vKSk7Cj4gKwkJCXJldCA9IEVYSVRfRkFJ TFVSRTsKPiArCQkJZ290byBmcmVlX3VwOwo+ICsJCX0KPiArCQlwcmludGYoIlZhbHVlIEAgb2Zm c2V0ICV4IGlzICV4XG4iLCAqb2Zmc2V0LCAqKChpbnQgKikoYnVmKSkpOwo+ICsJfQo+ICsJZWxz ZSB7Cj4gKwkJaWd0X3dhcm4oIkZhaWxlZCB0byBvcGVuICVzIGF1eCBkZXZpY2UgLSBlcnJvcjog JXNcbiIsIGRldmljZSwgc3RyZXJyb3IoZXJybm8pKTsKPiArCQlyZXQgPSBFWElUX0ZBSUxVUkU7 Cj4gKwl9Cj4gK2ZyZWVfdXA6Cj4gKwlmcmVlKGJ1Zik7Cj4gK291dDoKPiArCXJldHVybiByZXQ7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHBjZF93cml0ZShjaGFyICpkZXZpY2UsIGNvbnN0IHVp bnQzMl90ICpvZmZzZXQsIGNvbnN0IHVpbnQ4X3QgKnZhbCkKPiArewo+ICsJaW50IGZkLCByZXQ7 Cj4gKwo+ICsJZmQgPSBvcGVuKGRldmljZSwgT19SRFdSKTsKPiArCWlmIChmZCA+IDApIHsKPiAr CQlyZXQgPSBwd3JpdGUoZmQsIChjb25zdCB2b2lkICopdmFsLCBSV19TSVpFLCAqb2Zmc2V0KTsK PiArCQljbG9zZShmZCk7Cj4gKwkJaWYgKHJldCA8IDApIHsKPiArCQkJaWd0X3dhcm4oIkZhaWxl ZCB0byB3cml0ZSB0byAlcyBhdXggZGV2aWNlIC0gZXJyb3IgJXNcbiIsIGRldmljZSwgc3RyZXJy b3IoZXJybm8pKTsKPiArCQkJcmV0ID0gRVhJVF9GQUlMVVJFOwo+ICsJCQlnb3RvIG91dDsKPiAr CQl9Cj4gKwkJcmV0ID0gZHBjZF9yZWFkKGRldmljZSwgb2Zmc2V0KTsKPiArCX0KPiArCWVsc2Ug ewo+ICsJCWlndF93YXJuKCJGYWlsZWQgdG8gb3BlbiAlcyBhdXggZGV2aWNlIC0gZXJyb3I6ICVz XG4iLCBkZXZpY2UsIHN0cmVycm9yKGVycm5vKSk7Cj4gKwkJcmV0ID0gRVhJVF9GQUlMVVJFOwo+ ICsJfQo+ICtvdXQ6Cj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKlRPLURPOiBEZWNvZGUg ZHBjZCByZWcgdmFsdWUuCj4gKyAqIEJ5IGRlZmF1bHQsIHRoZSBsYXRlc3QgRFAvZURQIHNwZWMK PiArICogdmVyc2lvbnMgd2lsbCBiZSB1c2VkLiBUbyBvdmVycmlkZSwKPiArICogc3BlY2lmeSB0 aGUgc3BlYyB2ZXJzaW9uIHRocm91Z2ggdGhlCj4gKyAqIC0tc3BlYyBvcHRpb24uCj4gK3N0YXRp YyB2b2lkIGRwY2RfZGVjb2RlKCkKPiArewo+ICt9Cj4gKyovCj4gKwo+ICtpbnQgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCj4gK3sKPiArCWNoYXIgZGV2X25hbWVbMjBdOwo+ICsJaW50IHJl dCwgZGV2aWQsIGhlbHBfZmxnOwo+ICsJdWludDMyX3Qgb2Zmc2V0Owo+ICsJdWludDhfdCB2YWw7 Cj4gKwo+ICsJZW51bSBjb21tYW5kIHsKPiArCQlJTlYgPSAtMSwKPiArCQlSRUFEID0gMiwKPiAr CQlXUklURSwKPiArCQlERUNPREUsCj4gKwl9IGNtZCA9IElOVjsKPiArCj4gKwlzdHJ1Y3Qgb3B0 aW9uIGxvbmdvcHRzIFtdID0gewo+ICsJCXsgImRldmljZSIsCXJlcXVpcmVkX2FyZ3VtZW50LAlO VUxMLCAgICAgICdkJyB9LAo+ICsJCXsgImhlbHAiLCAJbm9fYXJndW1lbnQsIAkJJmhlbHBfZmxn LCAgMiAgfSwKPiArCQl7ICJvZmZzZXQiLAlyZXF1aXJlZF9hcmd1bWVudCwJTlVMTCwJICAgJ28n IH0sCj4gKwkJeyAic3BlYyIsCW9wdGlvbmFsX2FyZ3VtZW50LAlOVUxMLAkgICAncycgfSwKPiAr CQl7ICJ2YWwiLAlyZXF1aXJlZF9hcmd1bWVudCwJTlVMTCwJICAgJ3YnIH0sCj4gKwkJeyAwIH0K PiArCX07Cj4gKwo+ICsJb2Zmc2V0ID0gdmFsID0gSU5WQUxJRDsKPiArCWRldmlkID0gLTE7Cj4g Kwo+ICsJd2hpbGUgKChyZXQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiLTpkOm86czo6djoi LCBsb25nb3B0cywgTlVMTCkpICE9IC0xKSB7CgpXaGF0J3MgdGhhdCAiLToiIGFib3V0PyBBbHNv IHRoZSBzb2xlICI6Ij8KCj4gKwkJc3dpdGNoIChyZXQpIHsKPiArCQljYXNlICdkJzoKPiArCQkJ ZGV2aWQgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMTApOwo+ICsJCQlicmVhazsKPiArCQljYXNl ICdvJzoKPiArCQkJb2Zmc2V0ID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDE2KTsKPiArCQkJYnJl YWs7Cj4gKwkJY2FzZSAncyc6Cj4gKwkJCS8qIFRPLURPOiBQYXJzZSAtLXNwZWMgdmVyc2lvbiAq Lwo+ICsJCQlicmVhazsKPiArCQljYXNlICd2JzoKPiArCQkJdmFsID0gc3RydG91bChvcHRhcmcs IE5VTEwsIDE2KTsKPiArCQkJYnJlYWs7Cj4gKwkJLyogRmFsbCB0aHJvdWdoIGZvciAtLWhlbHAg Ki8KPiArCQljYXNlIDA6Cj4gKwkJCWJyZWFrOwo+ICsJCS8qIENvbW1hbmQgcGFyc2luZyAqLwo+ ICsJCWNhc2UgMToKPiArCQkJaWYgKHN0cmNtcChvcHRhcmcsICJyZWFkIikgPT0gMCkKPiArCQkJ CWNtZCA9IFJFQUQ7Cj4gKwkJCWVsc2UgaWYgKHN0cmNtcChvcHRhcmcsICJ3cml0ZSIpID09IDAp Cj4gKwkJCQljbWQgPSBXUklURTsKPiArCQkJZWxzZSBpZiAoc3RyY21wKG9wdGFyZywgImRlY29k ZSIpID09IDApCj4gKwkJCQljbWQgPSBERUNPREU7Cj4gKwkJCWJyZWFrOwo+ICsJCWNhc2UgJzon Ogo+ICsJCQlmcHJpbnRmKHN0ZGVyciwgIlRoZSAtJWMgb3B0aW9uIG9mICVzIHJlcXVpcmVzIGFu IGFyZ3VtZW50XG4iLCBvcHRvcHQsIGFyZ3ZbMF0pOwo+ICsJCQlwcmludF91c2FnZShhcmd2WzBd LCAwKTsKPiArCQljYXNlICc/JzoKPiArCQlkZWZhdWx0IDoKPiArCQkJcHJpbnRmKCIlcyAtIG9w dGlvbiAlYyBpcyBpbnZhbGlkXG4iLCBhcmd2WzBdLCBvcHRvcHQpOwo+ICsJCQlwcmludF91c2Fn ZShhcmd2WzBdLCAwKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYgKGhlbHBfZmxnID09IDIpCj4g KwkJcHJpbnRfdXNhZ2UoYXJndlswXSwgMSk7Cj4gKwo+ICsJaWYoZGV2aWQgPT0gLTEgfHwgb2Zm c2V0ID09IElOVkFMSUQpIHsKPiArCQlwcmludGYoIkF1eCBkZXZpY2UgaWQgYW5kL29yIG9mZnNl dCBtaXNzaW5nXG4iKTsKPiArCQlwcmludF91c2FnZShhcmd2WzBdLCAwKTsKPiArCX0KPiArCj4g KwltZW1zZXQoZGV2X25hbWUsICdcMCcsIDIwKTsKPiArCXNucHJpbnRmKGRldl9uYW1lLCBzaXpl b2YoYXV4X2RldikgKyAyLCAiJXMlZCIsIGF1eF9kZXYsIGRldmlkKTsKPiArCj4gKwlzd2l0Y2gg KGNtZCkgewo+ICsJCWNhc2UgUkVBRDoKPiArCQkJcmV0ID0gZHBjZF9yZWFkKGRldl9uYW1lLCAm b2Zmc2V0KTsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBXUklURToKPiArCQkJaWYgKHZhbCA9PSBJ TlZBTElEKSB7Cj4gKwkJCQlpZ3Rfd2FybigiV3JpdGUgdmFsdWUgaXMgbWlzc2luZ1xuIik7Cj4g KwkJCQlwcmludF91c2FnZShhcmd2WzBdLCAwKTsKPiArCQkJfQo+ICsJCQlyZXQgPSBkcGNkX3dy aXRlKGRldl9uYW1lLCAmb2Zmc2V0LCAmdmFsKTsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBERUNP REU6Cj4gKwkJCS8qIFRPLURPOiBEZWNvZGUgZHBjZCByZWcgdmFscwo+ICsJCQkgKiBkcm1fZHBj ZF9kZWNvZGUoKTsKPiArCQkJKi8KPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSBJTlY6Cj4gKwkJZGVm YXVsdDoKPiArCQkJaWd0X3dhcm4oIlBsZWFzZSBzcGVjaWZ5IGEgY29tYW5kOiByZWFkL3dyaXRl L2RlY29kZS4gU2VlIHVzYWdlXG4iKTsKPiArCQkJcHJpbnRfdXNhZ2UoYXJndlswXSwgMCk7Cj4g Kwl9Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+IC0tIAo+IDIuMTMuNQo+IAo+IF9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gaWd0LWRldiBtYWlsaW5n IGxpc3QKPiBpZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgoKLS0gClZpbGxlIFN5cmrDpGzD pApJbnRlbApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpp Z3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczov L2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK