ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDBiZDYxNjcuLjdmZDVkYzcgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMSwzICsxLDQgQEAKIC5pZGVhCisudnNjb2RlCiAqLmtwZgogCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS9iaW4vaW5zdGFsbF9wZXJsX2xpYnMucGwgYi9tYW5hZ2VtZW50bm9kZS9iaW4vaW5zdGFsbF9wZXJsX2xpYnMucGwKaW5kZXggYzU3ZmZiNi4uZTcxODhkOCAxMDA3NTUKLS0tIGEvbWFuYWdlbWVudG5vZGUvYmluL2luc3RhbGxfcGVybF9saWJzLnBsCisrKyBiL21hbmFnZW1lbnRub2RlL2Jpbi9pbnN0YWxsX3BlcmxfbGlicy5wbApAQCAtNTUsNTUgKzU1LDQzIEBACiAJJ21ha2UnLAogCSdubWFwJywKIAknb3BlbnNzbC1kZXZlbCcsCi0JJ3BlcmwtQXJjaGl2ZS1UYXInLAorCSdiemlwMicsCiAJJ3BlcmwtQ1BBTicsCi0JJ3BlcmwtQ3J5cHQtQ0JDJywKLQkncGVybC1DcnlwdC1PcGVuU1NMLVJTQScsCi0JJ3BlcmwtQ3J5cHQtUmlqbmRhZWwnLAorCSdwZXJsLUFwcC1jcGFubWludXMnLAogCSdwZXJsLURCRC1NeVNRTCcsCi0JJ3BlcmwtREJJJywKLQkncGVybC1EaWdlc3QtU0hBMScsCi0JJ3BlcmwtRXhwZWN0JywKLQkncGVybC1Gcm9udGllci1SUEMnLAotCSdwZXJsLUZyb250aWVyLVJQQy1DbGllbnQnLAotCSdwZXJsLUlPLVN0cmluZycsCi0JJ3BlcmwtSlNPTicsCi0JJ3BlcmwtTFdQLVByb3RvY29sLWh0dHBzJywKLQkncGVybC1NYWlsVG9vbHMnLAotCSdwZXJsLU1vJywKLQkncGVybC1OZXQtSmFiYmVyJywKLQkncGVybC1OZXQtTmV0bWFzaycsCi0JJ3BlcmwtTmV0LVNTSC1FeHBlY3QnLAotCSdwZXJsLU9iamVjdC1JbnNpZGVPdXQnLAotCSdwZXJsLVJQQy1YTUwnLAotCSdwZXJsLVNjYWxhci1MaXN0LVV0aWxzJywKLQkncGVybC1UZXh0LUNTVl9YUycsCi0JJ3BlcmwtVGltZS1IaVJlcycsCi0JJ3BlcmwtWE1MLVNpbXBsZScsCi0JJ3BlcmwtWUFNTCcsCiAJJ3htbHNlYzEtb3BlbnNzbCcsCi0JJ3BlcmwtRnJvbnRpZXItUlBDJywKLQkncGVybC1Gcm9udGllci1SUEMtQ2xpZW50JywKLQkncGVybC1MV1AtUHJvdG9jb2wtaHR0cHMnLAotCSdwZXJsLU1vJywKLQkncGVybC1PYmplY3QtSW5zaWRlT3V0JywKLQkncGVybC1TY2FsYXItTGlzdC1VdGlscycsCi0JJ3BlcmwtRXhwZWN0JywKICk7CiAKIG15IEBQRVJMX01PRFVMRVMgPSAoCi0JJ0NQQU4nLAotCSdDcnlwdDo6Q0JDJywKLQknRGlnZXN0OjpTSEExJywKKwknQ1BBTkAyLjM2JywKKwknQXJjaGl2ZTo6VGFyQDMuMDInLAorCSdDcnlwdDo6Q0JDQDMuMDQnLAorCSdDcnlwdDo6T3BlblNTTDo6UlNBQDAuMzMnLAorCSdDcnlwdDo6UmlqbmRhZWxAMS4xNicsCisJJ0RCSUAxLjY0MycsCisJJ0RpZ2VzdDo6U0hBMUAyLjEzJywKKwknRXhwZWN0QDEuMzUnLAorCSdGcm9udGllcjo6UlBDMicsCiAJJ0Zyb250aWVyOjpDbGllbnQnLAotCSdJTzo6U3RyaW5nJywKLQknTFdQOjpQcm90b2NvbDo6aHR0cHMnLAotCSdNbzo6YnVpbGRlcicsCi0JJ05ldDo6UGluZzo6RXh0ZXJuYWwnLAotCSdOZXQ6OlNTSDo6RXhwZWN0JywKLQknT2JqZWN0OjpJbnNpZGVPdXQnLAotCSdTY2FsYXI6OlV0aWwnLAotCSdUZXh0OjpDU1ZfWFMnLAorCSdJTzo6U3RyaW5nQDEuMDgnLAorCSdKU09OQDQuMTAnLAorCSdOZXQ6OkxEQVBAMC42OCcsCisJJ0xXUDo6UHJvdG9jb2w6Omh0dHBzQDYuMTInLAorCSdNYWlsVG9vbHNAMi4yMScsCisJJ01vQDAuNDAnLAorCSdNbzo6YnVpbGRlckAwLjQwJywKKwknTmV0OjpKYWJiZXJAMi4wJywKKwknTmV0OjpOZXRtYXNrQDIuMDAwMicsCisJJ05ldDo6U1NIOjpFeHBlY3RAMS4wOScsCisJJ05ldDo6UGluZzo6RXh0ZXJuYWxAMC4xNScsCisJJ09iamVjdDo6SW5zaWRlT3V0QDQuMDUnLAorCSdSRVNUOjpDbGllbnRAMjgxJywKKwknUlBDOjpYTUxAMS42MScsCisJJ1N1Yjo6VXRpbEAxLjYzJywKKwknVGV4dDo6Q1NWX1hTQDEuNTMnLAorCSdUaW1lOjpIaVJlc0AxLjk3NjQnLAorCSdYTUw6OlNpbXBsZUAyLjI1JywKKwknWUFNTEAxLjMxJwogKTsKIAkKICMgU3RvcmUgdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zIGluIGhhc2gKQEAgLTQxOCwzNSArNDA2LDMxIEBACiAJUEVSTF9NT0RVTEU6IGZvciBteSAkcGVybF9tb2R1bGUgKEBQRVJMX01PRFVMRVMpIHsKIAkJcHJpbnRfYnJlYWsoJyonKTsKIAkJCi0JCW15ICRjcGFuX3ZlcnNpb24gPSBnZXRfcGVybF9tb2R1bGVfY3Bhbl92ZXJzaW9uKCRwZXJsX21vZHVsZSk7Ci0JCWlmICghJGNwYW5fdmVyc2lvbikgeworCQkjbXkgJGNwYW5fdmVyc2lvbiA9IGdldF9wZXJsX21vZHVsZV9jcGFuX3ZlcnNpb24oJHBlcmxfbW9kdWxlKTsKKwkJbXkgKCRwTW9kdWxlLCAkY3Bhbl92ZXJzaW9uICkgPSBzcGxpdCgvQC8sICRwZXJsX21vZHVsZSk7CisJCWlmICghZGVmaW5lZCAkY3Bhbl92ZXJzaW9uKSB7CisJCQkkY3Bhbl92ZXJzaW9uID0gJ3VuZGVmJzsKKwkJfQorCQlteSAkY3Bhbl92ZXJzaW9uX2F2YWlsYWJsZSA9IGBjcGFubSAtLWluZm8gLXEgJHBlcmxfbW9kdWxlIHwgZ3JlcCAtaSBmYWlsZWQgfCB3YyAtbGA7CisJCSNpZiAoISRjcGFuX3ZlcnNpb24pIHsKKwkJaWYgKCRjcGFuX3ZlcnNpb25fYXZhaWxhYmxlID09IDEpIHsKIAkJCXByaW50ICJFUlJPUjogdW5hYmxlIHRvIGluc3RhbGwgJHBlcmxfbW9kdWxlIFBlcmwgbW9kdWxlLCBpbmZvcm1hdGlvbiBjb3VsZCBub3QgYmUgb2J0YWluZWQgZnJvbSBDUEFOXG4iOwogCQkJJEVSUk9SUy0+eydQZXJsIG1vZHVsZSd9eyRwZXJsX21vZHVsZX0gPSAxOwogCQkJbmV4dCBQRVJMX01PRFVMRTsKIAkJfQogCQkKIAkJIyBDaGVjayBpZiBpbnN0YWxsZWQgdmVyc2lvbiBtYXRjaGVzIHdoYXQgaXMgYXZhaWxhYmxlIGZyb20gQ1BBTgotCQlteSAkaW5zdGFsbGVkX3ZlcnNpb24gPSBnZXRfcGVybF9tb2R1bGVfaW5zdGFsbGVkX3ZlcnNpb24oJHBlcmxfbW9kdWxlKTsKKwkJbXkgJGluc3RhbGxlZF92ZXJzaW9uID0gZ2V0X3BlcmxfbW9kdWxlX2luc3RhbGxlZF92ZXJzaW9uKCRwTW9kdWxlKTsKIAkJaWYgKCRpbnN0YWxsZWRfdmVyc2lvbiAmJiAkaW5zdGFsbGVkX3ZlcnNpb24gZXEgJGNwYW5fdmVyc2lvbikgewogCQkJcHJpbnQgIiRwZXJsX21vZHVsZSBQZXJsIG1vZHVsZSBpcyB1cCB0byBkYXRlXG4iOwogCQl9CiAJCWVsc2UgewotCQkKLQkJCSMgQ2hlY2sgaWYgdGhlIENQQU4gbW9kdWxlIGltcGxlbWVudHMgdGhlICJub3Rlc3QiIG1ldGhvZAotCQkJIyBUaGlzIGlzIG5vdCBhdmFpbGFibGUgaW4gb2xkZXIgdmVyc2lvbnMgb2YgQ1BBTi5wbQotCQkJaWYgKENQQU46OlNoZWxsLT5jYW4oJ25vdGVzdCcpKSB7Ci0JCQkJcHJpbnQgIkF0dGVtcHRpbmcgdG8gaW5zdGFsbCAobm90ZXN0LCBmb3JjZSkgUGVybCBtb2R1bGUgdXNpbmcgQ1BBTjogJHBlcmxfbW9kdWxlXG4iOwotCQkJCWV2YWwgeyBDUEFOOjpTaGVsbC0+cmVtYXRlaW4oIm5vdGVzdCIsICJmb3JjZSIsICJpbnN0YWxsIiwgJHBlcmxfbW9kdWxlKSB9OwotCQkJCSNldmFsIHsgQ1BBTjo6U2hlbGwtPm5vdGVzdCgiZm9yY2UgaW5zdGFsbCIsICRwZXJsX21vZHVsZSkgfTsKLQkJCX0KLQkJCWVsc2UgewotCQkJCXByaW50ICJBdHRlbXB0aW5nIHRvIGluc3RhbGwgKGZvcmNlKSBQZXJsIG1vZHVsZSB1c2luZyBDUEFOOiAkcGVybF9tb2R1bGVcbiI7Ci0JCQkJZXZhbCB7IENQQU46OlNoZWxsLT5yZW1hdGVpbigiZm9yY2UiLCAiaW5zdGFsbCIsICRwZXJsX21vZHVsZSkgfTsKLQkJCQkjZXZhbCB7IENQQU46OlNoZWxsLT5mb3JjZSgiaW5zdGFsbCIsICRwZXJsX21vZHVsZSkgfTsKLQkJCX0KKworCQkJcHJpbnQgIkF0dGVtcHRpbmcgdG8gaW5zdGFsbCBQZXJsIG1vZHVsZSB1c2luZyBDUEFOTWludXM6ICAkcGVybF9tb2R1bGVcbiI7CisJCQlteSAkcmV0dXJudmFsID0gc3lzdGVtKCJjcGFubSIsICItLW5vdGVzdCIsICItLWZvcmNlIiwgJHBlcmxfbW9kdWxlKTsKIAkJCQogCQkJIyBDaGVjayBpZiB0aGUgbW9kdWxlIHdhcyBzdWNjZXNzZnVsbHkgaW5zdGFsbGVkCi0JCQkkaW5zdGFsbGVkX3ZlcnNpb24gPSBnZXRfcGVybF9tb2R1bGVfaW5zdGFsbGVkX3ZlcnNpb24oJHBlcmxfbW9kdWxlKTsKKwkJCSRpbnN0YWxsZWRfdmVyc2lvbiA9IGdldF9wZXJsX21vZHVsZV9pbnN0YWxsZWRfdmVyc2lvbigkcE1vZHVsZSk7CiAJCQlpZiAoISRpbnN0YWxsZWRfdmVyc2lvbikgewogCQkJCXByaW50ICJFUlJPUjogZmFpbGVkIHRvIGluc3RhbGwgJHBlcmxfbW9kdWxlIFBlcmwgbW9kdWxlXG4iOwogCQkJCSRFUlJPUlMtPnsnUGVybCBtb2R1bGUnfXskcGVybF9tb2R1bGV9ID0gMTsKQEAgLTQ1NSw3ICs0MzksNyBAQAogCQl9CiAJCQogCQkjIENoZWNrIGlmIGNvcnJlc3BvbmRpbmcgTGludXggcGFja2FnZSBmYWlsZWQgLSByZW1vdmUgZnJvbSAlRVJST1JTCi0JCW15ICRsaW51eF9wYWNrYWdlX25hbWUgPSAicGVybC0kcGVybF9tb2R1bGUiOworCQlteSAkbGludXhfcGFja2FnZV9uYW1lID0gInBlcmwtJHBNb2R1bGUiOwogCQkkbGludXhfcGFja2FnZV9uYW1lID1+IHMvOjovLS9nOwogCQlpZiAoZGVmaW5lZCAkRVJST1JTLT57J0xpbnV4IHBhY2thZ2UnfXskbGludXhfcGFja2FnZV9uYW1lfSkgewogCQkJcHJpbnQgIlJlbW92ZWQgJGxpbnV4X3BhY2thZ2VfbmFtZSBmcm9tIGxpc3Qgb2YgZmFpbGVkIExpbnV4IHBhY2thZ2VzXG4iOwpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvYmluL3ZjbGQgYi9tYW5hZ2VtZW50bm9kZS9iaW4vdmNsZAppbmRleCAyZGQ5MTljLi42ODkzZjMyIDEwMDc1NQotLS0gYS9tYW5hZ2VtZW50bm9kZS9iaW4vdmNsZAorKysgYi9tYW5hZ2VtZW50bm9kZS9iaW4vdmNsZApAQCAtMTI5LDcgKzEyOSw3IEBACiAJbXkgJG1hbmFnZW1lbnRfbm9kZV9ob3N0bmFtZSA9ICRpbmZve21hbmFnZW1lbnRub2RlfXtob3N0bmFtZX07CiAKIAkjIFNldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIGdsb2JhbCBtYW5hZ2VtZW50IG5vZGUgaW5mb3JtYXRpb24KLQkkRU5We21hbmFnZW1lbnRfbm9kZV9pZH0gPSAkbWFuYWdlbWVudF9ub2RlX2lkOworCSRFTlYtPnttYW5hZ2VtZW50X25vZGVfaWR9ID0gJG1hbmFnZW1lbnRfbm9kZV9pZDsKIAlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgJExPR0ZJTEUsICJtYW5hZ2VtZW50X25vZGVfaWQgZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0OiAkbWFuYWdlbWVudF9ub2RlX2lkIik7CiAJCiAJIyBHZXQgdGhlIG1hbmFnZW1lbnQgbm9kZSBjaGVja2luIGludGVydmFsIGZyb20gdGhlIGRhdGFiYXNlIGlmIGRlZmluZWQKQEAgLTE0MywyMyArMTQzLDIzIEBACiAJCiAJIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCXdoaWxlICgxKSB7Ci0JCWRlbGV0ZSAkRU5We3JlcXVlc3RfaWR9OwotCQlkZWxldGUgJEVOVntyZXNlcnZhdGlvbl9pZH07Ci0JCWRlbGV0ZSAkRU5We3N0YXRlfTsKLQkJZGVsZXRlICRFTlZ7ZGF0YX07CisJCWRlbGV0ZSAkRU5WLT57cmVxdWVzdF9pZH07CisJCWRlbGV0ZSAkRU5WLT57cmVzZXJ2YXRpb25faWR9OworCQlkZWxldGUgJEVOVi0+e3N0YXRlfTsKKwkJZGVsZXRlICRFTlYtPntkYXRhfTsKIAkJCiAJCSMgV2ViIHNpdGUgaW5zZXJ0cyBpbnRvIHZhcmlhYmxlIHRhYmxlIHdoZW5ldmVyIGFuIGFkbWluIG9yIHVzZXIgbWVzc2FnZSBpcyBtb2RpZmllZAogCQkjIENoZWNrIGlmIHRoZSB2YXJpYWJsZSBleGlzdHMsIGlmIHNvLCB2YWxpZGF0ZSBhbGwgb2YgdGhlIG1lc3NhZ2VzCiAJCWNoZWNrX21lc3NhZ2VzX25lZWRfdmFsaWRhdGluZygpOwogCQkKLQkJbXkgJGRhdGFfYWdlX3NlY29uZHMgPSAodGltZSAtICRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99eyRtYW5hZ2VtZW50X25vZGVfaWR9e1JFVFJJRVZBTF9USU1FfSk7CisJCW15ICRkYXRhX2FnZV9zZWNvbmRzID0gKHRpbWUgLSAkRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99LT57JG1hbmFnZW1lbnRfbm9kZV9pZH0tPntSRVRSSUVWQUxfVElNRX0pOwogCQlpZiAoJGRhdGFfYWdlX3NlY29uZHMgPiAxMjAgKSB7CiAJCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgJExPR0ZJTEUsICJyZXRyaWV2aW5nIG1hbmFnZW1lbnQgbm9kZSBpbmZvIGZvciAnJG1hbmFnZW1lbnRfbm9kZV9pZCcsIGNhY2hlZCBkYXRhIGlzIHN0YWxlOiAkZGF0YV9hZ2Vfc2Vjb25kcyBzZWNvbmRzIG9sZCIpOwogCQkJJGluZm97bWFuYWdlbWVudG5vZGV9ID0gZ2V0X21hbmFnZW1lbnRfbm9kZV9pbmZvKCk7CiAJCQlpZiAoZGVmaW5lZCAkaW5mb3ttYW5hZ2VtZW50bm9kZX17Y2hlY2tpbmludGVydmFsfSkgewogCQkJCSRtYW5hZ2VtZW50X25vZGVfY2hlY2tpbl9pbnRlcnZhbCA9ICRpbmZve21hbmFnZW1lbnRub2RlfXtjaGVja2luaW50ZXJ2YWx9OwogCQkJfQotCQkJI25vdGlmeSgkRVJST1JTeydERUJVRyd9LCAkTE9HRklMRSwgImR1bXA6ICIgLiBmb3JtYXRfZGF0YSgkRU5We21hbmFnZW1lbnRfbm9kZV9pbmZvfXskbWFuYWdlbWVudF9ub2RlX2lkfSkpOworCQkJI25vdGlmeSgkRVJST1JTeydERUJVRyd9LCAkTE9HRklMRSwgImR1bXA6ICIgLiBmb3JtYXRfZGF0YSgkRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99LT57JG1hbmFnZW1lbnRfbm9kZV9pZH0pKTsKIAkJfQogCQkKIAkJIyBTZXQgdGhlIHZjbGQgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gMCBzbyBvdGhlciBzdWJyb3V0aW5lcyBrbm93IGlmIHRoaXMgaXMgdGhlIHZjbGQgb3IgY2hpbGQgcHJvY2VzcwpAQCAtMjE1LDkgKzIxNSw5IEBACiAJCQlteSBAcmVzZXJ2YXRpb25faWRzID0gc29ydCB7ICRhIDw9PiAkYiB9IGtleXMgJXskaW5mb3tyZXF1ZXN0fXskcmVxdWVzdF9pZH17cmVzZXJ2YXRpb259fTsKIAkJCW15ICRyZXNlcnZhdGlvbl9jb3VudCA9IEByZXNlcnZhdGlvbl9pZHM7CiAJCQkKLQkJCSRFTlZ7cmVxdWVzdF9pZH0gPSAkcmVxdWVzdF9pZDsKLQkJCSRFTlZ7cmVzZXJ2YXRpb25faWR9ID0gMDsKLQkJCSRFTlZ7c3RhdGV9ID0gJHJlcXVlc3Rfc3RhdGVfbmFtZTsKKwkJCSRFTlYtPntyZXF1ZXN0X2lkfSA9ICRyZXF1ZXN0X2lkOworCQkJJEVOVi0+e3Jlc2VydmF0aW9uX2lkfSA9IDA7CisJCQkkRU5WLT57c3RhdGV9ID0gJHJlcXVlc3Rfc3RhdGVfbmFtZTsKIAkJCQogCQkJIyBNYWtlIHN1cmUgdGhlIHJlcXVlc3Qgc3RhdGUgaXMgdmFsaWQKIAkJCWlmICgkcmVxdWVzdF9zdGF0ZV9uYW1lICF+IC9pbnVzZXxyZXNlcnZlZHxkZWxldGVkfHRpbWVvdXR8cmVjbGFpbXxyZWxvYWR8bmV3fHRvbWFpbnRlbmFuY2V8aW1hZ2V8aW1hZ2VwcmVwfG1ha2Vwcm9kdWN0aW9ufGltYWdlaW51c2V8Y29tcGxldGV8ZmFpbGVkfHBlbmRpbmd8bWFpbnRlbmFuY2V8dG92bWhvc3RpbnVzZXxyZWJvb3Rzb2Z0fHJlYm9vdGhhcmR8cmVpbnN0YWxsfHNlcnZlcm1vZGlmaWVkfGNoZWNrcG9pbnR8dGVzdC8pIHsKQEAgLTIzNSwxMCArMjM1LDEwIEBACiAJCQkjPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAJCQkjIExvb3AgdGhyb3VnaCB0aGUgcmVzZXJ2YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHJlcXVlc3QKIAkJCVJFU0VSVkFUSU9OOiBmb3JlYWNoIG15ICRyZXNlcnZhdGlvbl9pZCAoQHJlc2VydmF0aW9uX2lkcykgewotCQkJCSRFTlZ7cmVzZXJ2YXRpb25faWR9ID0gJHJlc2VydmF0aW9uX2lkOwotCQkJCSRFTlZ7ZGF0YWJhc2Vfc2VsZWN0X2NvdW50fSA9IDA7Ci0JCQkJJEVOVntkYXRhYmFzZV9leGVjdXRlX2NvdW50fSA9IDA7Ci0JCQkJJEVOVntkYXRhYmFzZV9zZWxlY3RfY2FsbHN9ID0ge307CisJCQkJJEVOVi0+e3Jlc2VydmF0aW9uX2lkfSA9ICRyZXNlcnZhdGlvbl9pZDsKKwkJCQkkRU5WLT57ZGF0YWJhc2Vfc2VsZWN0X2NvdW50fSA9IDA7CisJCQkJJEVOVi0+e2RhdGFiYXNlX2V4ZWN1dGVfY291bnR9ID0gMDsKKwkJCQkkRU5WLT57ZGF0YWJhc2Vfc2VsZWN0X2NhbGxzfSA9IHt9OwogCQkJCQogCQkJCW15ICRyZXNlcnZhdGlvbl9pbmZvID0gJGluZm97cmVxdWVzdH17JHJlcXVlc3RfaWR9e3Jlc2VydmF0aW9ufXskcmVzZXJ2YXRpb25faWR9OwogCQkJCW15ICRyZXNlcnZhdGlvbl9tYW5hZ2VtZW50X25vZGVfaWQgPSAkcmVzZXJ2YXRpb25faW5mby0+e21hbmFnZW1lbnRub2RlaWR9OwpAQCAtMzM4LDcgKzMzOCw3IEBACiAJCQkJfQogCQkJCQogCQkJCSMgQWRkIHRoZSBEYXRhU3RydWN0dXJlIHJlZmVyZW5jZSB0byAlRU5WIHNvIGl0IGNhbiBiZSBhY2Nlc3NlZCBmcm9tIG5vbi1vYmplY3QgbWV0aG9kcwotCQkJCSRFTlZ7ZGF0YX0gPSAkZGF0YV9zdHJ1Y3R1cmU7CisJCQkJJEVOVi0+e2RhdGF9ID0gJGRhdGFfc3RydWN0dXJlOwogCQkJCQogCQkJCSMgUmVtb3ZlIGFueSBleGlzdGluZyAnZXhpdGVkJyBjb21wdXRlcmxvYWRsb2cgZW50cmllcwogCQkJCWRlbGV0ZV9jb21wdXRlcmxvYWRsb2dfcmVzZXJ2YXRpb24oJHJlc2VydmF0aW9uX2lkLCAnZXhpdGVkJyk7CkBAIC0zNTQsMTAgKzM1NCwxMCBAQAogCQkJfSAjIyBlbmQgZm9yZWFjaCBteSAkcmVzZXJ2YXRpb25faWQgKGtleXMgJXskaW5mb3tyZXF1ZXN0Li4uCiAJCX0gIyMgZW5kIGZvcmVhY2ggbXkgJHJlcXVlc3RfaWQgKGtleXMgJXskaW5mb3tyZXF1ZXN0fX0pCiAKLQkJZGVsZXRlICRFTlZ7cmVxdWVzdF9pZH07Ci0JCWRlbGV0ZSAkRU5We3Jlc2VydmF0aW9uX2lkfTsKLQkJZGVsZXRlICRFTlZ7c3RhdGV9OwotCQlkZWxldGUgJEVOVntkYXRhfTsKKwkJZGVsZXRlICRFTlYtPntyZXF1ZXN0X2lkfTsKKwkJZGVsZXRlICRFTlYtPntyZXNlcnZhdGlvbl9pZH07CisJCWRlbGV0ZSAkRU5WLT57c3RhdGV9OworCQlkZWxldGUgJEVOVi0+e2RhdGF9OwogCQkKIAkJIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCQkjIEdldCBhbGwgdGhlIGJsb2NrIHJlcXVlc3RzIGFzc2lnbmVkIHRvIHRoaXMgbWFuYWdlbWVudCBub2RlCkBAIC01NzEsMTAgKzU3MSwxMCBAQAogCQkJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sICRMT0dGSUxFLCAidmNsZCBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXQgdG8gJEVOVnt2Y2xkfSBmb3IgdGhpcyBwcm9jZXNzIik7CiAJCQkKIAkJCSMgU2V0IHRoZSByZXF1ZXN0X2lkIGFuZCByZXNlcnZhdGlvbl9pZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMKLQkJCSRFTlZ7cmVxdWVzdF9pZH0gICAgID0gJHJlcXVlc3RfaWQ7Ci0JCQkkRU5We3Jlc2VydmF0aW9uX2lkfSA9ICRyZXNlcnZhdGlvbl9pZCBpZiAkcmVzZXJ2YXRpb25faWQ7Ci0JCQkkRU5We3N0YXRlfSAgICAgICAgICA9ICRzdGF0ZTsKLQkJCSRFTlZ7ZGF0YX0gICAgICAgICAgID0gJGRhdGFfc3RydWN0dXJlOworCQkJJEVOVi0+e3JlcXVlc3RfaWR9ICAgICA9ICRyZXF1ZXN0X2lkOworCQkJJEVOVi0+e3Jlc2VydmF0aW9uX2lkfSA9ICRyZXNlcnZhdGlvbl9pZCBpZiAkcmVzZXJ2YXRpb25faWQ7CisJCQkkRU5WLT57c3RhdGV9ICAgICAgICAgID0gJHN0YXRlOworCQkJJEVOVi0+e2RhdGF9ICAgICAgICAgICA9ICRkYXRhX3N0cnVjdHVyZTsKIAkJCQogCQkJIyBSZW5hbWUgdGhpcyBwcm9jZXNzIHRvIGluY2x1ZGUgc29tZSByZXF1ZXN0IGluZm8KIAkJCXJlbmFtZV92Y2xkX3Byb2Nlc3MoJGRhdGFfc3RydWN0dXJlKTsKQEAgLTY3MSw4ICs2NzEsOCBAQAogCW5vdGlmeSgkRVJST1JTeydDUklUSUNBTCd9LCAkTE9HRklMRSwgIkBfIik7CiAJCiAJIyBQcmV2ZW50IHJlcXVlc3RzIHN0dWNrIGluIHBlbmRpbmcsIHRyeSB0byBzZXQgc3RhdGUgYmFjayB0byBvcmlnaW5hbAotCWlmICgkRU5We3JlcXVlc3RfaWR9ICYmICRFTlZ7c3RhdGV9KSB7Ci0JCXVwZGF0ZV9yZXF1ZXN0X3N0YXRlKCRFTlZ7cmVxdWVzdF9pZH0sICRFTlZ7c3RhdGV9LCAkRU5We3N0YXRlfSk7CisJaWYgKCRFTlYtPntyZXF1ZXN0X2lkfSAmJiAkRU5WLT57c3RhdGV9KSB7CisJCXVwZGF0ZV9yZXF1ZXN0X3N0YXRlKCRFTlYtPntyZXF1ZXN0X2lkfSwgJEVOVi0+e3N0YXRlfSwgJEVOVi0+e3N0YXRlfSk7CiAJfQogCQogCSMgUmVpbnN0YWxsIHRoZSBzaWduYWwgaGFuZGxlciBpbiBjYXNlIG9mIHVucmVsaWFibGUgc2lnbmFscwpAQCAtOTQxLDcgKzk0MSw3IEBACiAJCSMgU2V0IHRoZSBzZXR1cF9wYXRoIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGFub255bW91cyBhcnJheSBjb250YWluaW5nICd2Y2xkJwogCQkjIFRoaXMgaXMgdXNlZCB0byBkaXNwbGF5IHRoZSBsb2NhdGlvbiBpbiB0aGUgbWVudSBoaWVyYXJjaHkKIAkJIyBzdHJpbmdzIGFkZGVkL3JlbW92ZWQgdG8gdGhlIGFycmF5IGNhdXNlIHRoZSBsb2NhdGlvbiB0byBjaGFuZ2UKLQkJJEVOVntzZXR1cF9wYXRofSA9IFsndmNsZCddOworCQkkRU5WLT57c2V0dXBfcGF0aH0gPSBbJ3ZjbGQnXTsKIAkJCiAJCXNldHVwX3ByaW50X2JyZWFrKCk7CiAJCW15ICRjaG9pY2UgPSBzZXR1cF9nZXRfbWVudV9jaG9pY2UoXCVzZXR1cF9tZW51KTsKQEAgLTk1OCwxNCArOTU4LDE0IEBACiAJCW15ICRjaG9pY2Vfc3ViX3JlZiA9ICRjaG9pY2UtPntzdWJfcmVmfTsKIAkJbXkgJGNob2ljZV9wYXJlbnRfbWVudV9uYW1lcyA9ICRjaG9pY2UtPntwYXJlbnRfbWVudV9uYW1lc307CiAJCQotCQlwdXNoIEB7JEVOVntzZXR1cF9wYXRofX0sIEAkY2hvaWNlX3BhcmVudF9tZW51X25hbWVzLCAkY2hvaWNlX25hbWU7CisJCXB1c2ggQHskRU5WLT57c2V0dXBfcGF0aH19LCBAJGNob2ljZV9wYXJlbnRfbWVudV9uYW1lcywgJGNob2ljZV9uYW1lOwogCQkKIAkJbXkgJHBhY2thZ2VfbmFtZSA9IGdldF9jb2RlX3JlZl9wYWNrYWdlX25hbWUoJGNob2ljZV9zdWJfcmVmKTsKIAkJbXkgJHN1YnJvdXRpbmVfbmFtZSA9IGdldF9jb2RlX3JlZl9zdWJyb3V0aW5lX25hbWUoJGNob2ljZV9zdWJfcmVmKTsKIAkJCiAJCW15ICRtb2R1bGVfb2JqZWN0ID0gJHNldHVwX21vZHVsZV9vYmplY3RzeyRwYWNrYWdlX25hbWV9e29iamVjdH07CiAJCSYkY2hvaWNlX3N1Yl9yZWYoJG1vZHVsZV9vYmplY3QpOwotCQlwb3AgQHskRU5We3NldHVwX3BhdGh9fTsKKwkJcG9wIEB7JEVOVi0+e3NldHVwX3BhdGh9fTsKIAl9CiAJCiAJc2V0dXBfcHJpbnRfYnJlYWsoJz0nKTsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvRGF0YVN0cnVjdHVyZS5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvRGF0YVN0cnVjdHVyZS5wbQppbmRleCA1NThjMDlmLi5jOTgxYmQ0IDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML0RhdGFTdHJ1Y3R1cmUucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9EYXRhU3RydWN0dXJlLnBtCkBAIC00ODMsMzggKzQ4MywzOCBAQAogJFNVQlJPVVRJTkVfTUFQUElOR1N7dXNlcl91c2VfcHVibGljX2tleXN9ID0gJyRzZWxmLT5yZXF1ZXN0X2RhdGEtPnt1c2VyfXt1c2VwdWJsaWNrZXlzfSc7CiAkU1VCUk9VVElORV9NQVBQSU5HU3t1c2VyX3NzaF9wdWJsaWNfa2V5c30gPSAnJHNlbGYtPnJlcXVlc3RfZGF0YS0+e3VzZXJ9e3NzaHB1YmxpY2tleXN9JzsKIAotJFNVQlJPVVRJTkVfTUFQUElOR1N7bWFuYWdlbWVudF9ub2RlX2lkfSA9ICckRU5We21hbmFnZW1lbnRfbm9kZV9pbmZvfXtpZH0nOwotJFNVQlJPVVRJTkVfTUFQUElOR1N7bWFuYWdlbWVudF9ub2RlX2lwYWRkcmVzc30gPSAnJEVOVnttYW5hZ2VtZW50X25vZGVfaW5mb317SVBhZGRyZXNzfSc7Ci0kU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfaG9zdG5hbWV9ID0gJyRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99e2hvc3RuYW1lfSc7Ci0kU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfb3duZXJpZH0gPSAnJEVOVnttYW5hZ2VtZW50X25vZGVfaW5mb317b3duZXJpZH0nOwotJFNVQlJPVVRJTkVfTUFQUElOR1N7bWFuYWdlbWVudF9ub2RlX3N0YXRlaWR9ID0gJyRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99e3N0YXRlaWR9JzsKLSRTVUJST1VUSU5FX01BUFBJTkdTe21hbmFnZW1lbnRfbm9kZV9sYXN0Y2hlY2tpbn0gPSAnJEVOVnttYW5hZ2VtZW50X25vZGVfaW5mb317bGFzdGNoZWNraW59JzsKLSRTVUJST1VUSU5FX01BUFBJTkdTe21hbmFnZW1lbnRfbm9kZV9jaGVja2luaW50ZXJ2YWx9ID0gJyRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99e2NoZWNraW5pbnRlcnZhbH0nOwotJFNVQlJPVVRJTkVfTUFQUElOR1N7bWFuYWdlbWVudF9ub2RlX2luc3RhbGxfcGF0aH0gPSAnJEVOVnttYW5hZ2VtZW50X25vZGVfaW5mb317aW5zdGFsbHBhdGh9JzsKLSRTVUJST1VUSU5FX01BUFBJTkdTe21hbmFnZW1lbnRfbm9kZV9pbWFnZV9saWJfZW5hYmxlfSA9ICckRU5We21hbmFnZW1lbnRfbm9kZV9pbmZvfXtpbWFnZWxpYmVuYWJsZX0nOwotJFNVQlJPVVRJTkVfTUFQUElOR1N7bWFuYWdlbWVudF9ub2RlX2ltYWdlX2xpYl9ncm91cF9pZH0gPSAnJEVOVnttYW5hZ2VtZW50X25vZGVfaW5mb317aW1hZ2VsaWJncm91cGlkfSc7Ci0kU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfaW1hZ2VfbGliX3VzZXJ9ID0gJyRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99e2ltYWdlbGlidXNlcn0nOwotJFNVQlJPVVRJTkVfTUFQUElOR1N7bWFuYWdlbWVudF9ub2RlX2ltYWdlX2xpYl9rZXl9ID0gJyRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99e2ltYWdlbGlia2V5fSc7Ci0kU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfa2V5c30gPSAnJEVOVnttYW5hZ2VtZW50X25vZGVfaW5mb317a2V5c30nOwotJFNVQlJPVVRJTkVfTUFQUElOR1N7bWFuYWdlbWVudF9ub2RlX2ltYWdlX2xpYl9wYXJ0bmVyc30gPSAnJEVOVnttYW5hZ2VtZW50X25vZGVfaW5mb317SU1BR0VMSUJQQVJUTkVSU30nOwotJFNVQlJPVVRJTkVfTUFQUElOR1N7bWFuYWdlbWVudF9ub2RlX3Nob3J0X25hbWV9ID0gJyRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99e1NIT1JUTkFNRX0nOwotJFNVQlJPVVRJTkVfTUFQUElOR1N7bWFuYWdlbWVudF9ub2RlX3N0YXRlX25hbWV9ID0gJyRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99e3N0YXRlfXtuYW1lfSc7Ci0kU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfb3NfbmFtZX0gPSAnJEVOVnttYW5hZ2VtZW50X25vZGVfaW5mb317T1NOQU1FfSc7Ci0kU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfcHJlZGljdGl2ZV9tb2R1bGVfaWR9ID0gJyRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99e3ByZWRpY3RpdmVtb2R1bGVpZH0nOwotJFNVQlJPVVRJTkVfTUFQUElOR1N7bWFuYWdlbWVudF9ub2RlX3NzaF9wb3J0fSA9ICckRU5We21hbmFnZW1lbnRfbm9kZV9pbmZvfXtzc2hwb3J0fSc7CiskU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfaWR9ID0gJyRFTlYtPnttYW5hZ2VtZW50X25vZGVfaW5mb30tPntpZH0nOworJFNVQlJPVVRJTkVfTUFQUElOR1N7bWFuYWdlbWVudF9ub2RlX2lwYWRkcmVzc30gPSAnJEVOVi0+e21hbmFnZW1lbnRfbm9kZV9pbmZvfS0+e0lQYWRkcmVzc30nOworJFNVQlJPVVRJTkVfTUFQUElOR1N7bWFuYWdlbWVudF9ub2RlX2hvc3RuYW1lfSA9ICckRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99LT57aG9zdG5hbWV9JzsKKyRTVUJST1VUSU5FX01BUFBJTkdTe21hbmFnZW1lbnRfbm9kZV9vd25lcmlkfSA9ICckRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99LT57b3duZXJpZH0nOworJFNVQlJPVVRJTkVfTUFQUElOR1N7bWFuYWdlbWVudF9ub2RlX3N0YXRlaWR9ID0gJyRFTlYtPnttYW5hZ2VtZW50X25vZGVfaW5mb30tPntzdGF0ZWlkfSc7CiskU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfbGFzdGNoZWNraW59ID0gJyRFTlYtPnttYW5hZ2VtZW50X25vZGVfaW5mb30tPntsYXN0Y2hlY2tpbn0nOworJFNVQlJPVVRJTkVfTUFQUElOR1N7bWFuYWdlbWVudF9ub2RlX2NoZWNraW5pbnRlcnZhbH0gPSAnJEVOVi0+e21hbmFnZW1lbnRfbm9kZV9pbmZvfS0+e2NoZWNraW5pbnRlcnZhbH0nOworJFNVQlJPVVRJTkVfTUFQUElOR1N7bWFuYWdlbWVudF9ub2RlX2luc3RhbGxfcGF0aH0gPSAnJEVOVi0+e21hbmFnZW1lbnRfbm9kZV9pbmZvfS0+e2luc3RhbGxwYXRofSc7CiskU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfaW1hZ2VfbGliX2VuYWJsZX0gPSAnJEVOVi0+e21hbmFnZW1lbnRfbm9kZV9pbmZvfS0+e2ltYWdlbGliZW5hYmxlfSc7CiskU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfaW1hZ2VfbGliX2dyb3VwX2lkfSA9ICckRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99LT57aW1hZ2VsaWJncm91cGlkfSc7CiskU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfaW1hZ2VfbGliX3VzZXJ9ID0gJyRFTlYtPnttYW5hZ2VtZW50X25vZGVfaW5mb30tPntpbWFnZWxpYnVzZXJ9JzsKKyRTVUJST1VUSU5FX01BUFBJTkdTe21hbmFnZW1lbnRfbm9kZV9pbWFnZV9saWJfa2V5fSA9ICckRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99LT57aW1hZ2VsaWJrZXl9JzsKKyRTVUJST1VUSU5FX01BUFBJTkdTe21hbmFnZW1lbnRfbm9kZV9rZXlzfSA9ICckRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99LT57a2V5c30nOworJFNVQlJPVVRJTkVfTUFQUElOR1N7bWFuYWdlbWVudF9ub2RlX2ltYWdlX2xpYl9wYXJ0bmVyc30gPSAnJEVOVi0+e21hbmFnZW1lbnRfbm9kZV9pbmZvfS0+e0lNQUdFTElCUEFSVE5FUlN9JzsKKyRTVUJST1VUSU5FX01BUFBJTkdTe21hbmFnZW1lbnRfbm9kZV9zaG9ydF9uYW1lfSA9ICckRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99LT57U0hPUlROQU1FfSc7CiskU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfc3RhdGVfbmFtZX0gPSAnJEVOVi0+e21hbmFnZW1lbnRfbm9kZV9pbmZvfS0+e3N0YXRlfS0+e25hbWV9JzsKKyRTVUJST1VUSU5FX01BUFBJTkdTe21hbmFnZW1lbnRfbm9kZV9vc19uYW1lfSA9ICckRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99LT57T1NOQU1FfSc7CiskU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfcHJlZGljdGl2ZV9tb2R1bGVfaWR9ID0gJyRFTlYtPnttYW5hZ2VtZW50X25vZGVfaW5mb30tPntwcmVkaWN0aXZlbW9kdWxlaWR9JzsKKyRTVUJST1VUSU5FX01BUFBJTkdTe21hbmFnZW1lbnRfbm9kZV9zc2hfcG9ydH0gPSAnJEVOVi0+e21hbmFnZW1lbnRfbm9kZV9pbmZvfS0+e3NzaHBvcnR9JzsKIAotJFNVQlJPVVRJTkVfTUFQUElOR1N7bWFuYWdlbWVudF9ub2RlX3B1YmxpY19pcF9jb25maWd1cmF0aW9ufSA9ICckRU5We21hbmFnZW1lbnRfbm9kZV9pbmZvfXtQVUJMSUNfSVBfQ09ORklHVVJBVElPTn0nOwotJFNVQlJPVVRJTkVfTUFQUElOR1N7bWFuYWdlbWVudF9ub2RlX3B1YmxpY19zdWJuZXRfbWFza30gPSAnJEVOVnttYW5hZ2VtZW50X25vZGVfaW5mb317UFVCTElDX1NVQk5FVF9NQVNLfSc7CiskU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfcHVibGljX2lwX2NvbmZpZ3VyYXRpb259ID0gJyRFTlYtPnttYW5hZ2VtZW50X25vZGVfaW5mb30tPntQVUJMSUNfSVBfQ09ORklHVVJBVElPTn0nOworJFNVQlJPVVRJTkVfTUFQUElOR1N7bWFuYWdlbWVudF9ub2RlX3B1YmxpY19zdWJuZXRfbWFza30gPSAnJEVOVi0+e21hbmFnZW1lbnRfbm9kZV9pbmZvfS0+e1BVQkxJQ19TVUJORVRfTUFTS30nOwogIyRTVUJST1VUSU5FX01BUFBJTkdTe21hbmFnZW1lbnRfbm9kZV9wdWJsaWNfZGVmYXVsdF9nYXRld2F5fSA9ICckRU5We21hbmFnZW1lbnRfbm9kZV9pbmZvfXtQVUJMSUNfREVGQVVMVF9HQVRFV0FZfSc7Ci0kU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfcHVibGljX2Ruc19zZXJ2ZXJ9ID0gJyRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99e1BVQkxJQ19ETlNfU0VSVkVSfSc7CiskU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfcHVibGljX2Ruc19zZXJ2ZXJ9ID0gJyRFTlYtPnttYW5hZ2VtZW50X25vZGVfaW5mb30tPntQVUJMSUNfRE5TX1NFUlZFUn0nOwogCi0kU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfc3lzYWRtaW5fZW1haWx9CT0gJyRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99e1NZU0FETUlOX0VNQUlMfSc7Ci0kU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfc2hhcmVkX2VtYWlsX2JveH0gPSAnJEVOVnttYW5hZ2VtZW50X25vZGVfaW5mb317U0hBUkVEX0VNQUlMX0JPWH0nOworJFNVQlJPVVRJTkVfTUFQUElOR1N7bWFuYWdlbWVudF9ub2RlX3N5c2FkbWluX2VtYWlsfQk9ICckRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99LT57U1lTQURNSU5fRU1BSUx9JzsKKyRTVUJST1VUSU5FX01BUFBJTkdTe21hbmFnZW1lbnRfbm9kZV9zaGFyZWRfZW1haWxfYm94fSA9ICckRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99LT57U0hBUkVEX0VNQUlMX0JPWH0nOwogCi0kU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfcHJlZGljdGl2ZV9tb2R1bGVfbmFtZX0gPSAnJEVOVnttYW5hZ2VtZW50X25vZGVfaW5mb317cHJlZGljdGl2ZV9uYW1lfSc7Ci0kU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfcHJlZGljdGl2ZV9tb2R1bGVfcHJldHR5X25hbWV9ID0gJyRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99e3ByZWRpY3RpdmVfcHJldHR5bmFtZX0nOwotJFNVQlJPVVRJTkVfTUFQUElOR1N7bWFuYWdlbWVudF9ub2RlX3ByZWRpY3RpdmVfbW9kdWxlX2Rlc2NyaXB0aW9ufSA9ICckRU5We21hbmFnZW1lbnRfbm9kZV9pbmZvfXtwcmVkaWN0aXZlX2Rlc2NyaXB0aW9ufSc7Ci0kU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfcHJlZGljdGl2ZV9tb2R1bGVfcGVybF9wYWNrYWdlfSA9ICckRU5We21hbmFnZW1lbnRfbm9kZV9pbmZvfXtwcmVkaWN0aXZlX3BlcmxwYWNrYWdlfSc7CiskU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfcHJlZGljdGl2ZV9tb2R1bGVfbmFtZX0gPSAnJEVOVi0+e21hbmFnZW1lbnRfbm9kZV9pbmZvfS0+e3ByZWRpY3RpdmVfbmFtZX0nOworJFNVQlJPVVRJTkVfTUFQUElOR1N7bWFuYWdlbWVudF9ub2RlX3ByZWRpY3RpdmVfbW9kdWxlX3ByZXR0eV9uYW1lfSA9ICckRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99LT57cHJlZGljdGl2ZV9wcmV0dHluYW1lfSc7CiskU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfcHJlZGljdGl2ZV9tb2R1bGVfZGVzY3JpcHRpb259ID0gJyRFTlYtPnttYW5hZ2VtZW50X25vZGVfaW5mb30tPntwcmVkaWN0aXZlX2Rlc2NyaXB0aW9ufSc7CiskU1VCUk9VVElORV9NQVBQSU5HU3ttYW5hZ2VtZW50X25vZGVfcHJlZGljdGl2ZV9tb2R1bGVfcGVybF9wYWNrYWdlfSA9ICckRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99LT57cHJlZGljdGl2ZV9wZXJscGFja2FnZX0nOwogCiAkU1VCUk9VVElORV9NQVBQSU5HU3tzdWJyb3V0aW5lX21hcHBpbmdzfSA9ICdcJVNVQlJPVVRJTkVfTUFQUElOR1MnOwogCkBAIC04ODksMTQgKzg4OSwxNCBAQAogCQkJCXJldHVybiBzdWIgeyB9OwogCQkJfQogCQkJCi0JCQkjIFRoZSBub3JtYWwgcmVzZXJ2YXRpb24gbWFuYWdlbWVudCBub2RlIGRhdGEgaXMgc3RvcmVkIGluICRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99ezxpZGVudGlmaWVyPn0KKwkJCSMgVGhlIG5vcm1hbCByZXNlcnZhdGlvbiBtYW5hZ2VtZW50IG5vZGUgZGF0YSBpcyBzdG9yZWQgaW4gJEVOVi0+e21hbmFnZW1lbnRfbm9kZV9pbmZvfS0+ezxpZGVudGlmaWVyPn0KIAkJCSMgV2UgZG9uJ3Qgd2FudCB0byBvdmVyd3JpdGUgdGhpcywgYnV0IHdhbnQgdG8gdGVtcG9yYXJpbHkgc3RvcmUgdGhlIGRhdGEgcmV0cmlldmVkCiAJCQkjIFRoaXMgYWxsb3dzIHRoZSAkaGFzaF9wYXRoIG1lY2hhbmlzbSB0byB3b3JrIHdpdGhvdXQgYWx0ZXJhdGlvbnMKIAkJCSMgVGVtcG9yYXJpbHkgb3ZlcndyaXRlIHRoaXMgZGF0YSBieSB1c2luZyAnbG9jYWwnLCBhbmQgc2V0IGl0IHRvIHRoZSBkYXRhIGp1c3QgcmV0cmlldmVkCi0JCQkjIE9uY2UgdGhlIGN1cnJlbnQgc2NvcGUgaXMgZXhpdGVkLCAkRU5We21hbmFnZW1lbnRfbm9kZV9pbmZvfSB3aWxsIHJldHVybiB0byBpdHMgb3JpZ2luYWwgdmFsdWUKLQkJCWxvY2FsICRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99ID0gJG1hbmFnZW1lbnRfbm9kZV9pbmZvX3JldHJpZXZlZDsKKwkJCSMgT25jZSB0aGUgY3VycmVudCBzY29wZSBpcyBleGl0ZWQsICRFTlYtPnttYW5hZ2VtZW50X25vZGVfaW5mb30gd2lsbCByZXR1cm4gdG8gaXRzIG9yaWdpbmFsIHZhbHVlCisJCQlsb2NhbCAkRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99ID0gJG1hbmFnZW1lbnRfbm9kZV9pbmZvX3JldHJpZXZlZDsKIAkJCQotCQkJIyBBdHRlbXB0IHRvIHJldHJpZXZlIHRoZSB2YWx1ZSBmcm9tIHRoZSB0ZW1wb3JhcnkgZGF0YTogJEVOVnttYW5hZ2VtZW50X25vZGVfaW5mb317S0VZfQorCQkJIyBBdHRlbXB0IHRvIHJldHJpZXZlIHRoZSB2YWx1ZSBmcm9tIHRoZSB0ZW1wb3JhcnkgZGF0YTogJEVOVi0+e21hbmFnZW1lbnRfbm9kZV9pbmZvfS0+e0tFWX0KIAkJCSRyZXR1cm5fdmFsdWUgPSBldmFsICRoYXNoX3BhdGg7CiAJCX0KIAkJZWxzaWYgKCEka2V5X2RlZmluZWQpIHsKQEAgLTE0MzgsNyArMTQzOCw3IEBACiAJbXkgJHNlbGYgPSBzaGlmdDsKIAogCW15ICRyZXF1ZXN0X2RhdGEgICAgICAgICA9IGZvcm1hdF9kYXRhKCRzZWxmLT5yZXF1ZXN0X2RhdGEsICAgICAgICAncmVxdWVzdCcpOwotCW15ICRtYW5hZ2VtZW50X25vZGVfaW5mbyA9IGZvcm1hdF9kYXRhKCRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99LCAnbWFuYWdlbWVudF9ub2RlJyk7CisJbXkgJG1hbmFnZW1lbnRfbm9kZV9pbmZvID0gZm9ybWF0X2RhdGEoJEVOVi0+e21hbmFnZW1lbnRfbm9kZV9pbmZvfSwgJ21hbmFnZW1lbnRfbm9kZScpOwogCiAJbm90aWZ5KCRFUlJPUlN7J09LJ30sIDAsICJyZXF1ZXN0IGRhdGE6XG4kcmVxdWVzdF9kYXRhXG5cbm1hbmFnZW1lbnQgbm9kZSBpbmZvOlxuJG1hbmFnZW1lbnRfbm9kZV9pbmZvIik7CiB9CkBAIC0xNDYwLDcgKzE0NjAsNyBAQAogCWZvcmVhY2ggbXkgJG1hcHBpbmdfa2V5IChzb3J0IGtleXMgJVNVQlJPVVRJTkVfTUFQUElOR1MpIHsKIAkJbXkgJG1hcHBpbmdfdmFsdWUgPSAkU1VCUk9VVElORV9NQVBQSU5HU3skbWFwcGluZ19rZXl9OwogCQkkbWFwcGluZ192YWx1ZSA9fiBzL15cJHNlbGYtPnJlcXVlc3RfZGF0YS0+L1wlcmVxdWVzdC87Ci0JCSRtYXBwaW5nX3ZhbHVlID1+IHMvXlwkRU5We21hbmFnZW1lbnRfbm9kZV9pbmZvfS9cJW1hbmFnZW1lbnRfbm9kZS87CisJCSRtYXBwaW5nX3ZhbHVlID1+IHMvXlwkRU5WXHttYW5hZ2VtZW50X25vZGVfaW5mb1x9L1wlbWFuYWdlbWVudF9ub2RlLzsKIAkJJG91dHB1dCAuPSAiZ2V0XyRtYXBwaW5nX2tleSgpIDogJG1hcHBpbmdfdmFsdWVcbiI7CiAJfQogCkBAIC0xNTczLDcgKzE1NzMsNyBAQAogCQogCSMgQ2hlY2sgaWYgdGhlIElQIGFkZHJlc3MgaXMgYWxyZWFkeSBzdG9yZWQKIAlteSAkZGF0YV9zdHJ1Y3R1cmVfcHJpdmF0ZV9pcF9hZGRyZXNzID0gJHNlbGYtPnJlcXVlc3RfZGF0YS0+e3Jlc2VydmF0aW9ufXskc2VsZi0+cmVzZXJ2YXRpb25faWR9e2NvbXB1dGVyfXtwcml2YXRlSVBhZGRyZXNzfTsKLQlteSAkZW52X3ByaXZhdGVfaXBfYWRkcmVzcyA9ICRFTlZ7Y29tcHV0ZXJfcHJpdmF0ZV9pcF9hZGRyZXNzfXskY29tcHV0ZXJfaWR9OworCW15ICRlbnZfcHJpdmF0ZV9pcF9hZGRyZXNzID0gJEVOVi0+e2NvbXB1dGVyX3ByaXZhdGVfaXBfYWRkcmVzc30tPnskY29tcHV0ZXJfaWR9OwogCQogCSMgQ2hlY2sgaWYgcHJpdmF0ZSBJUCBhZGRkcmVzcyBpcyBzdG9yZWQgaW4gJUVOViBhbmQgZGlmZmVycyBmcm9tIHRoaXMgb2JqZWN0J3MgZGF0YQogCWlmICgkZGF0YV9zdHJ1Y3R1cmVfcHJpdmF0ZV9pcF9hZGRyZXNzKSB7CmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlLnBtCmluZGV4IGVhNzUwZmUuLjQ3N2Q1NjAgMTAwNjQ0Ci0tLSBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlLnBtCisrKyBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlLnBtCkBAIC0xMDA3LDE0ICsxMDA3LDE0IEBACiAJCSRkaXNwbGF5X3dhcm5pbmcgPSAxOwogCX0KIAkKLQlpZiAoISRFTlZ7bW5fb3N9KSB7CisJaWYgKCEkRU5WLT57bW5fb3N9KSB7CiAJCWlmICgkZGlzcGxheV93YXJuaW5nKSB7Ci0JCQlub3RpZnkoJEVSUk9SU3snV0FSTklORyd9LCAwLCAidW5hYmxlIHRvIHJldHVybiBtYW5hZ2VtZW50IG5vZGUgT1Mgb2JqZWN0LCBcJEVOVnttbl9vc30gaXMgbm90IHNldCIpOworCQkJbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgInVuYWJsZSB0byByZXR1cm4gbWFuYWdlbWVudCBub2RlIE9TIG9iamVjdCwgXCRFTlYtPnttbl9vc30gaXMgbm90IHNldCIpOwogCQl9CiAJCXJldHVybjsKIAl9CiAJZWxzZSB7Ci0JCXJldHVybiAkRU5We21uX29zfTsKKwkJcmV0dXJuICRFTlYtPnttbl9vc307CiAJfQogfQogCkBAIC0xMTc1LDcgKzExNzUsNyBAQAogCW15ICR0eXBlID0gcmVmKCRzZWxmKTsKIAlteSAkbW5fb3NfYWRkcmVzcyA9IHNwcmludGYoJyV4JywgJG1uX29zKTsKIAlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgInN0b3JpbmcgcmVmZXJlbmNlIHRvIG1hbmFnbWVudCBub2RlIE9TIG9iamVjdCAoYWRkcmVzczogJG1uX29zX2FkZHJlc3MpIGluIHRoaXMgJHR5cGUgb2JqZWN0IChhZGRyZXNzOiAkYWRkcmVzcykiKTsKLQkkRU5We21uX29zfSA9ICRtbl9vczsKKwkkRU5WLT57bW5fb3N9ID0gJG1uX29zOwogCXJldHVybiAxOwogfQogCkBAIC0yMjc1LDI2ICsyMjc1LDI2IEBACiAJfQogCQogCQotCWlmICghJEVOVntycGNfeG1sX2Vycm9yfSkgeworCWlmICghJEVOVi0+e3JwY194bWxfZXJyb3J9KSB7CiAJCXByaW50ICJGQUlMVVJFOiBSUEMtWE1MIGFjY2VzcyBpcyBub3QgY29uZmlndXJlZCBjb3JyZWN0bHksIHZpZXcgdGhlIGxvZyBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uOiAkTE9HRklMRVxuIjsKIAkJcmV0dXJuIDA7CiAJfQogCQotCXByaW50ICJGQUlMVVJFOiBSUEMtWE1MIGFjY2VzcyBpcyBub3QgY29uZmlndXJlZCBjb3JyZWN0bHksIGVycm9yIG1lc3NhZ2U6XG4kRU5We3JwY194bWxfZXJyb3J9XG5cbiI7CisJcHJpbnQgIkZBSUxVUkU6IFJQQy1YTUwgYWNjZXNzIGlzIG5vdCBjb25maWd1cmVkIGNvcnJlY3RseSwgZXJyb3IgbWVzc2FnZTpcbiRFTlYtPntycGNfeG1sX2Vycm9yfVxuXG4iOwogCQotCWlmICgkRU5We3JwY194bWxfZXJyb3J9ID1+IC9hY2Nlc3MgZGVuaWVkL2kpIHsKKwlpZiAoJEVOVi0+e3JwY194bWxfZXJyb3J9ID1+IC9hY2Nlc3MgZGVuaWVkL2kpIHsKIAkJIyBBZmZpbGlhdGlvbiBub3QgY29ycmVjdAogCQkjIEFmZmlsaWF0aW9uIG5vdCBpbmNsdWRlZCwgZGVmYXVsdCBhZmZpbGlhdGlvbiBpc24ndCBMb2NhbAogCQkjIEluY29ycmVjdCBwYXNzd29yZAogCQlwcmludCAiU1VHR0VTVElPTjogbWFrZSBzdXJlIHRoZSB4bWxycGNfdXNlcm5hbWUgYW5kIHhtbHJwY19wYXNzIHZhbHVlcyBhcmUgY29ycmVjdCBpbiAkQ09ORl9GSUxFX1BBVEhcbiI7CiAJfQotCWlmICgkRU5We3JwY194bWxfZXJyb3J9ID1+IC9pbnRlcm5hbCBzZXJ2ZXIgZXJyb3IvaSkgeworCWlmICgkRU5WLT57cnBjX3htbF9lcnJvcn0gPX4gL2ludGVybmFsIHNlcnZlciBlcnJvci9pKSB7CiAJCSMgQWZmaWxpYXRpb24gbm90IGluY2x1ZGVkIGluIHVzZXJuYW1lCiAJCSMgVXNlciBkb2Vzbid0IGV4aXN0IGJ1dCBhZmZpbGlhdGlvbiBkb2VzCiAJCSMgQWZmaWxpYXRpb24gZG9lcyBub3QgZXhpc3QKIAkJcHJpbnQgIlNVR0dFU1RJT046ICBtYWtlIHN1cmUgdGhlIHhtbHJwY191c2VybmFtZSBpcyBjb3JyZWN0IGluICRDT05GX0ZJTEVfUEFUSCwgY3VycmVudCB2YWx1ZTogJyRYTUxSUENfVVNFUidcbiI7CiAJfQotCWlmICgkRU5We3JwY194bWxfZXJyb3J9ID1+IC9pbnRlcm5hbCBlcnJvciB3aGlsZSBwcm9jZXNzaW5nL2kpIHsKKwlpZiAoJEVOVi0+e3JwY194bWxfZXJyb3J9ID1+IC9pbnRlcm5hbCBlcnJvciB3aGlsZSBwcm9jZXNzaW5nL2kpIHsKIAkJIyBBZmZpbGlhdGlvbiBub3QgaW5jbHVkZWQgaW4gdXNlcm5hbWUKIAkJIyBVc2VyIGRvZXNuJ3QgZXhpc3QgYnV0IGFmZmlsaWF0aW9uIGRvZXMKIAkJIyBBZmZpbGlhdGlvbiBkb2VzIG5vdCBleGlzdApkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MucG0gYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy5wbQppbmRleCBmYjBkNmVjLi5iNTc0N2ViIDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy5wbQorKysgYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy5wbQpAQCAtNTMsNyArNTMsOCBAQAogdXNlIGRpYWdub3N0aWNzOwogdXNlIEVuZ2xpc2ggJy1ub19tYXRjaF92YXJzJzsKIHVzZSBGaWxlOjpUZW1wIHF3KHRlbXBkaXIpOwotdXNlIFBPU0lYIHF3KHRtcG5hbSk7CisjdXNlIFBPU0lYIHF3KHRtcG5hbSk7Cit1c2UgRmlsZTo6VGVtcCBxdy8gOlBPU0lYIC87CiB1c2UgTmV0OjpTU0g6OkV4cGVjdDsKIHVzZSBMaXN0OjpVdGlsIHF3KG1pbiBtYXgpOwogCkBAIC0zMjQzLDcgKzMyNDQsNyBAQAogCX0KIAkKIAkjIFRFU1RJTkc6IHVzZSB0aGUgbmV3IHN1YnJvdXRpbmUgaWYgJEVOVntleGVjdXRlX25ld30gaXMgc2V0IGFuZCB0aGUgY29tbWFuZCBpc24ndCBvbmUgdGhhdCdzIGtub3duIHRvIGZhaWwgd2l0aCB0aGUgbmV3IHN1YnJvdXRpbmUKLQlpZiAoJEVOVntleGVjdXRlX25ld30gJiYgISRub19wZXJzaXN0ZW50X2Nvbm5lY3Rpb24pIHsKKwlpZiAoJEVOVi0+e2V4ZWN1dGVfbmV3fSAmJiAhJG5vX3BlcnNpc3RlbnRfY29ubmVjdGlvbikgewogCQlteSBAZXhjbHVkZWRfY29tbWFuZHMgPSAkY29tbWFuZCA9fiAvKHZta2ZzdG9vbHN8cWVtdS1pbWd8Q29udmVydC1WSER8c2NwfHNodXRkb3dufHJlYm9vdCkvaTsKIAkJaWYgKEBleGNsdWRlZF9jb21tYW5kcykgewogCQkJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJub3QgdXNpbmcgZXhlY3V0ZV9uZXcsIGNvbW1hbmQ6ICRjb21tYW5kXG5leGNsdWRlZCBjb21tYW5kcyBtYXRjaGVkOlxuIiAuIGpvaW4oIlxuIiwgQGV4Y2x1ZGVkX2NvbW1hbmRzKSk7CkBAIC0zNDMzLDcgKzM0MzQsNyBAQAogCQlpZiAoJGF0dGVtcHQgPiAwKSB7CiAJCQkkYXR0ZW1wdF9zdHJpbmcgPSAiYXR0ZW1wdCAkYXR0ZW1wdC8kbWF4X2F0dGVtcHRzOiAiOwogCQkJJHNzaC0+Y2xvc2UoKSBpZiAkc3NoOwotCQkJZGVsZXRlICRFTlZ7bmV0X3NzaF9leHBlY3R9eyRyZW1vdGVfY29ubmVjdGlvbl90YXJnZXR9OworCQkJZGVsZXRlICRFTlYtPntuZXRfc3NoX2V4cGVjdH0tPnskcmVtb3RlX2Nvbm5lY3Rpb25fdGFyZ2V0fTsKIAkJCQogCQkJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICRhdHRlbXB0X3N0cmluZyAuICJzbGVlcGluZyBmb3IgJGF0dGVtcHRfZGVsYXkgc2Vjb25kcyBiZWZvcmUgbWFraW5nIG5leHQgYXR0ZW1wdCIpOwogCQkJc2xlZXAgJGF0dGVtcHRfZGVsYXk7CkBAIC0zNDQ2LDcgKzM0NDcsNyBAQAogCQkjIFVzZSBhIGZsYWcgdG8gZGV0ZXJtaW5lIGlmIG51bGwgc2hvdWxkIGJlIHJldHVybmVkIHdpdGhvdXQgbWFraW5nIGFub3RoZXIgYXR0ZW1wdAogCQlteSAkcmV0dXJuX251bGw7CiAJCQotCQlpZiAoISRFTlZ7bmV0X3NzaF9leHBlY3R9eyRyZW1vdGVfY29ubmVjdGlvbl90YXJnZXR9KSB7CisJCWlmICghJEVOVi0+e25ldF9zc2hfZXhwZWN0fS0+eyRyZW1vdGVfY29ubmVjdGlvbl90YXJnZXR9KSB7CiAJCQlldmFsIHsKIAkJCQlteSAkZXhwZWN0X29wdGlvbnMgPSB7CiAJCQkJCWhvc3QgPT4gJHJlbW90ZV9jb25uZWN0aW9uX3RhcmdldCwKQEAgLTM1MTYsMTEgKzM1MTcsMTEgQEAKIAkJCX0KIAkJfQogCQllbHNlIHsKLQkJCSRzc2ggPSAkRU5We25ldF9zc2hfZXhwZWN0fXskcmVtb3RlX2Nvbm5lY3Rpb25fdGFyZ2V0fTsKKwkJCSRzc2ggPSAkRU5WLT57bmV0X3NzaF9leHBlY3R9LT57JHJlbW90ZV9jb25uZWN0aW9uX3RhcmdldH07CiAJCQkKIAkJCSMgRGVsZXRlIHRoZSBzdG9yZWQgU1NIIG9iamVjdCB0byBtYWtlIHN1cmUgaXQgaXNuJ3Qgc2F2ZWQgaWYgdGhlIGNvbW1hbmQgZmFpbHMKIAkJCSMgVGhlIFNTSCBvYmplY3Qgd2lsbCBiZSBhZGRlZCBiYWNrIHRvICVFTlYgaWYgdGhlIGNvbW1hbmQgY29tcGxldGVzIHN1Y2Nlc3NmdWxseQotCQkJZGVsZXRlICRFTlZ7bmV0X3NzaF9leHBlY3R9eyRyZW1vdGVfY29ubmVjdGlvbl90YXJnZXR9OworCQkJZGVsZXRlICRFTlYtPntuZXRfc3NoX2V4cGVjdH0tPnskcmVtb3RlX2Nvbm5lY3Rpb25fdGFyZ2V0fTsKIAkJfQogCQkKIAkJIyBTZXQgdGhlIHRpbWVvdXQKQEAgLTM1NzYsNyArMzU3Nyw3IEBACiAJCW5vdGlmeSgkRVJST1JTeydPSyd9LCAwLCAiZXhlY3V0ZWQgY29tbWFuZCBvbiAkY29tcHV0ZXJfc3RyaW5nOiAnJGNvbW1hbmQnLCBleGl0IHN0YXR1czogJGV4aXRfc3RhdHVzLCBvdXRwdXQ6XG4kb3V0cHV0IikgaWYgKCRkaXNwbGF5X291dHB1dCk7CiAJCQogCQkjIFNhdmUgdGhlIFNTSCBvYmplY3QgZm9yIGxhdGVyIHVzZQotCQkkRU5We25ldF9zc2hfZXhwZWN0fXskcmVtb3RlX2Nvbm5lY3Rpb25fdGFyZ2V0fSA9ICRzc2g7CisJCSRFTlYtPntuZXRfc3NoX2V4cGVjdH0tPnskcmVtb3RlX2Nvbm5lY3Rpb25fdGFyZ2V0fSA9ICRzc2g7CiAJCQogCQlyZXR1cm4gKCRleGl0X3N0YXR1cywgXEBvdXRwdXRfbGluZXMpOwogCX0KZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL0xpbnV4L2ZpcmV3YWxsL2lwdGFibGVzLnBtIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgvZmlyZXdhbGwvaXB0YWJsZXMucG0KaW5kZXggZWIyOGI0OC4uZDkzYzM4ZCAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgvZmlyZXdhbGwvaXB0YWJsZXMucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvTGludXgvZmlyZXdhbGwvaXB0YWJsZXMucG0KQEAgLTE1NDYsNyArMTU0Niw3IEBACiAJbXkgKCR0YWJsZV9uYW1lKSA9IEBfOwogCSR0YWJsZV9uYW1lID0gJ2ZpbHRlcicgdW5sZXNzICR0YWJsZV9uYW1lOwogCQotCSRFTlZ7aXB0YWJsZXNfZ2V0X3RhYmxlX2luZm9fY291bnR9eyR0YWJsZV9uYW1lfSsrOworCSRFTlYtPntpcHRhYmxlc19nZXRfdGFibGVfaW5mb19jb3VudH0tPnskdGFibGVfbmFtZX0rKzsKIAkKIAlteSAkY29tcHV0ZXJfbmFtZSA9ICRzZWxmLT5kYXRhLT5nZXRfY29tcHV0ZXJfaG9zdG5hbWUoKTsKIAkKQEAgLTI2NzUsOSArMjY3NSw5IEBACiAJCiAJbXkgJGFkZHJlc3MgPSBzcHJpbnRmKCcleCcsICRzZWxmKTsKIAlteSAkdGFibGVfY291bnRfc3RyaW5nOwotCWlmICgkRU5We2lwdGFibGVzX2dldF90YWJsZV9pbmZvX2NvdW50fSkgewotCQlmb3IgbXkgJHRhYmxlX25hbWUgKGtleXMgJXskRU5We2lwdGFibGVzX2dldF90YWJsZV9pbmZvX2NvdW50fX0pIHsKLQkJCW15ICR0YWJsZV9jb3VudCA9ICRFTlZ7aXB0YWJsZXNfZ2V0X3RhYmxlX2luZm9fY291bnR9eyR0YWJsZV9uYW1lfTsKKwlpZiAoJEVOVi0+e2lwdGFibGVzX2dldF90YWJsZV9pbmZvX2NvdW50fSkgeworCQlmb3IgbXkgJHRhYmxlX25hbWUgKGtleXMgJXskRU5WLT57aXB0YWJsZXNfZ2V0X3RhYmxlX2luZm9fY291bnR9fSkgeworCQkJbXkgJHRhYmxlX2NvdW50ID0gJEVOVi0+e2lwdGFibGVzX2dldF90YWJsZV9pbmZvX2NvdW50fS0+eyR0YWJsZV9uYW1lfTsKIAkJCSR0YWJsZV9jb3VudF9zdHJpbmcgLj0gIiR0YWJsZV9uYW1lOiAkdGFibGVfY291bnRcbiI7CiAJCX0KIAkJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJnZXRfdGFibGVfaW5mbyBjYWxscyAoJGFkZHJlc3MpOlxuJHRhYmxlX2NvdW50X3N0cmluZyIpOwpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL1dpbmRvd3MucG0KaW5kZXggZDYxMjQ0Ny4uZjY1YzI0MSAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy5wbQorKysgYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9PUy9XaW5kb3dzLnBtCkBAIC0xMDY0NSwxMCArMTA2NDUsMTAgQEAKIAkJJ0RlbGV0ZSBQcm9kdWN0IEtleScsCiAJKTsKIAkKLQlteSBAc2V0dXBfcGF0aCA9IEB7JEVOVntzZXR1cF9wYXRofX07CisJbXkgQHNldHVwX3BhdGggPSBAeyRFTlYtPntzZXR1cF9wYXRofX07CiAJCiAJT1BFUkFUSU9OOiB3aGlsZSAoMSkgewotCQlAeyRFTlZ7c2V0dXBfcGF0aH19ID0gQHNldHVwX3BhdGg7CisJCUB7JEVOVi0+e3NldHVwX3BhdGh9fSA9IEBzZXR1cF9wYXRoOwogCQkKIAkJcHJpbnQgJy0nIHggNzYgLiAiXG4iOwogCQkKQEAgLTEwNjU4LDcgKzEwNjU4LDcgQEAKIAkJbXkgJG9wZXJhdGlvbl9uYW1lID0gJG9wZXJhdGlvbl9jaG9pY2VzWyRvcGVyYXRpb25fY2hvaWNlX2luZGV4XTsKIAkJcHJpbnQgIlxuIjsKIAkJCi0JCXB1c2ggQHskRU5We3NldHVwX3BhdGh9fSwgJG9wZXJhdGlvbl9uYW1lOworCQlwdXNoIEB7JEVOVi0+e3NldHVwX3BhdGh9fSwgJG9wZXJhdGlvbl9uYW1lOwogCQkKIAkJaWYgKCRvcGVyYXRpb25fbmFtZSA9fiAvbGlzdC9pKSB7CiAJCQkkc2VsZi0+c2V0dXBfZGlzcGxheV9wcm9kdWN0X2tleV9pbmZvKCk7CkBAIC0xMDg1OCwxMCArMTA4NTgsMTAgQEAKIAkpOwogCQogCQotCW15IEBzZXR1cF9wYXRoID0gQHskRU5We3NldHVwX3BhdGh9fTsKKwlteSBAc2V0dXBfcGF0aCA9IEB7JEVOVi0+e3NldHVwX3BhdGh9fTsKIAkKIAlPUEVSQVRJT046IHdoaWxlICgxKSB7Ci0JCUB7JEVOVntzZXR1cF9wYXRofX0gPSBAc2V0dXBfcGF0aDsKKwkJQHskRU5WLT57c2V0dXBfcGF0aH19ID0gQHNldHVwX3BhdGg7CiAJCXByaW50ICctJyB4IDc2IC4gIlxuIjsKIAkJCiAJCXByaW50ICJDaG9vc2UgYW4gb3BlcmF0aW9uOlxuIjsKQEAgLTEwODcwLDcgKzEwODcwLDcgQEAKIAkJbXkgJG9wZXJhdGlvbl9uYW1lID0gJG9wZXJhdGlvbl9jaG9pY2VzWyRvcGVyYXRpb25fY2hvaWNlX2luZGV4XTsKIAkJcHJpbnQgIlxuIjsKIAkJCi0JCXB1c2ggQHskRU5We3NldHVwX3BhdGh9fSwgJG9wZXJhdGlvbl9uYW1lOworCQlwdXNoIEB7JEVOVi0+e3NldHVwX3BhdGh9fSwgJG9wZXJhdGlvbl9uYW1lOwogCQkKIAkJaWYgKCRvcGVyYXRpb25fbmFtZSA9fiAvbGlzdC9pKSB7CiAJCQkkc2VsZi0+c2V0dXBfZGlzcGxheV9rbXNfc2VydmVyX2luZm8oKTsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL09TL1dpbmRvd3MvVmVyc2lvbl81LnBtIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy9WZXJzaW9uXzUucG0KaW5kZXggODYwNDE2OC4uOGE5M2YxNyAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy9WZXJzaW9uXzUucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvT1MvV2luZG93cy9WZXJzaW9uXzUucG0KQEAgLTUzLDcgKzUzLDggQEAKIHVzZSBGaWxlOjpCYXNlbmFtZTsKIAogdXNlIElPOjpGaWxlOwotdXNlIFBPU0lYIHF3KHRtcG5hbSk7CisjdXNlIFBPU0lYIHF3KHRtcG5hbSk7Cit1c2UgRmlsZTo6VGVtcCBxdy8gOlBPU0lYIC87CiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIApAQCAtNDA0LDcgKzQwNSw3IEBACiAJCiAJIyBbVW5hdHRlbmRlZF0gLSBTZXR1cC9TeXNwcmVwIGV4ZWN1dGlvbiBjb25maWd1cmF0aW9uCiAJJHN5c3ByZXBfaW5mX2hhc2h7VW5hdHRlbmRlZH17RHJpdmVyU2lnbmluZ1BvbGljeX0gPSAnSWdub3JlJzsgICAgICAgICAjIFNwZWNpZmllcyBob3cgdG8gcHJvY2VzcyB1bnNpZ25lZCBkcml2ZXJzIGR1cmluZyB1bmF0dGVuZGVkIFNldHVwCi0JJHN5c3ByZXBfaW5mX2hhc2h7VW5hdHRlbmRlZH17RXh0ZW5kT2VtUGFydGl0aW9ufSA9ICdObyc7ICAgICAgICAgICAgICAjIFNwZWNpZmllcyB3aGV0aGVyIHRvIGV4dGVuZCB0aGUgcGFydGl0aW9uIG9uIHdoaWNoIHlvdSBpbnN0YWxsIHRoZSBNaWNyb3NvZnSuIFdpbmRvd3OuIG9wZXJhdGluZyBzeXN0ZW0KKwkkc3lzcHJlcF9pbmZfaGFzaHtVbmF0dGVuZGVkfXtFeHRlbmRPZW1QYXJ0aXRpb259ID0gJ05vJzsgICAgICAgICAgICAgICMgU3BlY2lmaWVzIHdoZXRoZXIgdG8gZXh0ZW5kIHRoZSBwYXJ0aXRpb24gb24gd2hpY2ggeW91IGluc3RhbGwgdGhlIE1pY3Jvc29mdO+/vSBXaW5kb3dz77+9IG9wZXJhdGluZyBzeXN0ZW0KIAkjJHN5c3ByZXBfaW5mX2hhc2h7VW5hdHRlbmRlZH17SGliZXJuYXRpb259ID0gJ05vJzsgICAgICAgICAgICAgICAgICAgICMgU3BlY2lmaWVzIHdoZXRoZXIgdG8gZW5hYmxlIHRoZSBoaWJlcm5hdGlvbiBvcHRpb24gaW4gdGhlIFBvd2VyIE9wdGlvbnMgY29udHJvbCBwYW5lbAogCSRzeXNwcmVwX2luZl9oYXNoe1VuYXR0ZW5kZWR9e0luc3RhbGxGaWxlc1BhdGh9ID0gJ0M6XFN5c3ByZXBcaTM4Nic7ICAgIyBTcGVjaWZpZXMgdGhlIGxvY2F0aW9uIG9mIGZpbGVzIG5lY2Vzc2FyeSBmb3IgaW5zdGFsbGF0aW9uIGR1cmluZyBNaW5pLVNldHVwCiAJIyRzeXNwcmVwX2luZl9oYXNoe1VuYXR0ZW5kZWR9e0tlZXBQYWdlRmlsZX0gPSAnJzsgICAgICAgICAgICAgICAgICAgICAjIFNwZWNpZmllcyB3aGV0aGVyIHRvIHJlZ2VuZXJhdGUgdGhlIHBhZ2UgZmlsZQpAQCAtNDg0LDggKzQ4NSw4IEBACiAJCiAJIyBbVXNlckRhdGFdIC0gdXNlciBpZGVudGlmaWNhdGlvbiBzZXR0aW5ncwogCSRzeXNwcmVwX2luZl9oYXNoe1VzZXJEYXRhfXtDb21wdXRlck5hbWV9ID0gJyonOyAgICAgICAgICAgICAgICAgICAgICAgIyBTcGVjaWZpZXMgdGhlIGNvbXB1dGVyIG5hbWUKLQkkc3lzcHJlcF9pbmZfaGFzaHtVc2VyRGF0YX17RnVsbE5hbWV9ID0gJ1ZpcnR1YWwgQ29tcHV0aW5nIExhYic7ICAgICAgICMgU3BlY2lmaWVzIHRoZSBlbmQgdXNlcpJzIGZ1bGwgbmFtZQotCSRzeXNwcmVwX2luZl9oYXNoe1VzZXJEYXRhfXtPcmdOYW1lfSA9ICRpbWFnZV9hZmZpbGlhdGlvbl9uYW1lOyAgICAgICAgIyBTcGVjaWZpZXMgYW4gb3JnYW5pemF0aW9uknMgbmFtZQorCSRzeXNwcmVwX2luZl9oYXNoe1VzZXJEYXRhfXtGdWxsTmFtZX0gPSAnVmlydHVhbCBDb21wdXRpbmcgTGFiJzsgICAgICAgIyBTcGVjaWZpZXMgdGhlIGVuZCB1c2Vy77+9cyBmdWxsIG5hbWUKKwkkc3lzcHJlcF9pbmZfaGFzaHtVc2VyRGF0YX17T3JnTmFtZX0gPSAkaW1hZ2VfYWZmaWxpYXRpb25fbmFtZTsgICAgICAgICMgU3BlY2lmaWVzIGFuIG9yZ2FuaXphdGlvbu+/vXMgbmFtZQogCSRzeXNwcmVwX2luZl9oYXNoe1VzZXJEYXRhfXtQcm9kdWN0S2V5fSA9ICRwcm9kdWN0X2tleTsgICAgICAgICAgICAgICAgIyBTcGVjaWZpZXMgdGhlIFByb2R1Y3QgS2V5IGZvciBlYWNoIHVuaXF1ZSBpbnN0YWxsYXRpb24gb2YgV2luZG93cwogCQogCSMgW1N5c3ByZXBdIHNlY3Rpb24gY29udGFpbnMgYW4gZW50cnkgZm9yIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGluZyB0aGUgZW50cmllcyBpbiB0aGUgcHJlLWV4aXN0aW5nIFtTeXNwcmVwTWFzc1N0b3JhZ2VdIHNlY3Rpb24gYW5kIHRoZW4gaW5zdGFsbGluZyB0aG9zZSBtYXNzLXN0b3JhZ2UgY29udHJvbGxlcnMKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9WTXdhcmUvVklNX1NTSC5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9WTXdhcmUvVklNX1NTSC5wbQppbmRleCBiZjBmM2QwLi4xOWVjZDE4IDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcvVk13YXJlL1ZJTV9TU0gucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvUHJvdmlzaW9uaW5nL1ZNd2FyZS9WSU1fU1NILnBtCkBAIC0zNjkwLDcgKzM2OTAsNyBAQAogCQlyZXR1cm47CiAJfQogCQotCXJldHVybiAkRU5We2ZpcmV3YWxsX3J1bGVzZXRfaW5mb30gaWYgZGVmaW5lZCgkRU5We2ZpcmV3YWxsX3J1bGVzZXRfaW5mb30pOworCXJldHVybiAkRU5WLT57ZmlyZXdhbGxfcnVsZXNldF9pbmZvfSBpZiBkZWZpbmVkKCRFTlYtPntmaXJld2FsbF9ydWxlc2V0X2luZm99KTsKIAkKIAlteSAkdm1ob3N0X2NvbXB1dGVyX25hbWUgPSAkc2VsZi0+ZGF0YS0+Z2V0X3ZtaG9zdF9ob3N0bmFtZSgpOwogCQpAQCAtMzgwMSw3ICszODAxLDcgQEAKIAl9CiAJCiAJbm90aWZ5KCRFUlJPUlN7J09LJ30sIDAsICJyZXRyaWV2ZWQgZmlyZXdhbGwgcnVsZXNldCBpbmZvIGZyb20gVk0gaG9zdCAkdm1ob3N0X2NvbXB1dGVyX25hbWU6XG4iIC4gZm9ybWF0X2RhdGEoJHJ1bGVzZXRfaW5mbykpOwotCSRFTlZ7ZmlyZXdhbGxfcnVsZXNldF9pbmZvfSA9ICRydWxlc2V0X2luZm87CisJJEVOVi0+e2ZpcmV3YWxsX3J1bGVzZXRfaW5mb30gPSAkcnVsZXNldF9pbmZvOwogCXJldHVybiAkcnVsZXNldF9pbmZvOwogfQogCmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcvVk13YXJlL1ZNd2FyZS5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9WTXdhcmUvVk13YXJlLnBtCmluZGV4IGMxOTgwN2MuLmEyMGRkMzcgMTAwNjQ0Ci0tLSBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9WTXdhcmUvVk13YXJlLnBtCisrKyBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9WTXdhcmUvVk13YXJlLnBtCkBAIC04MTc3LDcgKzgxNzcsNyBAQAogCX0KIAkKIAkjIFBhcnNlIHRoZSBmaWxlIGNvbnRlbnRzLCBhZGQgJyAtLS0gdmNsLnRneicgdG8gdGhlIGVuZCBvZiB0aGUgJ21vZHVsZXM9JyBsaW5lIGlmIGl0IGhhc24ndCBhbHJlYWR5IGJlZW4gYWRkZWQKLQkjIG1vZHVsZXM9ay56IJcgcy56IJcgYy56IJcgb2VtLnRneiCXIGxpY2Vuc2UudGd6IJcgbS56IJcgc3RhdGUudGd6IJcgdmNsLnRnegorCSMgbW9kdWxlcz1rLnog77+9IHMueiDvv70gYy56IO+/vSBvZW0udGd6IO+/vSBsaWNlbnNlLnRneiDvv70gbS56IO+/vSBzdGF0ZS50Z3og77+9IHZjbC50Z3oKIAlteSAkdXBkYXRlZF9ib290YmFua19jZmdfY29udGVudHM7CiAJbXkgJGJvb3RiYW5rX2NmZ19jaGFuZ2VkID0gMDsKIAlmb3IgbXkgJGxpbmUgKEBib290YmFua19jZmdfY29udGVudHMpIHsKQEAgLTgzNjEsNyArODM2MSw3IEBACiAJI215ICR2bWhvc3RfaWQgPSAzMjsKIAkKIAlteSAkdm1ob3N0X2NvbXB1dGVyX25hbWUgPSAkbWFuYWdlbWVudF9ub2RlX3ZtaG9zdF9pbmZvLT57JHZtaG9zdF9pZH17Y29tcHV0ZXJ9e1NIT1JUTkFNRX07Ci0JcHVzaCBAeyRFTlZ7c2V0dXBfcGF0aH19LCAkdm1ob3N0X2NvbXB1dGVyX25hbWU7CisJcHVzaCBAeyRFTlYtPntzZXR1cF9wYXRofX0sICR2bWhvc3RfY29tcHV0ZXJfbmFtZTsKIAkKIAkKIAkjIEdldCBhIHByb3Zpc2lvbmluZyBvYmplY3QgdG8gY29udHJvbCB0aGUgVk0gaG9zdApkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvUHJvdmlzaW9uaW5nL2RvY2tlci5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9kb2NrZXIucG0KaW5kZXggYjhlMzgwYi4uMGUwM2VhMCAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvUHJvdmlzaW9uaW5nL2RvY2tlci5wbQorKysgYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcvZG9ja2VyLnBtCkBAIC0xMTYsNyArMTE2LDcgQEAKIAkjIHNldCB0aGUgc3BlY2lmaWMgc3NoIHBvcnQgZm9yIHZtaG9zdCBpbiB0aGUgdmFyaWFibGUgdGFibGUuIGUuZy4sIDI0CiAJbm90aWZ5KCRFUlJPUlN7J09LJ30sIDAsICJyZW1vdGVfY29ubmVjdGlvbl90YXJnZXQ6ICRyZW1vdGVfY29ubmVjdGlvbl90YXJnZXQiKTsKIAlteSAkdGFyZ2V0X3NzaF9wb3J0ID0gZ2V0X3ZhcmlhYmxlKCJ2bWhvc3Rfc3NoX3BvcnQiKSB8fCAyMjsKLQkkRU5We3NzaF9wb3J0fXskcmVtb3RlX2Nvbm5lY3Rpb25fdGFyZ2V0fSA9ICR0YXJnZXRfc3NoX3BvcnQ7CisJJEVOVi0+e3NzaF9wb3J0fS0+eyRyZW1vdGVfY29ubmVjdGlvbl90YXJnZXR9ID0gJHRhcmdldF9zc2hfcG9ydDsKIAlub3RpZnkoJEVSUk9SU3snT0snfSwgMCwgInZtaG9zdF9zc2hfcG9ydDogJHRhcmdldF9zc2hfcG9ydCIpOwogCiAJIyBjcmVhdGUgYSB1c2VyYWdlbnQKQEAgLTUxNCw3ICs1MTQsNyBAQAogCW15ICRyZW1vdGVfY29ubmVjdGlvbl90YXJnZXQgPSBkZXRlcm1pbmVfcmVtb3RlX2Nvbm5lY3Rpb25fdGFyZ2V0KCR2bWhvc3RfbmFtZSk7CiAJIyBzZXQgdGhlIHNwZWNpZmljIHNzaCBwb3J0IGZvciB2bWhvc3QgaW4gdGhlIHZhcmlhYmxlIHRhYmxlLiBlLmcuLCAyNAogCW15ICR0YXJnZXRfc3NoX3BvcnQgPSBnZXRfdmFyaWFibGUoInZtaG9zdF9zc2hfcG9ydCIpIHx8IDIyOwotCSRFTlZ7c3NoX3BvcnR9eyRyZW1vdGVfY29ubmVjdGlvbl90YXJnZXR9ID0gJHRhcmdldF9zc2hfcG9ydDsKKwkkRU5WLT57c3NoX3BvcnR9LT57JHJlbW90ZV9jb25uZWN0aW9uX3RhcmdldH0gPSAkdGFyZ2V0X3NzaF9wb3J0OwogCiAJIyBjcmVhdGUgYSB1c2VyYWdlbnQKIAlteSAkdWEgPSBMV1A6OlVzZXJBZ2VudC0+bmV3KCk7CmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcvbGlidmlydC5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9saWJ2aXJ0LnBtCmluZGV4IDM4MDhlNDUuLmM3YzRkZDEgMTAwNjQ0Ci0tLSBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9saWJ2aXJ0LnBtCisrKyBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9saWJ2aXJ0LnBtCkBAIC0xOTY3LDcgKzE5NjcsNyBAQAogCSMgYWRkIG5pYyBmb3IgcHVibGljLCBmaXJzdCBjaGVjayBmb3IgcHJvamVjdCBub3QgaW5jbHVkaW5nICd2Y2wnLCBza2lwcGluZyB0aGUgcHVibGljIG5ldHdvcmsgYXNzaWduZWQgdG8gdGhlIHZtaG9zdCBwcm9maWxlCiAJbXkgJHNraXBhZGRpdGlvbmFsbmljbmV0d29yayA9ICcnOwogCWlmICgkaW1hZ2VfcHJvamVjdCAhfiAvdmNsL2kpIHsKLQkJZm9yZWFjaCBteSAkbmV0d29ya19uYW1lIChrZXlzICRuZXR3b3JrX2luZm8pIHsKKwkJZm9yZWFjaCBteSAkbmV0d29ya19uYW1lIChrZXlzICV7JG5ldHdvcmtfaW5mb30pIHsKIAkJCW5leHQgaWYgKCRuZXR3b3JrX25hbWUgPX4gL14kZXRoMF9zb3VyY2VfZGV2aWNlJC9pIHx8ICRuZXR3b3JrX25hbWUgPX4gL14kZXRoMV9zb3VyY2VfZGV2aWNlJC9pKTsKIAkJCWlmICgkbmV0d29ya19uYW1lID1+IC8kaW1hZ2VfcHJvamVjdC9pIHx8ICRpbWFnZV9wcm9qZWN0ID1+IC8kbmV0d29ya19uYW1lL2kpIHsKIAkJCQkkc2tpcGFkZGl0aW9uYWxuaWNuZXR3b3JrID0gJG5ldHdvcmtfbmFtZTsKQEAgLTIwMTIsNyArMjAxMiw3IEBACiAJIyBhZGQgYWRkaXRpb25hbCBuaWNzIGlmIHByb2plY3Qgbm90IHN0cmljdGx5ICd2Y2wnCiAJaWYgKCRpbWFnZV9wcm9qZWN0ICF+IC9edmNsJC9pKSB7CiAJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAiaW1hZ2UgcHJvamVjdCBpczogJGltYWdlX3Byb2plY3QsIGNoZWNraW5nIGlmIGFkZGl0aW9uYWwgbmV0d29yayBhZGFwdGVycyBzaG91bGQgYmUgY29uZmlndXJlZCIpOwotCQlmb3JlYWNoIG15ICRuZXR3b3JrX25hbWUgKGtleXMgJG5ldHdvcmtfaW5mbykgeworCQlmb3JlYWNoIG15ICRuZXR3b3JrX25hbWUgKGtleXMgJXskbmV0d29ya19pbmZvfSkgewogCQkJbmV4dCBpZiAoJG5ldHdvcmtfbmFtZSA9fiAvXiRldGgwX3NvdXJjZV9kZXZpY2UkL2kgfHwgJG5ldHdvcmtfbmFtZSA9fiAvXiRldGgxX3NvdXJjZV9kZXZpY2UkL2kpOwogCQkJbmV4dCBpZiAoJG5ldHdvcmtfbmFtZSBlcSAkc2tpcGFkZGl0aW9uYWxuaWNuZXR3b3JrKTsKIAkJCWlmICgkbmV0d29ya19uYW1lID1+IC8kaW1hZ2VfcHJvamVjdC9pIHx8ICRpbWFnZV9wcm9qZWN0ID1+IC8kbmV0d29ya19uYW1lL2kpIHsKZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9vcGVuc3RhY2sucG0gYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcvb3BlbnN0YWNrLnBtCmluZGV4IGIyZDJmZmMuLjkwNzRkN2QgMTAwNjQ0Ci0tLSBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy9vcGVuc3RhY2sucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvUHJvdmlzaW9uaW5nL29wZW5zdGFjay5wbQpAQCAtMjk2LDcgKzI5Niw3IEBACiAJbXkgJGltYWdlcmV2aXNpb25faWQgPSAkc2VsZi0+ZGF0YS0+Z2V0X2ltYWdlcmV2aXNpb25faWQoKSB8fCByZXR1cm4gMDsKIAlteSAkaW1hZ2VfbmFtZSA9ICRzZWxmLT5kYXRhLT5nZXRfaW1hZ2VfbmFtZSgpIHx8IHJldHVybiAwOwogCW15ICgkb3NfdG9rZW4sICRvc19jb21wdXRlX3VybCkgPSAkc2VsZi0+X2dldF9vc190b2tlbl9jb21wdXRlX3VybCgpOwotCW15ICRvc19wcm9qZWN0X2lkID0gJEVOVnsnT1NfUFJPSkVDVF9JRCd9OworCW15ICRvc19wcm9qZWN0X2lkID0gJEVOVi0+eydPU19QUk9KRUNUX0lEJ307CiAJaWYgKCFkZWZpbmVkKCRvc190b2tlbikgfHwgIWRlZmluZWQoJG9zX2NvbXB1dGVfdXJsKSB8fCAhZGVmaW5lZCgkb3NfcHJvamVjdF9pZCkpIHsKIAkJbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgImZhaWxlZCB0byBnZXQgb3BlbnN0YWNrIGF1dGggaW5mbyIpOwogCQlyZXR1cm4gMDsKQEAgLTM2MCw3ICszNjAsNyBAQAogCW15ICRpbWFnZV9uYW1lID0gc2hpZnQ7CiAJbXkgJGltYWdlcmV2aXNpb25faWQgPSAkc2VsZi0+ZGF0YS0+Z2V0X2ltYWdlcmV2aXNpb25faWQoKSB8fCByZXR1cm47CiAJbXkgKCRvc190b2tlbiwgJG9zX2NvbXB1dGVfdXJsKSA9ICRzZWxmLT5fZ2V0X29zX3Rva2VuX2NvbXB1dGVfdXJsKCk7Ci0JbXkgJG9zX3Byb2plY3RfaWQgPSAkRU5WeydPU19QUk9KRUNUX0lEJ307CisJbXkgJG9zX3Byb2plY3RfaWQgPSAkRU5WLT57J09TX1BST0pFQ1RfSUQnfTsKIAlpZiAoIWRlZmluZWQoJG9zX3Rva2VuKSB8fCAhZGVmaW5lZCgkb3NfY29tcHV0ZV91cmwpIHx8ICFkZWZpbmVkKCRvc19wcm9qZWN0X2lkKSkgewogCQlub3RpZnkoJEVSUk9SU3snV0FSTklORyd9LCAwLCAiZmFpbGVkIHRvIGdldCBvcGVuc3RhY2sgYXV0aCBpbmZvIik7CiAJCXJldHVybjsKQEAgLTc4OCwxMSArNzg4LDExIEBACiBzdWIgX2dldF9vc190b2tlbl9jb21wdXRlX3VybCB7CiAJbXkgJHNlbGYgPSBzaGlmdDsKIAotCW15ICRvc19hdXRoX3VybCA9ICRFTlZ7J09TX0FVVEhfVVJMJ307Ci0JbXkgJG9zX3RlbmFudF9uYW1lID0gJEVOVnsnT1NfVEVOQU5UX05BTUUnfTsKLQlteSAkb3NfdXNlcl9uYW1lID0gJEVOVnsnT1NfVVNFUk5BTUUnfTsKLQlteSAkb3NfdXNlcl9wYXNzd29yZCA9ICRFTlZ7J09TX1BBU1NXT1JEJ307Ci0JbXkgJG9zX3NlcnZpY2VfbmFtZSA9ICRFTlZ7J09TX1NFUlZJQ0VfTkFNRSd9OworCW15ICRvc19hdXRoX3VybCA9ICRFTlYtPnsnT1NfQVVUSF9VUkwnfTsKKwlteSAkb3NfdGVuYW50X25hbWUgPSAkRU5WLT57J09TX1RFTkFOVF9OQU1FJ307CisJbXkgJG9zX3VzZXJfbmFtZSA9ICRFTlYtPnsnT1NfVVNFUk5BTUUnfTsKKwlteSAkb3NfdXNlcl9wYXNzd29yZCA9ICRFTlYtPnsnT1NfUEFTU1dPUkQnfTsKKwlteSAkb3Nfc2VydmljZV9uYW1lID0gJEVOVi0+eydPU19TRVJWSUNFX05BTUUnfTsKIAlpZiAoIWRlZmluZWQoJG9zX2F1dGhfdXJsKSB8fCAhZGVmaW5lZCgkb3NfdGVuYW50X25hbWUpIAogCQl8fCAhZGVmaW5lZCgkb3NfdXNlcl9uYW1lKSB8fCAhZGVmaW5lZCgkb3NfdXNlcl9wYXNzd29yZCkgfHwgIWRlZmluZWQoJG9zX3NlcnZpY2VfbmFtZSkpIHsKIAkJbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgImZhaWxlZCB0byBnZXQgb3BlbnN0YWNrIGF1dGggaW5mb3JtYXRpb24gZnJvbSBlbnZpcm9ubWVudCIpOwpAQCAtODgwLDcgKzg4MCw3IEBACiAJCXJldHVybiAwOwogCX0KIAlteSAoJG9zX3Rva2VuLCAkb3NfY29tcHV0ZV91cmwpID0gJHNlbGYtPl9nZXRfb3NfdG9rZW5fY29tcHV0ZV91cmwoKTsKLQlteSAkb3NfcHJvamVjdF9pZCA9ICRFTlZ7J09TX1BST0pFQ1RfSUQnfTsKKwlteSAkb3NfcHJvamVjdF9pZCA9ICRFTlYtPnsnT1NfUFJPSkVDVF9JRCd9OwogCWlmICghZGVmaW5lZCgkb3NfdG9rZW4pIHx8ICFkZWZpbmVkKCRvc19jb21wdXRlX3VybCkgfHwgIWRlZmluZWQoJG9zX3Byb2plY3RfaWQpKSB7CiAJCW5vdGlmeSgkRVJST1JTeydXQVJOSU5HJ30sIDAsICJmYWlsZWQgdG8gZ2V0IHRoZSBvcGVuc3RhY2sgYXV0aCBpbmZvIik7CiAJCXJldHVybiAwOwpAQCAtMTAwNyw3ICsxMDA3LDcgQEAKIAl9CiAJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJvc19pbWFnZV9uYW1lOiAkaW1hZ2VfbmFtZSBpbiBzdWIgX3Bvc3Rfb3NfY3JlYXRlX2ltYWdlIik7CiAJbXkgKCRvc190b2tlbiwgJG9zX2NvbXB1dGVfdXJsKSA9ICRzZWxmLT5fZ2V0X29zX3Rva2VuX2NvbXB1dGVfdXJsKCk7Ci0JbXkgJG9zX3Byb2plY3RfaWQgPSAkRU5WeydPU19QUk9KRUNUX0lEJ307CisJbXkgJG9zX3Byb2plY3RfaWQgPSAkRU5WLT57J09TX1BST0pFQ1RfSUQnfTsKIAlpZiAoIWRlZmluZWQoJG9zX3Rva2VuKSB8fCAhZGVmaW5lZCgkb3NfY29tcHV0ZV91cmwpIHx8ICFkZWZpbmVkKCRvc19wcm9qZWN0X2lkKSkgewogCQlub3RpZnkoJEVSUk9SU3snV0FSTklORyd9LCAwLCAiZmFpbGVkIHRvIGdldCBvcGVuc3RhY2sgYXV0aCBpbmZvcm1hdGlvbiBmcm9tIGVudmlyb25tZW50Iik7CiAJCXJldHVybjsKQEAgLTEwNzYsMTggKzEwNzYsMTggQEAKIAlteSAkaW1hZ2VyZXZpc2lvbl9pZCA9ICRzZWxmLT5kYXRhLT5nZXRfaW1hZ2VyZXZpc2lvbl9pZCgpIHx8IHJldHVybjsKIAlteSAkY29tcHV0ZXJfbmFtZSAgPSAkc2VsZi0+ZGF0YS0+Z2V0X2NvbXB1dGVyX3Nob3J0X25hbWUoKSB8fCByZXR1cm47CiAJbXkgJGltYWdlX29zX3R5cGUgID0gJHNlbGYtPmRhdGEtPmdldF9pbWFnZV9vc190eXBlKCkgfHwgcmV0dXJuOwotCW15ICRvc19wcm9qZWN0X2lkID0gJEVOVnsnT1NfUFJPSkVDVF9JRCd9OwotCW15ICRvc19rZXlfbmFtZSA9ICRFTlZ7J1ZDTF9MSU5VWF9LRVknfTsgCQorCW15ICRvc19wcm9qZWN0X2lkID0gJEVOVi0+eydPU19QUk9KRUNUX0lEJ307CisJbXkgJG9zX2tleV9uYW1lID0gJEVOVi0+eydWQ0xfTElOVVhfS0VZJ307CiAJaWYgKCFkZWZpbmVkKCRvc19wcm9qZWN0X2lkKSB8fCAhZGVmaW5lZCgkb3Nfa2V5X25hbWUpKSB7CiAJCW5vdGlmeSgkRVJST1JTeydXQVJOSU5HJ30sIDAsICJmYWlsZWQgdG8gZ2V0IHRoZSBvcGVuc3RhY2sgcHJvamVjdCBpZCBvciBrZXkgbmFtZSIpOwogCQlyZXR1cm47CiAJfQogCWlmICgkaW1hZ2Vfb3NfdHlwZSBlcSAnbGludXgnKSB7Ci0JCSRvc19rZXlfbmFtZSA9ICAkRU5WeydWQ0xfTElOVVhfS0VZJ307IAkKKwkJJG9zX2tleV9uYW1lID0gICRFTlYtPnsnVkNMX0xJTlVYX0tFWSd9OwogCQlub3RpZnkoJEVSUk9SU3snT0snfSwgMCwgIlRoZSAkb3Nfa2V5X25hbWUgaXMgdGhlIGtleSBmb3IgTGludXggKGRlZmF1bHQpIik7CiAJfSAKIAllbHNpZiAoJGltYWdlX29zX3R5cGUgZXEgJ3dpbmRvd3MnKSB7Ci0JCSRvc19rZXlfbmFtZSA9ICAkRU5WeydWQ0xfV0lORE9XU19LRVknfTsgCQorCQkkb3Nfa2V5X25hbWUgPSAgJEVOVi0+eydWQ0xfV0lORE9XU19LRVknfTsKIAkJbm90aWZ5KCRFUlJPUlN7J09LJ30sIDAsICJUaGUgJG9zX2tleV9uYW1lIGlzIHRoZSBrZXkgZm9yIFdpbmRvd3MiKTsKIAl9CiAKQEAgLTEyMzAsMTQgKzEyMzAsMTQgQEAKIAlteSAkdmNsX2xpbnV4X2tleSA9ICRzZWxmLT57Y29uZmlnfS0+e3ZjbF9saW51eF9rZXl9OwogCiAJIyBTZXQgRW52aXJvbm1lbnQgRmlsZQotCSRFTlZ7J09TX0FVVEhfVVJMJ30gPSAkb3NfYXV0aF91cmw7Ci0JJEVOVnsnT1NfU0VSVklDRV9OQU1FJ30gPSAkb3Nfc2VydmljZV9uYW1lOwotCSRFTlZ7J09TX1BST0pFQ1RfSUQnfSA9ICRvc19wcm9qZWN0X2lkOwotCSRFTlZ7J09TX1RFTkFOVF9OQU1FJ30gPSAkb3NfdGVuYW50X25hbWU7Ci0JJEVOVnsnT1NfVVNFUk5BTUUnfSA9ICRvc191c2VybmFtZTsKLQkkRU5WeydPU19QQVNTV09SRCd9ID0gJG9zX3Bhc3N3b3JkOwotCSRFTlZ7J1ZDTF9XSU5ET1dTX0tFWSd9ID0gJHZjbF93aW5kb3dzX2tleTsKLQkkRU5WeydWQ0xfTElOVVhfS0VZJ30gPSAkdmNsX2xpbnV4X2tleTsKKwkkRU5WLT57J09TX0FVVEhfVVJMJ30gPSAkb3NfYXV0aF91cmw7CisJJEVOVi0+eydPU19TRVJWSUNFX05BTUUnfSA9ICRvc19zZXJ2aWNlX25hbWU7CisJJEVOVi0+eydPU19QUk9KRUNUX0lEJ30gPSAkb3NfcHJvamVjdF9pZDsKKwkkRU5WLT57J09TX1RFTkFOVF9OQU1FJ30gPSAkb3NfdGVuYW50X25hbWU7CisJJEVOVi0+eydPU19VU0VSTkFNRSd9ID0gJG9zX3VzZXJuYW1lOworCSRFTlYtPnsnT1NfUEFTU1dPUkQnfSA9ICRvc19wYXNzd29yZDsKKwkkRU5WLT57J1ZDTF9XSU5ET1dTX0tFWSd9ID0gJHZjbF93aW5kb3dzX2tleTsKKwkkRU5WLT57J1ZDTF9MSU5VWF9LRVknfSA9ICR2Y2xfbGludXhfa2V5OwogCiAJcmV0dXJuIDE7CiB9IyBlbmQgc3ViIF9zZXRfb3NfYXV0aF9jb25mCkBAIC0xMjU4LDcgKzEyNTgsNyBAQAogCW15ICRjb21wdXRlcl9uYW1lID0gJHNlbGYtPmRhdGEtPmdldF9jb21wdXRlcl9zaG9ydF9uYW1lKCkgfHwgcmV0dXJuIDA7CiAJCQogCW15ICgkb3NfdG9rZW4sICRvc19jb21wdXRlX3VybCkgPSAkc2VsZi0+X2dldF9vc190b2tlbl9jb21wdXRlX3VybCgpOwotCW15ICRvc19wcm9qZWN0X2lkID0gJEVOVnsnT1NfUFJPSkVDVF9JRCd9OworCW15ICRvc19wcm9qZWN0X2lkID0gJEVOVi0+eydPU19QUk9KRUNUX0lEJ307CiAJbXkgJG9zX2luc3RhbmNlX2lkID0gJHNlbGYtPl9nZXRfb3NfaW5zdGFuY2VfaWQoKTsKIAlpZiAoIWRlZmluZWQoJG9zX3Rva2VuKSB8fCAhZGVmaW5lZCgkb3NfY29tcHV0ZV91cmwpIHx8ICFkZWZpbmVkKCRvc19wcm9qZWN0X2lkKSB8fCAhZGVmaW5lZCgkb3NfaW5zdGFuY2VfaWQpKSB7CiAJCW5vdGlmeSgkRVJST1JTeydXQVJOSU5HJ30sIDAsICJmYWlsZWQgdG8gZ2V0IHRoZSBvcGVuc3RhY2sgYXV0aCBpbmZvIik7CkBAIC0xMzYwLDcgKzEzNjAsNyBAQAogCQogCW15ICRvc19pbWFnZV9pZCA9IHNoaWZ0OwogCW15ICgkb3NfdG9rZW4sICRvc19jb21wdXRlX3VybCkgPSAkc2VsZi0+X2dldF9vc190b2tlbl9jb21wdXRlX3VybCgpOwotCW15ICRvc19wcm9qZWN0X2lkID0gJEVOVnsnT1NfUFJPSkVDVF9JRCd9OworCW15ICRvc19wcm9qZWN0X2lkID0gJEVOVi0+eydPU19QUk9KRUNUX0lEJ307CiAJaWYgKCFkZWZpbmVkKCRvc19pbWFnZV9pZCkgfHwgIWRlZmluZWQoJG9zX3Rva2VuKSB8fCAhZGVmaW5lZCgkb3NfY29tcHV0ZV91cmwpIHx8ICFkZWZpbmVkKCRvc19wcm9qZWN0X2lkKSkgewogCQlub3RpZnkoJEVSUk9SU3snV0FSTklORyd9LCAwLCAiZmFpbGVkIHRvIGdldCBvcGVuc3RhY2sgYXV0aCBpbmZvIG9yIGltYWdlIGlkOiAkb3NfaW1hZ2VfaWQiKTsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML01vZHVsZS9Qcm92aXNpb25pbmcveENBVC5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy94Q0FULnBtCmluZGV4IDFiMDYwMjkuLjIwZjZmZGQgMTAwNjQ0Ci0tLSBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy94Q0FULnBtCisrKyBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1Byb3Zpc2lvbmluZy94Q0FULnBtCkBAIC0xMDYsMTAgKzEwNiwxMCBAQAogCW15ICRzZWxmID0gc2hpZnQ7CiAKIAkjIENoZWNrIHRoZSBYQ0FUX1JPT1QgZW52aXJvbm1lbnQgdmFyaWFibGUsIGl0IHNob3VsZCBiZSBkZWZpbmVkCi0JaWYgKGRlZmluZWQoJEVOVntYQ0FUUk9PVH0pICYmICRFTlZ7WENBVFJPT1R9KSB7Ci0JCSRYQ0FUX1JPT1QgPSAkRU5We1hDQVRST09UfTsKKwlpZiAoZGVmaW5lZCgkRU5WLT57WENBVFJPT1R9KSAmJiAkRU5WLT57WENBVFJPT1R9KSB7CisJCSRYQ0FUX1JPT1QgPSAkRU5WLT57WENBVFJPT1R9OwogCX0KLQllbHNpZiAoZGVmaW5lZCgkRU5We1hDQVRST09UfSkpIHsKKwllbHNpZiAoZGVmaW5lZCgkRU5WLT57WENBVFJPT1R9KSkgewogCQlub3RpZnkoJEVSUk9SU3snT0snfSwgMCwgIlhDQVRST09UIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBkZWZpbmVkLCB1c2luZyAvb3B0L3hjYXQiKTsKIAkJJFhDQVRfUk9PVCA9ICcvb3B0L3hjYXQnOwogCX0KZGlmZiAtLWdpdCBhL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvTW9kdWxlL1N0YXRlLnBtIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvU3RhdGUucG0KaW5kZXggMjRkZDUzOS4uMDI3MjM4NyAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvU3RhdGUucG0KKysrIGIvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9Nb2R1bGUvU3RhdGUucG0KQEAgLTk3LDExICs5NywxMSBAQAogCW15ICRuYXRob3N0X2lkID0gJHNlbGYtPmRhdGEtPmdldF9uYXRob3N0X2lkKDApOwogCQogCSMgSW5pdGlhbGl6ZSB0aGUgZGF0YWJhc2UgaGFuZGxlIGNvdW50Ci0JJEVOVntkYmhfY291bnR9ID0gMDsKKwkkRU5WLT57ZGJoX2NvdW50fSA9IDA7CiAJCiAJIyBBdHRlbXB0IHRvIGdldCBhIGRhdGFiYXNlIGhhbmRsZQotCWlmICgkRU5We2RiaH0gPSBnZXRuZXdkYmgoKSkgewotCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgIm9idGFpbmVkIGEgZGF0YWJhc2UgaGFuZGxlIGZvciB0aGlzIHN0YXRlIHByb2Nlc3MsIHN0b3JlZCBhcyBcJEVOVntkYmh9Iik7CisJaWYgKCRFTlYtPntkYmh9ID0gZ2V0bmV3ZGJoKCkpIHsKKwkJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJvYnRhaW5lZCBhIGRhdGFiYXNlIGhhbmRsZSBmb3IgdGhpcyBzdGF0ZSBwcm9jZXNzLCBzdG9yZWQgYXMgXCRFTlYtPntkYmh9Iik7CiAJfQogCWVsc2UgewogCQlub3RpZnkoJEVSUk9SU3snQ1JJVElDQUwnfSwgMCwgInVuYWJsZSB0byBvYnRhaW4gYSBkYXRhYmFzZSBoYW5kbGUgZm9yIHRoaXMgc3RhdGUgcHJvY2VzcyIpOwpAQCAtODc2LDcgKzg3Niw3IEBACiAJfQogCQogCSMgU2V0IGZsYWcgdG8gYXZvaWQgdGhpcyBzdWJyb3V0aW5lIGZyb20gYmVpbmcgY2FsbGVkIG1vcmUgdGhhbiBvbmNlCi0JJEVOVntzdGF0ZV9leGl0fSA9IDE7CisJJEVOVi0+e3N0YXRlX2V4aXR9ID0gMTsKIAkKIAlteSAoJHJlcXVlc3Rfc3RhdGVfbmFtZV9uZXcsICRjb21wdXRlcl9zdGF0ZV9uYW1lX25ldywgJHJlcXVlc3RfbG9nX2VuZGluZykgPSBAXzsKIAlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgImJlZ2lubmluZyBzdGF0ZSBtb2R1bGUgZXhpdCB0YXNrcywgIiAuCkBAIC0xMDk2LDcgKzEwOTYsNyBAQAogCQogCSMgQ2hlY2sgaWYgbm9ybWFsIG1vZHVsZSBvYmplY3QgZGF0YSBpcyBhdmFpbGFibGUKIAlpZiAoJGNhbGxpbmdfc3ViICYmICRzZWxmICYmICRzZWxmLT5kYXRhKDApICYmICEkc2VsZi0+ZGF0YS0+aXNfYmxvY2tyZXF1ZXN0KCkpIHsKLQkJaWYgKCEkRU5We3N0YXRlX2V4aXR9KSB7CisJCWlmICghJEVOVi0+e3N0YXRlX2V4aXR9KSB7CiAJCQlteSAkcmVxdWVzdF9pZCA9ICRzZWxmLT5kYXRhLT5nZXRfcmVxdWVzdF9pZCgpOwogCQkJbXkgQHJlc2VydmF0aW9uX2lkcyA9ICRzZWxmLT5kYXRhLT5nZXRfcmVzZXJ2YXRpb25faWRzKCk7CiAJCQlpZiAoQHJlc2VydmF0aW9uX2lkcyAmJiAkcmVxdWVzdF9pZCkgewpAQCAtMTExMSwyOSArMTExMSwyOSBAQAogCQogCSMgVW5jb21tZW50IHRvIGVuYWJsZSBkYXRhYmFzZSBtZXRyaWNzCiAJIyBQcmludCB0aGUgbnVtYmVyIG9mIGRhdGFiYXNlIGhhbmRsZXMgdGhpcyBwcm9jZXNzIGNyZWF0ZWQgZm9yIHRlc3RpbmcvZGV2ZWxvcG1lbnQKLQkjaWYgKGRlZmluZWQgJEVOVntkYmhfY291bnR9KSB7Ci0JIwlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgIm51bWJlciBvZiBkYXRhYmFzZSBoYW5kbGVzIHN0YXRlIHByb2Nlc3MgY3JlYXRlZDogJEVOVntkYmhfY291bnR9Iik7CisJI2lmIChkZWZpbmVkICRFTlYtPntkYmhfY291bnR9KSB7CisJIwlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgIm51bWJlciBvZiBkYXRhYmFzZSBoYW5kbGVzIHN0YXRlIHByb2Nlc3MgY3JlYXRlZDogJEVOVi0+e2RiaF9jb3VudH0iKTsKIAkjfQotCSNpZiAoZGVmaW5lZCAkRU5We2RhdGFiYXNlX3NlbGVjdF9jb3VudH0pIHsKLQkjCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAiZGF0YWJhc2Ugc2VsZWN0IHF1ZXJpZXM6ICRFTlZ7ZGF0YWJhc2Vfc2VsZWN0X2NvdW50fSIpOworCSNpZiAoZGVmaW5lZCAkRU5WLT57ZGF0YWJhc2Vfc2VsZWN0X2NvdW50fSkgeworCSMJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJkYXRhYmFzZSBzZWxlY3QgcXVlcmllczogJEVOVi0+e2RhdGFiYXNlX3NlbGVjdF9jb3VudH0iKTsKIAkjfQotCSNpZiAoZGVmaW5lZCAkRU5We2RhdGFiYXNlX3NlbGVjdF9jYWxsc30pIHsKKwkjaWYgKGRlZmluZWQgJEVOVi0+e2RhdGFiYXNlX3NlbGVjdF9jYWxsc30pIHsKIAkjCW15ICRkYXRhYmFzZV9zZWxlY3RfY2FsbHNfc3RyaW5nOwotCSMJbXkgJWhhc2ggPSAleyRFTlZ7ZGF0YWJhc2Vfc2VsZWN0X2NhbGxzfX07CisJIwlteSAlaGFzaCA9ICV7JEVOVi0+e2RhdGFiYXNlX3NlbGVjdF9jYWxsc319OwogCSMJbXkgQHNvcnRlZF9rZXlzID0gc29ydCB7ICRoYXNoeyRifSA8PT4gJGhhc2h7JGF9IH0ga2V5cyglaGFzaCk7CiAJIwlmb3IgbXkgJGtleSAoQHNvcnRlZF9rZXlzKSB7Ci0JIwkJJGRhdGFiYXNlX3NlbGVjdF9jYWxsc19zdHJpbmcgLj0gIiRFTlZ7ZGF0YWJhc2Vfc2VsZWN0X2NhbGxzfXska2V5fTogJGtleVxuIjsKKwkjCQkkZGF0YWJhc2Vfc2VsZWN0X2NhbGxzX3N0cmluZyAuPSAiJEVOVi0+e2RhdGFiYXNlX3NlbGVjdF9jYWxsc317JGtleX06ICRrZXlcbiI7CiAJIwl9CiAJIwlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgImRhdGFiYXNlIHNlbGVjdCBjYWxsZWQgZnJvbTpcbiRkYXRhYmFzZV9zZWxlY3RfY2FsbHNfc3RyaW5nIik7CiAJI30KLQkjaWYgKGRlZmluZWQgJEVOVntkYXRhYmFzZV9leGVjdXRlX2NvdW50fSkgewotCSMJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJkYXRhYmFzZSBleGVjdXRlIHF1ZXJpZXM6ICRFTlZ7ZGF0YWJhc2VfZXhlY3V0ZV9jb3VudH0iKTsKKwkjaWYgKGRlZmluZWQgJEVOVi0+e2RhdGFiYXNlX2V4ZWN1dGVfY291bnR9KSB7CisJIwlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgImRhdGFiYXNlIGV4ZWN1dGUgcXVlcmllczogJEVOVi0+e2RhdGFiYXNlX2V4ZWN1dGVfY291bnR9Iik7CiAJI30KIAogCSMgQ2xvc2UgdGhlIGRhdGFiYXNlIGhhbmRsZQotCWlmIChkZWZpbmVkICRFTlZ7ZGJofSkgewotCQlpZiAoISRFTlZ7ZGJofS0+ZGlzY29ubmVjdCkgewotCQkJbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgIlwkRU5We2RiaH06IGRhdGFiYXNlIGRpc2Nvbm5lY3QgZmFpbGVkLCAiIC4gREJJOjplcnJzdHIoKSk7CisJaWYgKGRlZmluZWQgJEVOVi0+e2RiaH0pIHsKKwkJaWYgKCEkRU5WLT57ZGJofS0+ZGlzY29ubmVjdCkgeworCQkJbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgIlwkRU5WLT57ZGJofTogZGF0YWJhc2UgZGlzY29ubmVjdCBmYWlsZWQsICIgLiBEQkk6OmVycnN0cigpKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC9ibG9ja3JlcXVlc3QucG0gYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML2Jsb2NrcmVxdWVzdC5wbQppbmRleCA2ODQ5ZjlhLi5hNGYzNjJkIDEwMDY0NAotLS0gYS9tYW5hZ2VtZW50bm9kZS9saWIvVkNML2Jsb2NrcmVxdWVzdC5wbQorKysgYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML2Jsb2NrcmVxdWVzdC5wbQpAQCAtNzgsMTEgKzc4LDExIEBACiAJbXkgJHNlbGYgPSBzaGlmdDsKIAkKIAkjIEluaXRpYWxpemUgdGhlIGRhdGFiYXNlIGhhbmRsZSBjb3VudAotCSRFTlZ7ZGJoX2NvdW50fSA9IDA7CisJJEVOVi0+e2RiaF9jb3VudH0gPSAwOwogCQogCSMgQXR0ZW1wdCB0byBnZXQgYSBkYXRhYmFzZSBoYW5kbGUKLQlpZiAoJEVOVntkYmh9ID0gZ2V0bmV3ZGJoKCkpIHsKLQkJbm90aWZ5KCRFUlJPUlN7J09LJ30sIDAsICJvYnRhaW5lZCBhIGRhdGFiYXNlIGhhbmRsZSBmb3IgdGhpcyBzdGF0ZSBwcm9jZXNzLCBzdG9yZWQgYXMgXCRFTlZ7ZGJofSIpOworCWlmICgkRU5WLT57ZGJofSA9IGdldG5ld2RiaCgpKSB7CisJCW5vdGlmeSgkRVJST1JTeydPSyd9LCAwLCAib2J0YWluZWQgYSBkYXRhYmFzZSBoYW5kbGUgZm9yIHRoaXMgc3RhdGUgcHJvY2Vzcywgc3RvcmVkIGFzIFwkRU5WLT57ZGJofSIpOwogCX0KIAllbHNlIHsKIAkJbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgInVuYWJsZSB0byBvYnRhaW4gYSBkYXRhYmFzZSBoYW5kbGUgZm9yIHRoaXMgc3RhdGUgcHJvY2VzcyIpOwpkaWZmIC0tZ2l0IGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC91dGlscy5wbSBiL21hbmFnZW1lbnRub2RlL2xpYi9WQ0wvdXRpbHMucG0KaW5kZXggZGUzZThkNy4uNDMwYzQxZSAxMDA2NDQKLS0tIGEvbWFuYWdlbWVudG5vZGUvbGliL1ZDTC91dGlscy5wbQorKysgYi9tYW5hZ2VtZW50bm9kZS9saWIvVkNML3V0aWxzLnBtCkBAIC01MDksNyArNTA5LDcgQEAKIAllbHNpZiAoIWRlZmluZWQoJEVYRUNVVEVfTkVXKSkgewogCQkkRVhFQ1VURV9ORVcgPSAwOwogCX0KLQkkRU5We2V4ZWN1dGVfbmV3fSA9ICRFWEVDVVRFX05FVyBpZiAkRVhFQ1VURV9ORVc7CisJJEVOVi0+e2V4ZWN1dGVfbmV3fSA9ICRFWEVDVVRFX05FVyBpZiAkRVhFQ1VURV9ORVc7CiAJCiAJIyBTZXQgYm9vbGVhbiB2YXJpYWJsZXMgdG8gMCBvciAxLCB0aGV5IG1heSBiZSBzZXQgdG8gJ25vJyBvciAneWVzJyBpbiB0aGUgY29uZiBmaWxlCiAJZm9yICgkTVlTUUxfU1NMLCAkSkFCQkVSLCAkVkVSQk9TRSwgJERBRU1PTl9NT0RFLCAkU0VUVVBfTU9ERSkgewpAQCAtNjczLDExICs2NzMsMTEgQEAKIAkjIEFzc2VtYmxlIHRoZSBwcm9jZXNzIGlkZW50aWZpZXIgc3RyaW5nCiAJbXkgJHByb2Nlc3NfaWRlbnRpZmllcjsKIAkkcHJvY2Vzc19pZGVudGlmaWVyIC49ICJ8JFBJRHwiOwotCSRwcm9jZXNzX2lkZW50aWZpZXIgLj0gJEVOVntyZXF1ZXN0X2lkfSBpZiBkZWZpbmVkICRFTlZ7cmVxdWVzdF9pZH07CisJJHByb2Nlc3NfaWRlbnRpZmllciAuPSAkRU5WLT57cmVxdWVzdF9pZH0gaWYgZGVmaW5lZCAkRU5WLT57cmVxdWVzdF9pZH07CiAJJHByb2Nlc3NfaWRlbnRpZmllciAuPSAifCI7Ci0JJHByb2Nlc3NfaWRlbnRpZmllciAuPSAkRU5We3Jlc2VydmF0aW9uX2lkfSBpZiBkZWZpbmVkICRFTlZ7cmVzZXJ2YXRpb25faWR9OworCSRwcm9jZXNzX2lkZW50aWZpZXIgLj0gJEVOVi0+e3Jlc2VydmF0aW9uX2lkfSBpZiBkZWZpbmVkICRFTlYtPntyZXNlcnZhdGlvbl9pZH07CiAJJHByb2Nlc3NfaWRlbnRpZmllciAuPSAifCI7Ci0JJHByb2Nlc3NfaWRlbnRpZmllciAuPSAkRU5We3N0YXRlfSB8fCAndmNsZCc7CisJJHByb2Nlc3NfaWRlbnRpZmllciAuPSAkRU5WLT57c3RhdGV9IHx8ICd2Y2xkJzsKIAkkcHJvY2Vzc19pZGVudGlmaWVyIC49ICJ8JGZpbGVuYW1lOiRzdWJ8JGxpbmUiOwogCiAJIyBBc3NlbWJsZSB0aGUgbG9nIG1lc3NhZ2UKQEAgLTczMiw4ICs3MzIsOCBAQAogRU5ECiAJCQkKIAkJCSMgQWRkIHRoZSByZXNlcnZhdGlvbiBpbmZvIHRvIHRoZSBtZXNzYWdlIGlmIHRoZSBEYXRhU3RydWN0dXJlIG9iamVjdCBpcyBkZWZpbmVkIGluICVFTlYKLQkJCWlmICgkRU5We2RhdGF9KSB7Ci0JCQkJbXkgJHJlc2VydmF0aW9uX2luZm9fc3RyaW5nID0gJEVOVntkYXRhfS0+Z2V0X3Jlc2VydmF0aW9uX2luZm9fc3RyaW5nKCk7CisJCQlpZiAoJEVOVi0+e2RhdGF9KSB7CisJCQkJbXkgJHJlc2VydmF0aW9uX2luZm9fc3RyaW5nID0gJEVOVi0+e2RhdGF9LT5nZXRfcmVzZXJ2YXRpb25faW5mb19zdHJpbmcoKTsKIAkJCQlpZiAoJHJlc2VydmF0aW9uX2luZm9fc3RyaW5nKSB7CiAJCQkJCSRyZXNlcnZhdGlvbl9pbmZvX3N0cmluZyA9fiBzL1xzKyQvLzsKIAkJCQkJJGJvZHkgLj0gIiRyZXNlcnZhdGlvbl9pbmZvX3N0cmluZ1xuIjsKQEAgLTc1NSwyNyArNzU1LDI3IEBACiAJCQlteSAkc3ViamVjdCA9ICJQUk9CTEVNIC0tICRtYW5hZ2VtZW50X25vZGVfc2hvcnRfbmFtZXwiOwogCQkJCiAJCQkjIEFzc2VtYmxlIHRoZSBwcm9jZXNzIGlkZW50aWZpZXIgc3RyaW5nCi0JCQlpZiAoZGVmaW5lZCAkRU5We3JlcXVlc3RfaWR9ICYmIGRlZmluZWQgJEVOVntyZXNlcnZhdGlvbl9pZH0gJiYgZGVmaW5lZCAkRU5We3N0YXRlfSkgewotCQkJCSRzdWJqZWN0IC49ICIkRU5We3JlcXVlc3RfaWR9OiRFTlZ7cmVzZXJ2YXRpb25faWR9fCRFTlZ7c3RhdGV9fCRmaWxlbmFtZSI7CisJCQlpZiAoZGVmaW5lZCAkRU5WLT57cmVxdWVzdF9pZH0gJiYgZGVmaW5lZCAkRU5WLT57cmVzZXJ2YXRpb25faWR9ICYmIGRlZmluZWQgJEVOVi0+e3N0YXRlfSkgeworCQkJCSRzdWJqZWN0IC49ICIkRU5WLT57cmVxdWVzdF9pZH06JEVOVi0+e3Jlc2VydmF0aW9uX2lkfXwkRU5WLT57c3RhdGV9fCRmaWxlbmFtZSI7CiAJCQl9CiAJCQllbHNlIHsKIAkJCQkkc3ViamVjdCAuPSAiJGNhbGxlcl9pbmZvIjsKIAkJCX0KIAkJCQotCQkJaWYgKGRlZmluZWQoJEVOVntkYXRhfSkpIHsKLQkJCQlteSAkYmxvY2tyZXF1ZXN0X25hbWUgPSAkRU5We2RhdGF9LT5nZXRfYmxvY2tyZXF1ZXN0X25hbWUoMCk7CisJCQlpZiAoZGVmaW5lZCgkRU5WLT57ZGF0YX0pKSB7CisJCQkJbXkgJGJsb2NrcmVxdWVzdF9uYW1lID0gJEVOVi0+e2RhdGF9LT5nZXRfYmxvY2tyZXF1ZXN0X25hbWUoMCk7CiAJCQkJJHN1YmplY3QgLj0gInwkYmxvY2tyZXF1ZXN0X25hbWUiIGlmIChkZWZpbmVkICRibG9ja3JlcXVlc3RfbmFtZSk7CiAJCQkJCi0JCQkJbXkgJGNvbXB1dGVyX25hbWUgPSAkRU5We2RhdGF9LT5nZXRfY29tcHV0ZXJfc2hvcnRfbmFtZSgwKTsKKwkJCQlteSAkY29tcHV0ZXJfbmFtZSA9ICRFTlYtPntkYXRhfS0+Z2V0X2NvbXB1dGVyX3Nob3J0X25hbWUoMCk7CiAJCQkJJHN1YmplY3QgLj0gInwkY29tcHV0ZXJfbmFtZSIgaWYgKGRlZmluZWQgJGNvbXB1dGVyX25hbWUpOwogCQkJCQotCQkJCW15ICR2bWhvc3RfaG9zdG5hbWUgPSAkRU5We2RhdGF9LT5nZXRfdm1ob3N0X3Nob3J0X25hbWUoMCk7CisJCQkJbXkgJHZtaG9zdF9ob3N0bmFtZSA9ICRFTlYtPntkYXRhfS0+Z2V0X3ZtaG9zdF9zaG9ydF9uYW1lKDApOwogCQkJCSRzdWJqZWN0IC49ICI+JHZtaG9zdF9ob3N0bmFtZSIgaWYgKGRlZmluZWQgJHZtaG9zdF9ob3N0bmFtZSk7CiAJCQkJCi0JCQkJbXkgJGltYWdlX25hbWUgPSAkRU5We2RhdGF9LT5nZXRfaW1hZ2VfbmFtZSgwKTsKKwkJCQlteSAkaW1hZ2VfbmFtZSA9ICRFTlYtPntkYXRhfS0+Z2V0X2ltYWdlX25hbWUoMCk7CiAJCQkJJHN1YmplY3QgLj0gInwkaW1hZ2VfbmFtZSIgaWYgKGRlZmluZWQgJGltYWdlX25hbWUpOwogCQkJCQotCQkJCW15ICR1c2VyX25hbWUgPSAkRU5We2RhdGF9LT5nZXRfdXNlcl9sb2dpbl9pZCgwKTsKKwkJCQlteSAkdXNlcl9uYW1lID0gJEVOVi0+e2RhdGF9LT5nZXRfdXNlcl9sb2dpbl9pZCgwKTsKIAkJCQkkc3ViamVjdCAuPSAifCR1c2VyX25hbWUiIGlmIChkZWZpbmVkICR1c2VyX25hbWUpOwogCQkJfQogCQkJCkBAIC0xMjAwLDcgKzEyMDAsNyBAQAogCQllbHNlIHsKIAkJCSMgRW5kIHRpbWUgaXMgbW9yZSB0aGFuIDEwIG1pbnV0ZXMgaW4gdGhlIGZ1dHVyZQogCQkJaWYgKCRzZXJ2ZXJyZXF1ZXN0KSB7CQotCQkJCW15ICRzZXJ2ZXJfaW51c2VfY2hlY2tfdGltZSA9ICgkRU5We21hbmFnZW1lbnRfbm9kZV9pbmZvfS0+e1NFUlZFUl9JTlVTRV9DSEVDS30gKiAtMSk7CisJCQkJbXkgJHNlcnZlcl9pbnVzZV9jaGVja190aW1lID0gKCRFTlYtPnttYW5hZ2VtZW50X25vZGVfaW5mb30tPntTRVJWRVJfSU5VU0VfQ0hFQ0t9ICogLTEpOwogCQkJCWlmICgkbGFzdGNoZWNrX2RpZmZfbWludXRlcyA8PSAkc2VydmVyX2ludXNlX2NoZWNrX3RpbWUpIHsKIAkJCQkJcmV0dXJuICJwb2xsIjsKIAkJCQl9CkBAIC0xMjA5LDcgKzEyMDksNyBAQAogCQkJCX0KIAkJCX0KIAkJCWVsc2lmICgkcmVzZXJ2YXRpb25fY250ID4gMSkgewotCQkJCW15ICRjbHVzdGVyX2ludXNlX2NoZWNrX3RpbWUgPSAoJEVOVnttYW5hZ2VtZW50X25vZGVfaW5mb30tPntDTFVTVEVSX0lOVVNFX0NIRUNLfSAqIC0xKTs7IAorCQkJCW15ICRjbHVzdGVyX2ludXNlX2NoZWNrX3RpbWUgPSAoJEVOVi0+e21hbmFnZW1lbnRfbm9kZV9pbmZvfS0+e0NMVVNURVJfSU5VU0VfQ0hFQ0t9ICogLTEpOzsKIAkJCQlpZiAoJGxhc3RjaGVja19kaWZmX21pbnV0ZXMgPD0gJGNsdXN0ZXJfaW51c2VfY2hlY2tfdGltZSkgewogCQkJCQlyZXR1cm4gInBvbGwiOwogCQkJCX0KQEAgLTEyMTksNyArMTIxOSw3IEBACiAJCQl9CiAJCQllbHNlIHsKIAkJCQkjbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJyZXNlcnZhdGlvbiB3aWxsIGVuZCBpbiBtb3JlIHRoYW4gMTAgbWludXRlcyAoJGVuZF9kaWZmX21pbnV0ZXMpIik7Ci0JCQkJbXkgJGdlbmVyYWxfaW51c2VfY2hlY2tfdGltZSA9ICgkRU5We21hbmFnZW1lbnRfbm9kZV9pbmZvfS0+e0dFTkVSQUxfSU5VU0VfQ0hFQ0t9ICogLTEpOworCQkJCW15ICRnZW5lcmFsX2ludXNlX2NoZWNrX3RpbWUgPSAoJEVOVi0+e21hbmFnZW1lbnRfbm9kZV9pbmZvfS0+e0dFTkVSQUxfSU5VU0VfQ0hFQ0t9ICogLTEpOwogCQkJCWlmICgkbGFzdGNoZWNrX2RpZmZfbWludXRlcyA8PSAkZ2VuZXJhbF9pbnVzZV9jaGVja190aW1lKSB7CiAJCQkJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAicmVzZXJ2YXRpb24gd2FzIGxhc3QgY2hlY2tlZCBtb3JlIHRoYW4gJGdlbmVyYWxfaW51c2VfY2hlY2tfdGltZSBtaW51dGVzIGFnbyAoJGxhc3RjaGVja19kaWZmX21pbnV0ZXMpLCByZXR1cm5pbmcgJ3BvbGwnIik7CiAJCQkJCXJldHVybiAicG9sbCI7CkBAIC0yMTgyLDE5ICsyMTgyLDE5IEBACiAJbXkgJGRiaDsKIAogCSMgVHJ5IHRvIHVzZSB0aGUgZXhpc3RpbmcgZGF0YWJhc2UgaGFuZGxlCi0JaWYgKCRFTlZ7ZGJofSAmJiAkRU5We2RiaH0tPnBpbmcgJiYgJEVOVntkYmh9LT57TmFtZX0gPX4gL14kZGF0YWJhc2U6LykgeworCWlmICgkRU5WLT57ZGJofSAmJiAkRU5WLT57ZGJofS0+cGluZyAmJiAkRU5WLT57ZGJofS0+e05hbWV9ID1+IC9eJGRhdGFiYXNlOi8pIHsKIAkJI25vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAidXNpbmcgZGF0YWJhc2UgaGFuZGxlIHN0b3JlZCBpbiBcJEVOVntkYmh9Iik7Ci0JCXJldHVybiAkRU5We2RiaH07CisJCXJldHVybiAkRU5WLT57ZGJofTsKIAl9Ci0JZWxzaWYgKCRFTlZ7ZGJofSAmJiAkRU5We2RiaH0tPnBpbmcpIHsKLQkJbXkgKCRzdG9yZWRfZGF0YWJhc2VfbmFtZSkgPSAkRU5We2RiaH0tPntOYW1lfSA9fiAvXihbXjpdKikvOwotCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgImRhdGFiYXNlIHJlcXVlc3RlZCAoJGRhdGFiYXNlKSBkb2VzIG5vdCBtYXRjaCBoYW5kbGUgc3RvcmVkIGluIFwkRU5We2RiaH0gKCIgLiAkRU5We2RiaH0tPntOYW1lfSAuICIpIik7CisJZWxzaWYgKCRFTlYtPntkYmh9ICYmICRFTlYtPntkYmh9LT5waW5nKSB7CisJCW15ICgkc3RvcmVkX2RhdGFiYXNlX25hbWUpID0gJEVOVi0+e2RiaH0tPntOYW1lfSA9fiAvXihbXjpdKikvOworCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgImRhdGFiYXNlIHJlcXVlc3RlZCAoJGRhdGFiYXNlKSBkb2VzIG5vdCBtYXRjaCBoYW5kbGUgc3RvcmVkIGluIFwkRU5WLT57ZGJofSAoIiAuICRFTlYtPntkYmh9LT57TmFtZX0gLiAiKSIpOwogCX0KLQllbHNpZiAoZGVmaW5lZCAkRU5We2RiaH0pIHsKLQkJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJ1bmFibGUgdG8gdXNlIGRhdGFiYXNlIGhhbmRsZSBzdG9yZWQgaW4gXCRFTlZ7ZGJofSIpOworCWVsc2lmIChkZWZpbmVkICRFTlYtPntkYmh9KSB7CisJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAidW5hYmxlIHRvIHVzZSBkYXRhYmFzZSBoYW5kbGUgc3RvcmVkIGluIFwkRU5WLT57ZGJofSIpOwogCX0KIAllbHNlIHsKLQkJI25vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAiXCRFTlZ7ZGJofSBpcyBub3QgZGVmaW5lZCwgY3JlYXRpbmcgbmV3IGRhdGFiYXNlIGhhbmRsZSIpOworCQkjbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJcJEVOVi0+e2RiaH0gaXMgbm90IGRlZmluZWQsIGNyZWF0aW5nIG5ldyBkYXRhYmFzZSBoYW5kbGUiKTsKIAl9CiAKIAlteSAkYXR0ZW1wdCAgICAgID0gMDsKQEAgLTIyMjMsNyArMjIyMyw3IEBACiAJCWlmICgkZGJoICYmICRkYmgtPnBpbmcpIHsKIAkJCSMgU2V0IEluYWN0aXZlRGVzdHJveSA9IDEgZm9yIGFsbCBkYmgncyBiZWxvbmdpbmcgdG8gY2hpbGQgcHJvY2Vzc2VzCiAJCQkjIFNldCBJbmFjdGl2ZURlc3Ryb3kgPSAwIGZvciBhbGwgZGJoJ3MgYmVsb25naW5nIHRvIHZjbGQKLQkJCWlmICghZGVmaW5lZCAkRU5We3ZjbGR9IHx8ICEkRU5We3ZjbGR9KSB7CisJCQlpZiAoIWRlZmluZWQgJEVOVi0+e3ZjbGR9IHx8ICEkRU5WLT57dmNsZH0pIHsKIAkJCQkkZGJoLT57SW5hY3RpdmVEZXN0cm95fSA9IDE7CiAJCQl9CiAJCQllbHNlIHsKQEAgLTIyMzIsMTQgKzIyMzIsMTQgQEAKIAogCQkJIyBJbmNyZW1lbnQgdGhlIGRiaCBjb3VudCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZiBpdCBpcyBkZWZpbmVkCiAJCQkjIFRoaXMgaXMgb25seSBmb3IgZGV2ZWxvcG1lbnQgYW5kIHRlc3RpbmcgdG8gc2VlIGhvdyBtYW55IGhhbmRsZXMgYSBwcm9jZXNzIGNyZWF0ZXMKLQkJCSRFTlZ7ZGJoX2NvdW50fSsrIGlmIGRlZmluZWQoJEVOVntkYmhfY291bnR9KTsKKwkJCSRFTlYtPntkYmhfY291bnR9KysgaWYgZGVmaW5lZCgkRU5WLT57ZGJoX2NvdW50fSk7CiAKIAkJCSMgU3RvcmUgdGhlIG5ld2x5IGNyZWF0ZWQgZGF0YWJhc2UgaGFuZGxlIGluIGFuIGVudmlyb25tZW50IHZhcmlhYmxlCiAJCQkjIE9ubHkgc3RvcmUgaXQgaWYgJEVOVntkYmh9IGlzIGFscmVhZHkgZGVmaW5lZAogCQkJIyBJdCdzIHVwIHRvIG90aGVyIG1vZHVsZXMgdG8gZGV0ZXJtaW5lIGlmICRFTlZ7ZGJofSBpcyBkZWZpbmVkLCB0aGV5IG11c3QgaW5pdGlhbGl6ZSBpdAotCQkJaWYgKGRlZmluZWQgJEVOVntkYmh9KSB7Ci0JCQkJJEVOVntkYmh9ID0gJGRiaDsKLQkJCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgImRhdGFiYXNlIGhhbmRsZSBzdG9yZWQgaW4gXCRFTlZ7ZGJofSIpOworCQkJaWYgKGRlZmluZWQgJEVOVi0+e2RiaH0pIHsKKwkJCQkkRU5WLT57ZGJofSA9ICRkYmg7CisJCQkJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJkYXRhYmFzZSBoYW5kbGUgc3RvcmVkIGluIFwkRU5WLT57ZGJofSIpOwogCQkJfQogCiAJCQlyZXR1cm4gJGRiaDsKQEAgLTIzMDQsNyArMjMwNCw3IEBACiAKICAgICAgICAgbXkgJGNvbW1hbmQgPSAiL3Zhci9yb290L1ZDTC9vYW1lc3NhZ2UgXCIkbWVzc2FnZVwiIjsKIAotICAgICAgICBpZiAocnVuX3NzaF9jb21tYW5kKCRub2RlLCAkRU5We21hbmFnZW1lbnRfbm9kZV9pbmZvfXtrZXlzfSwgJGNvbW1hbmQpKSB7CisgICAgICAgIGlmIChydW5fc3NoX2NvbW1hbmQoJG5vZGUsICRFTlYtPnttYW5hZ2VtZW50X25vZGVfaW5mb30tPntrZXlzfSwgJGNvbW1hbmQpKSB7CiAgICAgICAgICAgICAgICAgbm90aWZ5KCRFUlJPUlN7J09LJ30sIDAsICJzdWNjZXNzZnVsbHkgc2VudCBtZXNzYWdlIHRvIE9TWCB1c2VyICR1c2VyIG9uICRub2RlIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KQEAgLTIzMjksMTAgKzIzMjksMTAgQEAKIAlteSAoJHBhc3N3b3JkX2xlbmd0aCwgJGluY2x1ZGVfc3BlY2lhbF9jaGFyYWN0ZXJzKSA9IEBfOwogCQogCWlmICghJHBhc3N3b3JkX2xlbmd0aCkgewotCQkkcGFzc3dvcmRfbGVuZ3RoID0gJEVOVnttYW5hZ2VtZW50X25vZGVfaW5mb317VVNFUl9QQVNTV09SRF9MRU5HVEh9IHx8IDg7CisJCSRwYXNzd29yZF9sZW5ndGggPSAkRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99LT57VVNFUl9QQVNTV09SRF9MRU5HVEh9IHx8IDg7CiAJfQogCWlmICghZGVmaW5lZCgkaW5jbHVkZV9zcGVjaWFsX2NoYXJhY3RlcnMpKSB7Ci0JCSRpbmNsdWRlX3NwZWNpYWxfY2hhcmFjdGVycyA9ICRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99e0lOQ0xVREVfU1BFQ0lBTF9DSEFSU307CisJCSRpbmNsdWRlX3NwZWNpYWxfY2hhcmFjdGVycyA9ICRFTlYtPnttYW5hZ2VtZW50X25vZGVfaW5mb30tPntJTkNMVURFX1NQRUNJQUxfQ0hBUlN9OwogCX0KIAkKIAkjU2tpcCBjZXJ0YWluIGNvbmZ1c2luZyBjaGFycyBsaWtlOiBpSTFsTCwwT28gWnoyCkBAIC0yNTk2LDE3ICsyNTk2LDE3IEBACiAJbXkgJGNhbGxpbmdfc3ViID0gKGNhbGxlcigxKSlbM10gfHwgJ3VuZGVmaW5lZCc7CiAJCiAJIyBJbml0aWFsaXplIHRoZSBkYXRhYmFzZV9zZWxlY3RfY2FsbHMgZWxlbWVudCBpZiBub3QgYWxyZWFkeSBpbml0aWFsaXplZAotCWlmICghcmVmKCRFTlZ7ZGF0YWJhc2Vfc2VsZWN0X2NhbGxzfSkpIHsKLQkJJEVOVntkYXRhYmFzZV9zZWxlY3RfY2FsbHN9ID0ge307CisJaWYgKCFyZWYoJEVOVi0+e2RhdGFiYXNlX3NlbGVjdF9jYWxsc30pKSB7CisJCSRFTlYtPntkYXRhYmFzZV9zZWxlY3RfY2FsbHN9ID0ge307CiAJfQogCQogCSMgRm9yIHBlcmZvcm1hbmNlIHR1bmluZyAtIGNvdW50IHRoZSBudW1iZXIgb2YgY2FsbHMKLQkkRU5We2RhdGFiYXNlX3NlbGVjdF9jb3VudH0rKzsKLQlpZiAoIWRlZmluZWQoJEVOVntkYXRhYmFzZV9zZWxlY3RfY2FsbHN9eyRjYWxsaW5nX3N1Yn0pKSB7Ci0JCSRFTlZ7ZGF0YWJhc2Vfc2VsZWN0X2NhbGxzfXskY2FsbGluZ19zdWJ9ID0gMTsKKwkkRU5WLT57ZGF0YWJhc2Vfc2VsZWN0X2NvdW50fSsrOworCWlmICghZGVmaW5lZCgkRU5WLT57ZGF0YWJhc2Vfc2VsZWN0X2NhbGxzfS0+eyRjYWxsaW5nX3N1Yn0pKSB7CisJCSRFTlYtPntkYXRhYmFzZV9zZWxlY3RfY2FsbHN9LT57JGNhbGxpbmdfc3VifSA9IDE7CiAJfQogCWVsc2UgewotCQkkRU5We2RhdGFiYXNlX3NlbGVjdF9jYWxsc317JGNhbGxpbmdfc3VifSsrOworCQkkRU5WLT57ZGF0YWJhc2Vfc2VsZWN0X2NhbGxzfS0+eyRjYWxsaW5nX3N1Yn0rKzsKIAl9CiAJCiAJJGRhdGFiYXNlID0gJERBVEFCQVNFIHVubGVzcyAkZGF0YWJhc2U7CkBAIC0yNjI3LDcgKzI2MjcsNyBAQAogCSMgQ2hlY2sgdGhlIHNlbGVjdCBzdGF0ZW1lbnQgaGFuZGxlCiAJaWYgKCEkc2VsZWN0X2hhbmRsZSkgewogCQlub3RpZnkoJEVSUk9SU3snV0FSTklORyd9LCAwLCAiY291bGQgbm90IHByZXBhcmUgc2VsZWN0IHN0YXRlbWVudCwgJHNlbGVjdF9zdGF0ZW1lbnQsICIgLiAkZGJoLT5lcnJzdHIoKSk7Ci0JCSRkYmgtPmRpc2Nvbm5lY3QgaWYgIWRlZmluZWQgJEVOVntkYmh9OworCQkkZGJoLT5kaXNjb25uZWN0IGlmICFkZWZpbmVkICRFTlYtPntkYmh9OwogCQlyZXR1cm4gKCk7CiAJfQogCkBAIC0yNjQxLDcgKzI2NDEsNyBAQAogCQkJImVycm9yOiAiIC4gJGRiaC0+ZXJyc3RyKCkKIAkJKTsKIAkJJHNlbGVjdF9oYW5kbGUtPmZpbmlzaDsKLQkJJGRiaC0+ZGlzY29ubmVjdCBpZiAhZGVmaW5lZCAkRU5We2RiaH07CisJCSRkYmgtPmRpc2Nvbm5lY3QgaWYgIWRlZmluZWQgJEVOVi0+e2RiaH07CiAJCXJldHVybiAoKTsKIAl9CiAKQEAgLTI2NDksNyArMjY0OSw3IEBACiAJIyBBbiBhcnJheSByZWZlcmVuY2UgaXMgY3JlYXRlZCBjb250YWluaW5nIGhhc2ggcmVmcyBiZWNhdXNlIHt9IGlzIHBhc3NlZCB0byBmZXRjaGFsbF9hcnJheXJlZgogCW15IEByZXR1cm5fcm93cyA9IEB7JHNlbGVjdF9oYW5kbGUtPmZldGNoYWxsX2FycmF5cmVmKHt9KX07CiAJJHNlbGVjdF9oYW5kbGUtPmZpbmlzaDsKLQkkZGJoLT5kaXNjb25uZWN0IGlmICFkZWZpbmVkICRFTlZ7ZGJofTsKKwkkZGJoLT5kaXNjb25uZWN0IGlmICFkZWZpbmVkICRFTlYtPntkYmh9OwogCQogCXJldHVybiBAcmV0dXJuX3Jvd3M7CiB9ICMjIGVuZCBzdWIgZGF0YWJhc2Vfc2VsZWN0CkBAIC0yNjY4LDcgKzI2NjgsNyBAQAogc3ViIGRhdGFiYXNlX2V4ZWN1dGUgewogCW15ICgkc3FsX3N0YXRlbWVudCwgJGRhdGFiYXNlKSA9IEBfOwogCQotCSRFTlZ7ZGF0YWJhc2VfZXhlY3V0ZV9jb3VudH0rKzsKKwkkRU5WLT57ZGF0YWJhc2VfZXhlY3V0ZV9jb3VudH0rKzsKIAkKIAlteSAkZGJoOwogCWlmICghKCRkYmggPSBnZXRuZXdkYmgoJGRhdGFiYXNlKSkpIHsKQEAgLTI2ODYsNyArMjY4Niw3IEBACiAJaWYgKCEkc3RhdGVtZW50X2hhbmRsZSkgewogCQlteSAkZXJyb3Jfc3RyaW5nID0gJGRiaC0+ZXJyc3RyKCkgfHwgJzx1bmtub3duIGVycm9yPic7CiAJCW5vdGlmeSgkRVJST1JTeydXQVJOSU5HJ30sIDAsICJjb3VsZCBub3QgcHJlcGFyZSBTUUwgc3RhdGVtZW50LCAkc3FsX3N0YXRlbWVudCwgJGVycm9yX3N0cmluZyIpOwotCQkkZGJoLT5kaXNjb25uZWN0IGlmICFkZWZpbmVkICRFTlZ7ZGJofTsKKwkJJGRiaC0+ZGlzY29ubmVjdCBpZiAhZGVmaW5lZCAkRU5WLT57ZGJofTsKIAkJcmV0dXJuOwogCX0KIAkKQEAgLTI2OTUsNyArMjY5NSw3IEBACiAJaWYgKCFkZWZpbmVkKCRyZXN1bHQpKSB7CiAJCW15ICRlcnJvcl9zdHJpbmcgPSAkZGJoLT5lcnJzdHIoKSB8fCAnPHVua25vd24gZXJyb3I+JzsKIAkJJHN0YXRlbWVudF9oYW5kbGUtPmZpbmlzaDsKLQkJJGRiaC0+ZGlzY29ubmVjdCBpZiAhZGVmaW5lZCAkRU5We2RiaH07CisJCSRkYmgtPmRpc2Nvbm5lY3QgaWYgIWRlZmluZWQgJEVOVi0+e2RiaH07CiAJCQogCQlpZiAod2FudGFycmF5KSB7CiAJCQlyZXR1cm4gKDAsICRlcnJvcl9zdHJpbmcpOwpAQCAtMjcxNyw3ICsyNzE3LDcgQEAKIAkJbXkgJHNxbF9pbnNlcnRpZCA9ICRzdGF0ZW1lbnRfaGFuZGxlLT57J215c3FsX2luc2VydGlkJ307CiAJCW15ICRzcWxfd2FybmluZ19jb3VudCA9ICRzdGF0ZW1lbnRfaGFuZGxlLT57J215c3FsX3dhcm5pbmdfY291bnQnfTsKIAkJJHN0YXRlbWVudF9oYW5kbGUtPmZpbmlzaDsKLQkJJGRiaC0+ZGlzY29ubmVjdCBpZiAhZGVmaW5lZCAkRU5We2RiaH07CisJCSRkYmgtPmRpc2Nvbm5lY3QgaWYgIWRlZmluZWQgJEVOVi0+e2RiaH07CiAJCWlmICgkc3FsX2luc2VydGlkKSB7CiAJCQlyZXR1cm4gJHNxbF9pbnNlcnRpZDsKIAkJfQpAQCAtMjcyNyw3ICsyNzI3LDcgQEAKIAl9CiAJZWxzZSB7CiAJCSRzdGF0ZW1lbnRfaGFuZGxlLT5maW5pc2g7Ci0JCSRkYmgtPmRpc2Nvbm5lY3QgaWYgIWRlZmluZWQgJEVOVntkYmh9OworCQkkZGJoLT5kaXNjb25uZWN0IGlmICFkZWZpbmVkICRFTlYtPntkYmh9OwogCQlyZXR1cm4gJHJlc3VsdDsKIAl9CiAKQEAgLTI3NzUsNyArMjc3NSw3IEBACiAJaWYgKCEkc3RhdGVtZW50X2hhbmRsZSkgewogCQlteSAkZXJyb3Jfc3RyaW5nID0gJGRiaC0+ZXJyc3RyKCkgfHwgJzx1bmtub3duIGVycm9yPic7CiAJCW5vdGlmeSgkRVJST1JTeydXQVJOSU5HJ30sIDAsICJmYWlsZWQgdG8gcHJlcGFyZSBTUUwgVVBEQVRFIHN0YXRlbWVudCwgJHVwZGF0ZV9zdGF0ZW1lbnQsICRlcnJvcl9zdHJpbmciKTsKLQkJJGRiaC0+ZGlzY29ubmVjdCBpZiAhZGVmaW5lZCAkRU5We2RiaH07CisJCSRkYmgtPmRpc2Nvbm5lY3QgaWYgIWRlZmluZWQgJEVOVi0+e2RiaH07CiAJCXJldHVybjsKIAl9CiAJCkBAIC0yNzg1LDE0ICsyNzg1LDE0IEBACiAJaWYgKCFkZWZpbmVkKCRyZXN1bHQpKSB7CiAJCW15ICRlcnJvcl9zdHJpbmcgPSAkZGJoLT5lcnJzdHIoKSB8fCAnPHVua25vd24gZXJyb3I+JzsKIAkJJHN0YXRlbWVudF9oYW5kbGUtPmZpbmlzaDsKLQkJJGRiaC0+ZGlzY29ubmVjdCBpZiAhZGVmaW5lZCAkRU5We2RiaH07CisJCSRkYmgtPmRpc2Nvbm5lY3QgaWYgIWRlZmluZWQgJEVOVi0+e2RiaH07CiAJCW5vdGlmeSgkRVJST1JTeydXQVJOSU5HJ30sIDAsICJmYWlsZWQgdG8gZXhlY3V0ZSBTUUwgVVBEQVRFIHN0YXRlbWVudDogJHVwZGF0ZV9zdGF0ZW1lbnRcbmVycm9yOlxuJGVycm9yX3N0cmluZyIpOwogCQlyZXR1cm47CiAJfQogCQogCW15ICR1cGRhdGVkX3Jvd19jb3VudCA9ICRzdGF0ZW1lbnRfaGFuZGxlLT5yb3dzOwogCSRzdGF0ZW1lbnRfaGFuZGxlLT5maW5pc2g7Ci0JJGRiaC0+ZGlzY29ubmVjdCBpZiAhZGVmaW5lZCAkRU5We2RiaH07CisJJGRiaC0+ZGlzY29ubmVjdCBpZiAhZGVmaW5lZCAkRU5WLT57ZGJofTsKIAkKIAkkdXBkYXRlX3N0YXRlbWVudCA9fiBzL1tcblxzXSsvIC9nOwogCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAicmV0dXJuaW5nIG51bWJlciBvZiByb3dzIGFmZmVjdGVkIGJ5IFVQREFURSBzdGF0ZW1lbnQ6ICR1cGRhdGVkX3Jvd19jb3VudFxuJHVwZGF0ZV9zdGF0ZW1lbnQiKTsKQEAgLTI5MzUsNyArMjkzNSw3IEBACiAJCQogCQkjIFBvcHVsYXRlIG5hdHBvcnQgdGFibGUgZm9yIHJlc2VydmF0aW9uCiAJCSMgTWFrZSBzdXJlIHRoaXMgd2Fzbid0IGNhbGxlZCBmcm9tIHBvcHVsYXRlX3Jlc2VydmF0aW9uX25hdHBvcnQgb3IgZWxzZSByZWN1cnNpdmUgbG9vcCB3aWxsIG9jY3VyCi0JCWlmIChkZWZpbmVkICRFTlZ7cmVzZXJ2YXRpb25faWR9ICYmICRFTlZ7cmVzZXJ2YXRpb25faWR9IGVxICRyZXNlcnZhdGlvbl9pZCkgeworCQlpZiAoZGVmaW5lZCAkRU5WLT57cmVzZXJ2YXRpb25faWR9ICYmICRFTlYtPntyZXNlcnZhdGlvbl9pZH0gZXEgJHJlc2VydmF0aW9uX2lkKSB7CiAJCQlteSAkY2FsbGVyX3RyYWNlID0gZ2V0X2NhbGxlcl90cmFjZSg1KTsKIAkJCWlmICgkY2FsbGVyX3RyYWNlICF+IC9wb3B1bGF0ZV9yZXNlcnZhdGlvbl9uYXRwb3J0LykgewogCQkJCWlmICgkcmVxdWVzdF9zdGF0ZV9uYW1lID1+IC8obmV3fHJlc2VydmVkfG1vZGlmaWVkfHRlc3QpLykgewpAQCAtMzA5NCw4ICszMDk0LDggQEAKIAkJcmV0dXJuOwogCX0KIAkKLQlpZiAoISRub19jYWNoZSAmJiBkZWZpbmVkKCRFTlZ7bG9nX2luZm99eyRyZXF1ZXN0X2lkfSkpIHsKLQkJcmV0dXJuICRFTlZ7bG9nX2luZm99eyRyZXF1ZXN0X2lkfTsKKwlpZiAoISRub19jYWNoZSAmJiBkZWZpbmVkKCRFTlYtPntsb2dfaW5mb30tPnskcmVxdWVzdF9pZH0pKSB7CisJCXJldHVybiAkRU5WLT57bG9nX2luZm99LT57JHJlcXVlc3RfaWR9OwogCX0KIAkKIAkjIEdldCBhIGhhc2ggcmVmIGNvbnRhaW5pbmcgdGhlIGRhdGFiYXNlIGNvbHVtbiBuYW1lcwpAQCAtMzE2OSw3ICszMTY5LDcgQEAKIAkJfQogCX0KIAkKLQkkRU5We2xvZ19pbmZvfXskcmVxdWVzdF9pZH0gPSAkbG9nX2luZm87CisJJEVOVi0+e2xvZ19pbmZvfS0+eyRyZXF1ZXN0X2lkfSA9ICRsb2dfaW5mbzsKIAkjbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJyZXRyaWV2ZWQgbG9nIGluZm8gZm9yIHJlcXVlc3QgJHJlcXVlc3RfaWQ6XG4iIC4gZm9ybWF0X2RhdGEoJGxvZ19pbmZvKSk7CiAJcmV0dXJuICRsb2dfaW5mbzsKIH0KQEAgLTMzNjMsMTEgKzMzNjMsMTEgQEAKIAl9CiAJCiAJIyBDaGVjayBpZiBjYWNoZWQgaW1hZ2UgaW5mbyBleGlzdHMKLQlpZiAoISRub19jYWNoZSAmJiBkZWZpbmVkKCRFTlZ7aW1hZ2VfaW5mb317JGltYWdlX2lkZW50aWZpZXJ9KSkgeworCWlmICghJG5vX2NhY2hlICYmIGRlZmluZWQoJEVOVi0+e2ltYWdlX2luZm99LT57JGltYWdlX2lkZW50aWZpZXJ9KSkgewogCQkjIENoZWNrIHRoZSB0aW1lIHRoZSBpbmZvIHdhcyBsYXN0IHJldHJpZXZlZAotCQlteSAkZGF0YV9hZ2Vfc2Vjb25kcyA9ICh0aW1lIC0gJEVOVntpbWFnZV9pbmZvfXskaW1hZ2VfaWRlbnRpZmllcn17UkVUUklFVkFMX1RJTUV9KTsKKwkJbXkgJGRhdGFfYWdlX3NlY29uZHMgPSAodGltZSAtICRFTlYtPntpbWFnZV9pbmZvfS0+eyRpbWFnZV9pZGVudGlmaWVyfS0+e1JFVFJJRVZBTF9USU1FfSk7CiAJCWlmICgkZGF0YV9hZ2Vfc2Vjb25kcyA8IDYwMCkgewotCQkJcmV0dXJuICRFTlZ7aW1hZ2VfaW5mb317JGltYWdlX2lkZW50aWZpZXJ9OworCQkJcmV0dXJuICRFTlYtPntpbWFnZV9pbmZvfS0+eyRpbWFnZV9pZGVudGlmaWVyfTsKIAkJfQogCQllbHNlIHsKIAkJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAicmV0cmlldmluZyBjdXJyZW50IGltYWdlIGluZm8gZm9yICckaW1hZ2VfaWRlbnRpZmllcicgZnJvbSBkYXRhYmFzZSwgY2FjaGVkIGRhdGEgaXMgc3RhbGU6ICRkYXRhX2FnZV9zZWNvbmRzIHNlY29uZHMgb2xkIik7CkBAIC0zNDkyLDkgKzM0OTIsOSBAQAogCSRpbWFnZV9pbmZvLT57aW1hZ2Vkb21haW59ID0gJGRvbWFpbl9pbmZvOwogCQogCSNub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgInJldHJpZXZlZCBpbmZvIGZvciBpbWFnZSAnJGltYWdlX2lkZW50aWZpZXInOlxuIiAuIGZvcm1hdF9kYXRhKCRpbWFnZV9pbmZvKSk7Ci0JJEVOVntpbWFnZV9pbmZvfXskaW1hZ2VfaWRlbnRpZmllcn0gPSAkaW1hZ2VfaW5mbzsKLQkkRU5We2ltYWdlX2luZm99eyRpbWFnZV9pZGVudGlmaWVyfXtSRVRSSUVWQUxfVElNRX0gPSB0aW1lOwotCXJldHVybiAkRU5We2ltYWdlX2luZm99eyRpbWFnZV9pZGVudGlmaWVyfTsKKwkkRU5WLT57aW1hZ2VfaW5mb30tPnskaW1hZ2VfaWRlbnRpZmllcn0gPSAkaW1hZ2VfaW5mbzsKKwkkRU5WLT57aW1hZ2VfaW5mb30tPnskaW1hZ2VfaWRlbnRpZmllcn0tPntSRVRSSUVWQUxfVElNRX0gPSB0aW1lOworCXJldHVybiAkRU5WLT57aW1hZ2VfaW5mb30tPnskaW1hZ2VfaWRlbnRpZmllcn07CiB9CiAKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTM1MTUsMTEgKzM1MTUsMTEgQEAKIAl9CiAJCiAJIyBDaGVjayBpZiBjYWNoZWQgaW1hZ2VyZXZpc2lvbiBpbmZvIGV4aXN0cwotCWlmICghJG5vX2NhY2hlICYmIGRlZmluZWQoJEVOVntpbWFnZXJldmlzaW9uX2luZm99eyRpbWFnZXJldmlzaW9uX2lkZW50aWZpZXJ9KSkgeworCWlmICghJG5vX2NhY2hlICYmIGRlZmluZWQoJEVOVi0+e2ltYWdlcmV2aXNpb25faW5mb30tPnskaW1hZ2VyZXZpc2lvbl9pZGVudGlmaWVyfSkpIHsKIAkJIyBDaGVjayB0aGUgdGltZSB0aGUgaW5mbyB3YXMgbGFzdCByZXRyaWV2ZWQKLQkJbXkgJGRhdGFfYWdlX3NlY29uZHMgPSAodGltZSAtICRFTlZ7aW1hZ2VyZXZpc2lvbl9pbmZvfXskaW1hZ2VyZXZpc2lvbl9pZGVudGlmaWVyfXtSRVRSSUVWQUxfVElNRX0pOworCQlteSAkZGF0YV9hZ2Vfc2Vjb25kcyA9ICh0aW1lIC0gJEVOVi0+e2ltYWdlcmV2aXNpb25faW5mb30tPnskaW1hZ2VyZXZpc2lvbl9pZGVudGlmaWVyfS0+e1JFVFJJRVZBTF9USU1FfSk7CiAJCWlmICgkZGF0YV9hZ2Vfc2Vjb25kcyA8IDYwMCkgewotCQkJcmV0dXJuICRFTlZ7aW1hZ2VyZXZpc2lvbl9pbmZvfXskaW1hZ2VyZXZpc2lvbl9pZGVudGlmaWVyfTsKKwkJCXJldHVybiAkRU5WLT57aW1hZ2VyZXZpc2lvbl9pbmZvfS0+eyRpbWFnZXJldmlzaW9uX2lkZW50aWZpZXJ9OwogCQl9CiAJCWVsc2UgewogCQkJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJyZXRyaWV2aW5nIGN1cnJlbnQgaW1hZ2VyZXZpc2lvbiBpbmZvIGZvciAnJGltYWdlcmV2aXNpb25faWRlbnRpZmllcicgZnJvbSBkYXRhYmFzZSwgY2FjaGVkIGRhdGEgaXMgc3RhbGU6ICRkYXRhX2FnZV9zZWNvbmRzIHNlY29uZHMgb2xkIik7CkBAIC0zNTcxLDEwICszNTcxLDEwIEBACiAJJGltYWdlcmV2aXNpb25faW5mby0+e3VzZXJ9ID0gZ2V0X3VzZXJfaW5mbygkaW1hZ2VyZXZpc2lvbl9pbmZvLT57dXNlcmlkfSk7CiAJCiAJIyBBZGQgdGhlIGluZm8gdG8gJUVOViBzbyBpdCBkb2Vzbid0IG5lZWQgdG8gYmUgcmV0cmlldmVkIGZyb20gdGhlIGRhdGFiYXNlIGFnYWluCi0JJEVOVntpbWFnZXJldmlzaW9uX2luZm99eyRpbWFnZXJldmlzaW9uX2lkZW50aWZpZXJ9ID0gJGltYWdlcmV2aXNpb25faW5mbzsKLQkkRU5We2ltYWdlcmV2aXNpb25faW5mb317JGltYWdlcmV2aXNpb25faWRlbnRpZmllcn17UkVUUklFVkFMX1RJTUV9ID0gdGltZTsKKwkkRU5WLT57aW1hZ2VyZXZpc2lvbl9pbmZvfS0+eyRpbWFnZXJldmlzaW9uX2lkZW50aWZpZXJ9ID0gJGltYWdlcmV2aXNpb25faW5mbzsKKwkkRU5WLT57aW1hZ2VyZXZpc2lvbl9pbmZvfS0+eyRpbWFnZXJldmlzaW9uX2lkZW50aWZpZXJ9LT57UkVUUklFVkFMX1RJTUV9ID0gdGltZTsKIAkjbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJyZXRyaWV2ZWQgaW5mbyBmcm9tIGRhdGFiYXNlIGZvciBpbWFnZXJldmlzaW9uICckaW1hZ2VyZXZpc2lvbl9pZGVudGlmaWVyJzpcbiIgLiBmb3JtYXRfZGF0YSgkRU5We2ltYWdlcmV2aXNpb25faW5mb317JGltYWdlcmV2aXNpb25faWRlbnRpZmllcn0pKTsKLQlyZXR1cm4gJEVOVntpbWFnZXJldmlzaW9uX2luZm99eyRpbWFnZXJldmlzaW9uX2lkZW50aWZpZXJ9OworCXJldHVybiAkRU5WLT57aW1hZ2VyZXZpc2lvbl9pbmZvfS0+eyRpbWFnZXJldmlzaW9uX2lkZW50aWZpZXJ9OwogfQogCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC0zNTk3LDcgKzM1OTcsNyBAQAogCQlyZXR1cm47CiAJfQogCQotCXJldHVybiAkRU5We3Byb2R1Y3Rpb25faW1hZ2VyZXZpc2lvbl9pbmZvfXskaW1hZ2VfaWRlbnRpZmllcn0gaWYgKCEkbm9fY2FjaGUgJiYgJEVOVntwcm9kdWN0aW9uX2ltYWdlcmV2aXNpb25faW5mb317JGltYWdlX2lkZW50aWZpZXJ9KTsKKwlyZXR1cm4gJEVOVi0+e3Byb2R1Y3Rpb25faW1hZ2VyZXZpc2lvbl9pbmZvfS0+eyRpbWFnZV9pZGVudGlmaWVyfSBpZiAoISRub19jYWNoZSAmJiAkRU5WLT57cHJvZHVjdGlvbl9pbWFnZXJldmlzaW9uX2luZm99LT57JGltYWdlX2lkZW50aWZpZXJ9KTsKIAkKIAlteSAkc2VsZWN0X3N0YXRlbWVudCA9IDw8RU9GOwogU0VMRUNUCkBAIC0zNjM4LDkgKzM2MzgsOSBAQAogCW15ICRpbWFnZXJldmlzaW9uX2luZm8gPSBnZXRfaW1hZ2VyZXZpc2lvbl9pbmZvKCRpbWFnZXJldmlzaW9uX2lkKTsKIAkKIAlteSAkaW1hZ2VfbmFtZSA9ICRpbWFnZXJldmlzaW9uX2luZm8tPntpbWFnZW5hbWV9OwotCSRFTlZ7cHJvZHVjdGlvbl9pbWFnZXJldmlzaW9uX2luZm99eyRpbWFnZV9pZGVudGlmaWVyfSA9ICRpbWFnZXJldmlzaW9uX2luZm87CisJJEVOVi0+e3Byb2R1Y3Rpb25faW1hZ2VyZXZpc2lvbl9pbmZvfS0+eyRpbWFnZV9pZGVudGlmaWVyfSA9ICRpbWFnZXJldmlzaW9uX2luZm87CiAJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJyZXRyaWV2ZWQgaW5mbyBmcm9tIGRhdGFiYXNlIGZvciBwcm9kdWN0aW9uIHJldmlzaW9uIGZvciBpbWFnZSBpZGVudGlmaWVyICckaW1hZ2VfaWRlbnRpZmllcicsIHByb2R1Y3Rpb24gaW1hZ2U6ICckaW1hZ2VfbmFtZSciKTsKLQlyZXR1cm4gJEVOVntwcm9kdWN0aW9uX2ltYWdlcmV2aXNpb25faW5mb317JGltYWdlX2lkZW50aWZpZXJ9OworCXJldHVybiAkRU5WLT57cHJvZHVjdGlvbl9pbWFnZXJldmlzaW9uX2luZm99LT57JGltYWdlX2lkZW50aWZpZXJ9OwogCQogfSAjIyBlbmQgc3ViIGdldF9wcm9kdWN0aW9uX2ltYWdlcmV2aXNpb25faW5mbwogCkBAIC0zNjY1LDcgKzM2NjUsNyBAQAogCX0KIAkKIAkjIERlbGV0ZSBjYWNoZWQgZGF0YQotCWRlbGV0ZSAkRU5We3Byb2R1Y3Rpb25faW1hZ2VyZXZpc2lvbl9pbmZvfTsKKwlkZWxldGUgJEVOVi0+e3Byb2R1Y3Rpb25faW1hZ2VyZXZpc2lvbl9pbmZvfTsKIAkKIAlteSAkc3FsX3N0YXRlbWVudCA9IDw8RU9GOwogVVBEQVRFCkBAIC0zNzc5LDggKzM3NzksOCBAQAogCQlyZXR1cm4gJGRlZmF1bHRfaW1hZ2VtZXRhX2luZm87CiAJfQogCQotCWlmICghJG5vX2NhY2hlICYmICRFTlZ7aW1hZ2VtZXRhX2luZm99eyRpbWFnZW1ldGFfaWR9KSB7Ci0JCXJldHVybiAkRU5We2ltYWdlbWV0YV9pbmZvfXskaW1hZ2VtZXRhX2lkfTsKKwlpZiAoISRub19jYWNoZSAmJiAkRU5WLT57aW1hZ2VtZXRhX2luZm99LT57JGltYWdlbWV0YV9pZH0pIHsKKwkJcmV0dXJuICRFTlYtPntpbWFnZW1ldGFfaW5mb30tPnskaW1hZ2VtZXRhX2lkfTsKIAl9CiAJCiAJIyBJZiBpbWFnZW1ldGFpZCBpc250JyBOVUxMLCBwZXJmb3JtIGFub3RoZXIgcXVlcnkgdG8gZ2V0IHRoZSBtZXRhIGluZm8KQEAgLTM3OTgsMTAgKzM3OTgsMTAgQEAKIAkKIAkjIENoZWNrIHRvIG1ha2Ugc3VyZSAxIHJvdyB3YXMgcmV0dXJuZWQKIAlpZiAoIUBzZWxlY3RlZF9yb3dzIHx8IHNjYWxhciBAc2VsZWN0ZWRfcm93cyA+IDEpIHsKLQkJJEVOVntpbWFnZW1ldGFfaW5mb317JGltYWdlbWV0YV9pZH0gPSAkZGVmYXVsdF9pbWFnZW1ldGFfaW5mbzsKKwkJJEVOVi0+e2ltYWdlbWV0YV9pbmZvfS0+eyRpbWFnZW1ldGFfaWR9ID0gJGRlZmF1bHRfaW1hZ2VtZXRhX2luZm87CiAJCQogCQlub3RpZnkoJEVSUk9SU3snV0FSTklORyd9LCAwLCAiZmFpbGVkIHRvIHJldHJpZXZlIGltYWdlbWV0YSBJRD0kaW1hZ2VtZXRhX2lkLCByZXR1cm5pbmcgZGVmYXVsdCBpbWFnZW1ldGEgdmFsdWVzIik7Ci0JCXJldHVybiAkRU5We2ltYWdlbWV0YV9pbmZvfXskaW1hZ2VtZXRhX2lkfTsKKwkJcmV0dXJuICRFTlYtPntpbWFnZW1ldGFfaW5mb30tPnskaW1hZ2VtZXRhX2lkfTsKIAl9CiAKIAkjIEdldCB0aGUgc2luZ2xlIHJvdyByZXR1cm5lZCBmcm9tIHRoZSBzZWxlY3Qgc3RhdGVtZW50CkBAIC0zODE0LDggKzM4MTQsOCBAQAogCX0KIAkKIAlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgInJldHJpZXZlZCBpbWFnZW1ldGEgaW5mbzpcbiIgLiBmb3JtYXRfZGF0YSgkaW1hZ2VtZXRhX2luZm8pKTsKLQkkRU5We2ltYWdlbWV0YV9pbmZvfXskaW1hZ2VtZXRhX2lkfSA9ICRpbWFnZW1ldGFfaW5mbzsKLQlyZXR1cm4gJEVOVntpbWFnZW1ldGFfaW5mb317JGltYWdlbWV0YV9pZH07CisJJEVOVi0+e2ltYWdlbWV0YV9pbmZvfS0+eyRpbWFnZW1ldGFfaWR9ID0gJGltYWdlbWV0YV9pbmZvOworCXJldHVybiAkRU5WLT57aW1hZ2VtZXRhX2luZm99LT57JGltYWdlbWV0YV9pZH07CiB9CiAKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTM4MzAsMTEgKzM4MzAsMTEgQEAKIAogCiBzdWIgZ2V0X2RlZmF1bHRfaW1hZ2VtZXRhX2luZm8gewotCWlmICgkRU5We2ltYWdlbWV0YV9pbmZvfXtkZWZhdWx0fSkgeworCWlmICgkRU5WLT57aW1hZ2VtZXRhX2luZm99LT57ZGVmYXVsdH0pIHsKIAkJIyBDcmVhdGUgYSBjb3B5IHRvIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0IGRlZmF1bHQgZGF0YSBpcyByZXR1cm5lZAogCQkjIE90aGVyIHByb2Nlc3NlcyBtYXkgdXNlIHRoZSBzYW1lIGNhY2hlZCBjb3B5CiAJCSMgSWYgdGhlIHNhbWUgcmVmZXJlbmNlIGlzIHJldHVybmVkIGZvciBtdWx0aXBsZSBwcm9jZXNzZXMsIG9uZSBwcm9jZXNzIG1heSBhbHRlciB0aGUgZGF0YQotCQlteSAlZGVmYXVsdF9pbWFnZW1ldGFfaW5mbyA9ICV7JEVOVntpbWFnZW1ldGFfaW5mb317ZGVmYXVsdH19OworCQlteSAlZGVmYXVsdF9pbWFnZW1ldGFfaW5mbyA9ICV7JEVOVi0+e2ltYWdlbWV0YV9pbmZvfS0+e2RlZmF1bHR9fTsKIAkJcmV0dXJuIFwlZGVmYXVsdF9pbWFnZW1ldGFfaW5mbzsKIAl9CiAJCkBAIC0zODU4LDkgKzM4NTgsOSBAQAogCQl9CiAJfQogCQotCSRFTlZ7aW1hZ2VtZXRhX2luZm99e2RlZmF1bHR9ID0gJGRlZmF1bHRfaW1hZ2VtZXRhX2luZm87CisJJEVOVi0+e2ltYWdlbWV0YV9pbmZvfS0+e2RlZmF1bHR9ID0gJGRlZmF1bHRfaW1hZ2VtZXRhX2luZm87CiAJCi0JbXkgJWRlZmF1bHRfaW1hZ2VtZXRhX2luZm9fY29weSA9ICV7JEVOVntpbWFnZW1ldGFfaW5mb317ZGVmYXVsdH19OworCW15ICVkZWZhdWx0X2ltYWdlbWV0YV9pbmZvX2NvcHkgPSAleyRFTlYtPntpbWFnZW1ldGFfaW5mb30tPntkZWZhdWx0fX07CiAJI25vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAicmV0cmlldmVkIGRlZmF1bHQgaW1hZ2VtZXRhIGluZm86XG4iIC4gZm9ybWF0X2RhdGEoXCVkZWZhdWx0X2ltYWdlbWV0YV9pbmZvX2NvcHkpKTsKIAlyZXR1cm4gXCVkZWZhdWx0X2ltYWdlbWV0YV9pbmZvX2NvcHk7CiB9CkBAIC0zODg5LDcgKzM4ODksNyBAQAogCQlyZXR1cm47CiAJfQogCQotCXJldHVybiAkRU5We3ZtaG9zdF9pbmZvfXskdm1ob3N0X2lkZW50aWZpZXJ9IGlmICghJG5vX2NhY2hlICYmICRFTlZ7dm1ob3N0X2luZm99eyR2bWhvc3RfaWRlbnRpZmllcn0pOworCXJldHVybiAkRU5WLT57dm1ob3N0X2luZm99LT57JHZtaG9zdF9pZGVudGlmaWVyfSBpZiAoISRub19jYWNoZSAmJiAkRU5WLT57dm1ob3N0X2luZm99LT57JHZtaG9zdF9pZGVudGlmaWVyfSk7CiAJCiAJbXkgJG1hbmFnZW1lbnRfbm9kZV9pZCA9IGdldF9tYW5hZ2VtZW50X25vZGVfaWQoKTsKIAkKQEAgLTQwNjcsMTQgKzQwNjcsMTQgQEAKIAlteSAkdm1ob3N0X2lkID0gJHZtaG9zdF9pbmZvLT57aWR9OwogCQogCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAicmV0cmlldmVkIFZNIGhvc3QgJHZtaG9zdF9pZGVudGlmaWVyIGluZm8sIFZNIGhvc3QgSUQ6ICR2bWhvc3RfaWQsIGNvbXB1dGVyOiAkdm1ob3N0X2luZm8tPntjb21wdXRlcn17aG9zdG5hbWV9LCBjb21wdXRlciBJRDogJHZtaG9zdF9pbmZvLT57Y29tcHV0ZXJ9e2lkfSIpOwotCSRFTlZ7dm1ob3N0X2luZm99eyR2bWhvc3RfaWRlbnRpZmllcn0gPSAkdm1ob3N0X2luZm87CisJJEVOVi0+e3ZtaG9zdF9pbmZvfS0+eyR2bWhvc3RfaWRlbnRpZmllcn0gPSAkdm1ob3N0X2luZm87CiAJCiAJCiAJaWYgKCR2bWhvc3RfaWRlbnRpZmllciBuZSAkdm1ob3N0X2lkKSB7Ci0JCSRFTlZ7dm1ob3N0X2luZm99eyR2bWhvc3RfaWR9ID0gJHZtaG9zdF9pbmZvOworCQkkRU5WLT57dm1ob3N0X2luZm99LT57JHZtaG9zdF9pZH0gPSAkdm1ob3N0X2luZm87CiAJfQogCQotCXJldHVybiAkRU5We3ZtaG9zdF9pbmZvfXskdm1ob3N0X2lkZW50aWZpZXJ9OworCXJldHVybiAkRU5WLT57dm1ob3N0X2luZm99LT57JHZtaG9zdF9pZGVudGlmaWVyfTsKIH0KIAogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtNDE1MywxMCArNDE1MywxMCBAQAogCQkkaWRlbnRpdHlfcGF0aHMgPSAkbWFuYWdlbWVudF9ub2RlX2luZm8tPntrZXlzfQogCX0KIAkKLQkjIFRFU1RJTkc6IHVzZSB0aGUgbmV3IHN1YnJvdXRpbmUgaWYgJEVOVntleGVjdXRlX25ld30gaXMgc2V0IGFuZCB0aGUgY29tbWFuZCBpc24ndCBvbmUgdGhhdCdzIGtub3duIHRvIGZhaWwgd2l0aCB0aGUgbmV3IHN1YnJvdXRpbmUKKwkjIFRFU1RJTkc6IHVzZSB0aGUgbmV3IHN1YnJvdXRpbmUgaWYgJEVOVi0+e2V4ZWN1dGVfbmV3fSBpcyBzZXQgYW5kIHRoZSBjb21tYW5kIGlzbid0IG9uZSB0aGF0J3Mga25vd24gdG8gZmFpbCB3aXRoIHRoZSBuZXcgc3Vicm91dGluZQogCW15ICRjYWxsaW5nX3N1YnJvdXRpbmUgPSBnZXRfY2FsbGluZ19zdWJyb3V0aW5lKCk7CiAJaWYgKCRjYWxsaW5nX3N1YnJvdXRpbmUgJiYgJGNhbGxpbmdfc3Vicm91dGluZSAhfiAvZXhlY3V0ZS8pIHsKLQkJaWYgKCRFTlZ7ZXhlY3V0ZV9uZXd9ICYmICRjb21tYW5kICF+IC8odm1rZnN0b29sc3xxZW11LWltZ3xDb252ZXJ0LVZIRHxzY3B8cmVib290fHNodXRkb3duKS8pIHsKKwkJaWYgKCRFTlYtPntleGVjdXRlX25ld30gJiYgJGNvbW1hbmQgIX4gLyh2bWtmc3Rvb2xzfHFlbXUtaW1nfENvbnZlcnQtVkhEfHNjcHxyZWJvb3R8c2h1dGRvd24pLykgewogCQkJcmV0dXJuIFZDTDo6TW9kdWxlOjpPUzo6ZXhlY3V0ZV9uZXcoJG5vZGUsICRjb21tYW5kLCAkb3V0cHV0X2xldmVsLCAkdGltZW91dF9zZWNvbmRzLCAkbWF4X2F0dGVtcHRzLCAkcG9ydCwgJHVzZXIsICcnLCAkaWRlbnRpdHlfcGF0aHMpOwogCQl9CiAJfQpAQCAtNDY1NiwyNCArNDY1NiwyNCBAQAogCQl9CiAJfQogCQotCWlmICghZGVmaW5lZCgkRU5We21hbmFnZW1lbnRfbm9kZV9pbmZvfSkgfHwgIXJlZigkRU5We21hbmFnZW1lbnRfbm9kZV9pbmZvfSkgfHwgcmVmKCRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99KSBuZSAnSEFTSCcpIHsKKwlpZiAoIWRlZmluZWQoJEVOVi0+e21hbmFnZW1lbnRfbm9kZV9pbmZvfSkgfHwgIXJlZigkRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99KSB8fCByZWYoJEVOVi0+e21hbmFnZW1lbnRfbm9kZV9pbmZvfSkgbmUgJ0hBU0gnKSB7CiAJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAiaW5pdGlhbGl6aW5nIG1hbmFnZW1lbnQgbm9kZSBpbmZvIGhhc2ggcmVmZXJlbmNlIik7Ci0JCSRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99ID0ge307CisJCSRFTlYtPnttYW5hZ2VtZW50X25vZGVfaW5mb30gPSB7fTsKIAl9CiAJCi0JaWYgKGRlZmluZWQoJEVOVnttYW5hZ2VtZW50X25vZGVfaW5mb317JG1hbmFnZW1lbnRfbm9kZV9pZGVudGlmaWVyfSkpIHsKLQkJbXkgJGRhdGFfYWdlX3NlY29uZHMgPSAodGltZSAtICRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99eyRtYW5hZ2VtZW50X25vZGVfaWRlbnRpZmllcn17UkVUUklFVkFMX1RJTUV9KTsKKwlpZiAoZGVmaW5lZCgkRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99LT57JG1hbmFnZW1lbnRfbm9kZV9pZGVudGlmaWVyfSkpIHsKKwkJbXkgJGRhdGFfYWdlX3NlY29uZHMgPSAodGltZSAtICRFTlYtPnttYW5hZ2VtZW50X25vZGVfaW5mb30tPnskbWFuYWdlbWVudF9ub2RlX2lkZW50aWZpZXJ9LT57UkVUUklFVkFMX1RJTUV9KTsKIAkJCiAJCWlmICgkZGF0YV9hZ2Vfc2Vjb25kcyA8IDYwKSB7CiAJCQkjbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJyZXR1cm5pbmcgcHJldmlvdXNseSByZXRyaWV2ZWQgbWFuYWdlbWVudCBub2RlIGluZm8gZm9yICckbWFuYWdlbWVudF9ub2RlX2lkZW50aWZpZXInIik7Ci0JCQlyZXR1cm4gJEVOVnttYW5hZ2VtZW50X25vZGVfaW5mb317JG1hbmFnZW1lbnRfbm9kZV9pZGVudGlmaWVyfTsKKwkJCXJldHVybiAkRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99LT57JG1hbmFnZW1lbnRfbm9kZV9pZGVudGlmaWVyfTsKIAkJfQogCQllbHNlIHsKIAkJCSNub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgInJldHJpZXZpbmcgY3VycmVudCBtYW5hZ2VtZW50IG5vZGUgaW5mbyBmb3IgJyRtYW5hZ2VtZW50X25vZGVfaWRlbnRpZmllcicgZnJvbSBkYXRhYmFzZSwgY2FjaGVkIGRhdGEgaXMgc3RhbGU6ICRkYXRhX2FnZV9zZWNvbmRzIHNlY29uZHMgb2xkIik7CiAJCX0KIAl9CiAJZWxzZSB7Ci0JCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAibWFuYWdlbWVudCBub2RlIGluZm8gZm9yICckbWFuYWdlbWVudF9ub2RlX2lkZW50aWZpZXInIGlzIG5vdCBzdG9yZWQgaW4gXCRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99Iik7CisJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAibWFuYWdlbWVudCBub2RlIGluZm8gZm9yICckbWFuYWdlbWVudF9ub2RlX2lkZW50aWZpZXInIGlzIG5vdCBzdG9yZWQgaW4gXCRFTlYtPnttYW5hZ2VtZW50X25vZGVfaW5mb30iKTsKIAl9CiAKIAlteSAkc2VsZWN0X3N0YXRlbWVudCA9ICIKQEAgLTQ3ODYsMjMgKzQ3ODYsMjMgQEAKIAkjIEdldCB0aGUgaW51c2UgdGltaW5nIGNoZWNrcyBmb3IgZ2VuZXJhbCBhbmQgc2VydmVyIGJhc2VkIHJlc2VydmF0aW9ucwogCW15ICRnZW5lcmFsX2ludXNlX2NoZWNrID0gZ2V0X3ZhcmlhYmxlKCdnZW5lcmFsX2ludXNlX2NoZWNrJykgfHwgMzAwOwogCSRtYW5hZ2VtZW50X25vZGVfaW5mby0+e0dFTkVSQUxfSU5VU0VfQ0hFQ0t9ID0gcm91bmQoJGdlbmVyYWxfaW51c2VfY2hlY2sgLyA2MCk7Ci0JJEVOVnttYW5hZ2VtZW50X25vZGVfaW5mb317R0VORVJBTF9JTlVTRV9DSEVDS30gPSAkbWFuYWdlbWVudF9ub2RlX2luZm8tPntHRU5FUkFMX0lOVVNFX0NIRUNLfTsKKwkkRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99LT57R0VORVJBTF9JTlVTRV9DSEVDS30gPSAkbWFuYWdlbWVudF9ub2RlX2luZm8tPntHRU5FUkFMX0lOVVNFX0NIRUNLfTsKIAogCW15ICRzZXJ2ZXJfaW51c2VfY2hlY2sgPSBnZXRfdmFyaWFibGUoJ3NlcnZlcl9pbnVzZV9jaGVjaycpIHx8IDMwMDsKIAkkbWFuYWdlbWVudF9ub2RlX2luZm8tPntTRVJWRVJfSU5VU0VfQ0hFQ0t9ID0gcm91bmQoJHNlcnZlcl9pbnVzZV9jaGVjayAvIDYwKTsKLQkkRU5We21hbmFnZW1lbnRfbm9kZV9pbmZvfXtTRVJWRVJfSU5VU0VfQ0hFQ0t9ID0gJG1hbmFnZW1lbnRfbm9kZV9pbmZvLT57U0VSVkVSX0lOVVNFX0NIRUNLfTsKKwkkRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99LT57U0VSVkVSX0lOVVNFX0NIRUNLfSA9ICRtYW5hZ2VtZW50X25vZGVfaW5mby0+e1NFUlZFUl9JTlVTRV9DSEVDS307CiAJCiAJbXkgJGNsdXN0ZXJfaW51c2VfY2hlY2sgPSBnZXRfdmFyaWFibGUoJ2NsdXN0ZXJfaW51c2VfY2hlY2snKSB8fCAzMDA7CiAJJG1hbmFnZW1lbnRfbm9kZV9pbmZvLT57Q0xVU1RFUl9JTlVTRV9DSEVDS30gPSByb3VuZCgkY2x1c3Rlcl9pbnVzZV9jaGVjayAvIDYwKTsKLQkkRU5We21hbmFnZW1lbnRfbm9kZV9pbmZvfXtDTFVTVEVSX0lOVVNFX0NIRUNLfSA9ICRtYW5hZ2VtZW50X25vZGVfaW5mby0+e0NMVVNURVJfSU5VU0VfQ0hFQ0t9OworCSRFTlYtPnttYW5hZ2VtZW50X25vZGVfaW5mb30tPntDTFVTVEVSX0lOVVNFX0NIRUNLfSA9ICRtYW5hZ2VtZW50X25vZGVfaW5mby0+e0NMVVNURVJfSU5VU0VfQ0hFQ0t9OwogCiAJbXkgJHVzZXJfcGFzc3dvcmRfbGVuZ3RoID0gZ2V0X3ZhcmlhYmxlKCd1c2VyX3Bhc3N3b3JkX2xlbmd0aCcpIHx8IDY7CiAJJG1hbmFnZW1lbnRfbm9kZV9pbmZvLT57VVNFUl9QQVNTV09SRF9MRU5HVEh9ID0gJHVzZXJfcGFzc3dvcmRfbGVuZ3RoOwotCSRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99e1VTRVJfUEFTU1dPUkRfTEVOR1RIfSA9ICRtYW5hZ2VtZW50X25vZGVfaW5mby0+e1VTRVJfUEFTU1dPUkRfTEVOR1RIfTsKKwkkRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99LT57VVNFUl9QQVNTV09SRF9MRU5HVEh9ID0gJG1hbmFnZW1lbnRfbm9kZV9pbmZvLT57VVNFUl9QQVNTV09SRF9MRU5HVEh9OwogCiAJbXkgJHVzZXJfcGFzc3dvcmRfaW5jbHVkZV9zcGNoYXIgPSBnZXRfdmFyaWFibGUoJ3VzZXJfcGFzc3dvcmRfc3BjaGFyJykgfHwgMDsKIAkkbWFuYWdlbWVudF9ub2RlX2luZm8tPntJTkNMVURFX1NQRUNJQUxfQ0hBUlN9ID0gJHVzZXJfcGFzc3dvcmRfaW5jbHVkZV9zcGNoYXI7Ci0JJEVOVnttYW5hZ2VtZW50X25vZGVfaW5mb317SU5DTFVERV9TUEVDSUFMX0NIQVJTfSA9ICAkbWFuYWdlbWVudF9ub2RlX2luZm8tPntJTkNMVURFX1NQRUNJQUxfQ0hBUlN9OworCSRFTlYtPnttYW5hZ2VtZW50X25vZGVfaW5mb30tPntJTkNMVURFX1NQRUNJQUxfQ0hBUlN9ID0gICRtYW5hZ2VtZW50X25vZGVfaW5mby0+e0lOQ0xVREVfU1BFQ0lBTF9DSEFSU307CiAKIAkjIEdldCB0aGUgT1MgbmFtZQogCW15ICRvc19uYW1lID0gbGMoJF5PKTsKQEAgLTQ4MTgsMTYgKzQ4MTgsMTYgQEAKIAkkbWFuYWdlbWVudF9ub2RlX2luZm8tPntTWVNBRE1JTl9FTUFJTH0gPSAkbWFuYWdlbWVudF9ub2RlX2luZm8tPntzeXNhZG1pbkVtYWlsQWRkcmVzc307CiAJJG1hbmFnZW1lbnRfbm9kZV9pbmZvLT57U0hBUkVEX0VNQUlMX0JPWH0gPSAkbWFuYWdlbWVudF9ub2RlX2luZm8tPntzaGFyZWRNYWlsQm94fTsKIAkKLQkjIFN0b3JlIHRoZSBpbmZvIGluICRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99CisJIyBTdG9yZSB0aGUgaW5mbyBpbiAkRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99CiAJIyBBZGQga2V5cyBmb3IgYWxsIG9mIHRoZSB1bmlxdWUgaWRlbnRpZmllcnMgdGhhdCBtYXkgYmUgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoaXMgc3Vicm91dGluZQotCSRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99eyRtYW5hZ2VtZW50X25vZGVfaWRlbnRpZmllcn0gPSAkbWFuYWdlbWVudF9ub2RlX2luZm87Ci0JJEVOVnttYW5hZ2VtZW50X25vZGVfaW5mb317JG1hbmFnZW1lbnRfbm9kZV9pbmZvLT57aG9zdG5hbWV9fSA9ICRtYW5hZ2VtZW50X25vZGVfaW5mbzsKLQkkRU5We21hbmFnZW1lbnRfbm9kZV9pbmZvfXskbWFuYWdlbWVudF9ub2RlX2luZm8tPntTSE9SVE5BTUV9fSA9ICRtYW5hZ2VtZW50X25vZGVfaW5mbzsKLQkkRU5We21hbmFnZW1lbnRfbm9kZV9pbmZvfXskbWFuYWdlbWVudF9ub2RlX2luZm8tPntpZH19ID0gJG1hbmFnZW1lbnRfbm9kZV9pbmZvOwotCSRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99eyRtYW5hZ2VtZW50X25vZGVfaW5mby0+e0lQYWRkcmVzc319ID0gJG1hbmFnZW1lbnRfbm9kZV9pbmZvOworCSRFTlYtPnttYW5hZ2VtZW50X25vZGVfaW5mb30tPnskbWFuYWdlbWVudF9ub2RlX2lkZW50aWZpZXJ9ID0gJG1hbmFnZW1lbnRfbm9kZV9pbmZvOworCSRFTlYtPnttYW5hZ2VtZW50X25vZGVfaW5mb30tPnskbWFuYWdlbWVudF9ub2RlX2luZm8tPntob3N0bmFtZX19ID0gJG1hbmFnZW1lbnRfbm9kZV9pbmZvOworCSRFTlYtPnttYW5hZ2VtZW50X25vZGVfaW5mb30tPnskbWFuYWdlbWVudF9ub2RlX2luZm8tPntTSE9SVE5BTUV9fSA9ICRtYW5hZ2VtZW50X25vZGVfaW5mbzsKKwkkRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99LT57JG1hbmFnZW1lbnRfbm9kZV9pbmZvLT57aWR9fSA9ICRtYW5hZ2VtZW50X25vZGVfaW5mbzsKKwkkRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99LT57JG1hbmFnZW1lbnRfbm9kZV9pbmZvLT57SVBhZGRyZXNzfX0gPSAkbWFuYWdlbWVudF9ub2RlX2luZm87CiAJCiAJIyBTYXZlIHRoZSB0aW1lIHdoZW4gdGhlIGRhdGEgd2FzIHJldHJpZXZlZAotCSRFTlZ7bWFuYWdlbWVudF9ub2RlX2luZm99eyRtYW5hZ2VtZW50X25vZGVfaWRlbnRpZmllcn17UkVUUklFVkFMX1RJTUV9ID0gdGltZTsKKwkkRU5WLT57bWFuYWdlbWVudF9ub2RlX2luZm99LT57JG1hbmFnZW1lbnRfbm9kZV9pZGVudGlmaWVyfS0+e1JFVFJJRVZBTF9USU1FfSA9IHRpbWU7CiAJCiAJI25vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAicmV0cmlldmVkIG1hbmFnZW1lbnQgbm9kZSBpbmZvOiAnJG1hbmFnZW1lbnRfbm9kZV9pZGVudGlmaWVyJyAoJG1hbmFnZW1lbnRfbm9kZV9pbmZvLT57U0hPUlROQU1FfSkiKTsKIAlyZXR1cm4gJG1hbmFnZW1lbnRfbm9kZV9pbmZvOwpAQCAtNTEwOSw3ICs1MTA5LDcgQEAKIAkkY29tcHV0ZXJfc3RyaW5nIC49ICIgKCRjb21wdXRlcl9pZCkiIGlmICgkY29tcHV0ZXJfaWRlbnRpZmllciBuZSAkY29tcHV0ZXJfaWQpOwogCQogCSMgRGVsZXRlIGNhY2hlZCBkYXRhIGlmIHByZXZpb3VzbHkgc2V0Ci0JZGVsZXRlICRFTlZ7Y29tcHV0ZXJfcHJpdmF0ZV9pcF9hZGRyZXNzfXskY29tcHV0ZXJfaWR9OworCWRlbGV0ZSAkRU5WLT57Y29tcHV0ZXJfcHJpdmF0ZV9pcF9hZGRyZXNzfS0+eyRjb21wdXRlcl9pZH07CiAJCiAJbXkgJHByaXZhdGVfaXBfYWRkcmVzc190ZXh0OwogCWlmICgkcHJpdmF0ZV9pcF9hZGRyZXNzID1+IC9udWxsL2kpIHsKQEAgLTUxMzMsNyArNTEzMyw3IEBACiAJIyBDYWxsIHRoZSBkYXRhYmFzZSBleGVjdXRlIHN1YnJvdXRpbmUKIAlpZiAoZGF0YWJhc2VfZXhlY3V0ZSgkdXBkYXRlX3N0YXRlbWVudCkpIHsKIAkJaWYgKCRwcml2YXRlX2lwX2FkZHJlc3MgIX4gL251bGwvaSkgewotCQkJJEVOVntjb21wdXRlcl9wcml2YXRlX2lwX2FkZHJlc3N9eyRjb21wdXRlcl9pZH0gPSAkcHJpdmF0ZV9pcF9hZGRyZXNzOworCQkJJEVOVi0+e2NvbXB1dGVyX3ByaXZhdGVfaXBfYWRkcmVzc30tPnskY29tcHV0ZXJfaWR9ID0gJHByaXZhdGVfaXBfYWRkcmVzczsKIAkJfQogCQlub3RpZnkoJEVSUk9SU3snT0snfSwgMCwgInVwZGF0ZWQgcHJpdmF0ZSBJUCBhZGRyZXNzIG9mIGNvbXB1dGVyICRjb21wdXRlcl9zdHJpbmcgaW4gZGF0YWJhc2U6ICRwcml2YXRlX2lwX2FkZHJlc3MiKTsKIAkJcmV0dXJuIDE7CkBAIC02NjM5LDExICs2NjM5LDExIEBACiAJfQogCQogCSMgQ2hlY2sgaWYgY2FjaGVkIHVzZXIgaW5mbyBleGlzdHMKLQlpZiAoISRub19jYWNoZSAmJiBkZWZpbmVkKCRFTlZ7dXNlcl9pbmZvfXskdXNlcl9pZGVudGlmaWVyfSkpIHsKKwlpZiAoISRub19jYWNoZSAmJiBkZWZpbmVkKCRFTlYtPnt1c2VyX2luZm99LT57JHVzZXJfaWRlbnRpZmllcn0pKSB7CiAJCSMgQ2hlY2sgdGhlIHRpbWUgdGhlIGluZm8gd2FzIGxhc3QgcmV0cmlldmVkCi0JCW15ICRkYXRhX2FnZV9zZWNvbmRzID0gKHRpbWUgLSAkRU5We3VzZXJfaW5mb317JHVzZXJfaWRlbnRpZmllcn17UkVUUklFVkFMX1RJTUV9KTsKKwkJbXkgJGRhdGFfYWdlX3NlY29uZHMgPSAodGltZSAtICRFTlYtPnt1c2VyX2luZm99LT57JHVzZXJfaWRlbnRpZmllcn0tPntSRVRSSUVWQUxfVElNRX0pOwogCQlpZiAoJGRhdGFfYWdlX3NlY29uZHMgPCA2MDApIHsKLQkJCXJldHVybiAkRU5We3VzZXJfaW5mb317JHVzZXJfaWRlbnRpZmllcn07CisJCQlyZXR1cm4gJEVOVi0+e3VzZXJfaW5mb30tPnskdXNlcl9pZGVudGlmaWVyfTsKIAkJfQogCQllbHNlIHsKIAkJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAicmV0cmlldmluZyBjdXJyZW50IHVzZXIgaW5mbyBmb3IgJyR1c2VyX2lkZW50aWZpZXInIGZyb20gZGF0YWJhc2UsIGNhY2hlZCBkYXRhIGlzIHN0YWxlOiAkZGF0YV9hZ2Vfc2Vjb25kcyBzZWNvbmRzIG9sZCIpOwpAQCAtNjc5MSw5ICs2NzkxLDkgQEAKIAl9CiAJCiAJI25vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAicmV0cmlldmVkIGluZm8gZm9yIHVzZXIgJyR1c2VyX2lkZW50aWZpZXInLCBhZmZpbGlhdGlvbjogJyRhZmZpbGlhdGlvbl9pZGVudGlmaWVyJzpcbiIgLiBmb3JtYXRfZGF0YSgkdXNlcl9pbmZvKSk7Ci0JJEVOVnt1c2VyX2luZm99eyR1c2VyX2lkZW50aWZpZXJ9ID0gJHVzZXJfaW5mbzsKLQkkRU5We3VzZXJfaW5mb317JHVzZXJfaWRlbnRpZmllcn17UkVUUklFVkFMX1RJTUV9ID0gdGltZTsKLQlyZXR1cm4gJEVOVnt1c2VyX2luZm99eyR1c2VyX2lkZW50aWZpZXJ9OwkKKwkkRU5WLT57dXNlcl9pbmZvfS0+eyR1c2VyX2lkZW50aWZpZXJ9ID0gJHVzZXJfaW5mbzsKKwkkRU5WLT57dXNlcl9pbmZvfS0+eyR1c2VyX2lkZW50aWZpZXJ9LT57UkVUUklFVkFMX1RJTUV9ID0gdGltZTsKKwlyZXR1cm4gJEVOVi0+e3VzZXJfaW5mb30tPnskdXNlcl9pZGVudGlmaWVyfTsKIH0KIAogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtNjkxMSw4ICs2OTExLDggQEAKIAkJcmV0dXJuOwogCX0KIAkKLQlpZiAoISRub19jYWNoZSAmJiBkZWZpbmVkKCRFTlZ7Y29tcHV0ZXJfaW5mb317JGNvbXB1dGVyX2lkZW50aWZpZXJ9KSkgewotCQlyZXR1cm4gJEVOVntjb21wdXRlcl9pbmZvfXskY29tcHV0ZXJfaWRlbnRpZmllcn07CisJaWYgKCEkbm9fY2FjaGUgJiYgZGVmaW5lZCgkRU5WLT57Y29tcHV0ZXJfaW5mb30tPnskY29tcHV0ZXJfaWRlbnRpZmllcn0pKSB7CisJCXJldHVybiAkRU5WLT57Y29tcHV0ZXJfaW5mb30tPnskY29tcHV0ZXJfaWRlbnRpZmllcn07CiAJfQogCSNub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgInJldHJpZXZpbmcgaW5mbyBmb3IgY29tcHV0ZXIgJGNvbXB1dGVyX2lkZW50aWZpZXIiKTsKIAkKQEAgLTcxMjUsOSArNzEyNSw5IEBACiAJfQogCQogCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAicmV0cmlldmVkIGluZm8gZm9yIGNvbXB1dGVyOiAkY29tcHV0ZXJfaG9zdG5hbWUgKCRjb21wdXRlcl9pZCkiKTsKLQkkRU5We2NvbXB1dGVyX2luZm99eyRjb21wdXRlcl9pZGVudGlmaWVyfSA9ICRjb21wdXRlcl9pbmZvOwotCSRFTlZ7Y29tcHV0ZXJfaW5mb317JGNvbXB1dGVyX2lkZW50aWZpZXJ9e1JFVFJJRVZBTF9USU1FfSA9IHRpbWU7Ci0JcmV0dXJuICRFTlZ7Y29tcHV0ZXJfaW5mb317JGNvbXB1dGVyX2lkZW50aWZpZXJ9OworCSRFTlYtPntjb21wdXRlcl9pbmZvfS0+eyRjb21wdXRlcl9pZGVudGlmaWVyfSA9ICRjb21wdXRlcl9pbmZvOworCSRFTlYtPntjb21wdXRlcl9pbmZvfS0+eyRjb21wdXRlcl9pZGVudGlmaWVyfS0+e1JFVFJJRVZBTF9USU1FfSA9IHRpbWU7CisJcmV0dXJuICRFTlYtPntjb21wdXRlcl9pbmZvfS0+eyRjb21wdXRlcl9pZGVudGlmaWVyfTsKIH0KIAogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtNzE3MCw3ICs3MTcwLDcgQEAKIAkJcmV0dXJuOwogCX0KIAkKLQlyZXR1cm4gJEVOVntuYXRob3N0X2luZm99eyRjb21wdXRlcl9pZGVudGlmaWVyfSBpZiAoISRub19jYWNoZSAmJiAkRU5We25hdGhvc3RfaW5mb317JGNvbXB1dGVyX2lkZW50aWZpZXJ9KTsKKwlyZXR1cm4gJEVOVi0+e25hdGhvc3RfaW5mb30tPnskY29tcHV0ZXJfaWRlbnRpZmllcn0gaWYgKCEkbm9fY2FjaGUgJiYgJEVOVi0+e25hdGhvc3RfaW5mb30tPnskY29tcHV0ZXJfaWRlbnRpZmllcn0pOwogCQogCSMgR2V0IGEgaGFzaCByZWYgY29udGFpbmluZyB0aGUgZGF0YWJhc2UgY29sdW1uIG5hbWVzCiAJbXkgJGRhdGFiYXNlX3RhYmxlX2NvbHVtbnMgPSBnZXRfZGF0YWJhc2VfdGFibGVfY29sdW1ucygpOwpAQCAtNzI4Nyw4ICs3Mjg3LDggQEAKIAl9CiAJCiAJI25vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAicmV0cmlldmVkIGluZm8gZm9yIE5BVCBob3N0IG1hcHBlZCB0byBjb21wdXRlciBjb21wdXRlciAkY29tcHV0ZXJfaWRlbnRpZmllcjpcbiIgLiBmb3JtYXRfZGF0YSgkbmF0aG9zdF9pbmZvKSk7Ci0JJEVOVntuYXRob3N0X2luZm99eyRjb21wdXRlcl9pZGVudGlmaWVyfSA9ICRuYXRob3N0X2luZm87Ci0JcmV0dXJuICRFTlZ7bmF0aG9zdF9pbmZvfXskY29tcHV0ZXJfaWRlbnRpZmllcn07CisJJEVOVi0+e25hdGhvc3RfaW5mb30tPnskY29tcHV0ZXJfaWRlbnRpZmllcn0gPSAkbmF0aG9zdF9pbmZvOworCXJldHVybiAkRU5WLT57bmF0aG9zdF9pbmZvfS0+eyRjb21wdXRlcl9pZGVudGlmaWVyfTsKIH0KIAogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtNzMzOCw3ICs3MzM4LDcgQEAKID1jdXQKIAogc3ViIGdldF9uYXRwb3J0X3JhbmdlcyB7Ci0JcmV0dXJuIEB7JEVOVntuYXRwb3J0X3Jhbmdlc319IGlmIGRlZmluZWQoJEVOVntuYXRwb3J0X3Jhbmdlc30pOworCXJldHVybiBAeyRFTlYtPntuYXRwb3J0X3Jhbmdlc319IGlmIGRlZmluZWQoJEVOVi0+e25hdHBvcnRfcmFuZ2VzfSk7CiAJCiAJIyBSZXRyaWV2ZSBhbmQgcGFyc2UgdGhlIG5hdHBvcnRfcmFuZ2VzIHZhcmlhYmxlCiAJbXkgJG5hdHBvcnRfcmFuZ2VzX3ZhcmlhYmxlID0gZ2V0X3ZhcmlhYmxlKCduYXRwb3J0X3JhbmdlcycpIHx8ICc0OTE1Mi02NTUzNSc7CkBAIC03MzYyLDcgKzczNjIsNyBAQAogCX0KIAkKIAlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgInBhcnNlZCBuYXRwb3J0X3JhbmdlcyB2YXJpYWJsZTpcbiIgLiBmb3JtYXRfZGF0YShAbmF0cG9ydF9yYW5nZXMpKTsKLQkkRU5We25hdHBvcnRfcmFuZ2VzfSA9IFxAbmF0cG9ydF9yYW5nZXM7CisJJEVOVi0+e25hdHBvcnRfcmFuZ2VzfSA9IFxAbmF0cG9ydF9yYW5nZXM7CiAJcmV0dXJuIEBuYXRwb3J0X3JhbmdlczsKIH0KIApAQCAtNzkwNiw4ICs3OTA2LDggQEAKIAkJcmV0dXJuOwogCX0KIAkKLQlpZiAoISRub19jYWNoZSAmJiBkZWZpbmVkKCRFTlZ7cmVzZXJ2YXRpb25fbWFuYWdlbWVudF9ub2RlX2hvc3RuYW1lfXskcmVzZXJ2YXRpb25faWR9KSkgewotCQlyZXR1cm4gJEVOVntyZXNlcnZhdGlvbl9tYW5hZ2VtZW50X25vZGVfaG9zdG5hbWV9eyRyZXNlcnZhdGlvbl9pZH07CisJaWYgKCEkbm9fY2FjaGUgJiYgZGVmaW5lZCgkRU5WLT57cmVzZXJ2YXRpb25fbWFuYWdlbWVudF9ub2RlX2hvc3RuYW1lfS0+eyRyZXNlcnZhdGlvbl9pZH0pKSB7CisJCXJldHVybiAkRU5WLT57cmVzZXJ2YXRpb25fbWFuYWdlbWVudF9ub2RlX2hvc3RuYW1lfS0+eyRyZXNlcnZhdGlvbl9pZH07CiAJfQogCQogCW15ICRzZWxlY3Rfc3RhdGVtZW50ID0gPDxFT0Y7CkBAIC03OTMwLDcgKzc5MzAsNyBAQAogCW15ICRyb3cgPSAkc2VsZWN0ZWRfcm93c1swXTsKIAlteSAkaG9zdG5hbWUgPSAkcm93LT57aG9zdG5hbWV9OwogCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAicmV0cmlldmVkIG1hbmFnZW1lbnQgbm9kZSBob3N0bmFtZSBmb3IgcmVzZXJ2YXRpb24gJHJlc2VydmF0aW9uX2lkOiBob3N0bmFtZSIpOwotCSRFTlZ7cmVzZXJ2YXRpb25fbWFuYWdlbWVudF9ub2RlX2hvc3RuYW1lfXskcmVzZXJ2YXRpb25faWR9ID0gJGhvc3RuYW1lOworCSRFTlYtPntyZXNlcnZhdGlvbl9tYW5hZ2VtZW50X25vZGVfaG9zdG5hbWV9LT57JHJlc2VydmF0aW9uX2lkfSA9ICRob3N0bmFtZTsKIAlyZXR1cm4gJGhvc3RuYW1lOwogfQogCkBAIC03OTUxLDggKzc5NTEsOCBAQAogCQlyZXR1cm47CiAJfQogCQotCWlmICghJG5vX2NhY2hlICYmIGRlZmluZWQoJEVOVntyZXNlcnZhdGlvbl9yZXF1ZXN0X2lkfXskcmVzZXJ2YXRpb25faWR9KSkgewotCQlyZXR1cm4gJEVOVntyZXNlcnZhdGlvbl9yZXF1ZXN0X2lkfXskcmVzZXJ2YXRpb25faWR9OworCWlmICghJG5vX2NhY2hlICYmIGRlZmluZWQoJEVOVi0+e3Jlc2VydmF0aW9uX3JlcXVlc3RfaWR9LT57JHJlc2VydmF0aW9uX2lkfSkpIHsKKwkJcmV0dXJuICRFTlYtPntyZXNlcnZhdGlvbl9yZXF1ZXN0X2lkfS0+eyRyZXNlcnZhdGlvbl9pZH07CiAJfQogCQogCW15ICRzZWxlY3Rfc3RhdGVtZW50ID0gIlNFTEVDVCByZXF1ZXN0aWQgRlJPTSByZXNlcnZhdGlvbiBXSEVSRSBpZCA9ICckcmVzZXJ2YXRpb25faWQnIjsKQEAgLTc5NjUsNyArNzk2NSw3IEBACiAJbXkgJHJvdyA9ICRzZWxlY3RlZF9yb3dzWzBdOwogCW15ICRyZXF1ZXN0X2lkID0gJHJvdy0+e3JlcXVlc3RpZH07CiAJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJyZXRyaWV2ZWQgcmVzZXJ2YXRpb24gJHJlc2VydmF0aW9uX2lkIHJlcXVlc3QgSUQ6ICRyZXF1ZXN0X2lkIik7Ci0JJEVOVntyZXNlcnZhdGlvbl9yZXF1ZXN0X2lkfXskcmVzZXJ2YXRpb25faWR9ID0gJHJlcXVlc3RfaWQ7CisJJEVOVi0+e3Jlc2VydmF0aW9uX3JlcXVlc3RfaWR9LT57JHJlc2VydmF0aW9uX2lkfSA9ICRyZXF1ZXN0X2lkOwogCXJldHVybiAkcmVxdWVzdF9pZDsKIH0KIApAQCAtODgxNyw4ICs4ODE3LDggQEAKIAlteSAkbWFuYWdlbWVudF9ub2RlX2lkOwogCiAJIyBDaGVjayB0aGUgbWFuYWdlbWVudF9ub2RlX2lkIGVudmlyb25tZW50IHZhcmlhYmxlCi0JaWYgKCRFTlZ7bWFuYWdlbWVudF9ub2RlX2lkfSkgewotCQlyZXR1cm4gJEVOVnttYW5hZ2VtZW50X25vZGVfaWR9OworCWlmICgkRU5WLT57bWFuYWdlbWVudF9ub2RlX2lkfSkgeworCQlyZXR1cm4gJEVOVi0+e21hbmFnZW1lbnRfbm9kZV9pZH07CiAJfQogCWVsc2UgewogCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgIm1hbmFnZW1lbnRfbm9kZV9pZCBlbnZpcm9ubWVudCB2YXJpYWJsZSBub3Qgc2V0Iik7CkBAIC04ODI4LDcgKzg4MjgsNyBAQAogCW15ICRtYW5hZ2VtZW50X25vZGVfaW5mbyA9IGdldF9tYW5hZ2VtZW50X25vZGVfaW5mbygpOwogCWlmICgkbWFuYWdlbWVudF9ub2RlX2luZm8gJiYgKCRtYW5hZ2VtZW50X25vZGVfaWQgPSAkbWFuYWdlbWVudF9ub2RlX2luZm8tPntpZH0pKSB7CiAJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAiZ2V0X21hbmFnZW1lbnRub2RlX2luZm8oKTogJG1hbmFnZW1lbnRfbm9kZV9pZCIpOwotCQkkRU5We21hbmFnZW1lbnRfbm9kZV9pZH0gPSAkbWFuYWdlbWVudF9ub2RlX2lkOworCQkkRU5WLT57bWFuYWdlbWVudF9ub2RlX2lkfSA9ICRtYW5hZ2VtZW50X25vZGVfaWQ7CiAJCXJldHVybiAkbWFuYWdlbWVudF9ub2RlX2lkOwogCX0KIAllbHNlIHsKQEAgLTg4NTIsNyArODg1Miw3IEBACiAKIHN1YiBnZXRfZGF0YWJhc2VfbmFtZXMgewogCW15ICRub19jYWNoZSA9IHNoaWZ0OwotCXJldHVybiBAeyRFTlZ7ZGF0YWJhc2VfbmFtZXN9fSBpZiAkRU5We2RhdGFiYXNlX25hbWVzfSAmJiAhJG5vX2NhY2hlOworCXJldHVybiBAeyRFTlYtPntkYXRhYmFzZV9uYW1lc319IGlmICRFTlYtPntkYXRhYmFzZV9uYW1lc30gJiYgISRub19jYWNoZTsKIAkKIAlteSAkc2VsZWN0X3N0YXRlbWVudCA9ICIKIFNFTEVDVCBESVNUSU5DVApAQCAtODg3NCw5ICs4ODc0LDkgQEAKIAlteSBAZGF0YWJhc2VfbmFtZXM7CiAJbWFwKHtwdXNoIEBkYXRhYmFzZV9uYW1lcywgJF8tPntTQ0hFTUFfTkFNRX19IEByb3dzKTsKIAkKLQkkRU5We2RhdGFiYXNlX25hbWVzfSA9IFxAZGF0YWJhc2VfbmFtZXM7CisJJEVOVi0+e2RhdGFiYXNlX25hbWVzfSA9IFxAZGF0YWJhc2VfbmFtZXM7CiAJCi0JcmV0dXJuIEB7JEVOVntkYXRhYmFzZV9uYW1lc319OworCXJldHVybiBAeyRFTlYtPntkYXRhYmFzZV9uYW1lc319OwogfQogCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC04OTQ2LDcgKzg5NDYsNyBAQAogCiBzdWIgZ2V0X2RhdGFiYXNlX3RhYmxlX2NvbHVtbnMgewogCW15ICRub19jYWNoZSA9IHNoaWZ0OwotCXJldHVybiAkRU5We2RhdGFiYXNlX3RhYmxlX2NvbHVtbnN9IGlmICRFTlZ7ZGF0YWJhc2VfdGFibGVfY29sdW1uc30gJiYgISRub19jYWNoZTsKKwlyZXR1cm4gJEVOVi0+e2RhdGFiYXNlX3RhYmxlX2NvbHVtbnN9IGlmICRFTlYtPntkYXRhYmFzZV90YWJsZV9jb2x1bW5zfSAmJiAhJG5vX2NhY2hlOwogCQogCW15ICRkYXRhYmFzZSA9ICdpbmZvcm1hdGlvbl9zY2hlbWEnOwogCkBAIC04OTc4LDkgKzg5NzgsOSBAQAogCW15ICVkYXRhYmFzZV90YWJsZV9jb2x1bW5zOwogCW1hcCh7cHVzaCBAeyRkYXRhYmFzZV90YWJsZV9jb2x1bW5zeyRfLT57VEFCTEVfTkFNRX19fSwgJF8tPntDT0xVTU5fTkFNRX19IEByb3dzKTsKIAkKLQkkRU5We2RhdGFiYXNlX3RhYmxlX2NvbHVtbnN9ID0gXCVkYXRhYmFzZV90YWJsZV9jb2x1bW5zOworCSRFTlYtPntkYXRhYmFzZV90YWJsZV9jb2x1bW5zfSA9IFwlZGF0YWJhc2VfdGFibGVfY29sdW1uczsKIAkKLQlyZXR1cm4gJEVOVntkYXRhYmFzZV90YWJsZV9jb2x1bW5zfTsKKwlyZXR1cm4gJEVOVi0+e2RhdGFiYXNlX3RhYmxlX2NvbHVtbnN9OwogfQogCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC05NTUxLDggKzk1NTEsOCBAQAogCQkkbnVtZXJhbF9zeXN0ZW0gPSAnZGVjaW1hbCc7CiAJfQogCQotCWlmIChkZWZpbmVkKCRFTlZ7YXNjaWlfdmFsdWV9eyRjaGFyYWN0ZXJ9eyRudW1lcmFsX3N5c3RlbX0pKSB7Ci0JCXJldHVybiAkRU5We2FzY2lpX3ZhbHVlfXskY2hhcmFjdGVyfXskbnVtZXJhbF9zeXN0ZW19OworCWlmIChkZWZpbmVkKCRFTlYtPnthc2NpaV92YWx1ZX0tPnskY2hhcmFjdGVyfS0+eyRudW1lcmFsX3N5c3RlbX0pKSB7CisJCXJldHVybiAkRU5WLT57YXNjaWlfdmFsdWV9LT57JGNoYXJhY3Rlcn0tPnskbnVtZXJhbF9zeXN0ZW19OwogCX0KIAkKIAlteSAkZGVjaW1hbF92YWx1ZSA9IHVucGFjaygiQyoiLCAkY2hhcmFjdGVyKTsKQEAgLTk1NjMsNyArOTU2Myw3IEBACiAJfTsKIAkKIAkjIFN0b3JlIHRoZSByZXN1bHRzIGluICVFTlYgdG8gYXZvaWQgcmVwZXRpdGl2ZSBtZXNzYWdlcyBpbiB2Y2xkLmxvZwotCSRFTlZ7YXNjaWlfdmFsdWV9eyRjaGFyYWN0ZXJ9ID0gJHZhbHVlczsKKwkkRU5WLT57YXNjaWlfdmFsdWV9LT57JGNoYXJhY3Rlcn0gPSAkdmFsdWVzOwogCQogCW15ICRzdHJpbmcgPSAiQVNDSUkgJG51bWVyYWxfc3lzdGVtIHZhbHVlIG9mICckY2hhcmFjdGVyJzogJHZhbHVlcy0+eyRudW1lcmFsX3N5c3RlbX0iOwogCWlmICgkbnVtZXJhbF9zeXN0ZW0gbmUgJ2RlY2ltYWwnKSB7CkBAIC05Njk0LDcgKzk2OTQsNyBAQAogCQogCSMgQ2FsbCBzZW5kX3JlcXVlc3QKIAlteSAkcmVzcG9uc2UgPSAkY2xpZW50LT5zZW5kX3JlcXVlc3QoQGFyZ3VtZW50cyk7Ci0JJEVOVntycGNfeG1sX3Jlc3BvbnNlfSA9ICRyZXNwb25zZTsKKwkkRU5WLT57cnBjX3htbF9yZXNwb25zZX0gPSAkcmVzcG9uc2U7CiAJCiAJaWYgKCFyZWYoJHJlc3BvbnNlKSkgewkKIAkJbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgIlJQQzo6WE1MOjpDbGllbnQ6OnNlbmRfcmVxdWVzdCBmYWlsZWRcbiIgLgpAQCAtOTcwNiw4ICs5NzA2LDggQEAKIAkJCSMiY2xpZW50OiAnJGNsaWVudCdcbiIgLiBmb3JtYXRfZGF0YSgkY2xpZW50KQogCQkpOwogCQkKLQkJJEVOVntycGNfeG1sX2Vycm9yfSA9ICRyZXNwb25zZTsKLQkJJEVOVntycGNfeG1sX2Vycm9yfSA9fiBzL15SUEM6OlhNTDo6Q2xpZW50OjpzZW5kX3JlcXVlc3Q6XHMqLy87CisJCSRFTlYtPntycGNfeG1sX2Vycm9yfSA9ICRyZXNwb25zZTsKKwkJJEVOVi0+e3JwY194bWxfZXJyb3J9ID1+IHMvXlJQQzo6WE1MOjpDbGllbnQ6OnNlbmRfcmVxdWVzdDpccyovLzsKIAkJcmV0dXJuOwogCX0KIAkKQEAgLTk3MjEsNyArOTcyMSw3IEBACiAJCQkiZmF1bHQgY29kZTogIiAuICRyZXNwb25zZS0+Y29kZSAuICJcbiIgLgogCQkJImZhdWx0IHN0cmluZzogIiAuICRyZXNwb25zZS0+c3RyaW5nCiAJCSk7Ci0JCSRFTlZ7cnBjX3htbF9lcnJvcn0gPSAkcmVzcG9uc2UtPnN0cmluZzsKKwkJJEVOVi0+e3JwY194bWxfZXJyb3J9ID0gJHJlc3BvbnNlLT5zdHJpbmc7CiAJCXJldHVybjsKIAl9CiAJCkBAIC0xMTA1Miw3ICsxMTA1Miw3IEBACiAJCQlwcmludCAiJGNob2ljZXNbJGktMV1cbiI7CiAJCX0KIAkJCi0JCXByaW50ICJcblsiIC4gam9pbigiLyIsIEB7JEVOVntzZXR1cF9wYXRofX0pIC4gIl1cbiIgaWYgZGVmaW5lZCgkRU5We3NldHVwX3BhdGh9KTsKKwkJcHJpbnQgIlxuWyIgLiBqb2luKCIvIiwgQHskRU5WLT57c2V0dXBfcGF0aH19KSAuICJdXG4iIGlmIGRlZmluZWQoJEVOVi0+e3NldHVwX3BhdGh9KTsKIAkJcHJpbnQgIk1ha2UgYSBzZWxlY3Rpb24gKDEiOwogCQlwcmludCAiLSRjaG9pY2VfY291bnQiIGlmICgkY2hvaWNlX2NvdW50ID4gMSk7CiAJCXByaW50ICIsICdjJyB0byBjYW5jZWwgb3Igd2hlbiBkb25lKTogIjsKQEAgLTExMDg2LDcgKzExMDg2LDcgQEAKIHN1YiBzZXR1cF9nZXRfY2hvaWNlIHsKIAlteSAoJGNob2ljZV9jb3VudCkgPSBAXzsKIAkKLQlwcmludCAiXG5bIiAuIGpvaW4oIi8iLCBAeyRFTlZ7c2V0dXBfcGF0aH19KSAuICJdXG4iIGlmIGRlZmluZWQoJEVOVntzZXR1cF9wYXRofSk7CisJcHJpbnQgIlxuWyIgLiBqb2luKCIvIiwgQHskRU5WLT57c2V0dXBfcGF0aH19KSAuICJdXG4iIGlmIGRlZmluZWQoJEVOVi0+e3NldHVwX3BhdGh9KTsKIAl3aGlsZSAoMSkgewogCQlwcmludCAiTWFrZSBhIHNlbGVjdGlvbiAoMSI7CiAJCXByaW50ICItJGNob2ljZV9jb3VudCIgaWYgKCRjaG9pY2VfY291bnQgPiAxKTsKQEAgLTExMTY1LDggKzExMTY1LDggQEAKIAkKIAkjIENoZWNrIGlmIGEgVGVybTo6UmVhZExpbmUgb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZAogCW15ICR0ZXJtOwotCWlmIChkZWZpbmVkKCRFTlZ7dGVybV9yZWFkbGluZX0pKSB7Ci0JCSR0ZXJtID0gJEVOVnt0ZXJtX3JlYWRsaW5lfTsKKwlpZiAoZGVmaW5lZCgkRU5WLT57dGVybV9yZWFkbGluZX0pKSB7CisJCSR0ZXJtID0gJEVOVi0+e3Rlcm1fcmVhZGxpbmV9OwogCX0KIAllbHNlIHsKIAkJJHRlcm0gPSBUZXJtOjpSZWFkTGluZS0+bmV3KCdSZWFkTGluZScpOwpAQCAtMTExODEsNyArMTExODEsNyBAQAogCQkJJGF0dHJpYnMtPntjb21wbGV0aW9uX2Z1bmN0aW9ufSA9IFwmX3Rlcm1fcmVhZGxpbmVfY29tcGxldGVfZmlsZV9wYXRoOwogCQl9CiAJCQotCQkkRU5We3Rlcm1fcmVhZGxpbmV9ID0gJHRlcm07CisJCSRFTlYtPnt0ZXJtX3JlYWRsaW5lfSA9ICR0ZXJtOwogCX0KIAkKIAkkbWVzc2FnZSA9ICcnIHVubGVzcyAkbWVzc2FnZTsKQEAgLTExNTAxLDcgKzExNTAxLDcgQEAKIAkKIAkjIE1ha2Ugc3VyZSB0aGUgcGFyZW50IHZjbGQgZGFlbW9uIHByb2Nlc3MgZGlkbid0IGNhbGwgdGhpcyBzdWJyb3V0aW5lIGZvciBzYWZldHkKIAkjIFByZXZlbnRzIGFsbCByZXNlcnZhdGlvbnMgYmVpbmcgcHJvY2Vzc2VkIGZyb20gYmVpbmcga2lsbGVkCi0JaWYgKCRFTlZ7dmNsZH0pIHsKKwlpZiAoJEVOVi0+e3ZjbGR9KSB7CiAJCW5vdGlmeSgkRVJST1JTeydDUklUSUNBTCd9LCAwLCAia2lsbF9jaGlsZF9wcm9jZXNzZXMgc3Vicm91dGluZSBjYWxsZWQgZnJvbSB0aGUgcGFyZW50IHZjbGQgcHJvY2Vzcywgbm90IGtpbGxpbmcgYW55IHByb2Nlc3NlcyBmb3Igc2FmZXR5Iik7CiAJCXJldHVybjsKIAl9CkBAIC0xMTYwNiwxMyArMTE2MDYsMTMgQEAKIAl9CiAJCiAJIyBDaGVjayBpZiBjYWNoZWQgaW5mbyBleGlzdHMKLQlpZiAoISRub19jYWNoZSAmJiBkZWZpbmVkKCRFTlZ7Y29ubmVjdF9tZXRob2RfaW5mb317JHJlc2VydmF0aW9uX2lkfSkpIHsKLQkJbXkgJGNvbm5lY3RfbWV0aG9kX2lkID0gKGtleXMoJXskRU5We2Nvbm5lY3RfbWV0aG9kX2luZm99eyRyZXNlcnZhdGlvbl9pZH19KSlbMF07CisJaWYgKCEkbm9fY2FjaGUgJiYgZGVmaW5lZCgkRU5WLT57Y29ubmVjdF9tZXRob2RfaW5mb30tPnskcmVzZXJ2YXRpb25faWR9KSkgeworCQlteSAkY29ubmVjdF9tZXRob2RfaWQgPSAoa2V5cygleyRFTlYtPntjb25uZWN0X21ldGhvZF9pbmZvfS0+eyRyZXNlcnZhdGlvbl9pZH19KSlbMF07CiAJCWlmICgkY29ubmVjdF9tZXRob2RfaWQpIHsKIAkJCSMgQ2hlY2sgdGhlIHRpbWUgdGhlIGluZm8gd2FzIGxhc3QgcmV0cmlldmVkCi0JCQlteSAkZGF0YV9hZ2Vfc2Vjb25kcyA9ICh0aW1lIC0gJEVOVntjb25uZWN0X21ldGhvZF9pbmZvfXskcmVzZXJ2YXRpb25faWR9eyRjb25uZWN0X21ldGhvZF9pZH17UkVUUklFVkFMX1RJTUV9KTsKKwkJCW15ICRkYXRhX2FnZV9zZWNvbmRzID0gKHRpbWUgLSAkRU5WLT57Y29ubmVjdF9tZXRob2RfaW5mb30tPnskcmVzZXJ2YXRpb25faWR9LT57JGNvbm5lY3RfbWV0aG9kX2lkfS0+e1JFVFJJRVZBTF9USU1FfSk7CiAJCQlpZiAoJGRhdGFfYWdlX3NlY29uZHMgPCA2MDApIHsKLQkJCQlyZXR1cm4gJEVOVntjb25uZWN0X21ldGhvZF9pbmZvfXskcmVzZXJ2YXRpb25faWR9OworCQkJCXJldHVybiAkRU5WLT57Y29ubmVjdF9tZXRob2RfaW5mb30tPnskcmVzZXJ2YXRpb25faWR9OwogCQkJfQogCQkJZWxzZSB7CiAJCQkJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJyZXRyaWV2aW5nIGN1cnJlbnQgY29ubmVjdCBtZXRob2QgaW5mbyBmb3IgcmVzZXJ2YXRpb24gJHJlc2VydmF0aW9uX2lkIGZyb20gZGF0YWJhc2UsIGNhY2hlZCBkYXRhIGlzIHN0YWxlOiAkZGF0YV9hZ2Vfc2Vjb25kcyBzZWNvbmRzIG9sZCIpOwpAQCAtMTE3MTcsOCArMTE3MTcsOCBAQAogCX0KIAogCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAicmV0cmlldmVkIGNvbm5lY3QgbWV0aG9kIGluZm8gZm9yIHJlc2VydmF0aW9uICRyZXNlcnZhdGlvbl9pZDpcbiIgLiBmb3JtYXRfZGF0YSgkY29ubmVjdF9tZXRob2RfaW5mbykpOwotCSRFTlZ7Y29ubmVjdF9tZXRob2RfaW5mb317JHJlc2VydmF0aW9uX2lkfSA9ICRjb25uZWN0X21ldGhvZF9pbmZvOwotCXJldHVybiAkRU5We2Nvbm5lY3RfbWV0aG9kX2luZm99eyRyZXNlcnZhdGlvbl9pZH07CisJJEVOVi0+e2Nvbm5lY3RfbWV0aG9kX2luZm99LT57JHJlc2VydmF0aW9uX2lkfSA9ICRjb25uZWN0X21ldGhvZF9pbmZvOworCXJldHVybiAkRU5WLT57Y29ubmVjdF9tZXRob2RfaW5mb30tPnskcmVzZXJ2YXRpb25faWR9OwogfQogCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC0xMTk1MCw3ICsxMTk1MCw3IEBACiAKICAgICMgQXR0ZW1wdCB0byByZXRyaWV2ZSB0aGUgY29udGVudHMgb2YgY3VycmVudGltYWdlLnR4dAogICAgbXkgJGNhdF9jb21tYW5kID0gImNhdCB+L2N1cnJlbnRpbWFnZS50eHQiOwotICAgbXkgKCRjYXRfZXhpdF9zdGF0dXMsICRjYXRfb3V0cHV0KSA9IHJ1bl9zc2hfY29tbWFuZCgkY29tcHV0ZXJfbm9kZV9uYW1lLCAkRU5We21hbmFnZW1lbnRfbm9kZV9pbmZvfXtrZXlzfSwgJGNhdF9jb21tYW5kKTsKKyAgIG15ICgkY2F0X2V4aXRfc3RhdHVzLCAkY2F0X291dHB1dCkgPSBydW5fc3NoX2NvbW1hbmQoJGNvbXB1dGVyX25vZGVfbmFtZSwgJEVOVi0+e21hbmFnZW1lbnRfbm9kZV9pbmZvfS0+e2tleXN9LCAkY2F0X2NvbW1hbmQpOwogICAgaWYgKCFkZWZpbmVkKCRjYXRfb3V0cHV0KSkgewogICAgICAgbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgImZhaWxlZCB0byBleGVjdXRlIGNvbW1hbmQgdG8gZmFpbGVkIHRvIHJldHJpZXZlIGN1cnJlbnRpbWFnZS50eHQgZnJvbSAkY29tcHV0ZXJfbm9kZV9uYW1lIik7CiAgICAgICByZXR1cm47CkBAIC0xMjAzOCwyNyArMTIwMzgsMjcgQEAKIAkKIAlteSAoJHNlY29uZHMsICRtaWNyb3NlY29uZHMpID0gZ2V0dGltZW9mZGF5OwogCQotCWlmICghJEVOVnsnc3RhcnQnfSkgewotCQkkRU5WeydzdGFydCd9ID0gWyRzZWNvbmRzLCAkbWljcm9zZWNvbmRzXTsKKwlpZiAoISRFTlYtPnsnc3RhcnQnfSkgeworCQkkRU5WLT57J3N0YXJ0J30gPSBbJHNlY29uZHMsICRtaWNyb3NlY29uZHNdOwogCX0KIAkKLQlpZiAoZGVmaW5lZCgkRU5WeydzdG9wd2F0Y2hfY291bnQnfSkpIHsKLQkJJEVOVnsnc3RvcHdhdGNoX2NvdW50J30rKzsKKwlpZiAoZGVmaW5lZCgkRU5WLT57J3N0b3B3YXRjaF9jb3VudCd9KSkgeworCQkkRU5WLT57J3N0b3B3YXRjaF9jb3VudCd9Kys7CiAJfQogCWVsc2UgewotCQkkRU5WeydzdG9wd2F0Y2hfY291bnQnfSA9ICdhJzsKKwkJJEVOVi0+eydzdG9wd2F0Y2hfY291bnQnfSA9ICdhJzsKIAl9CiAJCi0JJEVOVnsncHJldmlvdXMnfSA9ICRFTlZ7J2N1cnJlbnQnfSB8fCAkRU5WeydzdGFydCd9OworCSRFTlYtPnsncHJldmlvdXMnfSA9ICRFTlYtPnsnY3VycmVudCd9IHx8ICRFTlYtPnsnc3RhcnQnfTsKIAkKLQkkRU5WeydjdXJyZW50J30gPSBbJHNlY29uZHMsICRtaWNyb3NlY29uZHNdOworCSRFTlYtPnsnY3VycmVudCd9ID0gWyRzZWNvbmRzLCAkbWljcm9zZWNvbmRzXTsKIAkKLQlteSAkbWVzc2FnZSA9ICJbc3RvcHdhdGNoXSAkRU5WeydzdG9wd2F0Y2hfY291bnQnfTogIjsKKwlteSAkbWVzc2FnZSA9ICJbc3RvcHdhdGNoXSAkRU5WLT57J3N0b3B3YXRjaF9jb3VudCd9OiAiOwogCSRtZXNzYWdlIC49ICIkdGl0bGUgIiBpZiBkZWZpbmVkKCR0aXRsZSk7CiAJJHRpdGxlID0gJzxub25lPicgaWYgIWRlZmluZWQoJHRpdGxlKTsKIAkKLQlteSAkcHJldmlvdXNfZGVsdGEgPSBzcHJpbnRmKCIlLjJmIiwgdHZfaW50ZXJ2YWwoJEVOVnsncHJldmlvdXMnfSwgJEVOVnsnY3VycmVudCd9KSk7Ci0JbXkgJHN0YXJ0X2RlbHRhID0gc3ByaW50ZigiJS4yZiIsIHR2X2ludGVydmFsKCRFTlZ7J3N0YXJ0J30sICRFTlZ7J2N1cnJlbnQnfSkpOworCW15ICRwcmV2aW91c19kZWx0YSA9IHNwcmludGYoIiUuMmYiLCB0dl9pbnRlcnZhbCgkRU5WLT57J3ByZXZpb3VzJ30sICRFTlYtPnsnY3VycmVudCd9KSk7CisJbXkgJHN0YXJ0X2RlbHRhID0gc3ByaW50ZigiJS4yZiIsIHR2X2ludGVydmFsKCRFTlYtPnsnc3RhcnQnfSwgJEVOVi0+eydjdXJyZW50J30pKTsKIAkKIAkkc3RhcnRfZGVsdGEgPSAwIGlmICRzdGFydF9kZWx0YSA9fiAvZS87CiAJJHByZXZpb3VzX2RlbHRhID0gMCBpZiAkcHJldmlvdXNfZGVsdGEgPX4gL2UvOwpAQCAtMTIwNjgsMTkgKzEyMDY4LDE5IEBACiAJcHJpbnQgIlxuJG1lc3NhZ2VcblxuIjsKIAkKIAlteSAkaW5mbyA9IHsKLQkJY3VycmVudCA9PiAkRU5WeydjdXJyZW50J30sCi0JCXByZXZpb3VzID0+ICRFTlZ7J3ByZXZpb3VzJ30sCisJCWN1cnJlbnQgPT4gJEVOVi0+eydjdXJyZW50J30sCisJCXByZXZpb3VzID0+ICRFTlYtPnsncHJldmlvdXMnfSwKIAkJbWVzc2FnZSA9PiAkbWVzc2FnZSwKIAkJc3RhcnRfZGVsdGEgPT4gJHN0YXJ0X2RlbHRhLAogCQlwcmV2aW91c19kZWx0YSA9PiAkcHJldmlvdXNfZGVsdGEsCi0JCXRpdGxlID0+ICIkRU5WeydzdG9wd2F0Y2hfY291bnQnfTogJHRpdGxlIiwKKwkJdGl0bGUgPT4gIiRFTlYtPnsnc3RvcHdhdGNoX2NvdW50J306ICR0aXRsZSIsCiAJfTsKIAkKLQlpZiAoISRFTlZ7c3RvcHdhdGNofSkgewotCQkkRU5We3N0b3B3YXRjaH0gPSBbXTsKKwlpZiAoISRFTlYtPntzdG9wd2F0Y2h9KSB7CisJCSRFTlYtPntzdG9wd2F0Y2h9ID0gW107CiAJfQogCQotCXB1c2ggQHskRU5We3N0b3B3YXRjaH19LCAkaW5mbzsKKwlwdXNoIEB7JEVOVi0+e3N0b3B3YXRjaH19LCAkaW5mbzsKIH0KIAogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMTIxNzAsOSArMTIxNzAsOSBAQAogc3ViIGdldF9tYW5hZ2VtZW50X25vZGVfdm1ob3N0X2lkcyB7CiAJbXkgJG1hbmFnZW1lbnRfbm9kZV9pZGVudGlmaWVyID0gc2hpZnQgfHwgJEZRRE47CiAJCi0JaWYgKCRFTlZ7bWFuYWdlbWVudF9ub2RlX3ZtaG9zdF9pZHN9eyRtYW5hZ2VtZW50X25vZGVfaWRlbnRpZmllcn0pIHsKKwlpZiAoJEVOVi0+e21hbmFnZW1lbnRfbm9kZV92bWhvc3RfaWRzfS0+eyRtYW5hZ2VtZW50X25vZGVfaWRlbnRpZmllcn0pIHsKIAkJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJyZXR1cm5pbmcgcHJldmlvdXNseSByZXRyaWV2ZWQgdm1ob3N0IElEcyBhc3NpZ25lZCB0byBtYW5hZ2VtZW50IG5vZGU6ICRtYW5hZ2VtZW50X25vZGVfaWRlbnRpZmllciIpOwotCQlyZXR1cm4gQHskRU5We21hbmFnZW1lbnRfbm9kZV92bWhvc3RfaWRzfXskbWFuYWdlbWVudF9ub2RlX2lkZW50aWZpZXJ9fTsKKwkJcmV0dXJuIEB7JEVOVi0+e21hbmFnZW1lbnRfbm9kZV92bWhvc3RfaWRzfS0+eyRtYW5hZ2VtZW50X25vZGVfaWRlbnRpZmllcn19OwogCX0KIAlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgInJldHJpZXZpbmcgdm1ob3N0IElEcyBhc3NpZ25lZCB0byBtYW5hZ2VtZW50IG5vZGU6ICRtYW5hZ2VtZW50X25vZGVfaWRlbnRpZmllciIpOwogCQpAQCAtMTIyMzcsOCArMTIyMzcsOCBAQAogCW15IEB2bWhvc3RfaWRzID0gbWFwIHsgJF8tPntpZH0gfSBAc2VsZWN0ZWRfcm93czsKIAkKIAlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgInZtaG9zdCBJRHMgYXNzaWduZWQgdG8gJG1hbmFnZW1lbnRfbm9kZV9pZGVudGlmaWVyICgiIC4gc2NhbGFyKEB2bWhvc3RfaWRzKSAuICIpOiAiIC4gam9pbignLCAnLCBAdm1ob3N0X2lkcykpOwotCSRFTlZ7bWFuYWdlbWVudF9ub2RlX3ZtaG9zdF9pZHN9eyRtYW5hZ2VtZW50X25vZGVfaWRlbnRpZmllcn0gPSBcQHZtaG9zdF9pZHM7Ci0JcmV0dXJuIEB7JEVOVnttYW5hZ2VtZW50X25vZGVfdm1ob3N0X2lkc317JG1hbmFnZW1lbnRfbm9kZV9pZGVudGlmaWVyfX07CisJJEVOVi0+e21hbmFnZW1lbnRfbm9kZV92bWhvc3RfaWRzfS0+eyRtYW5hZ2VtZW50X25vZGVfaWRlbnRpZmllcn0gPSBcQHZtaG9zdF9pZHM7CisJcmV0dXJuIEB7JEVOVi0+e21hbmFnZW1lbnRfbm9kZV92bWhvc3RfaWRzfS0+eyRtYW5hZ2VtZW50X25vZGVfaWRlbnRpZmllcn19OwogfQogCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC0xMjI1NCw4ICsxMjI1NCw4IEBACiAKIHN1YiBnZXRfbWFuYWdlbWVudF9ub2RlX3ZtaG9zdF9pbmZvIHsKIAlteSAkbWFuYWdlbWVudF9ub2RlX2lkZW50aWZpZXIgPSBzaGlmdCB8fCAkRlFETjsKLQlyZXR1cm4gJEVOVnttYW5hZ2VtZW50X25vZGVfdm1ob3N0X2luZm99eyRtYW5hZ2VtZW50X25vZGVfaWRlbnRpZmllcn0gaWYgJEVOVnttYW5hZ2VtZW50X25vZGVfdm1ob3N0X2luZm99eyRtYW5hZ2VtZW50X25vZGVfaWRlbnRpZmllcn07Ci0JCisJcmV0dXJuICRFTlYtPnttYW5hZ2VtZW50X25vZGVfdm1ob3N0X2luZm99LT57JG1hbmFnZW1lbnRfbm9kZV9pZGVudGlmaWVyfSBpZiAkRU5WLT57bWFuYWdlbWVudF9ub2RlX3ZtaG9zdF9pbmZvfS0+eyRtYW5hZ2VtZW50X25vZGVfaWRlbnRpZmllcn07CisKIAlteSBAbWFuYWdlbWVudF9ub2RlX3ZtaG9zdF9pZHMgPSBnZXRfbWFuYWdlbWVudF9ub2RlX3ZtaG9zdF9pZHMoJG1hbmFnZW1lbnRfbm9kZV9pZGVudGlmaWVyKTsKIAkKIAlteSAkdm1ob3N0X2luZm8gPSB7fTsKQEAgLTEyMjY1LDggKzEyMjY1LDggQEAKIAkJJHZtaG9zdF9pbmZvLT57JHZtaG9zdF9pZH17dm1wcm9maWxlX3Byb2ZpbGVuYW1lfSA9ICR2bWhvc3RfaW5mby0+eyR2bWhvc3RfaWR9e3ZtcHJvZmlsZX17cHJvZmlsZW5hbWV9OwogCX0KIAkKLQkkRU5We21hbmFnZW1lbnRfbm9kZV92bWhvc3RfaW5mb317JG1hbmFnZW1lbnRfbm9kZV9pZGVudGlmaWVyfSA9ICR2bWhvc3RfaW5mbzsKLQlyZXR1cm4gJEVOVnttYW5hZ2VtZW50X25vZGVfdm1ob3N0X2luZm99eyRtYW5hZ2VtZW50X25vZGVfaWRlbnRpZmllcn07CisJJEVOVi0+e21hbmFnZW1lbnRfbm9kZV92bWhvc3RfaW5mb30tPnskbWFuYWdlbWVudF9ub2RlX2lkZW50aWZpZXJ9ID0gJHZtaG9zdF9pbmZvOworCXJldHVybiAkRU5WLT57bWFuYWdlbWVudF9ub2RlX3ZtaG9zdF9pbmZvfS0+eyRtYW5hZ2VtZW50X25vZGVfaWRlbnRpZmllcn07CiB9CiAKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTEyMjg3LDggKzEyMjg3LDggQEAKIAkJcmV0dXJuOwogCX0KIAkKLQlpZiAoISRub19jYWNoZSAmJiBkZWZpbmVkKCRFTlZ7dm1ob3N0X2Fzc2lnbmVkX3ZtX2luZm99eyR2bWhvc3RfaWR9KSkgewotCQlyZXR1cm4gJEVOVnt2bWhvc3RfYXNzaWduZWRfdm1faW5mb317JHZtaG9zdF9pZH07CisJaWYgKCEkbm9fY2FjaGUgJiYgZGVmaW5lZCgkRU5WLT57dm1ob3N0X2Fzc2lnbmVkX3ZtX2luZm99LT57JHZtaG9zdF9pZH0pKSB7CisJCXJldHVybiAkRU5WLT57dm1ob3N0X2Fzc2lnbmVkX3ZtX2luZm99LT57JHZtaG9zdF9pZH07CiAJfQogCQogCW15ICRzZWxlY3Rfc3RhdGVtZW50ID0gPDxFT0Y7CkBAIC0xMjMwOSw3ICsxMjMwOSw3IEBACiAJCSRhc3NpZ25lZF9jb21wdXRlcl9pbmZvLT57JGNvbXB1dGVyX2lkfSA9ICRjb21wdXRlcl9pbmZvIGlmICRjb21wdXRlcl9pbmZvOwogCX0KIAkKLQkkRU5We3ZtaG9zdF9hc3NpZ25lZF92bV9pbmZvfXskdm1ob3N0X2lkfSA9ICRhc3NpZ25lZF9jb21wdXRlcl9pbmZvOworCSRFTlYtPnt2bWhvc3RfYXNzaWduZWRfdm1faW5mb30tPnskdm1ob3N0X2lkfSA9ICRhc3NpZ25lZF9jb21wdXRlcl9pbmZvOwogCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAicmV0cmlldmVkIGNvbXB1dGVyIGluZm8gZm9yIFZNcyBhc3NpZ25lZCB0byBWTSBob3N0ICR2bWhvc3RfaWQ6ICIgLiBqb2luKCcsICcsIHNvcnQga2V5cyAlJGFzc2lnbmVkX2NvbXB1dGVyX2luZm8pKTsKIAlyZXR1cm4gJGFzc2lnbmVkX2NvbXB1dGVyX2luZm87CiB9CkBAIC0xMjM4Niw4ICsxMjM4Niw4IEBACiAJCXJldHVybjsKIAl9CiAJCi0JaWYgKCEkbm9fY2FjaGUgJiYgZGVmaW5lZCgkRU5We3ZtaG9zdF9hc3NpZ25lZF92bV9wcm92aXNpb25pbmdfaW5mb317JHZtaG9zdF9pZH0pKSB7Ci0JCXJldHVybiAkRU5We3ZtaG9zdF9hc3NpZ25lZF92bV9wcm92aXNpb25pbmdfaW5mb317JHZtaG9zdF9pZH07CisJaWYgKCEkbm9fY2FjaGUgJiYgZGVmaW5lZCgkRU5WLT57dm1ob3N0X2Fzc2lnbmVkX3ZtX3Byb3Zpc2lvbmluZ19pbmZvfS0+eyR2bWhvc3RfaWR9KSkgeworCQlyZXR1cm4gJEVOVi0+e3ZtaG9zdF9hc3NpZ25lZF92bV9wcm92aXNpb25pbmdfaW5mb30tPnskdm1ob3N0X2lkfTsKIAl9CiAJCiAJbXkgJHZtaG9zdF9hc3NpZ25lZF92bV9pbmZvID0gZ2V0X3ZtaG9zdF9hc3NpZ25lZF92bV9pbmZvKCR2bWhvc3RfaWQsICRub19jYWNoZSkgfHwgcmV0dXJuOwpAQCAtMTI0MDIsNyArMTI0MDIsNyBAQAogCQkkdm1ob3N0X2Fzc2lnbmVkX3ZtX3Byb3Zpc2lvbmluZ19pbmZvLT57JHByb3Zpc2lvbmluZ19pZH17QVNTSUdORURfVk1fQ09VTlR9Kys7CiAJfQogCQotCSRFTlZ7dm1ob3N0X2Fzc2lnbmVkX3ZtX3Byb3Zpc2lvbmluZ19pbmZvfXskdm1ob3N0X2lkfSA9ICR2bWhvc3RfYXNzaWduZWRfdm1fcHJvdmlzaW9uaW5nX2luZm87CisJJEVOVi0+e3ZtaG9zdF9hc3NpZ25lZF92bV9wcm92aXNpb25pbmdfaW5mb30tPnskdm1ob3N0X2lkfSA9ICR2bWhvc3RfYXNzaWduZWRfdm1fcHJvdmlzaW9uaW5nX2luZm87CiAJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJyZXRyaWV2ZWQgcHJvdmlzaW9uaW5nIGluZm8gZm9yIFZNcyBhc3NpZ25lZCB0byBWTSBob3N0ICR2bWhvc3RfaWQ6XG4iIC4gZm9ybWF0X2RhdGEoJHZtaG9zdF9hc3NpZ25lZF92bV9wcm92aXNpb25pbmdfaW5mbykpOwogCXJldHVybiAkdm1ob3N0X2Fzc2lnbmVkX3ZtX3Byb3Zpc2lvbmluZ19pbmZvOwogfQpAQCAtMTI0NzAsNyArMTI0NzAsNyBAQAogPWN1dAogCiBzdWIgZ2V0X2ltYWdlcmV2aXNpb25fY2xlYW51cF9pbmZvIHsKLQlyZXR1cm4gJEVOVntpbWFnZXJldmlzaW9uX2NsZWFudXBfaW5mb30gaWYgJEVOVntpbWFnZXJldmlzaW9uX2NsZWFudXBfaW5mb307CisJcmV0dXJuICRFTlYtPntpbWFnZXJldmlzaW9uX2NsZWFudXBfaW5mb30gaWYgJEVOVi0+e2ltYWdlcmV2aXNpb25fY2xlYW51cF9pbmZvfTsKIAkKIAlteSAkc3FsID0gPDxFT0Y7CQogU0VMRUNUCkBAIC0xMjUxOCw4ICsxMjUxOCw4IEBACiAJfQogCQogCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAicmV0cmlldmVkIGNsZWFudXAgaW5mbyBmb3IgaW1hZ2VyZXZpc2lvbiBlbnRyaWVzIGluIHRoZSBkYXRhYmFzZSIpOwotCSRFTlZ7aW1hZ2VyZXZpc2lvbl9jbGVhbnVwX2luZm99ID0gJGltYWdlcmV2aXNpb25fY2xlYW51cF9pbmZvOwotCXJldHVybiAkRU5We2ltYWdlcmV2aXNpb25fY2xlYW51cF9pbmZvfTsKKwkkRU5WLT57aW1hZ2VyZXZpc2lvbl9jbGVhbnVwX2luZm99ID0gJGltYWdlcmV2aXNpb25fY2xlYW51cF9pbmZvOworCXJldHVybiAkRU5WLT57aW1hZ2VyZXZpc2lvbl9jbGVhbnVwX2luZm99OwogfQogCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCkBAIC0xMjczNSw3ICsxMjczNSw3IEBACiA9Y3V0CiAKIHN1YiBnZXRfaW1hZ2VyZXZpc2lvbl9uYW1lcyB7Ci0JcmV0dXJuIEB7JEVOVntpbWFnZXJldmlzaW9uX25hbWVzfX0gaWYgJEVOVntpbWFnZXJldmlzaW9uX25hbWVzfTsKKwlyZXR1cm4gQHskRU5WLT57aW1hZ2VyZXZpc2lvbl9uYW1lc319IGlmICRFTlYtPntpbWFnZXJldmlzaW9uX25hbWVzfTsKIAkKIAlteSAkc3FsID0gIlNFTEVDVCBpbWFnZXJldmlzaW9uLmltYWdlbmFtZSBGUk9NIGltYWdlcmV2aXNpb24gV0hFUkUgMSI7CiAJbXkgQHJvd3MgPSBkYXRhYmFzZV9zZWxlY3QoJHNxbCk7CkBAIC0xMjc0Myw4ICsxMjc0Myw4IEBACiAJbXkgJGltYWdlcmV2aXNpb25fY291bnQgPSBzY2FsYXIoQGltYWdlcmV2aXNpb25fbmFtZXMpOwogCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAicmV0cmlldmVkICRpbWFnZXJldmlzaW9uX2NvdW50IGltYWdlcmV2aXNpb24gbmFtZXMgZnJvbSBkYXRhYmFzZSIpOwogCQotCSRFTlZ7aW1hZ2VyZXZpc2lvbl9uYW1lc30gPSBcQGltYWdlcmV2aXNpb25fbmFtZXM7Ci0JcmV0dXJuIEB7JEVOVntpbWFnZXJldmlzaW9uX25hbWVzfX07CisJJEVOVi0+e2ltYWdlcmV2aXNpb25fbmFtZXN9ID0gXEBpbWFnZXJldmlzaW9uX25hbWVzOworCXJldHVybiBAeyRFTlYtPntpbWFnZXJldmlzaW9uX25hbWVzfX07CiB9CiAKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTEzOTcyLDkgKzEzOTcyLDkgQEAKIAlteSAkY29tcHV0ZXJfc3RyaW5nID0gJGNvbXB1dGVyX2lkZW50aWZpZXI7CiAJJGNvbXB1dGVyX3N0cmluZyAuPSAiICgkY29tcHV0ZXJfaWQpIiBpZiAoJGNvbXB1dGVyX2lkZW50aWZpZXIgbmUgJGNvbXB1dGVyX2lkKTsKIAkKLQlpZiAoISRub19jYWNoZSAmJiBkZWZpbmVkKCRFTlZ7Y29tcHV0ZXJfcHJpdmF0ZV9pcF9hZGRyZXNzfXskY29tcHV0ZXJfaWR9KSkgewotCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgInJldHVybmluZyBjYWNoZWQgcHJpdmF0ZSBJUCBhZGRyZXNzIGZvciBjb21wdXRlciAkY29tcHV0ZXJfc3RyaW5nOiAkRU5We2NvbXB1dGVyX3ByaXZhdGVfaXBfYWRkcmVzc317JGNvbXB1dGVyX2lkfSIpOwotCQlyZXR1cm4gJEVOVntjb21wdXRlcl9wcml2YXRlX2lwX2FkZHJlc3N9eyRjb21wdXRlcl9pZH07CisJaWYgKCEkbm9fY2FjaGUgJiYgZGVmaW5lZCgkRU5WLT57Y29tcHV0ZXJfcHJpdmF0ZV9pcF9hZGRyZXNzfS0+eyRjb21wdXRlcl9pZH0pKSB7CisJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAicmV0dXJuaW5nIGNhY2hlZCBwcml2YXRlIElQIGFkZHJlc3MgZm9yIGNvbXB1dGVyICRjb21wdXRlcl9zdHJpbmc6ICRFTlYtPntjb21wdXRlcl9wcml2YXRlX2lwX2FkZHJlc3N9LT57JGNvbXB1dGVyX2lkfSIpOworCQlyZXR1cm4gJEVOVi0+e2NvbXB1dGVyX3ByaXZhdGVfaXBfYWRkcmVzc30tPnskY29tcHV0ZXJfaWR9OwogCX0KIAkKIAlteSAkc2VsZWN0X3N0YXRlbWVudCA9IDw8RU9GOwpAQCAtMTM5OTgsNyArMTM5OTgsNyBAQAogCW15ICRwcml2YXRlX2lwX2FkZHJlc3MgPSAkcm93LT57cHJpdmF0ZUlQYWRkcmVzc307CiAJbXkgJGhvc3RuYW1lID0gJHJvdy0+e2hvc3RuYW1lfTsKIAlpZiAoJHByaXZhdGVfaXBfYWRkcmVzcykgewotCQkkRU5We2NvbXB1dGVyX3ByaXZhdGVfaXBfYWRkcmVzc317JGNvbXB1dGVyX2lkfSA9ICRwcml2YXRlX2lwX2FkZHJlc3M7CisJCSRFTlYtPntjb21wdXRlcl9wcml2YXRlX2lwX2FkZHJlc3N9LT57JGNvbXB1dGVyX2lkfSA9ICRwcml2YXRlX2lwX2FkZHJlc3M7CiAJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAicmV0cmlldmVkIHByaXZhdGUgSVAgYWRkcmVzcyBmb3IgY29tcHV0ZXIgJGNvbXB1dGVyX3N0cmluZyBmcm9tIGRhdGFiYXNlOiAkcHJpdmF0ZV9pcF9hZGRyZXNzIik7CiAJCXJldHVybiAkcHJpdmF0ZV9pcF9hZGRyZXNzOwogCX0KQEAgLTE0MjU3LDcgKzE0MjU3LDcgQEAKID1jdXQKIAogc3ViIGdldF9wcm92aXNpb25pbmdfdGFibGVfaW5mbyB7Ci0JcmV0dXJuICRFTlZ7cHJvdmlzaW9uaW5nX3RhYmxlX2luZm99IGlmIChkZWZpbmVkKCRFTlZ7cHJvdmlzaW9uaW5nX3RhYmxlX2luZm99KSk7CisJcmV0dXJuICRFTlYtPntwcm92aXNpb25pbmdfdGFibGVfaW5mb30gaWYgKGRlZmluZWQoJEVOVi0+e3Byb3Zpc2lvbmluZ190YWJsZV9pbmZvfSkpOwogCQogCSMgR2V0IGEgaGFzaCByZWYgY29udGFpbmluZyB0aGUgZGF0YWJhc2UgY29sdW1uIG5hbWVzCiAJbXkgJGRhdGFiYXNlX3RhYmxlX2NvbHVtbnMgPSBnZXRfZGF0YWJhc2VfdGFibGVfY29sdW1ucygpOwpAQCAtMTQzMTUsNyArMTQzMTUsNyBAQAogCQl9CiAJfQogCQotCSRFTlZ7cHJvdmlzaW9uaW5nX3RhYmxlX2luZm99ID0gJHByb3Zpc2lvbmluZ190YWJsZV9pbmZvOworCSRFTlYtPntwcm92aXNpb25pbmdfdGFibGVfaW5mb30gPSAkcHJvdmlzaW9uaW5nX3RhYmxlX2luZm87CiAJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJyZXRyaWV2ZWQgcHJvdmlzaW9uaW5nIGluZm86ICIgLiBmb3JtYXRfZGF0YSgkcHJvdmlzaW9uaW5nX3RhYmxlX2luZm8pKTsKIAlyZXR1cm4gJHByb3Zpc2lvbmluZ190YWJsZV9pbmZvOwogfQpAQCAtMTQzODUsMzIgKzE0Mzg1LDMyIEBACiAJIyBSZW1vdmUgYW55dGhpbmcgcHJlY2VlZGluZyBpdAogCSRhcmd1bWVudCA9fiBzLy4qQChbXkBdKykkLyQxL2c7CiAJCi0JaWYgKCEkbm9fY2FjaGUgJiYgZGVmaW5lZCgkRU5We3JlbW90ZV9jb25uZWN0aW9uX3RhcmdldH17JGFyZ3VtZW50fSkpIHsKLQkJcmV0dXJuICRFTlZ7cmVtb3RlX2Nvbm5lY3Rpb25fdGFyZ2V0fXskYXJndW1lbnR9OworCWlmICghJG5vX2NhY2hlICYmIGRlZmluZWQoJEVOVi0+e3JlbW90ZV9jb25uZWN0aW9uX3RhcmdldH0tPnskYXJndW1lbnR9KSkgeworCQlyZXR1cm4gJEVOVi0+e3JlbW90ZV9jb25uZWN0aW9uX3RhcmdldH0tPnskYXJndW1lbnR9OwogCX0KIAkKIAkjIElmIGFuIElQIGFkZHJlc3Mgd2FzIHBhc3NlZCwgdXNlIGl0CiAJaWYgKGlzX3ZhbGlkX2lwX2FkZHJlc3MoJGFyZ3VtZW50LCAwKSkgewotCQkkRU5We3JlbW90ZV9jb25uZWN0aW9uX3RhcmdldH17JGFyZ3VtZW50fSA9ICRhcmd1bWVudDsKLQkJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJhcmd1bWVudCBpcyBhIHZhbGlkIElQIGFkZHJlc3MsIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgcmVtb3RlIGNvbm5lY3Rpb24gdGFyZ2V0OiAkRU5We3JlbW90ZV9jb25uZWN0aW9uX3RhcmdldH17JGFyZ3VtZW50fSIpOwotCQlyZXR1cm4gJEVOVntyZW1vdGVfY29ubmVjdGlvbl90YXJnZXR9eyRhcmd1bWVudH07CisJCSRFTlYtPntyZW1vdGVfY29ubmVjdGlvbl90YXJnZXR9LT57JGFyZ3VtZW50fSA9ICRhcmd1bWVudDsKKwkJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJhcmd1bWVudCBpcyBhIHZhbGlkIElQIGFkZHJlc3MsIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgcmVtb3RlIGNvbm5lY3Rpb24gdGFyZ2V0OiAkRU5WLT57cmVtb3RlX2Nvbm5lY3Rpb25fdGFyZ2V0fS0+eyRhcmd1bWVudH0iKTsKKwkJcmV0dXJuICRFTlYtPntyZW1vdGVfY29ubmVjdGlvbl90YXJnZXR9LT57JGFyZ3VtZW50fTsKIAl9CiAJCiAJIyBBdHRlbXB0IHRvIHJldHJpZXZlIHRoZSBwcml2YXRlIElQIGFkZHJlc3MgZnJvbSB0aGUgZGF0YWJhc2UKIAlteSAkZGF0YWJhc2VfcHJpdmF0ZV9pcF9hZGRyZXNzID0gZ2V0X2NvbXB1dGVyX2N1cnJlbnRfcHJpdmF0ZV9pcF9hZGRyZXNzKCRhcmd1bWVudCk7CiAJaWYgKCRkYXRhYmFzZV9wcml2YXRlX2lwX2FkZHJlc3MpIHsKLQkJJEVOVntyZW1vdGVfY29ubmVjdGlvbl90YXJnZXR9eyRhcmd1bWVudH0gPSAkZGF0YWJhc2VfcHJpdmF0ZV9pcF9hZGRyZXNzOwotCQlub3RpZnkoJEVSUk9SU3snREVCVUcnfSwgMCwgInByaXZhdGUgSVAgYWRkcmVzcyBpcyBzZXQgaW4gZGF0YWJhc2UgZm9yICRhcmd1bWVudCwgaXQgd2lsbCBiZSB1c2VkIGFzIHRoZSByZW1vdGUgY29ubmVjdGlvbiB0YXJnZXQ6ICRFTlZ7cmVtb3RlX2Nvbm5lY3Rpb25fdGFyZ2V0fXskYXJndW1lbnR9Iik7Ci0JCXJldHVybiAkRU5We3JlbW90ZV9jb25uZWN0aW9uX3RhcmdldH17JGFyZ3VtZW50fTsKKwkJJEVOVi0+e3JlbW90ZV9jb25uZWN0aW9uX3RhcmdldH0tPnskYXJndW1lbnR9ID0gJGRhdGFiYXNlX3ByaXZhdGVfaXBfYWRkcmVzczsKKwkJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICJwcml2YXRlIElQIGFkZHJlc3MgaXMgc2V0IGluIGRhdGFiYXNlIGZvciAkYXJndW1lbnQsIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgcmVtb3RlIGNvbm5lY3Rpb24gdGFyZ2V0OiAkRU5WLT57cmVtb3RlX2Nvbm5lY3Rpb25fdGFyZ2V0fS0+eyRhcmd1bWVudH0iKTsKKwkJcmV0dXJuICRFTlYtPntyZW1vdGVfY29ubmVjdGlvbl90YXJnZXR9LT57JGFyZ3VtZW50fTsKIAl9CiAJCiAJIyBQcml2YXRlIElQIGFkZHJlc3MgY291bGQgbm90IGJlIHJldHJpZXZlZCBmcm9tIHRoZSBkYXRhYmFzZSBvciBpcyBzZXQgdG8gTlVMTAogCSMgVHJ5IHRvIHJlc29sdmUgdGhlIGFyZ3VtZW50IHRvIGFuIElQIGFkZHJlc3MKIAkjIEZpcnN0IG1ha2Ugc3VyZSBpdCBpcyBhIHZhbGlkIGhvc3RuYW1lCiAJaWYgKCFpc192YWxpZF9kbnNfaG9zdF9uYW1lKCRhcmd1bWVudCkpIHsKLQkJJEVOVntyZW1vdGVfY29ubmVjdGlvbl90YXJnZXR9eyRhcmd1bWVudH0gPSAkYXJndW1lbnQ7CisJCSRFTlYtPntyZW1vdGVfY29ubmVjdGlvbl90YXJnZXR9LT57JGFyZ3VtZW50fSA9ICRhcmd1bWVudDsKIAkJbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgImZhaWxlZCB0byByZWxpYWJseSBkZXRlcm1pbmUgdGhlIHJlbW90ZSBjb25uZWN0aW9uIHRhcmdldCB0byB1c2UgZm9yICckYXJndW1lbnQnLCBpdCBpcyBub3QgYSB2YWxpZCBJUCBhZGRyZXNzIG9yIEROUyBob3N0bmFtZSIpOwotCQlyZXR1cm4gJEVOVntyZW1vdGVfY29ubmVjdGlvbl90YXJnZXR9eyRhcmd1bWVudH07CisJCXJldHVybiAkRU5WLT57cmVtb3RlX2Nvbm5lY3Rpb25fdGFyZ2V0fS0+eyRhcmd1bWVudH07CiAJfQogCQogCSMgQ2hlY2sgaWYgdGhlIGhvc3RuYW1lIGluY2x1ZGVzIGEgRE5TIHN1ZmZpeApAQCAtMTQ0MzIsMTQgKzE0NDMyLDE0IEBACiAJCQl1cGRhdGVfY29tcHV0ZXJfcHJpdmF0ZV9pcF9hZGRyZXNzKCRhcmd1bWVudCwgJHJlc29sdmVkX2lwX2FkZHJlc3MpOwogCQl9CiAJCQotCQkkRU5We3JlbW90ZV9jb25uZWN0aW9uX3RhcmdldH17JGFyZ3VtZW50fSA9ICRyZXNvbHZlZF9pcF9hZGRyZXNzOworCQkkRU5WLT57cmVtb3RlX2Nvbm5lY3Rpb25fdGFyZ2V0fS0+eyRhcmd1bWVudH0gPSAkcmVzb2x2ZWRfaXBfYWRkcmVzczsKIAkJbm90aWZ5KCRFUlJPUlN7J0RFQlVHJ30sIDAsICIkYXJndW1lbnQgcmVzb2x2ZXMgdG8gSVAgYWRkcmVzcyAkcmVzb2x2ZWRfaXBfYWRkcmVzcywgaXQgd2lsbCBiZSB1c2VkIGFzIHRoZSByZW1vdGUgY29ubmVjdGlvbiB0YXJnZXQiKTsKLQkJcmV0dXJuICRFTlZ7cmVtb3RlX2Nvbm5lY3Rpb25fdGFyZ2V0fXskYXJndW1lbnR9OworCQlyZXR1cm4gJEVOVi0+e3JlbW90ZV9jb25uZWN0aW9uX3RhcmdldH0tPnskYXJndW1lbnR9OwogCX0KIAllbHNlIHsKIAkJbm90aWZ5KCRFUlJPUlN7J1dBUk5JTkcnfSwgMCwgImZhaWxlZCB0byByZWxpYWJseSBkZXRlcm1pbmUgdGhlIHJlbW90ZSBjb25uZWN0aW9uIHRhcmdldCB0byB1c2UgZm9yICckYXJndW1lbnQnLCBpdCBpcyBub3QgYSB2YWxpZCBJUCBhZGRyZXNzLCBhIHByaXZhdGUgSVAgYWRkcmVzcyBpcyBub3Qgc2V0IGluIHRoZSBkYXRhYmFzZSwgYW5kICckYXJndW1lbnQnIGRvZXMgbm90IHJlc29sdmUgdG8gYW4gSVAgYWRkcmVzcyBvbiB0aGlzIG1hbmFnZW1lbnQgbm9kZSIpOwotCQkkRU5We3JlbW90ZV9jb25uZWN0aW9uX3RhcmdldH17JGFyZ3VtZW50fSA9ICRhcmd1bWVudDsKLQkJcmV0dXJuICRFTlZ7cmVtb3RlX2Nvbm5lY3Rpb25fdGFyZ2V0fXskYXJndW1lbnR9OworCQkkRU5WLT57cmVtb3RlX2Nvbm5lY3Rpb25fdGFyZ2V0fS0+eyRhcmd1bWVudH0gPSAkYXJndW1lbnQ7CisJCXJldHVybiAkRU5WLT57cmVtb3RlX2Nvbm5lY3Rpb25fdGFyZ2V0fS0+eyRhcmd1bWVudH07CiAJfQogfQogCkBAIC0xNTE5Myw5ICsxNTE5Myw5IEBACiAJCXJldHVybjsKIAl9CiAJCi0JaWYgKCEkbm9fY2FjaGUgJiYgZGVmaW5lZCgkRU5We21hbmFnZW1lbnRfbm9kZV9hZF9kb21haW5fY3JlZGVudGlhbHN9eyRkb21haW5faWR9KSkgeworCWlmICghJG5vX2NhY2hlICYmIGRlZmluZWQoJEVOVi0+e21hbmFnZW1lbnRfbm9kZV9hZF9kb21haW5fY3JlZGVudGlhbHN9LT57JGRvbWFpbl9pZH0pKSB7CiAJCW5vdGlmeSgkRVJST1JTeydERUJVRyd9LCAwLCAicmV0dXJuaW5nIGNhY2hlZCBBY3RpdmUgRGlyZWN0b3J5IGNyZWRlbnRpYWxzIGZvciBkb21haW46ICRkb21haW5faWQiKTsKLQkJcmV0dXJuIEB7JEVOVnttYW5hZ2VtZW50X25vZGVfYWRfZG9tYWluX2NyZWRlbnRpYWxzfXskZG9tYWluX2lkfX07CisJCXJldHVybiBAeyRFTlYtPnttYW5hZ2VtZW50X25vZGVfYWRfZG9tYWluX2NyZWRlbnRpYWxzfS0+eyRkb21haW5faWR9fTsKIAl9CiAJCiAJIyBDb25zdHJ1Y3QgdGhlIHNlbGVjdCBzdGF0ZW1lbnQKQEAgLTE1MjMzLDggKzE1MjMzLDggQEAKIAkJInNlY3JldCBJRCAgICAgICAgICA6ICckc2VjcmV0X2lkJ1xuIiAuCiAJCSJlbmNyeXB0ZWQgcGFzc3dvcmQgOiAnJGVuY3J5cHRlZF9wYXNzd29yZCciCiAJKTsKLQkkRU5We21hbmFnZW1lbnRfbm9kZV9hZF9kb21haW5fY3JlZGVudGlhbHN9eyRkb21haW5faWR9ID0gWyRkb21haW5fZG5zX25hbWUsICR1c2VybmFtZSwgJHNlY3JldF9pZCwgJGVuY3J5cHRlZF9wYXNzd29yZF07Ci0JcmV0dXJuIEB7JEVOVnttYW5hZ2VtZW50X25vZGVfYWRfZG9tYWluX2NyZWRlbnRpYWxzfXskZG9tYWluX2lkfX07CisJJEVOVi0+e21hbmFnZW1lbnRfbm9kZV9hZF9kb21haW5fY3JlZGVudGlhbHN9LT57JGRvbWFpbl9pZH0gPSBbJGRvbWFpbl9kbnNfbmFtZSwgJHVzZXJuYW1lLCAkc2VjcmV0X2lkLCAkZW5jcnlwdGVkX3Bhc3N3b3JkXTsKKwlyZXR1cm4gQHskRU5WLT57bWFuYWdlbWVudF9ub2RlX2FkX2RvbWFpbl9jcmVkZW50aWFsc30tPnskZG9tYWluX2lkfX07CiB9CiAKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KZGlmZiAtLWdpdCBhL3ZjbC1pbnN0YWxsLnNoIGIvdmNsLWluc3RhbGwuc2gKaW5kZXggZGI1OTk3OC4uMWYxNGZhNiAxMDA3NTUKLS0tIGEvdmNsLWluc3RhbGwuc2gKKysrIGIvdmNsLWluc3RhbGwuc2gKQEAgLTgxLDcgKzgxLDcgQEAKIFBFTUtFWT1gcmFuZG9tX3N0cmluZyAyMGAKIEFSQ0hJVkU9YXBhY2hlLVZDTC0kVkNMX1ZFUlNJT04udGFyLmJ6MgogQVJDSElWRVVSTFBBVEg9Imh0dHA6Ly92Y2wuYXBhY2hlLm9yZy9kb3dubG9hZHMvZG93bmxvYWQuY2dpP2FjdGlvbj1kb3dubG9hZCZmaWxlbmFtZT0lMkZ2Y2wlMkYkVkNMX1ZFUlNJT04lMkYiCi1TSUdQQVRIPSJodHRwczovL3d3dy5hcGFjaGUub3JnL2Rpc3QvdmNsLyRWQ0xfVkVSU0lPTi8iCitTSUdQQVRIPSJodHRwczovL2Rvd25sb2Fkcy5hcGFjaGUub3JnL3ZjbC8kVkNMX1ZFUlNJT04vIgogVFpERUZBVUxUPSJBbWVyaWNhL05ld19Zb3JrIgogCiBET0RCPTAKQEAgLTQxNCwxMCArNDE0LDEwIEBACiBwcmludF9icmVhawogZWNobyAiSW5zdGFsbGluZyBMaW51eCBwYWNrYWdlcy4uLiIKIGlmIFtbICRET01OIC1lcSAxIF1dOyB0aGVuCi0JeXVtIC1xIC15IGluc3RhbGwgb3BlbnNzaC1jbGllbnRzIHdnZXQgcGVybAorCXl1bSAtcSAteSBpbnN0YWxsIG9wZW5zc2gtY2xpZW50cyB3Z2V0IHBlcmwgYnppcDIKIAlpZiBbICQ/IC1uZSAwIF07IHRoZW4gIkVycm9yOiBGYWlsZWQgdG8gaW5zdGFsbCByZXF1aXJlZCBsaW51eCBwYWNrYWdlcyAob3BlbnNzaC1jbGllbnQsIHdnZXQsIGFuZCBwZXJsKSI7IGV4aXQgMTsgZmk7CiBlbHNlCi0JeXVtIC1xIC15IGluc3RhbGwgb3BlbnNzaC1jbGllbnRzIHdnZXQKKwl5dW0gLXEgLXkgaW5zdGFsbCBvcGVuc3NoLWNsaWVudHMgd2dldCBiemlwMgogCWlmIFsgJD8gLW5lIDAgXTsgdGhlbiAiRXJyb3I6IEZhaWxlZCB0byBpbnN0YWxsIHJlcXVpcmVkIGxpbnV4IHBhY2thZ2VzIChvcGVuc3NoLWNsaWVudCBhbmQgd2dldCkiOyBleGl0IDE7IGZpOwogZmkKIApAQCAtNDMzLDcgKzQzMyw3IEBACiAJCiAJc2FsdD0kKHJhbmRvbV9zdHJpbmcgOCkKIAkjZWNobyAiUGFzc3dvcmQgc2FsdDogJHNhbHQiCi0JcGFzc2hhc2g9JChlY2hvIC1uICRwYXNzd29yZCRzYWx0IHwgc2hhMXN1bSB8IGF3ayAne3ByaW50ICQxfScpCisJcGFzc2hhc2g9JChlY2hvIC1uICRwYXNzd29yZCRzYWx0IHwgc2hhNTEyc3VtIHwgYXdrICd7cHJpbnQgJDF9JykKIAkjZWNobyAiUGFzc3dvcmQgaGFzaDogJHBhc3NoYXNoIgogCW15c3FsIC1lICJVUERBVEUgbG9jYWxhdXRoIFNFVCBwYXNzaGFzaCA9ICckcGFzc2hhc2gnLCBzYWx0ID0gJyRzYWx0JywgbGFzdHVwZGF0ZWQgPSBOT1coKSBXSEVSRSBsb2NhbGF1dGgudXNlcmlkID0gKFNFTEVDVCBpZCBGUk9NIHVzZXIgV0hFUkUgdW5pdHlpZCA9ICckdXNlcm5hbWUnKTsiIHZjbAogCWlmIFsgJD8gLW5lIDAgXTsgdGhlbgpAQCAtNTIxLDYgKzUyMSw4IEBACiAJc2xlZXAgMQogCXl1bSAtcSAteSBpbnN0YWxsIHBlcmwtQ1BBTgogCWlmIFsgJD8gLW5lIDAgXTsgdGhlbiBlY2hvICJFcnJvcjogRmFpbGVkIHRvIGluc3RhbGwgcGVybC1DUEFOIjsgZXhpdCAxOyBmaTsKKwl5dW0gLXEgLXkgaW5zdGFsbCBwZXJsLUFwcC1jcGFubWludXMKKwlpZiBbICQ/IC1uZSAwIF07IHRoZW4gZWNobyAiRXJyb3I6IEZhaWxlZCB0byBpbnN0YWxsIHBlcmwtQXBwLWNwYW5taW51cyI7IGV4aXQgMTsgZmk7CiAJcGVybCBhcGFjaGUtVkNMLSRWQ0xfVkVSU0lPTi9tYW5hZ2VtZW50bm9kZS9iaW4vaW5zdGFsbF9wZXJsX2xpYnMucGwKIAlyYz0kPwogCWlmIFsgJHJjIC1lcSAyIF07IHRoZW4K