{"remainingRequest":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\ljzc-fvue\\src\\components\\form\\chart\\EipChart.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\src\\components\\form\\chart\\EipChart.vue","mtime":1705040076962},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\babel.config.js","mtime":1701311296006},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9hc3luY1RvR2VuZXJhdG9yIGZyb20gIkQ6L2plbmtpbnMvd29ya3NwYWNlL2xqemMtZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyI7CmltcG9ydCAicmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5udW1iZXIuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zb3J0LmpzIjsKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KCmltcG9ydCBlY2hhcnRzIGZyb20gImVjaGFydHMiOwppbXBvcnQgZWNTdGF0IGZyb20gImVjaGFydHMtc3RhdCI7CmltcG9ydCBmb3JtIGZyb20gIkAvYXBpL2Zvcm0uanMiOwpleHBvcnQgZGVmYXVsdCB7CiAgcHJvcHM6IHsKICAgIGlkOiB7CiAgICAgIHR5cGU6IFN0cmluZywKICAgICAgcmVxdWlyZWQ6IHRydWUKICAgIH0KICB9LAogIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7CiAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKCkgewogICAgICBfdGhpcy5pbml0RGF0YSgpOwogICAgfSk7CiAgfSwKICB3YXRjaDogewogICAgaWQ6IGZ1bmN0aW9uIGlkKG5ld1YpIHsKICAgICAgaWYgKG5ld1YpIHsKICAgICAgICB0aGlzLmN1c3RvbUNoYXJ0ID0gW107CiAgICAgICAgdGhpcy5kYXRhID0gW107CiAgICAgICAgdGhpcy5xdWlja1NlYXJjaFByb3AgPSAiIjsKICAgICAgICB0aGlzLmRlZmF1bHRRdWVyeSA9IFtdOwogICAgICAgIHRoaXMuc2hvd1RhYmxlID0gZmFsc2U7CiAgICAgICAgdGhpcy5pbml0RGF0YSgpOwogICAgICB9CiAgICB9CiAgfSwKICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkgewogICAgcmV0dXJuIHsKICAgICAgc2hvd1RhYmxlOiBmYWxzZSwKICAgICAgY3VzdG9tQ2hhcnQ6IHt9LAogICAgICBwYWdlUmVzdWx0OiB7CiAgICAgICAgcGFnZTogMSwKICAgICAgICBwYWdlU2l6ZTogMjAsCiAgICAgICAgdG90YWw6IDAKICAgICAgfSwKICAgICAgZGF0YTogW10sCiAgICAgIHF1aWNrU2VhcmNoUHJvcDogIiIsCiAgICAgIGRlZmF1bHRRdWVyeTogW10sCiAgICAgIHF1ZXJ5T3BUcmFuc09iajogewogICAgICAgIEVROiAiRVFVQUwiLAogICAgICAgIEJFVFdFRU46ICJCRVRXRUVOIiwKICAgICAgICBHRTogIkdSRUFUX0VRVUFMIiwKICAgICAgICBMRTogIkxFU1NfRVFVQUwiLAogICAgICAgIExLOiAiTElLRSIsCiAgICAgICAgSU46ICJJTiIKICAgICAgfQogICAgfTsKICB9LAogIG1ldGhvZHM6IHsKICAgIGxvYWREYXRhOiBmdW5jdGlvbiBsb2FkRGF0YShwYXJhbSwgY2IpIHsKICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CiAgICAgIGlmICh0aGlzLmN1c3RvbUNoYXJ0LmFsaWFzKSB7CiAgICAgICAgcGFyYW0ucGFnZUJlYW4ucGFnZVNpemUgPSBwYXJzZUludCh0aGlzLmN1c3RvbUNoYXJ0LmNvbmYubWF4TGVuZ3RoICYmIHRoaXMuY3VzdG9tQ2hhcnQuY29uZi5tYXhMZW5ndGggIT0gJzAnID8gdGhpcy5jdXN0b21DaGFydC5jb25mLm1heExlbmd0aCA6IDIwKTsKICAgICAgICBmb3JtLmdldExpc3REYXRhKHRoaXMuY3VzdG9tQ2hhcnQuYWxpYXMsIHBhcmFtKS50aGVuKGZ1bmN0aW9uIChyZXNwb25zZSkgewogICAgICAgICAgX3RoaXMyLmRhdGEgPSByZXNwb25zZS5yb3dzOwogICAgICAgICAgX3RoaXMyLnBhZ2VSZXN1bHQgPSB7CiAgICAgICAgICAgIHBhZ2U6IHJlc3BvbnNlLnBhZ2UsCiAgICAgICAgICAgIHBhZ2VTaXplOiByZXNwb25zZS5wYWdlU2l6ZSwKICAgICAgICAgICAgdG90YWw6IHJlc3BvbnNlLnRvdGFsCiAgICAgICAgICB9OwogICAgICAgICAgX3RoaXMyLmN1c3RvbUNoYXJ0LnJvd3MgPSBfdGhpczIuZGF0YTsKICAgICAgICAgIF90aGlzMi5idWlsZENoYXJ0KF90aGlzMi5jdXN0b21DaGFydCk7CiAgICAgICAgfSkuZmluYWxseShmdW5jdGlvbiAoKSB7CiAgICAgICAgICBjYigpOwogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIGNiKCk7CiAgICAgIH0KICAgIH0sCiAgICBpbml0RGF0YTogZnVuY3Rpb24gaW5pdERhdGEoKSB7CiAgICAgIHZhciBfdGhpczMgPSB0aGlzOwogICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoIC8qI19fUFVSRV9fKi9yZWdlbmVyYXRvclJ1bnRpbWUubWFyayhmdW5jdGlvbiBfY2FsbGVlKCkgewogICAgICAgIHZhciBkYXRhOwogICAgICAgIHJldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAyOwogICAgICAgICAgICAgIHJldHVybiBmb3JtLmdldEN1c3RvbUNoYXJ0QnlJZChfdGhpczMuaWQpOwogICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgZGF0YSA9IF9jb250ZXh0LnNlbnQ7CiAgICAgICAgICAgICAgaWYgKGRhdGEpIHsKICAgICAgICAgICAgICAgIGRhdGEuY29uZGl0aW9uZmllbGQgPSBKU09OLnBhcnNlKGRhdGEuY29uZGl0aW9uZmllbGQpOwogICAgICAgICAgICAgICAgZGF0YS5kaXNwbGF5ZmllbGQgPSBKU09OLnBhcnNlKGRhdGEuZGlzcGxheWZpZWxkKTsKICAgICAgICAgICAgICAgIGRhdGEueGF4aXNGaWVsZCA9IEpTT04ucGFyc2UoZGF0YS54YXhpc0ZpZWxkKTsKICAgICAgICAgICAgICAgIGRhdGEuc29ydGZpZWxkID0gSlNPTi5wYXJzZShkYXRhLnNvcnRmaWVsZCk7CiAgICAgICAgICAgICAgICBkYXRhLmNvbmYgPSBKU09OLnBhcnNlKGRhdGEuY29uZik7CiAgICAgICAgICAgICAgICBfdGhpczMuY3VzdG9tQ2hhcnQgPSBkYXRhOwogICAgICAgICAgICAgICAgX3RoaXMzLmluaXRDb25kaXRpb24oKTsKICAgICAgICAgICAgICAgIF90aGlzMy5zaG93VGFibGUgPSB0cnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZSk7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIGluaXRDb25kaXRpb246IGZ1bmN0aW9uIGluaXRDb25kaXRpb24oKSB7CiAgICAgIHZhciBjb25kaXRpb25zID0gdGhpcy5jdXN0b21DaGFydC5jb25kaXRpb25maWVsZDsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb25kaXRpb25zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgaWYgKGNvbmRpdGlvbnNbaV0uZGVmYXVsdFR5cGUgPT09ICIxIikgewogICAgICAgICAgdGhpcy5xdWlja1NlYXJjaFByb3AgKz0gY29uZGl0aW9uc1tpXS5maWVsZC50b1VwcGVyQ2FzZSgpICsgIiwiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmRlZmF1bHRRdWVyeS5wdXNoKHsKICAgICAgICAgICAgcHJvcGVydHk6IGNvbmRpdGlvbnNbaV0uZmllbGQsCiAgICAgICAgICAgIHZhbHVlOiBjb25kaXRpb25zW2ldLmRlZmF1bHRWYWx1ZSwKICAgICAgICAgICAgb3BlcmF0aW9uOiB0aGlzLnF1ZXJ5T3BUcmFuc09ialtjb25kaXRpb25zW2ldLmNvbmRpdGlvbl0sCiAgICAgICAgICAgIGdyb3VwOiAibWFpbiIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIGJ1aWxkQ2hhcnQ6IGZ1bmN0aW9uIGJ1aWxkQ2hhcnQoZGF0YSkgewogICAgICB2YXIgbXlDaGFydCA9IGVjaGFydHMuaW5pdChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmlkKSwgImRlZmF1bHQiKTsKICAgICAgdmFyIGdyaWQgPSB0aGlzLmdldEdyaWQoKTsKICAgICAgZGF0YS5jb25mLnRpdGxlLnRleHQgPSBkYXRhLm5hbWU7CiAgICAgIGRhdGEuY29uZi50aXRsZS50b3AgPSB0aGlzLmdldFRpdGxlUG9zaXRpb24oKTsKICAgICAgdmFyIG9wdGlvbiA9IHsKICAgICAgICB0aXRsZTogZGF0YS5jb25mLnRpdGxlLAogICAgICAgIHRvb2x0aXA6IHt9LAogICAgICAgIHRvb2xib3g6IHsKICAgICAgICAgIGZlYXR1cmU6IHsKICAgICAgICAgICAgc2F2ZUFzSW1hZ2U6IHt9CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBsZWdlbmQ6IHt9LAogICAgICAgIGdyaWQ6IGdyaWQsCiAgICAgICAgc2VyaWVzOiB7fQogICAgICB9OwogICAgICBzd2l0Y2ggKGRhdGEuc3R5bGUpIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICBvcHRpb24gPSB0aGlzLmJ1aWxkTGluZShkYXRhLCBvcHRpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAzOgogICAgICAgICAgb3B0aW9uID0gdGhpcy5idWlsZFBpZShkYXRhLCBvcHRpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA0OgogICAgICAgICAgb3B0aW9uID0gdGhpcy5idWlsZFJhZGFyKGRhdGEsIG9wdGlvbik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDU6CiAgICAgICAgICBvcHRpb24gPSB0aGlzLmJ1aWxkRnVubmVsKGRhdGEsIG9wdGlvbik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDY6CiAgICAgICAgICBvcHRpb24gPSB0aGlzLmJ1aWxkU2NhdHRlcihkYXRhLCBvcHRpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA3OgogICAgICAgICAgb3B0aW9uID0gdGhpcy5idWlsZEhlYXRtYXAoZGF0YSwgb3B0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgICB0aGlzLmFkanVzdENoYXRUaXRsZShkYXRhLCBvcHRpb24pOwogICAgICBteUNoYXJ0LnNldE9wdGlvbihvcHRpb24pOwogICAgfSwKICAgIGJ1aWxkTGluZTogZnVuY3Rpb24gYnVpbGRMaW5lKGRhdGEsIG9wdGlvbikgewogICAgICB2YXIgZGlzcGxheUZpZWxkID0gdGhpcy5jdXN0b21DaGFydC5kaXNwbGF5ZmllbGQ7CiAgICAgIHZhciBsZWdlbmREYXRhID0gW107CiAgICAgIHZhciB4QXhpc0RhdGEgPSBbXTsKICAgICAgdmFyIHNlcmllc0RhdGEgPSBbXTsKICAgICAgdmFyIHhBeGlzRmllbGQgPSB7fTsKICAgICAgdmFyIHNlcmllcyA9IHRoaXMuY3VzdG9tQ2hhcnQuY29uZi5zZXJpZXM7CiAgICAgIGlmICh0aGlzLmN1c3RvbUNoYXJ0LnhheGlzRmllbGQpIHhBeGlzRmllbGQgPSB0aGlzLmN1c3RvbUNoYXJ0LnhheGlzRmllbGRbMF07CiAgICAgIGZvciAodmFyIGkgPSAwLCBkOyBkID0gZGlzcGxheUZpZWxkW2krK107KSB7CiAgICAgICAgaWYgKGQpIHsKICAgICAgICAgIHZhciBhcnIgPSBbXTsKICAgICAgICAgIHZhciB0eXBlID0gZC50eXBlOwogICAgICAgICAgbGVnZW5kRGF0YS5wdXNoKGQuY29tbWVudCk7CiAgICAgICAgICBmb3IgKHZhciBqID0gMCwgcmVzOyByZXMgPSBkYXRhLnJvd3NbaisrXTspIHsKICAgICAgICAgICAgaWYgKGkgPT09IDEpIHsKICAgICAgICAgICAgICB2YXIgdmFsdWUgPSByZXNbeEF4aXNGaWVsZC5maWVsZC50b1VwcGVyQ2FzZSgpXTsKICAgICAgICAgICAgICBpZiAoeEF4aXNGaWVsZC5kYlR5cGUgPT09ICJkYXRlIiAmJiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICJudW1iZXIiKSB2YWx1ZSA9IG5ldyBEYXRlKHZhbHVlKS5mb3JtYXQoZGVmYXVsdEZtdCk7CiAgICAgICAgICAgICAgeEF4aXNEYXRhLnB1c2godmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChyZXMpIHsKICAgICAgICAgICAgICB2YXIgX3ZhbHVlID0gcmVzW2QuZmllbGQudG9VcHBlckNhc2UoKV07CiAgICAgICAgICAgICAgYXJyLnB1c2goX3ZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdmFyIHNlID0gewogICAgICAgICAgICBuYW1lOiBkLmNvbW1lbnQsCiAgICAgICAgICAgIHR5cGU6IGQudHlwZSwKICAgICAgICAgICAgZGF0YTogYXJyLAogICAgICAgICAgICBzdGFjazogc2VyaWVzLnN0YWNrID8gIm9uZSIgOiBudWxsCiAgICAgICAgICB9OwogICAgICAgICAgaWYgKCFzZXJpZXMuZG91YmxlWUF4aXMpIHsKICAgICAgICAgICAgc2UueUF4aXNJbmRleCA9IGQueUF4aXMgPT09IDEgPyAwIDogMTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0eXBlID09PSAibGluZSIpIHsKICAgICAgICAgICAgc2Uuc21vb3RoID0gc2VyaWVzLnNtb290aDsKICAgICAgICAgIH0KICAgICAgICAgIHNlcmllc0RhdGEucHVzaChzZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIG9wdGlvbi5zZXJpZXMgPSBzZXJpZXNEYXRhOwogICAgICBvcHRpb24udG9vbHRpcCA9IHsKICAgICAgICB0cmlnZ2VyOiAiYXhpcyIKICAgICAgfTsKICAgICAgb3B0aW9uLmxlZ2VuZC55ID0gNTA7CiAgICAgIC8vIG9wdGlvbi5ncmlkID0gewogICAgICAvLyAgIGxlZnQ6ICIzJSIsCiAgICAgIC8vICAgcmlnaHQ6ICI0JSIsCiAgICAgIC8vICAgYm90dG9tOiAiMyUiLAogICAgICAvLyAgIGNvbnRhaW5MYWJlbDogdHJ1ZQogICAgICAvLyB9OwogICAgICBpZiAoc2VyaWVzLnNob3dUeXBlIHx8ICFzZXJpZXMuZG91YmxlWUF4aXMpIHsKICAgICAgICBvcHRpb24ueEF4aXMgPSBbewogICAgICAgICAgdHlwZTogImNhdGVnb3J5IiwKICAgICAgICAgIGRhdGE6IHhBeGlzRGF0YQogICAgICAgIH1dOwogICAgICAgIG9wdGlvbi55QXhpcyA9IHNlcmllcy5kb3VibGVZQXhpcyA/IFt7CiAgICAgICAgICB0eXBlOiAidmFsdWUiCiAgICAgICAgfV0gOiBbewogICAgICAgICAgdHlwZTogInZhbHVlIgogICAgICAgIH0sIHsKICAgICAgICAgIHR5cGU6ICJ2YWx1ZSIKICAgICAgICB9XTsKICAgICAgfSBlbHNlIHsKICAgICAgICBvcHRpb24ueEF4aXMgPSBbewogICAgICAgICAgdHlwZTogInZhbHVlIgogICAgICAgIH1dOwogICAgICAgIG9wdGlvbi55QXhpcyA9IFt7CiAgICAgICAgICB0eXBlOiAiY2F0ZWdvcnkiLAogICAgICAgICAgZGF0YTogeEF4aXNEYXRhCiAgICAgICAgfV07CiAgICAgIH0KCiAgICAgIC8v5p+x54q25Zu+55qE5pe25YCZ5Lik56uv55WZ56m644CC6YG/5YWN5p+x54q25Zu+5oyh5L2Peei9tOOAguaKmOe6v+WbvuWImeS4jeeVmeepuu+8jAogICAgICBpZiAoZGF0YS5zdHlsZSA9PT0gMikgb3B0aW9uLnhBeGlzWzBdWyJib3VuZGFyeUdhcCJdID0gdHJ1ZTsKICAgICAgaWYgKGRhdGEuY29uZikgewogICAgICAgIHZhciBvYmogPSBkYXRhLmNvbmY7CiAgICAgICAgaWYgKG9iai55TWluID09PSAyKSBvcHRpb24ueUF4aXNbMF1bIm1pbiJdID0gImRhdGFNaW4iOwogICAgICAgIGlmIChvYmoueFNob3dBbGwgPT09IDIpIG9wdGlvbi54QXhpc1swXVsiYXhpc0xhYmVsIl0gPSB7CiAgICAgICAgICBpbnRlcnZhbDogMCwKICAgICAgICAgIC8v5qiq6L205L+h5oGv5YWo6YOo5pi+56S6CiAgICAgICAgICByb3RhdGU6IDMwCiAgICAgICAgfTsKICAgICAgfQogICAgICBpZiAoZGF0YS5yb3dzLmxlbmd0aCA+IDIwICYmICFzZXJpZXMuZGF0YVpvb20pIHsKICAgICAgICBvcHRpb24uZGF0YVpvb20gPSBbewogICAgICAgICAgc3RhcnQ6IDAsCiAgICAgICAgICBlbmQ6IDEwLAogICAgICAgICAgaGFuZGxlSWNvbjogIk0xMC43LDExLjl2LTEuM0g5LjN2MS4zYy00LjksMC4zLTguOCw0LjQtOC44LDkuNGMwLDUsMy45LDkuMSw4LjgsOS40djEuM2gxLjN2LTEuM2M0LjktMC4zLDguOC00LjQsOC44LTkuNEMxOS41LDE2LjMsMTUuNiwxMi4yLDEwLjcsMTEuOXogTTEzLjMsMjQuNEg2LjdWMjNoNi42VjI0LjR6IE0xMy4zLDE5LjZINi43di0xLjRoNi42VjE5LjZ6IiwKICAgICAgICAgIGhhbmRsZVNpemU6ICI4MCUiLAogICAgICAgICAgaGFuZGxlU3R5bGU6IHsKICAgICAgICAgICAgY29sb3I6ICIjZmZmIiwKICAgICAgICAgICAgc2hhZG93Qmx1cjogMywKICAgICAgICAgICAgc2hhZG93Q29sb3I6ICJyZ2JhKDAsIDAsIDAsIDAuNikiLAogICAgICAgICAgICBzaGFkb3dPZmZzZXRYOiAyLAogICAgICAgICAgICBzaGFkb3dPZmZzZXRZOiAyCiAgICAgICAgICB9CiAgICAgICAgfV07CiAgICAgICAgb3B0aW9uLmdyaWQuYm90dG9tID0gNTA7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gb3B0aW9uLmdyaWQuYm90dG9tID0gIjMlIjsKICAgICAgICBkZWxldGUgb3B0aW9uLmRhdGFab29tOwogICAgICB9CiAgICAgIG9wdGlvbi5sZWdlbmQgPSBkYXRhLmNvbmYubGVnZW5kOwogICAgICBvcHRpb24ubGVnZW5kLmRhdGEgPSBsZWdlbmREYXRhOwogICAgICByZXR1cm4gb3B0aW9uOwogICAgfSwKICAgIGJ1aWxkUGllOiBmdW5jdGlvbiBidWlsZFBpZShkYXRhLCBvcHRpb24pIHsKICAgICAgdmFyIGRpc3BsYXlGaWVsZCA9IGRhdGEuZGlzcGxheWZpZWxkOwogICAgICB2YXIgbGVnZW5kRGF0YSA9IFtdOwogICAgICB2YXIgc2VyaWVzRGF0YSA9IFtdOwogICAgICB2YXIgeEF4aXNGaWVsZCA9IGRhdGEueGF4aXNGaWVsZDsKICAgICAgdmFyIHNlcmllcyA9IGRhdGEuY29uZi5zZXJpZXM7CiAgICAgIGlmICh4QXhpc0ZpZWxkKSB4QXhpc0ZpZWxkID0geEF4aXNGaWVsZFswXTsKICAgICAgaWYgKHNlcmllcy5zaG93VHlwZSkgewogICAgICAgIHZhciBkdXJhdGlvbiA9IDEwMCAvIGRhdGEucm93cy5sZW5ndGg7CiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBkYXRhLnJvd3MubGVuZ3RoOyBqKyspIHsKICAgICAgICAgIHZhciB2YWx1ZSA9IFtdOwogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwbGF5RmllbGQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFsdWUucHVzaCh7CiAgICAgICAgICAgICAgbmFtZTogZGlzcGxheUZpZWxkW2ldLmNvbW1lbnQsCiAgICAgICAgICAgICAgdmFsdWU6IGRhdGEucm93c1tqXVtkaXNwbGF5RmllbGRbaV0uZmllbGQudG9VcHBlckNhc2UoKV0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGlmIChqID09PSAwKSB7CiAgICAgICAgICAgICAgbGVnZW5kRGF0YS5wdXNoKGRpc3BsYXlGaWVsZFtpXS5jb21tZW50KTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgc2VyaWVzRGF0YS5wdXNoKHsKICAgICAgICAgICAgbmFtZTogZGF0YS5yb3dzW2pdW3hBeGlzRmllbGQuZmllbGQudG9VcHBlckNhc2UoKV0sCiAgICAgICAgICAgIHR5cGU6ICJwaWUiLAogICAgICAgICAgICBkYXRhOiB2YWx1ZSwKICAgICAgICAgICAgcmFkaXVzOiBbc2VyaWVzLnJhZGl1c1swXSArICIlIiwgc2VyaWVzLnJhZGl1c1sxXSArICIlIl0sCiAgICAgICAgICAgIGNlbnRlcjogW051bWJlcihzZXJpZXMuY2VudGVyWzBdKSArIGogKiBkdXJhdGlvbiArICIlIiwgc2VyaWVzLmNlbnRlclsxXSArICIlIl0sCiAgICAgICAgICAgIHJvc2VUeXBlOiBzZXJpZXMucm9zZVR5cGUsCiAgICAgICAgICAgIHNlbGVjdGVkTW9kZTogc2VyaWVzLnNlbGVjdGVkTW9kZSwKICAgICAgICAgICAgbGFiZWw6IHsKICAgICAgICAgICAgICBwb3NpdGlvbjogc2VyaWVzLmxhYmVsLnBvc2l0aW9uCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGl0ZW1TdHlsZTogewogICAgICAgICAgICAgIGVtcGhhc2lzOiB7CiAgICAgICAgICAgICAgICBzaGFkb3dCbHVyOiAxMCwKICAgICAgICAgICAgICAgIHNoYWRvd09mZnNldFg6IDAsCiAgICAgICAgICAgICAgICBzaGFkb3dDb2xvcjogInJnYmEoMCwgMCwgMCwgMC41KSIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgX2R1cmF0aW9uID0gMTAwIC8gZGlzcGxheUZpZWxkLmxlbmd0aDsKICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgZGlzcGxheUZpZWxkLmxlbmd0aDsgX2krKykgewogICAgICAgICAgdmFyIF92YWx1ZTIgPSBbXTsKICAgICAgICAgIGZvciAodmFyIF9qID0gMDsgX2ogPCBkYXRhLnJvd3MubGVuZ3RoOyBfaisrKSB7CiAgICAgICAgICAgIF92YWx1ZTIucHVzaCh7CiAgICAgICAgICAgICAgbmFtZTogZGF0YS5yb3dzW19qXVt4QXhpc0ZpZWxkLmZpZWxkLnRvVXBwZXJDYXNlKCldLAogICAgICAgICAgICAgIHZhbHVlOiBkYXRhLnJvd3NbX2pdW2Rpc3BsYXlGaWVsZFtfaV0uZmllbGQudG9VcHBlckNhc2UoKV0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGlmIChfaSA9PT0gMCkgewogICAgICAgICAgICAgIGxlZ2VuZERhdGEucHVzaChkYXRhLnJvd3NbX2pdW3hBeGlzRmllbGQuZmllbGQudG9VcHBlckNhc2UoKV0gKyAiIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHNlcmllc0RhdGEucHVzaCh7CiAgICAgICAgICAgIG5hbWU6IGRpc3BsYXlGaWVsZFtfaV0uY29tbWVudCwKICAgICAgICAgICAgdHlwZTogInBpZSIsCiAgICAgICAgICAgIGRhdGE6IF92YWx1ZTIsCiAgICAgICAgICAgIHJhZGl1czogW3Nlcmllcy5yYWRpdXNbMF0gKyAiJSIsIHNlcmllcy5yYWRpdXNbMV0gKyAiJSJdLAogICAgICAgICAgICBjZW50ZXI6IFtOdW1iZXIoc2VyaWVzLmNlbnRlclswXSkgKyBfaSAqIF9kdXJhdGlvbiArICIlIiwgc2VyaWVzLmNlbnRlclsxXSArICIlIl0sCiAgICAgICAgICAgIHJvc2VUeXBlOiBzZXJpZXMucm9zZVR5cGUsCiAgICAgICAgICAgIHNlbGVjdGVkTW9kZTogc2VyaWVzLnNlbGVjdGVkTW9kZSwKICAgICAgICAgICAgbGFiZWw6IHsKICAgICAgICAgICAgICBwb3NpdGlvbjogc2VyaWVzLmxhYmVsLnBvc2l0aW9uCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGl0ZW1TdHlsZTogewogICAgICAgICAgICAgIGVtcGhhc2lzOiB7CiAgICAgICAgICAgICAgICBzaGFkb3dCbHVyOiAxMCwKICAgICAgICAgICAgICAgIHNoYWRvd09mZnNldFg6IDAsCiAgICAgICAgICAgICAgICBzaGFkb3dDb2xvcjogInJnYmEoMCwgMCwgMCwgMC41KSIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBvcHRpb24uc2VyaWVzID0gc2VyaWVzRGF0YTsKICAgICAgb3B0aW9uLnRvb2x0aXAgPSB7CiAgICAgICAgdHJpZ2dlcjogIml0ZW0iLAogICAgICAgIGZvcm1hdHRlcjogInthfSA8YnIvPntifSA6IHtjfSAoe2R9JSkiCiAgICAgIH07CiAgICAgIG9wdGlvbi5sZWdlbmQgPSBkYXRhLmNvbmYubGVnZW5kOwogICAgICBvcHRpb24ubGVnZW5kLmRhdGEgPSBsZWdlbmREYXRhOwogICAgICByZXR1cm4gb3B0aW9uOwogICAgfSwKICAgIGJ1aWxkUmFkYXI6IGZ1bmN0aW9uIGJ1aWxkUmFkYXIoZGF0YSwgb3B0aW9uKSB7CiAgICAgIHZhciBkaXNwbGF5RmllbGQgPSBkYXRhLmRpc3BsYXlmaWVsZDsKICAgICAgdmFyIGxlZ2VuZERhdGEgPSBbXTsKICAgICAgdmFyIHhBeGlzRmllbGQgPSBkYXRhLnhheGlzRmllbGQ7CiAgICAgIHZhciBhcnIgPSBbXTsKICAgICAgdmFyIHNlcmllc0RhdGEgPSBbXTsKICAgICAgdmFyIGluZGljYXRvciA9IFtdOwogICAgICB2YXIgc2VyaWVzID0gZGF0YS5jb25mLnNlcmllczsKICAgICAgaWYgKHhBeGlzRmllbGQpIHhBeGlzRmllbGQgPSB4QXhpc0ZpZWxkWzBdOwogICAgICBpZiAoc2VyaWVzLnNob3dUeXBlKSB7CiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBkYXRhLnJvd3MubGVuZ3RoOyBqKyspIHsKICAgICAgICAgIHZhciB2YWx1ZSA9IFtdOwogICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwbGF5RmllbGQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgdmFsdWUucHVzaChkYXRhLnJvd3Nbal1bZGlzcGxheUZpZWxkW2ldLmZpZWxkLnRvVXBwZXJDYXNlKCldKTsKICAgICAgICAgICAgaWYgKGogPT09IDApIHsKICAgICAgICAgICAgICBpbmRpY2F0b3IucHVzaCh7CiAgICAgICAgICAgICAgICBuYW1lOiBkaXNwbGF5RmllbGRbaV0uY29tbWVudAogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBsZWdlbmREYXRhLnB1c2goZGF0YS5yb3dzW2pdW3hBeGlzRmllbGQuZmllbGQudG9VcHBlckNhc2UoKV0gKyAiIik7CiAgICAgICAgICBhcnIucHVzaCh7CiAgICAgICAgICAgIG5hbWU6IGRhdGEucm93c1tqXVt4QXhpc0ZpZWxkLmZpZWxkLnRvVXBwZXJDYXNlKCldLAogICAgICAgICAgICB2YWx1ZTogdmFsdWUsCiAgICAgICAgICAgIGFyZWFTdHlsZTogewogICAgICAgICAgICAgIG9wYWNpdHk6ICIwIgogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgc2VyaWVzRGF0YSA9IFt7CiAgICAgICAgICB0eXBlOiAicmFkYXIiLAogICAgICAgICAgZGF0YTogYXJyLAogICAgICAgICAgaXRlbVN0eWxlOiB7CiAgICAgICAgICAgIGVtcGhhc2lzOiB7CiAgICAgICAgICAgICAgYXJlYVN0eWxlOiB7CiAgICAgICAgICAgICAgICBvcGFjaXR5OiBzZXJpZXMuYXJlYVN0eWxlID8gIjAiIDogIjAuNSIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9XTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBkaXNwbGF5RmllbGQubGVuZ3RoOyBfaTIrKykgewogICAgICAgICAgdmFyIF92YWx1ZTMgPSBbXTsKICAgICAgICAgIGZvciAodmFyIF9qMiA9IDA7IF9qMiA8IGRhdGEucm93cy5sZW5ndGg7IF9qMisrKSB7CiAgICAgICAgICAgIF92YWx1ZTMucHVzaChkYXRhLnJvd3NbX2oyXVtkaXNwbGF5RmllbGRbX2kyXS5maWVsZC50b1VwcGVyQ2FzZSgpXSk7CiAgICAgICAgICAgIGlmIChfaTIgPT09IDApIHsKICAgICAgICAgICAgICBpbmRpY2F0b3IucHVzaCh7CiAgICAgICAgICAgICAgICBuYW1lOiBkYXRhLnJvd3NbX2oyXVt4QXhpc0ZpZWxkLmZpZWxkLnRvVXBwZXJDYXNlKCldCiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGxlZ2VuZERhdGEucHVzaChkaXNwbGF5RmllbGRbX2kyXS5jb21tZW50KTsKICAgICAgICAgIGFyci5wdXNoKHsKICAgICAgICAgICAgbmFtZTogZGlzcGxheUZpZWxkW19pMl0uY29tbWVudCwKICAgICAgICAgICAgdmFsdWU6IF92YWx1ZTMsCiAgICAgICAgICAgIGFyZWFTdHlsZTogewogICAgICAgICAgICAgIG9wYWNpdHk6ICIwIgogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgc2VyaWVzRGF0YSA9IFt7CiAgICAgICAgICB0eXBlOiAicmFkYXIiLAogICAgICAgICAgZGF0YTogYXJyLAogICAgICAgICAgaXRlbVN0eWxlOiB7CiAgICAgICAgICAgIGVtcGhhc2lzOiB7CiAgICAgICAgICAgICAgYXJlYVN0eWxlOiB7CiAgICAgICAgICAgICAgICBvcGFjaXR5OiBzZXJpZXMuYXJlYVN0eWxlID8gIjAiIDogIjAuNSIKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9XTsKICAgICAgfQogICAgICBvcHRpb24uc2VyaWVzID0gc2VyaWVzRGF0YTsKICAgICAgb3B0aW9uLnJhZGFyID0gewogICAgICAgIGNlbnRlcjogW3Nlcmllcy5jZW50ZXJbMF0gKyAiJSIsIHNlcmllcy5jZW50ZXJbMV0gKyAiJSJdLAogICAgICAgIHJhZGl1czogc2VyaWVzLnJhZGl1cywKICAgICAgICBpbmRpY2F0b3I6IGluZGljYXRvcgogICAgICB9OwogICAgICBvcHRpb24ubGVnZW5kID0gZGF0YS5jb25mLmxlZ2VuZDsKICAgICAgb3B0aW9uLmxlZ2VuZC5kYXRhID0gbGVnZW5kRGF0YTsKICAgICAgcmV0dXJuIG9wdGlvbjsKICAgIH0sCiAgICBidWlsZEZ1bm5lbDogZnVuY3Rpb24gYnVpbGRGdW5uZWwoZGF0YSwgb3B0aW9uKSB7CiAgICAgIHZhciBkaXNwbGF5RmllbGQgPSBkYXRhLmRpc3BsYXlmaWVsZDsKICAgICAgdmFyIGxlZ2VuZERhdGEgPSBbXTsKICAgICAgdmFyIHhBeGlzRmllbGQgPSBkYXRhLnhheGlzRmllbGQ7CiAgICAgIHZhciBzZXJpZXNEYXRhID0gW107CiAgICAgIHZhciBzZXJpZXMgPSBkYXRhLmNvbmYuc2VyaWVzOwogICAgICBpZiAoeEF4aXNGaWVsZCkgeEF4aXNGaWVsZCA9IHhBeGlzRmllbGRbMF07CgogICAgICAvL+WIl+aVsOaNruWxleekugogICAgICBpZiAoc2VyaWVzLnNob3dUeXBlKSB7CiAgICAgICAgdmFyIGR1cmF0aW9uID0gMTAwIC8gZGF0YS5yb3dzLmxlbmd0aDsKICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRhdGEucm93cy5sZW5ndGg7IGorKykgewogICAgICAgICAgdmFyIHZhbHVlID0gW107CiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3BsYXlGaWVsZC5sZW5ndGg7IGkrKykgewogICAgICAgICAgICB2YWx1ZS5wdXNoKHsKICAgICAgICAgICAgICBuYW1lOiBkaXNwbGF5RmllbGRbaV0uY29tbWVudCwKICAgICAgICAgICAgICB2YWx1ZTogZGF0YS5yb3dzW2pdW2Rpc3BsYXlGaWVsZFtpXS5maWVsZC50b1VwcGVyQ2FzZSgpXQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKGogPT09IDApIHsKICAgICAgICAgICAgICBsZWdlbmREYXRhLnB1c2goZGlzcGxheUZpZWxkW2ldLmNvbW1lbnQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBzZXJpZXNEYXRhLnB1c2goewogICAgICAgICAgICBuYW1lOiBkYXRhLnJvd3Nbal1beEF4aXNGaWVsZC5maWVsZC50b1VwcGVyQ2FzZSgpXSwKICAgICAgICAgICAgdHlwZTogImZ1bm5lbCIsCiAgICAgICAgICAgIGRhdGE6IHZhbHVlLAogICAgICAgICAgICB3aWR0aDogZHVyYXRpb24gLSA1ICsgIiUiLAogICAgICAgICAgICBsZWZ0OiBqICogZHVyYXRpb24gKyAiJSIsCiAgICAgICAgICAgIGZ1bm5lbEFsaWduOiBzZXJpZXMuZnVubmVsQWxpZ24sCiAgICAgICAgICAgIHNvcnQ6IHNlcmllcy5zb3J0LAogICAgICAgICAgICBsYWJlbDogewogICAgICAgICAgICAgIHBvc2l0aW9uOiBzZXJpZXMubGFiZWwucG9zaXRpb24KICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIC8v6KGM5pWw5o2u5bGV56S6CiAgICAgICAgdmFyIF9kdXJhdGlvbjIgPSAxMDAgLyBkaXNwbGF5RmllbGQubGVuZ3RoOwogICAgICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IGRpc3BsYXlGaWVsZC5sZW5ndGg7IF9pMysrKSB7CiAgICAgICAgICB2YXIgX3ZhbHVlNCA9IFtdOwogICAgICAgICAgZm9yICh2YXIgX2ozID0gMDsgX2ozIDwgZGF0YS5yb3dzLmxlbmd0aDsgX2ozKyspIHsKICAgICAgICAgICAgX3ZhbHVlNC5wdXNoKHsKICAgICAgICAgICAgICBuYW1lOiBkYXRhLnJvd3NbX2ozXVt4QXhpc0ZpZWxkLmZpZWxkLnRvVXBwZXJDYXNlKCldLAogICAgICAgICAgICAgIHZhbHVlOiBkYXRhLnJvd3NbX2ozXVtkaXNwbGF5RmllbGRbX2kzXS5maWVsZC50b1VwcGVyQ2FzZSgpXQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKF9pMyA9PT0gMCkgewogICAgICAgICAgICAgIGxlZ2VuZERhdGEucHVzaChkYXRhLnJvd3NbX2ozXVt4QXhpc0ZpZWxkLmZpZWxkLnRvVXBwZXJDYXNlKCldICsgIiIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBzZXJpZXNEYXRhLnB1c2goewogICAgICAgICAgICBuYW1lOiBkaXNwbGF5RmllbGRbX2kzXS5jb21tZW50LAogICAgICAgICAgICB0eXBlOiAiZnVubmVsIiwKICAgICAgICAgICAgZGF0YTogX3ZhbHVlNCwKICAgICAgICAgICAgd2lkdGg6IF9kdXJhdGlvbjIgLSA1ICsgIiUiLAogICAgICAgICAgICBsZWZ0OiBfaTMgKiBfZHVyYXRpb24yICsgIiUiLAogICAgICAgICAgICBmdW5uZWxBbGlnbjogc2VyaWVzLmZ1bm5lbEFsaWduLAogICAgICAgICAgICBzb3J0OiBzZXJpZXMuc29ydCwKICAgICAgICAgICAgbGFiZWw6IHsKICAgICAgICAgICAgICBwb3NpdGlvbjogc2VyaWVzLmxhYmVsLnBvc2l0aW9uCiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBvcHRpb24uc2VyaWVzID0gc2VyaWVzRGF0YTsKICAgICAgb3B0aW9uLmxlZ2VuZCA9IGRhdGEuY29uZi5sZWdlbmQ7CiAgICAgIG9wdGlvbi5sZWdlbmQuZGF0YSA9IGxlZ2VuZERhdGE7CiAgICAgIHJldHVybiBvcHRpb247CiAgICB9LAogICAgYnVpbGRTY2F0dGVyOiBmdW5jdGlvbiBidWlsZFNjYXR0ZXIoZGF0YSwgb3B0aW9uKSB7CiAgICAgIHZhciBkaXNwbGF5RmllbGQgPSBkYXRhLmRpc3BsYXlmaWVsZDsKICAgICAgdmFyIGxlZ2VuZERhdGEgPSBbXTsKICAgICAgdmFyIHhBeGlzRGF0YSA9IFtdOwogICAgICB2YXIgeEF4aXNGaWVsZCA9IGRhdGEueGF4aXNGaWVsZDsKICAgICAgdmFyIHNlcmllc0RhdGEgPSBbXTsKICAgICAgdmFyIHNlcmllcyA9IGRhdGEuY29uZi5zZXJpZXM7CiAgICAgIGlmICh4QXhpc0ZpZWxkKSB4QXhpc0ZpZWxkID0geEF4aXNGaWVsZFswXTsKICAgICAgaWYgKHNlcmllcy5zaG93VHlwZSkgewogICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgZGF0YS5yb3dzLmxlbmd0aDsgaisrKSB7CiAgICAgICAgICB2YXIgdmFsdWUgPSBbXTsKICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGlzcGxheUZpZWxkLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGlmIChqID09PSAwKSB7CiAgICAgICAgICAgICAgeEF4aXNEYXRhLnB1c2goZGlzcGxheUZpZWxkW2ldLmNvbW1lbnQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhbHVlLnB1c2goW2Rpc3BsYXlGaWVsZFtpXS5jb21tZW50LCBkYXRhLnJvd3Nbal1bZGlzcGxheUZpZWxkW2ldLmZpZWxkLnRvVXBwZXJDYXNlKCldXSk7CiAgICAgICAgICB9CiAgICAgICAgICBsZWdlbmREYXRhLnB1c2goZGF0YS5yb3dzW2pdW3hBeGlzRmllbGQuZmllbGQudG9VcHBlckNhc2UoKV0gKyAiIik7CiAgICAgICAgICBzZXJpZXNEYXRhLnB1c2goewogICAgICAgICAgICBuYW1lOiBkYXRhLnJvd3Nbal1beEF4aXNGaWVsZC5maWVsZC50b1VwcGVyQ2FzZSgpXSwKICAgICAgICAgICAgdHlwZTogInNjYXR0ZXIiLAogICAgICAgICAgICBkYXRhOiB2YWx1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGZvciAodmFyIF9pNCA9IDA7IF9pNCA8IGRpc3BsYXlGaWVsZC5sZW5ndGg7IF9pNCsrKSB7CiAgICAgICAgICB2YXIgX3ZhbHVlNSA9IFtdOwogICAgICAgICAgZm9yICh2YXIgX2o0ID0gMDsgX2o0IDwgZGF0YS5yb3dzLmxlbmd0aDsgX2o0KyspIHsKICAgICAgICAgICAgaWYgKF9pNCA9PT0gMCkgewogICAgICAgICAgICAgIHhBeGlzRGF0YS5wdXNoKGRhdGEucm93c1tfajRdW3hBeGlzRmllbGQuZmllbGQudG9Mb2NhbGVVcHBlckNhc2UoKV0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF92YWx1ZTUucHVzaChbZGF0YS5yb3dzW19qNF1beEF4aXNGaWVsZC5maWVsZC50b0xvY2FsZVVwcGVyQ2FzZSgpXSwgZGF0YS5yb3dzW19qNF1bZGlzcGxheUZpZWxkW19pNF0uZmllbGQudG9Mb2NhbGVVcHBlckNhc2UoKV1dKTsKICAgICAgICAgIH0KICAgICAgICAgIGxlZ2VuZERhdGEucHVzaChkaXNwbGF5RmllbGRbX2k0XS5jb21tZW50KTsKICAgICAgICAgIHNlcmllc0RhdGEucHVzaCh7CiAgICAgICAgICAgIG5hbWU6IGRpc3BsYXlGaWVsZFtfaTRdLmNvbW1lbnQsCiAgICAgICAgICAgIHR5cGU6ICJzY2F0dGVyIiwKICAgICAgICAgICAgZGF0YTogX3ZhbHVlNQogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoZGlzcGxheUZpZWxkW19pNF0ucmVncmVzc2lvbiAmJiBkaXNwbGF5RmllbGRbX2k0XS5yZWdyZXNzaW9uICE9PSAnbm9uZScpIHsKICAgICAgICAgICAgdmFyIG15UmVncmVzc2lvbiA9IGVjU3RhdC5yZWdyZXNzaW9uKGRpc3BsYXlGaWVsZFtfaTRdLnJlZ3Jlc3Npb24sIF92YWx1ZTUpOwogICAgICAgICAgICBteVJlZ3Jlc3Npb24ucG9pbnRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsKICAgICAgICAgICAgICByZXR1cm4gYVswXSAtIGJbMF07CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBzZXJpZXNEYXRhLnB1c2goewogICAgICAgICAgICAgIG5hbWU6ICdsaW5lJywKICAgICAgICAgICAgICB0eXBlOiAnbGluZScsCiAgICAgICAgICAgICAgc2hvd1N5bWJvbDogZmFsc2UsCiAgICAgICAgICAgICAgZGF0YTogbXlSZWdyZXNzaW9uLnBvaW50cywKICAgICAgICAgICAgICBtYXJrUG9pbnQ6IHsKICAgICAgICAgICAgICAgIGl0ZW1TdHlsZTogewogICAgICAgICAgICAgICAgICBjb2xvcjogJ3RyYW5zcGFyZW50JwogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGxhYmVsOiB7CiAgICAgICAgICAgICAgICAgIHNob3c6IHRydWUsCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAnbGVmdCcsCiAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogbXlSZWdyZXNzaW9uLmV4cHJlc3Npb24sCiAgICAgICAgICAgICAgICAgIGNvbG9yOiAnIzMzMycsCiAgICAgICAgICAgICAgICAgIGZvbnRTaXplOiAxNAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGRhdGE6IFt7CiAgICAgICAgICAgICAgICAgIGNvb3JkOiBteVJlZ3Jlc3Npb24ucG9pbnRzW215UmVncmVzc2lvbi5wb2ludHMubGVuZ3RoIC0gMV0KICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgb3B0aW9uLnNlcmllcyA9IHNlcmllc0RhdGE7CiAgICAgIG9wdGlvbi54QXhpcyA9IHsKICAgICAgICB0eXBlOiBkYXRhLmNvbmYuc2VyaWVzLnhBeGlzVHlwZQogICAgICB9OwogICAgICBpZiAoZGF0YS5jb25mLnNlcmllcy54QXhpc1R5cGUgPT09ICdjYXRlZ29yeScpIHsKICAgICAgICBvcHRpb24ueEF4aXMuZGF0YSA9IHhBeGlzRGF0YTsKICAgICAgfQogICAgICBvcHRpb24ueUF4aXMgPSB7fTsKICAgICAgb3B0aW9uLmxlZ2VuZCA9IGRhdGEuY29uZi5sZWdlbmQ7CiAgICAgIG9wdGlvbi5sZWdlbmQuZGF0YSA9IGxlZ2VuZERhdGE7CiAgICAgIHJldHVybiBvcHRpb247CiAgICB9LAogICAgYnVpbGRIZWF0bWFwOiBmdW5jdGlvbiBidWlsZEhlYXRtYXAoZGF0YSwgb3B0aW9uKSB7CiAgICAgIHZhciBkaXNwbGF5RmllbGQgPSBkYXRhLmRpc3BsYXlmaWVsZDsKICAgICAgdmFyIGxlZ2VuZERhdGEgPSBbXTsKICAgICAgdmFyIHJvd3MgPSBbXTsKICAgICAgdmFyIGNvbHVtbnMgPSBbXTsKICAgICAgdmFyIGFyciA9IFtdOwogICAgICB2YXIgbWF4ID0gMDsKICAgICAgdmFyIHhBeGlzRmllbGQgPSBkYXRhLnhheGlzRmllbGQ7CiAgICAgIGlmICh4QXhpc0ZpZWxkKSB4QXhpc0ZpZWxkID0geEF4aXNGaWVsZFswXTsKICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLnJvd3MubGVuZ3RoOyBpKyspIHsKICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGRpc3BsYXlGaWVsZC5sZW5ndGg7IGorKykgewogICAgICAgICAgaWYgKGkgPT09IDApIHsKICAgICAgICAgICAgY29sdW1ucy5wdXNoKGRpc3BsYXlGaWVsZFtqXS5jb21tZW50KTsKICAgICAgICAgIH0KICAgICAgICAgIGFyci5wdXNoKFtpLCBqLCBkYXRhLnJvd3NbaV1bZGlzcGxheUZpZWxkW2pdLmZpZWxkLnRvVXBwZXJDYXNlKCldXSk7CiAgICAgICAgICBpZiAoZGF0YS5yb3dzW2ldW2Rpc3BsYXlGaWVsZFtqXS5maWVsZC50b1VwcGVyQ2FzZSgpXSA+IG1heCkgewogICAgICAgICAgICBtYXggPSBkYXRhLnJvd3NbaV1bZGlzcGxheUZpZWxkW2pdLmZpZWxkLnRvVXBwZXJDYXNlKCldOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByb3dzLnB1c2goZGF0YS5yb3dzW2ldW3hBeGlzRmllbGQuZmllbGQudG9VcHBlckNhc2UoKV0pOwogICAgICB9CiAgICAgIG9wdGlvbi5zZXJpZXMgPSBbewogICAgICAgIG5hbWU6ICJzc3MiLAogICAgICAgIHR5cGU6ICJoZWF0bWFwIiwKICAgICAgICBkYXRhOiBhcnIsCiAgICAgICAgbGFiZWw6IHsKICAgICAgICAgIG5vcm1hbDogewogICAgICAgICAgICBzaG93OiB0cnVlCiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9XTsKICAgICAgb3B0aW9uLnhBeGlzID0gewogICAgICAgIHR5cGU6ICJjYXRlZ29yeSIsCiAgICAgICAgZGF0YTogcm93cywKICAgICAgICBzcGxpdEFyZWE6IHsKICAgICAgICAgIHNob3c6IHRydWUKICAgICAgICB9CiAgICAgIH07CiAgICAgIG9wdGlvbi55QXhpcyA9IHsKICAgICAgICB0eXBlOiAiY2F0ZWdvcnkiLAogICAgICAgIGRhdGE6IGNvbHVtbnMsCiAgICAgICAgc3BsaXRBcmVhOiB7CiAgICAgICAgICBzaG93OiB0cnVlCiAgICAgICAgfQogICAgICB9OwogICAgICBvcHRpb24udmlzdWFsTWFwID0gewogICAgICAgIG1pbjogMCwKICAgICAgICBtYXg6IG1heCwKICAgICAgICBjYWxjdWxhYmxlOiB0cnVlLAogICAgICAgIG9yaWVudDogImhvcml6b250YWwiLAogICAgICAgIGxlZnQ6ICJjZW50ZXIiLAogICAgICAgIGJvdHRvbTogIjAlIgogICAgICB9OwogICAgICBvcHRpb24udG9vbHRpcCA9IHsKICAgICAgICBwb3NpdGlvbjogInRvcCIKICAgICAgfTsKICAgICAgb3B0aW9uLmxlZ2VuZCA9IGRhdGEuY29uZi5sZWdlbmQ7CiAgICAgIG9wdGlvbi5sZWdlbmQuZGF0YSA9IGxlZ2VuZERhdGE7CiAgICAgIHJldHVybiBvcHRpb247CiAgICB9LAogICAgZ2V0R3JpZDogZnVuY3Rpb24gZ2V0R3JpZCgpIHsKICAgICAgdmFyIHRvcCA9IDA7CiAgICAgIHZhciBib3R0b20gPSAwOwogICAgICB2YXIgZ3JpZCA9IHt9OwogICAgICBpZiAodGhpcy5jdXN0b21DaGFydC5jb25mLnRpdGxlLnNob3cpIHsKICAgICAgICBpZiAodGhpcy5jdXN0b21DaGFydC5jb25mLnRpdGxlLnRvcCA9PT0gInRvcCIpIHsKICAgICAgICAgIHRvcCArPSA3OwogICAgICAgICAgaWYgKHRoaXMuY3VzdG9tQ2hhcnQuY29uZi50aXRsZS5zdWJ0ZXh0KSB7CiAgICAgICAgICAgIHRvcCArPSA1OwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXN0b21DaGFydC5jb25mLnRpdGxlLnRvcCA9PT0gImJvdHRvbSIpIHsKICAgICAgICAgIGJvdHRvbSArPSAxNjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRoaXMuY3VzdG9tQ2hhcnQuY29uZi5sZWdlbmQuc2hvdykgewogICAgICAgIGlmICh0aGlzLmN1c3RvbUNoYXJ0LmNvbmYubGVnZW5kLnRvcCA9PT0gInRvcCIpIHsKICAgICAgICAgIHRvcCArPSA3OwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXN0b21DaGFydC5jb25mLmxlZ2VuZC50b3AgPT09ICJib3R0b20iKSB7CiAgICAgICAgICBib3R0b20gKz0gMTA7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0b3AgIT09IDApIHsKICAgICAgICBncmlkLnRvcCA9IHRvcCArICIlIjsKICAgICAgfSBlbHNlIHsKICAgICAgICBncmlkLnRvcCA9ICI1JSI7CiAgICAgIH0KICAgICAgaWYgKGJvdHRvbSAhPT0gMCkgewogICAgICAgIGdyaWQuYm90dG9tID0gYm90dG9tICsgIiUiOwogICAgICB9CiAgICAgIHJldHVybiBncmlkOwogICAgfSwKICAgIGdldFRpdGxlUG9zaXRpb246IGZ1bmN0aW9uIGdldFRpdGxlUG9zaXRpb24oKSB7CiAgICAgIGlmICh0aGlzLmN1c3RvbUNoYXJ0LmNvbmYudGl0bGUudG9wID09PSAidG9wIikgewogICAgICAgIHJldHVybiB0aGlzLmN1c3RvbUNoYXJ0LmNvbmYubGVnZW5kLnNob3cgJiYgdGhpcy5jdXN0b21DaGFydC5jb25mLmxlZ2VuZC50b3AgPT09ICJ0b3AiID8gIjIwIiA6ICJhdXRvIjsKICAgICAgfSBlbHNlIGlmICh0aGlzLmN1c3RvbUNoYXJ0LmNvbmYudGl0bGUudG9wID09PSAiYm90dG9tIikgewogICAgICAgIHJldHVybiB0aGlzLmN1c3RvbUNoYXJ0LmNvbmYubGVnZW5kLnNob3cgJiYgdGhpcy5jdXN0b21DaGFydC5jb25mLmxlZ2VuZC50b3AgPT09ICJib3R0b20iID8gIjg0JSIgOiAiODglIjsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21DaGFydC5jb25mLnRpdGxlLnRvcDsKICAgICAgfQogICAgfSwKICAgIGFkanVzdENoYXRUaXRsZTogZnVuY3Rpb24gYWRqdXN0Q2hhdFRpdGxlKGRhdGEsIG9wdGlvbikgewogICAgICBvcHRpb24ubGVnZW5kLnRvcCA9IDMwOwogICAgICBvcHRpb24uZ3JpZC50b3AgPSA4MDsKICAgICAgaWYgKGRhdGEuY29uZiAmJiBkYXRhLmNvbmYudGl0bGUgJiYgZGF0YS5jb25mLnRpdGxlLnN1YnRleHQpIHsKICAgICAgICBvcHRpb24ubGVnZW5kLnRvcCA9IDUwOwogICAgICAgIG9wdGlvbi5ncmlkLnRvcCA9IDEwMDsKICAgICAgfQogICAgfQogIH0KfTs="},null]}