{"remainingRequest":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\dataShare-fvue\\src\\views\\dataCollect\\dataCollectCompany\\dataSourceItem\\DetailDialog.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\src\\views\\dataCollect\\dataCollectCompany\\dataSourceItem\\DetailDialog.vue","mtime":1734375359944},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\babel.config.js","mtime":1733906004399},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9yZWdlbmVyYXRvclJ1bnRpbWUgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UvZGF0YVNoYXJlLWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3JlZ2VuZXJhdG9yUnVudGltZS5qcyI7CmltcG9ydCBfYXN5bmNUb0dlbmVyYXRvciBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS9kYXRhU2hhcmUtZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyI7CmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gIkQ6L2plbmtpbnMvd29ya3NwYWNlL2RhdGFTaGFyZS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuaW5jbHVkZXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc3BsaWNlLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAuZG90LWFsbC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnN0aWNreS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50ZXN0LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRvLXN0cmluZy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5pbmNsdWRlcy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy50cmltLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmNvbnN0cnVjdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLmZvci1lYWNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXNuZXh0Lml0ZXJhdG9yLm1hcC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2guanMiOwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwoKaW1wb3J0IGRpYWxvZ01peGluIGZyb20gJ0AvbWl4aW5zL2RpYWxvZy5qcyc7CmltcG9ydCBNb2RlbEhlYWRlciBmcm9tICcuL01vZGVsSGVhZGVyJzsKaW1wb3J0IE1vZGVsRW50cyBmcm9tICcuL01vZGVsRW50cyc7CmltcG9ydCBNb2RlbEF0dHIgZnJvbSAnLi9Nb2RlbEF0dHInOwppbXBvcnQgZm9ybSBmcm9tICdAL2FwaS9mb3JtLmpzJzsKaW1wb3J0IHV0aWwgZnJvbSAnQC9ob3RlbnQtdWktdXRpbC5qcyc7CmltcG9ydCByZXEgZnJvbSAnQC9yZXF1ZXN0LmpzJzsKaW1wb3J0IG1haW4gZnJvbSAnQC9tYWluLmpzJzsKZXhwb3J0IGRlZmF1bHQgewogIG5hbWU6ICdDb21wYW55RGlhbG9nJywKICBjb21wb25lbnRzOiB7CiAgICBNb2RlbEhlYWRlcjogTW9kZWxIZWFkZXIsCiAgICBNb2RlbEVudHM6IE1vZGVsRW50cywKICAgIE1vZGVsQXR0cjogTW9kZWxBdHRyCiAgfSwKICBtaXhpbnM6IFtkaWFsb2dNaXhpbl0sCiAgcHJvcHM6IHsKICAgIHNlbGVjdGVkUm93czogewogICAgICB0eXBlOiBBcnJheSwKICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgICB9CiAgICB9CiAgfSwKICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkgewogICAgcmV0dXJuIHsKICAgICAgZm9ybURhdGE6IHsKICAgICAgICBhbGlhczogJycsCiAgICAgICAgY2F0ZWdvcnlJZDogJycsCiAgICAgICAgY2F0ZWdvcnlOYW1lOiAnJywKICAgICAgICBkZXBsb3llZDogMCwKICAgICAgICBkZXNjcmlwdGlvbjogJycsCiAgICAgICAgZHNOYW1lOiAnJywKICAgICAgICBpc0NyZWF0ZVRhYmxlOiAnJywKICAgICAgICBpc0V4dGVybmFsOiAnJywKICAgICAgICBzdGF0dXM6ICdub3JtYWwnLAogICAgICAgIHN1cHBvcnREYjogdHJ1ZSwKICAgICAgICBlbnRzOiBbXQogICAgICB9LAogICAgICBydWxlczogewogICAgICAgIG5hbWU6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICfotYTmupDlkI3np7DkuI3og73kuLrnqbonCiAgICAgICAgfV0sCiAgICAgICAgaXNfYWN0aXZlOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAn6LWE5rqQ57G75Z6L5LiN6IO95Li656m6JwogICAgICAgIH1dLAogICAgICAgIHR5cGU6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICfmnaXmupDmoLzlvI/kuI3og73kuLrnqbonCiAgICAgICAgfV0sCiAgICAgICAgaXNfcHVibGlzaDogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogJ+aYr+WQpuWPkeW4g+S4jeiDveS4uuepuicKICAgICAgICB9XQogICAgICB9LAogICAgICBsb2FkaW5nOiBmYWxzZSwKICAgICAgYXNpZGVTaG93OiB0cnVlLAogICAgICBlbnRJbmRleDogMCwKICAgICAgZ3JhbmRTb25JbmRleDogLTEsCiAgICAgIG9wZW5HcmFuZFNvbkF0dHI6IGZhbHNlLAogICAgICBhdHRyVGFibGVEYXRhOiBbXSwKICAgICAgbWVzc2FnZUNhdGlvbnM6IHt9CiAgICB9OwogIH0sCiAgbW91bnRlZDogZnVuY3Rpb24gbW91bnRlZCgpIHt9LAogIG1ldGhvZHM6IHsKICAgIC8qKg0KICAgICAqIEBkZXNjcmlwdGlvbjogZGlhbG9n5q+P5qyh5pi+56S65pe26Kem5Y+R55qEaW5pdOaWueazlQ0KICAgICAqIEBwYXJhbSB7Kn0gZGF0YSDkvKDlhaVkYXRhDQogICAgICogQHJldHVybiB7Kn0NCiAgICAgKi8KICAgIGluaXREYXRhOiBmdW5jdGlvbiBpbml0RGF0YShkYXRhKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICB2YXIgb3JnRm9ybSA9IHRoaXMuJG9wdGlvbnMuZGF0YSgpLmZvcm1EYXRhOwogICAgICB0aGlzLmZvcm1EYXRhID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBvcmdGb3JtKSwgZGF0YSk7CiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICBfdGhpczIuJHJlZnMuZm9ybS5jbGVhclZhbGlkYXRlKCk7CiAgICAgIH0pOwogICAgfSwKICAgIC8vIOihqOWNleaVsOaNruWKoOi9vQogICAgZ2V0Rm9ybURhdGE6IGZ1bmN0aW9uIGdldEZvcm1EYXRhKCkgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKICAgICAgaWYgKHRoaXMuZGF0YVZpZXcuaWQpIHsKICAgICAgICBmb3JtLmdldEVudERhdGEodGhpcy5kYXRhVmlldy5pZCwgZnVuY3Rpb24gKHJlc3ApIHsKICAgICAgICAgIHJlc3AuZGF0YS5lbnRzLmZvckVhY2goZnVuY3Rpb24gKGVudERhdGEsIGluZGV4KSB7CiAgICAgICAgICAgIGlmIChlbnREYXRhLmlzRXh0ZXJuYWwgPT0gJzEnICYmIGluZGV4ID09IDApIHsKICAgICAgICAgICAgICBlbnREYXRhLnNob3cgPSAn5Li75a6e5L2TLeWklic7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoZW50RGF0YS5pc0V4dGVybmFsID09ICcxJykgewogICAgICAgICAgICAgIGVudERhdGEuc2hvdyA9ICflrZDlrp7kvZMt5aSWJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoaW5kZXggPT09IDApIHsKICAgICAgICAgICAgICBlbnREYXRhLmlzQ2hlY2sgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChlbnREYXRhLmNoaWxkcmVuKSB7CiAgICAgICAgICAgICAgZW50RGF0YS5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7CiAgICAgICAgICAgICAgICBpZiAodi5pc0V4dGVybmFsID09ICcxJykgewogICAgICAgICAgICAgICAgICB2LnNob3cgPSAn5a2Z5a6e5L2TLeWklic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yICh2YXIgcSA9IDA7IHEgPCBlbnREYXRhLmF0dHJpYnV0ZUxpc3QubGVuZ3RoOyBxKyspIHsKICAgICAgICAgICAgICBpZiAoZW50RGF0YS5hdHRyaWJ1dGVMaXN0W3FdKSB7CiAgICAgICAgICAgICAgICBpZiAoZW50RGF0YS5hdHRyaWJ1dGVMaXN0W3FdLmlzUmVxdWlyZWQgPT0gMCkgewogICAgICAgICAgICAgICAgICBlbnREYXRhLmF0dHJpYnV0ZUxpc3RbcV0uaXNSZXF1aXJlZCA9ICcwJzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIGVudERhdGEuYXR0cmlidXRlTGlzdFtxXS5pc1JlcXVpcmVkID0gJzEnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudERhdGEuYXR0cmlidXRlTGlzdC5sZW5ndGggLSAxIC0gcTsgaSsrKSB7CiAgICAgICAgICAgICAgICBpZiAoZW50RGF0YS5hdHRyaWJ1dGVMaXN0W2ldLmluZGV4ID4gZW50RGF0YS5hdHRyaWJ1dGVMaXN0W2kgKyAxXS5pbmRleCkgewogICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IGVudERhdGEuYXR0cmlidXRlTGlzdFtpXTsKICAgICAgICAgICAgICAgICAgZW50RGF0YS5hdHRyaWJ1dGVMaXN0W2ldID0gZW50RGF0YS5hdHRyaWJ1dGVMaXN0W2kgKyAxXTsKICAgICAgICAgICAgICAgICAgZW50RGF0YS5hdHRyaWJ1dGVMaXN0W2kgKyAxXSA9IHRlbXA7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIF90aGlzMy5mb3JtRGF0YSA9IHJlc3AuZGF0YTsKICAgICAgICB9KTsKICAgICAgfQogICAgfSwKICAgIC8vIOaWsOWinuWunuS9kwogICAgYWRkRW50Um93czogZnVuY3Rpb24gYWRkRW50Um93cygpIHsKICAgICAgdmFyIF90aGlzNCA9IHRoaXM7CiAgICAgIHZhciB0aGlzXyA9IHRoaXM7CiAgICAgIHV0aWwudmFsaWRhdGVGb3JtKHRoaXNfLCAnZm9ybScpLnRoZW4oZnVuY3Rpb24gKCkgewogICAgICAgIGlmICh0aGlzXy5mb3JtRGF0YS5lbnRzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpc18uZm9ybURhdGEuZW50cy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBpZiAodGhpc18uY2hlY2tHcmFuZFNvbkVudHMoaSkpIHsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHRoaXNfLmNvdW50QXR0ckxlbmd0aCA9IDA7CiAgICAgICAgICBpZiAoIXRoaXNfLmNoZWNrRW50RnVuYyh0aGlzXy5mb3JtRGF0YS5lbnRzKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzXy5leHRMZW4gPSAwOwogICAgICAgIH0KICAgICAgICB0aGlzXy5mb3JtRGF0YS5lbnRzLmZvckVhY2goZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgICAgIGRhdGEuaXNDaGVjayA9IGZhbHNlOwogICAgICAgIH0pOwogICAgICAgIHRoaXNfLmVudEluZGV4ID0gKyt0aGlzXy5lbnRJbmRleDsKICAgICAgICB2YXIgcm93ID0gewogICAgICAgICAgZGVzYzogJycsCiAgICAgICAgICBpbmRleDogdGhpc18uZW50SW5kZXgsCiAgICAgICAgICBuYW1lOiAnJywKICAgICAgICAgIHBhY2thZ2VJZDogJycsCiAgICAgICAgICBzaG93OiAn5a2Q5a6e5L2TJywKICAgICAgICAgIGNoaWxkcmVuOiBbXSwKICAgICAgICAgIHJlbGF0aW9uOiAnb25ldG9tYW55JywKICAgICAgICAgIGF0dHJpYnV0ZUxpc3Q6IFtdLAogICAgICAgICAgc3RhdHVzOiAnJywKICAgICAgICAgIGlzQ2hlY2s6IHRydWUKICAgICAgICB9OwogICAgICAgIGlmICh0aGlzXy5mb3JtRGF0YS5lbnRzLmxlbmd0aCA9PSAwKSB7CiAgICAgICAgICB0aGlzXy5lbnRJbmRleCA9IDA7CiAgICAgICAgICByb3cgPSB7CiAgICAgICAgICAgIGRlc2M6ICcnLAogICAgICAgICAgICBpbmRleDogMCwKICAgICAgICAgICAgbmFtZTogJycsCiAgICAgICAgICAgIHBhY2thZ2VJZDogJycsCiAgICAgICAgICAgIHNob3c6ICfkuLvlrp7kvZMnLAogICAgICAgICAgICByZWxhdGlvbjogJ21haW4nLAogICAgICAgICAgICBzdGF0dXM6ICcnLAogICAgICAgICAgICBhdHRyaWJ1dGVMaXN0OiBbXSwKICAgICAgICAgICAgaXNDaGVjazogdHJ1ZQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXNfLmZvcm1EYXRhLmVudHMubGVuZ3RoID4gMCAmJiB0aGlzXy5jaGVja0dyYW5kU29uRW50cyh0aGlzXy5mb3JtRGF0YS5lbnRzLmxlbmd0aCAtIDEpKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXNfLmZvcm1EYXRhLmVudHMucHVzaChyb3cpOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7CiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlYXNvbikpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKHJlYXNvbik7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHZhciBydWxlID0gcmVhc29uLm1hcChmdW5jdGlvbiAodikgewogICAgICAgICAgcmV0dXJuIHYucnVsZTsKICAgICAgICB9KTsKICAgICAgICBydWxlID0gcnVsZS51bmlxdWUoKTsKICAgICAgICBpZiAocnVsZS5pbmNsdWRlcygncmVxdWlyZWQnKSkgewogICAgICAgICAgdmFyIG4gPSBfdGhpczQuJG1lc3NhZ2Uud2FybmluZygn6K+35bCG5L+h5oGv5aGr5YaZ5a6M5pW0Jyk7CiAgICAgICAgICBfdGhpczQubWVzc2FnZUNhdGlvbnNbbi5pZF0gPSBuOwogICAgICAgIH0gZWxzZSBpZiAocnVsZS5pbmNsdWRlcygncmVnZXgnKSkgewogICAgICAgICAgX3RoaXM0LiRtZXNzYWdlLndhcm5pbmcoJ+WPquiDvei+k+WFpeWtl+avjeOAgeaVsOWtl+OAgeS4i+WIkue6v++8jOS4lOS7peWtl+avjeW8gOWktCcpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAogICAgLy8g5Yig6Zmk5a6e5L2TCiAgICBkZWxldGVFbnRSb3dzOiBmdW5jdGlvbiBkZWxldGVFbnRSb3dzKGluZGV4KSB7CiAgICAgIHRoaXMuZW50SW5kZXggPSBpbmRleDsKICAgICAgaWYgKCF0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uYXR0cmlidXRlTGlzdCkgewogICAgICAgIHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5hdHRyaWJ1dGVMaXN0ID0gW107CiAgICAgIH0KICAgICAgdGhpcy5mb3JtRGF0YS5lbnRzLnNwbGljZShpbmRleCwgMSk7CiAgICAgIGlmICh0aGlzLmVudEluZGV4ID49IHRoaXMuZm9ybURhdGEuZW50cy5sZW5ndGgpIHsKICAgICAgICB0aGlzLmVudEluZGV4ID0gdGhpcy5mb3JtRGF0YS5lbnRzLmxlbmd0aCAtIDE7CiAgICAgICAgdGhpcy5nZXRFbnRzQnlJbmRleCh0aGlzLmVudEluZGV4KTsKICAgICAgfQogICAgICBpZiAodGhpcy5mb3JtRGF0YS5lbnRzLmxlbmd0aCA+IDApIHsKICAgICAgICBpZiAoaW5kZXggPT0gMCkgewogICAgICAgICAgaWYgKHRoaXMuZm9ybURhdGEuZW50c1swXS5pc0V4dGVybmFsICE9ICcxJykgewogICAgICAgICAgICB0aGlzLmZvcm1EYXRhLmVudHNbMF0uc2hvdyA9ICfkuLvlrp7kvZMnOwogICAgICAgICAgICB0aGlzLmZvcm1EYXRhLmVudHNbMF0ucmVsYXRpb24gPSAnbWFpbic7CiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEuZW50c1swXS5jaGlsZHJlbiA9IFtdOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5mb3JtRGF0YS5lbnRzWzBdLnNob3cgPSAn5Li75a6e5L2TLeWklic7CiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEuZW50c1swXS5yZWxhdGlvbiA9ICdtYWluJzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICBjaGVja0dyYW5kU29uRW50czogZnVuY3Rpb24gY2hlY2tHcmFuZFNvbkVudHMoaW5kZXgsIHBhcmFtKSB7CiAgICAgIGlmICh0aGlzLmZvcm1EYXRhLmVudHNbaW5kZXhdLmNoaWxkcmVuICYmIHRoaXMuZm9ybURhdGEuZW50c1tpbmRleF0uY2hpbGRyZW4ubGVuZ3RoID09IDAgfHwgIXRoaXMuZm9ybURhdGEuZW50c1tpbmRleF0uY2hpbGRyZW4pIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgdmFyIGNoaWxkID0gdGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XS5jaGlsZHJlbjsKICAgICAgdmFyIGxlbiA9IHRoaXMuZm9ybURhdGEuZW50c1tpbmRleF0uY2hpbGRyZW4ubGVuZ3RoIC0gMTsKICAgICAgY2hpbGRbbGVuXS5jb21tZW50ID0gY2hpbGRbbGVuXS5kZXNjOwogICAgICBjaGlsZFtsZW5dLmRlc2NyaXB0aW9uID0gY2hpbGRbbGVuXS5kZXNjOwogICAgICBpZiAoIXBhcmFtICYmIGNoaWxkW2xlbl0uYXR0cmlidXRlTGlzdC5sZW5ndGggPT0gMCkgewogICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgbWVzc2FnZTogJ+ivt+a3u+WKoOWtl+auteS/oeaBrycsCiAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgfSwKICAgIGFkZEdyYW5kU29uRW50OiBmdW5jdGlvbiBhZGRHcmFuZFNvbkVudChpbmRleCkgewogICAgICB0aGlzLmdldEVudHNCeUluZGV4KGluZGV4KTsKICAgICAgdmFyIHJvdyA9IHsKICAgICAgICBkZXNjOiAnJywKICAgICAgICBpbmRleDogdGhpcy5lbnRJbmRleCwKICAgICAgICBuYW1lOiAnJywKICAgICAgICBwYWNrYWdlSWQ6ICcnLAogICAgICAgIHNob3c6ICflrZnlrp7kvZMnLAogICAgICAgIHJlbGF0aW9uOiAnb25ldG9tYW55JywKICAgICAgICBhdHRyaWJ1dGVMaXN0OiBbXSwKICAgICAgICBzdGF0dXM6ICcnLAogICAgICAgIGlzQ2hlY2s6IHRydWUKICAgICAgfTsKICAgICAgaWYgKCF0aGlzLmZvcm1EYXRhLmVudHNbaW5kZXhdLmNoaWxkcmVuKSB7CiAgICAgICAgdGhpcy4kc2V0KHRoaXMuZm9ybURhdGEuZW50c1tpbmRleF0sICdjaGlsZHJlbicsIFtdKTsKICAgICAgfQogICAgICBpZiAodGhpcy5jaGVja0dyYW5kU29uRW50cyhpbmRleCkpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XS5jaGlsZHJlbi5wdXNoKHJvdyk7CiAgICAgIHRoaXMuZ3JhbmRTb25JbmRleCA9IHRoaXMuZm9ybURhdGEuZW50c1tpbmRleF0uY2hpbGRyZW4ubGVuZ3RoIC0gMTsKICAgICAgdGhpcy5vcGVuR3JhbmRTb25BdHRyID0gdHJ1ZTsKICAgICAgdGhpcy5hdHRyVGFibGVEYXRhID0gdGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XS5jaGlsZHJlblt0aGlzLmdyYW5kU29uSW5kZXhdLmF0dHJpYnV0ZUxpc3Q7CiAgICB9LAogICAgZ2V0RW50c0J5SW5kZXg6IGZ1bmN0aW9uIGdldEVudHNCeUluZGV4KGluZGV4LCBwYXJhbSkgewogICAgICB2YXIgX3RoaXM1ID0gdGhpczsKICAgICAgLy8g5aaC5p6c5piv5Yig6Zmk6Ieq5Yqo6YCJ5oup5LiK5LiA5Liq5a6e5L2TCiAgICAgIGlmIChwYXJhbSA9PSAnZGVsZXRlJykgewogICAgICAgIGlmICh0aGlzLmZvcm1EYXRhLmVudHNbaW5kZXhdKSB7CiAgICAgICAgICB0aGlzLmVudEluZGV4ID0gaW5kZXg7CiAgICAgICAgICB0aGlzLmZvcm1EYXRhLmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgICBkYXRhLmlzQ2hlY2sgPSBmYWxzZTsKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5mb3JtRGF0YS5lbnRzW2luZGV4XS5pc0NoZWNrID0gdHJ1ZTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgdGhpc18gPSB0aGlzOwogICAgICAgIHV0aWwudmFsaWRhdGVGb3JtKHRoaXMsICdmb3JtJykudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICBfdGhpczUub3BlbkdyYW5kU29uQXR0ciA9IGZhbHNlOwogICAgICAgICAgaWYgKHBhcmFtID09ICdncmFuZFNvbkVudCcpIHsKICAgICAgICAgICAgX3RoaXM1Lm9wZW5HcmFuZFNvbkF0dHIgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKF90aGlzNS5mb3JtRGF0YS5lbnRzW2luZGV4XSkgewogICAgICAgICAgICBfdGhpczUuZW50SW5kZXggPSBpbmRleDsKICAgICAgICAgICAgX3RoaXM1LmZvcm1EYXRhLmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZGF0YSkgewogICAgICAgICAgICAgIGRhdGEuaXNDaGVjayA9IGZhbHNlOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgX3RoaXM1LmZvcm1EYXRhLmVudHNbaW5kZXhdLmlzQ2hlY2sgPSB0cnVlOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9KS5jYXRjaChmdW5jdGlvbiAocmVhc29uKSB7CiAgICAgICAgICB2YXIgcnVsZSA9IHJlYXNvbi5tYXAoZnVuY3Rpb24gKHYpIHsKICAgICAgICAgICAgcmV0dXJuIHYucnVsZTsKICAgICAgICAgIH0pOwogICAgICAgICAgcnVsZSA9IHJ1bGUudW5pcXVlKCk7CiAgICAgICAgICB0aGlzXy5jbG9zZUFsbE5vdGlmaWNhdGlvbigpOwogICAgICAgICAgaWYgKHJ1bGUuaW5jbHVkZXMoJ3JlcXVpcmVkJykpIHsKICAgICAgICAgICAgdmFyIG4gPSB0aGlzXy4kbWVzc2FnZS53YXJuaW5nKCfor7flsIbkv6Hmga/loavlhpnlrozmlbQnKTsKICAgICAgICAgICAgdGhpc18ubWVzc2FnZUNhdGlvbnNbbi5pZF0gPSBuOwogICAgICAgICAgfSBlbHNlIGlmIChydWxlLmluY2x1ZGVzKCdyZWdleCcpKSB7CiAgICAgICAgICAgIHZhciBfbiA9IHRoaXNfLiRtZXNzYWdlLndhcm5pbmcoJ+WPquiDvei+k+WFpeWtl+avjeOAgeaVsOWtl+OAgeS4i+WIkue6v++8jOS4lOS7peWtl+avjeW8gOWktCcpOwogICAgICAgICAgICB0aGlzXy5tZXNzYWdlQ2F0aW9uc1tfbi5pZF0gPSBfbjsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfSwKICAgIGNoaW5lc2VGb3JtYXQ6IGZ1bmN0aW9uIGNoaW5lc2VGb3JtYXQoaWQsIGxpc3QsIHBhcmFtLCBpbmRleCwgdikgewogICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICB2YXIgZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKICAgICAgLy8gZGlzYWJsZWQg5oiW6ICFIHJlYWRvbmx5IOaXtiDkuI3pnIDopoHor7fmsYIKICAgICAgdmFyIHRpbWVyID0gbnVsbDsKICAgICAgaWYgKGQgPT09IG51bGwgfHwgZC5fX3Z1ZV9fLmRpc2FibGVkIHx8IGQuX192dWVfXy5yZWFkb25seSB8fCAhdikgcmV0dXJuOwogICAgICBpZiAodGltZXIpIHsKICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpOwogICAgICB9CiAgICAgIHRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgcmVxLnJlcXVlc3QoewogICAgICAgICAgdXJsOiAiIi5jb25jYXQod2luZG93LmNvbnRleHQudWMsICIvYmFzZS90b29scy92MS9nZXRQaW55aW4iKSwKICAgICAgICAgIG1ldGhvZDogJ0dFVCcsCiAgICAgICAgICBwYXJhbXM6IHsKICAgICAgICAgICAgY2hpbmVzZTogdiwKICAgICAgICAgICAgdHlwZTogMAogICAgICAgICAgfQogICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgaWYgKHJlcy5kYXRhLnN0YXRlKSB7CiAgICAgICAgICAgIGxpc3RbaW5kZXhdW3BhcmFtXSA9IHJlcy5kYXRhLnZhbHVlOwogICAgICAgICAgICBtYWluLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgbWFpbi4kdmFsaWRhdG9yLnZhbGlkYXRlKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9LCA1MDApOwogICAgfSwKICAgIGVudEJsdXI6IGZ1bmN0aW9uIGVudEJsdXIoKSB7CiAgICAgIGlmICh0aGlzLm9wZW5HcmFuZFNvbkF0dHIgJiYgdGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuZW50SW5kZXhdLmNoaWxkcmVuW3RoaXMuZ3JhbmRTb25JbmRleF0uYXR0cmlidXRlTGlzdCAmJiB0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uY2hpbGRyZW5bdGhpcy5ncmFuZFNvbkluZGV4XS5hdHRyaWJ1dGVMaXN0Lmxlbmd0aCA+IDApIHsKICAgICAgICB0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uY2hpbGRyZW5bdGhpcy5ncmFuZFNvbkluZGV4XS5hdHRyaWJ1dGVMaXN0LmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgIGl0ZW0uZGVzYyA9IGl0ZW0uY29tbWVudDsKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAodHlwZW9mIHRoaXMuZW50Qmx1ckRlc2NSZXBlYXRJbmRleCA9PT0gJ251bWJlcicpIHsKICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNoYW5nZUVudHNEZXNjIi5jb25jYXQodGhpcy5lbnRCbHVyRGVzY1JlcGVhdEluZGV4KSkpIHsKICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGFuZ2VFbnRzRGVzYyIuY29uY2F0KHRoaXMuZW50Qmx1ckRlc2NSZXBlYXRJbmRleCkpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5maXJzdEVsZW1lbnRDaGlsZC5zdHlsZS5ib3JkZXIgPSAnJzsKICAgICAgICB9CiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGFuZ2VHcmFuZFNvbkVudHNEZXNjIi5jb25jYXQodGhpcy5lbnRCbHVyRGVzY1JlcGVhdEluZGV4KSkpIHsKICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGFuZ2VHcmFuZFNvbkVudHNEZXNjIi5jb25jYXQodGhpcy5lbnRCbHVyRGVzY1JlcGVhdEluZGV4KSkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdLmZpcnN0RWxlbWVudENoaWxkLnN0eWxlLmJvcmRlciA9ICcnOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodHlwZW9mIHRoaXMuZW50Qmx1ck5hbWVSZXBlYXRJbmRleCA9PT0gJ251bWJlcicpIHsKICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVudE5hbWUiLmNvbmNhdCh0aGlzLmVudEJsdXJOYW1lUmVwZWF0SW5kZXgpKSkgewogICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVudE5hbWUiLmNvbmNhdCh0aGlzLmVudEJsdXJOYW1lUmVwZWF0SW5kZXgpKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0uZmlyc3RFbGVtZW50Q2hpbGQuc3R5bGUuYm9yZGVyID0gJyc7CiAgICAgICAgfQogICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hhbmdlR3JhbmRTb25FbnRzTmFtZSIuY29uY2F0KHRoaXMuZW50Qmx1ck5hbWVSZXBlYXRJbmRleCkpKSB7CiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hhbmdlR3JhbmRTb25FbnRzTmFtZSIuY29uY2F0KHRoaXMuZW50Qmx1ck5hbWVSZXBlYXRJbmRleCkpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5maXJzdEVsZW1lbnRDaGlsZC5zdHlsZS5ib3JkZXIgPSAnJzsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRoaXMuYXR0ckNvbW1lbnRFbGVtZW50SWQgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyQ29tbWVudEVsZW1lbnRJZCkpIHsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJDb21tZW50RWxlbWVudElkKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0uZmlyc3RFbGVtZW50Q2hpbGQuc3R5bGUuYm9yZGVyID0gJyc7CiAgICAgIH0KICAgICAgaWYgKHR5cGVvZiB0aGlzLmNoZWNrQXR0ck5hbWVJbmRleCA9PT0gJ251bWJlcicpIHsKICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIiIuY29uY2F0KHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEF0dHJJbmRleF0uYXR0cmlidXRlTGlzdFt0aGlzLmNoZWNrQXR0ck5hbWVJbmRleF0ubmFtZSwgImF0dHJOYW1lIikuY29uY2F0KHRoaXMuY2hlY2tBdHRyTmFtZUluZGV4KSkpIHsKICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCIiLmNvbmNhdCh0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRBdHRySW5kZXhdLmF0dHJpYnV0ZUxpc3RbdGhpcy5jaGVja0F0dHJOYW1lSW5kZXhdLm5hbWUsICJhdHRyTmFtZSIpLmNvbmNhdCh0aGlzLmNoZWNrQXR0ck5hbWVJbmRleCkpLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkaXYnKVswXS5maXJzdEVsZW1lbnRDaGlsZC5zdHlsZS5ib3JkZXIgPSAnJzsKICAgICAgICB9CiAgICAgICAgdmFyIHNvbkF0dHIgPSB0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5zb25BdHRySW5kZXhdOwogICAgICAgIGlmIChzb25BdHRyKSB7CiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiIi5jb25jYXQoc29uQXR0ci5jaGlsZHJlblt0aGlzLmVudEF0dHJJbmRleF0uYXR0cmlidXRlTGlzdFt0aGlzLmNoZWNrQXR0ck5hbWVJbmRleF0ubmFtZSwgImF0dHJOYW1lIikuY29uY2F0KHRoaXMuY2hlY2tBdHRyTmFtZUluZGV4KSkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdLmZpcnN0RWxlbWVudENoaWxkLnN0eWxlLmJvcmRlciA9ICcnOwogICAgICAgIH0KICAgICAgICB0aGlzLmNoZWNrQXR0ck5hbWVJbmRleCA9IG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuZGVmYXVsdFZhbHVlVHlwZSkgewogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCJkZWZhdWx0VmFsdWUiLmNvbmNhdCh0aGlzLmRlZmF1bHRWYWx1ZUluZGV4KSlbMF0uc3R5bGUuYm9yZGVyID0gJyc7CiAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVUeXBlID0gbnVsbDsKICAgICAgfQogICAgICBpZiAodGhpcy5hdHRyTGVuRWxlbWVudElkICYmIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckxlbkVsZW1lbnRJZCkpIHsKICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJMZW5FbGVtZW50SWQpLnN0eWxlLmJvcmRlciA9ICcnOwogICAgICB9CiAgICAgIGlmICh0aGlzLmF0dHJEZWNpbWFFbGVtZW50SWQgJiYgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyRGVjaW1hRWxlbWVudElkKSkgewogICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckRlY2ltYUVsZW1lbnRJZCkuc3R5bGUuYm9yZGVyID0gJyc7CiAgICAgIH0KICAgIH0sCiAgICAvLyDlhbPpl63miYDmnInmoKHpqozpgJrnn6UKICAgIGNsb3NlQWxsTm90aWZpY2F0aW9uOiBmdW5jdGlvbiBjbG9zZUFsbE5vdGlmaWNhdGlvbigpIHsKICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMubWVzc2FnZUNhdGlvbnMpIHsKICAgICAgICB0aGlzLm1lc3NhZ2VDYXRpb25zW2tleV0uY2xvc2UoKTsKICAgICAgICBkZWxldGUgdGhpcy5tZXNzYWdlQ2F0aW9uc1trZXldOwogICAgICB9CiAgICB9LAogICAgZ2V0R3JhbmRTb25FbnRzQnlJbmRleDogZnVuY3Rpb24gZ2V0R3JhbmRTb25FbnRzQnlJbmRleChpLCBpbmRleCkgewogICAgICB0aGlzLmdldEVudHNCeUluZGV4KGluZGV4LCAnZ3JhbmRTb25FbnQnKTsKICAgICAgdGhpcy5ncmFuZFNvbkluZGV4ID0gaTsKICAgICAgaWYgKHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5jaGlsZHJlbiAmJiB0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uY2hpbGRyZW5baV0pIHsKICAgICAgICB0aGlzLmF0dHJUYWJsZURhdGEgPSB0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uY2hpbGRyZW5baV0uYXR0cmlidXRlTGlzdDsKICAgICAgfQogICAgfSwKICAgIGRlbGV0ZUdyYW5kU29uRW50Um93czogZnVuY3Rpb24gZGVsZXRlR3JhbmRTb25FbnRSb3dzKGksIGluZGV4KSB7CiAgICAgIHRoaXMuZ2V0RW50c0J5SW5kZXgoaW5kZXgsICdub0NoZWNrJyk7CiAgICAgIHRoaXMuZ3JhbmRTb25JbmRleCA9IGk7CiAgICAgIGlmICghdGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuZW50SW5kZXhdLmF0dHJpYnV0ZUxpc3QpIHsKICAgICAgICB0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uY2hpbGRyZW5baV0uYXR0cmlidXRlTGlzdCA9IFtdOwogICAgICB9CiAgICAgIHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5jaGlsZHJlbi5zcGxpY2UoaSwgMSk7CiAgICAgIHRoaXMub3BlbkdyYW5kU29uQXR0ciA9IGZhbHNlOwogICAgICB0aGlzLmF0dHJUYWJsZURhdGEgPSB0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uYXR0cmlidXRlTGlzdDsKICAgICAgaWYgKHRoaXMuZm9ybURhdGEuZW50c1t0aGlzLmVudEluZGV4XS5jaGlsZHJlbltpIC0gMV0gJiYgdGhpcy5mb3JtRGF0YS5lbnRzW3RoaXMuZW50SW5kZXhdLmNoaWxkcmVuW2kgLSAxXS5hdHRyaWJ1dGVMaXN0Lmxlbmd0aCA+IDApIHsKICAgICAgICB0aGlzLmF0dHJUYWJsZURhdGEgPSB0aGlzLmZvcm1EYXRhLmVudHNbdGhpcy5lbnRJbmRleF0uY2hpbGRyZW5baSAtIDFdLmF0dHJpYnV0ZUxpc3Q7CiAgICAgIH0KICAgIH0sCiAgICBjaGVja0VudEZ1bmM6IGZ1bmN0aW9uIGNoZWNrRW50RnVuYyhlbnQsIHNvbkluZGV4KSB7CiAgICAgIHZhciBlbnRWYWwgPSB7fTsKICAgICAgaWYgKGVudC5sZW5ndGggPCAxKSB7CiAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICB0eXBlOiAnd2FybmluZycsCiAgICAgICAgICBtZXNzYWdlOiAn6K+35re75Yqg5a6e5L2T5a+56LGh77yBJwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudC5sZW5ndGg7IGkrKykgewogICAgICAgIGlmIChlbnRbaV0uc2hvdyAhPSAn5a2Z5a6e5L2TJykgewogICAgICAgICAgZW50W2ldLmRlc2NyaXB0aW9uID0gZW50W2ldLmNvbW1lbnQ7CiAgICAgICAgICBlbnRbaV0uZGVzYyA9IGVudFtpXS5jb21tZW50OwogICAgICAgIH0KICAgICAgICBpZiAoIWVudFZhbFsiZGVzYyIuY29uY2F0KGVudFtpXS5kZXNjKV0pIHsKICAgICAgICAgIGVudFZhbFsiZGVzYyIuY29uY2F0KGVudFtpXS5kZXNjKV0gPSBlbnRbaV0uZGVzYzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5lbnRCbHVyRGVzY1JlcGVhdEluZGV4ID0gaTsKICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hhbmdlRW50c0Rlc2MiLmNvbmNhdChpKSkgJiYgZW50W2ldLnNob3cgPT0gJ+WtkOWunuS9kycpIHsKICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgbWVzc2FnZTogIlx1NURGMlx1NUI1OFx1NTcyOFx1NUI1MFx1NUI5RVx1NEY1M1x1NjNDRlx1OEZGMFx1NEUzQVx1MzAxMCIuY29uY2F0KGVudFtpXS5kZXNjLCAiXHUzMDExXHU3Njg0Ym9cdTVCOUVcdTRGNTMiKSwKICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjaGFuZ2VFbnRzRGVzYyIuY29uY2F0KGkpKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0ubGFzdEVsZW1lbnRDaGlsZC5mb2N1cygpOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hhbmdlRW50c0Rlc2MiLmNvbmNhdChpKSkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdLmZpcnN0RWxlbWVudENoaWxkLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgIG1lc3NhZ2U6ICJcdTVERjJcdTVCNThcdTU3MjhcdTVCNTlcdTVCOUVcdTRGNTNcdTYzQ0ZcdThGRjBcdTRFM0FcdTMwMTAiLmNvbmNhdChlbnRbaV0uZGVzYywgIlx1MzAxMVx1NzY4NGJvXHU1QjlFXHU0RjUzIiksCiAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hhbmdlR3JhbmRTb25FbnRzRGVzYyIuY29uY2F0KGkpKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0ubGFzdEVsZW1lbnRDaGlsZC5mb2N1cygpOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hhbmdlR3JhbmRTb25FbnRzRGVzYyIuY29uY2F0KGkpKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0uZmlyc3RFbGVtZW50Q2hpbGQuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoIWVudFZhbFsibmFtZSIuY29uY2F0KGVudFtpXS5uYW1lKV0pIHsKICAgICAgICAgIGVudFZhbFsibmFtZSIuY29uY2F0KGVudFtpXS5uYW1lKV0gPSBlbnRbaV0ubmFtZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5lbnRCbHVyTmFtZVJlcGVhdEluZGV4ID0gaTsKICAgICAgICAgIGlmIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZW50TmFtZSIuY29uY2F0KGkpKSAmJiBlbnRbaV0uc2hvdyA9PSAn5a2Q5a6e5L2TJykgewogICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgICAgICBtZXNzYWdlOiAiXHU1REYyXHU1QjU4XHU1NzI4XHU1QjUwXHU1QjlFXHU0RjUzXHU1NDBEXHU3OUYwXHU0RTNBXHUzMDEwIi5jb25jYXQoZW50W2ldLm5hbWUsICJcdTMwMTFcdTc2ODRib1x1NUI5RVx1NEY1MyIpLAogICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVudE5hbWUiLmNvbmNhdChpKSkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdLmxhc3RFbGVtZW50Q2hpbGQuZm9jdXMoKTsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVudE5hbWUiLmNvbmNhdChpKSkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdLmZpcnN0RWxlbWVudENoaWxkLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgIG1lc3NhZ2U6ICJcdTVERjJcdTVCNThcdTU3MjhcdTVCNTlcdTVCOUVcdTRGNTNcdTU0MERcdTc5RjBcdTRFM0FcdTMwMTAiLmNvbmNhdChlbnRbaV0ubmFtZSwgIlx1MzAxMVx1NzY4NGJvXHU1QjlFXHU0RjUzIiksCiAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hhbmdlR3JhbmRTb25FbnRzTmFtZSIuY29uY2F0KGkpKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0ubGFzdEVsZW1lbnRDaGlsZC5mb2N1cygpOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2hhbmdlR3JhbmRTb25FbnRzTmFtZSIuY29uY2F0KGkpKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnZGl2JylbMF0uZmlyc3RFbGVtZW50Q2hpbGQuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoZW50W2ldLmlzRXh0ZXJuYWwgPT0gJzEnKSB7CiAgICAgICAgICArK3RoaXMuZXh0TGVuOwogICAgICAgICAgaWYgKGkgIT0gMCAmJiB0aGlzLmV4dExlbiA+IDEgJiYgIWVudFtpXS5maykgewogICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgICAgICBtZXNzYWdlOiAiXHU4QkY3XHU3RUQ5Ii5jb25jYXQoZW50W2ldLmNvbW1lbnQsICJcdTVCOUVcdTRGNTNcdTZERkJcdTUyQTBcdTU5MTZcdTk1MkVcdUZGMDEiKSwKICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGVudFtpXS5hdHRyaWJ1dGVMaXN0Lmxlbmd0aCA+IDApIHsKICAgICAgICAgIGlmICghdGhpcy5jaGVja0F0dHJGdW5jKGVudFtpXSwgaSwgc29uSW5kZXgpKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgIG1lc3NhZ2U6ICfor7fmt7vliqDlrZfmrrXvvIEnLAogICAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoZW50W2ldLmNoaWxkcmVuICYmIGVudFtpXS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7CiAgICAgICAgICB0aGlzLmNvdW50QXR0ckxlbmd0aCA9IDA7CiAgICAgICAgICBpZiAoIXRoaXMuY2hlY2tFbnRGdW5jKGVudFtpXS5jaGlsZHJlbiwgaSkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLmNvdW50QXR0ckxlbmd0aCA9IDA7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9LAogICAgY2hlY2tBdHRyRnVuYzogZnVuY3Rpb24gY2hlY2tBdHRyRnVuYyhlbnQsIGksIHNvbkluZGV4KSB7CiAgICAgIHZhciByZWdQb3MgPSBuZXcgUmVnRXhwKCdeXFxkKig/OlxcLlxcZHsxLDJ9KT8kJyk7CiAgICAgIHZhciBhdHRyVmFsID0ge307CiAgICAgIHZhciBhdHRyID0gZW50LmF0dHJpYnV0ZUxpc3Q7CiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYXR0ci5sZW5ndGg7IGorKykgewogICAgICAgIGF0dHJbal0uZGVzYyA9IGF0dHJbal0uY29tbWVudDsKICAgICAgICBpZiAoYXR0cltqXS5kZWZhdWx0VmFsdWUgPT0gbnVsbCkgewogICAgICAgICAgYXR0cltqXS5kZWZhdWx0VmFsdWUgPSAnJzsKICAgICAgICB9CiAgICAgICAgYXR0cltqXS5kZWZhdWx0VmFsdWUgPSBhdHRyW2pdLmRlZmF1bHRWYWx1ZS50cmltKCk7CiAgICAgICAgdGhpcy5hdHRyQ29tbWVudEVsZW1lbnRJZCA9ICIiLmNvbmNhdChhdHRyW2pdLm5hbWUsICJjb21tZW50IikuY29uY2F0KGopOwogICAgICAgIGlmIChlbnQuaXNFeHRlcm5hbCAhPSAnMScpIHsKICAgICAgICAgIGlmICghYXR0clZhbFsibmFtZSIuY29uY2F0KGF0dHJbal0ubmFtZSldKSB7CiAgICAgICAgICAgIGF0dHJWYWxbIm5hbWUiLmNvbmNhdChhdHRyW2pdLm5hbWUpXSA9IGF0dHJbal0ubmFtZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMuZW50QXR0ckluZGV4ID0gaTsKICAgICAgICAgICAgaWYgKHNvbkluZGV4KSB7CiAgICAgICAgICAgICAgdGhpcy5zb25BdHRySW5kZXggPSBzb25JbmRleDsKICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLmF0dHJOYW1lRWxlbWVudElkID0gYXR0cjsKICAgICAgICAgICAgdGhpcy5jaGVja0F0dHJOYW1lSW5kZXggPSBqOwogICAgICAgICAgICB2YXIgbXNnID0gIlx1NUI5RVx1NEY1M1x1RkYxQSIuY29uY2F0KGVudC5kZXNjLCAiXHVGRjA4IikuY29uY2F0KGVudC5uYW1lLCAiXHVGRjA5XHU0RTJEXHU1QjU4XHU1NzI4XHU5MUNEXHU1OTBEXHU1QjU3XHU2QkI1XHU1NDBEXHUzMDEwIikuY29uY2F0KGF0dHJbal0ubmFtZSwgIlx1MzAxMSIpOwogICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgICAgICBtZXNzYWdlOiBtc2csCiAgICAgICAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiIi5jb25jYXQodGhpcy5hdHRyTmFtZUVsZW1lbnRJZFtqXS5uYW1lLCAiYXR0ck5hbWUiKS5jb25jYXQoaikpLmZvY3VzKCk7CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCIiLmNvbmNhdCh0aGlzLmF0dHJOYW1lRWxlbWVudElkW2pdLm5hbWUsICJhdHRyTmFtZSIpLmNvbmNhdChqKSkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2RpdicpWzBdLmZpcnN0RWxlbWVudENoaWxkLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5hdHRyTGVuRWxlbWVudElkID0gIiIuY29uY2F0KGF0dHJbal0ubmFtZSwgImF0dHJMZW4iKS5jb25jYXQoaik7CiAgICAgICAgICBpZiAoYXR0cltqXS5hdHRyTGVuZ3RoICYmIGF0dHJbal0uYXR0ckxlbmd0aCAhPT0gMCkgewogICAgICAgICAgICBpZiAoIXJlZ1Bvcy50ZXN0KGF0dHJbal0uYXR0ckxlbmd0aCkpIHsKICAgICAgICAgICAgICB0aGlzLmVudEF0dHJJbmRleCA9IGk7CiAgICAgICAgICAgICAgaWYgKHNvbkluZGV4KSB7CiAgICAgICAgICAgICAgICB0aGlzLnNvbkF0dHJJbmRleCA9IHNvbkluZGV4OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJMZW5FbGVtZW50SWQpLmZvY3VzKCk7CiAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyTGVuRWxlbWVudElkKS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7CiAgICAgICAgICAgICAgdmFyIG4gPSB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+i+k+WFpeato+ehruaVsOWtlycpOwogICAgICAgICAgICAgIHRoaXMubWVzc2FnZUNhdGlvbnNbbi5pZF0gPSBuOwogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdGhpcy5hdHRyRGVjaW1hRWxlbWVudElkID0gIiIuY29uY2F0KGF0dHJbal0ubmFtZSwgImRlY2ltYSIpLmNvbmNhdChqKTsKICAgICAgICAgIGlmIChhdHRyW2pdLmRlY2ltYWxMZW4gJiYgYXR0cltqXS5kZWNpbWFsTGVuICE9PSAwKSB7CiAgICAgICAgICAgIGlmICghcmVnUG9zLnRlc3QoYXR0cltqXS5kZWNpbWFsTGVuKSkgewogICAgICAgICAgICAgIHRoaXMuZW50QXR0ckluZGV4ID0gaTsKICAgICAgICAgICAgICBpZiAoc29uSW5kZXgpIHsKICAgICAgICAgICAgICAgIHRoaXMuc29uQXR0ckluZGV4ID0gc29uSW5kZXg7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckRlY2ltYUVsZW1lbnRJZCkuZm9jdXMoKTsKICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmF0dHJEZWNpbWFFbGVtZW50SWQpLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsKICAgICAgICAgICAgICB2YXIgX24yID0gdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfor7fovpPlhaXmraPnoa7mlbDlrZcnKTsKICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VDYXRpb25zW19uMi5pZF0gPSBfbjI7CiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoYXR0cltqXS5kZWNpbWFsTGVuKSB7CiAgICAgICAgICAgIGlmIChhdHRyW2pdLmRlY2ltYWxMZW4ubGVuZ3RoID4gMSkgewogICAgICAgICAgICAgIHZhciBkZWNpbWFsTGVuID0gYXR0cltqXS5kZWNpbWFsTGVuLnN1YnN0cigwLCAxKTsKICAgICAgICAgICAgICBpZiAoZGVjaW1hbExlbiA9PSAnMCcpIHsKICAgICAgICAgICAgICAgIGF0dHJbal0uZGVjaW1hbExlbiA9IGF0dHJbal0uZGVjaW1hbExlbi5zdWJzdHIoMSwgYXR0cltqXS5kZWNpbWFsTGVuLmxlbmd0aCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChhdHRyW2pdLmRlY2ltYWxMZW4gPCAwIHx8IGF0dHJbal0uZGVjaW1hbExlbiA+IDMwKSB7CiAgICAgICAgICAgICAgdGhpcy5lbnRBdHRySW5kZXggPSBpOwogICAgICAgICAgICAgIGlmIChzb25JbmRleCkgewogICAgICAgICAgICAgICAgdGhpcy5zb25BdHRySW5kZXggPSBzb25JbmRleDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyRGVjaW1hRWxlbWVudElkKS5mb2N1cygpOwogICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckRlY2ltYUVsZW1lbnRJZCkuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOwogICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgbWVzc2FnZTogJ+Wwj+aVsOmVv+W6puS4jeiDveWwj+S6jjDmiJbogIXlpKfkuo4zMCcsCiAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChhdHRyW2pdLmRhdGFUeXBlID09PSAndmFyY2hhcicpIHsKICAgICAgICAgICAgdGhpcy5jb3VudEF0dHJMZW5ndGggKz0gcGFyc2VJbnQoYXR0cltqXS5hdHRyTGVuZ3RoKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChhdHRyW2pdLmF0dHJMZW5ndGgpIHsKICAgICAgICAgICAgaWYgKGF0dHJbal0uYXR0ckxlbmd0aC5sZW5ndGggPiAxKSB7CiAgICAgICAgICAgICAgdmFyIGF0dHJMZW5ndGggPSBhdHRyW2pdLmF0dHJMZW5ndGguc3Vic3RyKDAsIDEpOwogICAgICAgICAgICAgIGlmIChhdHRyTGVuZ3RoID09ICcwJykgewogICAgICAgICAgICAgICAgYXR0cltqXS5hdHRyTGVuZ3RoID0gYXR0cltqXS5hdHRyTGVuZ3RoLnN1YnN0cigxLCBhdHRyW2pdLmF0dHJMZW5ndGgubGVuZ3RoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGF0dHJbal0uZGF0YVR5cGUgPT09ICd2YXJjaGFyJykgewogICAgICAgICAgICAgIGlmIChhdHRyW2pdLmF0dHJMZW5ndGggPCAxIHx8IHRoaXMuY291bnRBdHRyTGVuZ3RoID4gMjE1MDApIHsKICAgICAgICAgICAgICAgIHRoaXMuZW50QXR0ckluZGV4ID0gaTsKICAgICAgICAgICAgICAgIGlmIChzb25JbmRleCkgewogICAgICAgICAgICAgICAgICB0aGlzLnNvbkF0dHJJbmRleCA9IHNvbkluZGV4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyTGVuRWxlbWVudElkKS5mb2N1cygpOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyTGVuRWxlbWVudElkKS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7CiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ+aVtOaVsOmVv+W6puS4jeiDveWwj+S6jjHmiJbogIXplb/luqbmgLvlkozotoXlh7oyMTUwMCcsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChhdHRyW2pdLmRhdGFUeXBlID09PSAnbnVtYmVyJyB8fCBhdHRyW2pdLmRhdGFUeXBlID09ICfmlbDlrZcnKSB7CiAgICAgICAgICAgICAgdmFyIGRlZmF1bHRWYWwgPSBhdHRyW2pdLmRlZmF1bHRWYWx1ZS5zcGxpdCgnLicpOwogICAgICAgICAgICAgIGlmIChOdW1iZXIoYXR0cltqXS5hdHRyTGVuZ3RoKSA8IDEpIHsKICAgICAgICAgICAgICAgIHRoaXMuZW50QXR0ckluZGV4ID0gaTsKICAgICAgICAgICAgICAgIGlmIChzb25JbmRleCkgewogICAgICAgICAgICAgICAgICB0aGlzLnNvbkF0dHJJbmRleCA9IHNvbkluZGV4OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyTGVuRWxlbWVudElkKS5mb2N1cygpOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyTGVuRWxlbWVudElkKS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7CiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ+aVtOaVsOmVv+W6puS4jeiDveWwj+S6jjEnLAogICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoTnVtYmVyKGF0dHJbal0uYXR0ckxlbmd0aCkgKyBOdW1iZXIoYXR0cltqXS5kZWNpbWFsTGVuKSA+IDM4KSB7CiAgICAgICAgICAgICAgICB0aGlzLmVudEF0dHJJbmRleCA9IGk7CiAgICAgICAgICAgICAgICBpZiAoc29uSW5kZXgpIHsKICAgICAgICAgICAgICAgICAgdGhpcy5zb25BdHRySW5kZXggPSBzb25JbmRleDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckxlbkVsZW1lbnRJZCkuZm9jdXMoKTsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckxlbkVsZW1lbnRJZCkuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOwogICAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICfmlbTmlbDplb/luqbkuI7lsI/mlbDplb/luqbkuYvlkozkuI3og73otoXov4czOCcsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChkZWZhdWx0VmFsWzFdICYmIE51bWJlcihkZWZhdWx0VmFsWzFdLmxlbmd0aCkgPiBOdW1iZXIoYXR0cltqXS5kZWNpbWFsTGVuKSkgewogICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVJbmRleCA9IGo7CiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZVR5cGUgPSAnbnVtYmVyJzsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCJkZWZhdWx0VmFsdWUiLmNvbmNhdChqKSlbMF0uZm9jdXMoKTsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCJkZWZhdWx0VmFsdWUiLmNvbmNhdChqKSlbMF0uc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCByZWQnOwogICAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICfpu5jorqTlgLzkuK3lsI/mlbDplb/luqbotoXlh7rorr7nva7lgLwnLAogICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoYXR0cltqXS5kZWZhdWx0VmFsdWUgJiYgYXR0cltqXS5kZWZhdWx0VmFsdWUubGVuZ3RoID4gMjEpIHsKICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlSW5kZXggPSBqOwogICAgICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmFsdWVUeXBlID0gJ251bWJlcic7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgiZGVmYXVsdFZhbHVlIi5jb25jYXQoaikpWzBdLmZvY3VzKCk7CiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgiZGVmYXVsdFZhbHVlIi5jb25jYXQoaikpWzBdLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgcmVkJzsKICAgICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgICAgICBtZXNzYWdlOiAn5pW05pWw6ZW/5bqm5LiN6IO96LaF6L+HMjEnLAogICAgICAgICAgICAgICAgICB0eXBlOiAnd2FybmluZycKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoIXJlZ1Bvcy50ZXN0KE51bWJlcihhdHRyW2pdLmRlZmF1bHRWYWx1ZSkpKSB7CiAgICAgICAgICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZUluZGV4ID0gajsKICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlVHlwZSA9ICdudW1iZXInOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoImRlZmF1bHRWYWx1ZSIuY29uY2F0KGopKVswXS5mb2N1cygpOwogICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoImRlZmF1bHRWYWx1ZSIuY29uY2F0KGopKVswXS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7CiAgICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ+m7mOiupOWAvOW6lOS4uuaVsOWtlycsCiAgICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBkID0gYXR0cltqXS5kZWZhdWx0VmFsdWU7CiAgICAgICAgICAgIGlmIChkLmluZGV4T2YoJy4nKSA+IC0xKSB7CiAgICAgICAgICAgICAgdmFyIF9pID0gZC5pbmRleE9mKCcuJyk7CiAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gZC5zdWJzdHJpbmcoMCwgX2kpOwogICAgICAgICAgICAgIHZhciBlbmQgPSBkLnN1YnN0cmluZyhfaSArIDEsIGF0dHJbal0uZGVmYXVsdFZhbHVlLmxlbmd0aCk7CiAgICAgICAgICAgICAgZCA9IHN0YXJ0ICsgZW5kOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChkLmxlbmd0aCA+IGF0dHJbal0uYXR0ckxlbmd0aCArIGF0dHJbal0uZGVjaW1hbExlbikgewogICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlSW5kZXggPSBqOwogICAgICAgICAgICAgIHRoaXMuZGVmYXVsdFZhbHVlVHlwZSA9ICd2YXJjaGFyJzsKICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgiZGVmYXVsdFZhbHVlIi5jb25jYXQoaikpWzBdLmZvY3VzKCk7CiAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoImRlZmF1bHRWYWx1ZSIuY29uY2F0KGopKVswXS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7CiAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7CiAgICAgICAgICAgICAgICBtZXNzYWdlOiAn6buY6K6k5YC86ZW/5bqm6ZyA5bCP5LqO5pW05pWw6ZW/5bqmJywKICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmIChhdHRyW2pdLmRhdGFUeXBlID09PSAndmFyY2hhcicgfHwgYXR0cltqXS5kYXRhVHlwZSA9PT0gJ251bWJlcicpIHsKICAgICAgICAgICAgdGhpcy5lbnRBdHRySW5kZXggPSBpOwogICAgICAgICAgICBpZiAoc29uSW5kZXgpIHsKICAgICAgICAgICAgICB0aGlzLnNvbkF0dHJJbmRleCA9IHNvbkluZGV4OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuYXR0ckxlbkVsZW1lbnRJZCkuZm9jdXMoKTsKICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5hdHRyTGVuRWxlbWVudElkKS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkIHJlZCc7CiAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgICAgIG1lc3NhZ2U6ICfor7fmt7vliqDmlbTmlbDplb/luqYnLAogICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0sCiAgICAvLyDlhbPpl63ooajljZXlr7nor53moYYKICAgIGhhbmRsZURpYWxvZ0Nsb3NlOiBmdW5jdGlvbiBoYW5kbGVEaWFsb2dDbG9zZSgpIHsKICAgICAgdGhpcy4kZW1pdCgnbG9hZFRhYmxlRGF0YScpOwogICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTsKICAgICAgdGhpcy5pc1NhdmUgPSBmYWxzZTsKICAgICAgdGhpcy5lbnRJbmRleCA9IDA7CiAgICAgIHRoaXMuZ3JhbmRTb25JbmRleCA9IC0xOwogICAgICB0aGlzLm9wZW5HcmFuZFNvbkF0dHIgPSBmYWxzZTsKICAgICAgdGhpcy5jb3VudEF0dHJMZW5ndGggPSAwOwogICAgICB0aGlzLmZvcm1EYXRhID0gdGhpcy4kb3B0aW9ucy5kYXRhKCkuZm9ybURhdGE7CiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsKICAgICAgICBwYXRoOiAnL3N5c3BsYXQvYnVzaW5lc3NPYmonCiAgICAgIH0pOyAvLyBmb3JtI2J1c2luZXNzT2JqCiAgICB9LAogICAgb25DYW5jZWw6IGZ1bmN0aW9uIG9uQ2FuY2VsKCkgewogICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTsKICAgIH0sCiAgICBvbkNvbmZpcm06IGZ1bmN0aW9uIG9uQ29uZmlybSgpIHsKICAgICAgdGhpcy4kcmVmcy5mb3JtLnZhbGlkYXRlKC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIF9yZWYgPSBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZSh2YWxpZCkgewogICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7CiAgICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7CiAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgaWYgKHZhbGlkKSB7CiAgICAgICAgICAgICAgICAgIC8vIGNvbnN0IHBhcmFtcyA9IHRoaXMuaGFuZGxlUGFyYW1zKCkKICAgICAgICAgICAgICAgICAgLy8gdHJ5IHsKICAgICAgICAgICAgICAgICAgLy8gICB0aGlzLmxvYWRpbmcgPSB0cnVlCiAgICAgICAgICAgICAgICAgIC8vICAgaWYgKHRoaXMuZGF0YT8uaWQpIHsKICAgICAgICAgICAgICAgICAgLy8gICAgIGF3YWl0IHVwZGF0ZURhdGEocGFyYW1zKQogICAgICAgICAgICAgICAgICAvLyAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIC8vICAgICBhd2FpdCBkYXRhQWRkKHBhcmFtcykKICAgICAgICAgICAgICAgICAgLy8gICB9CiAgICAgICAgICAgICAgICAgIC8vICAgdGhpcy4kbWVzc2FnZS5zdWNjZXNzKCfmk43kvZzmiJDlip8nKQogICAgICAgICAgICAgICAgICAvLyAgIHRoaXMub25DYW5jZWwoKQogICAgICAgICAgICAgICAgICAvLyB0aGlzLiRlbWl0KCdjb25maXJtJywgey4uLnRoaXMuZm9ybURhdGF9KQogICAgICAgICAgICAgICAgICAvLyB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgICAvLyAgIHRoaXMubG9hZGluZyA9IGZhbHNlCiAgICAgICAgICAgICAgICAgIC8vIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIF9jYWxsZWUpOwogICAgICAgIH0pKTsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKF94KSB7CiAgICAgICAgICByZXR1cm4gX3JlZi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgIH07CiAgICAgIH0oKSk7CiAgICB9CiAgfQp9Ow=="},null]}