ZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvc3VwcG9ydC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvc3VwcG9ydC5weQppbmRleCA0NzVjZWVlLi42ZGZjODJjIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3N1cHBvcnQucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy9zdXBwb3J0LnB5CkBAIC0xLDUgKzEsNSBAQAogIiIiU3VwcG9ydCBjb2RlIGZvciBkaXN0dXRpbHMgdGVzdCBjYXNlcy4iIiIKLQoraW1wb3J0IG9zCiBpbXBvcnQgc2h1dGlsCiBpbXBvcnQgdGVtcGZpbGUKIApAQCAtMzEsNyArMzEsNyBAQAogICAgICAgICBzdXBlcihUZW1wZGlyTWFuYWdlciwgc2VsZikudGVhckRvd24oKQogICAgICAgICB3aGlsZSBzZWxmLnRlbXBkaXJzOgogICAgICAgICAgICAgZCA9IHNlbGYudGVtcGRpcnMucG9wKCkKLSAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZCkKKyAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZCwgb3MubmFtZSBpbiAoJ250JywgJ2N5Z3dpbicpKQogCiAgICAgZGVmIG1rZHRlbXAoc2VsZik6CiAgICAgICAgICIiIkNyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhhdCB3aWxsIGJlIGNsZWFuZWQgdXAuCmRpZmYgLS1naXQgYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfZXh0LnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2J1aWxkX2V4dC5weQppbmRleCAzYzdkMjI4Li5hMzg1NThiIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfYnVpbGRfZXh0LnB5CisrKyBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9idWlsZF9leHQucHkKQEAgLTcsNiArNyw3IEBACiBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBFeHRlbnNpb24sIERpc3RyaWJ1dGlvbgogZnJvbSBkaXN0dXRpbHMuY29tbWFuZC5idWlsZF9leHQgaW1wb3J0IGJ1aWxkX2V4dAogZnJvbSBkaXN0dXRpbHMgaW1wb3J0IHN5c2NvbmZpZworZnJvbSBkaXN0dXRpbHMudGVzdHMgaW1wb3J0IHN1cHBvcnQKIAogaW1wb3J0IHVuaXR0ZXN0CiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydApAQCAtMTksMTEgKzIwLDEyIEBACiAgICAgc3JjZGlyID0gc3lzY29uZmlnLmdldF9jb25maWdfdmFyKCdzcmNkaXInKQogICAgIHJldHVybiBvcy5wYXRoLmpvaW4oc3JjZGlyLCAnTW9kdWxlcycsICd4eG1vZHVsZS5jJykKIAotY2xhc3MgQnVpbGRFeHRUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBCdWlsZEV4dFRlc3RDYXNlKHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsIHVuaXR0ZXN0LlRlc3RDYXNlKToKICAgICBkZWYgc2V0VXAoc2VsZik6CiAgICAgICAgICMgQ3JlYXRlIGEgc2ltcGxlIHRlc3QgZW52aXJvbm1lbnQKICAgICAgICAgIyBOb3RlIHRoYXQgd2UncmUgbWFraW5nIGNoYW5nZXMgdG8gc3lzLnBhdGgKLSAgICAgICAgc2VsZi50bXBfZGlyID0gdGVtcGZpbGUubWtkdGVtcChwcmVmaXg9InB5dGhvbnRlc3RfIikKKyAgICAgICAgc3VwcG9ydC5UZW1wZGlyTWFuYWdlci5zZXRVcChzZWxmKQorICAgICAgICBzZWxmLnRtcF9kaXIgPSBzZWxmLm1rZHRlbXAoKQogICAgICAgICBzZWxmLnN5c19wYXRoID0gc3lzLnBhdGhbOl0KICAgICAgICAgc3lzLnBhdGguYXBwZW5kKHNlbGYudG1wX2RpcikKICAgICAgICAgc2h1dGlsLmNvcHkoX2dldF9zb3VyY2VfZmlsZW5hbWUoKSwgc2VsZi50bXBfZGlyKQpAQCAtNzQsOCArNzYsNyBAQAogICAgICAgICAjIEdldCBldmVyeXRoaW5nIGJhY2sgdG8gbm9ybWFsCiAgICAgICAgIHRlc3Rfc3VwcG9ydC51bmxvYWQoJ3h4JykKICAgICAgICAgc3lzLnBhdGggPSBzZWxmLnN5c19wYXRoCi0gICAgICAgICMgWFhYIG9uIFdpbmRvd3MgdGhlIHRlc3QgbGVhdmVzIGEgZGlyZWN0b3J5IHdpdGggeHggbW9kdWxlIGluIFRFTVAKLSAgICAgICAgc2h1dGlsLnJtdHJlZShzZWxmLnRtcF9kaXIsIG9zLm5hbWUgPT0gJ250JyBvciBzeXMucGxhdGZvcm0gPT0gJ2N5Z3dpbicpCisgICAgICAgIHN1cHBvcnQuVGVtcGRpck1hbmFnZXIudGVhckRvd24oc2VsZikKIAogICAgIGRlZiB0ZXN0X3NvbGFyaXNfZW5hYmxlX3NoYXJlZChzZWxmKToKICAgICAgICAgZGlzdCA9IERpc3RyaWJ1dGlvbih7J25hbWUnOiAneHgnfSkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jb25maWcucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfY29uZmlnLnB5CmluZGV4IGNhZTc2ODkuLmQ4MTI3NjkgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9jb25maWcucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2NvbmZpZy5weQpAQCAtMiw2ICsyLDggQEAKIGltcG9ydCBzeXMKIGltcG9ydCBvcwogaW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdGVtcGZpbGUKK2ltcG9ydCBzaHV0aWwKIAogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgUHlQSVJDQ29tbWFuZAogZnJvbSBkaXN0dXRpbHMuY29yZSBpbXBvcnQgRGlzdHJpYnV0aW9uCkBAIC00OSwxMyArNTEsMTUgQEAKIAogICAgIGRlZiBzZXRVcChzZWxmKToKICAgICAgICAgIiIiUGF0Y2hlcyB0aGUgZW52aXJvbm1lbnQuIiIiCisgICAgICAgIHN1cHBvcnQuVGVtcGRpck1hbmFnZXIuc2V0VXAoc2VsZikKKwogICAgICAgICBpZiBvcy5lbnZpcm9uLmhhc19rZXkoJ0hPTUUnKToKICAgICAgICAgICAgIHNlbGYuX29sZF9ob21lID0gb3MuZW52aXJvblsnSE9NRSddCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICBzZWxmLl9vbGRfaG9tZSA9IE5vbmUKLSAgICAgICAgY3VyZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQotICAgICAgICBvcy5lbnZpcm9uWydIT01FJ10gPSBjdXJkaXIKLSAgICAgICAgc2VsZi5yYyA9IG9zLnBhdGguam9pbihjdXJkaXIsICcucHlwaXJjJykKKyAgICAgICAgc2VsZi50bXBfZGlyID0gc2VsZi5ta2R0ZW1wKCkKKyAgICAgICAgb3MuZW52aXJvblsnSE9NRSddID0gc2VsZi50bXBfZGlyCisgICAgICAgIHNlbGYucmMgPSBvcy5wYXRoLmpvaW4oc2VsZi50bXBfZGlyLCAnLnB5cGlyYycpCiAgICAgICAgIHNlbGYuZGlzdCA9IERpc3RyaWJ1dGlvbigpCiAKICAgICAgICAgY2xhc3MgY29tbWFuZChQeVBJUkNDb21tYW5kKToKQEAgLTc0LDkgKzc4LDggQEAKICAgICAgICAgICAgIGRlbCBvcy5lbnZpcm9uWydIT01FJ10KICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG9zLmVudmlyb25bJ0hPTUUnXSA9IHNlbGYuX29sZF9ob21lCi0gICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKHNlbGYucmMpOgotICAgICAgICAgICAgb3MucmVtb3ZlKHNlbGYucmMpCiAgICAgICAgIHNldF90aHJlc2hvbGQoc2VsZi5vbGRfdGhyZXNob2xkKQorICAgICAgICBzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLnRlYXJEb3duKHNlbGYpCiAKICAgICBkZWYgdGVzdF9zZXJ2ZXJfcmVnaXN0cmF0aW9uKHNlbGYpOgogICAgICAgICAjIFRoaXMgdGVzdCBtYWtlcyBzdXJlIFB5UElSQ0NvbW1hbmQga25vd3MgaG93IHRvOgpkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2Rpcl91dGlsLnB5IGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2Rpcl91dGlsLnB5CmluZGV4IGVkZjkzYzQuLmJmNDE2YjYgMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9kaXJfdXRpbC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlyX3V0aWwucHkKQEAgLTksOCArOSw5IEBACiBmcm9tIGRpc3R1dGlscy5kaXJfdXRpbCBpbXBvcnQgY29weV90cmVlCiAKIGZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKK2Zyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0CiAKLWNsYXNzIERpclV0aWxUZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBEaXJVdGlsVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwgdW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIF9sb2coc2VsZiwgbXNnLCAqYXJncyk6CiAgICAgICAgIGlmIGxlbihhcmdzKSA+IDA6CkBAIC0xOSwxOCArMjAsMTggQEAKICAgICAgICAgICAgIHNlbGYuX2xvZ3MuYXBwZW5kKG1zZykKIAogICAgIGRlZiBzZXRVcChzZWxmKToKKyAgICAgICAgc3VwcG9ydC5UZW1wZGlyTWFuYWdlci5zZXRVcChzZWxmKQogICAgICAgICBzZWxmLl9sb2dzID0gW10KLSAgICAgICAgc2VsZi5yb290X3RhcmdldCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZGVlcCcpCisgICAgICAgIHRtcF9kaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBzZWxmLnJvb3RfdGFyZ2V0ID0gb3MucGF0aC5qb2luKHRtcF9kaXIsICdkZWVwJykKICAgICAgICAgc2VsZi50YXJnZXQgPSBvcy5wYXRoLmpvaW4oc2VsZi5yb290X3RhcmdldCwgJ2hlcmUnKQotICAgICAgICBzZWxmLnRhcmdldDIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2RlZXAyJykKKyAgICAgICAgc2VsZi50YXJnZXQyID0gb3MucGF0aC5qb2luKHRtcF9kaXIsICdkZWVwMicpCiAgICAgICAgIHNlbGYub2xkX2xvZyA9IGxvZy5pbmZvCiAgICAgICAgIGxvZy5pbmZvID0gc2VsZi5fbG9nCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6Ci0gICAgICAgIGZvciB0YXJnZXQgaW4gKHNlbGYudGFyZ2V0LCBzZWxmLnRhcmdldDIpOgotICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHModGFyZ2V0KToKLSAgICAgICAgICAgICAgICBzaHV0aWwucm10cmVlKHRhcmdldCkKICAgICAgICAgbG9nLmluZm8gPSBzZWxmLm9sZF9sb2cKKyAgICAgICAgc3VwcG9ydC5UZW1wZGlyTWFuYWdlci50ZWFyRG93bihzZWxmKQogCiAgICAgZGVmIHRlc3RfbWtwYXRoX3JlbW92ZV90cmVlX3ZlcmJvc2l0eShzZWxmKToKIApkaWZmIC0tZ2l0IGEvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2Rpc3QucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weQppbmRleCBiZjU5YzQxLi4wZTk4NjhhIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weQorKysgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZGlzdC5weQpAQCAtMTEsNyArMTEsNyBAQAogaW1wb3J0IHdhcm5pbmdzCiAKIGZyb20gdGVzdC50ZXN0X3N1cHBvcnQgaW1wb3J0IFRFU1RGTgotCitmcm9tIGRpc3R1dGlscy50ZXN0cyBpbXBvcnQgc3VwcG9ydAogCiBjbGFzcyB0ZXN0X2Rpc3QoZGlzdHV0aWxzLmNtZC5Db21tYW5kKToKICAgICAiIiJTYW1wbGUgZGlzdHV0aWxzIGV4dGVuc2lvbiBjb21tYW5kLiIiIgpAQCAtMzYsMTQgKzM2LDE2IEBACiAgICAgICAgIHJldHVybiBzZWxmLl9jb25maWdfZmlsZXMKIAogCi1jbGFzcyBEaXN0cmlidXRpb25UZXN0Q2FzZSh1bml0dGVzdC5UZXN0Q2FzZSk6CitjbGFzcyBEaXN0cmlidXRpb25UZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgc2V0VXAoc2VsZik6CisgICAgICAgIHN1cHBvcnQuVGVtcGRpck1hbmFnZXIuc2V0VXAoc2VsZikKICAgICAgICAgc2VsZi5hcmd2ID0gc3lzLmFyZ3ZbOl0KICAgICAgICAgZGVsIHN5cy5hcmd2WzE6XQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBzeXMuYXJndls6XSA9IHNlbGYuYXJndgorICAgICAgICBzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLnRlYXJEb3duKHNlbGYpCiAKICAgICBkZWYgY3JlYXRlX2Rpc3RyaWJ1dGlvbihzZWxmLCBjb25maWdmaWxlcz0oKSk6CiAgICAgICAgIGQgPSBUZXN0RGlzdHJpYnV0aW9uKCkKQEAgLTEwMCw3ICsxMDIsOCBAQAogCiAgICAgZGVmIHRlc3Rfd3JpdGVfcGtnX2ZpbGUoc2VsZik6CiAgICAgICAgICMgQ2hlY2sgRGlzdHJpYnV0aW9uTWV0YWRhdGEgaGFuZGxpbmcgb2YgVW5pY29kZSBmaWVsZHMKLSAgICAgICAgbXlfZmlsZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZicpCisgICAgICAgIHRtcF9kaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICBteV9maWxlID0gb3MucGF0aC5qb2luKHRtcF9kaXIsICdmJykKICAgICAgICAga2xhc3MgPSBkaXN0dXRpbHMuZGlzdC5EaXN0cmlidXRpb24KIAogICAgICAgICBkaXN0ID0ga2xhc3MoYXR0cnM9eydhdXRob3InOiB1J01pc3RlciBDYWbpJywKQEAgLTExMywxMSArMTE2LDcgQEAKICAgICAgICAgIyBsZXQncyBtYWtlIHN1cmUgdGhlIGZpbGUgY2FuIGJlIHdyaXR0ZW4KICAgICAgICAgIyB3aXRoIFVuaWNvZGUgZmllbGRzLiB0aGV5IGFyZSBlbmNvZGVkIHdpdGgKICAgICAgICAgIyBQS0dfSU5GT19FTkNPRElORwotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBkaXN0Lm1ldGFkYXRhLndyaXRlX3BrZ19maWxlKG9wZW4obXlfZmlsZSwgJ3cnKSkKLSAgICAgICAgZmluYWxseToKLSAgICAgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKG15X2ZpbGUpOgotICAgICAgICAgICAgICAgIG9zLnJlbW92ZShteV9maWxlKQorICAgICAgICBkaXN0Lm1ldGFkYXRhLndyaXRlX3BrZ19maWxlKG9wZW4obXlfZmlsZSwgJ3cnKSkKIAogICAgICAgICAjIHJlZ3VsYXIgYXNjaWkgaXMgb2YgY291cnNlIGFsd2F5cyB1c2FibGUKICAgICAgICAgZGlzdCA9IGtsYXNzKGF0dHJzPXsnYXV0aG9yJzogJ01pc3RlciBDYWZlJywKQEAgLTEyNiwxMSArMTI1LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZGVzY3JpcHRpb24nOiAnQ2FmZSB0b3JyZWZpZScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2xvbmdfZGVzY3JpcHRpb24nOiAnSGVoZWhlJ30pCiAKLSAgICAgICAgdHJ5OgotICAgICAgICAgICAgZGlzdC5tZXRhZGF0YS53cml0ZV9wa2dfZmlsZShvcGVuKG15X2ZpbGUsICd3JykpCi0gICAgICAgIGZpbmFsbHk6Ci0gICAgICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhteV9maWxlKToKLSAgICAgICAgICAgICAgICBvcy5yZW1vdmUobXlfZmlsZSkKKyAgICAgICAgbXlfZmlsZTIgPSBvcy5wYXRoLmpvaW4odG1wX2RpciwgJ2YyJykKKyAgICAgICAgZGlzdC5tZXRhZGF0YS53cml0ZV9wa2dfZmlsZShvcGVuKG15X2ZpbGUsICd3JykpCiAKICAgICBkZWYgdGVzdF9lbXB0eV9vcHRpb25zKHNlbGYpOgogICAgICAgICAjIGFuIGVtcHR5IG9wdGlvbnMgZGljdGlvbmFyeSBzaG91bGQgbm90IHN0YXkgaW4gdGhlCkBAIC0xNTUsNyArMTUxLDcgQEAKIAogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhsZW4od2FybnMpLCAwKQogCi1jbGFzcyBNZXRhZGF0YVRlc3RDYXNlKHVuaXR0ZXN0LlRlc3RDYXNlKToKK2NsYXNzIE1ldGFkYXRhVGVzdENhc2Uoc3VwcG9ydC5UZW1wZGlyTWFuYWdlciwgdW5pdHRlc3QuVGVzdENhc2UpOgogCiAgICAgZGVmIHRlc3Rfc2ltcGxlX21ldGFkYXRhKHNlbGYpOgogICAgICAgICBhdHRycyA9IHsibmFtZSI6ICJwYWNrYWdlIiwKQEAgLTI1NCw4ICsyNTAsOCBAQAogICAgICAgICBlbHNlOgogICAgICAgICAgICAgdXNlcl9maWxlbmFtZSA9ICJweWRpc3R1dGlscy5jZmciCiAKLSAgICAgICAgY3VyZGlyID0gb3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKQotICAgICAgICB1c2VyX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKGN1cmRpciwgdXNlcl9maWxlbmFtZSkKKyAgICAgICAgdGVtcF9kaXIgPSBzZWxmLm1rZHRlbXAoKQorICAgICAgICB1c2VyX2ZpbGVuYW1lID0gb3MucGF0aC5qb2luKHRlbXBfZGlyLCB1c2VyX2ZpbGVuYW1lKQogICAgICAgICBmID0gb3Blbih1c2VyX2ZpbGVuYW1lLCAndycpCiAgICAgICAgIGYud3JpdGUoJy4nKQogICAgICAgICBmLmNsb3NlKCkKQEAgLTI2NSw3ICsyNjEsNyBAQAogCiAgICAgICAgICAgICAjIGxpbnV4LXN0eWxlCiAgICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gaW4gKCdsaW51eCcsICdkYXJ3aW4nKToKLSAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWydIT01FJ10gPSBjdXJkaXIKKyAgICAgICAgICAgICAgICBvcy5lbnZpcm9uWydIT01FJ10gPSB0ZW1wX2RpcgogICAgICAgICAgICAgICAgIGZpbGVzID0gZGlzdC5maW5kX2NvbmZpZ19maWxlcygpCiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHVzZXJfZmlsZW5hbWUgaW4gZmlsZXMpCiAKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9maWxlX3V0aWwucHkgYi9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3RfZmlsZV91dGlsLnB5CmluZGV4IDUyM2YxYWUuLjkzNzNhZjggMTAwNjQ0Ci0tLSBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9maWxlX3V0aWwucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X2ZpbGVfdXRpbC5weQpAQCAtNSw4ICs1LDkgQEAKIAogZnJvbSBkaXN0dXRpbHMuZmlsZV91dGlsIGltcG9ydCBtb3ZlX2ZpbGUKIGZyb20gZGlzdHV0aWxzIGltcG9ydCBsb2cKK2Zyb20gZGlzdHV0aWxzLnRlc3RzIGltcG9ydCBzdXBwb3J0CiAKLWNsYXNzIEZpbGVVdGlsVGVzdENhc2UodW5pdHRlc3QuVGVzdENhc2UpOgorY2xhc3MgRmlsZVV0aWxUZXN0Q2FzZShzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLCB1bml0dGVzdC5UZXN0Q2FzZSk6CiAKICAgICBkZWYgX2xvZyhzZWxmLCBtc2csICphcmdzKToKICAgICAgICAgaWYgbGVuKGFyZ3MpID4gMDoKQEAgLTE1LDI0ICsxNiwyMCBAQAogICAgICAgICAgICAgc2VsZi5fbG9ncy5hcHBlbmQobXNnKQogCiAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzdXBwb3J0LlRlbXBkaXJNYW5hZ2VyLnNldFVwKHNlbGYpCiAgICAgICAgIHNlbGYuX2xvZ3MgPSBbXQogICAgICAgICBzZWxmLm9sZF9sb2cgPSBsb2cuaW5mbwogICAgICAgICBsb2cuaW5mbyA9IHNlbGYuX2xvZwotICAgICAgICBzZWxmLnNvdXJjZSA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZjEnKQotICAgICAgICBzZWxmLnRhcmdldCA9IG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZjInKQotICAgICAgICBzZWxmLnRhcmdldF9kaXIgPSBvcy5wYXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSwgJ2QxJykKKyAgICAgICAgdG1wX2RpciA9IHNlbGYubWtkdGVtcCgpCisgICAgICAgIHNlbGYuc291cmNlID0gb3MucGF0aC5qb2luKHRtcF9kaXIsICdmMScpCisgICAgICAgIHNlbGYudGFyZ2V0ID0gb3MucGF0aC5qb2luKHRtcF9kaXIsICdmMicpCisgICAgICAgIHNlbGYudGFyZ2V0X2RpciA9IG9zLnBhdGguam9pbih0bXBfZGlyLCAnZDEnKQogCiAgICAgZGVmIHRlYXJEb3duKHNlbGYpOgogICAgICAgICBsb2cuaW5mbyA9IHNlbGYub2xkX2xvZwotICAgICAgICBmb3IgZiBpbiAoc2VsZi5zb3VyY2UsIHNlbGYudGFyZ2V0LCBzZWxmLnRhcmdldF9kaXIpOgotICAgICAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoZik6Ci0gICAgICAgICAgICAgICAgaWYgb3MucGF0aC5pc2ZpbGUoZik6Ci0gICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmKQotICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgICAgIHNodXRpbC5ybXRyZWUoZikKKyAgICAgICAgc3VwcG9ydC5UZW1wZGlyTWFuYWdlci50ZWFyRG93bihzZWxmKQogCiAgICAgZGVmIHRlc3RfbW92ZV9maWxlX3ZlcmJvc2l0eShzZWxmKToKLQogICAgICAgICBmID0gb3BlbihzZWxmLnNvdXJjZSwgJ3cnKQogICAgICAgICBmLndyaXRlKCdzb21lIGNvbnRlbnQnKQogICAgICAgICBmLmNsb3NlKCkKZGlmZiAtLWdpdCBhL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zZGlzdC5weSBiL0xpYi9kaXN0dXRpbHMvdGVzdHMvdGVzdF9zZGlzdC5weQppbmRleCAwZDgzOWI1Li5iMmU5ODAwIDEwMDY0NAotLS0gYS9MaWIvZGlzdHV0aWxzL3Rlc3RzL3Rlc3Rfc2Rpc3QucHkKKysrIGIvTGliL2Rpc3R1dGlscy90ZXN0cy90ZXN0X3NkaXN0LnB5CkBAIC01LDYgKzUsNyBAQAogaW1wb3J0IHppcGZpbGUKIGZyb20gb3MucGF0aCBpbXBvcnQgam9pbgogaW1wb3J0IHN5cworaW1wb3J0IHRlbXBmaWxlCiAKIGZyb20gZGlzdHV0aWxzLmNvbW1hbmQuc2Rpc3QgaW1wb3J0IHNkaXN0CiBmcm9tIGRpc3R1dGlscy5jb3JlIGltcG9ydCBEaXN0cmlidXRpb24KQEAgLTEyLDkgKzEzLDYgQEAKIGZyb20gZGlzdHV0aWxzLmVycm9ycyBpbXBvcnQgRGlzdHV0aWxzRXhlY0Vycm9yCiBmcm9tIGRpc3R1dGlscy5zcGF3biBpbXBvcnQgZmluZF9leGVjdXRhYmxlCiAKLUNVUkRJUiA9IG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykKLVRFTVBfUEtHID0gam9pbihDVVJESVIsICd0ZW1wcGtnJykKLQogU0VUVVBfUFkgPSAiIiIKIGZyb20gZGlzdHV0aWxzLmNvcmUgaW1wb3J0IHNldHVwCiBpbXBvcnQgc29tZWNvZGUKQEAgLTI5LDI4ICsyNywyNSBAQAogY2xhc3Mgc2Rpc3RUZXN0Q2FzZShQeVBJUkNDb21tYW5kVGVzdENhc2UpOgogCiAgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICAjIFB5UElSQ0NvbW1hbmRUZXN0Q2FzZSBjcmVhdGVzIGEgdGVtcCBkaXIgYWxyZWFkeQorICAgICAgICAjIGFuZCBwdXQgaXQgaW4gc2VsZi50bXBfZGlyCiAgICAgICAgIFB5UElSQ0NvbW1hbmRUZXN0Q2FzZS5zZXRVcChzZWxmKQorICAgICAgICAjIHNldHRpbmcgdXAgYW4gZW52aXJvbm1lbnQKICAgICAgICAgc2VsZi5vbGRfcGF0aCA9IG9zLmdldGN3ZCgpCisgICAgICAgIG9zLm1rZGlyKGpvaW4oc2VsZi50bXBfZGlyLCAnc29tZWNvZGUnKSkKKyAgICAgICAgb3MubWtkaXIoam9pbihzZWxmLnRtcF9kaXIsICdkaXN0JykpCisgICAgICAgICMgY3JlYXRpbmcgYSBNQU5JRkVTVCwgYSBwYWNrYWdlLCBhbmQgYSBSRUFETUUKKyAgICAgICAgc2VsZi5fd3JpdGUoam9pbihzZWxmLnRtcF9kaXIsICdNQU5JRkVTVC5pbicpLCBNQU5JRkVTVF9JTikKKyAgICAgICAgc2VsZi5fd3JpdGUoam9pbihzZWxmLnRtcF9kaXIsICdSRUFETUUnKSwgJ3h4eCcpCisgICAgICAgIHNlbGYuX3dyaXRlKGpvaW4oc2VsZi50bXBfZGlyLCAnc29tZWNvZGUnLCAnX19pbml0X18ucHknKSwgJyMnKQorICAgICAgICBzZWxmLl93cml0ZShqb2luKHNlbGYudG1wX2RpciwgJ3NldHVwLnB5JyksIFNFVFVQX1BZKQorICAgICAgICBvcy5jaGRpcihzZWxmLnRtcF9kaXIpCiAKICAgICBkZWYgdGVhckRvd24oc2VsZik6CisgICAgICAgICMgYmFjayB0byBub3JtYWwKICAgICAgICAgb3MuY2hkaXIoc2VsZi5vbGRfcGF0aCkKLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoVEVNUF9QS0cpOgotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShURU1QX1BLRykKICAgICAgICAgUHlQSVJDQ29tbWFuZFRlc3RDYXNlLnRlYXJEb3duKHNlbGYpCiAKLSAgICBkZWYgX2luaXRfdG1wX3BrZyhzZWxmKToKLSAgICAgICAgaWYgb3MucGF0aC5leGlzdHMoVEVNUF9QS0cpOgotICAgICAgICAgICAgc2h1dGlsLnJtdHJlZShURU1QX1BLRykKLSAgICAgICAgb3MubWtkaXIoVEVNUF9QS0cpCi0gICAgICAgIG9zLm1rZGlyKGpvaW4oVEVNUF9QS0csICdzb21lY29kZScpKQotICAgICAgICBvcy5ta2Rpcihqb2luKFRFTVBfUEtHLCAnZGlzdCcpKQotICAgICAgICAjIGNyZWF0aW5nIGEgTUFOSUZFU1QsIGEgcGFja2FnZSwgYW5kIGEgUkVBRE1FCi0gICAgICAgIHNlbGYuX3dyaXRlKGpvaW4oVEVNUF9QS0csICdNQU5JRkVTVC5pbicpLCBNQU5JRkVTVF9JTikKLSAgICAgICAgc2VsZi5fd3JpdGUoam9pbihURU1QX1BLRywgJ1JFQURNRScpLCAneHh4JykKLSAgICAgICAgc2VsZi5fd3JpdGUoam9pbihURU1QX1BLRywgJ3NvbWVjb2RlJywgJ19faW5pdF9fLnB5JyksICcjJykKLSAgICAgICAgc2VsZi5fd3JpdGUoam9pbihURU1QX1BLRywgJ3NldHVwLnB5JyksIFNFVFVQX1BZKQotICAgICAgICBvcy5jaGRpcihURU1QX1BLRykKLQogICAgIGRlZiBfd3JpdGUoc2VsZiwgcGF0aCwgY29udGVudCk6CiAgICAgICAgIGYgPSBvcGVuKHBhdGgsICd3JykKICAgICAgICAgdHJ5OgpAQCAtNjIsMTggKzU3LDE3IEBACiAgICAgICAgICMgdGhpcyB0ZXN0IGNyZWF0ZXMgYSBwYWNrYWdlIHdpdGggc29tZSB2Y3MgZGlycyBpbiBpdAogICAgICAgICAjIGFuZCBsYXVuY2ggc2Rpc3QgdG8gbWFrZSBzdXJlIHRoZXkgZ2V0IHBydW5lZAogICAgICAgICAjIG9uIGFsbCBzeXN0ZW1zCi0gICAgICAgIHNlbGYuX2luaXRfdG1wX3BrZygpCiAKICAgICAgICAgIyBjcmVhdGluZyBWQ1MgZGlyZWN0b3JpZXMgd2l0aCBzb21lIGZpbGVzIGluIHRoZW0KLSAgICAgICAgb3MubWtkaXIoam9pbihURU1QX1BLRywgJ3NvbWVjb2RlJywgJy5zdm4nKSkKLSAgICAgICAgc2VsZi5fd3JpdGUoam9pbihURU1QX1BLRywgJ3NvbWVjb2RlJywgJy5zdm4nLCAnb2sucHknKSwgJ3h4eCcpCisgICAgICAgIG9zLm1rZGlyKGpvaW4oc2VsZi50bXBfZGlyLCAnc29tZWNvZGUnLCAnLnN2bicpKQorICAgICAgICBzZWxmLl93cml0ZShqb2luKHNlbGYudG1wX2RpciwgJ3NvbWVjb2RlJywgJy5zdm4nLCAnb2sucHknKSwgJ3h4eCcpCiAKLSAgICAgICAgb3MubWtkaXIoam9pbihURU1QX1BLRywgJ3NvbWVjb2RlJywgJy5oZycpKQotICAgICAgICBzZWxmLl93cml0ZShqb2luKFRFTVBfUEtHLCAnc29tZWNvZGUnLCAnLmhnJywKKyAgICAgICAgb3MubWtkaXIoam9pbihzZWxmLnRtcF9kaXIsICdzb21lY29kZScsICcuaGcnKSkKKyAgICAgICAgc2VsZi5fd3JpdGUoam9pbihzZWxmLnRtcF9kaXIsICdzb21lY29kZScsICcuaGcnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdvaycpLCAneHh4JykKIAotICAgICAgICBvcy5ta2Rpcihqb2luKFRFTVBfUEtHLCAnc29tZWNvZGUnLCAnLmdpdCcpKQotICAgICAgICBzZWxmLl93cml0ZShqb2luKFRFTVBfUEtHLCAnc29tZWNvZGUnLCAnLmdpdCcsCisgICAgICAgIG9zLm1rZGlyKGpvaW4oc2VsZi50bXBfZGlyLCAnc29tZWNvZGUnLCAnLmdpdCcpKQorICAgICAgICBzZWxmLl93cml0ZShqb2luKHNlbGYudG1wX2RpciwgJ3NvbWVjb2RlJywgJy5naXQnLAogICAgICAgICAgICAgICAgICAgICAgICAgICdvaycpLCAneHh4JykKIAogICAgICAgICAjIG5vdyBidWlsZGluZyBhIHNkaXN0CkBAIC05Niw3ICs5MCw3IEBACiAgICAgICAgIGNtZC5ydW4oKQogCiAgICAgICAgICMgbm93IGxldCdzIGNoZWNrIHdoYXQgd2UgaGF2ZQotICAgICAgICBkaXN0X2ZvbGRlciA9IGpvaW4oVEVNUF9QS0csICdkaXN0JykKKyAgICAgICAgZGlzdF9mb2xkZXIgPSBqb2luKHNlbGYudG1wX2RpciwgJ2Rpc3QnKQogICAgICAgICBmaWxlcyA9IG9zLmxpc3RkaXIoZGlzdF9mb2xkZXIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKGZpbGVzLCBbJ2Zha2UtMS4wLnppcCddKQogCkBAIC0xMTYsOCArMTEwLDYgQEAKICAgICAgICAgICAgIGZpbmRfZXhlY3V0YWJsZSgnZ3ppcCcpIGlzIE5vbmUpOgogICAgICAgICAgICAgcmV0dXJuCiAKLSAgICAgICAgc2VsZi5faW5pdF90bXBfcGtnKCkKLQogICAgICAgICAjIG5vdyBidWlsZGluZyBhIHNkaXN0CiAgICAgICAgIGRpc3QgPSBEaXN0cmlidXRpb24oKQogICAgICAgICBkaXN0LnNjcmlwdF9uYW1lID0gJ3NldHVwLnB5JwpAQCAtMTM3LDcgKzEyOSw3IEBACiAgICAgICAgIGNtZC5ydW4oKQogCiAgICAgICAgICMgbWFraW5nIHN1cmUgd2UgaGF2ZSB0d28gZmlsZXMKLSAgICAgICAgZGlzdF9mb2xkZXIgPSBqb2luKFRFTVBfUEtHLCAnZGlzdCcpCisgICAgICAgIGRpc3RfZm9sZGVyID0gam9pbihzZWxmLnRtcF9kaXIsICdkaXN0JykKICAgICAgICAgcmVzdWx0ID0gb3MubGlzdGRpcihkaXN0X2ZvbGRlcikKICAgICAgICAgcmVzdWx0LnNvcnQoKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhyZXN1bHQsCmRpZmYgLS1naXQgYS9NaXNjL05FV1MgYi9NaXNjL05FV1MKaW5kZXggM2MzNTQxMy4uZTE3NzhkZiAxMDA2NDQKLS0tIGEvTWlzYy9ORVdTCisrKyBiL01pc2MvTkVXUwpAQCAtMTU1LDYgKzE1NSw5IEBACiBMaWJyYXJ5CiAtLS0tLS0tCiAKKy0gSXNzdWUgIzUyNTc6IHJlZmFjdG9yZWQgYWxsIHRlc3RzIGluIGRpc3R1dGlscywgc28gdGhleSB1c2UgCisgIHN1cHBvcnQuVGVtcGRpck1hbmFnZXIsIHRvIGF2b2lkIHdyaXRpbmcgaW4gdGhlIHRlc3RzIGRpcmVjdG9yeS4KKwogLSBJc3N1ZSAjNDUyNDogZGlzdHV0aWxzIGJ1aWxkX3NjcmlwdCBjb21tYW5kIGZhaWxlZCB3aXRoIC0td2l0aC1zdWZmaXg9My4KICAgSW5pdGlhbCBwYXRjaCBieSBBbWF1cnkgRm9yZ2VvdCBkJ0FyYy4KIAo=