ZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfeG1scnBjLnB5IGIvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKaW5kZXggMWYwZWFjNS4uZWIzOWQyNyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF94bWxycGMucHkKQEAgLTcsNiArNyw5IEBACiBpbXBvcnQgU2ltcGxlWE1MUlBDU2VydmVyCiBpbXBvcnQgdGhyZWFkaW5nCiBpbXBvcnQgbWltZXRvb2xzCitpbXBvcnQgaHR0cGxpYgoraW1wb3J0IHNvY2tldAoraW1wb3J0IG9zCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogCiB0cnk6CkBAIC0yOTYsOSArMjk5LDE2IEBACiBkZWYgaHR0cF9zZXJ2ZXIoZXZ0LCBudW1yZXF1ZXN0cyk6CiAgICAgY2xhc3MgVGVzdEluc3RhbmNlQ2xhc3M6CiAgICAgICAgIGRlZiBkaXYoc2VsZiwgeCwgeSk6Ci0gICAgICAgICAgICAnJydUaGlzIGlzIHRoZSBkaXYgZnVuY3Rpb24nJycKICAgICAgICAgICAgIHJldHVybiB4IC8vIHkKIAorICAgICAgICBkZWYgX21ldGhvZEhlbHAoc2VsZiwgbmFtZSk6CisgICAgICAgICAgICBpZiBuYW1lID09ICdkaXYnOgorICAgICAgICAgICAgICAgIHJldHVybiAnVGhpcyBpcyB0aGUgZGl2IGZ1bmN0aW9uJworCisgICAgZGVmIG15X2Z1bmN0aW9uKCk6CisgICAgICAgICcnJ1RoaXMgaXMgbXkgZnVuY3Rpb24nJycKKyAgICAgICAgcmV0dXJuIFRydWUKKwogICAgIHRyeToKICAgICAgICAgc2VydiA9IFNpbXBsZVhNTFJQQ1NlcnZlci5TaW1wbGVYTUxSUENTZXJ2ZXIoKCJsb2NhbGhvc3QiLCAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ1JlcXVlc3RzPUZhbHNlLCBiaW5kX2FuZF9hY3RpdmF0ZT1GYWxzZSkKQEAgLTMxMSw2ICszMjEsNyBAQAogICAgICAgICBzZXJ2LnJlZ2lzdGVyX211bHRpY2FsbF9mdW5jdGlvbnMoKQogICAgICAgICBzZXJ2LnJlZ2lzdGVyX2Z1bmN0aW9uKHBvdykKICAgICAgICAgc2Vydi5yZWdpc3Rlcl9mdW5jdGlvbihsYW1iZGEgeCx5OiB4K3ksICdhZGQnKQorICAgICAgICBzZXJ2LnJlZ2lzdGVyX2Z1bmN0aW9uKG15X2Z1bmN0aW9uKQogICAgICAgICBzZXJ2LnJlZ2lzdGVyX2luc3RhbmNlKFRlc3RJbnN0YW5jZUNsYXNzKCkpCiAKICAgICAgICAgIyBoYW5kbGUgdXAgdG8gJ251bXJlcXVlc3RzJyByZXF1ZXN0cwpAQCAtMzI1LDcgKzMzNiw2IEBACiAgICAgICAgIFBPUlQgPSBOb25lCiAgICAgICAgIGV2dC5zZXQoKQogCi0KIGRlZiBpc191bmF2YWlsYWJsZV9leGNlcHRpb24oZSk6CiAgICAgJycnUmV0dXJucyBUcnVlIGlmIHRoZSBnaXZlbiBQcm90b2NvbEVycm9yIGlzIHRoZSBwcm9kdWN0IG9mIGEgc2VydmVyLXNpZGUKICAgICAgICBleGNlcHRpb24gY2F1c2VkIGJ5IHRoZSAndGVtcG9yYXJpbHkgdW5hdmFpbGFibGUnIHJlc3BvbnNlIHNvbWV0aW1lcwpAQCAtMzgyLDEyICszOTIsMjQgQEAKICAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVzXG4lcyIgJSAoZSwgZS5oZWFkZXJzKSkKIAorICAgIGRlZiB0ZXN0XzQwNChzZWxmKToKKyAgICAgICAgIyBzZW5kIFBPU1Qgd2l0aCBodHRwbGliLCBpdCBzaG91bGQgcmV0dXJuIDQwNCBoZWFkZXIgYW5kCisgICAgICAgICMgJ05vdCBGb3VuZCcgbWVzc2FnZS4KKyAgICAgICAgY29ubiA9IGh0dHBsaWIuSFRUUENvbm5lY3Rpb24oJ2xvY2FsaG9zdCcsIFBPUlQpCisgICAgICAgIGNvbm4ucmVxdWVzdCgnUE9TVCcsICcvdGhpcy1pcy1ub3QtdmFsaWQnKQorICAgICAgICByZXNwb25zZSA9IGNvbm4uZ2V0cmVzcG9uc2UoKQorICAgICAgICBjb25uLmNsb3NlKCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnN0YXR1cywgNDA0KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3BvbnNlLnJlYXNvbiwgJ05vdCBGb3VuZCcpCisKICAgICBkZWYgdGVzdF9pbnRyb3NwZWN0aW9uMShzZWxmKToKICAgICAgICAgdHJ5OgogICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eSgnaHR0cDovL2xvY2FsaG9zdDolZCcgJSBQT1JUKQogICAgICAgICAgICAgbWV0aCA9IHAuc3lzdGVtLmxpc3RNZXRob2RzKCkKLSAgICAgICAgICAgIGV4cGVjdGVkX21ldGhvZHMgPSBzZXQoWydwb3cnLCAnZGl2JywgJ2FkZCcsICdzeXN0ZW0ubGlzdE1ldGhvZHMnLAotICAgICAgICAgICAgICAgICdzeXN0ZW0ubWV0aG9kSGVscCcsICdzeXN0ZW0ubWV0aG9kU2lnbmF0dXJlJywgJ3N5c3RlbS5tdWx0aWNhbGwnXSkKKyAgICAgICAgICAgIGV4cGVjdGVkX21ldGhvZHMgPSBzZXQoWydwb3cnLCAnZGl2JywgJ215X2Z1bmN0aW9uJywgJ2FkZCcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3lzdGVtLmxpc3RNZXRob2RzJywgJ3N5c3RlbS5tZXRob2RIZWxwJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzeXN0ZW0ubWV0aG9kU2lnbmF0dXJlJywgJ3N5c3RlbS5tdWx0aWNhbGwnXSkKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoc2V0KG1ldGgpLCBleHBlY3RlZF9tZXRob2RzKQogICAgICAgICBleGNlcHQgeG1scnBjbGliLlByb3RvY29sRXJyb3IsIGU6CiAgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycwpAQCAtMzk3LDYgKzQxOSw3IEBACiAKICAgICBkZWYgdGVzdF9pbnRyb3NwZWN0aW9uMihzZWxmKToKICAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyB0ZXN0IF9tZXRob2RIZWxwKCkKICAgICAgICAgICAgIHAgPSB4bWxycGNsaWIuU2VydmVyUHJveHkoJ2h0dHA6Ly9sb2NhbGhvc3Q6JWQnICUgUE9SVCkKICAgICAgICAgICAgIGRpdmhlbHAgPSBwLnN5c3RlbS5tZXRob2RIZWxwKCdkaXYnKQogICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChkaXZoZWxwLCAnVGhpcyBpcyB0aGUgZGl2IGZ1bmN0aW9uJykKQEAgLTQwNyw2ICs0MzAsMTggQEAKICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVzXG4lcyIgJSAoZSwgZS5oZWFkZXJzKSkKIAogICAgIGRlZiB0ZXN0X2ludHJvc3BlY3Rpb24zKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICAjIHRlc3QgbmF0aXZlIGRvYworICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eSgnaHR0cDovL2xvY2FsaG9zdDolZCcgJSBQT1JUKQorICAgICAgICAgICAgbXlmdW5jdGlvbiA9IHAuc3lzdGVtLm1ldGhvZEhlbHAoJ215X2Z1bmN0aW9uJykKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobXlmdW5jdGlvbiwgJ1RoaXMgaXMgbXkgZnVuY3Rpb24nKQorICAgICAgICBleGNlcHQgeG1scnBjbGliLlByb3RvY29sRXJyb3IsIGU6CisgICAgICAgICAgICAjIGlnbm9yZSBmYWlsdXJlcyBkdWUgdG8gbm9uLWJsb2NraW5nIHNvY2tldCAndW5hdmFpbGFibGUnIGVycm9ycworICAgICAgICAgICAgaWYgbm90IGlzX3VuYXZhaWxhYmxlX2V4Y2VwdGlvbihlKToKKyAgICAgICAgICAgICAgICAjIHByb3RvY29sIGVycm9yOyBwcm92aWRlIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gaW4gdGVzdCBvdXRwdXQKKyAgICAgICAgICAgICAgICBzZWxmLmZhaWwoIiVzXG4lcyIgJSAoZSwgZS5oZWFkZXJzKSkKKworICAgIGRlZiB0ZXN0X2ludHJvc3BlY3Rpb240KHNlbGYpOgogICAgICAgICAjIHRoZSBTaW1wbGVYTUxSUENTZXJ2ZXIgZG9lc24ndCBzdXBwb3J0IHNpZ25hdHVyZXMsIGJ1dAogICAgICAgICAjIGF0IGxlYXN0IGNoZWNrIHRoYXQgd2UgY2FuIHRyeSBtYWtpbmcgdGhlIGNhbGwKICAgICAgICAgdHJ5OgpAQCAtNDM2LDYgKzQ3MSwzNCBAQAogICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dAogICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiJXNcbiVzIiAlIChlLCBlLmhlYWRlcnMpKQogCisgICAgZGVmIHRlc3Rfbm9uX2V4aXN0aW5nX211bHRpY2FsbChzZWxmKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgcCA9IHhtbHJwY2xpYi5TZXJ2ZXJQcm94eSgnaHR0cDovL2xvY2FsaG9zdDolZCcgJSBQT1JUKQorICAgICAgICAgICAgbXVsdGljYWxsID0geG1scnBjbGliLk11bHRpQ2FsbChwKQorICAgICAgICAgICAgbXVsdGljYWxsLnRoaXNfaXNfbm90X2V4aXN0cygpCisgICAgICAgICAgICByZXN1bHQgPSBtdWx0aWNhbGwoKQorCisgICAgICAgICAgICAjIHJlc3VsdC5yZXN1bHRzIGNvbnRhaW5zOworICAgICAgICAgICAgIyBbeydmYXVsdENvZGUnOiAxLCAnZmF1bHRTdHJpbmcnOiAnPHR5cGUgXCdleGNlcHRpb25zLkV4Y2VwdGlvblwnPjonCisgICAgICAgICAgICAjICAgJ21ldGhvZCAidGhpc19pc19ub3RfZXhpc3RzIiBpcyBub3Qgc3VwcG9ydGVkJz59XQorCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlc3VsdC5yZXN1bHRzWzBdWydmYXVsdENvZGUnXSwgMSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwocmVzdWx0LnJlc3VsdHNbMF1bJ2ZhdWx0U3RyaW5nJ10sCisgICAgICAgICAgICAgICAgJzx0eXBlIFwnZXhjZXB0aW9ucy5FeGNlcHRpb25cJz46bWV0aG9kICJ0aGlzX2lzX25vdF9leGlzdHMiICcKKyAgICAgICAgICAgICAgICAnaXMgbm90IHN1cHBvcnRlZCcpCisgICAgICAgIGV4Y2VwdCB4bWxycGNsaWIuUHJvdG9jb2xFcnJvciwgZToKKyAgICAgICAgICAgICMgaWdub3JlIGZhaWx1cmVzIGR1ZSB0byBub24tYmxvY2tpbmcgc29ja2V0ICd1bmF2YWlsYWJsZScgZXJyb3JzCisgICAgICAgICAgICBpZiBub3QgaXNfdW5hdmFpbGFibGVfZXhjZXB0aW9uKGUpOgorICAgICAgICAgICAgICAgICMgcHJvdG9jb2wgZXJyb3I7IHByb3ZpZGUgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBpbiB0ZXN0IG91dHB1dAorICAgICAgICAgICAgICAgIHNlbGYuZmFpbCgiJXNcbiVzIiAlIChlLCBlLmhlYWRlcnMpKQorCisgICAgZGVmIHRlc3RfZG90dGVkX2F0dHJpYnV0ZShzZWxmKToKKyAgICAgICAgIyB0aGlzIHdpbGwgcmFpc2UgQXR0aXJlYnV0ZUVycm9yIGJlY2F1c2UgY29kZSBkb24ndCB3YW50IHVzIHRvIHVzZQorICAgICAgICAjIHByaXZhdGUgbWV0aG9kcworICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhBdHRyaWJ1dGVFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU2ltcGxlWE1MUlBDU2VydmVyLnJlc29sdmVfZG90dGVkX2F0dHJpYnV0ZSwgc3RyLCAnX19hZGQnKQorCisgICAgICAgIHNlbGYuYXNzZXJ0XyhTaW1wbGVYTUxSUENTZXJ2ZXIucmVzb2x2ZV9kb3R0ZWRfYXR0cmlidXRlKHN0ciwgJ3RpdGxlJykpCiAKICMgVGhpcyBpcyBhIGNvbnRyaXZlZCB3YXkgdG8gbWFrZSBhIGZhaWx1cmUgb2NjdXIgb24gdGhlIHNlcnZlciBzaWRlCiAjIGluIG9yZGVyIHRvIHRlc3QgdGhlIF9zZW5kX3RyYWNlYmFja19oZWFkZXIgZmxhZyBvbiB0aGUgc2VydmVyCkBAIC01MjUsNiArNTg4LDcwIEBACiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLmZhaWwoJ1Byb3RvY29sRXJyb3Igbm90IHJhaXNlZCcpCiAKK2NsYXNzIENHSUhhbmRsZXJUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNnaSA9IFNpbXBsZVhNTFJQQ1NlcnZlci5DR0lYTUxSUENSZXF1ZXN0SGFuZGxlcigpCisKKyAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgIHNlbGYuY2dpID0gTm9uZQorCisgICAgZGVmIHRlc3RfY2dpX2dldChzZWxmKToKKyAgICAgICAgb3MuZW52aXJvblsnUkVRVUVTVF9NRVRIT0QnXSA9ICdHRVQnCisgICAgICAgICMgaWYgdGhlIG1ldGhvZCBpcyBHRVQgYW5kIG5vIHJlcXVlc3RfdGV4dCBpcyBnaXZlbiwgaXQgcnVucyBoYW5kbGVfZ2V0CisgICAgICAgICMgZ2V0IHN5c291dCBvdXRwdXQKKyAgICAgICAgdG1wID0gc3lzLnN0ZG91dAorICAgICAgICBzeXMuc3Rkb3V0ID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAidyIpCisgICAgICAgIHNlbGYuY2dpLmhhbmRsZV9yZXF1ZXN0KCkKKyAgICAgICAgc3lzLnN0ZG91dC5jbG9zZSgpCisgICAgICAgIHN5cy5zdGRvdXQgPSB0bXAKKworICAgICAgICAjIHBhcnNlIFN0YXR1cyBoZWFkZXIKKyAgICAgICAgaGFuZGxlID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAiciIpLnJlYWQoKQorICAgICAgICBzdGF0dXMgPSBoYW5kbGUuc3BsaXQoKVsxXQorICAgICAgICBtZXNzYWdlID0gJyAnLmpvaW4oaGFuZGxlLnNwbGl0KClbMjo0XSkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHN0YXR1cywgJzQwMCcpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwobWVzc2FnZSwgJ0JhZCBSZXF1ZXN0JykKKworICAgICAgICBvcy5yZW1vdmUodGVzdF9zdXBwb3J0LlRFU1RGTikKKyAgICAgICAgb3MuZW52aXJvblsnUkVRVUVTVF9NRVRIT0QnXSA9ICcnCisKKyAgICBkZWYgdGVzdF9jZ2lfeG1scnBjX3Jlc3BvbnNlKHNlbGYpOgorICAgICAgICBkYXRhID0gIiIiPD94bWwgdmVyc2lvbj0nMS4wJz8+Cis8bWV0aG9kQ2FsbD4KKyAgICA8bWV0aG9kTmFtZT50ZXN0X21ldGhvZDwvbWV0aG9kTmFtZT4KKyAgICA8cGFyYW1zPgorICAgICAgICA8cGFyYW0+CisgICAgICAgICAgICA8dmFsdWU+PHN0cmluZz5mb288L3N0cmluZz48L3ZhbHVlPgorICAgICAgICA8L3BhcmFtPgorICAgICAgICA8cGFyYW0+CisgICAgICAgICAgICA8dmFsdWU+PHN0cmluZz5iYXI8L3N0cmluZz48L3ZhbHVlPgorICAgICAgICA8L3BhcmFtPgorICAgICA8L3BhcmFtcz4KKzwvbWV0aG9kQ2FsbD4KKyIiIgorICAgICAgICBvcGVuKCJ4bWxkYXRhLnR4dCIsICJ3Iikud3JpdGUoZGF0YSkKKyAgICAgICAgdG1wMSA9IHN5cy5zdGRpbgorICAgICAgICB0bXAyID0gc3lzLnN0ZG91dAorCisgICAgICAgIHN5cy5zdGRpbiA9IG9wZW4oInhtbGRhdGEudHh0IiwgInIiKQorICAgICAgICBzeXMuc3Rkb3V0ID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAidyIpCisKKyAgICAgICAgc2VsZi5jZ2kuaGFuZGxlX3JlcXVlc3QoKQorCisgICAgICAgIHN5cy5zdGRpbi5jbG9zZSgpCisgICAgICAgIHN5cy5zdGRvdXQuY2xvc2UoKQorICAgICAgICBzeXMuc3RkaW4gPSB0bXAxCisgICAgICAgIHN5cy5zdGRvdXQgPSB0bXAyCisKKyAgICAgICAgIyB3aWxsIHJlc3BvbmQgZXhjZXB0aW9uLCBpZiBzbywgb3VyIGdvYWwgaXMgYWNoaWV2ZWQgOykKKyAgICAgICAgaGFuZGxlID0gb3Blbih0ZXN0X3N1cHBvcnQuVEVTVEZOLCAiciIpLnJlYWQoKQorCisgICAgICAgICMgc3RhcnQgd2l0aCA0NHRoIGNoYXIgc28gYXMgbm90IHRvIGdldCBodHRwIGhlYWRlciwgd2UganVzdCBuZWVkIG9ubHkgeG1sCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKHhtbHJwY2xpYi5GYXVsdCwgeG1scnBjbGliLmxvYWRzLCBoYW5kbGVbNDQ6XSkKKworICAgICAgICBvcy5yZW1vdmUoInhtbGRhdGEudHh0IikKKyAgICAgICAgb3MucmVtb3ZlKHRlc3Rfc3VwcG9ydC5URVNURk4pCiAKIGRlZiB0ZXN0X21haW4oKToKICAgICB4bWxycGNfdGVzdHMgPSBbWE1MUlBDVGVzdENhc2UsIEhlbHBlclRlc3RDYXNlLCBEYXRlVGltZVRlc3RDYXNlLApAQCAtNTM3LDYgKzY2NCw3IEBACiAgICAgaWYgc3lzLnBsYXRmb3JtICE9ICd3aW4zMic6CiAgICAgICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoU2ltcGxlU2VydmVyVGVzdENhc2UpCiAgICAgICAgIHhtbHJwY190ZXN0cy5hcHBlbmQoRmFpbGluZ1NlcnZlclRlc3RDYXNlKQorICAgICAgICB4bWxycGNfdGVzdHMuYXBwZW5kKENHSUhhbmRsZXJUZXN0Q2FzZSkKIAogICAgIHRlc3Rfc3VwcG9ydC5ydW5fdW5pdHRlc3QoKnhtbHJwY190ZXN0cykKIApkaWZmIC0tZ2l0IGEvTWlzYy9BQ0tTIGIvTWlzYy9BQ0tTCmluZGV4IGEzMDQ1ZjAuLmRhMTZhMTMgMTAwNjQ0Ci0tLSBhL01pc2MvQUNLUworKysgYi9NaXNjL0FDS1MKQEAgLTE4OSw2ICsxODksNyBAQAogSmVmZiBFcGxlcgogVG9tIEVwcGVybHkKIFN0b2ZmZWwgRXJhc211cworVHVya2F5IEVyZW4KIEr8cmdlbiBBLiBFcmhhcmQKIE1pY2hhZWwgRXJuc3QKIEJlbiBFc2NvdG8K