From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id A6D2E6E321 for ; Mon, 30 Apr 2018 09:29:15 +0000 (UTC) From: Petri Latvala Date: Mon, 30 Apr 2018 12:28:48 +0300 Message-Id: <20180430092848.10830-5-petri.latvala@intel.com> In-Reply-To: <20180430092848.10830-1-petri.latvala@intel.com> References: <20180430092848.10830-1-petri.latvala@intel.com> Subject: [igt-dev] [PATCH i-g-t 4/4] runner: Unit tests for the runner List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 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: Tomi Sarvela , Martin Peres List-ID: VE9ETzogVW5pdCB0ZXN0cyBmb3IgdGhlIHJlc3VsdHMuanNvbiBmaWxlIGNvbnRlbnRzLgoKU2ln bmVkLW9mZi1ieTogUGV0cmkgTGF0dmFsYSA8cGV0cmkubGF0dmFsYUBpbnRlbC5jb20+CkNjOiBN YWFydGVuIExhbmtob3JzdCA8bWFhcnRlbi5sYW5raG9yc3RAbGludXguaW50ZWwuY29tPgpDYzog QXJrYWRpdXN6IEhpbGVyIDxhcmthZGl1c3ouaGlsZXJAaW50ZWwuY29tPgpDYzogVG9taSBTYXJ2 ZWxhIDx0b21pLnAuc2FydmVsYUBpbnRlbC5jb20+CkNjOiBNYXJ0aW4gUGVyZXMgPG1hcnRpbi5w ZXJlc0BsaW51eC5pbnRlbC5jb20+Ci0tLQogcnVubmVyL21lc29uLmJ1aWxkICAgICAgICAgICAg fCAgMTAgKwogcnVubmVyL3J1bm5lcl90ZXN0cy5jICAgICAgICAgfCA5NjcgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBydW5uZXIvdGVzdGRhdGEvbWVzb24uYnVp bGQgICB8ICAyMCArCiBydW5uZXIvdGVzdGRhdGEvbm8tc3VidGVzdHMuYyB8ICAgNiArCiBydW5u ZXIvdGVzdGRhdGEvc2tpcHBlcnMuYyAgICB8ICAxNCArCiBydW5uZXIvdGVzdGRhdGEvc3VjY2Vz c3Rlc3QuYyB8ICAxMCArCiA2IGZpbGVzIGNoYW5nZWQsIDEwMjcgaW5zZXJ0aW9ucygrKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHJ1bm5lci9ydW5uZXJfdGVzdHMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IHJ1bm5lci90ZXN0ZGF0YS9tZXNvbi5idWlsZAogY3JlYXRlIG1vZGUgMTAwNjQ0IHJ1bm5lci90 ZXN0ZGF0YS9uby1zdWJ0ZXN0cy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgcnVubmVyL3Rlc3RkYXRh L3NraXBwZXJzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBydW5uZXIvdGVzdGRhdGEvc3VjY2Vzc3Rl c3QuYwoKZGlmZiAtLWdpdCBhL3J1bm5lci9tZXNvbi5idWlsZCBiL3J1bm5lci9tZXNvbi5idWls ZAppbmRleCA3NzNiNGYzYy4uNGUwNGQ0OTkgMTAwNjQ0Ci0tLSBhL3J1bm5lci9tZXNvbi5idWls ZAorKysgYi9ydW5uZXIvbWVzb24uYnVpbGQKQEAgLTEsMyArMSw1IEBACitzdWJkaXIoJ3Rlc3Rk YXRhJykKKwoganNvbmMgPSBkZXBlbmRlbmN5KCdqc29uLWMnLCByZXF1aXJlZDogdHJ1ZSkKIAog cnVubmVybGliX3NvdXJjZXMgPSBbICdzZXR0aW5ncy5jJywKQEAgLTgsNiArMTAsNyBAQCBydW5u ZXJsaWJfc291cmNlcyA9IFsgJ3NldHRpbmdzLmMnLAogCiBydW5uZXJfc291cmNlcyA9IFsgJ3J1 bm5lci5jJywKIAkJIF0KK3J1bm5lcl90ZXN0X3NvdXJjZXMgPSBbICdydW5uZXJfdGVzdHMuYycg XQogCiBydW5uZXJsaWIgPSBzdGF0aWNfbGlicmFyeSgnaWd0X3J1bm5lcicsIHJ1bm5lcmxpYl9z b3VyY2VzLAogCQkJICAgaW5jbHVkZV9kaXJlY3RvcmllcyA6IGluYywKQEAgLTIyLDMgKzI1LDEw IEBAIHJ1bm5lciA9IGV4ZWN1dGFibGUoJ3J1bm5lcicsIHJ1bm5lcl9zb3VyY2VzLAogcmVzdWx0 cyA9IGV4ZWN1dGFibGUoJ3Jlc3VsdHMnLCAncmVzdWx0cy5jJywKIAkJICAgICBsaW5rX3dpdGgg OiBydW5uZXJsaWIsCiApCisKK3J1bm5lcl90ZXN0ID0gZXhlY3V0YWJsZSgncnVubmVyX3Rlc3Qn LCBydW5uZXJfdGVzdF9zb3VyY2VzLAorCQkJIGNfYXJncyA6ICctRFRFU1REQVRBX0RJUkVDVE9S WT0iQDBAIicuZm9ybWF0KHRlc3RkYXRhX2RpciksCisJCQkgbGlua193aXRoIDogcnVubmVybGli LAorCQkJIGluc3RhbGwgOiBmYWxzZSwKKwkJCSBkZXBlbmRlbmNpZXMgOiBpZ3RfZGVwcykKK3Rl c3QoJ3J1bm5lcicsIHJ1bm5lcl90ZXN0KQpkaWZmIC0tZ2l0IGEvcnVubmVyL3J1bm5lcl90ZXN0 cy5jIGIvcnVubmVyL3J1bm5lcl90ZXN0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwLi4wNzZmOTk5NQotLS0gL2Rldi9udWxsCisrKyBiL3J1bm5lci9ydW5uZXJfdGVzdHMu YwpAQCAtMCwwICsxLDk2NyBAQAorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGZjbnRs Lmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNs dWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgImlndC5oIgorCisjaW5jbHVkZSAic2V0dGluZ3Mu aCIKKyNpbmNsdWRlICJqb2JfbGlzdC5oIgorI2luY2x1ZGUgImV4ZWN1dG9yLmgiCisKK3N0YXRp YyBjaGFyIHRlc3RkYXRhZGlyW10gPSBURVNUREFUQV9ESVJFQ1RPUlk7CisKK3N0YXRpYyB2b2lk IGlndF9hc3NlcnRfZXFzdHIoY2hhciAqb25lLCBjaGFyICp0d28pCit7CisJaWYgKG9uZSA9PSBO VUxMICYmIHR3byA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZ3RfYXNzZXJ0X2Yob25lICE9IE5V TEwgJiYgdHdvICE9IE5VTEwsICJTdHJpbmdzIGRpZmZlciAob25lIGlzIE5VTEwpOiAlcyB2cyAl c1xuIiwgb25lLCB0d28pOworCisJaWd0X2Fzc2VydF9mKCFzdHJjbXAob25lLCB0d28pLCAiU3Ry aW5ncyBkaWZmZXI6ICclcycgdnMgJyVzJ1xuIiwgb25lLCB0d28pOworfQorCitzdGF0aWMgdm9p ZCBkZWJ1Z19wcmludF9leGVjdXRpb25zKHN0cnVjdCBqb2JfbGlzdCAqbGlzdCkKK3sKKwlzaXpl X3QgaTsKKwlpbnQgazsKKworCWlndF9kZWJ1ZygiRXhlY3V0aW9uczpcbiIpOworCWZvciAoaSA9 IDA7IGkgPCBsaXN0LT5zaXplOyBpKyspIHsKKwkJc3RydWN0IGpvYl9saXN0X2VudHJ5ICplbnRy eSA9ICZsaXN0LT5lbnRyaWVzW2ldOworCQlpZ3RfZGVidWcoIiAlc1xuIiwgZW50cnktPmJpbmFy eSk7CisJCWZvciAoayA9IDA7IGsgPCBlbnRyeS0+c3VidGVzdF9jb3VudDsgKytrKSB7CisJCQlp Z3RfZGVidWcoIiAgJXNcbiIsIGVudHJ5LT5zdWJ0ZXN0c1trXSk7CisJCX0KKwl9CisKK30KKwor c3RhdGljIGNoYXIgKmR1bXBfZmlsZShpbnQgZGlyZmQsIGNoYXIgKm5hbWUpCit7CisJaW50IGZk ID0gb3BlbmF0KGRpcmZkLCBuYW1lLCBPX1JET05MWSk7CisJc3NpemVfdCBzOworCWNoYXIgKmJ1 ZiA9IG1hbGxvYygyNTYpOworCisJaWYgKGZkIDwgMCkgeworCQlmcmVlKGJ1Zik7CisJCXJldHVy biBOVUxMOworCX0KKworCXMgPSByZWFkKGZkLCBidWYsIDI1NSk7CisJaWYgKHMgPCAwKSB7CisJ CWZyZWUoYnVmKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJYnVmW3NdID0gJ1wwJzsKKwlyZXR1 cm4gYnVmOworfQorCitzdGF0aWMgdm9pZCBqb2JfbGlzdF9maWx0ZXJfdGVzdChjaGFyICpuYW1l LCBjaGFyICpmaWx0ZXJhcmcxLCBjaGFyICpmaWx0ZXJhcmcyLAorCQkJCSBzaXplX3QgZXhwZWN0 ZWRfbm9ybWFsLCBzaXplX3QgZXhwZWN0ZWRfbXVsdGlwbGUpCit7CisJaW50IG11bHRpcGxlOwor CXN0cnVjdCBzZXR0aW5ncyBzZXR0aW5nczsKKworCWlndF9maXh0dXJlCisJCWluaXRfc2V0dGlu Z3MoJnNldHRpbmdzKTsKKworCWZvciAobXVsdGlwbGUgPSAwOyBtdWx0aXBsZSA8IDI7IG11bHRp cGxlKyspIHsKKwkJaWd0X3N1YnRlc3RfZigiam9iLWxpc3QtZmlsdGVycy0lcy0lcyIsIG5hbWUs IG11bHRpcGxlID8gIm11bHRpcGxlIiA6ICJub3JtYWwiKSB7CisJCQlzdHJ1Y3Qgam9iX2xpc3Qg bGlzdDsKKwkJCWNoYXIgKmFyZ3ZbXSA9IHsgInJ1bm5lciIsCisJCQkJCSAvKiBVZ2x5IGJ1dCBk b2VzIHRoZSB0cmljayAqLworCQkJCQkgbXVsdGlwbGUgPyAiLS1tdWx0aXBsZS1tb2RlIiA6ICIt LXN5bmMiLAorCQkJCQkgZmlsdGVyYXJnMSwgZmlsdGVyYXJnMiwKKwkJCQkJIHRlc3RkYXRhZGly LAorCQkJCQkgInBhdGgtdG8tcmVzdWx0cyIsCisJCQl9OworCQkJYm9vbCBzdWNjZXNzID0gZmFs c2U7CisJCQlzaXplX3Qgc2l6ZTsKKworCQkJaW5pdF9qb2JfbGlzdCgmbGlzdCk7CisJCQlpZ3Rf YXNzZXJ0KHBhcnNlX29wdGlvbnMoQVJSQVlfU0laRShhcmd2KSwgYXJndiwgJnNldHRpbmdzKSk7 CisKKwkJCXN1Y2Nlc3MgPSBjcmVhdGVfam9iX2xpc3QoJmxpc3QsICZzZXR0aW5ncyk7CisJCQlz aXplID0gbGlzdC5zaXplOworCisJCQlpZiAoc3VjY2VzcykKKwkJCQlkZWJ1Z19wcmludF9leGVj dXRpb25zKCZsaXN0KTsKKworCQkJZnJlZV9qb2JfbGlzdCgmbGlzdCk7CisKKwkJCWlndF9hc3Nl cnRfZihzdWNjZXNzLCAiSm9iIGxpc3QgY3JlYXRpb24gZmFpbGVkXG4iKTsKKwkJCWlndF9hc3Nl cnRfZXEoc2l6ZSwgbXVsdGlwbGUgPyBleHBlY3RlZF9tdWx0aXBsZSA6IGV4cGVjdGVkX25vcm1h bCk7CisJCX0KKwl9CisKKwlpZ3RfZml4dHVyZQorCQlmcmVlX3NldHRpbmdzKCZzZXR0aW5ncyk7 Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFyX2RpcmVjdG9yeShpbnQgZGlyZmQpCit7CisJRElSKiBk OworCXN0cnVjdCBkaXJlbnQgKmRpcmVudDsKKworCWQgPSBmZG9wZW5kaXIoZGlyZmQpOworCisJ aWYgKGRpcmZkIDwgMCB8fCBkID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKworCXdoaWxlICgo ZGlyZW50ID0gcmVhZGRpcihkKSkgIT0gTlVMTCkgeworCQlpZiAoc3RyY21wKGRpcmVudC0+ZF9u YW1lLCAiLiIpICYmCisJCSAgICBzdHJjbXAoZGlyZW50LT5kX25hbWUsICIuLiIpKSB7CisJCQlp ZiAoZGlyZW50LT5kX3R5cGUgPT0gRFRfUkVHKSB7CisJCQkJdW5saW5rYXQoZGlyZmQsIGRpcmVu dC0+ZF9uYW1lLCAwKTsKKwkJCX0gZWxzZSBpZiAoZGlyZW50LT5kX3R5cGUgPT0gRFRfRElSKSB7 CisJCQkJY2xlYXJfZGlyZWN0b3J5KG9wZW5hdChkaXJmZCwgZGlyZW50LT5kX25hbWUsIE9fRElS RUNUT1JZIHwgT19SRE9OTFkpKTsKKwkJCQl1bmxpbmthdChkaXJmZCwgZGlyZW50LT5kX25hbWUs IEFUX1JFTU9WRURJUik7CisJCQl9CisJCX0KKwl9CisKKwljbG9zZWRpcihkKTsKK30KKworc3Rh dGljIHZvaWQgYXNzZXJ0X3NldHRpbmdzX2VxdWFsKHN0cnVjdCBzZXR0aW5ncyAqb25lLCBzdHJ1 Y3Qgc2V0dGluZ3MgKnR3bykKK3sKKwkvKgorCSAqIFJlZ2V4IGxpc3RzIGFyZSBub3Qgc2VyaWFs aXplZCwgYW5kIHRodXMgd29uJ3QgYmUgY29tcGFyZWQKKwkgKiBoZXJlLgorCSAqLworCWlndF9h c3NlcnRfZXEob25lLT5hYm9ydF9vbl9lcnJvciwgdHdvLT5hYm9ydF9vbl9lcnJvcik7CisJaWd0 X2Fzc2VydF9lcXN0cihvbmUtPnRlc3RfbGlzdCwgdHdvLT50ZXN0X2xpc3QpOworCWlndF9hc3Nl cnRfZXFzdHIob25lLT5uYW1lLCB0d28tPm5hbWUpOworCWlndF9hc3NlcnRfZXEob25lLT5kcnlf cnVuLCB0d28tPmRyeV9ydW4pOworCWlndF9hc3NlcnRfZXEob25lLT5zeW5jLCB0d28tPnN5bmMp OworCWlndF9hc3NlcnRfZXEob25lLT5sb2dfbGV2ZWwsIHR3by0+bG9nX2xldmVsKTsKKwlpZ3Rf YXNzZXJ0X2VxKG9uZS0+b3ZlcndyaXRlLCB0d28tPm92ZXJ3cml0ZSk7CisJaWd0X2Fzc2VydF9l cShvbmUtPm11bHRpcGxlX21vZGUsIHR3by0+bXVsdGlwbGVfbW9kZSk7CisJaWd0X2Fzc2VydF9l cShvbmUtPmluYWN0aXZpdHlfdGltZW91dCwgdHdvLT5pbmFjdGl2aXR5X3RpbWVvdXQpOworCWln dF9hc3NlcnRfZXEob25lLT51c2Vfd2F0Y2hkb2csIHR3by0+dXNlX3dhdGNoZG9nKTsKKwlpZ3Rf YXNzZXJ0X2Vxc3RyKG9uZS0+dGVzdF9yb290LCB0d28tPnRlc3Rfcm9vdCk7CisJaWd0X2Fzc2Vy dF9lcXN0cihvbmUtPnJlc3VsdHNfcGF0aCwgdHdvLT5yZXN1bHRzX3BhdGgpOworfQorCitzdGF0 aWMgdm9pZCBhc3NlcnRfam9iX2xpc3RfZXF1YWwoc3RydWN0IGpvYl9saXN0ICpvbmUsIHN0cnVj dCBqb2JfbGlzdCAqdHdvKQoreworCXNpemVfdCBpLCBrOworCisJaWd0X2Fzc2VydF9lcShvbmUt PnNpemUsIHR3by0+c2l6ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgb25lLT5zaXplOyBpKyspIHsK KwkJc3RydWN0IGpvYl9saXN0X2VudHJ5ICplb25lID0gJm9uZS0+ZW50cmllc1tpXTsKKwkJc3Ry dWN0IGpvYl9saXN0X2VudHJ5ICpldHdvID0gJnR3by0+ZW50cmllc1tpXTsKKworCQlpZ3RfYXNz ZXJ0X2Vxc3RyKGVvbmUtPmJpbmFyeSwgZXR3by0+YmluYXJ5KTsKKwkJaWd0X2Fzc2VydF9lcShl b25lLT5zdWJ0ZXN0X2NvdW50LCBldHdvLT5zdWJ0ZXN0X2NvdW50KTsKKworCQlmb3IgKGsgPSAw OyBrIDwgZW9uZS0+c3VidGVzdF9jb3VudDsgaysrKSB7CisJCQlpZ3RfYXNzZXJ0X2Vxc3RyKGVv bmUtPnN1YnRlc3RzW2tdLCBldHdvLT5zdWJ0ZXN0c1trXSk7CisJCX0KKwl9Cit9CisKK3N0YXRp YyB2b2lkIGFzc2VydF9leGVjdXRpb25fY3JlYXRlZChpbnQgZGlyZmQsIGNoYXIgKm5hbWUpCit7 CisJaW50IGZkOworCisJaWd0X2Fzc2VydF9mKChmZCA9IG9wZW5hdChkaXJmZCwgbmFtZSwgT19S RE9OTFkpKSA+PSAwLAorCQkgICAgICJFeGVjdXRlIGRpZG4ndCBjcmVhdGUgJXNcbiIsIG5hbWUp OworCWNsb3NlKGZkKTsKK30KKworc3RhdGljIHZvaWQgYXNzZXJ0X2V4ZWN1dGlvbl9yZXN1bHRz X2V4aXN0KGludCBkaXJmZCkKK3sKKwlhc3NlcnRfZXhlY3V0aW9uX2NyZWF0ZWQoZGlyZmQsICJq b3VybmFsLnR4dCIpOworCWFzc2VydF9leGVjdXRpb25fY3JlYXRlZChkaXJmZCwgIm91dC50eHQi KTsKKwlhc3NlcnRfZXhlY3V0aW9uX2NyZWF0ZWQoZGlyZmQsICJlcnIudHh0Iik7CisJYXNzZXJ0 X2V4ZWN1dGlvbl9jcmVhdGVkKGRpcmZkLCAiZG1lc2cudHh0Iik7Cit9CisKK2lndF9tYWluCit7 CisJc3RydWN0IHNldHRpbmdzIHNldHRpbmdzOworCisJaWd0X2ZpeHR1cmUKKwkJaW5pdF9zZXR0 aW5ncygmc2V0dGluZ3MpOworCisJaWd0X3N1YnRlc3QoImRlZmF1bHQtc2V0dGluZ3MiKSB7CisJ CWNoYXIgKmFyZ3ZbXSA9IHsgInJ1bm5lciIsCisJCQkJICJ0ZXN0LXJvb3QtZGlyIiwKKwkJCQkg InBhdGgtdG8tcmVzdWx0cyIsCisJCX07CisKKwkJaWd0X2Fzc2VydChwYXJzZV9vcHRpb25zKEFS UkFZX1NJWkUoYXJndiksIGFyZ3YsICZzZXR0aW5ncykpOworCisJCWlndF9hc3NlcnQoIXNldHRp bmdzLmFib3J0X29uX2Vycm9yKTsKKwkJaWd0X2Fzc2VydCghc2V0dGluZ3MudGVzdF9saXN0KTsK KwkJaWd0X2Fzc2VydF9lcXN0cihzZXR0aW5ncy5uYW1lLCAicGF0aC10by1yZXN1bHRzIik7CisJ CWlndF9hc3NlcnQoIXNldHRpbmdzLmRyeV9ydW4pOworCQlpZ3RfYXNzZXJ0X2VxKHNldHRpbmdz LmluY2x1ZGVfcmVnZXhlcy5zaXplLCAwKTsKKwkJaWd0X2Fzc2VydF9lcShzZXR0aW5ncy5leGNs dWRlX3JlZ2V4ZXMuc2l6ZSwgMCk7CisJCWlndF9hc3NlcnQoIXNldHRpbmdzLnN5bmMpOworCQlp Z3RfYXNzZXJ0X2VxKHNldHRpbmdzLmxvZ19sZXZlbCwgTE9HX0xFVkVMX05PUk1BTCk7CisJCWln dF9hc3NlcnQoIXNldHRpbmdzLm92ZXJ3cml0ZSk7CisJCWlndF9hc3NlcnQoIXNldHRpbmdzLm11 bHRpcGxlX21vZGUpOworCQlpZ3RfYXNzZXJ0X2VxKHNldHRpbmdzLmluYWN0aXZpdHlfdGltZW91 dCwgMCk7CisJCWlndF9hc3NlcnQoIXNldHRpbmdzLnVzZV93YXRjaGRvZyk7CisJCWlndF9hc3Nl cnQoc3Ryc3RyKHNldHRpbmdzLnRlc3Rfcm9vdCwgInRlc3Qtcm9vdC1kaXIiKSAhPSBOVUxMKTsK KwkJaWd0X2Fzc2VydChzdHJzdHIoc2V0dGluZ3MucmVzdWx0c19wYXRoLCAicGF0aC10by1yZXN1 bHRzIikgIT0gTlVMTCk7CisJfQorCisJaWd0X3N1YnRlc3RfZ3JvdXAgeworCQljaGFyICpjd2Q7 CisJCWNoYXIgKnBhdGg7CisKKwkJaWd0X2ZpeHR1cmUgeworCQkJaWd0X3JlcXVpcmUoKGN3ZCA9 IHJlYWxwYXRoKCIuIiwgTlVMTCkpICE9IE5VTEwpOworCQkJcGF0aCA9IE5VTEw7CisJCX0KKwor CQlpZ3Rfc3VidGVzdCgiYWJzb2x1dGUtcGF0aC1jb252ZXJ0ZXIiKSB7CisJCQlzdHJ1Y3Qgewor CQkJCWNoYXIgKnBhdGg7CisJCQkJYm9vbCBudWxsOworCQkJfSBkYXRhW10gPSB7IHsgInNpbXBs ZS1uYW1lIiwgZmFsc2UgfSwKKwkJCQkgICAgIHsgImZvby9iYXIiLCB0cnVlIH0sCisJCQkJICAg ICB7ICIuIiwgZmFsc2UgfSwKKwkJCX07CisJCQlzaXplX3QgaTsKKworCQkJZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUoZGF0YSk7IGkrKykgeworCQkJCWZyZWUocGF0aCk7CisJCQkJcGF0aCA9 IGFic29sdXRlX3BhdGgoZGF0YVtpXS5wYXRoKTsKKwkJCQlpZiAoZGF0YVtpXS5udWxsKSB7CisJ CQkJCWlndF9hc3NlcnQocGF0aCA9PSBOVUxMKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCisJ CQkJaWd0X2Fzc2VydChwYXRoWzBdID09ICcvJyk7CisJCQkJaWd0X2RlYnVnKCJHb3QgcGF0aCAl cyBmb3IgJXNcbiIsIHBhdGgsIGRhdGFbaV0ucGF0aCk7CisJCQkJaWd0X2Fzc2VydChzdHJzdHIo cGF0aCwgY3dkKSA9PSBwYXRoKTsKKwkJCQlpZiAoc3RyY21wKGRhdGFbaV0ucGF0aCwgIi4iKSkg eworCQkJCQlpZ3RfYXNzZXJ0KHN0cnN0cihwYXRoLCBkYXRhW2ldLnBhdGgpICE9IE5VTEwpOwor CQkJCX0KKwkJCX0KKwkJfQorCisJCWlndF9maXh0dXJlIHsKKwkJCWZyZWUoY3dkKTsKKwkJCWZy ZWUocGF0aCk7CisJCX0KKwl9CisKKwlpZ3Rfc3VidGVzdF9ncm91cCB7CisJCWNoYXIgZGlybmFt ZVtdID0gInRtcGRpclhYWFhYWCI7CisJCWNoYXIgdG1wdGVzdGxpc3RbXSA9ICJ0bXAudGVzdGxp c3QiOworCQljaGFyIHBhdGh0b3Rlc3RsaXN0WzY0XTsKKwkJY2hhciAqcGF0aDsKKworCQlpZ3Rf Zml4dHVyZSB7CisJCQlpbnQgZGlyZmQsIGZkOworCisJCQlwYXRoID0gTlVMTDsKKworCQkJaWd0 X3JlcXVpcmUobWtkdGVtcChkaXJuYW1lKSAhPSBOVUxMKTsKKwkJCWlndF9yZXF1aXJlKChkaXJm ZCA9IG9wZW4oZGlybmFtZSwgT19ESVJFQ1RPUlkgfCBPX1JET05MWSkpID49IDApOworCQkJaWd0 X3JlcXVpcmUoKGZkID0gb3BlbmF0KGRpcmZkLCB0bXB0ZXN0bGlzdCwgT19DUkVBVCB8IE9fRVhD TCB8IE9fV1JPTkxZLCAwNjYwKSkgPj0gMCk7CisJCQljbG9zZShmZCk7CisJCQljbG9zZShkaXJm ZCk7CisKKwkJCXN0cmNweShwYXRodG90ZXN0bGlzdCwgZGlybmFtZSk7CisJCQlzdHJjYXQocGF0 aHRvdGVzdGxpc3QsICIvIik7CisJCQlzdHJjYXQocGF0aHRvdGVzdGxpc3QsIHRtcHRlc3RsaXN0 KTsKKwkJfQorCisJCWlndF9zdWJ0ZXN0KCJhYnNvbHV0ZS1wYXRoLXVzYWdlIikgeworCQkJY2hh ciAqYXJndltdID0geyAicnVubmVyIiwKKwkJCQkJICItLXRlc3QtbGlzdCIsIHBhdGh0b3Rlc3Rs aXN0LAorCQkJCQkgdGVzdGRhdGFkaXIsCisJCQkJCSBkaXJuYW1lLAorCQkJfTsKKworCQkJaWd0 X2Fzc2VydChwYXJzZV9vcHRpb25zKEFSUkFZX1NJWkUoYXJndiksIGFyZ3YsICZzZXR0aW5ncykp OworCisJCQlwYXRoID0gcmVhbHBhdGgodGVzdGRhdGFkaXIsIE5VTEwpOworCQkJaWd0X2Fzc2Vy dChwYXRoICE9IE5VTEwpOworCQkJaWd0X2Fzc2VydF9lcXN0cihzZXR0aW5ncy50ZXN0X3Jvb3Qs IHBhdGgpOworCQkJZnJlZShwYXRoKTsKKwkJCXBhdGggPSByZWFscGF0aChkaXJuYW1lLCBOVUxM KTsKKwkJCWlndF9hc3NlcnQocGF0aCAhPSBOVUxMKTsKKwkJCWlndF9hc3NlcnRfZXFzdHIoc2V0 dGluZ3MucmVzdWx0c19wYXRoLCBwYXRoKTsKKwkJCWZyZWUocGF0aCk7CisJCQlwYXRoID0gcmVh bHBhdGgocGF0aHRvdGVzdGxpc3QsIE5VTEwpOworCQkJaWd0X2Fzc2VydChwYXRoICE9IE5VTEwp OworCQkJaWd0X2Fzc2VydF9lcXN0cihzZXR0aW5ncy50ZXN0X2xpc3QsIHBhdGgpOworCQl9CisK KwkJaWd0X2ZpeHR1cmUgeworCQkJaW50IGRpcmZkOworCisJCQlpZ3RfcmVxdWlyZSgoZGlyZmQg PSBvcGVuKGRpcm5hbWUsIE9fRElSRUNUT1JZIHwgT19SRE9OTFkpKSA+PSAwKTsKKwkJCXVubGlu a2F0KGRpcmZkLCB0bXB0ZXN0bGlzdCwgMCk7CisJCQljbG9zZShkaXJmZCk7CisJCQlybWRpcihk aXJuYW1lKTsKKworCQkJZnJlZShwYXRoKTsKKwkJfQorCX0KKworCWlndF9zdWJ0ZXN0KCJlbnZp cm9ubWVudC1vdmVycmlkZXMtdGVzdC1yb290LWZsYWciKSB7CisJCWNoYXIgKmFyZ3ZbXSA9IHsg InJ1bm5lciIsCisJCQkJICJ0ZXN0LXJvb3QtZGlyIiwKKwkJCQkgInBhdGgtdG8tcmVzdWx0cyIs CisJCX07CisKKwkJc2V0ZW52KCJJR1RfVEVTVF9ST09UIiwgdGVzdGRhdGFkaXIsIDEpOworCQlp Z3RfYXNzZXJ0KHBhcnNlX29wdGlvbnMoQVJSQVlfU0laRShhcmd2KSwgYXJndiwgJnNldHRpbmdz KSk7CisKKwkJaWd0X2Fzc2VydCghc2V0dGluZ3MuYWJvcnRfb25fZXJyb3IpOworCQlpZ3RfYXNz ZXJ0KCFzZXR0aW5ncy50ZXN0X2xpc3QpOworCQlpZ3RfYXNzZXJ0X2Vxc3RyKHNldHRpbmdzLm5h bWUsICJwYXRoLXRvLXJlc3VsdHMiKTsKKwkJaWd0X2Fzc2VydCghc2V0dGluZ3MuZHJ5X3J1bik7 CisJCWlndF9hc3NlcnRfZXEoc2V0dGluZ3MuaW5jbHVkZV9yZWdleGVzLnNpemUsIDApOworCQlp Z3RfYXNzZXJ0X2VxKHNldHRpbmdzLmV4Y2x1ZGVfcmVnZXhlcy5zaXplLCAwKTsKKwkJaWd0X2Fz c2VydCghc2V0dGluZ3Muc3luYyk7CisJCWlndF9hc3NlcnRfZXEoc2V0dGluZ3MubG9nX2xldmVs LCBMT0dfTEVWRUxfTk9STUFMKTsKKwkJaWd0X2Fzc2VydCghc2V0dGluZ3Mub3ZlcndyaXRlKTsK KwkJaWd0X2Fzc2VydCghc2V0dGluZ3MubXVsdGlwbGVfbW9kZSk7CisJCWlndF9hc3NlcnRfZXEo c2V0dGluZ3MuaW5hY3Rpdml0eV90aW1lb3V0LCAwKTsKKwkJaWd0X2Fzc2VydCghc2V0dGluZ3Mu dXNlX3dhdGNoZG9nKTsKKwkJaWd0X2Fzc2VydChzdHJzdHIoc2V0dGluZ3MudGVzdF9yb290LCB0 ZXN0ZGF0YWRpcikgIT0gTlVMTCk7CisJCWlndF9hc3NlcnQoc3Ryc3RyKHNldHRpbmdzLnJlc3Vs dHNfcGF0aCwgInBhdGgtdG8tcmVzdWx0cyIpICE9IE5VTEwpOworCX0KKworCWlndF9maXh0dXJl IHsKKwkJdW5zZXRlbnYoIklHVF9URVNUX1JPT1QiKTsKKwl9CisKKwlpZ3Rfc3VidGVzdCgicGFy c2UtYWxsLXNldHRpbmdzIikgeworCQljaGFyICphcmd2W10gPSB7ICJydW5uZXIiLAorCQkJCSAi LW4iLCAiZm9vIiwKKwkJCQkgIi0tYWJvcnQtb24tbW9uaXRvcmVkLWVycm9yIiwKKwkJCQkgIi0t dGVzdC1saXN0IiwgInBhdGgtdG8tdGVzdC1saXN0IiwKKwkJCQkgIi0taWdub3JlLW1pc3Npbmci LAorCQkJCSAiLS1kcnktcnVuIiwKKwkJCQkgIi10IiwgInBhdHRlcm4xIiwKKwkJCQkgIi10Iiwg InBhdHRlcm4yIiwKKwkJCQkgIi14IiwgInhwYXR0ZXJuMSIsCisJCQkJICIteCIsICJ4cGF0dGVy bjIiLAorCQkJCSAiLXMiLAorCQkJCSAiLWwiLCAidmVyYm9zZSIsCisJCQkJICItLW92ZXJ3cml0 ZSIsCisJCQkJICItLW11bHRpcGxlLW1vZGUiLAorCQkJCSAiLS1pbmFjdGl2aXR5LXRpbWVvdXQi LCAiMjciLAorCQkJCSAiLS11c2Utd2F0Y2hkb2ciLAorCQkJCSAidGVzdC1yb290LWRpciIsCisJ CQkJICJwYXRoLXRvLXJlc3VsdHMiLAorCQl9OworCisJCWlndF9hc3NlcnQocGFyc2Vfb3B0aW9u cyhBUlJBWV9TSVpFKGFyZ3YpLCBhcmd2LCAmc2V0dGluZ3MpKTsKKworCQlpZ3RfYXNzZXJ0KHNl dHRpbmdzLmFib3J0X29uX2Vycm9yKTsKKwkJaWd0X2Fzc2VydChzdHJzdHIoc2V0dGluZ3MudGVz dF9saXN0LCAicGF0aC10by10ZXN0LWxpc3QiKSAhPSBOVUxMKTsKKwkJaWd0X2Fzc2VydF9lcXN0 cihzZXR0aW5ncy5uYW1lLCAiZm9vIik7CisJCWlndF9hc3NlcnQoc2V0dGluZ3MuZHJ5X3J1bik7 CisJCWlndF9hc3NlcnRfZXEoc2V0dGluZ3MuaW5jbHVkZV9yZWdleGVzLnNpemUsIDIpOworCQlp Z3RfYXNzZXJ0X2Vxc3RyKHNldHRpbmdzLmluY2x1ZGVfcmVnZXhlcy5yZWdleF9zdHJpbmdzWzBd LCAicGF0dGVybjEiKTsKKwkJaWd0X2Fzc2VydF9lcXN0cihzZXR0aW5ncy5pbmNsdWRlX3JlZ2V4 ZXMucmVnZXhfc3RyaW5nc1sxXSwgInBhdHRlcm4yIik7CisJCWlndF9hc3NlcnRfZXEoc2V0dGlu Z3MuZXhjbHVkZV9yZWdleGVzLnNpemUsIDIpOworCQlpZ3RfYXNzZXJ0X2Vxc3RyKHNldHRpbmdz LmV4Y2x1ZGVfcmVnZXhlcy5yZWdleF9zdHJpbmdzWzBdLCAieHBhdHRlcm4xIik7CisJCWlndF9h c3NlcnRfZXFzdHIoc2V0dGluZ3MuZXhjbHVkZV9yZWdleGVzLnJlZ2V4X3N0cmluZ3NbMV0sICJ4 cGF0dGVybjIiKTsKKwkJaWd0X2Fzc2VydChzZXR0aW5ncy5zeW5jKTsKKwkJaWd0X2Fzc2VydF9l cShzZXR0aW5ncy5sb2dfbGV2ZWwsIExPR19MRVZFTF9WRVJCT1NFKTsKKwkJaWd0X2Fzc2VydChz ZXR0aW5ncy5vdmVyd3JpdGUpOworCQlpZ3RfYXNzZXJ0KHNldHRpbmdzLm11bHRpcGxlX21vZGUp OworCQlpZ3RfYXNzZXJ0X2VxKHNldHRpbmdzLmluYWN0aXZpdHlfdGltZW91dCwgMjcpOworCQlp Z3RfYXNzZXJ0KHNldHRpbmdzLnVzZV93YXRjaGRvZyk7CisJCWlndF9hc3NlcnQoc3Ryc3RyKHNl dHRpbmdzLnRlc3Rfcm9vdCwgInRlc3Qtcm9vdC1kaXIiKSAhPSBOVUxMKTsKKwkJaWd0X2Fzc2Vy dChzdHJzdHIoc2V0dGluZ3MucmVzdWx0c19wYXRoLCAicGF0aC10by1yZXN1bHRzIikgIT0gTlVM TCk7CisJfQorCisJaWd0X3N1YnRlc3QoImludmFsaWQtb3B0aW9uIikgeworCQljaGFyICphcmd2 W10gPSB7ICJydW5uZXIiLAorCQkJCSAiLS1uby1zdWNoLW9wdGlvbiIsCisJCQkJICJ0ZXN0LXJv b3QtZGlyIiwKKwkJCQkgInJlc3VsdHMtcGF0aCIsCisJCX07CisKKwkJaWd0X2Fzc2VydCghcGFy c2Vfb3B0aW9ucyhBUlJBWV9TSVpFKGFyZ3YpLCBhcmd2LCAmc2V0dGluZ3MpKTsKKwl9CisKKwlp Z3Rfc3VidGVzdCgicGF0aHMtbWlzc2luZyIpIHsKKwkJY2hhciAqYXJndltdID0geyAicnVubmVy IiwKKwkJCQkgIi1vIiwKKwkJfTsKKwkJaWd0X2Fzc2VydCghcGFyc2Vfb3B0aW9ucyhBUlJBWV9T SVpFKGFyZ3YpLCBhcmd2LCAmc2V0dGluZ3MpKTsKKwl9CisKKwlpZ3Rfc3VidGVzdCgibG9nLWxl dmVscyIpIHsKKwkJY2hhciAqYXJndltdID0geyAicnVubmVyIiwKKwkJCQkgIi1sIiwgIm5vcm1h bCIsCisJCQkJICJ0ZXN0LXJvb3QtZGlyIiwKKwkJCQkgInJlc3VsdHMtcGF0aCIsCisJCX07CisK KwkJaWd0X2Fzc2VydChwYXJzZV9vcHRpb25zKEFSUkFZX1NJWkUoYXJndiksIGFyZ3YsICZzZXR0 aW5ncykpOworCQlpZ3RfYXNzZXJ0X2VxKHNldHRpbmdzLmxvZ19sZXZlbCwgTE9HX0xFVkVMX05P Uk1BTCk7CisKKwkJYXJndlsyXSA9ICJxdWlldCI7CisJCWlndF9hc3NlcnQocGFyc2Vfb3B0aW9u cyhBUlJBWV9TSVpFKGFyZ3YpLCBhcmd2LCAmc2V0dGluZ3MpKTsKKwkJaWd0X2Fzc2VydF9lcShz ZXR0aW5ncy5sb2dfbGV2ZWwsIExPR19MRVZFTF9RVUlFVCk7CisKKwkJYXJndlsyXSA9ICJ2ZXJi b3NlIjsKKwkJaWd0X2Fzc2VydChwYXJzZV9vcHRpb25zKEFSUkFZX1NJWkUoYXJndiksIGFyZ3Ys ICZzZXR0aW5ncykpOworCQlpZ3RfYXNzZXJ0X2VxKHNldHRpbmdzLmxvZ19sZXZlbCwgTE9HX0xF VkVMX1ZFUkJPU0UpOworCX0KKworCWlndF9zdWJ0ZXN0KCJwYXJzZS1jbGVhcnMtb2xkLWRhdGEi KSB7CisJCWNoYXIgKmFyZ3ZbXSA9IHsgInJ1bm5lciIsCisJCQkJICItbiIsICJmb28iLAorCQkJ CSAiLS1kcnktcnVuIiwKKwkJCQkgInRlc3Qtcm9vdC1kaXIiLAorCQkJCSAicmVzdWx0cy1wYXRo IiwKKwkJfTsKKworCQlpZ3RfYXNzZXJ0KHBhcnNlX29wdGlvbnMoQVJSQVlfU0laRShhcmd2KSwg YXJndiwgJnNldHRpbmdzKSk7CisKKwkJaWd0X2Fzc2VydF9lcXN0cihzZXR0aW5ncy5uYW1lLCAi Zm9vIik7CisJCWlndF9hc3NlcnQoc2V0dGluZ3MuZHJ5X3J1bik7CisJCWlndF9hc3NlcnQoIXNl dHRpbmdzLnRlc3RfbGlzdCk7CisJCWlndF9hc3NlcnQoIXNldHRpbmdzLnN5bmMpOworCisJCWFy Z3ZbMV0gPSAiLS10ZXN0LWxpc3QiOworCQlhcmd2WzNdID0gIi0tc3luYyI7CisKKwkJaWd0X2Fz c2VydChwYXJzZV9vcHRpb25zKEFSUkFZX1NJWkUoYXJndiksIGFyZ3YsICZzZXR0aW5ncykpOwor CisJCWlndF9hc3NlcnRfZXFzdHIoc2V0dGluZ3MubmFtZSwgInJlc3VsdHMtcGF0aCIpOworCQlp Z3RfYXNzZXJ0KCFzZXR0aW5ncy5kcnlfcnVuKTsKKwkJaWd0X2Fzc2VydChzdHJzdHIoc2V0dGlu Z3MudGVzdF9saXN0LCAiZm9vIikgIT0gTlVMTCk7CisJCWlndF9hc3NlcnQoc2V0dGluZ3Muc3lu Yyk7CisJfQorCisJaWd0X3N1YnRlc3RfZ3JvdXAgeworCQljaGFyIGZpbGVuYW1lW10gPSAidG1w bGlzdFhYWFhYWCI7CisJCWludCBmZCA9IC0xOworCisJCWlndF9maXh0dXJlIHsKKwkJCWlndF9y ZXF1aXJlKChmZCA9IG1rc3RlbXAoZmlsZW5hbWUpKSA+PSAwKTsKKwkJCWNsb3NlKGZkKTsKKwkJ fQorCisJCWlndF9zdWJ0ZXN0KCJ2YWxpZGF0ZS1vayIpIHsKKwkJCWNoYXIgKmFyZ3ZbXSA9IHsg InJ1bm5lciIsCisJCQkJCSAiLS10ZXN0LWxpc3QiLCBmaWxlbmFtZSwKKwkJCQkJIHRlc3RkYXRh ZGlyLAorCQkJCQkgInBhdGgtdG8tcmVzdWx0cyIsCisJCQl9OworCisJCQlpZ3RfYXNzZXJ0KHBh cnNlX29wdGlvbnMoQVJSQVlfU0laRShhcmd2KSwgYXJndiwgJnNldHRpbmdzKSk7CisKKwkJCWln dF9hc3NlcnQodmFsaWRhdGVfc2V0dGluZ3MoJnNldHRpbmdzKSk7CisJCX0KKworCQlpZ3RfZml4 dHVyZSB7CisJCQl1bmxpbmsoZmlsZW5hbWUpOworCQl9CisJfQorCisJaWd0X3N1YnRlc3QoInZh bGlkYXRlLW5vLXRlc3QtbGlzdCIpIHsKKwkJY2hhciAqbm9zdWNoZmlsZSA9ICJuby1zdWNoLWZp bGUiOworCQljaGFyICphcmd2W10gPSB7ICJydW5uZXIiLAorCQkJCSAiLS10ZXN0LWxpc3QiLCBu b3N1Y2hmaWxlLAorCQkJCSB0ZXN0ZGF0YWRpciwKKwkJCQkgInBhdGgtdG8tcmVzdWx0cyIsCisJ CX07CisKKwkJaWd0X2Fzc2VydF9sdChvcGVuKG5vc3VjaGZpbGUsIE9fUkRPTkxZKSwgMCk7CisJ CWlndF9hc3NlcnQocGFyc2Vfb3B0aW9ucyhBUlJBWV9TSVpFKGFyZ3YpLCBhcmd2LCAmc2V0dGlu Z3MpKTsKKworCQlpZ3RfYXNzZXJ0KCF2YWxpZGF0ZV9zZXR0aW5ncygmc2V0dGluZ3MpKTsKKwl9 CisKKwlpZ3Rfc3VidGVzdF9ncm91cCB7CisJCWNoYXIgZGlybmFtZVtdID0gInRtcGRpclhYWFhY WCI7CisJCXN0cnVjdCBqb2JfbGlzdCBsaXN0OworCisJCWlndF9maXh0dXJlIHsKKwkJCWlndF9y ZXF1aXJlKG1rZHRlbXAoZGlybmFtZSkgIT0gTlVMTCk7CisJCQlpbml0X2pvYl9saXN0KCZsaXN0 KTsKKwkJfQorCisJCWlndF9zdWJ0ZXN0KCJqb2ItbGlzdC1uby10ZXN0LWxpc3QtdHh0Iikgewor CQkJY2hhciAqYXJndltdID0geyAicnVubmVyIiwKKwkJCQkJIGRpcm5hbWUsCisJCQkJCSAicGF0 aC10by1yZXN1bHRzIiwKKwkJCX07CisKKwkJCWlndF9hc3NlcnQocGFyc2Vfb3B0aW9ucyhBUlJB WV9TSVpFKGFyZ3YpLCBhcmd2LCAmc2V0dGluZ3MpKTsKKworCQkJaWd0X2Fzc2VydCghY3JlYXRl X2pvYl9saXN0KCZsaXN0LCAmc2V0dGluZ3MpKTsKKwkJfQorCisJCWlndF9maXh0dXJlIHsKKwkJ CXJtZGlyKGRpcm5hbWUpOworCQkJZnJlZV9qb2JfbGlzdCgmbGlzdCk7CisJCX0KKwl9CisKKwlq b2JfbGlzdF9maWx0ZXJfdGVzdCgibm9maWx0ZXJzIiwgIi1uIiwgInBsYWNlaG9sZGVyYXJncyIs IDUsIDMpOworCWpvYl9saXN0X2ZpbHRlcl90ZXN0KCJiaW5hcnktaW5jbHVkZSIsICItdCIsICJz dWNjZXNzdGVzdCIsIDIsIDEpOworCWpvYl9saXN0X2ZpbHRlcl90ZXN0KCJiaW5hcnktZXhjbHVk ZSIsICIteCIsICJzdWNjZXNzdGVzdCIsIDMsIDIpOworCWpvYl9saXN0X2ZpbHRlcl90ZXN0KCJz dWJ0ZXN0LWluY2x1ZGUiLCAiLXQiLCAiZmlyc3Qtc3VidGVzdCIsIDEsIDEpOworCWpvYl9saXN0 X2ZpbHRlcl90ZXN0KCJzdWJ0ZXN0LWV4Y2x1ZGUiLCAiLXgiLCAic2Vjb25kLXN1YnRlc3QiLCA0 LCAzKTsKKworCWlndF9zdWJ0ZXN0X2dyb3VwIHsKKwkJY2hhciBmaWxlbmFtZVtdID0gInRtcGxp c3RYWFhYWFgiOworCQljaGFyIHRlc3RsaXN0dGV4dFtdID0gImlndEBzdWNjZXNzdGVzdEBmaXJz dC1zdWJ0ZXN0XG4iCisJCQkiaWd0QHN1Y2Nlc3N0ZXN0QHNlY29uZC1zdWJ0ZXN0XG4iCisJCQki aWd0QG5vc3VidGVzdHNcbiI7CisJCWludCBmZCA9IC0xLCBtdWx0aXBsZTsKKwkJc3RydWN0IGpv Yl9saXN0IGxpc3Q7CisKKwkJaWd0X2ZpeHR1cmUgeworCQkJaWd0X3JlcXVpcmUoKGZkID0gbWtz dGVtcChmaWxlbmFtZSkpID49IDApOworCQkJaWd0X3JlcXVpcmUod3JpdGUoZmQsIHRlc3RsaXN0 dGV4dCwgc2l6ZW9mKHRlc3RsaXN0dGV4dCkpID09IHNpemVvZih0ZXN0bGlzdHRleHQpKTsKKwkJ CWNsb3NlKGZkKTsKKwkJCWluaXRfam9iX2xpc3QoJmxpc3QpOworCQl9CisKKwkJZm9yIChtdWx0 aXBsZSA9IDA7IG11bHRpcGxlIDwgMjsgbXVsdGlwbGUrKykgeworCQkJaWd0X3N1YnRlc3RfZigi am9iLWxpc3QtdGVzdGxpc3QtJXMiLCBtdWx0aXBsZSA/ICJtdWx0aXBsZSIgOiAibm9ybWFsIikg eworCQkJCWNoYXIgKmFyZ3ZbXSA9IHsgInJ1bm5lciIsCisJCQkJCQkgIi0tdGVzdC1saXN0Iiwg ZmlsZW5hbWUsCisJCQkJCQkgbXVsdGlwbGUgPyAiLS1tdWx0aXBsZS1tb2RlIiA6ICItLXN5bmMi LAorCQkJCQkJIHRlc3RkYXRhZGlyLAorCQkJCQkJICJwYXRoLXRvLXJlc3VsdHMiLAorCQkJCX07 CisKKwkJCQlpZ3RfYXNzZXJ0KHBhcnNlX29wdGlvbnMoQVJSQVlfU0laRShhcmd2KSwgYXJndiwg JnNldHRpbmdzKSk7CisJCQkJaWd0X2Fzc2VydChjcmVhdGVfam9iX2xpc3QoJmxpc3QsICZzZXR0 aW5ncykpOworCisJCQkJaWd0X2Fzc2VydF9lcShsaXN0LnNpemUsIG11bHRpcGxlID8gMiA6IDMp OworCisJCQkJaWd0X2Fzc2VydF9lcXN0cihsaXN0LmVudHJpZXNbMF0uYmluYXJ5LCAic3VjY2Vz c3Rlc3QiKTsKKwkJCQlpZiAoIW11bHRpcGxlKSBpZ3RfYXNzZXJ0X2Vxc3RyKGxpc3QuZW50cmll c1sxXS5iaW5hcnksICJzdWNjZXNzdGVzdCIpOworCQkJCWlndF9hc3NlcnRfZXFzdHIobGlzdC5l bnRyaWVzW211bHRpcGxlID8gMSA6IDJdLmJpbmFyeSwgIm5vc3VidGVzdHMiKTsKKworCQkJCWln dF9hc3NlcnRfZXEobGlzdC5lbnRyaWVzWzBdLnN1YnRlc3RfY291bnQsIG11bHRpcGxlID8gMiA6 IDEpOworCQkJCWlndF9hc3NlcnRfZXEobGlzdC5lbnRyaWVzWzFdLnN1YnRlc3RfY291bnQsIG11 bHRpcGxlID8gMCA6IDEpOworCQkJCWlmICghbXVsdGlwbGUpIGlndF9hc3NlcnRfZXEobGlzdC5l bnRyaWVzWzJdLnN1YnRlc3RfY291bnQsIDApOworCisJCQkJaWd0X2Fzc2VydF9lcXN0cihsaXN0 LmVudHJpZXNbMF0uc3VidGVzdHNbMF0sICJmaXJzdC1zdWJ0ZXN0Iik7CisJCQkJaWd0X2Fzc2Vy dF9lcXN0cihsaXN0LmVudHJpZXNbbXVsdGlwbGUgPyAwIDogMV0uc3VidGVzdHNbbXVsdGlwbGUg PyAxIDogMF0sICJzZWNvbmQtc3VidGVzdCIpOworCQkJfQorCQl9CisKKwkJaWd0X2ZpeHR1cmUg eworCQkJdW5saW5rKGZpbGVuYW1lKTsKKwkJCWZyZWVfam9iX2xpc3QoJmxpc3QpOworCQl9CisJ fQorCisJaWd0X3N1YnRlc3RfZ3JvdXAgeworCQljaGFyIGRpcm5hbWVbXSA9ICJ0bXBkaXJYWFhY WFgiOworCQlpbnQgZGlyZmQgPSAtMSwgZmQgPSAtMTsKKwkJc3RydWN0IHNldHRpbmdzIGNtcF9z ZXR0aW5nczsKKworCQlpZ3RfZml4dHVyZSB7CisJCQlpZ3RfcmVxdWlyZShta2R0ZW1wKGRpcm5h bWUpICE9IE5VTEwpOworCQkJcm1kaXIoZGlybmFtZSk7CisJCQlpbml0X3NldHRpbmdzKCZjbXBf c2V0dGluZ3MpOworCQl9CisKKwkJaWd0X3N1YnRlc3QoInNldHRpbmdzLXNlcmlhbGl6ZSIpIHsK KwkJCWNoYXIgKmFyZ3ZbXSA9IHsgInJ1bm5lciIsCisJCQkJCSB0ZXN0ZGF0YWRpciwKKwkJCQkJ IGRpcm5hbWUsCisJCQl9OworCisJCQlpZ3RfYXNzZXJ0KHBhcnNlX29wdGlvbnMoQVJSQVlfU0la RShhcmd2KSwgYXJndiwgJnNldHRpbmdzKSk7CisKKwkJCWlndF9hc3NlcnQoc2VyaWFsaXplX3Nl dHRpbmdzKCZzZXR0aW5ncykpOworCisJCQlkaXJmZCA9IG9wZW4oZGlybmFtZSwgT19ESVJFQ1RP UlksIE9fUkRPTkxZKTsKKwkJCWlndF9hc3NlcnRfZihkaXJmZCA+PSAwLCAiU2VyaWFsaXphdGlv biBkaWQgbm90IGNyZWF0ZSB0aGUgcmVzdWx0cyBkaXJlY3RvcnlcbiIpOworCisJCQlpZ3RfYXNz ZXJ0X2YoKGZkID0gb3BlbmF0KGRpcmZkLCAibWV0YWRhdGEudHh0IiwgT19SRE9OTFkpKSwKKwkJ CQkgICAgICJPcGVuaW5nICVzL21ldGFkYXRhLnR4dCBmYWlsZWRcbiIsIGRpcm5hbWUpOworCQkJ Y2xvc2UoZmQpOworCisJCQlpZ3RfYXNzZXJ0X2YocmVhZF9zZXR0aW5ncygmY21wX3NldHRpbmdz LCBkaXJmZCksICJSZWFkaW5nIHNldHRpbmdzIGZhaWxlZFxuIik7CisJCQlhc3NlcnRfc2V0dGlu Z3NfZXF1YWwoJnNldHRpbmdzLCAmY21wX3NldHRpbmdzKTsKKwkJfQorCisJCWlndF9maXh0dXJl IHsKKwkJCWlmIChmZCA+PSAwKSBjbG9zZShmZCk7CisJCQlpZiAoZGlyZmQgPj0gMCkKKwkJCQlj bGVhcl9kaXJlY3RvcnkoZGlyZmQpOworCQkJcm1kaXIoZGlybmFtZSk7CisJCQlmcmVlX3NldHRp bmdzKCZjbXBfc2V0dGluZ3MpOworCQl9CisJfQorCisJaWd0X3N1YnRlc3RfZ3JvdXAgeworCQlj aGFyIGRpcm5hbWVbXSA9ICJ0bXBkaXJYWFhYWFgiOworCQlpbnQgZGlyZmQgPSAtMSwgZmQgPSAt MTsKKwkJc3RydWN0IGpvYl9saXN0IGxpc3QsIGNtcF9saXN0OworCQlpbnQgbXVsdGlwbGU7CisK KwkJaWd0X2ZpeHR1cmUgeworCQkJaW5pdF9qb2JfbGlzdCgmbGlzdCk7CisJCQlpbml0X2pvYl9s aXN0KCZjbXBfbGlzdCk7CisJCQlpZ3RfcmVxdWlyZShta2R0ZW1wKGRpcm5hbWUpICE9IE5VTEwp OworCQkJcm1kaXIoZGlybmFtZSk7CisJCX0KKworCQlmb3IgKG11bHRpcGxlID0gMDsgbXVsdGlw bGUgPCAyOyBtdWx0aXBsZSsrKSB7CisJCQlpZ3Rfc3VidGVzdF9mKCJqb2ItbGlzdC1zZXJpYWxp emUtJXMiLCBtdWx0aXBsZSA/ICJtdWx0aXBsZSIgOiAibm9ybWFsIikgeworCQkJCWNoYXIgKmFy Z3ZbXSA9IHsgInJ1bm5lciIsCisJCQkJCQkgLyogVWdseSAqLworCQkJCQkJIG11bHRpcGxlID8g Ii0tbXVsdGlwbGUtbW9kZSIgOiAiLS1zeW5jIiwKKwkJCQkJCSB0ZXN0ZGF0YWRpciwKKwkJCQkJ CSBkaXJuYW1lLAorCQkJCX07CisKKwkJCQlpZ3RfYXNzZXJ0KHBhcnNlX29wdGlvbnMoQVJSQVlf U0laRShhcmd2KSwgYXJndiwgJnNldHRpbmdzKSk7CisJCQkJaWd0X2Fzc2VydChjcmVhdGVfam9i X2xpc3QoJmxpc3QsICZzZXR0aW5ncykpOworCisJCQkJaWd0X2Fzc2VydChzZXJpYWxpemVfc2V0 dGluZ3MoJnNldHRpbmdzKSk7CisJCQkJaWd0X2Fzc2VydChzZXJpYWxpemVfam9iX2xpc3QoJmxp c3QsICZzZXR0aW5ncykpOworCisJCQkJZGlyZmQgPSBvcGVuKGRpcm5hbWUsIE9fRElSRUNUT1JZ LCBPX1JET05MWSk7CisJCQkJaWd0X2Fzc2VydF9mKGRpcmZkID49IDAsICJTZXJpYWxpemF0aW9u IGRpZCBub3QgY3JlYXRlIHRoZSByZXN1bHRzIGRpcmVjdG9yeVxuIik7CisKKwkJCQlpZ3RfYXNz ZXJ0X2YoKGZkID0gb3BlbmF0KGRpcmZkLCAiam9ibGlzdC50eHQiLCBPX1JET05MWSkpID49IDAs CisJCQkJCSAgICAgIk9wZW5pbmcgJXMvam9ibGlzdC50eHQgZmFpbGVkXG4iLCBkaXJuYW1lKTsK KwkJCQljbG9zZShmZCk7CisJCQkJZmQgPSAtMTsKKworCQkJCWlndF9hc3NlcnRfZihyZWFkX2pv Yl9saXN0KCZjbXBfbGlzdCwgZGlyZmQpLCAiUmVhZGluZyBqb2IgbGlzdCBmYWlsZWRcbiIpOwor CQkJCWFzc2VydF9qb2JfbGlzdF9lcXVhbCgmbGlzdCwgJmNtcF9saXN0KTsKKwkJCX0KKworCQkJ aWd0X2ZpeHR1cmUgeworCQkJCWlmIChmZCA+PSAwKSBjbG9zZShmZCk7CisJCQkJaWYgKGRpcmZk ID49IDApCisJCQkJCWNsZWFyX2RpcmVjdG9yeShkaXJmZCk7CisJCQkJcm1kaXIoZGlybmFtZSk7 CisJCQkJZnJlZV9qb2JfbGlzdCgmY21wX2xpc3QpOworCQkJCWZyZWVfam9iX2xpc3QoJmxpc3Qp OworCQkJfQorCQl9CisJfQorCisJaWd0X3N1YnRlc3RfZ3JvdXAgeworCQljaGFyIGRpcm5hbWVb XSA9ICJ0bXBkaXJYWFhYWFgiOworCQlzdHJ1Y3Qgam9iX2xpc3QgbGlzdDsKKwkJaW50IGRpcmZk ID0gLTEsIGZkID0gLTE7CisKKwkJaWd0X2ZpeHR1cmUgeworCQkJaW5pdF9qb2JfbGlzdCgmbGlz dCk7CisJCQlpZ3RfcmVxdWlyZShta2R0ZW1wKGRpcm5hbWUpICE9IE5VTEwpOworCQkJcm1kaXIo ZGlybmFtZSk7CisJCX0KKworCQlpZ3Rfc3VidGVzdCgiZXhlY3V0ZS1pbml0aWFsaXplLW5ldy1y dW4iKSB7CisJCQlzdHJ1Y3QgZXhlY3V0ZV9zdGF0ZSBzdGF0ZTsKKwkJCWNoYXIgKmFyZ3ZbXSA9 IHsgInJ1bm5lciIsCisJCQkJCSB0ZXN0ZGF0YWRpciwKKwkJCQkJIGRpcm5hbWUsCisJCQl9Owor CisJCQlpZ3RfYXNzZXJ0KHBhcnNlX29wdGlvbnMoQVJSQVlfU0laRShhcmd2KSwgYXJndiwgJnNl dHRpbmdzKSk7CisJCQlpZ3RfYXNzZXJ0KGNyZWF0ZV9qb2JfbGlzdCgmbGlzdCwgJnNldHRpbmdz KSk7CisKKwkJCWlndF9hc3NlcnQoaW5pdGlhbGl6ZV9leGVjdXRlX3N0YXRlKCZzdGF0ZSwgJnNl dHRpbmdzLCAmbGlzdCkpOworCisJCQlpZ3RfYXNzZXJ0X2VxKHN0YXRlLm5leHQsIDApOworCQkJ aWd0X2Fzc2VydF9lcShsaXN0LnNpemUsIDUpOworCQkJaWd0X2Fzc2VydF9mKChkaXJmZCA9IG9w ZW4oZGlybmFtZSwgT19ESVJFQ1RPUlkgfCBPX1JET05MWSkpID49IDAsCisJCQkJICAgICAiRXhl Y3V0ZSBzdGF0ZSBpbml0aWFsaXphdGlvbiBkaWRuJ3QgY3JlYXRlIHRoZSByZXN1bHRzIGRpcmVj dG9yeS5cbiIpOworCQkJaWd0X2Fzc2VydF9mKChmZCA9IG9wZW5hdChkaXJmZCwgIm1ldGFkYXRh LnR4dCIsIE9fUkRPTkxZKSkgPj0gMCwKKwkJCQkgICAgICJFeGVjdXRlIHN0YXRlIGluaXRpYWxp emF0aW9uIGRpZG4ndCBzZXJpYWxpemUgc2V0dGluZ3MuXG4iKTsKKwkJCWNsb3NlKGZkKTsKKwkJ CWlndF9hc3NlcnRfZigoZmQgPSBvcGVuYXQoZGlyZmQsICJqb2JsaXN0LnR4dCIsIE9fUkRPTkxZ KSkgPj0gMCwKKwkJCQkgICAgICJFeGVjdXRlIHN0YXRlIGluaXRpYWxpemF0aW9uIGRpZG4ndCBz ZXJpYWxpemUgdGhlIGpvYiBsaXN0LlxuIik7CisJCQljbG9zZShmZCk7CisJCQlpZ3RfYXNzZXJ0 X2YoKGZkID0gb3BlbmF0KGRpcmZkLCAiam91cm5hbC50eHQiLCBPX1JET05MWSkpIDwgMCwKKwkJ CQkgICAgICJFeGVjdXRlIHN0YXRlIGluaXRpYWxpemF0aW9uIGNyZWF0ZWQgYSBqb3VybmFsLlxu Iik7CisJCQlpZ3RfYXNzZXJ0X2YoKGZkID0gb3BlbmF0KGRpcmZkLCAidW5hbWUudHh0IiwgT19S RE9OTFkpKSA8IDAsCisJCQkJICAgICAiRXhlY3V0ZSBzdGF0ZSBpbml0aWFsaXphdGlvbiBjcmVh dGVkIHVuYW1lLnR4dC5cbiIpOworCQl9CisKKwkJaWd0X2ZpeHR1cmUgeworCQkJaWYgKGZkID49 IDApIGNsb3NlKGZkKTsKKwkJCWlmIChkaXJmZCA+PSAwKQorCQkJCWNsZWFyX2RpcmVjdG9yeShk aXJmZCk7CisJCQlybWRpcihkaXJuYW1lKTsKKwkJCWZyZWVfam9iX2xpc3QoJmxpc3QpOworCQl9 CisJfQorCisJaWd0X3N1YnRlc3RfZ3JvdXAgeworCQljaGFyIGRpcm5hbWVbXSA9ICJ0bXBkaXJY WFhYWFgiOworCQlzdHJ1Y3Qgam9iX2xpc3QgbGlzdDsKKwkJaW50IGRpcmZkID0gLTEsIHN1YmRp cmZkID0gLTEsIGZkID0gLTE7CisKKwkJaWd0X2ZpeHR1cmUgeworCQkJaW5pdF9qb2JfbGlzdCgm bGlzdCk7CisJCQlpZ3RfcmVxdWlyZShta2R0ZW1wKGRpcm5hbWUpICE9IE5VTEwpOworCQl9CisK KwkJaWd0X3N1YnRlc3QoImV4ZWN1dGUtaW5pdGlhbGl6ZS1zdWJ0ZXN0LXN0YXJ0ZWQiKSB7CisJ CQlzdHJ1Y3QgZXhlY3V0ZV9zdGF0ZSBzdGF0ZTsKKwkJCWNoYXIgKmFyZ3ZbXSA9IHsgInJ1bm5l ciIsCisJCQkJCSAiLS1tdWx0aXBsZS1tb2RlIiwKKwkJCQkJICItdCIsICJzdWNjZXNzdGVzdCIs CisJCQkJCSB0ZXN0ZGF0YWRpciwKKwkJCQkJIGRpcm5hbWUsCisJCQl9OworCQkJY2hhciBqb3Vy bmFsdGV4dFtdID0gImZpcnN0LXN1YnRlc3RcbiI7CisJCQljaGFyIGV4Y2x1ZGVzdHJpbmdbXSA9 ICIhZmlyc3Qtc3VidGVzdCI7CisKKwkJCWlndF9hc3NlcnQocGFyc2Vfb3B0aW9ucyhBUlJBWV9T SVpFKGFyZ3YpLCBhcmd2LCAmc2V0dGluZ3MpKTsKKwkJCWlndF9hc3NlcnQoY3JlYXRlX2pvYl9s aXN0KCZsaXN0LCAmc2V0dGluZ3MpKTsKKwkJCWlndF9hc3NlcnQobGlzdC5zaXplID09IDEpOwor CQkJaWd0X2Fzc2VydChsaXN0LmVudHJpZXNbMF0uc3VidGVzdF9jb3VudCA9PSAwKTsKKworCQkJ aWd0X2Fzc2VydChzZXJpYWxpemVfc2V0dGluZ3MoJnNldHRpbmdzKSk7CisJCQlpZ3RfYXNzZXJ0 KHNlcmlhbGl6ZV9qb2JfbGlzdCgmbGlzdCwgJnNldHRpbmdzKSk7CisKKwkJCWlndF9hc3NlcnQo KGRpcmZkID0gb3BlbihkaXJuYW1lLCBPX0RJUkVDVE9SWSB8IE9fUkRPTkxZKSkgPj0gMCk7CisJ CQlpZ3RfYXNzZXJ0KG1rZGlyYXQoZGlyZmQsICIwIiwgMDc3MCkgPT0gMCk7CisJCQlpZ3RfYXNz ZXJ0KChzdWJkaXJmZCA9IG9wZW5hdChkaXJmZCwgIjAiLCBPX0RJUkVDVE9SWSB8IE9fUkRPTkxZ KSkgPj0gMCk7CisJCQlpZ3RfYXNzZXJ0KChmZCA9IG9wZW5hdChzdWJkaXJmZCwgImpvdXJuYWwu dHh0IiwgT19DUkVBVCB8IE9fV1JPTkxZIHwgT19FWENMLCAwNjYwKSkgPj0gMCk7CisJCQlpZ3Rf YXNzZXJ0KHdyaXRlKGZkLCBqb3VybmFsdGV4dCwgc2l6ZW9mKGpvdXJuYWx0ZXh0KSkgPT0gc2l6 ZW9mKGpvdXJuYWx0ZXh0KSk7CisKKwkJCWlndF9hc3NlcnQoaW5pdGlhbGl6ZV9leGVjdXRlX3N0 YXRlKCZzdGF0ZSwgJnNldHRpbmdzLCAmbGlzdCkpOworCisJCQlpZ3RfYXNzZXJ0X2VxKHN0YXRl Lm5leHQsIDApOworCQkJaWd0X2Fzc2VydF9lcShsaXN0LnNpemUsIDEpOworCQkJaWd0X2Fzc2Vy dF9lcShsaXN0LmVudHJpZXNbMF0uc3VidGVzdF9jb3VudCwgMik7CisJCQlpZ3RfYXNzZXJ0X2Vx c3RyKGxpc3QuZW50cmllc1swXS5zdWJ0ZXN0c1swXSwgIioiKTsKKwkJCWlndF9hc3NlcnRfZXFz dHIobGlzdC5lbnRyaWVzWzBdLnN1YnRlc3RzWzFdLCBleGNsdWRlc3RyaW5nKTsKKwkJfQorCisJ CWlndF9maXh0dXJlIHsKKwkJCWlmIChmZCA+PSAwKSBjbG9zZShmZCk7CisJCQlpZiAoc3ViZGly ZmQgPj0gMCkgY2xvc2Uoc3ViZGlyZmQpOworCQkJaWYgKGRpcmZkID49IDApCisJCQkJY2xlYXJf ZGlyZWN0b3J5KGRpcmZkKTsKKwkJCXJtZGlyKGRpcm5hbWUpOworCQkJZnJlZV9qb2JfbGlzdCgm bGlzdCk7CisJCX0KKwl9CisKKwlpZ3Rfc3VidGVzdF9ncm91cCB7CisJCWNoYXIgZGlybmFtZVtd ID0gInRtcGRpclhYWFhYWCI7CisJCXN0cnVjdCBqb2JfbGlzdCBsaXN0OworCQlpbnQgZGlyZmQg PSAtMSwgc3ViZGlyZmQgPSAtMSwgZmQgPSAtMTsKKworCQlpZ3RfZml4dHVyZSB7CisJCQlpbml0 X2pvYl9saXN0KCZsaXN0KTsKKwkJCWlndF9yZXF1aXJlKG1rZHRlbXAoZGlybmFtZSkgIT0gTlVM TCk7CisJCX0KKworCQlpZ3Rfc3VidGVzdCgiZXhlY3V0ZS1pbml0aWFsaXplLXN1YnRlc3RzLWNv bXBsZXRlIikgeworCQkJc3RydWN0IGV4ZWN1dGVfc3RhdGUgc3RhdGU7CisJCQljaGFyICphcmd2 W10gPSB7ICJydW5uZXIiLAorCQkJCQkgIi0tbXVsdGlwbGUtbW9kZSIsCisJCQkJCSB0ZXN0ZGF0 YWRpciwKKwkJCQkJIGRpcm5hbWUsCisJCQl9OworCQkJY2hhciBqb3VybmFsdGV4dFtdID0gImZp cnN0LXN1YnRlc3RcbnNlY29uZC1zdWJ0ZXN0XG5leGl0OjBcbiI7CisKKwkJCWlndF9hc3NlcnQo cGFyc2Vfb3B0aW9ucyhBUlJBWV9TSVpFKGFyZ3YpLCBhcmd2LCAmc2V0dGluZ3MpKTsKKwkJCWln dF9hc3NlcnQoY3JlYXRlX2pvYl9saXN0KCZsaXN0LCAmc2V0dGluZ3MpKTsKKwkJCWlndF9hc3Nl cnQobGlzdC5zaXplID09IDMpOworCisJCQlpZiAoIXN0cmNtcChsaXN0LmVudHJpZXNbMF0uYmlu YXJ5LCAibm8tc3VidGVzdHMiKSkgeworCQkJCXN0cnVjdCBqb2JfbGlzdF9lbnRyeSB0bXAgPSBs aXN0LmVudHJpZXNbMF07CisJCQkJbGlzdC5lbnRyaWVzWzBdID0gbGlzdC5lbnRyaWVzWzFdOwor CQkJCWxpc3QuZW50cmllc1sxXSA9IHRtcDsKKwkJCX0KKworCQkJaWd0X2Fzc2VydChsaXN0LmVu dHJpZXNbMF0uc3VidGVzdF9jb3VudCA9PSAwKTsKKworCQkJaWd0X2Fzc2VydChzZXJpYWxpemVf c2V0dGluZ3MoJnNldHRpbmdzKSk7CisJCQlpZ3RfYXNzZXJ0KHNlcmlhbGl6ZV9qb2JfbGlzdCgm bGlzdCwgJnNldHRpbmdzKSk7CisKKwkJCWlndF9hc3NlcnRfbHRlKDAsIGRpcmZkID0gb3Blbihk aXJuYW1lLCBPX0RJUkVDVE9SWSB8IE9fUkRPTkxZKSk7CisJCQlpZ3RfYXNzZXJ0X2VxKG1rZGly YXQoZGlyZmQsICIwIiwgMDc3MCksIDApOworCQkJaWd0X2Fzc2VydCgoc3ViZGlyZmQgPSBvcGVu YXQoZGlyZmQsICIwIiwgT19ESVJFQ1RPUlkgfCBPX1JET05MWSkpID49IDApOworCQkJaWd0X2Fz c2VydF9sdGUoMCwgZmQgPSBvcGVuYXQoc3ViZGlyZmQsICJqb3VybmFsLnR4dCIsIE9fQ1JFQVQg fCBPX1dST05MWSB8IE9fRVhDTCwgMDY2MCkpOworCQkJaWd0X2Fzc2VydF9lcSh3cml0ZShmZCwg am91cm5hbHRleHQsIHNpemVvZihqb3VybmFsdGV4dCkpLCBzaXplb2Yoam91cm5hbHRleHQpKTsK KworCQkJaWd0X2Fzc2VydChpbml0aWFsaXplX2V4ZWN1dGVfc3RhdGUoJnN0YXRlLCAmc2V0dGlu Z3MsICZsaXN0KSk7CisKKwkJCWlndF9hc3NlcnRfZXEoc3RhdGUubmV4dCwgMSk7CisJCQlpZ3Rf YXNzZXJ0X2VxKGxpc3Quc2l6ZSwgMyk7CisJCX0KKworCQlpZ3RfZml4dHVyZSB7CisJCQlpZiAo ZmQgPj0gMCkgY2xvc2UoZmQpOworCQkJaWYgKHN1YmRpcmZkID49IDApIGNsb3NlKHN1YmRpcmZk KTsKKwkJCWlmIChkaXJmZCA+PSAwKQorCQkJCWNsZWFyX2RpcmVjdG9yeShkaXJmZCk7CisJCQly bWRpcihkaXJuYW1lKTsKKwkJCWZyZWVfam9iX2xpc3QoJmxpc3QpOworCQl9CisJfQorCisJaWd0 X3N1YnRlc3RfZ3JvdXAgeworCQlzdHJ1Y3Qgam9iX2xpc3QgbGlzdDsKKwkJaW50IGRpcmZkID0g LTEsIHN1YmRpcmZkID0gLTEsIGZkID0gLTE7CisJCWludCBtdWx0aXBsZTsKKworCQlpZ3RfZml4 dHVyZSB7CisJCQlpbml0X2pvYl9saXN0KCZsaXN0KTsKKwkJfQorCisJCWZvciAobXVsdGlwbGUg PSAwOyBtdWx0aXBsZSA8IDI7IG11bHRpcGxlKyspIHsKKwkJCWNoYXIgZGlybmFtZVtdID0gInRt cGRpclhYWFhYWCI7CisKKwkJCWlndF9maXh0dXJlIHsKKwkJCQlpZ3RfcmVxdWlyZShta2R0ZW1w KGRpcm5hbWUpICE9IE5VTEwpOworCQkJfQorCisJCQlpZ3Rfc3VidGVzdF9mKCJleGVjdXRlLXN1 YnRlc3RzLSVzIiwgbXVsdGlwbGUgPyAibXVsdGlwbGUiIDogIm5vcm1hbCIpIHsKKwkJCQlzdHJ1 Y3QgZXhlY3V0ZV9zdGF0ZSBzdGF0ZTsKKwkJCQljaGFyICphcmd2W10gPSB7ICJydW5uZXIiLAor CQkJCQkJIG11bHRpcGxlID8gIi0tbXVsdGlwbGUtbW9kZSIgOiAiLS1zeW5jIiwKKwkJCQkJCSAi LXQiLCAiLXN1YnRlc3QiLAorCQkJCQkJIHRlc3RkYXRhZGlyLAorCQkJCQkJIGRpcm5hbWUsCisJ CQkJfTsKKwkJCQljaGFyIHRlc3RkaXJuYW1lWzE2XTsKKwkJCQlzaXplX3QgZXhwZWN0ZWRfdGVz dHMgPSBtdWx0aXBsZSA/IDIgOiAzOworCQkJCXNpemVfdCBpOworCisJCQkJaWd0X2Fzc2VydChw YXJzZV9vcHRpb25zKEFSUkFZX1NJWkUoYXJndiksIGFyZ3YsICZzZXR0aW5ncykpOworCQkJCWln dF9hc3NlcnQoY3JlYXRlX2pvYl9saXN0KCZsaXN0LCAmc2V0dGluZ3MpKTsKKwkJCQlpZ3RfYXNz ZXJ0KGluaXRpYWxpemVfZXhlY3V0ZV9zdGF0ZSgmc3RhdGUsICZzZXR0aW5ncywgJmxpc3QpKTsK KworCQkJCWlndF9hc3NlcnQoZXhlY3V0ZSgmc3RhdGUsICZzZXR0aW5ncywgJmxpc3QpKTsKKwkJ CQlpZ3RfYXNzZXJ0X2YoKGRpcmZkID0gb3BlbihkaXJuYW1lLCBPX0RJUkVDVE9SWSB8IE9fUkRP TkxZKSkgPj0gMCwKKwkJCQkJICAgICAiRXhlY3V0ZSBkaWRuJ3QgY3JlYXRlIHRoZSByZXN1bHRz IGRpcmVjdG9yeVxuIik7CisKKwkJCQlpZ3RfYXNzZXJ0X2YoKGZkID0gb3BlbmF0KGRpcmZkLCAi dW5hbWUudHh0IiwgT19SRE9OTFkpKSA+PSAwLAorCQkJCQkgICAgICJFeGVjdXRlIGRpZG4ndCBj cmVhdGUgdW5hbWUudHh0XG4iKTsKKwkJCQljbG9zZShmZCk7CisJCQkJZmQgPSAtMTsKKworCQkJ CWZvciAoaSA9IDA7IGkgPCBleHBlY3RlZF90ZXN0czsgaSsrKSB7CisJCQkJCXNucHJpbnRmKHRl c3RkaXJuYW1lLCAxNiwgIiV6ZCIsIGkpOworCisJCQkJCWlndF9hc3NlcnRfZigoc3ViZGlyZmQg PSBvcGVuYXQoZGlyZmQsIHRlc3RkaXJuYW1lLCBPX0RJUkVDVE9SWSB8IE9fUkRPTkxZKSkgPj0g MCwKKwkJCQkJCSAgICAgIkV4ZWN1dGUgZGlkbid0IGNyZWF0ZSByZXN1bHQgZGlyZWN0b3J5ICcl cydcbiIsIHRlc3RkaXJuYW1lKTsKKwkJCQkJYXNzZXJ0X2V4ZWN1dGlvbl9yZXN1bHRzX2V4aXN0 KHN1YmRpcmZkKTsKKwkJCQkJY2xvc2Uoc3ViZGlyZmQpOworCQkJCX0KKworCQkJCXNucHJpbnRm KHRlc3RkaXJuYW1lLCAxNiwgIiV6ZCIsIGV4cGVjdGVkX3Rlc3RzKTsKKwkJCQlpZ3RfYXNzZXJ0 X2YoKHN1YmRpcmZkID0gb3BlbmF0KGRpcmZkLCB0ZXN0ZGlybmFtZSwgT19ESVJFQ1RPUlkgfCBP X1JET05MWSkpIDwgMCwKKwkJCQkJICAgICAiRXhlY3V0ZSBjcmVhdGVkIHRvbyBtYW55IGRpcmVj dG9yaWVzXG4iKTsKKwkJCX0KKworCQkJaWd0X2ZpeHR1cmUgeworCQkJCWlmIChmZCA+PSAwKSBj bG9zZShmZCk7CisJCQkJaWYgKHN1YmRpcmZkID49IDApIGNsb3NlKHN1YmRpcmZkKTsKKwkJCQlp ZiAoZGlyZmQgPj0gMCkKKwkJCQkJY2xlYXJfZGlyZWN0b3J5KGRpcmZkKTsKKwkJCQlybWRpcihk aXJuYW1lKTsKKwkJCQlmcmVlX2pvYl9saXN0KCZsaXN0KTsKKwkJCX0KKwkJfQorCX0KKworCWln dF9zdWJ0ZXN0X2dyb3VwIHsKKwkJc3RydWN0IGpvYl9saXN0IGxpc3Q7CisJCWludCBkaXJmZCA9 IC0xLCBzdWJkaXJmZCA9IC0xLCBmZCA9IC0xOworCQlpbnQgbXVsdGlwbGU7CisKKwkJaWd0X2Zp eHR1cmUgeworCQkJaW5pdF9qb2JfbGlzdCgmbGlzdCk7CisJCX0KKworCQlmb3IgKG11bHRpcGxl ID0gMDsgbXVsdGlwbGUgPCAyOyBtdWx0aXBsZSsrKSB7CisJCQljaGFyIGRpcm5hbWVbXSA9ICJ0 bXBkaXJYWFhYWFgiOworCisJCQlpZ3RfZml4dHVyZSB7CisJCQkJaWd0X3JlcXVpcmUobWtkdGVt cChkaXJuYW1lKSAhPSBOVUxMKTsKKwkJCX0KKworCQkJaWd0X3N1YnRlc3RfZigiZXhlY3V0ZS1z a2lwcGVyLWpvdXJuYWwtJXMiLCBtdWx0aXBsZSA/ICJtdWx0aXBsZSIgOiAibm9ybWFsIikgewor CQkJCXN0cnVjdCBleGVjdXRlX3N0YXRlIHN0YXRlOworCQkJCWNoYXIgKmFyZ3ZbXSA9IHsgInJ1 bm5lciIsCisJCQkJCQkgbXVsdGlwbGUgPyAiLS1tdWx0aXBsZS1tb2RlIiA6ICItLXN5bmMiLAor CQkJCQkJICItdCIsICJza2lwcGVycyIsCisJCQkJCQkgdGVzdGRhdGFkaXIsCisJCQkJCQkgZGly bmFtZSwKKwkJCQl9OworCQkJCWNoYXIgKmR1bXA7CisJCQkJY2hhciAqZXhwZWN0ZWRfMCA9IG11 bHRpcGxlID8KKwkJCQkJInNraXAtb25lXG5za2lwLXR3b1xuZXhpdDo3NyAoIiA6CisJCQkJCSJz a2lwLW9uZVxuZXhpdDo3NyAoIjsKKwkJCQljaGFyICpleHBlY3RlZF8xID0gInNraXAtdHdvXG5l eGl0Ojc3ICgiOworCisJCQkJaWd0X2Fzc2VydChwYXJzZV9vcHRpb25zKEFSUkFZX1NJWkUoYXJn diksIGFyZ3YsICZzZXR0aW5ncykpOworCQkJCWlndF9hc3NlcnQoY3JlYXRlX2pvYl9saXN0KCZs aXN0LCAmc2V0dGluZ3MpKTsKKwkJCQlpZ3RfYXNzZXJ0KGluaXRpYWxpemVfZXhlY3V0ZV9zdGF0 ZSgmc3RhdGUsICZzZXR0aW5ncywgJmxpc3QpKTsKKworCQkJCWlndF9hc3NlcnQoZXhlY3V0ZSgm c3RhdGUsICZzZXR0aW5ncywgJmxpc3QpKTsKKwkJCQlpZ3RfYXNzZXJ0X2YoKGRpcmZkID0gb3Bl bihkaXJuYW1lLCBPX0RJUkVDVE9SWSB8IE9fUkRPTkxZKSkgPj0gMCwKKwkJCQkJICAgICAiRXhl Y3V0ZSBkaWRuJ3QgY3JlYXRlIHRoZSByZXN1bHRzIGRpcmVjdG9yeVxuIik7CisKKwkJCQlpZ3Rf YXNzZXJ0X2YoKGZkID0gb3BlbmF0KGRpcmZkLCAidW5hbWUudHh0IiwgT19SRE9OTFkpKSA+PSAw LAorCQkJCQkgICAgICJFeGVjdXRlIGRpZG4ndCBjcmVhdGUgdW5hbWUudHh0XG4iKTsKKwkJCQlj bG9zZShmZCk7CisJCQkJZmQgPSAtMTsKKworCQkJCWlndF9hc3NlcnRfZigoc3ViZGlyZmQgPSBv cGVuYXQoZGlyZmQsICIwIiwgT19ESVJFQ1RPUlkgfCBPX1JET05MWSkpID49IDAsCisJCQkJCSAg ICAgIkV4ZWN1dGUgZGlkbid0IGNyZWF0ZSByZXN1bHQgZGlyZWN0b3J5ICcwJ1xuIik7CisJCQkJ ZHVtcCA9IGR1bXBfZmlsZShzdWJkaXJmZCwgImpvdXJuYWwudHh0Iik7CisJCQkJaWd0X2Fzc2Vy dF9mKGR1bXAgIT0gTlVMTCwKKwkJCQkJICAgICAiRXhlY3V0ZSBkaWRuJ3QgY3JlYXRlIHRoZSBq b3VybmFsXG4iKTsKKwkJCQkvKiBUcmltIG91dCB0aGUgcnVudGltZSAqLworCQkJCWR1bXBbc3Ry bGVuKGV4cGVjdGVkXzApXSA9ICdcMCc7CisJCQkJaWd0X2Fzc2VydF9lcXN0cihkdW1wLCBleHBl Y3RlZF8wKTsKKwkJCQlmcmVlKGR1bXApOworCQkJCWNsb3NlKHN1YmRpcmZkKTsKKwkJCQlzdWJk aXJmZCA9IC0xOworCisJCQkJaWYgKCFtdWx0aXBsZSkgeworCQkJCQlpZ3RfYXNzZXJ0X2YoKHN1 YmRpcmZkID0gb3BlbmF0KGRpcmZkLCAiMSIsIE9fRElSRUNUT1JZIHwgT19SRE9OTFkpKSA+PSAw LAorCQkJCQkJICAgICAiRXhlY3V0ZSBkaWRuJ3QgY3JlYXRlIHJlc3VsdCBkaXJlY3RvcnkgJzEn XG4iKTsKKwkJCQkJZHVtcCA9IGR1bXBfZmlsZShzdWJkaXJmZCwgImpvdXJuYWwudHh0Iik7CisJ CQkJCWlndF9hc3NlcnRfZihkdW1wICE9IE5VTEwsCisJCQkJCQkgICAgICJFeGVjdXRlIGRpZG4n dCBjcmVhdGUgdGhlIGpvdXJuYWxcbiIpOworCQkJCQlkdW1wW3N0cmxlbihleHBlY3RlZF8xKV0g PSAnXDAnOworCQkJCQlpZ3RfYXNzZXJ0X2Vxc3RyKGR1bXAsIGV4cGVjdGVkXzEpOworCQkJCQlm cmVlKGR1bXApOworCQkJCQljbG9zZShzdWJkaXJmZCk7CisJCQkJCXN1YmRpcmZkID0gLTE7CisJ CQkJfQorCQkJfQorCisJCQlpZ3RfZml4dHVyZSB7CisJCQkJaWYgKGZkID49IDApIGNsb3NlKGZk KTsKKwkJCQlpZiAoc3ViZGlyZmQgPj0gMCkgY2xvc2Uoc3ViZGlyZmQpOworCQkJCWlmIChkaXJm ZCA+PSAwKQorCQkJCQljbGVhcl9kaXJlY3RvcnkoZGlyZmQpOworCQkJCXJtZGlyKGRpcm5hbWUp OworCQkJCWZyZWVfam9iX2xpc3QoJmxpc3QpOworCQkJfQorCQl9CisJfQorCisJaWd0X2ZpeHR1 cmUKKwkJZnJlZV9zZXR0aW5ncygmc2V0dGluZ3MpOworfQpkaWZmIC0tZ2l0IGEvcnVubmVyL3Rl c3RkYXRhL21lc29uLmJ1aWxkIGIvcnVubmVyL3Rlc3RkYXRhL21lc29uLmJ1aWxkCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4wMTFlZmY4ZQotLS0gL2Rldi9udWxsCisrKyBi L3J1bm5lci90ZXN0ZGF0YS9tZXNvbi5idWlsZApAQCAtMCwwICsxLDIwIEBACisKK3Rlc3RkYXRh X3Byb2dzID0gWyAnc3VjY2Vzc3Rlc3QnLAorCQkgICAnbm8tc3VidGVzdHMnLAorCQkgICAnc2tp cHBlcnMnLAorCQkgXQorCit0ZXN0ZGF0YV9leGVjdXRhYmxlcyA9IFtdCisKK2ZvcmVhY2ggcHJv ZyA6IHRlc3RkYXRhX3Byb2dzCisJdGVzdGRhdGFfZXhlY3V0YWJsZXMgKz0gZXhlY3V0YWJsZShw cm9nLCBwcm9nICsgJy5jJywKKwkJCQkJICAgZGVwZW5kZW5jaWVzIDogaWd0X2RlcHMsCisJCQkJ CSAgIGluc3RhbGwgOiBmYWxzZSkKK2VuZGZvcmVhY2gKKwordGVzdGRhdGFfbGlzdCA9IGN1c3Rv bV90YXJnZXQoJ3Rlc3RkYXRhX3Rlc3RsaXN0JywKKwkJCSAgICAgIG91dHB1dCA6ICd0ZXN0LWxp c3QudHh0JywKKwkJCSAgICAgIGNvbW1hbmQgOiBbIGdlbl90ZXN0bGlzdCwgJ0BPVVRQVVRAJywg dGVzdGRhdGFfcHJvZ3MgXSwKKwkJCSAgICAgIGJ1aWxkX2J5X2RlZmF1bHQgOiB0cnVlKQorCit0 ZXN0ZGF0YV9kaXIgPSBtZXNvbi5jdXJyZW50X2J1aWxkX2RpcigpCmRpZmYgLS1naXQgYS9ydW5u ZXIvdGVzdGRhdGEvbm8tc3VidGVzdHMuYyBiL3J1bm5lci90ZXN0ZGF0YS9uby1zdWJ0ZXN0cy5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwLi4wMGM5MmUyNQotLS0gL2Rldi9u dWxsCisrKyBiL3J1bm5lci90ZXN0ZGF0YS9uby1zdWJ0ZXN0cy5jCkBAIC0wLDAgKzEsNiBAQAor I2luY2x1ZGUgImlndC5oIgorCitpZ3Rfc2ltcGxlX21haW4KK3sKKworfQpkaWZmIC0tZ2l0IGEv cnVubmVyL3Rlc3RkYXRhL3NraXBwZXJzLmMgYi9ydW5uZXIvdGVzdGRhdGEvc2tpcHBlcnMuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uYmU0YTMxYjQKLS0tIC9kZXYvbnVs bAorKysgYi9ydW5uZXIvdGVzdGRhdGEvc2tpcHBlcnMuYwpAQCAtMCwwICsxLDE0IEBACisjaW5j bHVkZSAiaWd0LmgiCisKK2lndF9tYWluCit7CisJaWd0X2ZpeHR1cmUgeworCQlpZ3RfcmVxdWly ZV9mKGZhbHNlLCAiU2tpcHBpbmcgZnJvbSBmaXh0dXJlXG4iKTsKKwl9CisKKwlpZ3Rfc3VidGVz dCgic2tpcC1vbmUiKQorCQlpZ3RfZGVidWcoIlNob3VsZCBiZSBza2lwcGVkXG4iKTsKKworCWln dF9zdWJ0ZXN0KCJza2lwLXR3byIpCisJCWlndF9kZWJ1ZygiU2hvdWxkIGJlIHNraXBwZWRcbiIp OworfQpkaWZmIC0tZ2l0IGEvcnVubmVyL3Rlc3RkYXRhL3N1Y2Nlc3N0ZXN0LmMgYi9ydW5uZXIv dGVzdGRhdGEvc3VjY2Vzc3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MC4uYmI0MTFlYjQKLS0tIC9kZXYvbnVsbAorKysgYi9ydW5uZXIvdGVzdGRhdGEvc3VjY2Vzc3Rl c3QuYwpAQCAtMCwwICsxLDEwIEBACisjaW5jbHVkZSAiaWd0LmgiCisKK2lndF9tYWluCit7CisJ aWd0X3N1YnRlc3QoImZpcnN0LXN1YnRlc3QiKQorCQlpZ3RfZGVidWcoIlJ1bm5pbmcgZmlyc3Qg c3VidGVzdFxuIik7CisKKwlpZ3Rfc3VidGVzdCgic2Vjb25kLXN1YnRlc3QiKQorCQlpZ3RfZGVi dWcoIlJ1bm5pbmcgc2Vjb25kIHN1YnRlc3RcbiIpOworfQotLSAKMi4xNC4xCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlz dAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9w Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK