From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id A6F5F6E6C5 for ; Fri, 21 Sep 2018 06:12:58 +0000 (UTC) From: Dhinakaran Pandiyan Date: Thu, 20 Sep 2018 23:12:49 -0700 Message-ID: <1795913.BsR4cFQdua@dk> In-Reply-To: <20180914235702.27428-1-tarun.vyas@intel.com> References: <20180914235702.27428-1-tarun.vyas@intel.com> MIME-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t v3] 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: igt-dev@lists.freedesktop.org Cc: rodrigo.vivi@intel.com List-ID: T24gRnJpZGF5LCBTZXB0ZW1iZXIgMTQsIDIwMTggNDo1NzowMiBQTSBQRFQgVGFydW4gVnlhcyB3 cm90ZToKPiBUaGlzIHRvb2wgc2VydmVzIGFzIGEgd3JhcHBlciBhcm91bmQgdGhlIGNvbnN0cnVj dHMgcHJvdmlkZWQgYnkgdGhlCj4gZHJtX2RwY2RfYXV4X2RldiBrZXJuZWwgbW9kdWxlIGJ5IHdv cmtpbmcgb24gdGhlIC9kZXYvZHJtX2RwX2F1eFtuXQo+IGRldmljZXMgY3JlYXRlZCBieSB0aGUg a2VybmVsIG1vZHVsZS4KPiBJdCBzdXBwb3J0cyByZWFkaW5nIGFuZCB3cml0aW5nIGRwY2QgcmVn aXN0ZXJzIG9uIHRoZSBjb25uZWN0ZWQgYXV4Cj4gY2hhbm5lbHMuCj4gSW4gdGhlIGZvbGxvdy11 cCBwYXRjaCwgc3VwcG9ydCBmb3IgZGVjb2RpbmcgdGhlc2UgcmVnaXN0ZXJzIHdpbGwgYmUKPiBh ZGRlZCB0byBmYWNpbGF0ZSBkZWJ1Z2dpbmcgcGFuZWwgcmVsYXRlZCBpc3N1ZXMuCj4gCj4gdjI6 IChGaXhlcyBieSBSb2RyaWdvIGJ1dCBubyBmdW5jdGlvbmFsIGNoYW5nZXMgeWV0KToKPiAgICAg LSBJbmRlbnRhdGlvbnMsIFR5cG8sIE1pc3NlZCBzcGFjZXMKPiAgICAgLSBSZW1vdmluZyBtZW50 aW9uaW5nIHRvIGRlY29kZSBhbmQgc3BlYyB0aGF0IGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCj4g ICAgIC0gQWRkIE1ha2VmaWxlLnNvdXJjZXMgYmFjawo+ICAgICAtIE1pc3NlZCBzL3ByaW50Zi9p Z3Rfd2Fybgo+IAo+IHYzOgo+ICAgICAtIEFkZHJlcyBESydzIHJldmlldyBjb21tZW50cyBmcm9t IHYyIGFib3ZlLgo+ICAgICAtIFNxdWFzaCBSb2RyaWdvJ3MgZmlsZSBoYW5kbGluZyB1bmlmaWNh dGlvbiBwYXRjaC4KPiAgICAgLSBNYWtlIGNvdW50LCBvZmZzZXQgYW5kIGRldmljZSBpZCBvcHRp b25hbC4KPiAKPiBTdWdnZXN0ZWQtYnk6IERoaW5ha2FyYW4gUGFuZGl5YW4gPGRoaW5ha2FyYW4u cGFuZGl5YW5AaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IFRhcnVuIFZ5YXMgPHRhcnVuLnZ5 YXNAaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IFJvZHJpZ28gVml2aSA8cm9kcmlnby52aXZp QGludGVsLmNvbT4KPiAtLS0KPiAgdG9vbHMvTWFrZWZpbGUuc291cmNlcyB8ICAgMSArCj4gIHRv b2xzL2RwY2RfcmVnLmMgICAgICAgfCAyMTMKPiArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrIHRvb2xzL21lc29uLmJ1aWxkICAgICAgfCAKPiAgMSArCj4g IDMgZmlsZXMgY2hhbmdlZCwgMjE1IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IHRvb2xzL2RwY2RfcmVnLmMKPiAKPiBkaWZmIC0tZ2l0IGEvdG9vbHMvTWFrZWZpbGUuc291cmNl cyBiL3Rvb2xzL01ha2VmaWxlLnNvdXJjZXMKPiBpbmRleCBhYmQyM2EwZi4uNTA3MDZmNDEgMTAw NjQ0Cj4gLS0tIGEvdG9vbHMvTWFrZWZpbGUuc291cmNlcwo+ICsrKyBiL3Rvb2xzL01ha2VmaWxl LnNvdXJjZXMKPiBAQCAtNyw2ICs3LDcgQEAgbm9pbnN0X1BST0dSQU1TID0JCVwKPiAKPiAgdG9v bHNfcHJvZ19saXN0cyA9CQlcCj4gIAlpZ3Rfc3RhdHMJCVwKPiArCWRwY2RfcmVnCQlcCj4gIAlp bnRlbF9hdWRpb19kdW1wCVwKPiAgCWludGVsX3JlZwkJXAo+ICAJaW50ZWxfYmFja2xpZ2h0CQlc Cj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2RwY2RfcmVnLmMgYi90b29scy9kcGNkX3JlZy5jCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMC4uY2Q5ZmVkNGYKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvdG9vbHMvZHBjZF9yZWcuYwo+IEBAIC0wLDAgKzEsMjEzIEBACj4gKy8qCj4g KyAqIENvcHlyaWdodCDCqSAyMDE4IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUKPiAiU29mdHdhcmUiKSwgKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZwo+IHdpdGhvdXQgbGltaXRhdGlv biArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCj4g ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0bwo+IHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlICsgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KPiB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQo+IG5leHQgKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUg aW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucwo+IG9mIHRoZSAr ICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCj4gT1IgKyAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKPiBNRVJDSEFO VEFCSUxJVFksICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAKPiBJTiBOTyBFVkVOVCBTSEFMTCArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkKPiBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiAr ICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKPiBUT1JUIE9S IE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCArICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUKPiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSArICog U09GVFdBUkUuCj4gKyAqCj4gKyAqIERQQ0QgcmVnaXN0ZXIgcmVhZC93cml0ZSB0b29sCj4gKyAq IFRoaXMgdG9vbCB3cmFwcyBhcm91bmQgRFJNX0RQX0FVWF9ERVYgbW9kdWxlIHRvIHByb3ZpZGUg RFBDRCByZWdpc3Rlcgo+IHJlYWQgKyAqIGFuZCB3cml0ZSwgc28gQ09ORklHX0RSTV9EUF9BVVhf REVWIG5lZWRzIHRvIGJlIHNldC4KPiArICovCj4gKwo+ICsjaW5jbHVkZSAiaWd0X2NvcmUuaCIK V2hhdCdzIHRoZSBkZXBlbmRlbmN5IG9uIGlndF9jb3JlIGhlcmU/Cgo+ICsjaW5jbHVkZSA8ZXJy bm8uaD4KPiArI2luY2x1ZGUgPGZjbnRsLmg+Cj4gKyNpbmNsdWRlIDxsaW1pdHMuaD4KPiArCj4g KyNkZWZpbmUgTUFYX09GRlNFVAkweGYwMmZmCkkgdGhpbmsgd2Ugc2hvdWxkIGJlIGFibGUgdG8g YWxsb3cgYWxsb3cgdXAgdG8gdGhlIG1heCBsaW1pdCBvZiAweGZmZmZmIChEUCAKMS40IHNlY3Rp b24gMi45LjMpCgo+ICsKPiArY29uc3QgY2hhciBhdXhfZGV2W10gPSAiL2Rldi9kcm1fZHBfYXV4 IjsKPiArCj4gK3N0YXRpYyB2b2lkIHByaW50X3VzYWdlKGNoYXIgKnRvb2wsIGludCBleGl0X2Nv ZGUpCj4gK3sKPiArCXByaW50ZigiRFBDRCByZWdpc3RlciByZWFkIGFuZCB3cml0ZSB0b29sXG5c biIpOwo+ICsJcHJpbnRmKCJUaGlzIHRvb2wgcmVxdWlyZXMgQ09ORklHX0RSTV9EUF9BVVhfQ0hB UkRFVlxuIgo+ICsJCSAidG8gYmUgc2V0IGluIHRoZSBrZXJuZWwgY29uZmlnLlxuXG4iKTsKSSB0 aGluayBpdCB3b3VsZCBsb29rIGJldHRlciB0byBwcmludCB0aGUgYWJvdmUgbGluZXMgb25seSB3 aGVuIC0taGVscC8taCB3YXMgCnBhc3NlZC4gIE1vdmUgdGhpcyB1bmRlciAgY2FzZSAnaCcgPwoK PiArCXByaW50ZigiVXNhZ2U6ICVzIFtPUFRJT04gLi4uXSBDT01NQU5EXG5cbiIsIHRvb2wpOwo+ ICsJcHJpbnRmKCJDT01NQU5EIGlzIG9uZSBvZjpcbiIpOwo+ICsJcHJpbnRmKCIgIHJlYWQ6CQlS ZWFkIFtjb3VudF0gYnl0ZXMgZHBjZCByZWcgYXQgYW4gb2Zmc2V0XG4iKTsKPiArCXByaW50Zigi ICB3cml0ZToJV3JpdGUgYSBkcGNkIHJlZyBhdCBhbiBvZmZzZXRcblxuIik7Cj4gKwlwcmludGYo Ik9wdGlvbnMgZm9yIHRoZSBhYm92ZSBDT01NQU5EUyBhcmVcbiIpOwo+ICsJcHJpbnRmKCIgLS1k ZXZpY2U9REVWSUQJCUF1eCBkZXZpY2UgaWQsIGFzIGxpc3RlZCBpbgo+IC9kZXYvZHJtX2RwX2F1 eF9kZXZbbl0uIiArCQkJCQkiRGVmYXVsdHMgdG8gMFxuIik7Cj4gKwlwcmludGYoIiAtLW9mZnNl dD1SRUdfQUREUglEUENEIHJlZ2lzdGVyIG9mZnNldCBpbiBoZXguIERlZmF1bHRzIHRvCj4gMHgw MFxuIik7ICsJcHJpbnRmKCIgLS1jb3VudD1CWVRFUwkJRm9yIHJlYWRzLCBzcGVjaWZ5IG51bWJl ciBvZiBieXRlcyB0bwo+IGJlIHJlYWQgZnJvbSIgKwkJCQkJInRoZSBvZmZzZXQuIERlZmF1bHRz IHRvIDFcbiIpOwo+ICsJcHJpbnRmKCIgLS12YWwJCQlGb3Igd3JpdGVzLCBzcGVjaWZ5IGEgaGV4 IHZhbHVlIHRvIGJlIHdyaXR0ZW5cblxuIik7Cj4gKwo+ICsJcHJpbnRmKCIgLS1oZWxwOiBwcmlu dCB0aGUgdXNhZ2VcbiIpOwo+ICsKPiArCWV4aXQoZXhpdF9jb2RlKTsKTW9kaWZ5IHRoZSBjYWxs ZXJzIHNvIHRoYXQgeW91IGRvbid0IGhhdmUgdG8gZXhpdCBmcm9tIGEgcHJpbnQgZnVuY3Rpb24u IAoKPiArfQo+ICsKPiArc3RhdGljIGludCBkcGNkX3JlYWQoaW50IGZkLCBjb25zdCB1aW50MzJf dCBvZmZzZXQsIHNpemVfdCBjb3VudCkKY29uc3QgaXMgbm90IG5lZWRlZCBhcyB0aGUgYXJndW1l bnRzIGFyZSBwYXNzZWQgYnkgdmFsdWUuCgo+ICt7Cj4gKwlpbnQgcmV0LCBpOwo+ICsJdm9pZCAq YnVmID0gY2FsbG9jKGNvdW50LCBzaXplb2YodWludDhfdCkpOwp1aW50OF90ICpidWYgPwoKPiAr Cj4gKwlpZiAoIWJ1Zikgewo+ICsJCWZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgYWxsb2NhdGUgcmVh ZCBidWZmZXJcbiIpOwo+ICsJCXJldHVybiBFTk9NRU07Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gcHJl YWQoZmQsIGJ1ZiwgY291bnQsIG9mZnNldCk7Cj4gKwlpZiAocmV0ICE9IGNvdW50KSB7Cj4gKwkJ ZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gcmVhZCAtICVzXG4iLCBzdHJlcnJvcihlcnJubykp OwpQcmludCByZXQgdG9vPyBJZiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgd2VyZSBsb3dlciwg ZXJybm8gd29uJ3QgYmUgc2V0LgoKPiArCQlyZXQgPSBlcnJubzsKPiArCQlnb3RvIG91dDsKPiAr CX0gZWxzZQp9IGVsc2UgewoKPiArCQlyZXQgPSBFWElUX1NVQ0NFU1M7CkludGlhbGl6ZSByZXQg IGFuZCBnZXQgcmlkIG9mIHRoZSBlbHNlIGJsb2NrPwoKPiArCj4gKwlwcmludGYoIlJlYWQgJXp1 IGJ5dGUocykgc3RhcnRpbmcgYXQgb2Zmc2V0ICV4XG5cbiIsIGNvdW50LCBvZmZzZXQpOwpQcmlu dCB0aGlzIGRlYnVnIG1lc3NhZ2Ugb25seSBpZiB0aGUgZXhwZWN0ZWQgbnVtYmVyIG9mIGJ5dGVz IHdlcmVuJ3QgcmVhZCBhbmQgCnNvbWV0aGluZyBsaWtlIHByaW50ZigiUmVhZCAlenUgYnl0ZXMs IGV4cGVjdGVkICV6dVxuIik7CgpwcmludGYoIjB4Iik7IHRvIGNsYXJpZnkgdGhhdCB0aGUgcHJp bnRlZCB2YWx1ZXMgYXJlIGluIGhleC4KPiArCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQo+ ICsJCXByaW50ZigiICUwMngiLCAqKCgodWludDhfdCAqKShidWYpKSArIGkpKTsKWW91IGNhbiBh dm9pZCB0eXBlY2FzdGluZyBpZiB5b3UgZGVmaW5lIHRoZSBhcnJheSBhcyB0eXBlIHVpbnQ4X3QK Cj4gKwlwcmludGYoIlxuIik7Cj4gKwo+ICtvdXQ6Cj4gKwlmcmVlKGJ1Zik7Cj4gKwlyZXR1cm4g cmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGRwY2Rfd3JpdGUoaW50IGZkLCBjb25zdCB1aW50 MzJfdCBvZmZzZXQsIGNvbnN0IHVpbnQ4X3QgdmFsKQpjb25zdCBpc24ndCBuZWVkZWQuCgo+ICt7 Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IHB3cml0ZShmZCwgKGNvbnN0IHZvaWQgKikmdmFs LCBzaXplb2YodWludDhfdCksIG9mZnNldCk7Cj4gKwlpZiAocmV0IDwgMCkgewo+ICsJCWZwcmlu dGYoc3RkZXJyLCAiRmFpbGVkIHRvIHdyaXRlIC0gJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7ClNh bWUgYXMgYWJvdmUsIHByaW50IG51bWJlciBvZiBieXRlcyB3cml0dGVuIGluIGNhc2Ugb2YgZXJy b3IuCgo+ICsJCXJldHVybiBlcnJubzsKPiArCX0gZWxzZQo+ICsJCXJldHVybiBFWElUX1NVQ0NF U1M7CllvdSBjb3VsZCBhdm9pZCAnZWxzZScgaGVyZS4KCj4gK30KPiArCj4gK2ludCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikKPiArewo+ICsJY2hhciBkZXZfbmFtZVsyMF07Cj4gKwlpbnQg cmV0LCBkZXZpZCwgZmQsIHZmbGFnID0gMDsKPiArCXVpbnQzMl90IG9mZnNldDsKPiArCXVpbnQ4 X3QgdmFsOwo+ICsJc2l6ZV90IGNvdW50Owo+ICsJaW50IGZpbGVfb3AgPSBPX1JET05MWTsKPiAr Cj4gKwllbnVtIGNvbW1hbmQgewo+ICsJCUlOViA9IC0xLAo+ICsJCVJFQUQgPSAyLApBbnkgcmVh c29uIHRvIG5vdCB1c2UgdGhlIHZhbHVlIGNvbXBpbGVyIGdlbmVyYXRlcz8KCj4gKwkJV1JJVEUs Cj4gKwl9IGNtZCA9IElOVjsKPiArCj4gKwlzdHJ1Y3Qgb3B0aW9uIGxvbmdvcHRzW10gPSB7Cj4g KwkJeyAiY291bnQiLAlyZXF1aXJlZF9hcmd1bWVudCwJTlVMTCwJCSdjJyB9LAo+ICsJCXsgImRl dmljZSIsCXJlcXVpcmVkX2FyZ3VtZW50LAlOVUxMLAkJJ2QnIH0sCj4gKwkJeyAiaGVscCIsCW5v X2FyZ3VtZW50LAkJTlVMTCwJCSdoJyB9LAo+ICsJCXsgIm9mZnNldCIsCXJlcXVpcmVkX2FyZ3Vt ZW50LAlOVUxMLAkJJ28nIH0sCj4gKwkJeyAidmFsdWUiLAlyZXF1aXJlZF9hcmd1bWVudCwJJnZm bGFnLAkJJ3YnIH0sCj4gKwkJeyAwIH0KPiArCX07Cj4gKwo+ICsJZGV2aWQgPSAwLCBjb3VudCA9 IDEsIG9mZnNldCA9IDB4MDsKPiArCj4gKwl3aGlsZSAoKHJldCA9IGdldG9wdF9sb25nKGFyZ2Ms IGFyZ3YsICItOmM6ZDpoOm86IiwgbG9uZ29wdHMsIE5VTEwpKSAhPQpBbnkgcmVhc29uIHRvIGxl YXZlIG91dCB0aGUgb3B0aW9uIC12ID8gQW5kICctaCcgc2hvdWxkbid0IG5lZWQgYW4gYXJndW1l bnQuCgoKPiAtMSkgeyArCQlzd2l0Y2ggKHJldCkgewo+ICsJCWNhc2UgJ2MnOgo+ICsJCQljb3Vu dCA9IHN0cnRvdWwob3B0YXJnLCBOVUxMLCAxMCk7CldpdGggc3RydG9sKCkgeW91IHNob3VsZCBi ZSBhYmxlIHJlamVjdCBhbGwgbmVnYXRpdmUgYXJncyBhbmQgbWFrZSB1c2Ugb2YgdGhlIApzZWNv bmQgYXJndW1lbnQgdG8gcmVqZWN0IGludmFsaWQgbnVtYmVycy4KCj4gKwkJCWlmIChjb3VudCA9 PSBVTE9OR19NQVgpIHsKPiArCQkJCWZwcmludGYoc3RkZXJyLCAiQ291bnQgYXJndW1lbnQgdG9v IGJpZ1xuIik7Cj4gKwkJCQlleGl0KEVSQU5HRSk7Cj4gKwkJCX0KPiArCQkJYnJlYWs7Cj4gKwkJ Y2FzZSAnZCc6Cj4gKwkJCWRldmlkID0gc3RydG91bChvcHRhcmcsIE5VTEwsIDEwKTsKU2FtZSBo ZXJlLCBzdHJ0b2woKSB0byByZWplY3QgbmVnYXRpdmVzIGFuZCB1c2UgKiplbmRwdHIgdG8gZmFp bCBvbiBpbnZhbGlkIApudW1iZXJzLgoKPiArCQkJaWYgKGRldmlkID09IFVMT05HX01BWCkgewo+ ICsJCQkJZnByaW50ZihzdGRlcnIsICJEZXZpZCBhcmd1bWVudCB0b28gYmlnXG4iKTsKCj4gKwkJ CQlleGl0KEVSQU5HRSk7Cj4gKwkJCX0KPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSAnaCc6Cj4gKwkJ CXByaW50X3VzYWdlKGFyZ3ZbMF0sIEVYSVRfU1VDQ0VTUyk7Cj4gKwkJCWJyZWFrOwo+ICsJCWNh c2UgJ28nOgo+ICsJCQlvZmZzZXQgPSBzdHJ0b3VsKG9wdGFyZywgTlVMTCwgMTYpOwpTYW1lIGNv bW1lbnQgYXMgZm9yICdkJy4gIFlvdSBtaWdodCBhbHNvIHdhbnQgdG8gY2hlY2sgaWYgZXJybm8g aXMgc2V0LgoKPiArCQkJaWYgKG9mZnNldCA+IE1BWF9PRkZTRVQpIHsKPiArCQkJCWZwcmludGYo c3RkZXJyLCAiT2Zmc2V0IHNob3VsZCBiZSA8PSAweGYwMmZmXG4iKTsKPiArCQkJCWV4aXQoRVJB TkdFKTsKPiArCQkJfQo+ICsJCQlicmVhazsKPiArCQljYXNlIDA6Cj4gKwkJCWlmICh2ZmxhZyA9 PSAndicgJiYgb3B0YXJnKQpJIGRpZG4ndCBnZXQgd2h5ICZ2ZmxhZyBoYWQgdG8gYmUgdXNlZC4K Cj4gKwkJCQl2YWwgPSAodWludDhfdCkgc3RydG91bChvcHRhcmcsIE5VTEwsIDE2KTsKUmVqZWN0 IHZhbHVlcyBncmVhdGVyIHRoYW4gMHhmZj8KCj4gKwkJCWJyZWFrOwo+ICsJCS8qIENvbW1hbmQg cGFyc2luZyAqLwo+ICsJCWNhc2UgMToKPiArCQkJaWYgKHN0cmNtcChvcHRhcmcsICJyZWFkIikg PT0gMCkgewo+ICsJCQkJY21kID0gUkVBRDsKPiArCQkJfSBlbHNlIGlmIChzdHJjbXAob3B0YXJn LCAid3JpdGUiKSA9PSAwKSB7Cj4gKwkJCQljbWQgPSBXUklURTsKPiArCQkJCWZpbGVfb3AgPSBP X1dST05MWTsKPiArCQkJfQo+ICsJCQlicmVhazsKIH0gZWxzZSB7CiBhbmQgZXhpdCBoZXJlPyAg b3IgZmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQgYmxvY2sgYnkgcmUtYXJyYW5naW5nIHRoZSBibG9j a3MuCgo+ICsJCWNhc2UgJzonOgo+ICsJCQlmcHJpbnRmKHN0ZGVyciwgIlRoZSAtJWMgb3B0aW9u IG9mICVzIHJlcXVpcmVzIGFuIGFyZ3VtZW50XG4iLAo+ICsJCQkJIG9wdG9wdCwgYXJndlswXSk7 CgpQcmludHMgIlRoZSAtYyBvcHRpb24gb2YgdG9vbHMvZHBjZF9yZWcgcmVxdWlyZXMgYW4gYXJn dW1lbnQiLCBpcyB0aGF0IHdoYXQgCnlvdSBpbnRlbmRlZD8gU2tpcCBwcmludGluZyB0aGUgdG9v bCBwYXRoPwoKPiArCQkJcHJpbnRfdXNhZ2UoYXJndlswXSwgRVhJVF9GQUlMVVJFKTsKPiArCQlj YXNlICc/JzoKPiArCQlkZWZhdWx0Ogo+ICsJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIC0gb3B0aW9u ICVjIGlzIGludmFsaWRcbiIsIGFyZ3ZbMF0sCj4gKwkJCQkgb3B0b3B0KTsKPiArCQkJcHJpbnRf dXNhZ2UoYXJndlswXSwgRVhJVF9GQUlMVVJFKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYgKChj b3VudCArIG9mZnNldCkgPiAoTUFYX09GRlNFVCArIDEpKSB7Cj4gKwkJZnByaW50ZihzdGRlcnIs ICJPdXQgb2YgYm91bmRzLiBDb3VudCArIE9mZnNldCA8PSAweGYwMzAwXG4iKTsKPiArCQlleGl0 KEVSQU5HRSk7Cj4gKwl9Cj4gKwo+ICsJaWYgKChjbWQgPT0gV1JJVEUpICYmICh2ZmxhZyAhPSAn dicpKSB7Cj4gKwkJZnByaW50ZihzdGRlcnIsICJXcml0ZSB2YWx1ZSBpcyBtaXNzaW5nXG4iKTsK PiArCQlwcmludF91c2FnZShhcmd2WzBdLCBFWElUX0ZBSUxVUkUpOwo+ICsJfQo+ICsKPiArCW1l bXNldChkZXZfbmFtZSwgJ1wwJywgMjApOwpOb3QgbmVlZGVkIGFzIHNucHJpbnRmIGluY2x1ZGVz IHRoZSBudWxsIGJ5dGUsCj4gKwlzbnByaW50ZihkZXZfbmFtZSwgc3RybGVuKGF1eF9kZXYpICsg MywgIiVzJWQiLCBhdXhfZGV2LCBkZXZpZCk7CkFsbG93cyBhIG1heCBvZiA5OSBmb3IgZGV2aWQs IHdoaWNoIHNob3VsZCBiZSBva2F5IGJ1dCBkZWZpbmUgYSBtYWNybyBhbmQgCnJlamVjdCBvcHQg YXJncyBncmVhdGVyIHRoYW4gdGhhdD8KCj4gKwo+ICsJZmQgPSBvcGVuKGRldl9uYW1lLCBmaWxl X29wKTsKPiArCWlmIChmZCA8IDApIHsKPiArCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBv cGVuICVzIGF1eCBkZXZpY2UgLSBlcnJvcjogJXNcbiIsIGRldl9uYW1lLAo+ICsJCQlzdHJlcnJv cihlcnJubykpOwo+ICsJCXJldHVybiBlcnJubzsKPiArCX0KPiArCj4gKwlzd2l0Y2ggKGNtZCkg ewo+ICsJY2FzZSBSRUFEOgo+ICsJCXJldCA9IGRwY2RfcmVhZChmZCwgb2Zmc2V0LCBjb3VudCk7 Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIFdSSVRFOgo+ICsJCXJldCA9IGRwY2Rfd3JpdGUoZmQsIG9m ZnNldCwgdmFsKTsKPiArCQlicmVhazsKPiArCWNhc2UgSU5WOgpJTlZBTElEIGlzIGVhc2llciB0 byB1bmRlcnN0YW5kCgo+ICsJZGVmYXVsdDoKPiArCQlmcHJpbnRmKHN0ZGVyciwgIlBsZWFzZSBz cGVjaWZ5IGEgY29tbWFuZDogcmVhZC93cml0ZS4gU2VlIHVzYWdlXG4iKTsKUmVtb3ZlICJTZWUg dXNhZ2UiCgo+ICsJCWNsb3NlKGZkKTsKVGhlcmUncyBhbm90aGVyIGNsb3NlKCkgYmVsb3cuCgo+ ICsJCXByaW50X3VzYWdlKGFyZ3ZbMF0sIEVYSVRfRkFJTFVSRSk7Cj4gKwl9Cj4gKwo+ICsJY2xv c2UoZmQpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvdG9vbHMvbWVz b24uYnVpbGQgYi90b29scy9tZXNvbi5idWlsZAo+IGluZGV4IGU0NTE3ZDY2Li43OWYzNmFhOSAx MDA2NDQKPiAtLS0gYS90b29scy9tZXNvbi5idWlsZAo+ICsrKyBiL3Rvb2xzL21lc29uLmJ1aWxk Cj4gQEAgLTM2LDYgKzM2LDcgQEAgdG9vbHNfcHJvZ3MgPSBbCj4gIAknaW50ZWxfd2F0ZXJtYXJr JywKPiAgCSdpbnRlbF9nZW1faW5mbycsCj4gIAknaW50ZWxfZ3Z0Z190ZXN0JywKPiArCSdkcGNk X3JlZycsCj4gIF0KPiAgdG9vbF9kZXBzID0gaWd0X2RlcHMKClRoYW5rcyBmb3Igd29ya2luZyBv biB0aGlzLiAgVGhlIHRvb2wgbG9va3MgZ29vZCBvdmVyYWxsLC4ganVzdCBuZWVkcyBzb21lIApt aW5vciBwb2xpc2hpbmcuCgotREsKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9p Z3QtZGV2Cg==