From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 527CB6E263 for ; Wed, 3 Oct 2018 18:19:44 +0000 (UTC) From: Dhinakaran Pandiyan Date: Wed, 03 Oct 2018 11:19:41 -0700 Message-ID: <1835166.qOAB0MrvMS@dk-thinkpad-x260> In-Reply-To: <20180926004405.50737-1-tarun.vyas@intel.com> References: <20180926004405.50737-1-tarun.vyas@intel.com> MIME-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t v4] 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: T24gVHVlc2RheSwgU2VwdGVtYmVyIDI1LCAyMDE4IDU6NDQ6MDUgUE0gUERUIFRhcnVuIFZ5YXMg d3JvdGU6Cj4gVGhpcyB0b29sIHNlcnZlcyBhcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBjb25zdHJ1 Y3RzIHByb3ZpZGVkIGJ5IHRoZQo+IGRybV9kcGNkX2F1eF9kZXYga2VybmVsIG1vZHVsZSBieSB3 b3JraW5nIG9uIHRoZSAvZGV2L2RybV9kcF9hdXhbbl0KPiBkZXZpY2VzIGNyZWF0ZWQgYnkgdGhl IGtlcm5lbCBtb2R1bGUuCj4gSXQgc3VwcG9ydHMgcmVhZGluZyBhbmQgd3JpdGluZyBkcGNkIHJl Z2lzdGVycyBvbiB0aGUgY29ubmVjdGVkIGF1eAo+IGNoYW5uZWxzLgo+IEluIHRoZSBmb2xsb3ct dXAgcGF0Y2gsIHN1cHBvcnQgZm9yIGRlY29kaW5nIHRoZXNlIHJlZ2lzdGVycyB3aWxsIGJlCj4g YWRkZWQgdG8gZmFjaWxhdGUgZGVidWdnaW5nIHBhbmVsIHJlbGF0ZWQgaXNzdWVzLgo+IAo+IHYy OiAoRml4ZXMgYnkgUm9kcmlnbyBidXQgbm8gZnVuY3Rpb25hbCBjaGFuZ2VzIHlldCk6Cj4gICAg IC0gSW5kZW50YXRpb25zLCBUeXBvLCBNaXNzZWQgc3BhY2VzCj4gICAgIC0gUmVtb3ZpbmcgbWVu dGlvbmluZyB0byBkZWNvZGUgYW5kIHNwZWMgdGhhdCBpcyBub3QgaW1wbGVtZW50ZWQgeWV0Lgo+ ICAgICAtIEFkZCBNYWtlZmlsZS5zb3VyY2VzIGJhY2sKPiAgICAgLSBNaXNzZWQgcy9wcmludGYv aWd0X3dhcm4KPiAKPiB2MzoKPiAgICAgLSBBZGRyZXMgREsncyByZXZpZXcgY29tbWVudHMgZnJv bSB2MiBhYm92ZS4KPiAgICAgLSBTcXVhc2ggUm9kcmlnbydzIGZpbGUgaGFuZGxpbmcgdW5pZmlj YXRpb24gcGF0Y2guCj4gICAgIC0gTWFrZSBjb3VudCwgb2Zmc2V0IGFuZCBkZXZpY2UgaWQgb3B0 aW9uYWwuCj4gCj4gdjQ6Cj4gICAgIC0gQmV0dGVyIGVycm9yIGhhbmRsaW5nIGFuZCByZWZhY3Rv cmluZy4KPiAKPiBTdWdnZXN0ZWQtYnk6IERoaW5ha2FyYW4gUGFuZGl5YW4gPGRoaW5ha2FyYW4u cGFuZGl5YW5AaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IFRhcnVuIFZ5YXMgPHRhcnVuLnZ5 YXNAaW50ZWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IFJvZHJpZ28gVml2aSA8cm9kcmlnby52aXZp QGludGVsLmNvbT4KPiAtLS0KPiAgdG9vbHMvTWFrZWZpbGUuc291cmNlcyB8ICAgMSArCj4gIHRv b2xzL2RwY2RfcmVnLmMgICAgICAgfCAyNzMKPiArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrIHRvb2xzL21lc29uLmJ1aWxkICAgICAgfCAKPiAgMSArCj4g IDMgZmlsZXMgY2hhbmdlZCwgMjc1IGluc2VydGlvbnMoKykKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IHRvb2xzL2RwY2RfcmVnLmMKPiAKPiBkaWZmIC0tZ2l0IGEvdG9vbHMvTWFrZWZpbGUuc291cmNl cyBiL3Rvb2xzL01ha2VmaWxlLnNvdXJjZXMKPiBpbmRleCBhYmQyM2EwZi4uNTA3MDZmNDEgMTAw NjQ0Cj4gLS0tIGEvdG9vbHMvTWFrZWZpbGUuc291cmNlcwo+ICsrKyBiL3Rvb2xzL01ha2VmaWxl LnNvdXJjZXMKPiBAQCAtNyw2ICs3LDcgQEAgbm9pbnN0X1BST0dSQU1TID0JCVwKPiAKPiAgdG9v bHNfcHJvZ19saXN0cyA9CQlcCj4gIAlpZ3Rfc3RhdHMJCVwKPiArCWRwY2RfcmVnCQlcCj4gIAlp bnRlbF9hdWRpb19kdW1wCVwKPiAgCWludGVsX3JlZwkJXAo+ICAJaW50ZWxfYmFja2xpZ2h0CQlc Cj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2RwY2RfcmVnLmMgYi90b29scy9kcGNkX3JlZy5jCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMC4uODQxOWI5ZTUKPiAtLS0gL2Rldi9u dWxsCj4gKysrIGIvdG9vbHMvZHBjZF9yZWcuYwo+IEBAIC0wLDAgKzEsMjczIEBACj4gKy8qCj4g 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+ICsjaW5jbHVkZSA8c3RkaW8uaD4KPiAr I2luY2x1ZGUgPGVycm5vLmg+Cj4gKyNpbmNsdWRlIDxzdHJpbmcuaD4KPiArI2luY2x1ZGUgPHN0 ZGxpYi5oPgo+ICsjaW5jbHVkZSA8ZmNudGwuaD4KPiArI2luY2x1ZGUgPGdldG9wdC5oPgo+ICsj aW5jbHVkZSA8c3RkaW50Lmg+Cj4gKyNpbmNsdWRlIDx1bmlzdGQuaD4KPiArI2luY2x1ZGUgPGxp bWl0cy5oPgo+ICsjaW5jbHVkZSA8c3RkYm9vbC5oPgo+ICsKPiArI2RlZmluZSBNQVhfRFBfT0ZG U0VUCTB4ZmZmZmYKPiArI2RlZmluZSBEUk1fQVVYX01JTk9SUwkyNTYKPiArCj4gK2NvbnN0IGNo YXIgYXV4X2RldltdID0gIi9kZXYvZHJtX2RwX2F1eCI7Cj4gKwo+ICtzdHJ1Y3QgZHBjZF9kYXRh IHsKPiArCWludCBkZXZpZDsKPiArCWludCBmaWxlX29wOwo+ICsJdWludDMyX3Qgb2Zmc2V0Owo+ ICsJZW51bSBjb21tYW5kIHsKPiArCQlJTlZBTElEID0gLTEsCj4gKwkJUkVBRCA9IDIsCj4gKwkJ V1JJVEUsCj4gKwl9IGNtZDsKPiArCXNpemVfdCBjb3VudDsKPiArCXVpbnQ4X3QgdmFsOwo+ICt9 Owo+ICsKPiArc3RhdGljIHZvaWQgcHJpbnRfdXNhZ2Uodm9pZCkKPiArewo+ICsJcHJpbnRmKCJV c2FnZTogZHBjZF9yZWcgW09QVElPTiAuLi5dIENPTU1BTkRcblxuIik7Cj4gKwlwcmludGYoIkNP TU1BTkQgaXMgb25lIG9mOlxuIik7Cj4gKwlwcmludGYoIiAgcmVhZDoJCVJlYWQgW2NvdW50XSBi eXRlcyBkcGNkIHJlZyBhdCBhbiBvZmZzZXRcbiIpOwo+ICsJcHJpbnRmKCIgIHdyaXRlOglXcml0 ZSBhIGRwY2QgcmVnIGF0IGFuIG9mZnNldFxuXG4iKTsKPiArCXByaW50ZigiT3B0aW9ucyBmb3Ig dGhlIGFib3ZlIENPTU1BTkRTIGFyZVxuIik7Cj4gKwlwcmludGYoIiAtLWRldmljZT1ERVZJRAkJ QXV4IGRldmljZSBpZCwgYXMgbGlzdGVkIGluCj4gL2Rldi9kcm1fZHBfYXV4X2RldltuXS4iICsJ CQkJCSJEZWZhdWx0cyB0byAwLiBVcHBlciBsaW1pdCAtIAoyNTZcbiIpOwo+ICsJcHJpbnRmKCIg LS1vZmZzZXQ9UkVHX0FERFIJRFBDRCByZWdpc3RlciBvZmZzZXQgaW4gaGV4LiBEZWZhdWx0cyB0 byAweDAiCj4gKwkJCQkJIlVwcGVyIGxpbWl0IC0gMHhmZmZmZlxuIik7Cj4gKwlwcmludGYoIiAt LWNvdW50PUJZVEVTCQlGb3IgcmVhZHMsIHNwZWNpZnkgbnVtYmVyIG9mIGJ5dGVzIHRvIGJlIHJl YWQKPiBmcm9tIiArCQkJCQkiIHRoZSBvZmZzZXQuIERlZmF1bHRzIHRvIDFcbiIpOwo+ICsJcHJp bnRmKCIgLS12YWx1ZQkJRm9yIHdyaXRlcywgc3BlY2lmeSBhIGhleCB2YWx1ZSB0byBiZSB3cml0 dGVuIgo+ICsJCQkJCSJVcHBlciBsaW1pdCAtIDB4ZmZcblxuIik7Cj4gKwo+ICsJcHJpbnRmKCIg LS1oZWxwOiBwcmludCB0aGUgdXNhZ2VcbiIpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5lIGJv b2wgc3RydG9sX2Vycl91dGlsKGNoYXIgKmVuZHB0ciwgbG9uZyAqdmFsKQo+ICt7Cj4gKwlyZXR1 cm4gKCplbmRwdHIgIT0gJ1wwJyB8fCAqdmFsIDwgMCB8fCAoKnZhbCA9PSBMT05HX01BWCAmJiBl cnJubyA9PQo+IEVSQU5HRSkpIFwgKwkJID8gdHJ1ZSA6IGZhbHNlOwpJIHRoaW5rIHdyaXRpbmcg aXQgaW4gdGhpcyBmb3JtIHdvdWxkIHJlYWQgYmV0dGVyLgoKaWYgKGVycm9yX2NvbmRpdGlvbikK CXJldHVybiB0cnVlOwoKcmV0dXJuIGZhbHNlOwoKCj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcGFy c2Vfb3B0cyhzdHJ1Y3QgZHBjZF9kYXRhICpkcGNkLCBpbnQgYXJnYywgY2hhciAqKmFyZ3YpCj4g K3sKPiArCWludCByZXQsIHZmbGFnID0gMDsKPiArCWxvbmcgdGVtcDsKPiArCWNoYXIgKmVuZHB0 cjsKPiArCj4gKwlzdHJ1Y3Qgb3B0aW9uIGxvbmdvcHRzW10gPSB7Cj4gKwkJeyAiY291bnQiLAly ZXF1aXJlZF9hcmd1bWVudCwJTlVMTCwJCSdjJyB9LAo+ICsJCXsgImRldmljZSIsCXJlcXVpcmVk X2FyZ3VtZW50LAlOVUxMLAkJJ2QnIH0sCj4gKwkJeyAiaGVscCIsCW5vX2FyZ3VtZW50LAkJTlVM TCwJCSdoJyB9LAo+ICsJCXsgIm9mZnNldCIsCXJlcXVpcmVkX2FyZ3VtZW50LAlOVUxMLAkJJ28n IH0sCj4gKwkJeyAidmFsdWUiLAlyZXF1aXJlZF9hcmd1bWVudCwJTlVMTCwJCSd2JyB9LAo+ICsJ CXsgMCB9Cj4gKwl9Owo+ICsKPiArCXdoaWxlICgocmV0ID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJn diwgIi06YzpkOmhvOnY6IiwgbG9uZ29wdHMsIE5VTEwpKSAhPQo+IC0xKSB7ICsJCXN3aXRjaCAo cmV0KSB7Cj4gKwkJY2FzZSAnYyc6Cj4gKwkJCXRlbXAgPSBzdHJ0b2wob3B0YXJnLCAmZW5kcHRy LCAxMCk7Cj4gKwkJCWlmIChzdHJ0b2xfZXJyX3V0aWwoZW5kcHRyLCAmdGVtcCkpIHsKPiArCQkJ CWZwcmludGYoc3RkZXJyLCAiLS1jb3VudCBhcmd1bWVudCBpcyBpbnZhbGlkL25lZ2F0aXZlL291 dC1vZi0KcmFuZ2VcbiIpOwo+ICsJCQkJcHJpbnRfdXNhZ2UoKTsKPiArCQkJCXJldHVybiBFWElU X0ZBSUxVUkU7Cj4gKwkJCX0KPiArCQkJZHBjZC0+Y291bnQgPSB0ZW1wOwo+ICsJCQlicmVhazsK PiArCQljYXNlICdkJzoKPiArCQkJdGVtcCA9IHN0cnRvbChvcHRhcmcsICZlbmRwdHIsIDEwKTsK PiArCQkJaWYgKHN0cnRvbF9lcnJfdXRpbChlbmRwdHIsICZ0ZW1wKSB8fCB0ZW1wID4gRFJNX0FV WF9NSU5PUlMpIHsKPiArCQkJCWZwcmludGYoc3RkZXJyLCAiLS1kZXZpZCBhcmd1bWVudCBpcyBp bnZhbGlkL25lZ2F0aXZlL291dC1vZi0KcmFuZ2VcbiIpOwo+ICsJCQkJcHJpbnRfdXNhZ2UoKTsK PiArCQkJCXJldHVybiBFUkFOR0U7Cj4gKwkJCX0KPiArCQkJZHBjZC0+ZGV2aWQgPSB0ZW1wOwo+ ICsJCQlicmVhazsKPiArCQljYXNlICdoJzoKPiArCQkJcHJpbnRmKCJEUENEIHJlZ2lzdGVyIHJl YWQgYW5kIHdyaXRlIHRvb2xcblxuIik7Cj4gKwkJCXByaW50ZigiVGhpcyB0b29sIHJlcXVpcmVz IENPTkZJR19EUk1fRFBfQVVYX0NIQVJERVZcbiIKPiArCQkJCSJ0byBiZSBzZXQgaW4gdGhlIGtl cm5lbCBjb25maWcuXG5cbiIpOwo+ICsJCQlwcmludF91c2FnZSgpOwo+ICsJCQlleGl0KEVYSVRf U1VDQ0VTUyk7Cj4gKwkJY2FzZSAnbyc6Cj4gKwkJCXRlbXAgPSBzdHJ0b2wob3B0YXJnLCAmZW5k cHRyLCAxNik7Cj4gKwkJCWlmIChzdHJ0b2xfZXJyX3V0aWwoZW5kcHRyLCAmdGVtcCkgfHwgdGVt cCA+IE1BWF9EUF9PRkZTRVQpIHsKPiArCQkJCWZwcmludGYoc3RkZXJyLCAiLS1vZmZzZXQgYXJn dW1lbnQgaXMKPiBpbnZhbGlkL25lZ2F0aXZlL291dC1vZi1yYW5nZVxuIik7ICsJCQkJcHJpbnRf dXNhZ2UoKTsKPiArCQkJCXJldHVybiBFUkFOR0U7Cj4gKwkJCX0KPiArCQkJZHBjZC0+b2Zmc2V0 ID0gdGVtcDsKPiArCQkJYnJlYWs7Cj4gKwkJY2FzZSAndic6Cj4gKwkJCXZmbGFnID0gJ3YnOwo+ ICsJCQl0ZW1wID0gc3RydG9sKG9wdGFyZywgJmVuZHB0ciwgMTYpOwo+ICsJCQlpZiAoc3RydG9s X2Vycl91dGlsKGVuZHB0ciwgJnRlbXApIHx8IHRlbXAgPiAweGZmKSB7Cj4gKwkJCQlmcHJpbnRm KHN0ZGVyciwgIi0tdmFsdWUgYXJndW1lbnQgaXMgaW52YWxpZC9uZWdhdGl2ZS9vdXQtb2YtCnJh bmdlXG4iKTsKPiArCQkJCXByaW50X3VzYWdlKCk7Cj4gKwkJCQlyZXR1cm4gRVJBTkdFOwo+ICsJ CQl9Cj4gKwkJCWRwY2QtPnZhbCA9IHRlbXA7Cj4gKwkJCWJyZWFrOwo+ICsJCS8qIENvbW1hbmQg cGFyc2luZyAqLwo+ICsJCWNhc2UgMToKPiArCQkJaWYgKHN0cmNtcChvcHRhcmcsICJyZWFkIikg PT0gMCkgewo+ICsJCQkJdGVtcCA9IFJFQUQ7Cj4gKwkJCX0gZWxzZSBpZiAoc3RyY21wKG9wdGFy ZywgIndyaXRlIikgPT0gMCkgewo+ICsJCQkJdGVtcCA9IFdSSVRFOwo+ICsJCQkJZHBjZC0+Zmls ZV9vcCA9IE9fV1JPTkxZOwo+ICsJCQl9IGVsc2Ugewo+ICsJCQkJZnByaW50ZihzdGRlcnIsICJV bnJlY29nbml6ZWQgY29tbWFuZFxuIik7Cj4gKwkJCQlwcmludF91c2FnZSgpOwo+ICsJCQkJcmV0 dXJuIEVYSVRfRkFJTFVSRTsKPiArCQkJfQo+ICsJCQlkcGNkLT5jbWQgPSB0ZW1wOwo+ICsJCQli cmVhazsKPiArCQljYXNlICc6JzoKPiArCQkJZnByaW50ZihzdGRlcnIsICJPcHRpb24gLSVjIHJl cXVpcmVzIGFuIGFyZ3VtZW50XG4iLAo+ICsJCQkJIG9wdG9wdCk7Cj4gKwkJCXByaW50X3VzYWdl KCk7Cj4gKwkJCXJldHVybiBFWElUX0ZBSUxVUkU7Cj4gKwkJY2FzZSAnPyc6ClRoaXMgaXMgbm90 IG5lZWRlZC4KCj4gKwkJZGVmYXVsdDoKPiArCQkJZnByaW50ZihzdGRlcnIsICJBcmd1bWVudCBv ZiAgLSVjIGlzIGludmFsaWRcbiIsIG9wdG9wdCk7Cj4gKwkJCXByaW50X3VzYWdlKCk7Cj4gKwkJ CXJldHVybiBFWElUX0ZBSUxVUkU7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWlmICgoZHBjZC0+Y291 bnQgKyBkcGNkLT5vZmZzZXQpID4gKE1BWF9EUF9PRkZTRVQgKyAxKSkgewo+ICsJCWZwcmludGYo c3RkZXJyLCAiT3V0IG9mIGJvdW5kcy4gQ291bnQgKyBPZmZzZXQgPD0gMHgxMDAwMDBcbiIpOwo+ ICsJCXJldHVybiBFUkFOR0U7Cj4gKwl9Cj4gKwo+ICsJaWYgKChkcGNkLT5jbWQgPT0gV1JJVEUp ICYmICh2ZmxhZyAhPSAndicpKSB7Cj4gKwkJZnByaW50ZihzdGRlcnIsICJXcml0ZSB2YWx1ZSBp cyBtaXNzaW5nXG4iKTsKPiArCQlwcmludF91c2FnZSgpOwo+ICsJCXJldHVybiBFWElUX0ZBSUxV UkU7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIEVYSVRfU1VDQ0VTUzsKPiArfQo+ICsKPiArc3RhdGlj IGludCBkcGNkX3JlYWQoaW50IGZkLCB1aW50MzJfdCBvZmZzZXQsIHNpemVfdCBjb3VudCkKPiAr ewo+ICsJaW50IHJldCA9IEVYSVRfU1VDQ0VTUywgcHJldCwgaTsKPiArCXVpbnQ4X3QgKmJ1ZiA9 IGNhbGxvYyhjb3VudCwgc2l6ZW9mKHVpbnQ4X3QpKTsKPiArCj4gKwlpZiAoIWJ1Zikgewo+ICsJ CWZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgYWxsb2NhdGUgcmVhZCBidWZmZXJcbiIpOwo+ICsJCXJl dHVybiBFTk9NRU07Cj4gKwl9Cj4gKwo+ICsJcHJldCA9IHByZWFkKGZkLCBidWYsIGNvdW50LCBv ZmZzZXQpOwo+ICsJaWYgKHByZXQgPCAwKSB7Cj4gKwkJZnByaW50ZihzdGRlcnIsICJGYWlsZWQg dG8gcmVhZCAtICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwo+ICsJCXJldCA9IGVycm5vOwo+ICsJ CWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCWlmIChwcmV0IDwgY291bnQpIHsKPiArCQlwcmludGYo IlJlYWQgJXUgYnl0ZShzKSwgZXhwZWN0ZWQgJXp1IGJ5dGVzLCBzdGFydGluZyBhdCIKPiArCQkJ IiBvZmZzZXQgJXhcblxuIiwgcHJldCwgY291bnQsIG9mZnNldCk7CllvdSBjb3VsZCBpZ25vcmUg dGhlIDgwIGNoYXJhY3RlciBsaW1pdCBhbmQgd3JpdGUgdGhlIHdob2xlIHN0cmluZyBpbiBvbmUg CmxpbmUuCkFuZCBhbHNvIAoJCXJldCA9IEVYSVRfRkFJTFVSRTsKCQlwcmludCB0byBzdGRlcnI/ Cgo+ICsJfQo+ICsKPiArCXByaW50ZigiMHg6ICIpOwoJcHJpbnRmKCIweCV4OiIsIG9mZnNldCk7 CgpXaXRoIHRoZSBvZmZzZXQgYWRkZWQsIApSZXZpZXdlZC1ieTogRGhpbmFrYXJhbiBQYW5kaXlh biA8ZGhpbmFrYXJhbi5wYW5kaXlhbkBpbnRlbC5jb20+CkknbGwgbGVhdmUgaXQgdXAgdG8geW91 IHRvIGZpeCBvdGhlciBuaXRzLgoKPiArCWZvciAoaSA9IDA7IGkgPCBwcmV0OyBpKyspCj4gKwkJ cHJpbnRmKCIgJTAyeCIsICooYnVmICsgaSkpOwo+ICsJcHJpbnRmKCJcbiIpOwo+ICsKPiArb3V0 Ogo+ICsJZnJlZShidWYpOwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIGludCBk cGNkX3dyaXRlKGludCBmZCwgdWludDMyX3Qgb2Zmc2V0LCB1aW50OF90IHZhbCkKPiArewo+ICsJ aW50IHJldCA9IEVYSVRfU1VDQ0VTUywgcHJldDsKPiArCj4gKwlwcmV0ID0gcHdyaXRlKGZkLCAo Y29uc3Qgdm9pZCAqKSZ2YWwsIHNpemVvZih1aW50OF90KSwgb2Zmc2V0KTsKPiArCWlmIChwcmV0 IDwgMCkgewo+ICsJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHdyaXRlIC0gJXNcbiIsIHN0 cmVycm9yKGVycm5vKSk7Cj4gKwkJcmV0ID0gZXJybm87Cj4gKwl9IGVsc2UgaWYgKCFwcmV0KSB7 CkkgcHJlZmVyIGNvbXBhcmlzb24gdG8gMCBpbiB0aGlzIGNhc2UgYXMgdGhlIHZhbHVlIGlzIG51 bWVyaWNhbC4KCglyZXQgPSBFWElUX0ZBSUxVUkU7Cj4gKwkJcHJpbnRmKCJaZXJvIGJ5dGVzIHdl cmUgd3JpdHRlblxuIik7CnN0ZGVyciBoZXJlIHRvbz8KCj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJl dDsKPiArfQo+ICsKPiAraW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQo+ICt7Cj4gKwlj aGFyIGRldl9uYW1lWzIwXTsKPiArCWludCByZXQsIGZkOwo+ICsKPiArCXN0cnVjdCBkcGNkX2Rh dGEgZHBjZCA9IHsKPiArCQkuZGV2aWQgPSAwLAo+ICsJCS5maWxlX29wID0gT19SRE9OTFksCj4g KwkJLm9mZnNldCA9IDB4MCwKPiArCQkuY21kID0gSU5WQUxJRCwKPiArCQkuY291bnQgPSAxLAo+ ICsJfTsKPiArCj4gKwlpZigocmV0ID0gcGFyc2Vfb3B0cygmZHBjZCwgYXJnYywgYXJndikpICE9 IEVYSVRfU1VDQ0VTUykKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiArCXNucHJpbnRmKGRldl9uYW1l LCBzdHJsZW4oYXV4X2RldikgKyA0LCAiJXMlZCIsIGF1eF9kZXYsIGRwY2QuZGV2aWQpOwo+ICsK PiArCWZkID0gb3BlbihkZXZfbmFtZSwgZHBjZC5maWxlX29wKTsKPiArCWlmIChmZCA8IDApIHsK PiArCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBvcGVuICVzIGF1eCBkZXZpY2UgLSBlcnJv cjogJXNcbiIsIGRldl9uYW1lLAo+ICsJCQlzdHJlcnJvcihlcnJubykpOwo+ICsJCXJldHVybiBl cnJubzsKPiArCX0KPiArCj4gKwlzd2l0Y2ggKGRwY2QuY21kKSB7Cj4gKwljYXNlIFJFQUQ6Cj4g KwkJcmV0ID0gZHBjZF9yZWFkKGZkLCBkcGNkLm9mZnNldCwgZHBjZC5jb3VudCk7Cj4gKwkJYnJl YWs7Cj4gKwljYXNlIFdSSVRFOgo+ICsJCXJldCA9IGRwY2Rfd3JpdGUoZmQsIGRwY2Qub2Zmc2V0 LCBkcGNkLnZhbCk7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIElOVkFMSUQ6Ckp1c3QgdGhlIGRlZmF1 bHQgaXMgc3VmZmljaWVudC4KCj4gKwlkZWZhdWx0Ogo+ICsJCWZwcmludGYoc3RkZXJyLCAiUGxl YXNlIHNwZWNpZnkgYSBjb21tYW5kOiByZWFkL3dyaXRlLlxuIik7Cj4gKwkJcHJpbnRfdXNhZ2Uo KTsKPiArCQlyZXQgPSBFWElUX0ZBSUxVUkU7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJY2xv c2UoZmQpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiBkaWZmIC0tZ2l0IGEvdG9vbHMvbWVz b24uYnVpbGQgYi90b29scy9tZXNvbi5idWlsZAo+IGluZGV4IGU0NTE3ZDY2Li43OWYzNmFhOSAx MDA2NDQKPiAtLS0gYS90b29scy9tZXNvbi5idWlsZAo+ICsrKyBiL3Rvb2xzL21lc29uLmJ1aWxk Cj4gQEAgLTM2LDYgKzM2LDcgQEAgdG9vbHNfcHJvZ3MgPSBbCj4gIAknaW50ZWxfd2F0ZXJtYXJr JywKPiAgCSdpbnRlbF9nZW1faW5mbycsCj4gIAknaW50ZWxfZ3Z0Z190ZXN0JywKPiArCSdkcGNk X3JlZycsCj4gIF0KPiAgdG9vbF9kZXBzID0gaWd0X2RlcHMKCgoKX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRl dkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9pZ3QtZGV2Cg==