a816e0d40bda11f644c9476eec83cca9.json 36 KB

1
  1. {"remainingRequest":"E:\\boman-framwork\\ruoyi-ui\\node_modules\\thread-loader\\dist\\cjs.js!E:\\boman-framwork\\ruoyi-ui\\node_modules\\babel-loader\\lib\\index.js!E:\\boman-framwork\\ruoyi-ui\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!E:\\boman-framwork\\ruoyi-ui\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!E:\\boman-framwork\\ruoyi-ui\\src\\components\\DynamicProcessNodeConfig\\index.vue?vue&type=script&lang=js&","dependencies":[{"path":"E:\\boman-framwork\\ruoyi-ui\\src\\components\\DynamicProcessNodeConfig\\index.vue","mtime":1619607677254},{"path":"E:\\boman-framwork\\ruoyi-ui\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"E:\\boman-framwork\\ruoyi-ui\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"E:\\boman-framwork\\ruoyi-ui\\node_modules\\babel-loader\\lib\\index.js","mtime":315532800000},{"path":"E:\\boman-framwork\\ruoyi-ui\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"E:\\boman-framwork\\ruoyi-ui\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucmVkdWNlLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm51bWJlci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiOwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwovLwppbXBvcnQgY29tcGxleFBvcCBmcm9tICJAL2NvbXBvbmVudHMvY29tcGxleFBvcCI7CmltcG9ydCBSdWxlQ29uZmlnIGZyb20gIkAvY29tcG9uZW50cy9SdWxlQ29uZmlnIjsKZXhwb3J0IGRlZmF1bHQgewogIG5hbWU6ICJEeW5hbWljUHJvY2Vzc05vZGVDb25maWciLAogIGNvbXBvbmVudHM6IHsKICAgIGNvbXBsZXhQb3A6IGNvbXBsZXhQb3AsCiAgICBSdWxlQ29uZmlnOiBSdWxlQ29uZmlnCiAgfSwKICBwcm9wczogewogICAgY29uZmlnRGF0YTogewogICAgICB0eXBlOiBPYmplY3QsCiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkgewogICAgICAgIHJldHVybiB7fTsKICAgICAgfQogICAgfSwKICAgIFRBQkxFX0lEOiB7fSwKICAgIC8v5qih54mI56ys5LiA5q2l6YWN572u6KGo5pWw5o2uCiAgICBub2RlOiB7fSwKICAgIC8v5b2T5YmN6IqC54K5CiAgICBzdGF0dXM6IG51bGwsCiAgICByZWplY3RlZE5vZGVzOiB7CiAgICAgIHR5cGU6IEFycmF5LAogICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgIH0sCiAgICBhc3NpZ25lZE5vZGVzOiB7CiAgICAgIHR5cGU6IEFycmF5LAogICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgIH0sCiAgICByZWFkT25seTogewogICAgICB0eXBlOiBCb29sZWFuLAogICAgICBkZWZhdWx0OiBmYWxzZQogICAgfQogIH0sCiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHsKICAgIHZhciBfdGhpcyA9IHRoaXM7CgogICAgcmV0dXJuIHsKICAgICAgLy/oioLngrnooajnmoTphY3nva4KICAgICAgdGFibGVDb25maWc6IHsKICAgICAgICBwcm9wczogewogICAgICAgICAgY29sdW1uc0tleTogWydOQU1FJ10sCiAgICAgICAgICBBdXRvRGF0YTogW10sCiAgICAgICAgICBoaWRlY29sdW1uczogWydpZCddLAogICAgICAgICAgZGF0YToge30sCiAgICAgICAgICB0b3RhbFJvd0NvdW50OiAwLAogICAgICAgICAgZGVmYXVsdFNlbGVjdGVkOiBbXSwKICAgICAgICAgIGlzQmFja1Jvd0l0ZW06IHRydWUKICAgICAgICB9LAogICAgICAgIGV2ZW50OiB7CiAgICAgICAgICAnb24taW5wdXQtdmFsdWUtY2hhbmdlJzogZnVuY3Rpb24gb25JbnB1dFZhbHVlQ2hhbmdlKHZhbHVlKSB7CiAgICAgICAgICAgIC8vIOWklumUrueahOaooeeziuaQnOe0ogogICAgICAgICAgICBfdGhpcy50YWJsZUNvbmZpZy5wcm9wcy5BdXRvRGF0YSA9IFtdOwoKICAgICAgICAgICAgX3RoaXMuJG5ldHdvcmsucG9zdCgnL3AvYy9tZXRhL3RhYmxlL2xpc3QnLCB7CiAgICAgICAgICAgICAgREVTQ1JJUFRJT046IHZhbHVlCiAgICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgICAgIGlmIChyZXMuZGF0YS5jb2RlID09PSAwKSB7CiAgICAgICAgICAgICAgICAvLyB0aGlzLnJvdyA9IHJlcy5kYXRhLmRhdGEucm93LmNvbmNhdChbXSkKICAgICAgICAgICAgICAgIF90aGlzLnRhYmxlQ29uZmlnLnByb3BzLkF1dG9EYXRhID0gcmVzLmRhdGEuZGF0YS5yb3cucmVkdWNlKGZ1bmN0aW9uIChhcnIsIGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgYXJyLnB1c2goewogICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLk5BTUUudmFsLAogICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLklELnZhbCwKICAgICAgICAgICAgICAgICAgICBOQU1FOiBpdGVtLkRFU0NSSVBUSU9OLnZhbAogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycjsKICAgICAgICAgICAgICAgIH0sIFtdKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgICdvbi1wb3BwZXItc2hvdyc6IGZ1bmN0aW9uIG9uUG9wcGVyU2hvdygkdGhpcykgewogICAgICAgICAgICAvLyDlvZPlpJbplK7kuIvmi4nnq5nlvIDlp4vljrvor7fmsYLmlbDmja4KICAgICAgICAgICAgLy8gdGhpcy5mcmVzaERyb3BEb3duU2VsZWN0RmlsdGVyRGF0YSgkdGhpcykKICAgICAgICAgICAgX3RoaXMuJG5ldHdvcmsucG9zdCgnL3AvYy9tZXRhL3RhYmxlL2xpc3QnLCB7CiAgICAgICAgICAgICAgcGFnZVNpemU6ICR0aGlzLnBhZ2VTaXplLAogICAgICAgICAgICAgIHBhZ2U6IDEKICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhLmNvZGUgPT09IDApIHsKICAgICAgICAgICAgICAgIHJlcy5kYXRhLmRhdGEudGFidGguZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgICAgICAgICBpZiAoaXRlbS5jb2xuYW1lID09PSAnREVTQ1JJUFRJT04nKSB7CiAgICAgICAgICAgICAgICAgICAgaXRlbS5pc2FrID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIF90aGlzLnRhYmxlQ29uZmlnLnByb3BzLmRhdGEgPSByZXMuZGF0YS5kYXRhOwogICAgICAgICAgICAgICAgX3RoaXMudGFibGVDb25maWcucHJvcHMudG90YWxSb3dDb3VudCA9IHJlcy5kYXRhLmRhdGEudG90YWxSb3dDb3VudDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSwKICAgICAgICAgICdvbi1wYWdlLWNoYW5nZSc6IGZ1bmN0aW9uIG9uUGFnZUNoYW5nZShjdXJyZW50UGFnZSwgJHRoaXMpIHsKICAgICAgICAgICAgLy8g5aSW6ZSu55qE5YiG6aG15p+l6K+iCiAgICAgICAgICAgIC8vIHRoaXMuZnJlc2hEcm9wRG93blNlbGVjdEZpbHRlckRhdGEoJHRoaXMsY3VycmVudFBhZ2UpCiAgICAgICAgICAgIF90aGlzLiRuZXR3b3JrLnBvc3QoJy9wL2MvbWV0YS90YWJsZS9saXN0JywgewogICAgICAgICAgICAgIHBhZ2VTaXplOiAkdGhpcy5wYWdlU2l6ZSwKICAgICAgICAgICAgICBwYWdlOiBjdXJyZW50UGFnZQogICAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgICAgICBpZiAocmVzLmRhdGEuY29kZSA9PT0gMCkgewogICAgICAgICAgICAgICAgcmVzLmRhdGEuZGF0YS50YWJ0aC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICAgICAgICAgIGlmIChpdGVtLmNvbG5hbWUgPT09ICdERVNDUklQVElPTicpIHsKICAgICAgICAgICAgICAgICAgICBpdGVtLmlzYWsgPSB0cnVlOwogICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgX3RoaXMudGFibGVDb25maWcucHJvcHMuZGF0YSA9IHJlcy5kYXRhLmRhdGE7CiAgICAgICAgICAgICAgICBfdGhpcy50YWJsZUNvbmZpZy5wcm9wcy50b3RhbFJvd0NvdW50ID0gcmVzLmRhdGEuZGF0YS50b3RhbFJvd0NvdW50OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LAogICAgICAgICAgJ29uLWJsdXInOiBmdW5jdGlvbiBvbkJsdXIoZXZlbnQsIGluc3RhbmNlKSB7Ly8gaWYoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMuZGF0YS5idXNpbmVzc1R5cGUpICE9PSAnW29iamVjdCBBcnJheV0nIHx8IHRoaXMuZGF0YS5idXNpbmVzc1R5cGUubGVuZ3RoID09PSAwKXsKICAgICAgICAgICAgLy8gICBpbnN0YW5jZS5pbnB1dFZhbHVlID0gJycKICAgICAgICAgICAgLy8gICAvKgogICAgICAgICAgICAvLyAgICAgdG9kbwogICAgICAgICAgICAvLyAgICAg5riF56m65omA5pyJ5ZKM5Li76KGo5pyJ5YWz55qE5pWw5o2uCiAgICAgICAgICAgIC8vICAgKi8KICAgICAgICAgICAgLy8gfQogICAgICAgICAgfSwKICAgICAgICAgICdvbi1ma3JwLXNlbGVjdGVkJzogZnVuY3Rpb24gb25Ga3JwU2VsZWN0ZWQodmFsdWUpIHsKICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICBfdGhpcy5jb25maWdEYXRhLm5vZGVGb3JtID0gdmFsdWVbMF0ucm93SXRlbS5OQU1FLnZhbCA/IHZhbHVlWzBdLnJvd0l0ZW0uTkFNRS52YWwgOiB2YWx1ZVswXS5yb3dJdGVtLk5BTUU7CiAgICAgICAgICAgICAgX3RoaXMuY29uZmlnRGF0YS5ub2RlRm9ybUlkID0gdmFsdWVbMF0uSUQ7CiAgICAgICAgICAgICAgX3RoaXMuY29uZmlnRGF0YS5ub2RlRm9ybU5hbWUgPSB2YWx1ZVswXS5MYWJlbDsKCiAgICAgICAgICAgICAgX3RoaXMuZ2V0VmlzaWJsZUJ1dHRvbnMoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBfdGhpcy5jb25maWdEYXRhLm5vZGVGb3JtID0gbnVsbDsKICAgICAgICAgICAgICBfdGhpcy5jb25maWdEYXRhLm5vZGVGb3JtSWQgPSBudWxsOwogICAgICAgICAgICAgIF90aGlzLmNvbmZpZ0RhdGEubm9kZUZvcm1OYW1lID0gbnVsbDsKICAgICAgICAgICAgfSAvLyDmuIXpmaTmnInlhbPlrZfmrrXmlbDmja4KCgogICAgICAgICAgICBfdGhpcy5vbkNsZWFyKCk7CgogICAgICAgICAgICBfdGhpcy5tb2RpZnlGaWVsZC5kZWZhdWx0U2VsZWN0ZWQgPSBbXTsKICAgICAgICAgICAgX3RoaXMuY29uZmlnRGF0YS5iZWhpbmRFdmVudCA9IFtdOwogICAgICAgICAgICBfdGhpcy5jb25maWdEYXRhLnByZUV2ZW50ID0gW107CiAgICAgICAgICAgIF90aGlzLmNvbmZpZ0RhdGEuaW5ldml0YWJsZUV4dHMgPSBbXTsKICAgICAgICAgICAgX3RoaXMuY29uZmlnRGF0YS52aXNpYmxlQnQgPSBbXTsKICAgICAgICAgIH0sCiAgICAgICAgICAnb24tY2xlYXInOiBmdW5jdGlvbiBvbkNsZWFyKCkgewogICAgICAgICAgICAvLyDmuIXpmaTmnInlhbPlrZfmrrXmlbDmja4KICAgICAgICAgICAgX3RoaXMub25DbGVhcigpOwoKICAgICAgICAgICAgX3RoaXMubW9kaWZ5RmllbGQuZGVmYXVsdFNlbGVjdGVkID0gW107CiAgICAgICAgICAgIF90aGlzLmNvbmZpZ0RhdGEuYmVoaW5kRXZlbnQgPSBbXTsKICAgICAgICAgICAgX3RoaXMuY29uZmlnRGF0YS5wcmVFdmVudCA9IFtdOwogICAgICAgICAgICBfdGhpcy5jb25maWdEYXRhLmluZXZpdGFibGVFeHRzID0gW107CiAgICAgICAgICAgIF90aGlzLmNvbmZpZ0RhdGEudmlzaWJsZUJ0ID0gW107CiAgICAgICAgICAgIF90aGlzLmNvbmZpZ0RhdGEubm9kZUZvcm0gPSBudWxsOwogICAgICAgICAgICBfdGhpcy5jb25maWdEYXRhLm5vZGVGb3JtSWQgPSBudWxsOwogICAgICAgICAgICBfdGhpcy5jb25maWdEYXRhLm5vZGVGb3JtTmFtZSA9IG51bGw7CiAgICAgICAgICAgIF90aGlzLnRhYmxlQ29uZmlnLnByb3BzLkF1dG9EYXRhID0gW107CgogICAgICAgICAgICBfdGhpcy4kbmV0d29yay5wb3N0KCcvcC9jL21ldGEvdGFibGUvbGlzdCcsIHsKICAgICAgICAgICAgICBERVNDUklQVElPTjogJycKICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICAgICAgaWYgKHJlcy5kYXRhLmNvZGUgPT09IDApIHsKICAgICAgICAgICAgICAgIF90aGlzLnRhYmxlQ29uZmlnLnByb3BzLkF1dG9EYXRhID0gcmVzLmRhdGEuZGF0YS5yb3cucmVkdWNlKGZ1bmN0aW9uIChhcnIsIGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgYXJyLnB1c2goewogICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLk5BTUUudmFsLAogICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLklELnZhbCwKICAgICAgICAgICAgICAgICAgICBOQU1FOiBpdGVtLkRFU0NSSVBUSU9OLnZhbAogICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycjsKICAgICAgICAgICAgICAgIH0sIFtdKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgdmlzaWJsZUJ1dHRvbnM6IFtdLAogICAgICAvLyDlj6/op4HmjInpkq4KICAgICAgLy/kv67mlLnlrZfmrrXphY3nva4KICAgICAgLy8g5Y+v5pi+56S65a2X5q61CiAgICAgIG1vZGlmeUZpZWxkOiB7CiAgICAgICAgbW9kaWZpYWJsZV9maWVsZDogIumAieS4reeahOWtl+autSIsCiAgICAgICAgbW9kaWZpYWJsZV9maWVsZF9uYW1lOiAiIiwKICAgICAgICAvL+mAieS4reeahOWtl+auteWQjeensDEKICAgICAgICB0b3RhbFJvd0NvdW50OiAwLAogICAgICAgIC8v5pWw5o2u5oC75p2h5pWwCiAgICAgICAgcGFnZVNpemU6IDEwLAogICAgICAgIC8v5q+P6aG15pWw5o2u5p2h5pWwCiAgICAgICAgZGF0YUVtcHR5TWVzc2FnZTogIuaVsOaNruS4uuepuiIsCiAgICAgICAgLy/msqHmlbDmja7ml7bnmoTmj5DnpLoKICAgICAgICBkYXRhOiB7fSwKICAgICAgICAvL+ihqOagvOaVsOaNrgogICAgICAgIGNvbHVtbnNLZXk6IFsidmFsdWUiXSwKICAgICAgICAvL2lucHV05pi+56S655qE5a2X5q61CiAgICAgICAgY29sdW1uczogWyJpZCJdLAogICAgICAgIC8v5qih57OK5pCc57Si6ZqQ6JeP55qE5YiXCiAgICAgICAgQXV0b0RhdGE6IFtdLAogICAgICAgIGRlZmF1bHRTZWxlY3RlZDogW10KICAgICAgfSwKICAgICAgbW9kaWZ5VGFibGVTaG93OiBmYWxzZSwKICAgICAgbW9kaWZ5Q29sdW1uczogW3sKICAgICAgICB0aXRsZTogJ+W6j+WPtycsCiAgICAgICAgcmVuZGVyOiBmdW5jdGlvbiByZW5kZXIoaCwgcGFyYW1zKSB7CiAgICAgICAgICByZXR1cm4gaCgnc3BhbicsIHt9LCBwYXJhbXMuaW5kZXggKyAxKTsKICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICB0aXRsZTogJ+Wtl+auteWQjScsCiAgICAgICAga2V5OiAnTGFiZWwnCiAgICAgIH0sIC8vIHsKICAgICAgLy8gICB0aXRsZTogJ+W/heWhqycsCiAgICAgIC8vICAga2V5OiAnaXNub3RudWxsJywKICAgICAgLy8gICByZW5kZXI6IChoLCBwYXJhbXMpID0+IHsKICAgICAgLy8gICAgICAgcmV0dXJuIGgoJ0NoZWNrYm94JywgewogICAgICAvLyAgICAgICAgIHByb3BzOnsKICAgICAgLy8gICAgICAgICAgICd2YWx1ZSc6cGFyYW1zLnJvdy5pc25vdG51bGwKICAgICAgLy8gICAgICAgICB9LAogICAgICAvLyAgICAgICAgIG9uOnsKICAgICAgLy8gICAgICAgICAgICdvbi1jaGFuZ2UnOiAodmFsdWUpID0+IHsKICAgICAgLy8gICAgICAgICAgICAgdGhpcy5jb25maWdEYXRhLm1vZGlmaWFibGVGaWVsZFtwYXJhbXMuaW5kZXhdLmlzbm90bnVsbCA9IHZhbHVlCiAgICAgIC8vICAgICAgICAgICB9CiAgICAgIC8vICAgICAgICAgfQogICAgICAvLyAgICAgICB9KTsKICAgICAgLy8gICB9CiAgICAgIC8vIH0sCiAgICAgIHsKICAgICAgICB0aXRsZTogJ+WPquivuycsCiAgICAgICAga2V5OiAncmVhZG9ubHknLAogICAgICAgIHJlbmRlcjogZnVuY3Rpb24gcmVuZGVyKGgsIHBhcmFtcykgewogICAgICAgICAgcmV0dXJuIGgoJ0NoZWNrYm94JywgewogICAgICAgICAgICBwcm9wczogewogICAgICAgICAgICAgICd2YWx1ZSc6IHBhcmFtcy5yb3cucmVhZG9ubHkKICAgICAgICAgICAgfSwKICAgICAgICAgICAgb246IHsKICAgICAgICAgICAgICAnb24tY2hhbmdlJzogZnVuY3Rpb24gb25DaGFuZ2UodmFsdWUpIHsKICAgICAgICAgICAgICAgIF90aGlzLmNvbmZpZ0RhdGEubW9kaWZpYWJsZUZpZWxkW3BhcmFtcy5pbmRleF0ucmVhZG9ubHkgPSB2YWx1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwgewogICAgICAgIHRpdGxlOiAn5pON5L2cJywKICAgICAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihoLCBwYXJhbXMpIHsKICAgICAgICAgIHJldHVybiBoKCdzcGFuJywgewogICAgICAgICAgICBzdHlsZTogewogICAgICAgICAgICAgIGNvbG9yOiAncmdiYSgxNiwgMTQyLCAyMzMsIDEpJywKICAgICAgICAgICAgICBjdXJzb3I6ICdwb2ludGVyJwogICAgICAgICAgICB9LAogICAgICAgICAgICBvbjogewogICAgICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiBjbGljaygpIHsKICAgICAgICAgICAgICAgIF90aGlzLmNvbmZpZ0RhdGEubW9kaWZpYWJsZUZpZWxkID0gX3RoaXMuY29uZmlnRGF0YS5tb2RpZmlhYmxlRmllbGQuZmlsdGVyKGZ1bmN0aW9uIChpdGVtLCBpbmRleCkgewogICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXggIT09IHBhcmFtcy5pbmRleDsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgX3RoaXMubW9kaWZ5RmllbGQuZGVmYXVsdFNlbGVjdGVkID0gX3RoaXMuY29uZmlnRGF0YS5tb2RpZmlhYmxlRmllbGQ7CgogICAgICAgICAgICAgICAgaWYgKF90aGlzLm1vZGlmeUZpZWxkLmRlZmF1bHRTZWxlY3RlZC5sZW5ndGggPT09IDApIHsKICAgICAgICAgICAgICAgICAgX3RoaXMubW9kaWZ5VGFibGVTaG93ID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LCAn5Yig6ZmkJyk7CiAgICAgICAgfQogICAgICB9XSwKICAgICAgcGFnZUJ0bkRhdGE6IFt7CiAgICAgICAgbGFiZWw6ICLmnIDlsJHlkIzmhI/kurrmlbAiLAogICAgICAgIGljb250eXBlOiAxLAogICAgICAgIGNvbG9yOiAiIzA5QTE1NSIsCiAgICAgICAgdmFsdWU6ICIiCiAgICAgIH0sIHsKICAgICAgICBsYWJlbDogIuWQjOaEj+eKtuaAgeWIq+WQjSIsCiAgICAgICAgaWNvbnR5cGU6IDEsCiAgICAgICAgY29sb3I6ICIjMDlBMTU1IiwKICAgICAgICB2YWx1ZTogIiIKICAgICAgfSwgewogICAgICAgIGxhYmVsOiAi5pyA5bCR5ouS57ud5Lq65pWwIiwKICAgICAgICBpY29udHlwZTogMiwKICAgICAgICBjb2xvcjogIiNFRDQwMTQiLAogICAgICAgIHZhbHVlOiAiIgogICAgICB9LCB7CiAgICAgICAgbGFiZWw6ICLmi5Lnu53nirbmgIHliKvlkI0iLAogICAgICAgIGljb250eXBlOiAyLAogICAgICAgIGNvbG9yOiAiI0VENDAxNCIsCiAgICAgICAgdmFsdWU6ICIiCiAgICAgIH1dLAogICAgICBzdGF0dXMxOiBmYWxzZSwKICAgICAgLy/otoXml7bmj5DphpIKICAgICAgc3RhdHVzMjogZmFsc2UsCiAgICAgIC8v6Ieq5Yqo5aSE55CGCiAgICAgIG9wZW5Db250cm9sOiBmYWxzZSwKICAgICAgLy/mjqfliLblvLnmoYbmmK/lkKbmmL7npLoKICAgICAgbG9hZGluZzogZmFsc2UsCiAgICAgIC8vIHrmnIDlpKdsb2FkaW5nCiAgICAgIHJlc3VsdERhdGE6IHt9LAogICAgICAvLyDpgInkuK3nu5PmnpwKICAgICAgb3BlbjogZmFsc2UsCiAgICAgIC8vIOaYr+WQpuaJk+W8gAogICAgICBvYmo6IHt9LAogICAgICAvL+S8oOe7mXRhYmxl55qE5a+56LGhCiAgICAgIHNhdmVPYmo6IHt9LAogICAgICAvL+WtmOWCqOeahOavj+asoeiKgueCueeahOWvueixoQogICAgICBzZWxlY3RSb3c6IFtdLAogICAgICAvL+W8ueahhuWkmumAieWNleWHu+S4gOihjOeahOaVsOaNrgogICAgICBhcHByb3ZlczogIiIsCiAgICAgIC8v5a6h5om555u45YWz5pWw5o2uCiAgICAgIHNldE92ZXJ0aW1lOiB7CiAgICAgICAgdGhyZXNob2xkOiAiIiwKICAgICAgICBzb3VyY2VzOiAwLAogICAgICAgIHN0YXR1czogMSwKICAgICAgICBoYW5kbGVWYWx1ZTogIiIsCiAgICAgICAgaGFuZGxlVHlwZTogMTEsCiAgICAgICAgZXh0cmFNc2c6ICIiCiAgICAgIH0sCiAgICAgIGF1dG9EZXRhaWw6IHsKICAgICAgICB0aHJlc2hvbGQ6ICIiLAogICAgICAgIHNvdXJjZXM6IDAsCiAgICAgICAgc3RhdHVzOiAxLAogICAgICAgIGhhbmRsZVR5cGU6IDIwLAogICAgICAgIGV4dHJhTXNnOiAiIiwKICAgICAgICBoYW5kbGVWYWx1ZTogIiIKICAgICAgfSwKICAgICAgYXBwcm92ZWxMaXN0OiBbXSwKICAgICAgLy/lrZjmlL7lrqHmibnnm7jlhbPnmoTmlbDmja4KICAgICAgY2xvc2VUeXBlOiBmYWxzZSwKICAgICAgLy/mjqfliLblrqHmibnnoa7lrprlj5bmtojmmL7npLrnirbmgIEKICAgICAgaXNDYWxsSW50ZXJmYWNlOiBmYWxzZSwKICAgICAgZGVmYXVsdE9iajoge30gLy/pu5jorqTmlbDmja4KCiAgICB9OwogIH0sCiAgY29tcHV0ZWQ6IHsKICAgIHRhYmxlSW5mbzogZnVuY3Rpb24gdGFibGVJbmZvKCkgewogICAgICByZXR1cm4gewogICAgICAgIHRhYmxlSWQ6IHRoaXMuY29uZmlnRGF0YS5ub2RlRm9ybUlkLAogICAgICAgIHRhYmxlTmFtZTogdGhpcy5jb25maWdEYXRhLm5vZGVGb3JtCiAgICAgIH07CiAgICB9LAogICAgYWN0U2VydmljZVM6IGZ1bmN0aW9uIGFjdFNlcnZpY2VTKCkgewogICAgICByZXR1cm4gW3RoaXMuc2V0T3ZlcnRpbWUsIHRoaXMuYXV0b0RldGFpbF07CiAgICB9CiAgfSwKICB3YXRjaDogewogICAgcGFnZUJ0bkRhdGE6IHsKICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihuZXdWYWwpIHsKICAgICAgICB2YXIgdGVtQXJyID0gW3sKICAgICAgICAgIGFjdFR5cGU6IDAsCiAgICAgICAgICBhY3ROYW1lOiBuZXdWYWxbMV0udmFsdWUsCiAgICAgICAgICBhY3RMaW1pdDogbmV3VmFsWzBdLnZhbHVlCiAgICAgICAgfSwgewogICAgICAgICAgYWN0VHlwZTogMSwKICAgICAgICAgIGFjdE5hbWU6IG5ld1ZhbFszXS52YWx1ZSwKICAgICAgICAgIGFjdExpbWl0OiBuZXdWYWxbMl0udmFsdWUKICAgICAgICB9XTsKCiAgICAgICAgaWYgKHRoaXMuY29uZmlnRGF0YS5ydWxlTGlzdC5sZW5ndGggPCAxKSB7CiAgICAgICAgICB0aGlzLmNvbmZpZ0RhdGEucnVsZUxpc3QgPSB0ZW1BcnI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuY29uZmlnRGF0YS5ydWxlTGlzdC5tYXAoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgICAgdGVtQXJyLm1hcChmdW5jdGlvbiAoaW5uZXIpIHsKICAgICAgICAgICAgICBpZiAoaXRlbS5hY3RUeXBlID09PSBpbm5lci5hY3RUeXBlKSB7CiAgICAgICAgICAgICAgICBpdGVtID0gT2JqZWN0LmFzc2lnbihpdGVtLCBpbm5lcik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZGVlcDogdHJ1ZQogICAgfSwKICAgIGFjdFNlcnZpY2VTOiB7CiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIobmV3VmFsKSB7CiAgICAgICAgdGhpcy5jb25maWdEYXRhLmFjdFNlcnZpY2VTID0gbmV3VmFsOwogICAgICB9LAogICAgICBkZWVwOiB0cnVlCiAgICB9LAogICAgYXBwcm92ZWxMaXN0OiB7CiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIobmV3VmFsKSB7CiAgICAgICAgdGhpcy5jb25maWdEYXRhLmFwcHJvdmVsTGlzdCA9IG5ld1ZhbDsKICAgICAgfSwKICAgICAgZGVlcDogdHJ1ZQogICAgfQogIH0sCiAgbWV0aG9kczogewogICAgb25CbHVyOiBmdW5jdGlvbiBvbkJsdXIoZXZlbnQsIGlucywga2V5KSB7CiAgICAgIHZhciByZXMgPSAvXlswLTldKiQvOwoKICAgICAgaWYgKHJlcy50ZXN0KGtleSkpIHsKICAgICAgICBpZiAodGhpcy5wYWdlQnRuRGF0YVtrZXldLnZhbHVlID09PSAiIiAmJiBrZXkgPT0gMCkgewogICAgICAgICAgdGhpcy4kTWVzc2FnZS53YXJuaW5nKCLmnIDlsJHlkIzmhI/kurrmlbDkuI3og73kuLrnqboiKTsKICAgICAgICB9CgogICAgICAgIGlmICh0aGlzLnBhZ2VCdG5EYXRhW2tleV0udmFsdWUgPT09ICIiICYmIGtleSA9PSAxKSB7CiAgICAgICAgICB0aGlzLiRNZXNzYWdlLndhcm5pbmcoIuWQjOaEj+eKtuaAgeWIq+WQjeS4jeiDveS4uuepuiIpOwogICAgICAgIH0KCiAgICAgICAgaWYgKHRoaXMucGFnZUJ0bkRhdGFba2V5XS52YWx1ZSA9PT0gIiIgJiYga2V5ID09IDIpIHsKICAgICAgICAgIHRoaXMuJE1lc3NhZ2Uud2FybmluZygi5pyA5bCR5ouS57ud5Lq65pWw5LiN6IO95Li656m6Iik7CiAgICAgICAgfQoKICAgICAgICBpZiAodGhpcy5wYWdlQnRuRGF0YVtrZXldLnZhbHVlID09PSAiIiAmJiBrZXkgPT0gMykgewogICAgICAgICAgdGhpcy4kTWVzc2FnZS53YXJuaW5nKCLmi5Lnu53nirbmgIHliKvlkI3kuI3og73kuLrnqboiKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAvL+WPr+aYvuWtl+auteS4i+aLieWkmumAieS6i+S7tgogICAgT25Ga3JwU2VsZWN0ZWQ6IGZ1bmN0aW9uIE9uRmtycFNlbGVjdGVkKHNlbGVjdGVkKSB7CiAgICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPT09IDApIHsKICAgICAgICB0aGlzLm1vZGlmeVRhYmxlU2hvdyA9IGZhbHNlOwogICAgICB9CgogICAgICBzZWxlY3RlZC5tYXAoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAvLyBpdGVtLmlzbm90bnVsbCA9IGZhbHNlCiAgICAgICAgaXRlbS5yZWFkb25seSA9IGZhbHNlOwogICAgICAgIHJldHVybiBpdGVtOwogICAgICB9KTsKICAgICAgdGhpcy5tb2RpZnlGaWVsZC5tb2RpZmlhYmxlRmllbGQgPSBzZWxlY3RlZDsKICAgICAgdGhpcy5jb25maWdEYXRhLm1vZGlmaWFibGVGaWVsZCA9IHNlbGVjdGVkOwogICAgfSwKICAgIG9uUG9wcGVyU2hvdzogZnVuY3Rpb24gb25Qb3BwZXJTaG93KCkgewogICAgICAvL+S4i+aLieWkmumAiQogICAgICB0aGlzLmZpbmRGaWVsZCh7CiAgICAgICAgQURfVEFCTEVfSUQ6IHRoaXMuY29uZmlnRGF0YS5ub2RlRm9ybUlkCiAgICAgIH0pOwogICAgfSwKICAgIGNoYW5nZVBhZ2U6IGZ1bmN0aW9uIGNoYW5nZVBhZ2UodmFsKSB7CiAgICAgIHRoaXMuZmluZEZpZWxkKHsKICAgICAgICBwYWdlU2l6ZTogdGhpcy5tb2RpZnlGaWVsZC5wYWdlU2l6ZSwKICAgICAgICBwYWdlOiB2YWwsCiAgICAgICAgQURfVEFCTEVfSUQ6IHRoaXMuY29uZmlnRGF0YS5ub2RlRm9ybUlkCiAgICAgIH0pOwogICAgfSwKICAgIG1vZGlmaWFibGVGaWVsZENsaWNrOiBmdW5jdGlvbiBtb2RpZmlhYmxlRmllbGRDbGljaygpIHsKICAgICAgLy/lj6/mmL7lrZfmrrXlj6ror7sv5b+F5aGr5o6n5Yi2CiAgICAgIGlmICh0aGlzLm1vZGlmeVRhYmxlU2hvdykgey8v5L+d5a2Y5p2D6ZmQCiAgICAgIH0gZWxzZSB7Ly/mm7TmlLnmnYPpmZAKICAgICAgICB9CgogICAgICB0aGlzLm1vZGlmeVRhYmxlU2hvdyA9ICF0aGlzLm1vZGlmeVRhYmxlU2hvdzsKICAgIH0sCiAgICAvL+aooeeziuafpeaJvmlucHV05LqL5Lu2CiAgICBpbnB1dENoYW5nZTogZnVuY3Rpb24gaW5wdXRDaGFuZ2UodmFsKSB7CiAgICAgIHRoaXMuZmluZEZpZWxkKHsKICAgICAgICBERVNDUklQVElPTjogdmFsLAogICAgICAgIEFEX1RBQkxFX0lEOiB0aGlzLmNvbmZpZ0RhdGEubm9kZUZvcm1JZAogICAgICB9KTsKICAgIH0sCiAgICBvbkNsZWFyOiBmdW5jdGlvbiBvbkNsZWFyKCkgewogICAgICB0aGlzLm1vZGlmeVRhYmxlU2hvdyA9IGZhbHNlOwogICAgICB0aGlzLm1vZGlmeUZpZWxkLm1vZGlmaWFibGVGaWVsZCA9IFtdOwogICAgICB0aGlzLmNvbmZpZ0RhdGEubW9kaWZpYWJsZUZpZWxkID0gW107CiAgICB9LAogICAgLy/lj6/mmL7lrZfmrrXmuIXpmaTkuovku7YKICAgIGNoYW5nZTE6IGZ1bmN0aW9uIGNoYW5nZTEodmFsKSB7CiAgICAgIHRoaXMuc3RhdHVzMSA9IHZhbDsKICAgICAgdGhpcy5zZXRPdmVydGltZSA9IHsKICAgICAgICB0aHJlc2hvbGQ6ICIiLAogICAgICAgIHNvdXJjZXM6IDAsCiAgICAgICAgc3RhdHVzOiAxLAogICAgICAgIGhhbmRsZVZhbHVlOiAiIiwKICAgICAgICBoYW5kbGVUeXBlOiAxMSwKICAgICAgICBleHRyYU1zZzogIiIsCiAgICAgICAgaWQ6IHRoaXMuc2V0T3ZlcnRpbWUuaWQKICAgICAgfTsKCiAgICAgIGlmICh2YWwpIHsKICAgICAgICB0aGlzLnNldE92ZXJ0aW1lLnN0YXR1cyA9IDA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5zZXRPdmVydGltZS5zdGF0dXMgPSAxOwogICAgICB9CiAgICB9LAogICAgY2hhbmdlMjogZnVuY3Rpb24gY2hhbmdlMih2YWwpIHsKICAgICAgdGhpcy5zdGF0dXMyID0gdmFsOwogICAgICB0aGlzLmF1dG9EZXRhaWwgPSB7CiAgICAgICAgdGhyZXNob2xkOiAiIiwKICAgICAgICBzb3VyY2VzOiAwLAogICAgICAgIHN0YXR1czogMSwKICAgICAgICBoYW5kbGVUeXBlOiAyMCwKICAgICAgICBleHRyYU1zZzogIiIsCiAgICAgICAgaGFuZGxlVmFsdWU6ICIiLAogICAgICAgIGlkOiB0aGlzLmF1dG9EZXRhaWwuaWQKICAgICAgfTsKCiAgICAgIGlmICh2YWwpIHsKICAgICAgICB0aGlzLmF1dG9EZXRhaWwuc3RhdHVzID0gMDsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmF1dG9EZXRhaWwuc3RhdHVzID0gMTsKICAgICAgfQogICAgfSwKICAgIGdldFJlc3VsdDogZnVuY3Rpb24gZ2V0UmVzdWx0KGRhdGEpIHsKICAgICAgdGhpcy5yZXN1bHREYXRhID0gT2JqZWN0LmFzc2lnbih7fSwgZGF0YSk7CgogICAgICBpZiAodGhpcy5yZXN1bHREYXRhLmxpc3QubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMuYXBwcm92ZWxMaXN0ID0gdGhpcy5yZXN1bHREYXRhLmxpc3QubWFwKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICB2YXIgdGVtID0gT2JqZWN0LmFzc2lnbih7fSwgaXRlbSk7CiAgICAgICAgICBkZWxldGUgdGVtLnN0cmluZzsKICAgICAgICAgIHJldHVybiB0ZW07CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5hcHByb3ZlbExpc3QgPSBbXTsKICAgICAgfQogICAgfSwKICAgIC8v6I635Y+W5Y+v5L+u5pS55a2X5q61CiAgICBmaW5kRmllbGQ6IGZ1bmN0aW9uIGZpbmRGaWVsZChwYXJhbSkgewogICAgICB2YXIgX3RoaXMyID0gdGhpczsKCiAgICAgIHRoaXMuJG5ldHdvcmsucG9zdCgiL3AvYy9tZXRhL2NvbHVtbi9saXN0IiwgcGFyYW0pLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIGlmIChyZXMuZGF0YS5jb2RlID09PSAwKSB7CiAgICAgICAgICBpZiAocGFyYW0uaGFzT3duUHJvcGVydHkoIkRFU0NSSVBUSU9OIikpIHsKICAgICAgICAgICAgX3RoaXMyLm1vZGlmeUZpZWxkLkF1dG9EYXRhID0gW107CiAgICAgICAgICAgIF90aGlzMi5tb2RpZnlGaWVsZC5BdXRvRGF0YSA9IHJlcy5kYXRhLmRhdGEucm93LnJlZHVjZShmdW5jdGlvbiAoYXJyLCBpdGVtKSB7CiAgICAgICAgICAgICAgYXJyLnB1c2goewogICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0uREVTQ1JJUFRJT04udmFsLAogICAgICAgICAgICAgICAgaWQ6IGl0ZW0uSUQudmFsCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgcmV0dXJuIGFycjsKICAgICAgICAgICAgfSwgW10pOwogICAgICAgICAgfQoKICAgICAgICAgIHJlcy5kYXRhLmRhdGEudGFidGgubWFwKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICAgIGlmIChpdGVtLmNvbG5hbWUgPT09ICJERVNDUklQVElPTiIpIHsKICAgICAgICAgICAgICBpdGVtLmlzYWsgPSB0cnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGl0ZW0uaXNhayA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIF90aGlzMi5tb2RpZnlGaWVsZC5kYXRhID0gcmVzLmRhdGEuZGF0YTsKICAgICAgICAgIF90aGlzMi5tb2RpZnlGaWVsZC50b3RhbFJvd0NvdW50ID0gcmVzLmRhdGEuZGF0YS50b3RhbFJvd0NvdW50OwogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAogICAgc2F2ZUNvbmZpZzogZnVuY3Rpb24gc2F2ZUNvbmZpZygpIHsKICAgICAgdmFyIF90aGlzMyA9IHRoaXM7CgogICAgICAvL+ehruWumuaMiemSrueCueWHuwogICAgICAvLyDoioLngrnlv4Xnu48KICAgICAgaWYgKHRoaXMuY29uZmlnRGF0YS5pbmV2aXRhYmxlID09PSAyICYmICghdGhpcy5jb25maWdEYXRhLmluZXZpdGFibGVFeHRzIHx8IHRoaXMuY29uZmlnRGF0YS5pbmV2aXRhYmxlRXh0cy5sZW5ndGggPT09IDApKSB7CiAgICAgICAgdGhpcy4kTW9kYWwuZmNFcnJvcih7CiAgICAgICAgICB0aXRsZTogJ+mUmeivrycsCiAgICAgICAgICBjb250ZW50OiAn6KeE5YiZ6YWN572u5LiN6IO95Li656m6JywKICAgICAgICAgIG1hc2s6IHRydWUKICAgICAgICB9KTsKICAgICAgICByZXR1cm47CiAgICAgIH0gLy8g5pON5L2c5Lq6CgoKICAgICAgaWYgKHRoaXMuY29uZmlnRGF0YS5hcHByb3ZlclN0eWxlID09PSAwKSB7CiAgICAgICAgLy/nm7TmjqXpgInmi6kKICAgICAgICAvLyDlrqHmibnkurrkuLrnqboKICAgICAgICBpZiAodGhpcy5jb25maWdEYXRhLmFwcHJvdmVsTGlzdCAmJiB0aGlzLmNvbmZpZ0RhdGEuYXBwcm92ZWxMaXN0Lmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgdGhpcy4kTW9kYWwuZmNFcnJvcih7CiAgICAgICAgICAgIHRpdGxlOiAn6ZSZ6K+vJywKICAgICAgICAgICAgY29udGVudDogJ+WuoeaJueS6uuS4jeiDveS4uuepuicsCiAgICAgICAgICAgIG1hc2s6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICAvL+aJqeWxleeoi+W6jwogICAgICAgIC8vIOaJqeWxleeoi+W6j+S4uuepugogICAgICAgIGlmICh0aGlzLmNvbmZpZ0RhdGEuYWN0aW9uQ29uZmlnWzBdICYmICF0aGlzLmNvbmZpZ0RhdGEuYWN0aW9uQ29uZmlnWzBdLmhhbmRsZVZhbHVlKSB7CiAgICAgICAgICB0aGlzLiRNb2RhbC5mY0Vycm9yKHsKICAgICAgICAgICAgdGl0bGU6ICfplJnor68nLAogICAgICAgICAgICBjb250ZW50OiAn5omp5bGV56iL5bqP5LiN6IO95Li656m6JywKICAgICAgICAgICAgbWFzazogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9IC8vIOWuoeaJueadoeS7tgoKCiAgICAgIGlmICh0aGlzLmNvbmZpZ0RhdGEuYXBwcm92ZUNvbmRpdGlvbiA9PT0gMCkgewogICAgICAgIC8vIOacgOWwkeWQjOaEj+S6uuaVsAogICAgICAgIGlmICghdGhpcy5wYWdlQnRuRGF0YVswXS52YWx1ZSkgewogICAgICAgICAgdGhpcy4kTW9kYWwuZmNFcnJvcih7CiAgICAgICAgICAgIHRpdGxlOiAn6ZSZ6K+vJywKICAgICAgICAgICAgY29udGVudDogJ+acgOWwkeWQjOaEj+S6uuaVsOS4jeiDveS4uuepuicsCiAgICAgICAgICAgIG1hc2s6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0gLy8g5pyA5bCR5ouS57ud5Lq65pWwCgoKICAgICAgICBpZiAoIXRoaXMucGFnZUJ0bkRhdGFbMl0udmFsdWUpIHsKICAgICAgICAgIHRoaXMuJE1vZGFsLmZjRXJyb3IoewogICAgICAgICAgICB0aXRsZTogJ+mUmeivrycsCiAgICAgICAgICAgIGNvbnRlbnQ6ICfmnIDlsJHmi5Lnu53kurrmlbDkuI3og73kuLrnqbonLAogICAgICAgICAgICBtYXNrOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0gLy8g6amz5Zue6IqC54K5CgoKICAgICAgaWYgKHRoaXMuY29uZmlnRGF0YS5hc3NpZ25CYWNrID09PSAxICYmICF0aGlzLmNvbmZpZ0RhdGEuYmFja0lkKSB7CiAgICAgICAgdGhpcy4kTW9kYWwuZmNFcnJvcih7CiAgICAgICAgICB0aXRsZTogJ+mUmeivrycsCiAgICAgICAgICBjb250ZW50OiAn6amz5Zue6IqC54K55LiN6IO95Li656m6JywKICAgICAgICAgIG1hc2s6IHRydWUKICAgICAgICB9KTsKICAgICAgICByZXR1cm47CiAgICAgIH0gLy8g5L2c5bqf5pON5L2cIC0t5Y+R6LW35L2c5bqf55Sz6K+3CgoKICAgICAgaWYgKHRoaXMuY29uZmlnRGF0YS5ub2RlQ2FuY2xlID09PSAxICYmICF0aGlzLmNvbmZpZ0RhdGEuY2FuY2xlVXJsKSB7CiAgICAgICAgdGhpcy4kTW9kYWwuZmNFcnJvcih7CiAgICAgICAgICB0aXRsZTogJ+mUmeivrycsCiAgICAgICAgICBjb250ZW50OiAn5L2c5bqf55Sz6K+35Zyw5Z2A5LiN6IO95Li656m6JywKICAgICAgICAgIG1hc2s6IHRydWUKICAgICAgICB9KTsKICAgICAgICByZXR1cm47CiAgICAgIH0gLy8g5oyH5rS+5rWB6L2s6IqC54K5CgoKICAgICAgaWYgKHRoaXMuY29uZmlnRGF0YS5hc3NpZ25OZXh0ID09PSAwICYmICghdGhpcy5jb25maWdEYXRhLmFzc2lnblJhbmdlIHx8IHRoaXMuY29uZmlnRGF0YS5hc3NpZ25SYW5nZS5sZW5ndGggPT09IDApKSB7CiAgICAgICAgdGhpcy4kTW9kYWwuZmNFcnJvcih7CiAgICAgICAgICB0aXRsZTogJ+mUmeivrycsCiAgICAgICAgICBjb250ZW50OiAn6IqC54K56IyD5Zu05LiN6IO95Li656m6JywKICAgICAgICAgIG1hc2s6IHRydWUKICAgICAgICB9KTsKICAgICAgICByZXR1cm47CiAgICAgIH0gLy8g6LaF5pe25o+Q6YaSCgoKICAgICAgaWYgKHRoaXMuc3RhdHVzMSAmJiAoIXRoaXMuc2V0T3ZlcnRpbWUudGhyZXNob2xkIHx8ICF0aGlzLnNldE92ZXJ0aW1lLmhhbmRsZVZhbHVlKSkgewogICAgICAgIHRoaXMuJE1vZGFsLmZjRXJyb3IoewogICAgICAgICAgdGl0bGU6ICfplJnor68nLAogICAgICAgICAgY29udGVudDogJ+ivt+Whq+WGmeWujOWWhOi2heaXtuaPkOmGkuS/oeaBrycsCiAgICAgICAgICBtYXNrOiB0cnVlCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9IC8v6Ieq5Yqo5aSE55CGCgoKICAgICAgaWYgKHRoaXMuc3RhdHVzMiAmJiAhdGhpcy5hdXRvRGV0YWlsLnRocmVzaG9sZCkgewogICAgICAgIHRoaXMuJE1vZGFsLmZjRXJyb3IoewogICAgICAgICAgdGl0bGU6ICfplJnor68nLAogICAgICAgICAgY29udGVudDogJ+ivt+Whq+WGmeWujOWWhOiHquWKqOWkhOeQhuS/oeaBrycsCiAgICAgICAgICBtYXNrOiB0cnVlCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9IC8vIOaOp+WItuiHquWKqOWkhOeQhuaXtumXtOWkp+S6jui2heaXtuaPkOmGkuaXtumXtAoKCiAgICAgIGlmICh0aGlzLnN0YXR1czEgJiYgdGhpcy5zdGF0dXMyKSB7CiAgICAgICAgdmFyIHN0YXJ0ID0gdGhpcy5zZXRPdmVydGltZS5zb3VyY2VzID09PSAwID8gTnVtYmVyKHRoaXMuc2V0T3ZlcnRpbWUudGhyZXNob2xkKSA6IE51bWJlcih0aGlzLnNldE92ZXJ0aW1lLnRocmVzaG9sZCkgKiAyNDsKICAgICAgICB2YXIgZW5kID0gdGhpcy5hdXRvRGV0YWlsLnNvdXJjZXMgPT09IDAgPyBOdW1iZXIodGhpcy5hdXRvRGV0YWlsLnRocmVzaG9sZCkgOiBOdW1iZXIodGhpcy5hdXRvRGV0YWlsLnRocmVzaG9sZCkgKiAyNDsKCiAgICAgICAgaWYgKHN0YXJ0ID49IGVuZCkgewogICAgICAgICAgdGhpcy4kTW9kYWwuZmNFcnJvcih7CiAgICAgICAgICAgIHRpdGxlOiAn6ZSZ6K+vJywKICAgICAgICAgICAgY29udGVudDogJ+i2heaXtuaPkOmGkuaXtumXtOS4jeiDveWkp+S6juiHquWKqOWkhOeQhuaXtumXtCcsCiAgICAgICAgICAgIG1hc2s6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQoKICAgICAgdmFyIGd1aVN0eWxlID0gSlNPTi5wYXJzZSh0aGlzLiRwYXJlbnQuJHBhcmVudC5teURlc2lnbmVyLmdldEZsb3dEYXRhKCkpOwogICAgICBndWlTdHlsZS5ub2RlRGF0YUFycmF5Lm1hcChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgIGlmIChfdGhpczMuY29uZmlnRGF0YS5rZXkgPT09IGl0ZW0ua2V5KSB7CiAgICAgICAgICBpdGVtLnRleHQgPSBfdGhpczMuY29uZmlnRGF0YS5uYW1lOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGl0ZW07CiAgICAgIH0pOwoKICAgICAgaWYgKHRoaXMuZGVmYXVsdE9iai5ub2RlRm9ybUlkICE9PSB0aGlzLmNvbmZpZ0RhdGEubm9kZUZvcm1JZCAmJiB0aGlzLmRlZmF1bHRPYmoubm9kZUZvcm1JZCkgewogICAgICAgIHRoaXMuJE1vZGFsLmZjRXJyb3IoewogICAgICAgICAgdGl0bGU6ICfplJnor68nLAogICAgICAgICAgY29udGVudDogJ+W9k+WJjeiKgueCueeahOihqOWNleW3suS/ruaUue+8jOiKgueCueWQjueahOi/nue6v+mFjee9ruWwhuS8mua4heepuu+8jOaYr+WQpuehruiupOS/neWtmO+8nycsCiAgICAgICAgICBtYXNrOiB0cnVlLAogICAgICAgICAgc2hvd0NhbmNlbDogdHJ1ZSwKICAgICAgICAgIG9uT2s6IGZ1bmN0aW9uIG9uT2soKSB7CiAgICAgICAgICAgIF90aGlzMy5ub2RlLmZpbmRMaW5rc091dE9mKCkubWFwKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICAgICAgZGVsZXRlIF90aGlzMy4kcGFyZW50LiRwYXJlbnQucGF0aE1zZ1tpdGVtLmRhdGEua2V5XTsKICAgICAgICAgICAgICB2YXIgZ3VpU3R5bGUgPSBKU09OLnBhcnNlKF90aGlzMy4kcGFyZW50LiRwYXJlbnQubXlEZXNpZ25lci5nZXRGbG93RGF0YSgpKTsKICAgICAgICAgICAgICBndWlTdHlsZS5saW5rRGF0YUFycmF5ID0gZ3VpU3R5bGUubGlua0RhdGFBcnJheS5maWx0ZXIoZnVuY3Rpb24gKHRlbXApIHsKICAgICAgICAgICAgICAgIHJldHVybiB0ZW1wLmtleSAhPT0gaXRlbS5kYXRhLmtleTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBfdGhpczMuJHBhcmVudC4kcGFyZW50LmRhdGEuZ3VpU3R5bGUgPSBKU09OLnN0cmluZ2lmeShndWlTdHlsZSk7CgogICAgICAgICAgICBfdGhpczMuJHBhcmVudC4kcGFyZW50LmluaXQoKTsKCiAgICAgICAgICAgIF90aGlzMy4kZW1pdCgnY2xvc2VEcmF3ZXInKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXR1cm47CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy4kcGFyZW50LiRwYXJlbnQuZGF0YS5ndWlTdHlsZSA9IEpTT04uc3RyaW5naWZ5KGd1aVN0eWxlKTsKICAgICAgICB0aGlzLiRwYXJlbnQuJHBhcmVudC5pbml0KCk7CiAgICAgICAgdGhpcy4kZW1pdCgnY2xvc2VEcmF3ZXInKTsKICAgICAgfQogICAgfSwKICAgIGNsb3NlRHJhd2VyOiBmdW5jdGlvbiBjbG9zZURyYXdlcigpIHsKICAgICAgLy/lj5bmtojmjInpkq7ngrnlh7sKICAgICAgdGhpcy4kcGFyZW50LiRwYXJlbnQubm9kZU1zZ1tOdW1iZXIodGhpcy5jb25maWdEYXRhLmtleSldID0gdGhpcy5kZWZhdWx0T2JqOwogICAgICB0aGlzLiRlbWl0KCdjbG9zZURyYXdlcicpOwogICAgfSwKICAgIGFwcHJvdmVyU3R5bGVDaGFuZ2U6IGZ1bmN0aW9uIGFwcHJvdmVyU3R5bGVDaGFuZ2UoKSB7CiAgICAgIC8v6YCJ5oup5a6h5om55Lq657G75Z6L5YiH5o2iCiAgICAgIHRoaXMuY29uZmlnRGF0YS5hY3Rpb25Db25maWdbMF0uaGFuZGxlVmFsdWUgPSBudWxsOwogICAgICB0aGlzLnJlc3VsdERhdGEgPSB7fTsKICAgICAgdGhpcy5hcHByb3ZlbExpc3QgPSBbXTsKICAgIH0sCiAgICAvLyDlrqHmibnmnaHku7Yg5omp5bGVCiAgICBpbmV2aXRhYmxlUmVzdWx0OiBmdW5jdGlvbiBpbmV2aXRhYmxlUmVzdWx0KHZhbHVlKSB7CiAgICAgIHRoaXMuY29uZmlnRGF0YS5pbmV2aXRhYmxlRXh0cyA9IHZhbHVlOwogICAgfSwKICAgIHByZUV2ZW50UmVzdWx0OiBmdW5jdGlvbiBwcmVFdmVudFJlc3VsdCh2YWx1ZSkgewogICAgICAvL+WJjee9ruS6i+S7tuWkhOeQhgogICAgICB0aGlzLmNvbmZpZ0RhdGEucHJlRXZlbnQgPSB2YWx1ZTsKICAgIH0sCiAgICBiZWhpbmRFdmVudFJlc3VsdDogZnVuY3Rpb24gYmVoaW5kRXZlbnRSZXN1bHQodmFsdWUpIHsKICAgICAgLy/lkI7nva7kuovku7blpITnkIYKICAgICAgdGhpcy5jb25maWdEYXRhLmJlaGluZEV2ZW50ID0gdmFsdWU7CiAgICB9LAogICAgZ2V0VmlzaWJsZUJ1dHRvbnM6IGZ1bmN0aW9uIGdldFZpc2libGVCdXR0b25zKCkgewogICAgICB2YXIgX3RoaXM0ID0gdGhpczsKCiAgICAgIC8v6I635Y+W5Y+v6KeB5oyJ6ZKuCiAgICAgIHRoaXMuJG5ldHdvcmsucG9zdCgnL3AvY3Mvbm9kZS9kZWZpbmUvYnQnLCB7CiAgICAgICAgaWQ6IHRoaXMuY29uZmlnRGF0YS5ub2RlRm9ybUlkLAogICAgICAgIHZ1ZURpc3BhbHk6IDAKICAgICAgfSkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgaWYgKHJlcy5kYXRhLnJlc3VsdENvZGUgPT09IDApIHsKICAgICAgICAgIF90aGlzNC52aXNpYmxlQnV0dG9ucyA9IHJlcy5kYXRhLmRhdGEuZGlmaW5lRGF0YTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX3RoaXM0LnZpc2libGVCdXR0b25zID0gW107CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCiAgICB2aXNpYmxlQnRDaGFuZ2U6IGZ1bmN0aW9uIHZpc2libGVCdENoYW5nZSh2YWx1ZSkgewogICAgICAvL+WPr+ingeaMiemSrumAieaLqQogICAgICBpZiAodmFsdWVbMF0gPT09ICdiU2VsZWN0LWFsbCcpIHsKICAgICAgICB0aGlzLmNvbmZpZ0RhdGEudmlzaWJsZUJ0ID0gdGhpcy52aXNpYmxlQnV0dG9ucy5yZWR1Y2UoZnVuY3Rpb24gKGFyciwgY3VycmVudCkgewogICAgICAgICAgYXJyLnB1c2goY3VycmVudC5JRCk7CiAgICAgICAgICByZXR1cm4gYXJyOwogICAgICAgIH0sIFtdKTsKICAgICAgfQogICAgfQogIH0sCiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHsKICAgIHZhciBfdGhpczUgPSB0aGlzOwoKICAgIC8vIOS/neWtmOm7mOiupOWAvAogICAgdGhpcy5kZWZhdWx0T2JqID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNvbmZpZ0RhdGEpKTsKCiAgICBpZiAodGhpcy5jb25maWdEYXRhLmFjdGlvbkNvbmZpZy5sZW5ndGggPT09IDApIHsKICAgICAgdGhpcy5jb25maWdEYXRhLmFjdGlvbkNvbmZpZyA9IFt7CiAgICAgICAgaWQ6IG51bGwsCiAgICAgICAgaGFuZGxlVHlwZTogMzMsCiAgICAgICAgaGFuZGxlVmFsdWU6IG51bGwsCiAgICAgICAgZXh0cmFNc2c6IG51bGwKICAgICAgfV07CiAgICB9IGVsc2UgewogICAgICB0aGlzLmNvbmZpZ0RhdGEuYWN0aW9uQ29uZmlnID0gW3sKICAgICAgICBpZDogdGhpcy5jb25maWdEYXRhLmFjdGlvbkNvbmZpZ1swXS5pZCwKICAgICAgICBoYW5kbGVUeXBlOiAzMywKICAgICAgICBoYW5kbGVWYWx1ZTogdGhpcy5jb25maWdEYXRhLmFjdGlvbkNvbmZpZ1swXS5oYW5kbGVWYWx1ZSwKICAgICAgICBleHRyYU1zZzogdGhpcy5jb25maWdEYXRhLmFjdGlvbkNvbmZpZ1swXS5leHRyYU1zZwogICAgICB9XTsKICAgIH0KCiAgICBpZiAodGhpcy5jb25maWdEYXRhLm1vZGlmaWFibGVGaWVsZCkgewogICAgICB0aGlzLm1vZGlmeUZpZWxkLmRlZmF1bHRTZWxlY3RlZCA9IHRoaXMuY29uZmlnRGF0YS5tb2RpZmlhYmxlRmllbGQ7CiAgICB9CgogICAgaWYgKHRoaXMuY29uZmlnRGF0YS5hcHByb3ZlbExpc3QgJiYgdGhpcy5jb25maWdEYXRhLmFwcHJvdmVsTGlzdC5sZW5ndGggPiAwKSB7CiAgICAgIHRoaXMuY29uZmlnRGF0YS5hcHByb3ZlbExpc3QubWFwKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgdmFyIHRlbU9iaiA9IE9iamVjdC5hc3NpZ24oe30sIGl0ZW0pOwogICAgICAgIF90aGlzNS5hcHByb3ZlcyArPSBpdGVtLmFwcHJvdmVWYWx1ZU5hbWUgPyBpdGVtLmFwcHJvdmVWYWx1ZU5hbWUgOiBpdGVtLmFwcHJvdmVfdmFsdWVfbmFtZSArICIsIjsKICAgICAgICB0ZW1PYmouYXBwcm92ZV90eXBlID0gdGVtT2JqLmFwcHJvdmVUeXBlID8gdGVtT2JqLmFwcHJvdmVUeXBlIDogdGVtT2JqLmFwcHJvdmVfdHlwZTsKICAgICAgICB0ZW1PYmouYXBwcm92ZV92YWx1ZSA9IHRlbU9iai5hcHByb3ZlVmFsdWUgPyB0ZW1PYmouYXBwcm92ZVZhbHVlIDogdGVtT2JqLmFwcHJvdmVfdmFsdWU7CiAgICAgICAgdGVtT2JqLmFwcHJvdmVfdmFsdWVfbmFtZSA9IGl0ZW0uYXBwcm92ZVZhbHVlTmFtZSA/IGl0ZW0uYXBwcm92ZVZhbHVlTmFtZSA6IGl0ZW0uYXBwcm92ZV92YWx1ZV9uYW1lOwogICAgICAgIGRlbGV0ZSB0ZW1PYmouYXBwcm92ZVR5cGU7CiAgICAgICAgZGVsZXRlIHRlbU9iai5hcHByb3ZlVmFsdWU7CiAgICAgICAgZGVsZXRlIHRlbU9iai5hcHByb3ZlVmFsdWVOYW1lOwogICAgICAgIHZhciB0ZW1MID0gT2JqZWN0LmFzc2lnbih7fSwgdGVtT2JqKTsKCiAgICAgICAgX3RoaXM1LmFwcHJvdmVsTGlzdC5wdXNoKHRlbU9iaik7CgogICAgICAgIHRlbUwuc3RyaW5nID0gaXRlbS5hcHByb3ZlVmFsdWVOYW1lID8gaXRlbS5hcHByb3ZlVmFsdWVOYW1lIDogaXRlbS5hcHByb3ZlX3ZhbHVlX25hbWU7CiAgICAgICAgX3RoaXM1LnJlc3VsdERhdGEubGlzdCA/IF90aGlzNS5yZXN1bHREYXRhLmxpc3QucHVzaCh0ZW1MKSA6IF90aGlzNS4kc2V0KF90aGlzNS5yZXN1bHREYXRhLCAibGlzdCIsIFt0ZW1MXSk7CiAgICAgIH0pOwogICAgICB0aGlzLnJlc3VsdERhdGEudG90YWwgPyB0aGlzLnJlc3VsdERhdGEudG90YWwgPSB0aGlzLnJlc3VsdERhdGEubGlzdC5sZW5ndGggOiB0aGlzLiRzZXQodGhpcy5yZXN1bHREYXRhLCAidG90YWwiLCB0aGlzLnJlc3VsdERhdGEubGlzdC5sZW5ndGgpOwoKICAgICAgaWYgKHRoaXMuYXBwcm92ZXMubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMuYXBwcm92ZXMgPSB0aGlzLmFwcHJvdmVzLnN1YnN0cmluZygwLCB0aGlzLmFwcHJvdmVzLmxlbmd0aCAtIDEpOwogICAgICB9CiAgICB9CgogICAgaWYgKHRoaXMuY29uZmlnRGF0YS5ydWxlTGlzdCAmJiB0aGlzLmNvbmZpZ0RhdGEucnVsZUxpc3QubGVuZ3RoID4gMCkgewogICAgICB0aGlzLmNvbmZpZ0RhdGEucnVsZUxpc3QubWFwKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgaWYgKGl0ZW0uYWN0VHlwZSA9PT0gMCkgewogICAgICAgICAgX3RoaXM1LnBhZ2VCdG5EYXRhWzFdLnZhbHVlID0gaXRlbS5hY3ROYW1lOwogICAgICAgICAgX3RoaXM1LnBhZ2VCdG5EYXRhWzBdLnZhbHVlID0gaXRlbS5hY3RMaW1pdDsKICAgICAgICB9CgogICAgICAgIGlmIChpdGVtLmFjdFR5cGUgPT09IDEpIHsKICAgICAgICAgIF90aGlzNS5wYWdlQnRuRGF0YVszXS52YWx1ZSA9IGl0ZW0uYWN0TmFtZTsKICAgICAgICAgIF90aGlzNS5wYWdlQnRuRGF0YVsyXS52YWx1ZSA9IGl0ZW0uYWN0TGltaXQ7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KCiAgICBpZiAodGhpcy5jb25maWdEYXRhLmFjdFNlcnZpY2VTICYmIHRoaXMuY29uZmlnRGF0YS5hY3RTZXJ2aWNlUy5sZW5ndGggPiAwKSB7CiAgICAgIHRoaXMuY29uZmlnRGF0YS5hY3RTZXJ2aWNlUy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICBpZiAoaXRlbS5oYW5kbGVUeXBlID49IDIwKSB7CiAgICAgICAgICBfdGhpczUuYXV0b0RldGFpbCA9IGl0ZW07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90aGlzNS5zZXRPdmVydGltZSA9IGl0ZW07CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5zZXRPdmVydGltZS5zdGF0dXMgPT09IDAgPyB0aGlzLnN0YXR1czEgPSB0cnVlIDogdGhpcy5zdGF0dXMxID0gZmFsc2U7CiAgICAgIHRoaXMuYXV0b0RldGFpbC5zdGF0dXMgPT09IDAgPyB0aGlzLnN0YXR1czIgPSB0cnVlIDogdGhpcy5zdGF0dXMyID0gZmFsc2U7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmNvbmZpZ0RhdGEuYWN0U2VydmljZVMgPSBbewogICAgICAgIHRocmVzaG9sZDogIiIsCiAgICAgICAgc291cmNlczogMCwKICAgICAgICBzdGF0dXM6IDEsCiAgICAgICAgaGFuZGxlVmFsdWU6ICIiLAogICAgICAgIGhhbmRsZVR5cGU6IDExCiAgICAgIH0sIHsKICAgICAgICB0aHJlc2hvbGQ6ICIiLAogICAgICAgIHNvdXJjZXM6IDAsCiAgICAgICAgc3RhdHVzOiAxLAogICAgICAgIGhhbmRsZVR5cGU6IDIwLAogICAgICAgIGhhbmRsZVZhbHVlOiAiIgogICAgICB9XTsKICAgIH0gLy8g5aSE55CG6IqC54K56KGo6YWN572u6buY6K6k5YC8CgoKICAgIGlmICh0aGlzLmNvbmZpZ0RhdGEubm9kZUZvcm1JZCkgewogICAgICB0aGlzLnRhYmxlQ29uZmlnLnByb3BzLmRlZmF1bHRTZWxlY3RlZCA9IFt7CiAgICAgICAgSUQ6IHRoaXMuY29uZmlnRGF0YS5ub2RlRm9ybUlkLAogICAgICAgIExhYmVsOiB0aGlzLmNvbmZpZ0RhdGEubm9kZUZvcm1OYW1lCiAgICAgIH1dOwogICAgfSAvLyDlj6/op4HmjInpkq4KCgogICAgaWYgKHRoaXMuY29uZmlnRGF0YS5ub2RlRm9ybUlkKSB7CiAgICAgIHRoaXMuZ2V0VmlzaWJsZUJ1dHRvbnMoKTsKICAgIH0KICB9LAogIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7Ly90aGlzLmdldFRyZWVEYXRhKCk7CgogICAgLyoqLwogIH0KfTs="},null]}