From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 32FD889EB7 for ; Wed, 26 Sep 2018 00:49:11 +0000 (UTC) From: Tarun Vyas Date: Tue, 25 Sep 2018 17:44:05 -0700 Message-Id: <20180926004405.50737-1-tarun.vyas@intel.com> MIME-Version: 1.0 Subject: [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: dhinakaran.pandiyan@intel.com, rodrigo.vivi@intel.com List-ID: VGhpcyB0b29sIHNlcnZlcyBhcyBhIHdyYXBwZXIgYXJvdW5kIHRoZSBjb25zdHJ1Y3RzIHByb3Zp ZGVkIGJ5IHRoZQpkcm1fZHBjZF9hdXhfZGV2IGtlcm5lbCBtb2R1bGUgYnkgd29ya2luZyBvbiB0 aGUgL2Rldi9kcm1fZHBfYXV4W25dCmRldmljZXMgY3JlYXRlZCBieSB0aGUga2VybmVsIG1vZHVs ZS4KSXQgc3VwcG9ydHMgcmVhZGluZyBhbmQgd3JpdGluZyBkcGNkIHJlZ2lzdGVycyBvbiB0aGUg Y29ubmVjdGVkIGF1eApjaGFubmVscy4KSW4gdGhlIGZvbGxvdy11cCBwYXRjaCwgc3VwcG9ydCBm b3IgZGVjb2RpbmcgdGhlc2UgcmVnaXN0ZXJzIHdpbGwgYmUKYWRkZWQgdG8gZmFjaWxhdGUgZGVi dWdnaW5nIHBhbmVsIHJlbGF0ZWQgaXNzdWVzLgoKdjI6IChGaXhlcyBieSBSb2RyaWdvIGJ1dCBu byBmdW5jdGlvbmFsIGNoYW5nZXMgeWV0KToKICAgIC0gSW5kZW50YXRpb25zLCBUeXBvLCBNaXNz ZWQgc3BhY2VzCiAgICAtIFJlbW92aW5nIG1lbnRpb25pbmcgdG8gZGVjb2RlIGFuZCBzcGVjIHRo YXQgaXMgbm90IGltcGxlbWVudGVkIHlldC4KICAgIC0gQWRkIE1ha2VmaWxlLnNvdXJjZXMgYmFj awogICAgLSBNaXNzZWQgcy9wcmludGYvaWd0X3dhcm4KCnYzOgogICAgLSBBZGRyZXMgREsncyBy ZXZpZXcgY29tbWVudHMgZnJvbSB2MiBhYm92ZS4KICAgIC0gU3F1YXNoIFJvZHJpZ28ncyBmaWxl IGhhbmRsaW5nIHVuaWZpY2F0aW9uIHBhdGNoLgogICAgLSBNYWtlIGNvdW50LCBvZmZzZXQgYW5k IGRldmljZSBpZCBvcHRpb25hbC4KCnY0OgogICAgLSBCZXR0ZXIgZXJyb3IgaGFuZGxpbmcgYW5k IHJlZmFjdG9yaW5nLgoKU3VnZ2VzdGVkLWJ5OiBEaGluYWthcmFuIFBhbmRpeWFuIDxkaGluYWth cmFuLnBhbmRpeWFuQGludGVsLmNvbT4KU2lnbmVkLW9mZi1ieTogVGFydW4gVnlhcyA8dGFydW4u dnlhc0BpbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IFJvZHJpZ28gVml2aSA8cm9kcmlnby52aXZp QGludGVsLmNvbT4KLS0tCiB0b29scy9NYWtlZmlsZS5zb3VyY2VzIHwgICAxICsKIHRvb2xzL2Rw Y2RfcmVnLmMgICAgICAgfCAyNzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogdG9vbHMvbWVzb24uYnVpbGQgICAgICB8ICAgMSArCiAzIGZpbGVzIGNo YW5nZWQsIDI3NSBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgdG9vbHMvZHBjZF9y ZWcuYwoKZGlmZiAtLWdpdCBhL3Rvb2xzL01ha2VmaWxlLnNvdXJjZXMgYi90b29scy9NYWtlZmls ZS5zb3VyY2VzCmluZGV4IGFiZDIzYTBmLi41MDcwNmY0MSAxMDA2NDQKLS0tIGEvdG9vbHMvTWFr ZWZpbGUuc291cmNlcworKysgYi90b29scy9NYWtlZmlsZS5zb3VyY2VzCkBAIC03LDYgKzcsNyBA QCBub2luc3RfUFJPR1JBTVMgPQkJXAogCiB0b29sc19wcm9nX2xpc3RzID0JCVwKIAlpZ3Rfc3Rh dHMJCVwKKwlkcGNkX3JlZwkJXAogCWludGVsX2F1ZGlvX2R1bXAJXAogCWludGVsX3JlZwkJXAog CWludGVsX2JhY2tsaWdodAkJXApkaWZmIC0tZ2l0IGEvdG9vbHMvZHBjZF9yZWcuYyBiL3Rvb2xz L2RwY2RfcmVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLjg0MTliOWU1 Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMvZHBjZF9yZWcuYwpAQCAtMCwwICsxLDI3MyBAQAor LyoKKyAqIENvcHlyaWdodCDCqSAyMDE4IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlz c2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0 YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVk IHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBU aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5j bHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBj b3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisg KiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBB TlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hB TEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLAorICogT1VU IE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhF UiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqIERQQ0QgcmVnaXN0ZXIgcmVh ZC93cml0ZSB0b29sCisgKiBUaGlzIHRvb2wgd3JhcHMgYXJvdW5kIERSTV9EUF9BVVhfREVWIG1v ZHVsZSB0byBwcm92aWRlIERQQ0QgcmVnaXN0ZXIgcmVhZAorICogYW5kIHdyaXRlLCBzbyBDT05G SUdfRFJNX0RQX0FVWF9ERVYgbmVlZHMgdG8gYmUgc2V0LgorICovCisKKyNpbmNsdWRlIDxzdGRp by5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8 c3RkbGliLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxnZXRvcHQuaD4KKyNpbmNs dWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4K KyNpbmNsdWRlIDxzdGRib29sLmg+CisKKyNkZWZpbmUgTUFYX0RQX09GRlNFVAkweGZmZmZmCisj ZGVmaW5lIERSTV9BVVhfTUlOT1JTCTI1NgorCitjb25zdCBjaGFyIGF1eF9kZXZbXSA9ICIvZGV2 L2RybV9kcF9hdXgiOworCitzdHJ1Y3QgZHBjZF9kYXRhIHsKKwlpbnQgZGV2aWQ7CisJaW50IGZp bGVfb3A7CisJdWludDMyX3Qgb2Zmc2V0OworCWVudW0gY29tbWFuZCB7CisJCUlOVkFMSUQgPSAt MSwKKwkJUkVBRCA9IDIsCisJCVdSSVRFLAorCX0gY21kOworCXNpemVfdCBjb3VudDsKKwl1aW50 OF90IHZhbDsKK307CisKK3N0YXRpYyB2b2lkIHByaW50X3VzYWdlKHZvaWQpCit7CisJcHJpbnRm KCJVc2FnZTogZHBjZF9yZWcgW09QVElPTiAuLi5dIENPTU1BTkRcblxuIik7CisJcHJpbnRmKCJD T01NQU5EIGlzIG9uZSBvZjpcbiIpOworCXByaW50ZigiICByZWFkOgkJUmVhZCBbY291bnRdIGJ5 dGVzIGRwY2QgcmVnIGF0IGFuIG9mZnNldFxuIik7CisJcHJpbnRmKCIgIHdyaXRlOglXcml0ZSBh IGRwY2QgcmVnIGF0IGFuIG9mZnNldFxuXG4iKTsKKwlwcmludGYoIk9wdGlvbnMgZm9yIHRoZSBh Ym92ZSBDT01NQU5EUyBhcmVcbiIpOworCXByaW50ZigiIC0tZGV2aWNlPURFVklECQlBdXggZGV2 aWNlIGlkLCBhcyBsaXN0ZWQgaW4gL2Rldi9kcm1fZHBfYXV4X2RldltuXS4iCisJCQkJCSJEZWZh dWx0cyB0byAwLiBVcHBlciBsaW1pdCAtIDI1NlxuIik7CisJcHJpbnRmKCIgLS1vZmZzZXQ9UkVH X0FERFIJRFBDRCByZWdpc3RlciBvZmZzZXQgaW4gaGV4LiBEZWZhdWx0cyB0byAweDAiCisJCQkJ CSJVcHBlciBsaW1pdCAtIDB4ZmZmZmZcbiIpOworCXByaW50ZigiIC0tY291bnQ9QllURVMJCUZv ciByZWFkcywgc3BlY2lmeSBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgcmVhZCBmcm9tIgorCQkJCQki IHRoZSBvZmZzZXQuIERlZmF1bHRzIHRvIDFcbiIpOworCXByaW50ZigiIC0tdmFsdWUJCUZvciB3 cml0ZXMsIHNwZWNpZnkgYSBoZXggdmFsdWUgdG8gYmUgd3JpdHRlbiIKKwkJCQkJIlVwcGVyIGxp bWl0IC0gMHhmZlxuXG4iKTsKKworCXByaW50ZigiIC0taGVscDogcHJpbnQgdGhlIHVzYWdlXG4i KTsKK30KKworc3RhdGljIGlubGluZSBib29sIHN0cnRvbF9lcnJfdXRpbChjaGFyICplbmRwdHIs IGxvbmcgKnZhbCkKK3sKKwlyZXR1cm4gKCplbmRwdHIgIT0gJ1wwJyB8fCAqdmFsIDwgMCB8fCAo KnZhbCA9PSBMT05HX01BWCAmJiBlcnJubyA9PSBFUkFOR0UpKSBcCisJCSA/IHRydWUgOiBmYWxz ZTsKK30KKworc3RhdGljIGludCBwYXJzZV9vcHRzKHN0cnVjdCBkcGNkX2RhdGEgKmRwY2QsIGlu dCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQgcmV0LCB2ZmxhZyA9IDA7CisJbG9uZyB0ZW1w OworCWNoYXIgKmVuZHB0cjsKKworCXN0cnVjdCBvcHRpb24gbG9uZ29wdHNbXSA9IHsKKwkJeyAi Y291bnQiLAlyZXF1aXJlZF9hcmd1bWVudCwJTlVMTCwJCSdjJyB9LAorCQl7ICJkZXZpY2UiLAly ZXF1aXJlZF9hcmd1bWVudCwJTlVMTCwJCSdkJyB9LAorCQl7ICJoZWxwIiwJbm9fYXJndW1lbnQs CQlOVUxMLAkJJ2gnIH0sCisJCXsgIm9mZnNldCIsCXJlcXVpcmVkX2FyZ3VtZW50LAlOVUxMLAkJ J28nIH0sCisJCXsgInZhbHVlIiwJcmVxdWlyZWRfYXJndW1lbnQsCU5VTEwsCQkndicgfSwKKwkJ eyAwIH0KKwl9OworCisJd2hpbGUgKChyZXQgPSBnZXRvcHRfbG9uZyhhcmdjLCBhcmd2LCAiLTpj OmQ6aG86djoiLCBsb25nb3B0cywgTlVMTCkpICE9IC0xKSB7CisJCXN3aXRjaCAocmV0KSB7CisJ CWNhc2UgJ2MnOgorCQkJdGVtcCA9IHN0cnRvbChvcHRhcmcsICZlbmRwdHIsIDEwKTsKKwkJCWlm IChzdHJ0b2xfZXJyX3V0aWwoZW5kcHRyLCAmdGVtcCkpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwg Ii0tY291bnQgYXJndW1lbnQgaXMgaW52YWxpZC9uZWdhdGl2ZS9vdXQtb2YtcmFuZ2VcbiIpOwor CQkJCXByaW50X3VzYWdlKCk7CisJCQkJcmV0dXJuIEVYSVRfRkFJTFVSRTsKKwkJCX0KKwkJCWRw Y2QtPmNvdW50ID0gdGVtcDsKKwkJCWJyZWFrOworCQljYXNlICdkJzoKKwkJCXRlbXAgPSBzdHJ0 b2wob3B0YXJnLCAmZW5kcHRyLCAxMCk7CisJCQlpZiAoc3RydG9sX2Vycl91dGlsKGVuZHB0ciwg JnRlbXApIHx8IHRlbXAgPiBEUk1fQVVYX01JTk9SUykgeworCQkJCWZwcmludGYoc3RkZXJyLCAi LS1kZXZpZCBhcmd1bWVudCBpcyBpbnZhbGlkL25lZ2F0aXZlL291dC1vZi1yYW5nZVxuIik7CisJ CQkJcHJpbnRfdXNhZ2UoKTsKKwkJCQlyZXR1cm4gRVJBTkdFOworCQkJfQorCQkJZHBjZC0+ZGV2 aWQgPSB0ZW1wOworCQkJYnJlYWs7CisJCWNhc2UgJ2gnOgorCQkJcHJpbnRmKCJEUENEIHJlZ2lz dGVyIHJlYWQgYW5kIHdyaXRlIHRvb2xcblxuIik7CisJCQlwcmludGYoIlRoaXMgdG9vbCByZXF1 aXJlcyBDT05GSUdfRFJNX0RQX0FVWF9DSEFSREVWXG4iCisJCQkJInRvIGJlIHNldCBpbiB0aGUg a2VybmVsIGNvbmZpZy5cblxuIik7CisJCQlwcmludF91c2FnZSgpOworCQkJZXhpdChFWElUX1NV Q0NFU1MpOworCQljYXNlICdvJzoKKwkJCXRlbXAgPSBzdHJ0b2wob3B0YXJnLCAmZW5kcHRyLCAx Nik7CisJCQlpZiAoc3RydG9sX2Vycl91dGlsKGVuZHB0ciwgJnRlbXApIHx8IHRlbXAgPiBNQVhf RFBfT0ZGU0VUKSB7CisJCQkJZnByaW50ZihzdGRlcnIsICItLW9mZnNldCBhcmd1bWVudCBpcyBp bnZhbGlkL25lZ2F0aXZlL291dC1vZi1yYW5nZVxuIik7CisJCQkJcHJpbnRfdXNhZ2UoKTsKKwkJ CQlyZXR1cm4gRVJBTkdFOworCQkJfQorCQkJZHBjZC0+b2Zmc2V0ID0gdGVtcDsKKwkJCWJyZWFr OworCQljYXNlICd2JzoKKwkJCXZmbGFnID0gJ3YnOworCQkJdGVtcCA9IHN0cnRvbChvcHRhcmcs ICZlbmRwdHIsIDE2KTsKKwkJCWlmIChzdHJ0b2xfZXJyX3V0aWwoZW5kcHRyLCAmdGVtcCkgfHwg dGVtcCA+IDB4ZmYpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIi0tdmFsdWUgYXJndW1lbnQgaXMg aW52YWxpZC9uZWdhdGl2ZS9vdXQtb2YtcmFuZ2VcbiIpOworCQkJCXByaW50X3VzYWdlKCk7CisJ CQkJcmV0dXJuIEVSQU5HRTsKKwkJCX0KKwkJCWRwY2QtPnZhbCA9IHRlbXA7CisJCQlicmVhazsK KwkJLyogQ29tbWFuZCBwYXJzaW5nICovCisJCWNhc2UgMToKKwkJCWlmIChzdHJjbXAob3B0YXJn LCAicmVhZCIpID09IDApIHsKKwkJCQl0ZW1wID0gUkVBRDsKKwkJCX0gZWxzZSBpZiAoc3RyY21w KG9wdGFyZywgIndyaXRlIikgPT0gMCkgeworCQkJCXRlbXAgPSBXUklURTsKKwkJCQlkcGNkLT5m aWxlX29wID0gT19XUk9OTFk7CisJCQl9IGVsc2UgeworCQkJCWZwcmludGYoc3RkZXJyLCAiVW5y ZWNvZ25pemVkIGNvbW1hbmRcbiIpOworCQkJCXByaW50X3VzYWdlKCk7CisJCQkJcmV0dXJuIEVY SVRfRkFJTFVSRTsKKwkJCX0KKwkJCWRwY2QtPmNtZCA9IHRlbXA7CisJCQlicmVhazsKKwkJY2Fz ZSAnOic6CisJCQlmcHJpbnRmKHN0ZGVyciwgIk9wdGlvbiAtJWMgcmVxdWlyZXMgYW4gYXJndW1l bnRcbiIsCisJCQkJIG9wdG9wdCk7CisJCQlwcmludF91c2FnZSgpOworCQkJcmV0dXJuIEVYSVRf RkFJTFVSRTsKKwkJY2FzZSAnPyc6CisJCWRlZmF1bHQ6CisJCQlmcHJpbnRmKHN0ZGVyciwgIkFy Z3VtZW50IG9mICAtJWMgaXMgaW52YWxpZFxuIiwgb3B0b3B0KTsKKwkJCXByaW50X3VzYWdlKCk7 CisJCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCQl9CisJfQorCisJaWYgKChkcGNkLT5jb3VudCAr IGRwY2QtPm9mZnNldCkgPiAoTUFYX0RQX09GRlNFVCArIDEpKSB7CisJCWZwcmludGYoc3RkZXJy LCAiT3V0IG9mIGJvdW5kcy4gQ291bnQgKyBPZmZzZXQgPD0gMHgxMDAwMDBcbiIpOworCQlyZXR1 cm4gRVJBTkdFOworCX0KKworCWlmICgoZHBjZC0+Y21kID09IFdSSVRFKSAmJiAodmZsYWcgIT0g J3YnKSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIldyaXRlIHZhbHVlIGlzIG1pc3NpbmdcbiIpOwor CQlwcmludF91c2FnZSgpOworCQlyZXR1cm4gRVhJVF9GQUlMVVJFOworCX0KKworCXJldHVybiBF WElUX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBpbnQgZHBjZF9yZWFkKGludCBmZCwgdWludDMyX3Qg b2Zmc2V0LCBzaXplX3QgY291bnQpCit7CisJaW50IHJldCA9IEVYSVRfU1VDQ0VTUywgcHJldCwg aTsKKwl1aW50OF90ICpidWYgPSBjYWxsb2MoY291bnQsIHNpemVvZih1aW50OF90KSk7CisKKwlp ZiAoIWJ1ZikgeworCQlmcHJpbnRmKHN0ZGVyciwgIkNhbid0IGFsbG9jYXRlIHJlYWQgYnVmZmVy XG4iKTsKKwkJcmV0dXJuIEVOT01FTTsKKwl9CisKKwlwcmV0ID0gcHJlYWQoZmQsIGJ1ZiwgY291 bnQsIG9mZnNldCk7CisJaWYgKHByZXQgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiRmFpbGVk IHRvIHJlYWQgLSAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0ID0gZXJybm87CisJCWdv dG8gb3V0OworCX0KKworCWlmIChwcmV0IDwgY291bnQpIHsKKwkJcHJpbnRmKCJSZWFkICV1IGJ5 dGUocyksIGV4cGVjdGVkICV6dSBieXRlcywgc3RhcnRpbmcgYXQiCisJCQkiIG9mZnNldCAleFxu XG4iLCBwcmV0LCBjb3VudCwgb2Zmc2V0KTsKKwl9CisKKwlwcmludGYoIjB4OiAiKTsKKwlmb3Ig KGkgPSAwOyBpIDwgcHJldDsgaSsrKQorCQlwcmludGYoIiAlMDJ4IiwgKihidWYgKyBpKSk7CisJ cHJpbnRmKCJcbiIpOworCitvdXQ6CisJZnJlZShidWYpOworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQgZHBjZF93cml0ZShpbnQgZmQsIHVpbnQzMl90IG9mZnNldCwgdWludDhfdCB2YWwp Cit7CisJaW50IHJldCA9IEVYSVRfU1VDQ0VTUywgcHJldDsKKworCXByZXQgPSBwd3JpdGUoZmQs IChjb25zdCB2b2lkICopJnZhbCwgc2l6ZW9mKHVpbnQ4X3QpLCBvZmZzZXQpOworCWlmIChwcmV0 IDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byB3cml0ZSAtICVzXG4iLCBzdHJl cnJvcihlcnJubykpOworCQlyZXQgPSBlcnJubzsKKwl9IGVsc2UgaWYgKCFwcmV0KSB7CisJCXBy aW50ZigiWmVybyBieXRlcyB3ZXJlIHdyaXR0ZW5cbiIpOworCX0KKworCXJldHVybiByZXQ7Cit9 CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwljaGFyIGRldl9uYW1lWzIw XTsKKwlpbnQgcmV0LCBmZDsKKworCXN0cnVjdCBkcGNkX2RhdGEgZHBjZCA9IHsKKwkJLmRldmlk ID0gMCwKKwkJLmZpbGVfb3AgPSBPX1JET05MWSwKKwkJLm9mZnNldCA9IDB4MCwKKwkJLmNtZCA9 IElOVkFMSUQsCisJCS5jb3VudCA9IDEsCisJfTsKKworCWlmKChyZXQgPSBwYXJzZV9vcHRzKCZk cGNkLCBhcmdjLCBhcmd2KSkgIT0gRVhJVF9TVUNDRVNTKQorCQlyZXR1cm4gcmV0OworCisJc25w cmludGYoZGV2X25hbWUsIHN0cmxlbihhdXhfZGV2KSArIDQsICIlcyVkIiwgYXV4X2RldiwgZHBj ZC5kZXZpZCk7CisKKwlmZCA9IG9wZW4oZGV2X25hbWUsIGRwY2QuZmlsZV9vcCk7CisJaWYgKGZk IDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBvcGVuICVzIGF1eCBkZXZpY2Ug LSBlcnJvcjogJXNcbiIsIGRldl9uYW1lLAorCQkJc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJu IGVycm5vOworCX0KKworCXN3aXRjaCAoZHBjZC5jbWQpIHsKKwljYXNlIFJFQUQ6CisJCXJldCA9 IGRwY2RfcmVhZChmZCwgZHBjZC5vZmZzZXQsIGRwY2QuY291bnQpOworCQlicmVhazsKKwljYXNl IFdSSVRFOgorCQlyZXQgPSBkcGNkX3dyaXRlKGZkLCBkcGNkLm9mZnNldCwgZHBjZC52YWwpOwor CQlicmVhazsKKwljYXNlIElOVkFMSUQ6CisJZGVmYXVsdDoKKwkJZnByaW50ZihzdGRlcnIsICJQ bGVhc2Ugc3BlY2lmeSBhIGNvbW1hbmQ6IHJlYWQvd3JpdGUuXG4iKTsKKwkJcHJpbnRfdXNhZ2Uo KTsKKwkJcmV0ID0gRVhJVF9GQUlMVVJFOworCQlicmVhazsKKwl9CisKKwljbG9zZShmZCk7CisK KwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbWVzb24uYnVpbGQgYi90b29scy9t ZXNvbi5idWlsZAppbmRleCBlNDUxN2Q2Ni4uNzlmMzZhYTkgMTAwNjQ0Ci0tLSBhL3Rvb2xzL21l c29uLmJ1aWxkCisrKyBiL3Rvb2xzL21lc29uLmJ1aWxkCkBAIC0zNiw2ICszNiw3IEBAIHRvb2xz X3Byb2dzID0gWwogCSdpbnRlbF93YXRlcm1hcmsnLAogCSdpbnRlbF9nZW1faW5mbycsCiAJJ2lu dGVsX2d2dGdfdGVzdCcsCisJJ2RwY2RfcmVnJywKIF0KIHRvb2xfZGVwcyA9IGlndF9kZXBzCiAK LS0gCjIuMTQuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0 cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cg==