{"remainingRequest":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\xcjy-fvue\\src\\views\\patrolAndRescue\\commandDispatch\\EventRegistration\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\src\\views\\patrolAndRescue\\commandDispatch\\EventRegistration\\index.vue","mtime":1751276967997},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\babel.config.js","mtime":1741314102158},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyLmpzIjsKaW1wb3J0IF9yZWdlbmVyYXRvclJ1bnRpbWUgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9yZWdlbmVyYXRvclJ1bnRpbWUuanMiOwppbXBvcnQgX2FzeW5jVG9HZW5lcmF0b3IgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3luY1RvR2VuZXJhdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmluZC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuam9pbi5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmZpbmQuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5mb3ItZWFjaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLm1hcC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmtleXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyI7Ci8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCgppbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7CmltcG9ydCBQdWJTdWIgZnJvbSAncHVic3ViLWpzJzsKaW1wb3J0IHsgcmVmaW5lUmVxdWVzdEJvZHkgfSBmcm9tICdAL3V0aWxzL3JlcXVlc3RXcmFwcGVycyc7CmltcG9ydCB7IGdldFNjaGVkdWxpbmdQZXJzb24sIHRhYmxlQWRkLCB0YWJsZURldGFpbCwgdGFibGVFZGl0IH0gZnJvbSAnQC9hcGkvcGF0cm9sQW5kUmVzY3VlL2NvbW1hbmREaXNwYXRjaC9ldmVudFJlZ2lzdHJhdGlvbic7CmltcG9ydCB7IGRpY3Rpb25hcnlFc2NhcGUsIGdldERpY3Rpb25hcnlCeUNvZGUgfSBmcm9tICdAL3V0aWxzL2RpY3Rpb25hcnknOwppbXBvcnQgQXBwb2ludERpYWxvZyBmcm9tICcuL2NvbXBvbmVudHMvQXBwb2ludERpYWxvZyc7CmltcG9ydCBUcmFmZmljQ29udHJvbCBmcm9tICcuL2NvbXBvbmVudHMvVHJhZmZpY0NvbnRyb2wnOwppbXBvcnQgVHJhZmZpY0phbSBmcm9tICcuL2NvbXBvbmVudHMvVHJhZmZpY0phbSc7CmltcG9ydCBCYXNpY3NJbmZvIGZyb20gJy4vY29tcG9uZW50cy9CYXNpY3NJbmZvJzsKaW1wb3J0IHsgdGFibGVEYXRhIGFzIHJvYWRTZWN0aW9uSW5mb0ludGVyIH0gZnJvbSAnQC9hcGkvcGF0cm9sQW5kUmVzY3VlL2luZm9NZ210UGF0cm9sc1Jlc2N1ZXMvcm9hZFNlY3Rpb25JbmZvJzsKaW1wb3J0IHsgdGFibGVEYXRhIGFzIHRlYW1EYXRhIH0gZnJvbSAnQC9hcGkvcGF0cm9sQW5kUmVzY3VlL2luZm9NZ210UGF0cm9sc1Jlc2N1ZXMvcGF0cm9sQW5kUmVzY3VlVGVhbXNNZ210JzsKZXhwb3J0IGRlZmF1bHQgewogIG5hbWU6ICdFdmVudFJlZ2lzdHJhdGlvbicsCiAgY29tcG9uZW50czogewogICAgQXBwb2ludERpYWxvZzogQXBwb2ludERpYWxvZywKICAgIFRyYWZmaWNDb250cm9sOiBUcmFmZmljQ29udHJvbCwKICAgIEJhc2ljc0luZm86IEJhc2ljc0luZm8sCiAgICBUcmFmZmljSmFtOiBUcmFmZmljSmFtCiAgfSwKICBwcm9wczogewogICAgY29tcG9uZW50TmFtZTogewogICAgICBkZWZhdWx0OiAnRWRpdEFkZFBhZ2UnLAogICAgICB0eXBlOiBTdHJpbmcKICAgIH0KICB9LAogIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7CiAgICByZXR1cm4gewogICAgICBhY3RpdmVOYW1lOiAnYmFzaWNzJywKICAgICAgZm9ybUxvYWRpbmc6IHRydWUsCiAgICAgIGFwcG9pbnREaWFsb2c6IGZhbHNlLAogICAgICBhZGRFZGl0Rm9ybTogewogICAgICAgIHRyYWZmaWNDb250cm9sczogW10sCiAgICAgICAgdHJhZmZpY0Nvbmdlc3Rpb25zOiBbXSwKICAgICAgICBjcmVhdGVCeTogJycgLy8g55m76K6w5Lq6CiAgICAgIH0sCiAgICAgIGFkZEVkaXRSdWxlczogewogICAgICAgIG1lbW86IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICfkuovku7bmj4/ov7DkuI3og73kuLrnqbonLAogICAgICAgICAgdHJpZ2dlcjogWydjaGFuZ2UnLCAnYmx1ciddCiAgICAgICAgfV0sCiAgICAgICAgY3JlYXRlQnk6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICfnmbvorrDkurrkuI3og73kuLrnqbonLAogICAgICAgICAgdHJpZ2dlcjogWydjaGFuZ2UnLCAnYmx1ciddCiAgICAgICAgfV0KICAgICAgfSwKICAgICAgc2F2ZUxvYWRpbmc6IGZhbHNlLAogICAgICAvLyDkuIrkvKBsb2FkaW5nCiAgICAgIGlkOiAnJywKICAgICAgLy8gaWTmoIfor4bnrKYKICAgICAgcm9hZENob2ljZURpYWxvZzogZmFsc2UsCiAgICAgIC8vIOaYr+WQpuWxleekuumAieaLqei3r+auteW8ueWxggogICAgICByb3V0ZXJEYXRhOiBbXSwKICAgICAgLy8g6Lev57q/5pWw5o2uCiAgICAgIHB1YlN1YjogbnVsbCwKICAgICAgbWFwTG9hZGluZzogdHJ1ZSwKICAgICAgLy8g5Zyw5Zu+5Yqg6L29bG9hZGluZwogICAgICBtYXA6IG51bGwsCiAgICAgIG1hcERlZmF1bHRPcHRpb25zOiB7CiAgICAgICAgY2VudGVyOiBbMTA2LjU1MDcsIDI5LjU2NDddIC8q5Zyw5Zu+5Lit5b+D54K5Ki8sCiAgICAgICAgem9vbTogOSAvKuWcsOWbvum7mOiupOe8qeaUvuetiee6pyovCiAgICAgIH0sCiAgICAgIG1hcmtlcnM6IFtdLAogICAgICB0ZWFtVHJlZURhdGE6IFtdLAogICAgICAvLyDmlZHmj7TpmJ/kvI3nu4Tnu4fmoJEKICAgICAgZXZlbnRHcmFkZU9wdGlvbnM6IFsKICAgICAgLy/kuovku7bnrYnnuqcKICAgICAgewogICAgICAgIGxhYmVsOiAnMee6pycsCiAgICAgICAgdmFsdWU6IDEKICAgICAgfSwgewogICAgICAgIGxhYmVsOiAnMue6pycsCiAgICAgICAgdmFsdWU6IDIKICAgICAgfSwgewogICAgICAgIGxhYmVsOiAnM+e6pycsCiAgICAgICAgdmFsdWU6IDMKICAgICAgfSwgewogICAgICAgIGxhYmVsOiAnNOe6pycsCiAgICAgICAgdmFsdWU6IDQKICAgICAgfV0sCiAgICAgIHRhYmxlRGF0YTogW10sCiAgICAgIHJvYWRPcHRpb25zOiBbXSwKICAgICAgYWxvbmdSb3V0ZUluZm9EYXRhOiBbXSwKICAgICAgdGVhbU9wdGlvbnM6IFtdLAogICAgICBpbnNwZWN0T3B0aW9uczogW10sCiAgICAgIG9wdGlvbnM6IFt7CiAgICAgICAgbGFiZWw6ICflkKYnLAogICAgICAgIHZhbHVlOiAwCiAgICAgIH0sIHsKICAgICAgICBsYWJlbDogJ+aYrycsCiAgICAgICAgdmFsdWU6IDEKICAgICAgfV0sCiAgICAgIGdlbmVyYXRlZE9yTm90OiAwLAogICAgICB0ZWFtSW5mbzogewogICAgICAgIHRlYW1JZDogJycsCiAgICAgICAgdGVhbUZ1bGxJZDogJycKICAgICAgfSwKICAgICAgYmFzZUluZm86IHt9LAogICAgICB1c2VyQ2hhbmdlZDogZmFsc2UsCiAgICAgIC8vIOeUqOaIt+aYr+WQpue8lui+kW1lbW8KICAgICAgYmFzaWM6ICcnLAogICAgICAvLyDln7rmnKzmg4XlhrUKICAgICAgbWVhc3VyZTogJycsCiAgICAgIC8vIOS6pOmAmueuoeWItgogICAgICBjYXN1YWx0aWVzOiAnJywKICAgICAgLy8g5Y+X5Lyk5oOF5Ya1CiAgICAgIHVzZXJPcHRpb25zOiBbXSwKICAgICAgaXNTaG93QXBwb2ludDogdHJ1ZSwKICAgICAgcm9hZEluZm86IHt9CiAgICB9OwogIH0sCiAgd2F0Y2g6IHsKICAgIGNvbXBvbmVudE5hbWU6IHsKICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihuZXdWYWwpIHsKICAgICAgICBpZiAobmV3VmFsID09PSB0aGlzLiRvcHRpb25zLm5hbWUpIHsKICAgICAgICAgIHRoaXMub3BlblBhZ2UoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5jbG9zZVBhZ2UoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9LAogIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7CiAgICAvLyB0aGlzLmdldE9yZ1RyZWVEYXRhKCkKICB9LAogIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7CiAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgdGhpcy5wdWJTdWIgPSBQdWJTdWIuc3Vic2NyaWJlKCdFZGl0QWRkUGFnZScsIGZ1bmN0aW9uIChfLCBkYXRhKSB7CiAgICAgIGlmIChkYXRhLmlkKSB7CiAgICAgICAgX3RoaXMuaWQgPSBkYXRhLmlkOwogICAgICAgIF90aGlzLmdldERldGFpbChkYXRhLmlkKTsKICAgICAgfQogICAgfSk7CiAgICB0aGlzLmdldFJvYWRPcHRpb25zKCk7CiAgICB0aGlzLnNldE5hdkJhcldpZHRoKCk7CiAgICB0aGlzLnNjcm9sbFRvTmF2U3R5bGUoKTsKICB9LAogIG1ldGhvZHM6IHsKICAgIGhhbmRsZU1lbW9DaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZU1lbW9DaGFuZ2UoZGF0YSkgewogICAgICBjb25zb2xlLmxvZyhkYXRhLCAnLS0tLS0nKTsKICAgICAgaWYgKGRhdGEuaXNBcHBvaW50KSB7CiAgICAgICAgdGhpcy5pc1Nob3dBcHBvaW50ID0gZmFsc2U7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5pc1Nob3dBcHBvaW50ID0gdHJ1ZTsKICAgICAgfQogICAgICAvLyByZXR1cm4KICAgICAgdmFyIGJhc2ljID0gZGF0YS5iYXNpYywKICAgICAgICBtZWFzdXJlID0gZGF0YS5tZWFzdXJlLAogICAgICAgIGNhc3VhbHRpZXMgPSBkYXRhLmNhc3VhbHRpZXM7CiAgICAgIGJhc2ljID8gdGhpcy5iYXNpYyA9IGJhc2ljIDogJyc7CiAgICAgIG1lYXN1cmUgPyB0aGlzLm1lYXN1cmUgPSBtZWFzdXJlIDogJyc7CiAgICAgIGNhc3VhbHRpZXMgPyB0aGlzLmNhc3VhbHRpZXMgPSBjYXN1YWx0aWVzIDogJyc7CiAgICAgIGlmICghdGhpcy51c2VyQ2hhbmdlZCkgewogICAgICAgIHZhciBtZW1vUGFydHMgPSBbXTsKICAgICAgICBpZiAodGhpcy5iYXNpYykgbWVtb1BhcnRzLnB1c2godGhpcy5iYXNpYyk7CiAgICAgICAgaWYgKHRoaXMubWVhc3VyZSAmJiB0aGlzLm1lYXN1cmUgIT09ICfml6AnKSBtZW1vUGFydHMucHVzaCh0aGlzLm1lYXN1cmUpOwogICAgICAgIGlmICh0aGlzLmNhc3VhbHRpZXMpIG1lbW9QYXJ0cy5wdXNoKHRoaXMuY2FzdWFsdGllcyk7CiAgICAgICAgdmFyIG1lbW8gPSBtZW1vUGFydHMuam9pbignLCcpICsgJ+OAgic7CiAgICAgICAgdGhpcy4kc2V0KHRoaXMuYWRkRWRpdEZvcm0sICdtZW1vJywgbWVtbyk7CiAgICAgIH0KICAgIH0sCiAgICBoYW5kbGVVc2VyQ2hhbmdlTWVtbzogZnVuY3Rpb24gaGFuZGxlVXNlckNoYW5nZU1lbW8oKSB7CiAgICAgIHRoaXMudXNlckNoYW5nZWQgPSB0cnVlOwogICAgfSwKICAgIC8vIOiOt+WPlnRhYml0ZW3nmoTlrr3luqYKICAgIHNldE5hdkJhcldpZHRoOiBmdW5jdGlvbiBzZXROYXZCYXJXaWR0aCgpIHsKICAgICAgdmFyIHR5cGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICdiYXNpY3MnOwogICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIGFjdGl2ZU5hdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCIiLmNvbmNhdCh0eXBlLCAiTmF2IikpOwogICAgICAgIHZhciBhY3RpdmVCYXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWN0aXZlQmFyJyk7CiAgICAgICAgYWN0aXZlQmFyLnN0eWxlLndpZHRoID0gYWN0aXZlTmF2Lm9mZnNldFdpZHRoICsgJ3B4JzsKICAgICAgICBhY3RpdmVCYXIuc3R5bGUudHJhbnNmb3JtID0gInRyYW5zbGF0ZVgoIi5jb25jYXQoYWN0aXZlTmF2Lm9mZnNldExlZnQsICJweCkiKTsKICAgICAgfSk7CiAgICB9LAogICAgdGFiQ2hhbmdlOiBmdW5jdGlvbiB0YWJDaGFuZ2UodHlwZSkgewogICAgICB0aGlzLnNldE5hdkJhcldpZHRoKHR5cGUpOwogICAgICB2YXIgdGFyZ2V0ID0gdGhpcy4kcmVmc1siIi5jb25jYXQodHlwZSwgIkNvbnRlbnQiKV0uJHJlZnMudGFyZ2V0U2VjdGlvbjsKICAgICAgdGFyZ2V0LnNjcm9sbEludG9WaWV3KHsKICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcKICAgICAgfSk7CiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgfSwKICAgIC8vIOa7muWKqOiuvue9rm5hduagt+W8jwogICAgc2Nyb2xsVG9OYXZTdHlsZTogZnVuY3Rpb24gc2Nyb2xsVG9OYXZTdHlsZSgpIHsKICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CiAgICAgIHZhciB0YXJnZXQgPSB0aGlzLiRyZWZzWyJiYXNpY3NDb250ZW50Il0uJHJlZnMudGFyZ2V0U2VjdGlvbjsKICAgICAgdmFyIHRhcmdldDEgPSB0aGlzLiRyZWZzWyJjb250cm9sQ29udGVudCJdLiRyZWZzLnRhcmdldFNlY3Rpb247CiAgICAgIHZhciB0YXJnZXQyID0gdGhpcy4kcmVmc1siamFtQ29udGVudCJdLiRyZWZzLnRhcmdldFNlY3Rpb247CiAgICAgIHZhciBhcnIgPSBbdGFyZ2V0LCB0YXJnZXQxLCB0YXJnZXQyXTsKICAgICAgdmFyIG9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGZ1bmN0aW9uIChlbnRyaWVzKSB7CiAgICAgICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSkgewogICAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nKSB7CiAgICAgICAgICAgIF90aGlzMi5hY3RpdmVOYW1lID0gZW50cnkudGFyZ2V0LmRhdGFzZXQubmFtZTsKICAgICAgICAgICAgX3RoaXMyLnNldE5hdkJhcldpZHRoKGVudHJ5LnRhcmdldC5kYXRhc2V0Lm5hbWUpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9LCB7CiAgICAgICAgcm9vdDogbnVsbCwKICAgICAgICAvLyDpu5jorqTkuLrop4blj6MKICAgICAgICByb290TWFyZ2luOiAnMHB4JywKICAgICAgICAvLyDmoLnlhYPntKDnmoTovrnot50KICAgICAgICB0aHJlc2hvbGQ6IDAuMyAvLyDlvZMgNTAlIOeahOWFg+e0oOi/m+WFpeinhuWPo+aXtuinpuWPkQogICAgICB9KTsKICAgICAgb2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXQpOwogICAgICBvYnNlcnZlci5vYnNlcnZlKHRhcmdldDEpOwogICAgICBvYnNlcnZlci5vYnNlcnZlKHRhcmdldDIpOwogICAgfSwKICAgIGRpY3Rpb25hcnlFc2NhcGU6IGRpY3Rpb25hcnlFc2NhcGUsCiAgICBzZW5kUmVzY3VlSW5mbzogZnVuY3Rpb24gc2VuZFJlc2N1ZUluZm8oZGF0YSkgewogICAgICBjb25zb2xlLmxvZyhkYXRhKTsKICAgICAgdGhpcy50YWJsZURhdGEucHVzaChkYXRhKTsKICAgIH0sCiAgICBnZXREaWN0aW9uYXJ5QnlDb2RlOiBnZXREaWN0aW9uYXJ5QnlDb2RlLAogICAgLy8g6Lev5q615pWw5o2u5p+l6K+iCiAgICBnZXRSb2FkT3B0aW9uczogZnVuY3Rpb24gZ2V0Um9hZE9wdGlvbnMoKSB7CiAgICAgIHZhciBfdGhpczMgPSB0aGlzOwogICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUoKSB7CiAgICAgICAgdmFyIF95aWVsZCRyb2FkU2VjdGlvbkluZiwgX3lpZWxkJHJvYWRTZWN0aW9uSW5mMiwgcm93czsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMjsKICAgICAgICAgICAgICByZXR1cm4gcm9hZFNlY3Rpb25JbmZvSW50ZXIoewogICAgICAgICAgICAgICAgcGFnZUJlYW46IHsKICAgICAgICAgICAgICAgICAgcGFnZVNpemU6IC0xCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICBfeWllbGQkcm9hZFNlY3Rpb25JbmYgPSBfY29udGV4dC5zZW50OwogICAgICAgICAgICAgIF95aWVsZCRyb2FkU2VjdGlvbkluZjIgPSBfeWllbGQkcm9hZFNlY3Rpb25JbmYucm93czsKICAgICAgICAgICAgICByb3dzID0gX3lpZWxkJHJvYWRTZWN0aW9uSW5mMiA9PT0gdm9pZCAwID8gW10gOiBfeWllbGQkcm9hZFNlY3Rpb25JbmYyOwogICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJvd3MsICdyb3dzJyk7CiAgICAgICAgICAgICAgX3RoaXMzLnJvYWRPcHRpb25zID0gcm93cy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgICAgICAgIGl0ZW0ucm9hZE5hbWUgPSBpdGVtLm5hbWUgKyAnICcgKyBpdGVtLmNvZGU7CiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBpZiAoIV90aGlzMy5pZCkgewogICAgICAgICAgICAgICAgX3RoaXMzLiRzZXQoX3RoaXMzLmFkZEVkaXRGb3JtLCAncm9hZElkJywgX3RoaXMzLnJvYWRPcHRpb25zWzBdLmlkKTsKICAgICAgICAgICAgICAgIF90aGlzMy5yb2FkQ2hhbmdlKF90aGlzMy5yb2FkT3B0aW9uc1swXS5pZCk7CiAgICAgICAgICAgICAgICAvLyB0aGlzLmdldFVzZXJEYXRhKHRoaXMucm9hZE9wdGlvbnNbMF0ub3JnSWQpCiAgICAgICAgICAgICAgfQogICAgICAgICAgICBjYXNlIDg6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0LnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlKTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgLy8g6Lev5q616YCJ5oup5Y+Y5YyWCiAgICByb2FkQ2hhbmdlOiBmdW5jdGlvbiByb2FkQ2hhbmdlKHZhbHVlKSB7CiAgICAgIHZhciBfdGhpczQgPSB0aGlzOwogICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUyKCkgewogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlMiQoX2NvbnRleHQyKSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDIucHJldiA9IF9jb250ZXh0Mi5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBfdGhpczQuZ2V0VGVhbURhdGEodmFsdWUpOwogICAgICAgICAgICAgIF90aGlzNC5nZXRJbnNwZWN0RGF0YSh2YWx1ZSk7CiAgICAgICAgICAgICAgX3RoaXM0LnJvYWRJbmZvID0gX3RoaXM0LnJvYWRPcHRpb25zLmZpbmQoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmlkID09PSB2YWx1ZTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBfdGhpczQuYWRkRWRpdEZvcm0uY3JlYXRlQnkgPSAnJzsKICAgICAgICAgICAgICAvLyB0YXJnZXQgJiYgdGFyZ2V0Lm9yZ0lkICYmIHRoaXMuZ2V0VXNlckRhdGEodGFyZ2V0Lm9yZ0lkKSAvLyAg6I635Y+W5o6S54+t5L+h5oGvCiAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlMik7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIHJlZ2lzdHJhdGlvbkNoYW5nZTogZnVuY3Rpb24gcmVnaXN0cmF0aW9uQ2hhbmdlKCkgewogICAgICBpZiAodGhpcy5yb2FkSW5mbyAmJiB0aGlzLnJvYWRJbmZvLm9yZ0lkKSB7CiAgICAgICAgdGhpcy5nZXRVc2VyRGF0YSh0aGlzLnJvYWRJbmZvLm9yZ0lkKTsKICAgICAgfQogICAgfSwKICAgIGdldFVzZXJEYXRhOiBmdW5jdGlvbiBnZXRVc2VyRGF0YShvcmdJZCkgewogICAgICB2YXIgX3RoaXM1ID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlMygpIHsKICAgICAgICB2YXIgcXVlcnksIF95aWVsZCRnZXRTY2hlZHVsaW5nUCwgc3RhdGUsIF95aWVsZCRnZXRTY2hlZHVsaW5nUDIsIHZhbHVlOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlMyQoX2NvbnRleHQzKSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDMucHJldiA9IF9jb250ZXh0My5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBxdWVyeSA9IHsKICAgICAgICAgICAgICAgIG9yZ0lkOiBvcmdJZAogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSAzOwogICAgICAgICAgICAgIHJldHVybiBnZXRTY2hlZHVsaW5nUGVyc29uKHF1ZXJ5KTsKICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgIF95aWVsZCRnZXRTY2hlZHVsaW5nUCA9IF9jb250ZXh0My5zZW50OwogICAgICAgICAgICAgIHN0YXRlID0gX3lpZWxkJGdldFNjaGVkdWxpbmdQLnN0YXRlOwogICAgICAgICAgICAgIF95aWVsZCRnZXRTY2hlZHVsaW5nUDIgPSBfeWllbGQkZ2V0U2NoZWR1bGluZ1AudmFsdWU7CiAgICAgICAgICAgICAgdmFsdWUgPSBfeWllbGQkZ2V0U2NoZWR1bGluZ1AyID09PSB2b2lkIDAgPyBbXSA6IF95aWVsZCRnZXRTY2hlZHVsaW5nUDI7CiAgICAgICAgICAgICAgaWYgKHN0YXRlKSB7CiAgICAgICAgICAgICAgICBfdGhpczUudXNlck9wdGlvbnMgPSB2YWx1ZTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgX3RoaXM1LnVzZXJPcHRpb25zID0gW107CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICghX3RoaXM1LnVzZXJPcHRpb25zLmxlbmd0aCkgewogICAgICAgICAgICAgICAgX3RoaXM1LiRtZXNzYWdlLndhcm5pbmcoJ+W9k+WJjeWMuuWfn+S4i+ayoeacieaOkuePreS6uuWRmO+8jOivt+S4uuW9k+WJjeWMuuWfn+aOkuePre+8gScpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgY2FzZSA5OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWUzKTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgLy8g6YCa6L+H6Lev5q615L+h5oGv6I635Y+W5beh5p+l5pWR5o+06Zif5LyN5L+h5oGvCiAgICBnZXRUZWFtRGF0YTogZnVuY3Rpb24gZ2V0VGVhbURhdGEodmFsdWUpIHsKICAgICAgdmFyIF90aGlzNiA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTQoKSB7CiAgICAgICAgdmFyIF95aWVsZCR0ZWFtRGF0YSwgX3lpZWxkJHRlYW1EYXRhJHJvd3MsIHJvd3M7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWU0JChfY29udGV4dDQpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0NC5wcmV2ID0gX2NvbnRleHQ0Lm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF9jb250ZXh0NC5uZXh0ID0gMjsKICAgICAgICAgICAgICByZXR1cm4gdGVhbURhdGEocmVmaW5lUmVxdWVzdEJvZHkoewogICAgICAgICAgICAgICAgcXVlcnlzOiBbewogICAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdJTicsCiAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiAnci5pZF8nLAogICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiAnRVFVQUwnLAogICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogJ3QudHlwZV8nLAogICAgICAgICAgICAgICAgICB2YWx1ZTogJzInCiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgIH0pLCAnYWRkRWRpdCcpOwogICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgX3lpZWxkJHRlYW1EYXRhID0gX2NvbnRleHQ0LnNlbnQ7CiAgICAgICAgICAgICAgX3lpZWxkJHRlYW1EYXRhJHJvd3MgPSBfeWllbGQkdGVhbURhdGEucm93czsKICAgICAgICAgICAgICByb3dzID0gX3lpZWxkJHRlYW1EYXRhJHJvd3MgPT09IHZvaWQgMCA/IFtdIDogX3lpZWxkJHRlYW1EYXRhJHJvd3M7CiAgICAgICAgICAgICAgX3RoaXM2LnRlYW1PcHRpb25zID0gcm93czsKICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDQuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWU0KTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgLy8g6YCa6L+H6Lev5q615L+h5oGv6I635Y+W5beh5p+l5pWR5o+06Zif5LyN5L+h5oGvCiAgICBnZXRJbnNwZWN0RGF0YTogZnVuY3Rpb24gZ2V0SW5zcGVjdERhdGEodmFsdWUpIHsKICAgICAgdmFyIF90aGlzNyA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTUoKSB7CiAgICAgICAgdmFyIF95aWVsZCR0ZWFtRGF0YTIsIF95aWVsZCR0ZWFtRGF0YTIkcm93cywgcm93czsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTUkKF9jb250ZXh0NSkgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ1LnByZXYgPSBfY29udGV4dDUubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgX2NvbnRleHQ1Lm5leHQgPSAyOwogICAgICAgICAgICAgIHJldHVybiB0ZWFtRGF0YShyZWZpbmVSZXF1ZXN0Qm9keSh7CiAgICAgICAgICAgICAgICBxdWVyeXM6IFt7CiAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogJ0lOJywKICAgICAgICAgICAgICAgICAgcHJvcGVydHk6ICdyLmlkXycsCiAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZQogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdFUVVBTCcsCiAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiAndC50eXBlXycsCiAgICAgICAgICAgICAgICAgIHZhbHVlOiAnMScKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgfSksICdhZGRFZGl0Jyk7CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICBfeWllbGQkdGVhbURhdGEyID0gX2NvbnRleHQ1LnNlbnQ7CiAgICAgICAgICAgICAgX3lpZWxkJHRlYW1EYXRhMiRyb3dzID0gX3lpZWxkJHRlYW1EYXRhMi5yb3dzOwogICAgICAgICAgICAgIHJvd3MgPSBfeWllbGQkdGVhbURhdGEyJHJvd3MgPT09IHZvaWQgMCA/IFtdIDogX3lpZWxkJHRlYW1EYXRhMiRyb3dzOwogICAgICAgICAgICAgIF90aGlzNy5pbnNwZWN0T3B0aW9ucyA9IHJvd3M7CiAgICAgICAgICAgIGNhc2UgNjoKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ1LnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlNSk7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIC8vIOmYn+S8jemAieaLqQogICAgdGVhbUlkQ2hhbmdlOiBmdW5jdGlvbiB0ZWFtSWRDaGFuZ2UodHlwZSkgewogICAgICB2YXIgX3RoaXMkJHJlZnMsIF90aGlzJCRyZWZzMjsKICAgICAgdGhpc1t0eXBlXS50ZWFtRnVsbElkID0gKChfdGhpcyQkcmVmcyA9IHRoaXMuJHJlZnNbIiIuY29uY2F0KHR5cGUsICJDYXNjYWRlciIpXSkgPT09IG51bGwgfHwgX3RoaXMkJHJlZnMgPT09IHZvaWQgMCB8fCAoX3RoaXMkJHJlZnMgPSBfdGhpcyQkcmVmcy5nZXRDaGVja2VkTm9kZXMoKVswXSkgPT09IG51bGwgfHwgX3RoaXMkJHJlZnMgPT09IHZvaWQgMCB8fCAoX3RoaXMkJHJlZnMgPSBfdGhpcyQkcmVmcy5kYXRhKSA9PT0gbnVsbCB8fCBfdGhpcyQkcmVmcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkJHJlZnMucGF0aCkgfHwgJyc7CiAgICAgIHRoaXNbdHlwZV0udGVhbUlkID0gKChfdGhpcyQkcmVmczIgPSB0aGlzLiRyZWZzWyIiLmNvbmNhdCh0eXBlLCAiQ2FzY2FkZXIiKV0pID09PSBudWxsIHx8IF90aGlzJCRyZWZzMiA9PT0gdm9pZCAwIHx8IChfdGhpcyQkcmVmczIgPSBfdGhpcyQkcmVmczIuZ2V0Q2hlY2tlZE5vZGVzKClbMF0pID09PSBudWxsIHx8IF90aGlzJCRyZWZzMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkJHJlZnMyLnZhbHVlKSB8fCAnJzsKICAgIH0sCiAgICAvLyDmiZPlvIDpobXpnaLmiafooYwKICAgIG9wZW5QYWdlOiBmdW5jdGlvbiBvcGVuUGFnZSgpIHsKICAgICAgdGhpcy5nZXRSb2FkT3B0aW9ucygpOwogICAgfSwKICAgIC8vIOWxleekuuW8ueWxggogICAgc2hvd0RpYWxvZzogZnVuY3Rpb24gc2hvd0RpYWxvZyhkaWFsb2dOYW1lKSB7CiAgICAgIGlmICghZGlhbG9nTmFtZSkgcmV0dXJuOwogICAgICB0aGlzW2RpYWxvZ05hbWUgKyAnRGlhbG9nJ10gPSB0cnVlOwogICAgfSwKICAgIHNob3dBcHBvaW50RGlhbG9nOiBmdW5jdGlvbiBzaG93QXBwb2ludERpYWxvZygpIHsKICAgICAgdmFyIF90aGlzOCA9IHRoaXM7CiAgICAgIHRoaXMuYmFzZUluZm8gPSB0aGlzLiRyZWZzLmJhc2ljc0NvbnRlbnQuc2VuZEJhc2VEYXRhKCk7CiAgICAgIHRoaXMuJHJlZnMuYWRkRWRpdEZvcm0udmFsaWRhdGUoLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgICB2YXIgX3JlZiA9IF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlNih2YWxpZCwgb2JqZWN0KSB7CiAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTYkKF9jb250ZXh0NikgewogICAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDYucHJldiA9IF9jb250ZXh0Ni5uZXh0KSB7CiAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkgewogICAgICAgICAgICAgICAgICBfdGhpczguJG1lc3NhZ2Uud2FybmluZygiXHU2NzA5Ii5jb25jYXQoT2JqZWN0LmtleXMob2JqZWN0KS5sZW5ndGggKyAoX3RoaXM4LmJhc2VJbmZvLmZpZWxkTnVtIHx8IDApLCAiXHU0RTJBXHU1QjU3XHU2QkI1XHU2NzJBXHU5MDFBXHU4RkM3XHU2ODIxXHU5QThDXHVGRjBDXHU4QkY3XHU2QjYzXHU3ODZFXHU1ODZCXHU1MTk5XHU4ODY4XHU1MzU1XHU1MTg1XHU1QkI5XHUzMDAyIikpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgaWYgKF90aGlzOC5iYXNlSW5mby5maWVsZE51bSkgewogICAgICAgICAgICAgICAgICAgIF90aGlzOC4kbWVzc2FnZS53YXJuaW5nKCJcdTY3MDkiLmNvbmNhdChfdGhpczguYmFzZUluZm8uZmllbGROdW0sICJcdTRFMkFcdTVCNTdcdTZCQjVcdTY3MkFcdTkwMUFcdThGQzdcdTY4MjFcdTlBOENcdUZGMENcdThCRjdcdTZCNjNcdTc4NkVcdTU4NkJcdTUxOTlcdTg4NjhcdTUzNTVcdTUxODVcdTVCQjlcdTMwMDIiKSk7CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgX3RoaXM4LmFwcG9pbnREaWFsb2cgPSB0cnVlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ2LnN0b3AoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbGxlZTYpOwogICAgICAgIH0pKTsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKF94LCBfeDIpIHsKICAgICAgICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgfTsKICAgICAgfSgpKTsKICAgIH0sCiAgICBvZmZQYWdlOiBmdW5jdGlvbiBvZmZQYWdlKCkgewogICAgICB0aGlzLmNoYW5nZVBhZ2UoJ1RhYmxlUGFnZScsICdlZGl0Jyk7CiAgICB9LAogICAgLy8g5YWz6Zet6aG16Z2i5omn6KGMCiAgICBjbG9zZVBhZ2U6IGZ1bmN0aW9uIGNsb3NlUGFnZSgpIHsKICAgICAgdmFyIF90aGlzOSA9IHRoaXM7CiAgICAgIHZhciBwdWJTdWIgPSB0aGlzLnB1YlN1YiwKICAgICAgICBhZGRFZGl0UnVsZXMgPSB0aGlzLmFkZEVkaXRSdWxlcywKICAgICAgICByb2FkT3B0aW9ucyA9IHRoaXMucm9hZE9wdGlvbnM7CiAgICAgIC8vIOmHjee9rue7hOS7tuaVsOaNrgogICAgICBPYmplY3QuYXNzaWduKHRoaXMuJGRhdGEsIHRoaXMuJG9wdGlvbnMuZGF0YS5jYWxsKHRoaXMpLCB7CiAgICAgICAgcHViU3ViOiBwdWJTdWIsCiAgICAgICAgYWRkRWRpdFJ1bGVzOiBhZGRFZGl0UnVsZXMsCiAgICAgICAgcm9hZE9wdGlvbnM6IHJvYWRPcHRpb25zCiAgICAgIH0pOwogICAgICAvLyB0aGlzLiRyZWZzLm1pbmVNYXA/LnJlc2V0TWFwKF8gPT4gdGhpcy5tYXBMb2FkaW5nID0gZmFsc2UpIC8vIOmHjee9ruWcsOWbvgogICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoXykgewogICAgICAgIF90aGlzOS4kcmVmcy5hZGRFZGl0Rm9ybS4kZWwuc2Nyb2xsVG9wID0gMDsKICAgICAgICBfdGhpczkuJHJlZnMuYWRkRWRpdEZvcm0uY2xlYXJWYWxpZGF0ZSgpOwogICAgICB9KTsKICAgIH0sCiAgICAvLyDojrflj5bor6bmg4UKICAgIGdldERldGFpbDogZnVuY3Rpb24gZ2V0RGV0YWlsKGlkKSB7CiAgICAgIHZhciBfdGhpczEwID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlNygpIHsKICAgICAgICB2YXIgX3RoaXMxMCRhZGRFZGl0Rm9ybSwgX3RoaXMxMCRhZGRFZGl0Rm9ybSRyLCByb2FkSWQsIF90aGlzMTAkYWRkRWRpdEZvcm0kcCwgcGVnU1ZhbCwgX3RoaXMxMCRhZGRFZGl0Rm9ybSRwMiwgcGVnRVZhbCwgc3RhcnRQZWdBcnIsIGVuZFBlZ0FycjsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTckKF9jb250ZXh0NykgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ3LnByZXYgPSBfY29udGV4dDcubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgX2NvbnRleHQ3LnByZXYgPSAwOwogICAgICAgICAgICAgIF9jb250ZXh0Ny5uZXh0ID0gMzsKICAgICAgICAgICAgICByZXR1cm4gdGFibGVEZXRhaWwoaWQpOwogICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgX3RoaXMxMC5hZGRFZGl0Rm9ybSA9IF9jb250ZXh0Ny5zZW50OwogICAgICAgICAgICAgIF90aGlzMTAkYWRkRWRpdEZvcm0gPSBfdGhpczEwLmFkZEVkaXRGb3JtLCBfdGhpczEwJGFkZEVkaXRGb3JtJHIgPSBfdGhpczEwJGFkZEVkaXRGb3JtLnJvYWRJZCwgcm9hZElkID0gX3RoaXMxMCRhZGRFZGl0Rm9ybSRyID09PSB2b2lkIDAgPyAnJyA6IF90aGlzMTAkYWRkRWRpdEZvcm0kciwgX3RoaXMxMCRhZGRFZGl0Rm9ybSRwID0gX3RoaXMxMCRhZGRFZGl0Rm9ybS5wZWdTVmFsLCBwZWdTVmFsID0gX3RoaXMxMCRhZGRFZGl0Rm9ybSRwID09PSB2b2lkIDAgPyAnJyA6IF90aGlzMTAkYWRkRWRpdEZvcm0kcCwgX3RoaXMxMCRhZGRFZGl0Rm9ybSRwMiA9IF90aGlzMTAkYWRkRWRpdEZvcm0ucGVnRVZhbCwgcGVnRVZhbCA9IF90aGlzMTAkYWRkRWRpdEZvcm0kcDIgPT09IHZvaWQgMCA/ICcnIDogX3RoaXMxMCRhZGRFZGl0Rm9ybSRwMjsKICAgICAgICAgICAgICBpZiAocGVnU1ZhbCkgewogICAgICAgICAgICAgICAgc3RhcnRQZWdBcnIgPSBwZWdTVmFsLnNwbGl0KCcrJyk7CiAgICAgICAgICAgICAgICBfdGhpczEwLmFkZEVkaXRGb3JtLnN0YXJ0UGVnID0gc3RhcnRQZWdBcnJbMF0uc2xpY2UoMSk7CiAgICAgICAgICAgICAgICBfdGhpczEwLmFkZEVkaXRGb3JtLnN0YXJ0UGVnQWRkID0gc3RhcnRQZWdBcnJbMV07CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChwZWdFVmFsKSB7CiAgICAgICAgICAgICAgICBlbmRQZWdBcnIgPSBwZWdFVmFsLnNwbGl0KCcrJyk7CiAgICAgICAgICAgICAgICBfdGhpczEwLmFkZEVkaXRGb3JtLmVuZFBlZyA9IGVuZFBlZ0FyclswXS5zbGljZSgxKTsKICAgICAgICAgICAgICAgIF90aGlzMTAuYWRkRWRpdEZvcm0uZW5kUGVnQWRkID0gZW5kUGVnQXJyWzFdOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfdGhpczEwLnJvYWRDaGFuZ2Uocm9hZElkKTsKICAgICAgICAgICAgY2FzZSA4OgogICAgICAgICAgICAgIF9jb250ZXh0Ny5wcmV2ID0gODsKICAgICAgICAgICAgICBfdGhpczEwLmZvcm1Mb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ny5maW5pc2goOCk7CiAgICAgICAgICAgIGNhc2UgMTE6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ny5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTcsIG51bGwsIFtbMCwsIDgsIDExXV0pOwogICAgICB9KSkoKTsKICAgIH0sCiAgICAvLyDkv53lrZgKICAgIGhhbmRsZVNhdmU6IGZ1bmN0aW9uIGhhbmRsZVNhdmUoKSB7CiAgICAgIHZhciBfdGhpczExID0gdGhpczsKICAgICAgdmFyIGJhc2ljZURhdGEgPSB0aGlzLiRyZWZzLmJhc2ljc0NvbnRlbnQuc2VuZEJhc2VEYXRhKCk7CiAgICAgIGNvbnNvbGUubG9nKGJhc2ljZURhdGEsICdiYXNpY2VEYXRhJyk7CiAgICAgIHRoaXMuJHJlZnMuYWRkRWRpdEZvcm0udmFsaWRhdGUoLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgICB2YXIgX3JlZjIgPSBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTgodmFsaWQsIG9iamVjdCkgewogICAgICAgICAgdmFyIGRhdGEsIG15SW50ZXJGYWNlLCBfeWllbGQkbXlJbnRlckZhY2UsIHN0YXRlLCBtZXNzYWdlLCB2YWx1ZTsKICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlOCQoX2NvbnRleHQ4KSB7CiAgICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0OC5wcmV2ID0gX2NvbnRleHQ4Lm5leHQpIHsKICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICBpZiAodmFsaWQpIHsKICAgICAgICAgICAgICAgICAgX2NvbnRleHQ4Lm5leHQgPSA0OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF90aGlzMTEuJG1lc3NhZ2Uud2FybmluZygiXHU2NzA5Ii5jb25jYXQoT2JqZWN0LmtleXMob2JqZWN0KS5sZW5ndGggKyAoYmFzaWNlRGF0YS5maWVsZE51bSB8fCAwKSwgIlx1NEUyQVx1NUI1N1x1NkJCNVx1NjcyQVx1OTAxQVx1OEZDN1x1NjgyMVx1OUE4Q1x1RkYwQ1x1OEJGN1x1NkI2M1x1Nzg2RVx1NTg2Qlx1NTE5OVx1ODg2OFx1NTM1NVx1NTE4NVx1NUJCOVx1MzAwMiIpKTsKICAgICAgICAgICAgICAgIF9jb250ZXh0OC5uZXh0ID0gMjQ7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICBpZiAoIWJhc2ljZURhdGEuZmllbGROdW0pIHsKICAgICAgICAgICAgICAgICAgX2NvbnRleHQ4Lm5leHQgPSA4OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF90aGlzMTEuJG1lc3NhZ2Uud2FybmluZygiXHU2NzA5Ii5jb25jYXQoYmFzaWNlRGF0YS5maWVsZE51bSwgIlx1NEUyQVx1NUI1N1x1NkJCNVx1NjcyQVx1OTAxQVx1OEZDN1x1NjgyMVx1OUE4Q1x1RkYwQ1x1OEJGN1x1NkI2M1x1Nzg2RVx1NTg2Qlx1NTE5OVx1ODg2OFx1NTM1NVx1NTE4NVx1NUJCOVx1MzAwMiIpKTsKICAgICAgICAgICAgICAgIF9jb250ZXh0OC5uZXh0ID0gMjQ7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlIDg6CiAgICAgICAgICAgICAgICBpZiAoIV90aGlzMTEuc2F2ZUxvYWRpbmcpIHsKICAgICAgICAgICAgICAgICAgX2NvbnRleHQ4Lm5leHQgPSAxMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ4LmFicnVwdCgicmV0dXJuIik7CiAgICAgICAgICAgICAgY2FzZSAxMDoKICAgICAgICAgICAgICAgIF90aGlzMTEuc2F2ZUxvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoX3RoaXMxMS5hZGRFZGl0Rm9ybSkpOwogICAgICAgICAgICAgICAgbXlJbnRlckZhY2UgPSBfdGhpczExLmlkID8gdGFibGVFZGl0IDogdGFibGVBZGQ7CiAgICAgICAgICAgICAgICBfY29udGV4dDgucHJldiA9IDEzOwogICAgICAgICAgICAgICAgX2NvbnRleHQ4Lm5leHQgPSAxNjsKICAgICAgICAgICAgICAgIHJldHVybiBteUludGVyRmFjZShfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGRhdGEpLCBiYXNpY2VEYXRhKSk7CiAgICAgICAgICAgICAgY2FzZSAxNjoKICAgICAgICAgICAgICAgIF95aWVsZCRteUludGVyRmFjZSA9IF9jb250ZXh0OC5zZW50OwogICAgICAgICAgICAgICAgc3RhdGUgPSBfeWllbGQkbXlJbnRlckZhY2Uuc3RhdGU7CiAgICAgICAgICAgICAgICBtZXNzYWdlID0gX3lpZWxkJG15SW50ZXJGYWNlLm1lc3NhZ2U7CiAgICAgICAgICAgICAgICB2YWx1ZSA9IF95aWVsZCRteUludGVyRmFjZS52YWx1ZTsKICAgICAgICAgICAgICAgIGlmIChzdGF0ZSkgewogICAgICAgICAgICAgICAgICBtZXNzYWdlID0gX3RoaXMxMS5pZCA/ICfnvJbovpEnIDogJ+aWsOWinic7CiAgICAgICAgICAgICAgICAgIF90aGlzMTEuJG1lc3NhZ2Uuc3VjY2VzcygiXHU0RkREXHU1QjU4XHU2MjEwXHU1MjlGIik7CiAgICAgICAgICAgICAgICAgIF90aGlzMTEuJHJvdXRlci5wdXNoKHsKICAgICAgICAgICAgICAgICAgICBwYXRoOiAnL3BsYXRMYXlvdXQvcGF0cm9sQW5kUmVzY3VlL2NvbW1hbmREaXNwYXRjaC9FdmVudE1hbmFnZW1lbnQnCiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNhc2UgMjE6CiAgICAgICAgICAgICAgICBfY29udGV4dDgucHJldiA9IDIxOwogICAgICAgICAgICAgICAgX3RoaXMxMS5zYXZlTG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0OC5maW5pc2goMjEpOwogICAgICAgICAgICAgIGNhc2UgMjQ6CiAgICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDguc3RvcCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBfY2FsbGVlOCwgbnVsbCwgW1sxMywsIDIxLCAyNF1dKTsKICAgICAgICB9KSk7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeDMsIF94NCkgewogICAgICAgICAgcmV0dXJuIF9yZWYyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgfTsKICAgICAgfSgpKTsKICAgIH0sCiAgICBnZXRUcmFmZmljRGF0YTogZnVuY3Rpb24gZ2V0VHJhZmZpY0RhdGEoZGF0YSkgewogICAgICB2YXIgbWVhc3VyZTsKICAgICAgaWYgKGRhdGEubGVuZ3RoID4gMCkgewogICAgICAgIGNvbnNvbGUubG9nKGRhdGEsICfkuqTpgJrnrqHliLbmlbDmja4nKTsKICAgICAgICB0aGlzLmFkZEVkaXRGb3JtLnRyYWZmaWNDb250cm9scyA9IGRhdGE7CiAgICAgICAgdmFyIGNvbnRyb2xUaW1lID0gbnVsbCwKICAgICAgICAgIHR5cGVMaXN0ID0gW107CiAgICAgICAgdmFyIHNpbmdsZVR5cGUgPSBbJzEnLCAnMycsICc1J107CiAgICAgICAgdmFyIGd6Y3MgPSB0aGlzLmdldERpY3Rpb25hcnlCeUNvZGUoJ2d6Y3MnKTsKICAgICAgICBkYXRhLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgIGlmIChpdGVtLmNvbnRyb2xUaW1lKSB7CiAgICAgICAgICAgIGlmIChjb250cm9sVGltZSkgewogICAgICAgICAgICAgIHZhciB0ZW1wVGltZSA9IG1vbWVudChpdGVtLmNvbnRyb2xUaW1lKTsKICAgICAgICAgICAgICBpZiAoY29udHJvbFRpbWUuaXNCZWZvcmUodGVtcFRpbWUpKSB7CiAgICAgICAgICAgICAgICBjb250cm9sVGltZSA9IHRlbXBUaW1lOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjb250cm9sVGltZSA9IG1vbWVudChpdGVtLmNvbnRyb2xUaW1lKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGl0ZW0ubWVhc3VyZVR5cGUpIHsKICAgICAgICAgICAgaWYgKHNpbmdsZVR5cGUuaW5jbHVkZXMoaXRlbS5tZWFzdXJlVHlwZSkpIHsKICAgICAgICAgICAgICB2YXIgdGVtcFR5cGUgPSBkaWN0aW9uYXJ5RXNjYXBlKCdnemNzJywgaXRlbS5tZWFzdXJlVHlwZSk7CiAgICAgICAgICAgICAgaWYgKCF0eXBlTGlzdC5pbmNsdWRlcyh0ZW1wVHlwZSkpIHsKICAgICAgICAgICAgICAgIHR5cGVMaXN0LnB1c2godGVtcFR5cGUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLm1lYXN1cmVDb250ZW50KSB7CiAgICAgICAgICAgICAgdmFyIHRhcmdldFN1YkRpY3QgPSBnemNzLmZpbmQoZnVuY3Rpb24gKGRpY3QpIHsKICAgICAgICAgICAgICAgIHJldHVybiBkaWN0LnZhbHVlID09PSBpdGVtLm1lYXN1cmVUeXBlOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHZhciBnemNzeHFPcHRpb25zID0gdGFyZ2V0U3ViRGljdCAmJiB0YXJnZXRTdWJEaWN0Lmxvd2VyRGljID8gdGFyZ2V0U3ViRGljdC5sb3dlckRpYy5nemNzeHEgOiBbXTsKICAgICAgICAgICAgICBpdGVtLm1lYXN1cmVDb250ZW50LnNwbGl0KCcsJykuZm9yRWFjaChmdW5jdGlvbiAoY29udGVudCkgewogICAgICAgICAgICAgICAgdmFyIHRlbXBUeXBlID0gZ3pjc3hxT3B0aW9ucy5maW5kKGZ1bmN0aW9uIChkaWN0KSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBkaWN0LnZhbHVlID09PSBjb250ZW50OwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICBpZiAodGVtcFR5cGUgJiYgIXR5cGVMaXN0LmluY2x1ZGVzKHRlbXBUeXBlLm5hbWUpKSB7CiAgICAgICAgICAgICAgICAgIHR5cGVMaXN0LnB1c2godGVtcFR5cGUubmFtZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICB2YXIgZm9ybWF0dGVkQ29udHJvbFRpbWUgPSBjb250cm9sVGltZSA/ICJcdUZGMENcdTk4ODRcdThCQTEiLmNvbmNhdChjb250cm9sVGltZS5mb3JtYXQoJ03mnIhE5pelSEjml7ZtbeWIhicpLCAiXHU2MDYyXHU1OTBEXHU2QjYzXHU1RTM4IikgOiAnJzsKICAgICAgICBtZWFzdXJlID0gKHR5cGVMaXN0Lmxlbmd0aCA/IHR5cGVMaXN0LmpvaW4oJ+OAgScpIDogJycpICsgZm9ybWF0dGVkQ29udHJvbFRpbWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbWVhc3VyZSA9ICfml6AnOwogICAgICB9CiAgICAgIHRoaXMuaGFuZGxlTWVtb0NoYW5nZSh7CiAgICAgICAgbWVhc3VyZTogbWVhc3VyZQogICAgICB9KTsKICAgIH0sCiAgICBnZXRKYW1EYXRhOiBmdW5jdGlvbiBnZXRKYW1EYXRhKGRhdGEpIHsKICAgICAgdmFyIG1lYXN1cmU7CiAgICAgIGlmIChkYXRhLmxlbmd0aCA+IDApIHsKICAgICAgICBjb25zb2xlLmxvZyhkYXRhLCAn5Lqk6YCa5oul5aC1Jyk7CiAgICAgICAgdGhpcy5hZGRFZGl0Rm9ybS50cmFmZmljQ29uZ2VzdGlvbnMgPSBkYXRhOwogICAgICAgIHZhciBjb250cm9sVGltZSA9IG51bGwsCiAgICAgICAgICB0eXBlTGlzdCA9IFtdOwogICAgICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgaWYgKGl0ZW0uY29udHJvbFRpbWUpIHsKICAgICAgICAgICAgaWYgKGNvbnRyb2xUaW1lKSB7CiAgICAgICAgICAgICAgdmFyIHRlbXBUaW1lID0gbW9tZW50KGl0ZW0uY29udHJvbFRpbWUpOwogICAgICAgICAgICAgIGlmIChjb250cm9sVGltZS5pc0JlZm9yZSh0ZW1wVGltZSkpIHsKICAgICAgICAgICAgICAgIGNvbnRyb2xUaW1lID0gdGVtcFRpbWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvbnRyb2xUaW1lID0gbW9tZW50KGl0ZW0uY29udHJvbFRpbWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoaXRlbS5tZWFzdXJlKSB7CiAgICAgICAgICAgIHZhciB0ZW1wVHlwZSA9IGRpY3Rpb25hcnlFc2NhcGUoJ2N6Y3MnLCBpdGVtLm1lYXN1cmUpOwogICAgICAgICAgICBpZiAoIXR5cGVMaXN0LmluY2x1ZGVzKHRlbXBUeXBlKSkgewogICAgICAgICAgICAgIHR5cGVMaXN0LnB1c2godGVtcFR5cGUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgdmFyIGZvcm1hdHRlZENvbnRyb2xUaW1lID0gY29udHJvbFRpbWUgPyAiXHVGRjBDXHU5ODg0XHU4QkExIi5jb25jYXQoY29udHJvbFRpbWUuZm9ybWF0KCdN5pyIROaXpUhI5pe2bW3liIYnKSwgIlx1NjA2Mlx1NTkwRFx1NkI2M1x1NUUzOCIpIDogJyc7CiAgICAgICAgbWVhc3VyZSA9ICh0eXBlTGlzdC5sZW5ndGggPyB0eXBlTGlzdC5qb2luKCfjgIEnKSA6ICcnKSArIGZvcm1hdHRlZENvbnRyb2xUaW1lOwogICAgICB9IGVsc2UgewogICAgICAgIG1lYXN1cmUgPSAn5pegJzsKICAgICAgfQogICAgICB0aGlzLmhhbmRsZU1lbW9DaGFuZ2UoewogICAgICAgIG1lYXN1cmU6IG1lYXN1cmUKICAgICAgfSk7CiAgICB9LAogICAgaGFuZGxlUGFnZTogZnVuY3Rpb24gaGFuZGxlUGFnZSgpIHsKICAgICAgdGhpcy4kcm91dGVyLnB1c2goewogICAgICAgIG5hbWU6ICdzaGlmdEluZm9ybWF0aW9uTWFuYWdlbWVudCcKICAgICAgfSk7CiAgICB9LAogICAgLy8g5pS55Y+Y6aG16Z2iCiAgICBjaGFuZ2VQYWdlOiBmdW5jdGlvbiBjaGFuZ2VQYWdlKCkgewogICAgICB2YXIgcGFnZU5hbWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICcnOwogICAgICB2YXIgdHlwZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJyc7CiAgICAgIGlmICghcGFnZU5hbWUpIHJldHVybjsKICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlUGFnZScsIHBhZ2VOYW1lLCBmdW5jdGlvbiAoXykgewogICAgICAgIFB1YlN1Yi5wdWJsaXNoKHBhZ2VOYW1lLCB7CiAgICAgICAgICB0eXBlOiB0eXBlCiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfQogIH0sCiAgYmVmb3JlRGVzdHJveTogZnVuY3Rpb24gYmVmb3JlRGVzdHJveSgpIHsKICAgIC8vIOWcqOe7hOS7tumUgOavgeS5i+WJjSDmuIXpmaTorqLpmIXmtojmga8KICAgIFB1YlN1Yi51bnN1YnNjcmliZSh0aGlzLnB1YlN1Yik7CiAgfQp9Ow=="},null]}