ZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weSBiL0xpYi90ZXN0L3Rlc3RfdGFyZmlsZS5weQppbmRleCBmMGZiNmIxLi4wNGY5YmE1IDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3RhcmZpbGUucHkKKysrIGIvTGliL3Rlc3QvdGVzdF90YXJmaWxlLnB5CkBAIC0xLDQgKzEsNCBAQAotIyBlbmNvZGluZzogaXNvODg1OS0xCisjIC0qLSBjb2Rpbmc6IGlzby04ODU5LTE1IC0qLQogCiBpbXBvcnQgc3lzCiBpbXBvcnQgb3MKQEAgLTM3Miw5ICszNzIsOSBAQAogCiAgICAgZGVmIHRlc3RfcmVhZF9sb25nbmFtZShzZWxmKToKICAgICAgICAgIyBUZXN0IHJlYWRpbmcgb2YgbG9uZ25hbWUgKGJ1ZyAjMTQ3MTQyNykuCi0gICAgICAgIG5hbWUgPSBzZWxmLnN1YmRpciArICIvIiArICIxMjMvIiAqIDEyNSArICJsb25nbmFtZSIKKyAgICAgICAgbG9uZ25hbWUgPSBzZWxmLnN1YmRpciArICIvIiArICIxMjMvIiAqIDEyNSArICJsb25nbmFtZSIKICAgICAgICAgdHJ5OgotICAgICAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcihuYW1lKQorICAgICAgICAgICAgdGFyaW5mbyA9IHNlbGYudGFyLmdldG1lbWJlcihsb25nbmFtZSkKICAgICAgICAgZXhjZXB0IEtleUVycm9yOgogICAgICAgICAgICAgc2VsZi5mYWlsKCJsb25nbmFtZSBub3QgZm91bmQiKQogICAgICAgICBzZWxmLmFzc2VydF8odGFyaW5mby50eXBlICE9IHRhcmZpbGUuRElSVFlQRSwgInJlYWQgbG9uZ25hbWUgYXMgZGlydHlwZSIpCkBAIC0zOTMsMTMgKzM5MywyNCBAQAogICAgICAgICB0YXJpbmZvID0gc2VsZi50YXIuZ2V0bWVtYmVyKGxvbmduYW1lKQogICAgICAgICBvZmZzZXQgPSB0YXJpbmZvLm9mZnNldAogICAgICAgICBzZWxmLnRhci5maWxlb2JqLnNlZWsob2Zmc2V0KQotICAgICAgICBmb2JqID0gU3RyaW5nSU8uU3RyaW5nSU8oc2VsZi50YXIuZmlsZW9iai5yZWFkKDE1MzYpKQorICAgICAgICBmb2JqID0gU3RyaW5nSU8uU3RyaW5nSU8oc2VsZi50YXIuZmlsZW9iai5yZWFkKDMgKiA1MTIpKQogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyh0YXJmaWxlLlJlYWRFcnJvciwgdGFyZmlsZS5vcGVuLCBuYW1lPSJmb28udGFyIiwgZmlsZW9iaj1mb2JqKQogCisgICAgZGVmIHRlc3RfaGVhZGVyX29mZnNldChzZWxmKToKKyAgICAgICAgIyBUZXN0IGlmIHRoZSBzdGFydCBvZmZzZXQgb2YgdGhlIFRhckluZm8gb2JqZWN0IGluY2x1ZGVzCisgICAgICAgICMgdGhlIHByZWNlZGluZyBleHRlbmRlZCBoZWFkZXIuCisgICAgICAgIGxvbmduYW1lID0gc2VsZi5zdWJkaXIgKyAiLyIgKyAiMTIzLyIgKiAxMjUgKyAibG9uZ25hbWUiCisgICAgICAgIG9mZnNldCA9IHNlbGYudGFyLmdldG1lbWJlcihsb25nbmFtZSkub2Zmc2V0CisgICAgICAgIGZvYmogPSBvcGVuKHRhcm5hbWUpCisgICAgICAgIGZvYmouc2VlayhvZmZzZXQpCisgICAgICAgIHRhcmluZm8gPSB0YXJmaWxlLlRhckluZm8uZnJvbWJ1Zihmb2JqLnJlYWQoNTEyKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLnR5cGUsIHNlbGYubG9uZ25hbWV0eXBlKQorCiAKIGNsYXNzIEdOVVJlYWRUZXN0KExvbmduYW1lVGVzdCk6CiAKICAgICBzdWJkaXIgPSAiZ251IgorICAgIGxvbmduYW1ldHlwZSA9IHRhcmZpbGUuR05VVFlQRV9MT05HTkFNRQogCiAgICAgZGVmIHRlc3Rfc3BhcnNlX2ZpbGUoc2VsZik6CiAgICAgICAgIHRhcmluZm8xID0gc2VsZi50YXIuZ2V0bWVtYmVyKCJ1c3Rhci9zcGFyc2UiKQpAQCAtNDEwLDI2ICs0MjEsNDAgQEAKICAgICAgICAgICAgICAgICAic3BhcnNlIGZpbGUgZXh0cmFjdGlvbiBmYWlsZWQiKQogCiAKLWNsYXNzIFBheFJlYWRUZXN0KFJlYWRUZXN0KToKK2NsYXNzIFBheFJlYWRUZXN0KExvbmduYW1lVGVzdCk6CiAKICAgICBzdWJkaXIgPSAicGF4IgorICAgIGxvbmduYW1ldHlwZSA9IHRhcmZpbGUuWEhEVFlQRQogCi0gICAgZGVmIHRlc3RfcGF4X2dsb2JoZWFkZXJzKHNlbGYpOgorICAgIGRlZiB0ZXN0X3BheF9nbG9iYWxfaGVhZGVycyhzZWxmKToKICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRhcm5hbWUsIGVuY29kaW5nPSJpc284ODU5LTEiKQorCiAgICAgICAgIHRhcmluZm8gPSB0YXIuZ2V0bWVtYmVyKCJwYXgvcmVndHlwZTEiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8udW5hbWUsICJmb28iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8uZ25hbWUsICJiYXIiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8ucGF4X2hlYWRlcnMuZ2V0KCJWRU5ET1IudW1sYXV0cyIpLCAixNbc5Pb83yIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5wYXhfaGVhZGVycy5nZXQoIlZFTkRPUi51bWxhdXRzIiksIHUixNbc5Pb83yIpCiAKICAgICAgICAgdGFyaW5mbyA9IHRhci5nZXRtZW1iZXIoInBheC9yZWd0eXBlMiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby51bmFtZSwgIiIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5nbmFtZSwgImJhciIpCi0gICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5wYXhfaGVhZGVycy5nZXQoIlZFTkRPUi51bWxhdXRzIiksICLE1tzk9vzfIikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLnBheF9oZWFkZXJzLmdldCgiVkVORE9SLnVtbGF1dHMiKSwgdSLE1tzk9vzfIikKIAogICAgICAgICB0YXJpbmZvID0gdGFyLmdldG1lbWJlcigicGF4L3JlZ3R5cGUzIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLnVuYW1lLCAidGFyZmlsZSIpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5nbmFtZSwgInRhcmZpbGUiKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8ucGF4X2hlYWRlcnMuZ2V0KCJWRU5ET1IudW1sYXV0cyIpLCAixNbc5Pb83yIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby5wYXhfaGVhZGVycy5nZXQoIlZFTkRPUi51bWxhdXRzIiksIHUixNbc5Pb83yIpCisKKyAgICBkZWYgdGVzdF9wYXhfbnVtYmVyX2ZpZWxkcyhzZWxmKToKKyAgICAgICAgIyBBbGwgZm9sbG93aW5nIG51bWJlciBmaWVsZHMgYXJlIHJlYWQgZnJvbSB0aGUgcGF4IGhlYWRlci4KKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRhcm5hbWUsIGVuY29kaW5nPSJpc284ODU5LTEiKQorICAgICAgICB0YXJpbmZvID0gdGFyLmdldG1lbWJlcigicGF4L3JlZ3R5cGU0IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLnNpemUsIDcwMTEpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyaW5mby51aWQsIDEyMykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXJpbmZvLmdpZCwgMTIzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhcmluZm8ubXRpbWUsIDEwNDE4MDg3ODMuMCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0eXBlKHRhcmluZm8ubXRpbWUpLCBmbG9hdCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChmbG9hdCh0YXJpbmZvLnBheF9oZWFkZXJzWyJhdGltZSJdKSwgMTA0MTgwODc4My4wKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGZsb2F0KHRhcmluZm8ucGF4X2hlYWRlcnNbImN0aW1lIl0pLCAxMDQxODA4NzgzLjApCiAKIAogY2xhc3MgV3JpdGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTcwMCw2OCArNzI1LDE2MSBAQAogICAgICAgICAgICAgbiA9IHRhci5nZXRtZW1iZXJzKClbMF0ubmFtZQogICAgICAgICAgICAgc2VsZi5hc3NlcnRfKG5hbWUgPT0gbiwgIlBBWCBsb25nbmFtZSBjcmVhdGlvbiBmYWlsZWQiKQogCi0gICAgZGVmIHRlc3RfaXNvODg1OV8xNV9maWxlbmFtZShzZWxmKToKLSAgICAgICAgc2VsZi5fdGVzdF91bmljb2RlX2ZpbGVuYW1lKCJpc284ODU5LTE1IikKKyAgICBkZWYgdGVzdF9wYXhfZ2xvYmFsX2hlYWRlcihzZWxmKToKKyAgICAgICAgcGF4X2hlYWRlcnMgPSB7CisgICAgICAgICAgICAgICAgdSJmb28iOiB1ImJhciIsCisgICAgICAgICAgICAgICAgdSJ1aWQiOiB1IjAiLAorICAgICAgICAgICAgICAgIHUibXRpbWUiOiB1IjEuMjMiLAorICAgICAgICAgICAgICAgIHUidGVzdCI6IHUi5Pb8IiwKKyAgICAgICAgICAgICAgICB1IuT2/CI6IHUidGVzdCJ9CisKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJ3IiwgZm9ybWF0PXRhcmZpbGUuUEFYX0ZPUk1BVCwgXAorICAgICAgICAgICAgICAgIHBheF9oZWFkZXJzPXBheF9oZWFkZXJzKQorICAgICAgICB0YXIuYWRkZmlsZSh0YXJmaWxlLlRhckluZm8oInRlc3QiKSkKKyAgICAgICAgdGFyLmNsb3NlKCkKKworICAgICAgICAjIFRlc3QgaWYgdGhlIGdsb2JhbCBoZWFkZXIgd2FzIHdyaXR0ZW4gY29ycmVjdGx5LgorICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgZW5jb2Rpbmc9Imlzbzg4NTktMSIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyLnBheF9oZWFkZXJzLCBwYXhfaGVhZGVycykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIuZ2V0bWVtYmVycygpWzBdLnBheF9oZWFkZXJzLCBwYXhfaGVhZGVycykKKworICAgICAgICAjIFRlc3QgaWYgYWxsIHRoZSBmaWVsZHMgYXJlIHVuaWNvZGUuCisgICAgICAgIGZvciBrZXksIHZhbCBpbiB0YXIucGF4X2hlYWRlcnMuaXRlcml0ZW1zKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydF8odHlwZShrZXkpIGlzIHVuaWNvZGUpCisgICAgICAgICAgICBzZWxmLmFzc2VydF8odHlwZSh2YWwpIGlzIHVuaWNvZGUpCisgICAgICAgICAgICBpZiBrZXkgaW4gdGFyZmlsZS5QQVhfTlVNQkVSX0ZJRUxEUzoKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHRhcmZpbGUuUEFYX05VTUJFUl9GSUVMRFNba2V5XSh2YWwpCisgICAgICAgICAgICAgICAgZXhjZXB0IChUeXBlRXJyb3IsIFZhbHVlRXJyb3IpOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmZhaWwoInVuYWJsZSB0byBjb252ZXJ0IHBheCBoZWFkZXIgZmllbGQiKQorCisgICAgZGVmIHRlc3RfcGF4X2V4dGVuZGVkX2hlYWRlcihzZWxmKToKKyAgICAgICAgIyBUaGUgZmllbGRzIGZyb20gdGhlIHBheCBoZWFkZXIgaGF2ZSBwcmlvcml0eSBvdmVyIHRoZQorICAgICAgICAjIFRhckluZm8uCisgICAgICAgIHBheF9oZWFkZXJzID0ge3UicGF0aCI6IHUiZm9vIiwgdSJ1aWQiOiB1IjEyMyJ9CisKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJ3IiwgZm9ybWF0PXRhcmZpbGUuUEFYX0ZPUk1BVCwgZW5jb2Rpbmc9Imlzbzg4NTktMSIpCisgICAgICAgIHQgPSB0YXJmaWxlLlRhckluZm8oKQorICAgICAgICB0Lm5hbWUgPSB1IuT2/CIgICAgICMgbm9uLUFTQ0lJCisgICAgICAgIHQudWlkID0gOCoqOCAgICAgICAgIyB0b28gbGFyZ2UKKyAgICAgICAgdC5wYXhfaGVhZGVycyA9IHBheF9oZWFkZXJzCisgICAgICAgIHRhci5hZGRmaWxlKHQpCisgICAgICAgIHRhci5jbG9zZSgpCisKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIGVuY29kaW5nPSJpc284ODU5LTEiKQorICAgICAgICB0ID0gdGFyLmdldG1lbWJlcnMoKVswXQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQucGF4X2hlYWRlcnMsIHBheF9oZWFkZXJzKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQubmFtZSwgImZvbyIpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC51aWQsIDEyMykKKworCitjbGFzcyBVc3RhclVuaWNvZGVUZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICAjIEFsbCAqVW5pY29kZVRlc3RzIEZJWE1FCisKKyAgICBmb3JtYXQgPSB0YXJmaWxlLlVTVEFSX0ZPUk1BVAorCisgICAgZGVmIHRlc3RfaXNvODg1OV8xX2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3VuaWNvZGVfZmlsZW5hbWUoImlzbzg4NTktMSIpCisKKyAgICBkZWYgdGVzdF91dGY3X2ZpbGVuYW1lKHNlbGYpOgorICAgICAgICBzZWxmLl90ZXN0X3VuaWNvZGVfZmlsZW5hbWUoInV0ZjciKQogCiAgICAgZGVmIHRlc3RfdXRmOF9maWxlbmFtZShzZWxmKToKICAgICAgICAgc2VsZi5fdGVzdF91bmljb2RlX2ZpbGVuYW1lKCJ1dGY4IikKIAotICAgIGRlZiB0ZXN0X3V0ZjE2X2ZpbGVuYW1lKHNlbGYpOgotICAgICAgICBzZWxmLl90ZXN0X3VuaWNvZGVfZmlsZW5hbWUoInV0ZjE2IikKLQogICAgIGRlZiBfdGVzdF91bmljb2RlX2ZpbGVuYW1lKHNlbGYsIGVuY29kaW5nKToKLSAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJ3IiwgZm9ybWF0PXRhcmZpbGUuUEFYX0ZPUk1BVCkKLSAgICAgICAgbmFtZSA9IHUiXHUyMGFjIi5lbmNvZGUoZW5jb2RpbmcpICMgRXVybyBzaWduCi0gICAgICAgIHRhci5lbmNvZGluZyA9IGVuY29kaW5nCisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCAidyIsIGZvcm1hdD1zZWxmLmZvcm1hdCwgZW5jb2Rpbmc9ZW5jb2RpbmcsIGVycm9ycz0ic3RyaWN0IikKKyAgICAgICAgbmFtZSA9IHUi5Pb8IgogICAgICAgICB0YXIuYWRkZmlsZSh0YXJmaWxlLlRhckluZm8obmFtZSkpCiAgICAgICAgIHRhci5jbG9zZSgpCiAKICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIGVuY29kaW5nPWVuY29kaW5nKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5nZXRtZW1iZXJzKClbMF0ubmFtZSwgbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUodGFyLmdldG5hbWVzKClbMF0pIGlzIG5vdCB1bmljb2RlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5nZXRtZW1iZXJzKClbMF0ubmFtZSwgbmFtZS5lbmNvZGUoZW5jb2RpbmcpKQogICAgICAgICB0YXIuY2xvc2UoKQogCiAgICAgZGVmIHRlc3RfdW5pY29kZV9maWxlbmFtZV9lcnJvcihzZWxmKToKLSAgICAgICAgIyBUaGUgZXVybyBzaWduIGZpbGVuYW1lIGNhbm5vdCBiZSB0cmFuc2xhdGVkIHRvIGlzbzg4NTktMSBlbmNvZGluZy4KLSAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJ3IiwgZm9ybWF0PXRhcmZpbGUuUEFYX0ZPUk1BVCwgZW5jb2Rpbmc9InV0ZjgiKQotICAgICAgICBuYW1lID0gdSJcdTIwYWMiLmVuY29kZSgidXRmOCIpICMgRXVybyBzaWduCi0gICAgICAgIHRhci5hZGRmaWxlKHRhcmZpbGUuVGFySW5mbyhuYW1lKSkKKyAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJ3IiwgZm9ybWF0PXNlbGYuZm9ybWF0LCBlbmNvZGluZz0iYXNjaWkiLCBlcnJvcnM9InN0cmljdCIpCisgICAgICAgIHRhcmluZm8gPSB0YXJmaWxlLlRhckluZm8oKQorCisgICAgICAgIHRhcmluZm8ubmFtZSA9ICLk9vwiCisgICAgICAgIGlmIHNlbGYuZm9ybWF0ID09IHRhcmZpbGUuUEFYX0ZPUk1BVDoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgdGFyLmFkZGZpbGUsIHRhcmluZm8pCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0YXIuYWRkZmlsZSh0YXJpbmZvKQorCisgICAgICAgIHRhcmluZm8ubmFtZSA9IHUi5Pb8IgorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHRhci5hZGRmaWxlLCB0YXJpbmZvKQorCisgICAgICAgIHRhcmluZm8ubmFtZSA9ICJmb28iCisgICAgICAgIHRhcmluZm8udW5hbWUgPSB1IuT2/CIKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVW5pY29kZUVycm9yLCB0YXIuYWRkZmlsZSwgdGFyaW5mbykKKworICAgIGRlZiB0ZXN0X3VuaWNvZGVfYXJndW1lbnQoc2VsZik6CisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0YXJuYW1lLCAiciIsIGVuY29kaW5nPSJpc284ODU5LTEiLCBlcnJvcnM9InN0cmljdCIpCisgICAgICAgIGZvciB0IGluIHRhcjoKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0Xyh0eXBlKHQubmFtZSkgaXMgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUodC5saW5rbmFtZSkgaXMgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUodC51bmFtZSkgaXMgc3RyKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRfKHR5cGUodC5nbmFtZSkgaXMgc3RyKQogICAgICAgICB0YXIuY2xvc2UoKQogCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFVuaWNvZGVFcnJvciwgdGFyZmlsZS5vcGVuLCB0bXBuYW1lLCBlbmNvZGluZz0iaXNvODg1OS0xIikKKyAgICBkZWYgdGVzdF91bmFtZV91bmljb2RlKHNlbGYpOgorICAgICAgICBmb3IgbmFtZSBpbiAodSLk9vwiLCAi5Pb8Iik6CisgICAgICAgICAgICB0ID0gdGFyZmlsZS5UYXJJbmZvKCJmb28iKQorICAgICAgICAgICAgdC51bmFtZSA9IG5hbWUKKyAgICAgICAgICAgIHQuZ25hbWUgPSBuYW1lCiAKLSAgICBkZWYgdGVzdF9wYXhfaGVhZGVycyhzZWxmKToKLSAgICAgICAgc2VsZi5fdGVzdF9wYXhfaGVhZGVycyh7ImZvbyI6ICJiYXIiLCAidWlkIjogMCwgIm10aW1lIjogMS4yM30pCisgICAgICAgICAgICBmb2JqID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKCJmb28udGFyIiwgbW9kZT0idyIsIGZpbGVvYmo9Zm9iaiwgZm9ybWF0PXNlbGYuZm9ybWF0LCBlbmNvZGluZz0iaXNvODg1OS0xIikKKyAgICAgICAgICAgIHRhci5hZGRmaWxlKHQpCisgICAgICAgICAgICB0YXIuY2xvc2UoKQorICAgICAgICAgICAgZm9iai5zZWVrKDApCiAKLSAgICAgICAgc2VsZi5fdGVzdF9wYXhfaGVhZGVycyh7ImV1cm8iOiB1Ilx1MjBhYyIuZW5jb2RlKCJ1dGY4Iil9KQorICAgICAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKCJmb28udGFyIiwgZmlsZW9iaj1mb2JqLCBlbmNvZGluZz0iaXNvODg1OS0xIikKKyAgICAgICAgICAgIHQgPSB0YXIuZ2V0bWVtYmVyKCJmb28iKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LnVuYW1lLCAi5Pb8IikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodC5nbmFtZSwgIuT2/CIpCiAKLSAgICAgICAgc2VsZi5fdGVzdF9wYXhfaGVhZGVycyh7ImV1cm8iOiB1Ilx1MjBhYyJ9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsiZXVybyI6IHUiXHUyMGFjIi5lbmNvZGUoInV0ZjgiKX0pCiAKLSAgICAgICAgc2VsZi5fdGVzdF9wYXhfaGVhZGVycyh7dSJcdTIwYWMiOiAiZXVybyJ9LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt1Ilx1MjBhYyIuZW5jb2RlKCJ1dGY4Iik6ICJldXJvIn0pCitjbGFzcyBHTlVVbmljb2RlVGVzdChVc3RhclVuaWNvZGVUZXN0KToKIAotICAgIGRlZiBfdGVzdF9wYXhfaGVhZGVycyhzZWxmLCBwYXhfaGVhZGVycywgY21wX2hlYWRlcnM9Tm9uZSk6Ci0gICAgICAgIGlmIGNtcF9oZWFkZXJzIGlzIE5vbmU6Ci0gICAgICAgICAgICBjbXBfaGVhZGVycyA9IHBheF9oZWFkZXJzCisgICAgZm9ybWF0ID0gdGFyZmlsZS5HTlVfRk9STUFUCiAKLSAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsICJ3IiwgZm9ybWF0PXRhcmZpbGUuUEFYX0ZPUk1BVCwgXAotICAgICAgICAgICAgICAgIHBheF9oZWFkZXJzPXBheF9oZWFkZXJzLCBlbmNvZGluZz0idXRmOCIpCi0gICAgICAgIHRhci5hZGRmaWxlKHRhcmZpbGUuVGFySW5mbygidGVzdCIpKQorCitjbGFzcyBQYXhVbmljb2RlVGVzdChVc3RhclVuaWNvZGVUZXN0KToKKworICAgIGZvcm1hdCA9IHRhcmZpbGUuUEFYX0ZPUk1BVAorCisgICAgZGVmIF9jcmVhdGVfdW5pY29kZV9uYW1lKHNlbGYsIG5hbWUpOgorICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgInciLCBmb3JtYXQ9c2VsZi5mb3JtYXQpCisgICAgICAgIHQgPSB0YXJmaWxlLlRhckluZm8oKQorICAgICAgICB0LnBheF9oZWFkZXJzWyJwYXRoIl0gPSBuYW1lCisgICAgICAgIHRhci5hZGRmaWxlKHQpCiAgICAgICAgIHRhci5jbG9zZSgpCiAKLSAgICAgICAgdGFyID0gdGFyZmlsZS5vcGVuKHRtcG5hbWUsIGVuY29kaW5nPSJ1dGY4IikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0YXIucGF4X2hlYWRlcnMsIGNtcF9oZWFkZXJzKQorICAgIGRlZiB0ZXN0X2Vycm9yX2hhbmRsZXJzKHNlbGYpOgorICAgICAgICAjIFRlc3QgaWYgdGhlIHVuaWNvZGUgZXJyb3IgaGFuZGxlcnMgd29yayBjb3JyZWN0bHkgZm9yIGNoYXJhY3RlcnMKKyAgICAgICAgIyB0aGF0IGNhbm5vdCBiZSBleHByZXNzZWQgaW4gYSBnaXZlbiBlbmNvZGluZy4KKyAgICAgICAgc2VsZi5fY3JlYXRlX3VuaWNvZGVfbmFtZSh1IuT2/CIpCiAKLSAgICBkZWYgdGVzdF90cnVuY2F0ZWRfaGVhZGVyKHNlbGYpOgotICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgInciLCBmb3JtYXQ9dGFyZmlsZS5QQVhfRk9STUFUKQotICAgICAgICB0YXJpbmZvID0gdGFyZmlsZS5UYXJJbmZvKCIxMjMvIiAqIDEyNiArICJsb25nbmFtZSIpCi0gICAgICAgIHRhci5hZGRmaWxlKHRhcmluZm8pCi0gICAgICAgIHRhci5jbG9zZSgpCisgICAgICAgIGZvciBoYW5kbGVyLCBuYW1lIGluICgoInV0Zi04IiwgdSLk9vwiLmVuY29kZSgidXRmOCIpKSwKKyAgICAgICAgICAgICAgICAgICAgKCJyZXBsYWNlIiwgIj8/PyIpLCAoImlnbm9yZSIsICIiKSk6CisgICAgICAgICAgICB0YXIgPSB0YXJmaWxlLm9wZW4odG1wbmFtZSwgZm9ybWF0PXNlbGYuZm9ybWF0LCBlbmNvZGluZz0iYXNjaWkiLAorICAgICAgICAgICAgICAgICAgICBlcnJvcnM9aGFuZGxlcikKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodGFyLmdldG5hbWVzKClbMF0sIG5hbWUpCiAKLSAgICAgICAgIyBTaW11bGF0ZSBhIHByZW1hdHVyZSBFT0YuCi0gICAgICAgIG9wZW4odG1wbmFtZSwgInJiKyIpLnRydW5jYXRlKDE1MzYpCi0gICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lKQotICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5nZXRtZW1iZXJzKCksIFtdKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhVbmljb2RlRXJyb3IsIHRhcmZpbGUub3BlbiwgdG1wbmFtZSwKKyAgICAgICAgICAgICAgICBlbmNvZGluZz0iYXNjaWkiLCBlcnJvcnM9InN0cmljdCIpCisKKyAgICBkZWYgdGVzdF9lcnJvcl9oYW5kbGVyX3V0Zjgoc2VsZik6CisgICAgICAgICMgQ3JlYXRlIGEgcGF0aG5hbWUgdGhhdCBoYXMgb25lIGNvbXBvbmVudCByZXByZXNlbnRhYmxlIHVzaW5nCisgICAgICAgICMgaXNvODg1OS0xIGFuZCB0aGUgb3RoZXIgb25seSBpbiBpc284ODU5LTE1LgorICAgICAgICBzZWxmLl9jcmVhdGVfdW5pY29kZV9uYW1lKHUi5Pb8L6QiKQorCisgICAgICAgIHRhciA9IHRhcmZpbGUub3Blbih0bXBuYW1lLCBmb3JtYXQ9c2VsZi5mb3JtYXQsIGVuY29kaW5nPSJpc284ODU5LTEiLAorICAgICAgICAgICAgICAgIGVycm9ycz0idXRmLTgiKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRhci5nZXRuYW1lcygpWzBdLCAi5Pb8LyIgKyB1IqQiLmVuY29kZSgidXRmOCIpKQogCiAKIGNsYXNzIEFwcGVuZFRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtODM2LDYzICs5NTQsNTggQEAKICAgICBkZWYgdGVzdF91c3Rhcl9saW1pdHMoc2VsZik6CiAgICAgICAgICMgMTAwIGNoYXIgbmFtZQogICAgICAgICB0YXJpbmZvID0gdGFyZmlsZS5UYXJJbmZvKCIwMTIzNDU2Nzg5IiAqIDEwKQotICAgICAgICB0YXJpbmZvLmNyZWF0ZV91c3Rhcl9oZWFkZXIoKQorICAgICAgICB0YXJpbmZvLnRvYnVmKHRhcmZpbGUuVVNUQVJfRk9STUFUKQogCiAgICAgICAgICMgMTAxIGNoYXIgbmFtZSB0aGF0IGNhbm5vdCBiZSBzdG9yZWQKICAgICAgICAgdGFyaW5mbyA9IHRhcmZpbGUuVGFySW5mbygiMDEyMzQ1Njc4OSIgKiAxMCArICIwIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGFyaW5mby5jcmVhdGVfdXN0YXJfaGVhZGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0YXJpbmZvLnRvYnVmLCB0YXJmaWxlLlVTVEFSX0ZPUk1BVCkKIAogICAgICAgICAjIDI1NiBjaGFyIG5hbWUgd2l0aCBhIHNsYXNoIGF0IHBvcyAxNTYKICAgICAgICAgdGFyaW5mbyA9IHRhcmZpbGUuVGFySW5mbygiMTIzLyIgKiA2MiArICJsb25nbmFtZSIpCi0gICAgICAgIHRhcmluZm8uY3JlYXRlX3VzdGFyX2hlYWRlcigpCisgICAgICAgIHRhcmluZm8udG9idWYodGFyZmlsZS5VU1RBUl9GT1JNQVQpCiAKICAgICAgICAgIyAyNTYgY2hhciBuYW1lIHRoYXQgY2Fubm90IGJlIHN0b3JlZAogICAgICAgICB0YXJpbmZvID0gdGFyZmlsZS5UYXJJbmZvKCIxMjM0NTY3LyIgKiAzMSArICJsb25nbmFtZSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRhcmluZm8uY3JlYXRlX3VzdGFyX2hlYWRlcikKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGFyaW5mby50b2J1ZiwgdGFyZmlsZS5VU1RBUl9GT1JNQVQpCiAKICAgICAgICAgIyA1MTIgY2hhciBuYW1lCiAgICAgICAgIHRhcmluZm8gPSB0YXJmaWxlLlRhckluZm8oIjEyMy8iICogMTI2ICsgImxvbmduYW1lIikKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGFyaW5mby5jcmVhdGVfdXN0YXJfaGVhZGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0YXJpbmZvLnRvYnVmLCB0YXJmaWxlLlVTVEFSX0ZPUk1BVCkKIAogICAgICAgICAjIDUxMiBjaGFyIGxpbmtuYW1lCiAgICAgICAgIHRhcmluZm8gPSB0YXJmaWxlLlRhckluZm8oImxvbmdsaW5rIikKICAgICAgICAgdGFyaW5mby5saW5rbmFtZSA9ICIxMjMvIiAqIDEyNiArICJsb25nbmFtZSIKLSAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVmFsdWVFcnJvciwgdGFyaW5mby5jcmVhdGVfdXN0YXJfaGVhZGVyKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0YXJpbmZvLnRvYnVmLCB0YXJmaWxlLlVTVEFSX0ZPUk1BVCkKIAogICAgICAgICAjIHVpZCA+IDggZGlnaXRzCiAgICAgICAgIHRhcmluZm8gPSB0YXJmaWxlLlRhckluZm8oIm5hbWUiKQogICAgICAgICB0YXJpbmZvLnVpZCA9IDAxMDAwMDAwMAotICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhWYWx1ZUVycm9yLCB0YXJpbmZvLmNyZWF0ZV91c3Rhcl9oZWFkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRhcmluZm8udG9idWYsIHRhcmZpbGUuVVNUQVJfRk9STUFUKQogCiAgICAgZGVmIHRlc3RfZ251X2xpbWl0cyhzZWxmKToKICAgICAgICAgdGFyaW5mbyA9IHRhcmZpbGUuVGFySW5mbygiMTIzLyIgKiAxMjYgKyAibG9uZ25hbWUiKQotICAgICAgICB0YXJpbmZvLmNyZWF0ZV9nbnVfaGVhZGVyKCkKKyAgICAgICAgdGFyaW5mby50b2J1Zih0YXJmaWxlLkdOVV9GT1JNQVQpCiAKICAgICAgICAgdGFyaW5mbyA9IHRhcmZpbGUuVGFySW5mbygibG9uZ2xpbmsiKQogICAgICAgICB0YXJpbmZvLmxpbmtuYW1lID0gIjEyMy8iICogMTI2ICsgImxvbmduYW1lIgotICAgICAgICB0YXJpbmZvLmNyZWF0ZV9nbnVfaGVhZGVyKCkKKyAgICAgICAgdGFyaW5mby50b2J1Zih0YXJmaWxlLkdOVV9GT1JNQVQpCiAKICAgICAgICAgIyB1aWQgPj0gMjU2ICoqIDcKICAgICAgICAgdGFyaW5mbyA9IHRhcmZpbGUuVGFySW5mbygibmFtZSIpCiAgICAgICAgIHRhcmluZm8udWlkID0gMDQwMDAwMDAwMDAwMDAwMDAwMDBMCi0gICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRhcmluZm8uY3JlYXRlX2dudV9oZWFkZXIpCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFZhbHVlRXJyb3IsIHRhcmluZm8udG9idWYsIHRhcmZpbGUuR05VX0ZPUk1BVCkKIAogICAgIGRlZiB0ZXN0X3BheF9saW1pdHMoc2VsZik6Ci0gICAgICAgICMgQSAyNTYgY2hhciBuYW1lIHRoYXQgY2FuIGJlIHN0b3JlZCB3aXRob3V0IGFuIGV4dGVuZGVkIGhlYWRlci4KLSAgICAgICAgdGFyaW5mbyA9IHRhcmZpbGUuVGFySW5mbygiMTIzLyIgKiA2MiArICJsb25nbmFtZSIpCi0gICAgICAgIHNlbGYuYXNzZXJ0XyhsZW4odGFyaW5mby5jcmVhdGVfcGF4X2hlYWRlcigidXRmOCIpKSA9PSA1MTIsCi0gICAgICAgICAgICAgICAgImNyZWF0ZV9wYXhfaGVhZGVyIGF0dGFjaGVkIHN1cGVyZmx1b3VzIGV4dGVuZGVkIGhlYWRlciIpCi0KICAgICAgICAgdGFyaW5mbyA9IHRhcmZpbGUuVGFySW5mbygiMTIzLyIgKiAxMjYgKyAibG9uZ25hbWUiKQotICAgICAgICB0YXJpbmZvLmNyZWF0ZV9wYXhfaGVhZGVyKCJ1dGY4IikKKyAgICAgICAgdGFyaW5mby50b2J1Zih0YXJmaWxlLlBBWF9GT1JNQVQpCiAKICAgICAgICAgdGFyaW5mbyA9IHRhcmZpbGUuVGFySW5mbygibG9uZ2xpbmsiKQogICAgICAgICB0YXJpbmZvLmxpbmtuYW1lID0gIjEyMy8iICogMTI2ICsgImxvbmduYW1lIgotICAgICAgICB0YXJpbmZvLmNyZWF0ZV9wYXhfaGVhZGVyKCJ1dGY4IikKKyAgICAgICAgdGFyaW5mby50b2J1Zih0YXJmaWxlLlBBWF9GT1JNQVQpCiAKICAgICAgICAgdGFyaW5mbyA9IHRhcmZpbGUuVGFySW5mbygibmFtZSIpCiAgICAgICAgIHRhcmluZm8udWlkID0gMDQwMDAwMDAwMDAwMDAwMDAwMDBMCi0gICAgICAgIHRhcmluZm8uY3JlYXRlX3BheF9oZWFkZXIoInV0ZjgiKQorICAgICAgICB0YXJpbmZvLnRvYnVmKHRhcmZpbGUuUEFYX0ZPUk1BVCkKIAogCiBjbGFzcyBHemlwTWlzY1JlYWRUZXN0KE1pc2NSZWFkVGVzdCk6CkBAIC05NDAsNiArMTA1Myw5IEBACiAgICAgICAgIFN0cmVhbVdyaXRlVGVzdCwKICAgICAgICAgR05VV3JpdGVUZXN0LAogICAgICAgICBQYXhXcml0ZVRlc3QsCisgICAgICAgIFVzdGFyVW5pY29kZVRlc3QsCisgICAgICAgIEdOVVVuaWNvZGVUZXN0LAorICAgICAgICBQYXhVbmljb2RlVGVzdCwKICAgICAgICAgQXBwZW5kVGVzdCwKICAgICAgICAgTGltaXRzVGVzdCwKICAgICBdCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0dGFyLnRhciBiL0xpYi90ZXN0L3Rlc3R0YXIudGFyCmluZGV4IGM0YzgyYjguLjM1MjliZGYgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3R0YXIudGFyCisrKyBiL0xpYi90ZXN0L3Rlc3R0YXIudGFyCkJpbmFyeSBmaWxlcyBkaWZmZXIK