ZGlmZiAtLWdpdCBhL3dlYmNvbnNvbGUtcGx1Z2lucy9wYWNrYWdlYWRtaW4vc3JjL21haW4vamF2YS9vcmcvYXBhY2hlL2ZlbGl4L3dlYmNvbnNvbGUvcGx1Z2lucy9wYWNrYWdlYWRtaW4vaW50ZXJuYWwvV2ViQ29uc29sZVBsdWdpbi5qYXZhIGIvd2ViY29uc29sZS1wbHVnaW5zL3BhY2thZ2VhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvZmVsaXgvd2ViY29uc29sZS9wbHVnaW5zL3BhY2thZ2VhZG1pbi9pbnRlcm5hbC9XZWJDb25zb2xlUGx1Z2luLmphdmEKaW5kZXggZDZhZjBkNi4uNWE5NjMzMyAxMDA2NDQKLS0tIGEvd2ViY29uc29sZS1wbHVnaW5zL3BhY2thZ2VhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvZmVsaXgvd2ViY29uc29sZS9wbHVnaW5zL3BhY2thZ2VhZG1pbi9pbnRlcm5hbC9XZWJDb25zb2xlUGx1Z2luLmphdmEKKysrIGIvd2ViY29uc29sZS1wbHVnaW5zL3BhY2thZ2VhZG1pbi9zcmMvbWFpbi9qYXZhL29yZy9hcGFjaGUvZmVsaXgvd2ViY29uc29sZS9wbHVnaW5zL3BhY2thZ2VhZG1pbi9pbnRlcm5hbC9XZWJDb25zb2xlUGx1Z2luLmphdmEKQEAgLTM5LDYgKzM5LDggQEAKIGltcG9ydCBqYXZheC5zZXJ2bGV0Lmh0dHAuSHR0cFNlcnZsZXRSZXNwb25zZTsNCiANCiBpbXBvcnQgb3JnLmFwYWNoZS5jb21tb25zLmlvLklPVXRpbHM7DQoraW1wb3J0IG9yZy5hcGFjaGUuZmVsaXgudXRpbHMubWFuaWZlc3QuQ2xhdXNlOw0KK2ltcG9ydCBvcmcuYXBhY2hlLmZlbGl4LnV0aWxzLm1hbmlmZXN0LlBhcnNlcjsNCiBpbXBvcnQgb3JnLmFwYWNoZS5mZWxpeC53ZWJjb25zb2xlLlNpbXBsZVdlYkNvbnNvbGVQbHVnaW47DQogaW1wb3J0IG9yZy5hcGFjaGUuZmVsaXgud2ViY29uc29sZS5XZWJDb25zb2xlVXRpbDsNCiBpbXBvcnQgb3JnLmpzb24uSlNPTkFycmF5Ow0KQEAgLTQ2LDYgKzQ4LDcgQEAKIGltcG9ydCBvcmcuanNvbi5KU09OT2JqZWN0Ow0KIGltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlOw0KIGltcG9ydCBvcmcub3NnaS5mcmFtZXdvcmsuQnVuZGxlQ29udGV4dDsNCitpbXBvcnQgb3JnLm9zZ2kuZnJhbWV3b3JrLkNvbnN0YW50czsNCiBpbXBvcnQgb3JnLm9zZ2kuc2VydmljZS5wYWNrYWdlYWRtaW4uRXhwb3J0ZWRQYWNrYWdlOw0KIGltcG9ydCBvcmcub3NnaS5zZXJ2aWNlLnBhY2thZ2VhZG1pbi5QYWNrYWdlQWRtaW47DQogDQpAQCAtODAsMTMgKzgzLDEzIEBACiAgICAgICAgIFRFTVBMQVRFID0gcmVhZFRlbXBsYXRlRmlsZSgiL3Jlcy9wbHVnaW4uaHRtbCIpOyAvLyROT04tTkxTLTEkDQogICAgIH0NCiANCi0gICAgDQorDQogICAgIHB1YmxpYyBTdHJpbmcgZ2V0Q2F0ZWdvcnkoKQ0KICAgICB7DQogICAgICAgICByZXR1cm4gQ0FURUdPUlk7DQogICAgIH0NCiANCi0gICAgDQorDQogICAgIC8qKg0KICAgICAgKiBAc2VlIG9yZy5hcGFjaGUuZmVsaXgud2ViY29uc29sZS5BYnN0cmFjdFdlYkNvbnNvbGVQbHVnaW4jcmVuZGVyQ29udGVudChIdHRwU2VydmxldFJlcXVlc3QsIEh0dHBTZXJ2bGV0UmVzcG9uc2UpDQogICAgICAqLw0KQEAgLTIwNSwxMSArMjA4LDYgQEAKICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICBFeHBvcnRlZFBhY2thZ2UgZXhwb3J0ZWRQYWNrYWdlID0gKEV4cG9ydGVkUGFja2FnZSkgcGFja2FnZUl0ZXIubmV4dCgpOw0KICAgICAgICAgICAgICAgICAgICAgZmluYWwgSlNPTk9iamVjdCBqc29uID0gdG9KU09OKGV4cG9ydGVkUGFja2FnZSk7DQotICAgICAgICAgICAgICAgICAgICBCdW5kbGVbXSBpbXBvcnRlcnMgPSBleHBvcnRlZFBhY2thZ2UuZ2V0SW1wb3J0aW5nQnVuZGxlcygpOw0KLSAgICAgICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGltcG9ydGVycyAhPSBudWxsICYmIGogPCBpbXBvcnRlcnMubGVuZ3RoOyBqKyspDQotICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAganNvbi5hcHBlbmQoImltcG9ydGVycyIsIHRvSlNPTihpbXBvcnRlcnNbal0sIG5ldyBKU09OT2JqZWN0KCkpKTsgLy8kTk9OLU5MUy0xJA0KLSAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLy8NCiAgICAgICAgICAgICAgICAgICAgIC5wdXQoIm5hbWUiLCBleHBvcnRlZFBhY2thZ2UuZ2V0TmFtZSgpKSAvLyROT04tTkxTLTEkDQogICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKCJlbnRyaWVzIiwganNvbik7IC8vJE5PTi1OTFMtMSQNCkBAIC0yMjcsMTIgKzIyNSwzOCBAQAogICAgICAgICByZXR1cm4ganNvbjsNCiAgICAgfQ0KIA0KKyAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBKU09OT2JqZWN0IHRvSlNPTihmaW5hbCBTdHJpbmcgcGtnTmFtZSwgZmluYWwgQnVuZGxlW10gaW1wb3J0ZXJzLCBmaW5hbCBKU09OT2JqZWN0IGpzb24pDQorICAgICAgICB0aHJvd3MgSlNPTkV4Y2VwdGlvbg0KKyAgICB7DQorICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGltcG9ydGVycy5sZW5ndGg7IGkrKykNCisgICAgICAgIHsNCisgICAgICAgICAgICBCdW5kbGUgYnVuZGxlID0gaW1wb3J0ZXJzW2ldOw0KKyAgICAgICAgICAgIGZpbmFsIEpTT05PYmplY3QgdXNpbmdKc29uID0gbmV3IEpTT05PYmplY3QoKTsNCisgICAgICAgICAgICB0b0pTT04oYnVuZGxlLCB1c2luZ0pzb24pOw0KKyAgICAgICAgICAgIGZpbmFsIFN0cmluZyBpcCA9IChTdHJpbmcpIGJ1bmRsZS5nZXRIZWFkZXJzKCkuZ2V0KENvbnN0YW50cy5JTVBPUlRfUEFDS0FHRSk7DQorICAgICAgICAgICAgZmluYWwgQ2xhdXNlW10gY2xhdXNlcyA9IFBhcnNlci5wYXJzZUhlYWRlcihpcCk7DQorICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBjbGF1c2VzLmxlbmd0aDsgaisrKQ0KKyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgICAgQ2xhdXNlIGNsYXVzZSA9IGNsYXVzZXNbal07DQorICAgICAgICAgICAgICAgIGlmIChwa2dOYW1lLmVxdWFscyhjbGF1c2UuZ2V0TmFtZSgpKSkNCisgICAgICAgICAgICAgICAgew0KKyAgICAgICAgICAgICAgICAgICAgdXNpbmdKc29uLnB1dCgidmVyIiwgY2xhdXNlLmdldEF0dHJpYnV0ZShDb25zdGFudHMuVkVSU0lPTl9BVFRSSUJVVEUpKTsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGpzb24uYXBwZW5kKCJpbXBvcnRlcnMiLCB1c2luZ0pzb24pOyAvLyROT04tTkxTLTEkDQorICAgICAgICB9DQorICAgICAgICByZXR1cm4ganNvbjsNCisgICAgfQ0KKw0KICAgICBwcml2YXRlIHN0YXRpYyBmaW5hbCBKU09OT2JqZWN0IHRvSlNPTihmaW5hbCBFeHBvcnRlZFBhY2thZ2UgcGtnKQ0KICAgICAgICAgdGhyb3dzIEpTT05FeGNlcHRpb24NCiAgICAgew0KICAgICAgICAgZmluYWwgSlNPTk9iamVjdCByZXQgPSBuZXcgSlNPTk9iamVjdCgpOw0KICAgICAgICAgcmV0LnB1dCgidmVyc2lvbiIsIHBrZy5nZXRWZXJzaW9uKCkpOyAvLyROT04tTkxTLTEkDQotICAgICAgICByZXR1cm4gdG9KU09OKHBrZy5nZXRFeHBvcnRpbmdCdW5kbGUoKSwgcmV0KTsNCisgICAgICAgIHRvSlNPTihwa2cuZ2V0RXhwb3J0aW5nQnVuZGxlKCksIHJldCk7DQorICAgICAgICB0b0pTT04ocGtnLmdldE5hbWUoKSwgcGtnLmdldEltcG9ydGluZ0J1bmRsZXMoKSwgcmV0KTsNCisgICAgICAgIHJldHVybiByZXQ7DQogICAgIH0NCiANCiAgICAgcHJpdmF0ZSBzdGF0aWMgZmluYWwgSlNPTk9iamVjdCBnZXRQYWNrYWdlSW5mbyhTdHJpbmcgcGFja2FnZU5hbWUsIFBhY2thZ2VBZG1pbiBwYSwNCkBAIC0zMDQsNyArMzI4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQocGFydCk7DQogICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0gDQorICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICByZXN1bHQuYWRkKHBhcnQpOw0KZGlmZiAtLWdpdCBhL3dlYmNvbnNvbGUtcGx1Z2lucy9wYWNrYWdlYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL09TR0ktSU5GL2wxMG4vYnVuZGxlLnByb3BlcnRpZXMgYi93ZWJjb25zb2xlLXBsdWdpbnMvcGFja2FnZWFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9PU0dJLUlORi9sMTBuL2J1bmRsZS5wcm9wZXJ0aWVzCmluZGV4IDkxYzQxNjMuLmQ1NTVhYzUgMTAwNjQ0Ci0tLSBhL3dlYmNvbnNvbGUtcGx1Z2lucy9wYWNrYWdlYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL09TR0ktSU5GL2wxMG4vYnVuZGxlLnByb3BlcnRpZXMKKysrIGIvd2ViY29uc29sZS1wbHVnaW5zL3BhY2thZ2VhZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvT1NHSS1JTkYvbDEwbi9idW5kbGUucHJvcGVydGllcwpAQCAtMzYsNiArMzYsNyBAQAogaGVhZGVyLmV4cG9ydGluZy5idW5kbGU9RXhwb3J0ZWQgYnkKIGhlYWRlci5tYXZlbi5kZXBzPU1hdmVuIERlcGVuZGVuY3kKIG5vLmV4cG9ydGVycy5mb3VuZD1ObyBleHBvcnRpbmcgYnVuZGxlKHMpIGZvdW5kCituby51c2VzLmZvdW5kPU5vIGltcG9ydGluZyBidW5kbGUocykgZm91bmQKIG5vLm1hdmVuLmZvdW5kPU5vIG1hdmVuIGluZm9ybWF0aW9uIGF2YWlsYWJsZQogc3RhdHVzLmluaXRpYWw9UGxlYXNlIGVudGVyIGEgbGlzdCBvZiBwYWNrYWdlIG9yIGNsYXNzIG5hbWVzIGFuZCBjbGljayB0aGUgZmluZCBidXR0b24KIHN0YXR1cy5maW5kPXswfSByZXN1bHQocykgZm91bmQKZGlmZiAtLWdpdCBhL3dlYmNvbnNvbGUtcGx1Z2lucy9wYWNrYWdlYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL09TR0ktSU5GL2wxMG4vYnVuZGxlX2RlLnByb3BlcnRpZXMgYi93ZWJjb25zb2xlLXBsdWdpbnMvcGFja2FnZWFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9PU0dJLUlORi9sMTBuL2J1bmRsZV9kZS5wcm9wZXJ0aWVzCmluZGV4IGI4MWU1NTQuLjQ1MzJjNzMgMTAwNjQ0Ci0tLSBhL3dlYmNvbnNvbGUtcGx1Z2lucy9wYWNrYWdlYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL09TR0ktSU5GL2wxMG4vYnVuZGxlX2RlLnByb3BlcnRpZXMKKysrIGIvd2ViY29uc29sZS1wbHVnaW5zL3BhY2thZ2VhZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvT1NHSS1JTkYvbDEwbi9idW5kbGVfZGUucHJvcGVydGllcwpAQCAtMSw0ICsxLDQgQEAKLe+7vyNMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUNCisjTGljZW5zZWQgdG8gdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChBU0YpIHVuZGVyIG9uZSBvciBtb3JlDQogIyBjb250cmlidXRvciBsaWNlbnNlIGFncmVlbWVudHMuICBTZWUgdGhlIE5PVElDRSBmaWxlIGRpc3RyaWJ1dGVkIHdpdGgNCiAjIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4NCiAjIFRoZSBBU0YgbGljZW5zZXMgdGhpcyBmaWxlIHRvIFlvdSB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wDQpAQCAtMzQsOSArMzQsMTAgQEAKIGhlYWRlci5wYWNrYWdlLm5hbWU9UGFrZXRlDQogaGVhZGVyLnBhY2thZ2UudmVyPVZlcnNpb24NCiBoZWFkZXIuZXhwb3J0aW5nLmJ1bmRsZT1FeHBvcnRpZXJ0IHZvbg0KLWhlYWRlci5tYXZlbi5kZXBzPU1hdmVuIEFiaMOkbmdpZ2tlaXQNCitoZWFkZXIubWF2ZW4uZGVwcz1NYXZlbiBBYmjkbmdpZ2tlaXQNCiBuby5leHBvcnRlcnMuZm91bmQ9S2VpbmUgZXhwb3J0aWVyZW5kZW4gQnVuZGxlKHMpIGdlZnVuZGVuDQotbm8ubWF2ZW4uZm91bmQ9S2VpbmUgTWF2ZW4tSW5mb3JtYXRpb25lbiB2ZXJmw7xnYmFyDQorbm8udXNlcy5mb3VuZD1LZWluZSBpbXBvcnRpZXJlbmRlbiBCdW5kbGUocykgZ2VmdW5kZW4NCituby5tYXZlbi5mb3VuZD1LZWluZSBNYXZlbi1JbmZvcm1hdGlvbmVuIHZlcmb8Z2Jhcg0KIHN0YXR1cy5pbml0aWFsPUJpdHRlIGdlYmVuIFNpZSBlaW5lIExpc3RlIHZvbiBQYWtldC0gb2RlciBLbGFzc2VuLU5hbWVuIHVuZCBrbGlja2VuIFNpZSBhdWYgZGllIFN1Y2hlLVRhc3RlLg0KIHN0YXR1cy5maW5kPXswfSBFcmdlYm5pcyhzZSkgZ2VmdW5kZW4NCiANCmRpZmYgLS1naXQgYS93ZWJjb25zb2xlLXBsdWdpbnMvcGFja2FnZWFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9yZXMvcGx1Z2luLmh0bWwgYi93ZWJjb25zb2xlLXBsdWdpbnMvcGFja2FnZWFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9yZXMvcGx1Z2luLmh0bWwKaW5kZXggZDRmYmFlMy4uOTE4YzZmMSAxMDA2NDQKLS0tIGEvd2ViY29uc29sZS1wbHVnaW5zL3BhY2thZ2VhZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvcmVzL3BsdWdpbi5odG1sCisrKyBiL3dlYmNvbnNvbGUtcGx1Z2lucy9wYWNrYWdlYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL3Jlcy9wbHVnaW4uaHRtbApAQCAtMjgsNiArMjgsNyBAQAogCQkJPHRoPiR7aGVhZGVyLnBhY2thZ2UubmFtZX08L3RoPgogCQkJPHRoPiR7aGVhZGVyLnBhY2thZ2UudmVyfTwvdGg+CiAJCQk8dGg+JHtoZWFkZXIuZXhwb3J0aW5nLmJ1bmRsZX08L3RoPgorCQkJPHRoPiR7aGVhZGVyLmltcG9ydGluZy5idW5kbGV9PC90aD4KIAkJCTx0aD4ke2hlYWRlci5tYXZlbi5kZXBzfTwvdGg+CiAJCTwvdHI+CiAJPC90aGVhZD4KQEAgLTM2LDYgKzM3LDcgQEAKIAkJCTx0ZCBjbGFzcz0icGtnIj4mbmJzcDs8L3RkPgogCQkJPHRkIGNsYXNzPSJ2ZXIiPi08L3RkPgogCQkJPHRkIGNsYXNzPSJibmQiPiR7bm8uZXhwb3J0ZXJzLmZvdW5kfTwvdGQ+CisJCQk8dGQgY2xhc3M9InVzZSI+JHtuby51c2VzLmZvdW5kfTwvdGQ+CiAJCQk8dGQgY2xhc3M9Im12biI+JHtuby5tYXZlbi5mb3VuZH08L3RkPgogCQk8L3RyPgogCTwvdGJvZHk+CmRpZmYgLS1naXQgYS93ZWJjb25zb2xlLXBsdWdpbnMvcGFja2FnZWFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9yZXMvcGx1Z2luLmpzIGIvd2ViY29uc29sZS1wbHVnaW5zL3BhY2thZ2VhZG1pbi9zcmMvbWFpbi9yZXNvdXJjZXMvcmVzL3BsdWdpbi5qcwppbmRleCA4NDY4MTAzLi40MzU4OWVlIDEwMDY0NAotLS0gYS93ZWJjb25zb2xlLXBsdWdpbnMvcGFja2FnZWFkbWluL3NyYy9tYWluL3Jlc291cmNlcy9yZXMvcGx1Z2luLmpzCisrKyBiL3dlYmNvbnNvbGUtcGx1Z2lucy9wYWNrYWdlYWRtaW4vc3JjL21haW4vcmVzb3VyY2VzL3Jlcy9wbHVnaW4uanMKQEAgLTI1LDcgKzI1LDI2IEBACiB2YXIgZHVwc1RhYmxlVGVtcGxhdGUgPSBmYWxzZTsNCiB2YXIgc3RhdGxpbmUgPSBmYWxzZTsNCiANCi1mdW5jdGlvbiBsaW5rQnVuZGxlKGJuZCkgeyByZXR1cm4gJzxhIGhyZWY9InswfS9idW5kbGVzL3sxfSI+ezJ9ICh7M30pPC9hPicubXNnRm9ybWF0KGFwcFJvb3QsIGJuZC5iaWQsIGJuZC5ic24sIGJuZC5iaWQpIH0NCitmdW5jdGlvbiBsaW5rQnVuZGxlKGJuZCkgeyByZXR1cm4gJzxhIGhyZWY9InswfS9idW5kbGVzL3sxfSI+ezJ9ICh7M30pPC9hPicubXNnRm9ybWF0KGFwcFJvb3QsIGJuZC5iaWQsIGJuZC5ic24sIGJuZC5iaWQpIH0KK2Z1bmN0aW9uIHVzZXModXNlcykgew0KKyAgICB2YXIgcmVzdWx0ID0gIiI7IA0KKyAgICBpZiAodXNlcykgew0KKyAgICAgICAgcmVzdWwgPSAiPHRhYmxlPiI7DQorICAgICAgICBmb3IodmFyIGkgaW4gdXNlcykgew0KKyAgICAgICAgICAgIHJlc3VsdCArPSAiPHRyPjx0ZD4iOw0KKyAgICAgICAgICAgIHJlc3VsdCArPSBsaW5rQnVuZGxlKHVzZXNbaV0pOw0KKyAgICAgICAgICAgIHJlc3VsdCArPSAiPC90ZD48dGQ+IjsNCisgICAgICAgICAgICBpZiAodXNlc1tpXS52ZXIpIHsNCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHVzZXNbaV0udmVyOw0KKyAgICAgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiJm1kYXNoOyI7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIHJlc3VsdCArPSAiPC90ZD48L3RyPiI7DQorICAgICAgICB9DQorICAgICAgICByZXN1bHQgKz0gIjwvdGFibGU+IjsNCisgICAgfQ0KKyAgICByZXR1cm4gcmVzdWx0Ow0KK30NCiANCiAkKGZ1bmN0aW9uKCkgew0KIAlmaW5kRmllbGQgPSAkKCcjZmluZEZpZWxkJyk7DQpAQCAtNjMsNyArODIsOCBAQAogCQkJCQkJdmFyIHRyID0gZmluZFRhYmxlVGVtcGxhdGUuY2xvbmUoKQ0KIAkJCQkJCQkuZmluZCgndGQucGtnJykudGV4dChwa2cubmFtZSkuZW5kKCkNCiAJCQkJCQkJLmZpbmQoJ3RkLnZlcicpLnRleHQoZXhwLnZlcnNpb24pLmVuZCgpDQotCQkJCQkJCS5maW5kKCd0ZC5ibmQnKS5odG1sKGxpbmtCdW5kbGUoZXhwKSkuZW5kKCkNCisJCQkJCQkJLmZpbmQoJ3RkLmJuZCcpLmh0bWwobGlua0J1bmRsZShleHApKS5lbmQoKQorCQkJCQkJCS5maW5kKCd0ZC51c2UnKS5odG1sKHVzZXMoZXhwLmltcG9ydGVycykpLmVuZCgpDQogCQkJCQkJCS5hcHBlbmRUbyhmaW5kVGFibGVCb2R5KTsNCiAJCQkJCQlpZiAocmVzcG9uc2UubWF2ZW4gJiYgcmVzcG9uc2UubWF2ZW5bZXhwLmJpZF0pIHsNCiAJCQkJCQkJdmFyIG12biA9IHJlc3BvbnNlLm1hdmVuW2V4cC5iaWRdOw0KQEAgLTEwMCw4ICsxMjAsNyBAQAogCQkJCQkJLmZpbmQoJ3RkLnZlcicpLnRleHQoZXhwLnZlcnNpb24pLmVuZCgpDQogCQkJCQkJLmZpbmQoJ3RkLmV4cCcpLmh0bWwobGlua0J1bmRsZShleHApKS5lbmQoKTsNCiAJCQkJCWlmIChleHAuaW1wb3J0ZXJzKSB7DQotCQkJCQkJdmFyIHR4dCA9ICcnOyBmb3IodmFyIGogaW4gZXhwLmltcG9ydGVycykgdHh0ICs9IGxpbmtCdW5kbGUoZXhwLmltcG9ydGVyc1tqXSkgKyAnPGJyLz4nOw0KLQkJCQkJCXRkLmZpbmQoJ3RkLmltcCcpLmh0bWwoIHR4dCApOw0KKwkJCQkJCXRkLmZpbmQoJ3RkLmltcCcpLmh0bWwodXNlcyhleHAuaW1wb3J0ZXJzKSk7DQogCQkJCQl9DQogCQkJCQlpZiAoaT09MCkgew0KIAkJCQkJCXRkLmZpbmQoJ3RkLnBrZycpLmF0dHIoJ3Jvd3NwYW4nLCBwa2cuZW50cmllcy5sZW5ndGgpOw0K