ZGlmZiAtLWdpdCBhL0xpYi9kb2N0ZXN0LnB5IGIvTGliL2RvY3Rlc3QucHkKaW5kZXggZGFkODMzMy4uNzcyZTE0MiAxMDA2NDQKLS0tIGEvTGliL2RvY3Rlc3QucHkKKysrIGIvTGliL2RvY3Rlc3QucHkKQEAgLTE0NDEsNiArMTQ0MSwxMyBAQAogICAgIGFuZCByZXR1cm5zIHRydWUgaWYgdGhleSBtYXRjaDsgYW5kIGBvdXRwdXRfZGlmZmVyZW5jZWAsIHdoaWNoCiAgICAgcmV0dXJucyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHR3byBvdXRwdXRzLgogICAgICIiIgorCisgICAgZGVmIF90b0FzY2lpKHNlbGYsIHMpOgorICAgICAgICAiIiIKKyAgICAgICAgQ29udmVydCBzdHJpbmcgdG8gaGV4LWVzY2FwZWQgQVNDSUkgc3RyaW5nLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIHN0cihzLmVuY29kZSgnQVNDSUknLCAnYmFja3NsYXNocmVwbGFjZScpLCAiQVNDSUkiKQorCiAgICAgZGVmIGNoZWNrX291dHB1dChzZWxmLCB3YW50LCBnb3QsIG9wdGlvbmZsYWdzKToKICAgICAgICAgIiIiCiAgICAgICAgIFJldHVybiBUcnVlIGlmZiB0aGUgYWN0dWFsIG91dHB1dCBmcm9tIGFuIGV4YW1wbGUgKGBnb3RgKQpAQCAtMTQ1MSw2ICsxNDU4LDE1IEBACiAgICAgICAgIGRvY3VtZW50YXRpb24gZm9yIGBUZXN0UnVubmVyYCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dAogICAgICAgICBvcHRpb24gZmxhZ3MuCiAgICAgICAgICIiIgorCisgICAgICAgICMgSWYgYHdhbnRgIGNvbnRhaW5zIGhleC1lc2NhcGVkIGNoYXJhY3RlciBzdWNoIGFzICJcdTEyMzQiLAorICAgICAgICAjIHRoZW4gYHdhbnRgIGlzIGEgc3RyaW5nIG9mIHNpeCBjaGFyYWN0ZXJzKGUuZy4gW1wsdSwxLDIsMyw0XSkuCisgICAgICAgICMgT24gdGhlIG90aGVyIGhhbmQsIGBnb3RgIGNvdWxkIGJlIGFuIGFub3RoZXIgc2VxdWVuY2Ugb2YKKyAgICAgICAgIyBjaGFyYWN0ZXJzIHN1Y2ggYXMgW1x1MTIzNF0sIHNvIGB3YW50YCBhbmQgYGdvdGAgc2hvdWxkCisgICAgICAgICMgYmUgZm9sZGVkIHRvIGhleC1lc2NhcGVkIEFTQ0lJIHN0cmluZyB0byBjb21wYXJlLgorICAgICAgICBnb3QgPSBzZWxmLl90b0FzY2lpKGdvdCkKKyAgICAgICAgd2FudCA9IHNlbGYuX3RvQXNjaWkod2FudCkKKwogICAgICAgICAjIEhhbmRsZSB0aGUgY29tbW9uIGNhc2UgZmlyc3QsIGZvciBlZmZpY2llbmN5OgogICAgICAgICAjIGlmIHRoZXkncmUgc3RyaW5nLWlkZW50aWNhbCwgYWx3YXlzIHJldHVybiB0cnVlLgogICAgICAgICBpZiBnb3QgPT0gd2FudDoKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYXJyYXkucHkgYi9MaWIvdGVzdC90ZXN0X2FycmF5LnB5CmluZGV4IDY2Y2UyYWQuLjNmOGI2ODMgMTAwNzU1Ci0tLSBhL0xpYi90ZXN0L3Rlc3RfYXJyYXkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9hcnJheS5weQpAQCAtNzY4LDcgKzc2OCw3IEBACiAgICAgICAgIGEgPSBhcnJheS5hcnJheSgndScsIHMpCiAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCiAgICAgICAgICAgICByZXByKGEpLAotICAgICAgICAgICAgImFycmF5KCd1JywgJ1xceDAwPVwiXFwnYVxcXFxiXFx4ODBcXHhmZlxceDAwXFx4MDFcXHUxMjM0JykiKQorICAgICAgICAgICAgImFycmF5KCd1JywgJ1xceDAwPVwiXFwnYVxcXFxiXFx4ODBceGZmXFx4MDBcXHgwMVx1MTIzNCcpIikKIAogICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIGEuZnJvbXVuaWNvZGUpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weSBiL0xpYi90ZXN0L3Rlc3RfYnVpbHRpbi5weQppbmRleCBlZjU2MmRiLi41NTdkNTZjIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2J1aWx0aW4ucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9idWlsdGluLnB5CkBAIC0xNTksNiArMTU5LDkgQEAKICAgICAgICAgUyA9IFsxMCwgMjAsIDMwXQogICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGFueSh4ID4gNDIgZm9yIHggaW4gUyksIEZhbHNlKQogCisgICAgZGVmIHRlc3RfYXNjaWkoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoYXNjaWkoIlx1MDM3MCIpLCAiJ1xcdTAzNzAnIikKKwogICAgIGRlZiB0ZXN0X25lZyhzZWxmKToKICAgICAgICAgeCA9IC1zeXMubWF4c2l6ZS0xCiAgICAgICAgIHNlbGYuYXNzZXJ0Xyhpc2luc3RhbmNlKHgsIGludCkpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbnMucHkgYi9MaWIvdGVzdC90ZXN0X2V4Y2VwdGlvbnMucHkKaW5kZXggNjE5YjdlMy4uNDFiOTQxMyAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9leGNlcHRpb25zLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfZXhjZXB0aW9ucy5weQpAQCAtODAsMTAgKzgwLDEwIEBACiAgICAgICAgIHNlbGYucmFpc2VfY2F0Y2goSW5kZW50YXRpb25FcnJvciwgIkluZGVudGF0aW9uRXJyb3IiKQogCiAgICAgICAgIHNlbGYucmFpc2VfY2F0Y2goVGFiRXJyb3IsICJUYWJFcnJvciIpCi0gICAgICAgICMgY2FuIG9ubHkgYmUgdGVzdGVkIHVuZGVyIC10dCwgYW5kIGlzIHRoZSBvbmx5IHRlc3QgZm9yIC10dAotICAgICAgICAjdHJ5OiBjb21waWxlKCJ0cnk6XG5cdDEvMFxuICAgIFx0MS8wXG5maW5hbGx5OlxuIHBhc3NcbiIsICc8c3RyaW5nPicsICdleGVjJykKLSAgICAgICAgI2V4Y2VwdCBUYWJFcnJvcjogcGFzcwotICAgICAgICAjZWxzZTogc2VsZi5mYWlsKCJUYWJFcnJvciBub3QgcmFpc2VkIikKKyAgICAgICAgdHJ5OiBjb21waWxlKCJ0cnk6XG5cdDEvMFxuICAgIFx0MS8wXG5maW5hbGx5OlxuIHBhc3NcbiIsCisgICAgICAgICAgICAgICAgICAgICAnPHN0cmluZz4nLCAnZXhlYycpCisgICAgICAgIGV4Y2VwdCBUYWJFcnJvcjogcGFzcworICAgICAgICBlbHNlOiBzZWxmLmZhaWwoIlRhYkVycm9yIG5vdCByYWlzZWQiKQogCiAgICAgICAgIHNlbGYucmFpc2VfY2F0Y2goU3lzdGVtRXJyb3IsICJTeXN0ZW1FcnJvciIpCiAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfZm9ybWF0LnB5IGIvTGliL3Rlc3QvdGVzdF9mb3JtYXQucHkKaW5kZXggZmI5MTQ3NS4uOGJjNDdkNCAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9mb3JtYXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9mb3JtYXQucHkKQEAgLTIxNiw2ICsyMTYsOCBAQAogICAgICAgICB0ZXN0Zm9ybWF0KCIlbyIsIDBvNDIsICI0MiIpCiAgICAgICAgIHRlc3Rmb3JtYXQoIiVvIiwgLTBvNDIsICItNDIiKQogICAgICAgICB0ZXN0Zm9ybWF0KCIlbyIsIGZsb2F0KDBvNDIpLCAiNDIiKQorICAgICAgICB0ZXN0Zm9ybWF0KCIlciIsICJcdTAzNzAiLCAiJ1x1MDM3MCciKQorICAgICAgICB0ZXN0Zm9ybWF0KCIlYSIsICJcdTAzNzAiLCAiJ1xcdTAzNzAnIikKICAgICAgICAgIyBUZXN0IGV4Y2VwdGlvbiBmb3IgdW5rbm93biBmb3JtYXQgY2hhcmFjdGVycwogICAgICAgICBpZiB2ZXJib3NlOgogICAgICAgICAgICAgcHJpbnQoJ1Rlc3RpbmcgZXhjZXB0aW9ucycpCkBAIC0yMzUsOCArMjM3LDggQEAKICAgICAgICAgICAgICAgICByYWlzZQogICAgICAgICAgICAgZWxzZToKICAgICAgICAgICAgICAgICByYWlzZSBUZXN0RmFpbGVkKCdkaWQgbm90IGdldCBleHBlY3RlZCBleGNlcHRpb246ICVzJyAlIGV4Y21zZykKLSAgICAgICAgdGVzdF9leGMoJ2FiYyAlYScsIDEsIFZhbHVlRXJyb3IsCi0gICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCBmb3JtYXQgY2hhcmFjdGVyICdhJyAoMHg2MSkgYXQgaW5kZXggNSIpCisgICAgICAgIHRlc3RfZXhjKCdhYmMgJWInLCAxLCBWYWx1ZUVycm9yLAorICAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgZm9ybWF0IGNoYXJhY3RlciAnYicgKDB4NjIpIGF0IGluZGV4IDUiKQogICAgICAgICAjdGVzdF9leGModW5pY29kZSgnYWJjICVcdTMwMDAnLCdyYXctdW5pY29kZS1lc2NhcGUnKSwgMSwgVmFsdWVFcnJvciwKICAgICAgICAgIyAgICAgICAgICJ1bnN1cHBvcnRlZCBmb3JtYXQgY2hhcmFjdGVyICc/JyAoMHgzMDAwKSBhdCBpbmRleCA1IikKICAgICAgICAgdGVzdF9leGMoJyVkJywgJzEnLCBUeXBlRXJyb3IsICIlZCBmb3JtYXQ6IGEgbnVtYmVyIGlzIHJlcXVpcmVkLCBub3Qgc3RyIikKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfcHlleHBhdC5weSBiL0xpYi90ZXN0L3Rlc3RfcHlleHBhdC5weQppbmRleCBjMjUyMTM0Li40OTQ3YzhiIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3B5ZXhwYXQucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9weWV4cGF0LnB5CkBAIC0xMzEsNyArMTMxLDcgQEAKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbMV0sICJDb21tZW50OiAnIGNvbW1lbnQgZGF0YSAnIikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbMl0sICJOb3RhdGlvbiBkZWNsYXJlZDogKCdub3RhdGlvbicsIE5vbmUsICdub3RhdGlvbi5qcGVnJywgTm9uZSkiKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFszXSwgIlVucGFyc2VkIGVudGl0eSBkZWNsOiAoJ3VucGFyc2VkX2VudGl0eScsIE5vbmUsICdlbnRpdHkuZmlsZScsIE5vbmUsICdub3RhdGlvbicpIikKLSAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbNF0sICJTdGFydCBlbGVtZW50OiAncm9vdCcgeydhdHRyMSc6ICd2YWx1ZTEnLCAnYXR0cjInOiAndmFsdWUyXFx1MWY0MCd9IikKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbNF0sICJTdGFydCBlbGVtZW50OiAncm9vdCcgeydhdHRyMSc6ICd2YWx1ZTEnLCAnYXR0cjInOiAndmFsdWUyXHUxZjQwJ30iKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFs1XSwgIk5TIGRlY2w6ICdteW5zJyAnaHR0cDovL3d3dy5weXRob24ub3JnL25hbWVzcGFjZSciKQogICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhvcFs2XSwgIlN0YXJ0IGVsZW1lbnQ6ICdodHRwOi8vd3d3LnB5dGhvbi5vcmcvbmFtZXNwYWNlIXN1YmVsZW1lbnQnIHt9IikKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMob3BbN10sICJDaGFyYWN0ZXIgZGF0YTogJ0NvbnRlbnRzIG9mIHN1YmVsZW1lbnRzJyIpCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkgYi9MaWIvdGVzdC90ZXN0X3VuaWNvZGUucHkKaW5kZXggMmY5YWRkNS4uYTI2N2NmNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF91bmljb2RlLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3RfdW5pY29kZS5weQpAQCAtOTQsMTQgKzk0LDE0IEBACiAgICAgICAgICAgICAgICAgIkpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XFx4N2YiCiAgICAgICAgICAgICAgICAgIlxceDgwXFx4ODFcXHg4MlxceDgzXFx4ODRcXHg4NVxceDg2XFx4ODdcXHg4OFxceDg5XFx4OGFcXHg4YlxceDhjXFx4OGQiCiAgICAgICAgICAgICAgICAgIlxceDhlXFx4OGZcXHg5MFxceDkxXFx4OTJcXHg5M1xceDk0XFx4OTVcXHg5NlxceDk3XFx4OThcXHg5OVxceDlhXFx4OWIiCi0gICAgICAgICAgICAgICAgIlxceDljXFx4OWRcXHg5ZVxceDlmXFx4YTBcXHhhMVxceGEyXFx4YTNcXHhhNFxceGE1XFx4YTZcXHhhN1xceGE4XFx4YTkiCi0gICAgICAgICAgICAgICAgIlxceGFhXFx4YWJcXHhhY1xceGFkXFx4YWVcXHhhZlxceGIwXFx4YjFcXHhiMlxceGIzXFx4YjRcXHhiNVxceGI2XFx4YjciCi0gICAgICAgICAgICAgICAgIlxceGI4XFx4YjlcXHhiYVxceGJiXFx4YmNcXHhiZFxceGJlXFx4YmZcXHhjMFxceGMxXFx4YzJcXHhjM1xceGM0XFx4YzUiCi0gICAgICAgICAgICAgICAgIlxceGM2XFx4YzdcXHhjOFxceGM5XFx4Y2FcXHhjYlxceGNjXFx4Y2RcXHhjZVxceGNmXFx4ZDBcXHhkMVxceGQyXFx4ZDMiCi0gICAgICAgICAgICAgICAgIlxceGQ0XFx4ZDVcXHhkNlxceGQ3XFx4ZDhcXHhkOVxceGRhXFx4ZGJcXHhkY1xceGRkXFx4ZGVcXHhkZlxceGUwXFx4ZTEiCi0gICAgICAgICAgICAgICAgIlxceGUyXFx4ZTNcXHhlNFxceGU1XFx4ZTZcXHhlN1xceGU4XFx4ZTlcXHhlYVxceGViXFx4ZWNcXHhlZFxceGVlXFx4ZWYiCi0gICAgICAgICAgICAgICAgIlxceGYwXFx4ZjFcXHhmMlxceGYzXFx4ZjRcXHhmNVxceGY2XFx4ZjdcXHhmOFxceGY5XFx4ZmFcXHhmYlxceGZjXFx4ZmQiCi0gICAgICAgICAgICAgICAgIlxceGZlXFx4ZmYnIikKKyAgICAgICAgICAgICAgICAiXFx4OWNcXHg5ZFxceDllXFx4OWZcXHhhMFx4YTFceGEyXHhhM1x4YTRceGE1XHhhNlx4YTdceGE4XHhhOSIKKyAgICAgICAgICAgICAgICAiXHhhYVx4YWJceGFjXFx4YWRceGFlXHhhZlx4YjBceGIxXHhiMlx4YjNceGI0XHhiNVx4YjZceGI3IgorICAgICAgICAgICAgICAgICJceGI4XHhiOVx4YmFceGJiXHhiY1x4YmRceGJlXHhiZlx4YzBceGMxXHhjMlx4YzNceGM0XHhjNSIKKyAgICAgICAgICAgICAgICAiXHhjNlx4YzdceGM4XHhjOVx4Y2FceGNiXHhjY1x4Y2RceGNlXHhjZlx4ZDBceGQxXHhkMlx4ZDMiCisgICAgICAgICAgICAgICAgIlx4ZDRceGQ1XHhkNlx4ZDdceGQ4XHhkOVx4ZGFceGRiXHhkY1x4ZGRceGRlXHhkZlx4ZTBceGUxIgorICAgICAgICAgICAgICAgICJceGUyXHhlM1x4ZTRceGU1XHhlNlx4ZTdceGU4XHhlOVx4ZWFceGViXHhlY1x4ZWRceGVlXHhlZiIKKyAgICAgICAgICAgICAgICAiXHhmMFx4ZjFceGYyXHhmM1x4ZjRceGY1XHhmNlx4ZjdceGY4XHhmOVx4ZmFceGZiXHhmY1x4ZmQiCisgICAgICAgICAgICAgICAgIlx4ZmVceGZmJyIpCiAgICAgICAgICAgICB0ZXN0cmVwciA9IHJlcHIoJycuam9pbihtYXAoY2hyLCByYW5nZSgyNTYpKSkpCiAgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRlc3RyZXByLCBsYXRpbjFyZXByKQogICAgICAgICAgICAgIyBUZXN0IHJlcHIgd29ya3Mgb24gd2lkZSB1bmljb2RlIGVzY2FwZXMgd2l0aG91dCBvdmVyZmxvdy4KQEAgLTM3NCw2ICszNzQsMTIgQEAKICAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgiWyIuaXNpZGVudGlmaWVyKCkpCiAgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UoIqkiLmlzaWRlbnRpZmllcigpKQogCisgICAgZGVmIHRlc3RfaXNwcmludGFibGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgiYWJjZGVmZyIuaXNwcmludGFibGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgiYWJjZGVmZ1xuIi5pc3ByaW50YWJsZSgpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoIlx1MDM3MCIuaXNwcmludGFibGUoKSkKKyAgICAgICAgc2VsZi5hc3NlcnRGYWxzZSgiXHVkODAwIi5pc3ByaW50YWJsZSgpKQorCiAgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CiAgICAgICAgICMgVGVzdGluZyBVbmljb2RlIGNvbnRhaW5zIG1ldGhvZAogICAgICAgICBzZWxmLmFzc2VydF8oJ2EnIGluICdhYmRiJykK