{"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\\components\\mindMap\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\src\\components\\mindMap\\index.vue","mtime":1739300167374},{"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},{"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:aW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS9kYXRhU2hhcmUtZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiOwppbXBvcnQgX29iamVjdFNwcmVhZCBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS9kYXRhU2hhcmUtZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMi5qcyI7CmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UvZGF0YVNoYXJlLWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzLmpzIjsKaW1wb3J0IF9yZWdlbmVyYXRvclJ1bnRpbWUgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UvZGF0YVNoYXJlLWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3JlZ2VuZXJhdG9yUnVudGltZS5qcyI7CmltcG9ydCBfYXN5bmNUb0dlbmVyYXRvciBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS9kYXRhU2hhcmUtZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyI7CnZhciBfbWV0aG9kczsKdmFyIF9leGNsdWRlZCA9IFsiaWQiLCAibmFtZSIsICJwYXJlbnRJZCIsICJsZXZlbCIsICJyZWxhdGlvbkNvbnRlbnQiLCAiY29udGVudCIsICJiYWNrZ3JvdW5kIiwgImZvbnRDb2xvciIsICJmb250U2l6ZSIsICJmb250U3R5bGUiLCAiZm9udFdldGlnaHQiXTsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmZpbHRlci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmZvci1lYWNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IubWFwLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC52YWx1ZXMuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIjsKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KCmltcG9ydCBkb210b2ltYWdlIGZyb20gJ2RvbS10by1pbWFnZSc7CmltcG9ydCB1dGlscyBmcm9tICdAL3V0aWxzLmpzJzsKaW1wb3J0ICdqc21pbmQvc3R5bGUvanNtaW5kLmNzcyc7CmltcG9ydCAnanNtaW5kL2VzNi9qc21pbmQuZHJhZ2dhYmxlLW5vZGUuanMnOwppbXBvcnQgJ2pzbWluZC9lczYvanNtaW5kLnNjcmVlbnNob3QuanMnOwppbXBvcnQganNNaW5kIGZyb20gJ2pzbWluZCc7CmltcG9ydCBBUEkgZnJvbSAnQC9hcGkvYnVzaW5lc3MvYXJpdGhtZXRpY1Rhc2suanMnOwppbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnY29kZW1pcnJvcic7CmV4cG9ydCBkZWZhdWx0IHsKICBuYW1lOiAnbWluZE1hcCcsCiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHsKICAgIHJldHVybiB7CiAgICAgIC8vIOS7u+WKoeS/oeaBrwogICAgICB0YXNrRGF0YTogewogICAgICAgIGlkOiAnJywKICAgICAgICBuYW1lOiAnJywKICAgICAgICBjb2RlOiAnJwogICAgICB9LAogICAgICBuZXdWZXJzaW9uOiAnJywKICAgICAgLy8g6YWN572u5L+h5oGvCiAgICAgIHNob3dTaWRlRWRpdG9yOiBmYWxzZSwKICAgICAgcGFnaW5hdGlvbjogewogICAgICAgIC8vIOWIhumhteWIneWni+WMluaVsOaNrgogICAgICAgIHBhZ2U6IDEsCiAgICAgICAgdG90YWw6IDAsCiAgICAgICAgcGFnZVNpemU6IDIwCiAgICAgIH0sCiAgICAgIHNlYXJjaFRhcmdldDogewogICAgICAgIHR5cGU6IDEsCiAgICAgICAgbmFtZTogJycKICAgICAgfSwKICAgICAgYWRkVGFyZ2V0OiB7CiAgICAgICAgdG9waWM6ICcnLAogICAgICAgIGNvZGU6ICcnLAogICAgICAgIHR5cGU6IDEsCiAgICAgICAgZGVzYzogJycsCiAgICAgICAgc291cmNlOiAxCiAgICAgIH0sCiAgICAgIGFjdGl2ZU5hbWU6ICdmaXJzdCcsCiAgICAgIHRhYmxlTGlzdDogW3sKICAgICAgICBpZDogJzEuMicsCiAgICAgICAgbmFtZTogJ3RhYmxlMDEnLAogICAgICAgIG5hbWVDbjogJ+ihqOS4reaWh+WQjTAxJwogICAgICB9LCB7CiAgICAgICAgaWQ6ICcxLjMnLAogICAgICAgIG5hbWU6ICd0YWJsZTAyJywKICAgICAgICBuYW1lQ246ICfooajkuK3mloflkI0wMicKICAgICAgfSwgewogICAgICAgIGlkOiAnMS40JywKICAgICAgICBuYW1lOiAndGFibGUwMycsCiAgICAgICAgbmFtZUNuOiAn6KGo5Lit5paH5ZCNMDMnCiAgICAgIH1dLAogICAgICBmaWVsZExpc3Q6IFt7CiAgICAgICAgaWQ6ICcxLjInLAogICAgICAgIG5hbWU6ICduYW1lJywKICAgICAgICBuYW1lQ246ICflp5PlkI0nLAogICAgICAgIHR5cGU6ICfmma7pgJrlrZfmrrUnCiAgICAgIH0sIHsKICAgICAgICBpZDogJzEuMycsCiAgICAgICAgbmFtZTogJ3NleCcsCiAgICAgICAgbmFtZUNuOiAn5oCn5YirJywKICAgICAgICB0eXBlOiAn5p6a5Li+5a2X5YW4JywKICAgICAgICBkaWN0TmFtZTogJ3NleERpY3QnLAogICAgICAgIGRpY3Q6IFt7CiAgICAgICAgICBuYW1lOiAn55S3JywKICAgICAgICAgIGlkOiAnMScKICAgICAgICB9LCB7CiAgICAgICAgICBuYW1lOiAn5aWzJywKICAgICAgICAgIGlkOiAnMicKICAgICAgICB9XQogICAgICB9LCB7CiAgICAgICAgaWQ6ICcxLjQnLAogICAgICAgIG5hbWU6ICd0eXBlJywKICAgICAgICBuYW1lQ246ICfnsbvlnosnLAogICAgICAgIHR5cGU6ICflpJrnu7TlrZflhbgnLAogICAgICAgIGRpY3ROYW1lOiAnc3BvcnRzRGljdCcsCiAgICAgICAgZGljdDogW3sKICAgICAgICAgIG5hbWU6ICfov5DliqgnLAogICAgICAgICAgaWQ6ICcxJywKICAgICAgICAgIGNoaWxkcmVuOiBbewogICAgICAgICAgICBuYW1lOiAn5rC05LiK6L+Q5Yqo5rC05LiK6L+Q5Yqo5rC05LiK6L+Q5Yqo5rC05LiK6L+Q5Yqo5rC05LiK6L+Q5Yqo5rC05LiK6L+Q5Yqo5rC05LiK6L+Q5Yqo5rC05LiK6L+Q5Yqo5rC05LiK6L+Q5Yqo5rC05LiK6L+Q5Yqo5rC05LiK6L+Q5Yqo5rC05LiK6L+Q5YqoJywKICAgICAgICAgICAgaWQ6ICcxMScsCiAgICAgICAgICAgIGNoaWxkcmVuOiBbewogICAgICAgICAgICAgIG5hbWU6ICfotZvoiYcnLAogICAgICAgICAgICAgIGlkOiAnMTExJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgbmFtZTogJ+e/u+advycsCiAgICAgICAgICAgICAgaWQ6ICcxMTInCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICBuYW1lOiAn55qu5YiS6ImHJywKICAgICAgICAgICAgICBpZDogJzExMycKICAgICAgICAgICAgfV0KICAgICAgICAgIH0sIHsKICAgICAgICAgICAgbmFtZTogJ+WGrOWto+i/kOWKqCcsCiAgICAgICAgICAgIGlkOiAnMTInLAogICAgICAgICAgICBjaGlsZHJlbjogW3sKICAgICAgICAgICAgICBuYW1lOiAn5Yaw5aO2JywKICAgICAgICAgICAgICBpZDogJzEyMScKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgIG5hbWU6ICfoirHmoLfmu5HlhrAnLAogICAgICAgICAgICAgIGlkOiAnMTIyJwogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgbmFtZTogJ+efremBk+mAn+a7kScsCiAgICAgICAgICAgICAgaWQ6ICcxMjMnCiAgICAgICAgICAgIH1dCiAgICAgICAgICB9LCB7CiAgICAgICAgICAgIG5hbWU6ICfnkIPnsbvov5DliqgnLAogICAgICAgICAgICBpZDogJzEzJywKICAgICAgICAgICAgY2hpbGRyZW46IFt7CiAgICAgICAgICAgICAgbmFtZTogJ+evrueQgycsCiAgICAgICAgICAgICAgaWQ6ICcxMzEnCiAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICBuYW1lOiAn6Laz55CDJywKICAgICAgICAgICAgICBpZDogJzEzMicKICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgIG5hbWU6ICfmm7Lmo43nkIMnLAogICAgICAgICAgICAgIGlkOiAnMTMzJwogICAgICAgICAgICB9XQogICAgICAgICAgfV0KICAgICAgICB9XQogICAgICB9XSwKICAgICAgZGVmYXVsdFByb3BzOiB7CiAgICAgICAgdmFsdWU6ICdpZCcsCiAgICAgICAgbGFiZWw6ICduYW1lJwogICAgICB9LAogICAgICB2ZXJzaW9uRGF0YTogW10sCiAgICAgIG1hcFR5cGU6ICdtdWx0aVRvU2luZ2xlJywKICAgICAgLy9tdWx0aVRvU2luZ2xlIG9yIHNpbmdsZVRvTXVsdGkKICAgICAgdGFyZ2V0RGF0YTogW10sCiAgICAgIC8vIOiEkeWbvuS/oeaBrwogICAgICAvLyDohJHlm77mlbDmja4KICAgICAgam06IG51bGwsCiAgICAgIGVkaXRvcjogbnVsbCwKICAgICAgbWluZERhdGE6IHsKICAgICAgICBtZXRhOiB7CiAgICAgICAgICBuYW1lOiAnJywKICAgICAgICAgIGF1dGhvcjogJ2FydGZlc3MnLAogICAgICAgICAgdmVyc2lvbjogJzAuMC4xJwogICAgICAgIH0sCiAgICAgICAgZm9ybWF0OiAnbm9kZV9hcnJheScsCiAgICAgICAgZGF0YTogW3sKICAgICAgICAgIGlzcm9vdDogdHJ1ZSwKICAgICAgICAgIGlkOiB1dGlscy51dWlkKCksCiAgICAgICAgICB0b3BpYzogJycsCiAgICAgICAgICBsZXZlbDogMCwKICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogJyM0MDllZmYnLAogICAgICAgICAgJ2ZvbnQtc2l6ZSc6IDI0IC8vIOWtl+S9k+Wkp+WwjwogICAgICAgIH1dCiAgICAgIH0sCiAgICAgIC8vIOiEkeWbvumFjee9rgogICAgICBvcHRpb25zOiB7CiAgICAgICAgY29udGFpbmVyOiAnanNtaW5kX2NvbnRhaW5lcicsCiAgICAgICAgLy8gW+W/hemAiV0g5a655Zmo55qESUQKICAgICAgICBlZGl0YWJsZTogdHJ1ZSwKICAgICAgICAvLyBb5Y+v6YCJXSDmmK/lkKblkK/nlKjnvJbovpEKICAgICAgICB0aGVtZTogJ3ByaW1hcnknLAogICAgICAgIC8vIFvlj6/pgIldIOS4u+mimAogICAgICAgIHN1cHBvcnRfaHRtbDogdHJ1ZSwKICAgICAgICBsb2dfbGV2ZWw6ICdkZWJ1ZycsCiAgICAgICAgLy8g6K6+572u5pel5b+X57qn5Yir5Li6IGRlYnVnCiAgICAgICAgdmlldzogewogICAgICAgICAgZW5naW5lOiAnY2FudmFzJywKICAgICAgICAgIC8vIOaAnee7tOWvvOWbvuWQhOiKgueCueS5i+mXtOe6v+adoeeahOe7mOWItuW8leaTjgogICAgICAgICAgZW5hYmxlX2RldmljZV9waXhlbF9yYXRpbzogdHJ1ZSwKICAgICAgICAgIC8vIOaMieiuvuWkh+WDj+e0oOavlOS+i+e7mOWItumrmOa4heaAnee7tOWvvOWbvgogICAgICAgICAgaG1hcmdpbjogMTAwLAogICAgICAgICAgLy8g5oCd57u05a+85Zu+6Led5a655Zmo5aSW5qGG55qE5pyA5bCP5rC05bmz6Led56a7CiAgICAgICAgICB2bWFyZ2luOiA1MCwKICAgICAgICAgIC8vIOaAnee7tOWvvOWbvui3neWuueWZqOWkluahhueahOacgOWwj+WeguebtOi3neemuwogICAgICAgICAgbGluZV93aWR0aDogMiwKICAgICAgICAgIC8vIOaAnee7tOWvvOWbvue6v+adoeeahOeyl+e7hgogICAgICAgICAgbGluZV9jb2xvcjogJyM2NjYnLAogICAgICAgICAgLy8g5oCd57u05a+85Zu+57q/5p2h55qE6aKc6ImyCiAgICAgICAgICBkcmFnZ2FibGU6IHRydWUsCiAgICAgICAgICAvLyDmmK/lkKblhYHorrjmi5bliqjnlLvluIMKICAgICAgICAgIGhpZGVfc2Nyb2xsYmFyc193aGVuX2RyYWdnYWJsZTogdHJ1ZSwKICAgICAgICAgIG5vZGVfb3ZlcmZsb3c6ICdoaWRkZW4nLAogICAgICAgICAgem9vbTogewogICAgICAgICAgICAvLyDnvKnmlL7phY3nva4KICAgICAgICAgICAgbWluOiAwLjEsCiAgICAgICAgICAgIC8vIOacgOWwj+e8qeaUvuavlOS+iwogICAgICAgICAgICBtYXg6IDIuMSwKICAgICAgICAgICAgLy8g5pyA5aSn57yp5pS+5q+U5L6LCiAgICAgICAgICAgIHN0ZXA6IDAuMSAvLyDnvKnmlL7mr5TkvovmraXplb8KICAgICAgICAgIH0sCiAgICAgICAgICBleHBhbmRlcl9zdHlsZTogJ251bWJlcicsCiAgICAgICAgICBsaW5lX3N0eWxlOiAnY3VydmVkJywKICAgICAgICAgIGN1c3RvbV9saW5lX3JlbmRlcjogZnVuY3Rpb24gY3VzdG9tX2xpbmVfcmVuZGVyKF9yZWYpIHsKICAgICAgICAgICAgdmFyIGN0eCA9IF9yZWYuY3R4LAogICAgICAgICAgICAgIHN0YXJ0X3BvaW50ID0gX3JlZi5zdGFydF9wb2ludCwKICAgICAgICAgICAgICBlbmRfcG9pbnQgPSBfcmVmLmVuZF9wb2ludDsKICAgICAgICAgICAgY3R4LmJlZ2luUGF0aCgpOwogICAgICAgICAgICBjdHgubW92ZVRvKHN0YXJ0X3BvaW50LngsIHN0YXJ0X3BvaW50LnkpOwogICAgICAgICAgICAvLyBjdHgubGluZVRvKHRvWCwgdG9ZKTsKICAgICAgICAgICAgY3R4LmJlemllckN1cnZlVG8oc3RhcnRfcG9pbnQueCArIChlbmRfcG9pbnQueCAtIHN0YXJ0X3BvaW50LngpICogMiAvIDMsIHN0YXJ0X3BvaW50LnksIHN0YXJ0X3BvaW50LngsIGVuZF9wb2ludC55LCBlbmRfcG9pbnQueCwgZW5kX3BvaW50LnkpOwogICAgICAgICAgICBjdHguc3Ryb2tlU3R5bGUgPSAnIzY2Nic7CiAgICAgICAgICAgIGN0eC5saW5lV2lkdGggPSAyOwogICAgICAgICAgICBjdHguc3Ryb2tlKCk7CiAgICAgICAgICB9LAogICAgICAgICAgY3VzdG9tX25vZGVfcmVuZGVyOiBmdW5jdGlvbiBjdXN0b21fbm9kZV9yZW5kZXIoam0sIGVsZW1lbnQsIG5vZGUpIHsKICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAiIi5jb25jYXQobm9kZS50b3BpYywgIjxkaXYgY2xhc3M9J3RpcC1pY29uIikuY29uY2F0KG5vZGUuZGF0YS5jb250ZW50ID8gJyBzaG93VGlwJyA6ICcnLCAiJyBkYXRhLWNvbnRlbnQ9JyIpLmNvbmNhdChub2RlLmRhdGEuY29udGVudCB8fCAnJywgIic+PGkgY2xhc3M9XCJlbC1pY29uLXMtZmxhZ1wiPjwvaT48L2Rpdj4iKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIOihqOekuuW3sue7j+a4suafk+atpOiKgueCuQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgbGF5b3V0OiB7CiAgICAgICAgICBoc3BhY2U6IDEwMCwKICAgICAgICAgIC8vIOiKgueCueS5i+mXtOeahOawtOW5s+mXtOi3nQogICAgICAgICAgdnNwYWNlOiAyMCAvLyDoioLngrnkuYvpl7TnmoTlnoLnm7Tpl7Tot50KICAgICAgICB9LAogICAgICAgIHNob3J0Y3V0OiB7CiAgICAgICAgICAvLyDnpoHnlKjlv6vmjbfplK4KICAgICAgICAgIGVuYWJsZTogZmFsc2UKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHByZWRlZmluZUNvbG9yczogWycjMWU5MGZmJywgJyM2N2MyM2EnLCAnI2U2YTIzYycsICcjZjU2YzZjJywgJyNmZjQ1MDAnLCAnI2ZmOGMwMCcsICcjZmZkNzAwJywgJyM5MGVlOTAnLCAnIzAwY2VkMScsICcjNDA5ZWZmJywgJyNjNzE1ODUnXSwKICAgICAgLy8g6aKE5a6a5LmJ6aKc6ImyCgogICAgICBzdHJ1Y3R1cmU6IHsKICAgICAgICBhY3RpdmU6ICdyaWdodCcKICAgICAgfSwKICAgICAgY3JlYXRlVHlwZTogJycsCiAgICAgIC8vIOa3u+WKoOW5s+e6p29y5a2Q57qnCiAgICAgIGN1cnJlbnROb2RlOiBudWxsLAogICAgICAvLyDpgInkuK3oioLngrnkv6Hmga8KICAgICAgc2hvd01lbnU6IGZhbHNlLAogICAgICAvLyDmmK/lkKbmmL7npLrlj7PplK7oj5zljZXmoI8KICAgICAgaXNyb290OiBmYWxzZSwKICAgICAgbWVudVN0eWxlOiB7CiAgICAgICAgdG9wOiAnJywKICAgICAgICBib3R0b206ICcnLAogICAgICAgIGxlZnQ6ICcnLAogICAgICAgIHJpZ2h0OiAnJwogICAgICB9LAogICAgICB0aXBTdHlsZTogewogICAgICAgIHRvcDogJycsCiAgICAgICAgYm90dG9tOiAnJywKICAgICAgICBsZWZ0OiAnJywKICAgICAgICByaWdodDogJycKICAgICAgfSwKICAgICAgc2hvd1BvcG92ZXI6IGZhbHNlLAogICAgICBjdXJyZW50TWVtbzogJycsCiAgICAgIHNob3dNYXA6IHRydWUsCiAgICAgIGZpcnN0QWRkOiBmYWxzZSwKICAgICAgY3VyVmVyc2lvbjogJycKICAgIH07CiAgfSwKICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkgewogICAgdGhpcy5nZXRUYXNrRGF0YSgpOwogICAgdmFyIHRoYXQgPSB0aGlzOwogICAgdGhpcy5tYXBUeXBlID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnbWFwVHlwZScpIHx8ICdtdWx0aVRvU2luZ2xlJzsKICAgIHRoaXMub3B0aW9ucy5jb250YWluZXIgPSAianNtaW5kX2NvbnRhaW5lcl8iLmNvbmNhdCh0aGlzLm1hcFR5cGUpOwogICAgLy8gaWYgKHRoaXMubWFwVHlwZSA9PT0gJ3NpbmdsZVRvTXVsdGknKSB7CiAgICAvLyAgIGNvbnNvbGUubG9nKCdzaW5nbGVUb011bHRpJyk7CiAgICAvLyAgIHRoaXMub3B0aW9ucy52aWV3LmN1c3RvbV9saW5lX3JlbmRlciA9IGZ1bmN0aW9uICh7IGN0eCwgc3RhcnRfcG9pbnQsIGVuZF9wb2ludCB9KSB7CiAgICAvLyAgICAgdGhhdC5kcmF3Q3VydmVBcnJvdyhjdHgsIGVuZF9wb2ludCwgc3RhcnRfcG9pbnQsIDAuOSk7CiAgICAvLyAgICAgLy8gdGhhdC5kcmF3QXJyb3coY3R4LCBzdGFydF9wb2ludCwgZW5kX3BvaW50KTsKICAgIC8vICAgfTsKICAgIC8vIH0gZWxzZSB7CiAgICAvLyAgIGNvbnNvbGUubG9nKCdtdWx0aVRvU2luZ2xlJyk7CiAgICAvLyAgIHRoaXMub3B0aW9ucy52aWV3LmN1c3RvbV9saW5lX3JlbmRlciA9IGZ1bmN0aW9uICh7IGN0eCwgc3RhcnRfcG9pbnQsIGVuZF9wb2ludCB9KSB7CiAgICAvLyAgICAgdGhhdC5kcmF3Q3VydmVBcnJvdyhjdHgsIGVuZF9wb2ludCwgc3RhcnRfcG9pbnQsIDAuNSk7CiAgICAvLyAgICAgLy8gdGhhdC5kcmF3QXJyb3coY3R4LCBlbmRfcG9pbnQsIHN0YXJ0X3BvaW50KTsKICAgIC8vICAgfTsKICAgIC8vIH0KICB9LAogIG1ldGhvZHM6IChfbWV0aG9kcyA9IHsKICAgIGluaXRNYXA6IGZ1bmN0aW9uIGluaXRNYXAoKSB7CiAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICBjb25zb2xlLmxvZyhfdGhpcy5taW5kRGF0YSwgJ2NvbnRhaW5lcicpOwogICAgICAgIF90aGlzLmxvYWRNaW5kKCk7CiAgICAgIH0pOwogICAgfSwKICAgIC8vLS0tLS0tLS0tLS0t5o6l5Y+jLS0tLS0tLS0tLS0tLS0KICAgIC8vIOiOt+WPluS7u+WKoeS/oeaBrwogICAgZ2V0VGFza0RhdGE6IGZ1bmN0aW9uIGdldFRhc2tEYXRhKCkgewogICAgICB2YXIgX3RoaXMyID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlKCkgewogICAgICAgIHZhciBfdGhpczIkJHJvdXRlJHF1ZXJ5LCBpZCwgbmFtZSwgY29kZSwgdmVyc2lvbjsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBfdGhpczIkJHJvdXRlJHF1ZXJ5ID0gX3RoaXMyLiRyb3V0ZS5xdWVyeSwgaWQgPSBfdGhpczIkJHJvdXRlJHF1ZXJ5LmlkLCBuYW1lID0gX3RoaXMyJCRyb3V0ZSRxdWVyeS5uYW1lLCBjb2RlID0gX3RoaXMyJCRyb3V0ZSRxdWVyeS5jb2RlLCB2ZXJzaW9uID0gX3RoaXMyJCRyb3V0ZSRxdWVyeS52ZXJzaW9uOwogICAgICAgICAgICAgIF90aGlzMi50YXNrRGF0YSA9IHsKICAgICAgICAgICAgICAgIGlkOiBpZCwKICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsCiAgICAgICAgICAgICAgICBjb2RlOiBjb2RlLAogICAgICAgICAgICAgICAgdmVyc2lvbjogdmVyc2lvbgogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDQ7CiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5nZXRNYXBEYXRhKHZlcnNpb24pOwogICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgX3RoaXMyLmluaXRNYXAoKTsKICAgICAgICAgICAgY2FzZSA1OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZSk7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIC8vIOiOt+WPluiEkeWbvuaVsOaNrgogICAgZ2V0TWFwRGF0YTogZnVuY3Rpb24gZ2V0TWFwRGF0YSgpIHsKICAgICAgdmFyIF90aGlzMyA9IHRoaXM7CiAgICAgIHZhciB2ZXJzaW9uSWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6ICcnOwogICAgICB0aGlzLmluaXRNaW5kRGF0YSgpOwogICAgICB2YXIgZGF0YSA9IG5ldyBGb3JtRGF0YSgpOwogICAgICAvLyDmnInniYjmnKzlj7fnmoTml7blgJnkuI3kvKDku7vliqFpZAogICAgICBkYXRhLmFwcGVuZCgndGFza0lkJywgdmVyc2lvbklkID8gJycgOiB0aGlzLnRhc2tEYXRhLmlkKTsKICAgICAgZGF0YS5hcHBlbmQoJ3ZlcnNpb25JZCcsIHZlcnNpb25JZCk7CiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgICAgQVBJLmdldEJyYWluTWFwSW5mbyhkYXRhKS50aGVuKC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CiAgICAgICAgICB2YXIgX3JlZjIgPSBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTIocmVzKSB7CiAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlMiQoX2NvbnRleHQyKSB7CiAgICAgICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQyLnByZXYgPSBfY29udGV4dDIubmV4dCkgewogICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICBpZiAoIXJlcykgewogICAgICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMTQ7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgaWYgKCEocmVzLmxlbmd0aCA9PT0gMCkpIHsKICAgICAgICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDg7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgX3RoaXMzLmZpcnN0QWRkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSA1OwogICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXMzLmdldE5ld1ZlcnNpb24oKTsKICAgICAgICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgICAgICAgX3RoaXMzLmN1clZlcnNpb24gPSBfY29udGV4dDIuc2VudDsKICAgICAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAxMTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDg6CiAgICAgICAgICAgICAgICAgIF90aGlzMy5taW5kRGF0YS5kYXRhID0gX3RoaXMzLmZvcm1hdERhdGEocmVzKTsKICAgICAgICAgICAgICAgICAgX3RoaXMzLmN1clZlcnNpb24gPSBfdGhpczMuZ2V0VmVyc2lvbkNvZGUoX3RoaXMzLm1pbmREYXRhLmRhdGFbMF0pOwogICAgICAgICAgICAgICAgICBfdGhpczMuZmlyc3RBZGQgPSBmYWxzZTsKICAgICAgICAgICAgICAgIGNhc2UgMTE6CiAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTsKICAgICAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAxNTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIDE0OgogICAgICAgICAgICAgICAgICByZWplY3QocmVzLm1lc3NhZ2UpOwogICAgICAgICAgICAgICAgY2FzZSAxNToKICAgICAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuc3RvcCgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgX2NhbGxlZTIpOwogICAgICAgICAgfSkpOwogICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeCkgewogICAgICAgICAgICByZXR1cm4gX3JlZjIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICAgIH07CiAgICAgICAgfSgpKS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7CiAgICAgICAgICByZWplY3QoZXJyKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9LAogICAgZ2V0VmVyc2lvbkNvZGU6IGZ1bmN0aW9uIGdldFZlcnNpb25Db2RlKGRhdGEpIHsKICAgICAgaWYgKGRhdGEudGFza1ZlcnNpb25OYW1lKSB7CiAgICAgICAgcmV0dXJuIGRhdGEudGFza1ZlcnNpb25OYW1lLnNwbGl0KCctJylbMV07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuICcnOwogICAgICB9CiAgICB9LAogICAgaW5pdE1pbmREYXRhOiBmdW5jdGlvbiBpbml0TWluZERhdGEoKSB7CiAgICAgIHRoaXMubWluZERhdGEubWV0YS5uYW1lID0gdGhpcy50YXNrRGF0YS5uYW1lOwogICAgICB0aGlzLm1pbmREYXRhLmRhdGFbMF0udG9waWMgPSB0aGlzLnRhc2tEYXRhLm5hbWU7CiAgICAgIHRoaXMubWluZERhdGEuZGF0YVswXS5pZCA9IHV0aWxzLnV1aWQoKTsKICAgIH0sCiAgICBmb3JtYXREYXRhOiBmdW5jdGlvbiBmb3JtYXREYXRhKGRhdGEpIHsKICAgICAgdmFyIG5ld0RhdGEgPSBbXTsKICAgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgdmFyIGlkID0gaXRlbS5pZCwKICAgICAgICAgIHRvcGljID0gaXRlbS5uYW1lLAogICAgICAgICAgcGFyZW50SWQgPSBpdGVtLnBhcmVudElkLAogICAgICAgICAgbGV2ZWwgPSBpdGVtLmxldmVsLAogICAgICAgICAgcmVsYXRpb25Db250ZW50ID0gaXRlbS5yZWxhdGlvbkNvbnRlbnQsCiAgICAgICAgICBjb250ZW50ID0gaXRlbS5jb250ZW50LAogICAgICAgICAgYmFja2dyb3VuZCA9IGl0ZW0uYmFja2dyb3VuZCwKICAgICAgICAgIGZvbnRDb2xvciA9IGl0ZW0uZm9udENvbG9yLAogICAgICAgICAgZm9udFNpemUgPSBpdGVtLmZvbnRTaXplLAogICAgICAgICAgZm9udFN0eWxlID0gaXRlbS5mb250U3R5bGUsCiAgICAgICAgICBmb250V2V0aWdodCA9IGl0ZW0uZm9udFdldGlnaHQsCiAgICAgICAgICBmaWVsZHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoaXRlbSwgX2V4Y2x1ZGVkKTsKICAgICAgICB2YXIgbmV3SXRlbSA9IF9vYmplY3RTcHJlYWQoewogICAgICAgICAgaWQ6IGlkLAogICAgICAgICAgcGFyZW50aWQ6IHBhcmVudElkLAogICAgICAgICAgdG9waWM6IHRvcGljLAogICAgICAgICAgbGV2ZWw6IGxldmVsLAogICAgICAgICAgcmVsYXRpb25Db250ZW50OiByZWxhdGlvbkNvbnRlbnQsCiAgICAgICAgICBjb250ZW50OiBjb250ZW50LAogICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBiYWNrZ3JvdW5kLAogICAgICAgICAgJ2ZvcmVncm91bmQtY29sb3InOiBmb250Q29sb3IsCiAgICAgICAgICAnZm9udC13ZWlnaHQnOiBmb250V2V0aWdodCwKICAgICAgICAgICdmb250LXN0eWxlJzogZm9udFN0eWxlLAogICAgICAgICAgJ2ZvbnQtc2l6ZSc6IGZvbnRTaXplCiAgICAgICAgfSwgZmllbGRzKTsKICAgICAgICBsZXZlbCA9PT0gMCA/IG5ld0l0ZW0uaXNyb290ID0gdHJ1ZSA6IG51bGw7CiAgICAgICAgbmV3RGF0YS5wdXNoKG5ld0l0ZW0pOwogICAgICB9KTsKICAgICAgcmV0dXJuIG5ld0RhdGE7CiAgICB9LAogICAgLy8g5L+d5a2YCiAgICBoYW5kbGVTYXZlOiBmdW5jdGlvbiBoYW5kbGVTYXZlKGNvbW1hbmQpIHsKICAgICAgdmFyIF90aGlzNCA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTMoKSB7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUzJChfY29udGV4dDMpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0My5wcmV2ID0gX2NvbnRleHQzLm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gMjsKICAgICAgICAgICAgICByZXR1cm4gX3RoaXM0LmdldE5ld1ZlcnNpb24oKTsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIF90aGlzNC5uZXdWZXJzaW9uID0gX2NvbnRleHQzLnNlbnQ7CiAgICAgICAgICAgICAgX3RoaXM0LnNhdmVNYXBEYXRhKGNvbW1hbmQpOwogICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTMpOwogICAgICB9KSkoKTsKICAgIH0sCiAgICBzYXZlTWFwRGF0YTogZnVuY3Rpb24gc2F2ZU1hcERhdGEoY29tbWFuZCkgewogICAgICB2YXIgX3RoaXM1ID0gdGhpczsKICAgICAgZGVidWdnZXI7CiAgICAgIHRoaXMuZ2V0TWluZERhdGEoKTsKICAgICAgdmFyIHJlYXNvbkxpc3QgPSB0aGlzLm1pbmREYXRhLmRhdGEubWFwKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGlkOiBpdGVtLmlkLAogICAgICAgICAgbmFtZTogaXRlbS50b3BpYywKICAgICAgICAgIGxldmVsOiBpdGVtLmxldmVsLAogICAgICAgICAgcmVsYXRpb25Db250ZW50OiBpdGVtLnJlbGF0aW9uQ29udGVudCwKICAgICAgICAgIGNvbnRlbnQ6IGl0ZW0uY29udGVudCwKICAgICAgICAgIGJhY2tncm91bmQ6IGl0ZW1bJ2JhY2tncm91bmQtY29sb3InXSwKICAgICAgICAgIGZvbnRDb2xvcjogaXRlbVsnZm9yZWdyb3VuZC1jb2xvciddLAogICAgICAgICAgZm9udFNpemU6IGl0ZW1bJ2ZvbnQtc2l6ZSddLAogICAgICAgICAgZm9udFdldGlnaHQ6IGl0ZW1bJ2ZvbnQtd2VpZ2h0J10sCiAgICAgICAgICBmb250U3R5bGU6IGl0ZW1bJ2ZvbnQtc3R5bGUnXSwKICAgICAgICAgIHRhc2tJZDogX3RoaXM1LnRhc2tEYXRhLmlkLAogICAgICAgICAgcGFyZW50SWQ6IGl0ZW0ucGFyZW50aWQsCiAgICAgICAgICBzbjogaXRlbS5zbgogICAgICAgIH07CiAgICAgIH0pOwogICAgICB2YXIgbmV3RGF0YSA9IHsKICAgICAgICByZWFzb25MaXN0OiByZWFzb25MaXN0LAogICAgICAgIHNhdmVBUzogY29tbWFuZCA9PT0gJ3NhdmVBcycgPyAxIDogMCwKICAgICAgICB2ZXJzaW9uOiB0aGlzLmZpcnN0QWRkIHx8IGNvbW1hbmQgPT09ICdzYXZlQXMnID8gewogICAgICAgICAgdHlwZTogdGhpcy5tYXBUeXBlID09PSAnbXVsdGlUb1NpbmdsZScgPyAyIDogMSwKICAgICAgICAgIHZlcnNpb25Db2RlOiB0aGlzLm5ld1ZlcnNpb24sCiAgICAgICAgICB2ZXJzaW9uTmFtZTogdGhpcy50YXNrRGF0YS5jb2RlICsgJy0nICsgdGhpcy5uZXdWZXJzaW9uLAogICAgICAgICAgdGFza0lkOiB0aGlzLnRhc2tEYXRhLmlkLAogICAgICAgICAgdGFza05hbWU6IHRoaXMudGFza0RhdGEubmFtZSwKICAgICAgICAgIHRhc2tDb2RlOiB0aGlzLnRhc2tEYXRhLmNvZGUKICAgICAgICB9IDogdW5kZWZpbmVkCiAgICAgIH07CiAgICAgIEFQSS5zYXZlQnJhaW5NYXBJbmZvKG5ld0RhdGEpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIGlmIChyZXMuc3RhdGUpIHsKICAgICAgICAgIF90aGlzNS4kbWVzc2FnZS5zdWNjZXNzKCfkv53lrZjmiJDlip8nKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgX3RoaXM1LiRtZXNzYWdlLmVycm9yKCfkv53lrZjlpLHotKUnKTsKICAgICAgICB9CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICBjb25zb2xlLmxvZyhlcnIgfHwgJ+S/neWtmOWksei0pScpOwogICAgICB9KTsKICAgIH0sCiAgICAvLyDojrflj5bmlrDniYjmnKzlj7cKICAgIGdldE5ld1ZlcnNpb246IGZ1bmN0aW9uIGdldE5ld1ZlcnNpb24oKSB7CiAgICAgIHZhciBpZCA9IHRoaXMudGFza0RhdGEuaWQ7CiAgICAgIHZhciBkYXRhID0gbmV3IEZvcm1EYXRhKCk7CiAgICAgIGRhdGEuYXBwZW5kKCd0YXNrSWQnLCBpZCk7CiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7CiAgICAgICAgQVBJLmdldE5ld1ZlcnNpb24oZGF0YSkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICBpZiAocmVzLnZhbHVlICYmIHJlcy5zdGF0ZSkgewogICAgICAgICAgICByZXNvbHZlKHJlcy52YWx1ZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZWplY3QocmVzLm1lc3NhZ2UpOwogICAgICAgICAgfQogICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHsKICAgICAgICAgIHJlamVjdChlcnIpOwogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0sCiAgICAvLyDojrflj5bniYjmnKzliJfooagKICAgIGdldFZlcnNpb25MaXN0OiBmdW5jdGlvbiBnZXRWZXJzaW9uTGlzdCgpIHsKICAgICAgdmFyIF90aGlzNiA9IHRoaXM7CiAgICAgIHZhciBpZCA9IHRoaXMudGFza0RhdGEuaWQ7CiAgICAgIHZhciBxdWVyeSA9IHsKICAgICAgICBwYWdlQmVhbjogewogICAgICAgICAgcGFnZVNpemU6IC0xCiAgICAgICAgfSwKICAgICAgICBxdWVyeXM6IFt7CiAgICAgICAgICBncm91cDogJ21haW4nLAogICAgICAgICAgb3BlcmF0aW9uOiAnRVFVQUwnLAogICAgICAgICAgcHJvcGVydHk6ICd0YXNrSWQnLAogICAgICAgICAgcmVsYXRpb246ICdBTkQnLAogICAgICAgICAgdmFsdWU6IGlkCiAgICAgICAgfV0KICAgICAgfTsKICAgICAgQVBJLmdldEluZmVyZW5jZVZlcnNpb24ocXVlcnkpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIF90aGlzNi52ZXJzaW9uRGF0YSA9IHJlcy5yb3dzIHx8IFtdOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHsKICAgICAgICBfdGhpczYuJG1lc3NhZ2UuZXJyb3IoZXJyb3IgfHwgJ+iOt+WPlueJiOacrOS/oeaBr+Wksei0pe+8gScpOwogICAgICB9KTsKICAgIH0sCiAgICAvLyDojrflj5bmjIfmoIfliJfooagKICAgIGdldFRhcmdldExpc3Q6IGZ1bmN0aW9uIGdldFRhcmdldExpc3QocGFnZSkgewogICAgICB2YXIgX3RoaXM3ID0gdGhpczsKICAgICAgcGFnZSA/IHRoaXMucGFnaW5hdGlvbi5wYWdlID0gcGFnZSA6IG51bGw7CiAgICAgIHZhciBxdWVyeSA9IHsKICAgICAgICBwYWdlQmVhbjogdGhpcy5wYWdpbmF0aW9uLAogICAgICAgIHF1ZXJ5czogW3sKICAgICAgICAgIGdyb3VwOiAnbWFpbicsCiAgICAgICAgICBvcGVyYXRpb246ICdFUVVBTCcsCiAgICAgICAgICBwYXJlbnRHcm91cDogJycsCiAgICAgICAgICBwcm9wZXJ0eTogJ2xldmVsJywKICAgICAgICAgIHJlbGF0aW9uOiAnQU5EJywKICAgICAgICAgIHZhbHVlOiB0aGlzLnNlYXJjaFRhcmdldC50eXBlCiAgICAgICAgfSwgewogICAgICAgICAgZ3JvdXA6ICdtYWluJywKICAgICAgICAgIG9wZXJhdGlvbjogJ0xJS0UnLAogICAgICAgICAgcGFyZW50R3JvdXA6ICcnLAogICAgICAgICAgcHJvcGVydHk6ICduYW1lJywKICAgICAgICAgIHJlbGF0aW9uOiAnQU5EJywKICAgICAgICAgIHZhbHVlOiB0aGlzLnNlYXJjaFRhcmdldC5uYW1lCiAgICAgICAgfV0sCiAgICAgICAgc29ydGVyOiBbewogICAgICAgICAgZGlyZWN0aW9uOiAnQVNDJywKICAgICAgICAgIHByb3BlcnR5OiAnY29kZScKICAgICAgICB9XQogICAgICB9OwogICAgICBBUEkuZ2V0VGFyZ2V0TGlzdChxdWVyeSkudGhlbihmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgX3RoaXM3LnRhcmdldERhdGEgPSByZXMucm93cyB8fCBbXTsKICAgICAgICBfdGhpczcucGFnaW5hdGlvbi50b3RhbCA9IHJlcy50b3RhbCB8fCAwOwogICAgICB9KS5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHsKICAgICAgICBfdGhpczcuJG1lc3NhZ2UuZXJyb3IoZXJyb3IgfHwgJ+iOt+WPluaMh+agh+S/oeaBr+Wksei0pe+8gScpOwogICAgICB9KTsKICAgIH0sCiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBsb2FkTWluZDogZnVuY3Rpb24gbG9hZE1pbmQoKSB7CiAgICAgIHRoaXMuZ2V0TWluZERhdGEoKTsKICAgICAgdGhpcy50b2dnbGVTdHVjdHVyZSh0aGlzLm1hcFR5cGUpOwogICAgICB0aGlzLmptID0gbnVsbDsKICAgICAgdGhpcy5qbSA9IG5ldyBqc01pbmQodGhpcy5vcHRpb25zKTsKICAgICAgY29uc29sZS5sb2codGhpcy5vcHRpb25zLmNvbnRhaW5lciwgdGhpcy5taW5kRGF0YSwgJ2NvbnRhaW5lcicpOwogICAgICB0aGlzLmptLnNob3codGhpcy5taW5kRGF0YSk7CiAgICAgIHRoaXMuZWRpdG9yID0gbnVsbDsKICAgICAgdGhpcy5lZGl0b3IgPSB0aGlzLmptLnZpZXcuZV9lZGl0b3I7CiAgICAgIHRoaXMuaW5pdCgpOwogICAgICB0aGlzLm1vdXNlV2hlZWwoKTsKICAgICAgdGhpcy5tb3VzZURyYWcoKTsKICAgIH0sCiAgICBoYW5kbGVUYWJsZUNoYW5nZTogZnVuY3Rpb24gaGFuZGxlVGFibGVDaGFuZ2UodmFsKSB7CiAgICAgIHZhciB0YXJnZXQgPSB0aGlzLnRhYmxlTGlzdC5maWx0ZXIoZnVuY3Rpb24gKGkpIHsKICAgICAgICByZXR1cm4gaS5pZCA9PT0gdmFsOwogICAgICB9KVswXTsKICAgICAgdGhpcy5hZGRUYXJnZXQudGFibGVOYW1lQ24gPSAodGFyZ2V0ID09PSBudWxsIHx8IHRhcmdldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGFyZ2V0Lm5hbWVDbikgfHwgJyc7CiAgICB9LAogICAgaGFuZGxlRmllbGRDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZUZpZWxkQ2hhbmdlKHZhbCkgewogICAgICB2YXIgdGFyZ2V0ID0gdGhpcy5maWVsZExpc3QuZmlsdGVyKGZ1bmN0aW9uIChpKSB7CiAgICAgICAgcmV0dXJuIGkuaWQgPT09IHZhbDsKICAgICAgfSlbMF07CiAgICAgIHRoaXMuYWRkVGFyZ2V0LmZpZWxkTmFtZUNuID0gKHRhcmdldCA9PT0gbnVsbCB8fCB0YXJnZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRhcmdldC5uYW1lQ24pIHx8ICcnOwogICAgICB0aGlzLmFkZFRhcmdldC5maWVsZFR5cGUgPSAodGFyZ2V0ID09PSBudWxsIHx8IHRhcmdldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGFyZ2V0LnR5cGUpIHx8ICcnOwogICAgICB0aGlzLmFkZFRhcmdldC5maWVsZERpY3QgPSAodGFyZ2V0ID09PSBudWxsIHx8IHRhcmdldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGFyZ2V0LmRpY3QpIHx8IFtdOwogICAgICB0aGlzLmFkZFRhcmdldC5maWVsZERpY3ROYW1lID0gKHRhcmdldCA9PT0gbnVsbCB8fCB0YXJnZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRhcmdldC5kaWN0TmFtZSkgfHwgW107CiAgICB9LAogICAgaGFuZGxlQ3VycmVudENoYW5nZTogZnVuY3Rpb24gaGFuZGxlQ3VycmVudENoYW5nZSh2YWwpIHsKICAgICAgdGhpcy5wYWdpbmF0aW9uLnBhZ2UgPSB2YWw7CiAgICAgIHRoaXMuZ2V0VGFyZ2V0TGlzdCgpOwogICAgfSwKICAgIC8vIOexu+Wei+WIh+aNogogICAgY2hhbmdlTWFwVHlwZTogZnVuY3Rpb24gY2hhbmdlTWFwVHlwZSh0eXBlKSB7CiAgICAgIHRoaXMubWFwVHlwZSA9IHR5cGU7CiAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oJ21hcFR5cGUnLCB0eXBlKTsKICAgICAgbG9jYXRpb24ucmVsb2FkKCk7CiAgICB9LAogICAgaGFuZGxlQ2hhbmdlTWFwVHlwZTogZnVuY3Rpb24gaGFuZGxlQ2hhbmdlTWFwVHlwZSh0eXBlKSB7CiAgICAgIHZhciBfdGhpczggPSB0aGlzOwogICAgICBpZiAodGhpcy5tYXBUeXBlICE9PSB0eXBlKSB7CiAgICAgICAgdGhpcy4kY29uZmlybSgn5YiH5o2i5o6o55CG57G75Z6L5ZCO6ZyA6KaB5Yi35paw6aG16Z2i77yM6K+35YWI5L+d5a2Y5pWw5o2u77yM5piv5ZCm56Gu6K6k5YiH5o2i5o6o55CG57G75Z6L77yfJykudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICBfdGhpczguY2hhbmdlTWFwVHlwZUZuKHR5cGUpOwogICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2YXIgdHlwZU5hbWUgPSB0aGlzLm1hcFR5cGUgPT09ICdzaW5nbGVUb011bHRpJyA/ICfkuIDmjqjlpJonIDogJ+WkmuaOqOS4gCc7CiAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCflvZPliY3mjqjnkIbnsbvlnovlt7LmmK8g44CQJyArIHR5cGVOYW1lICsgJ+OAke+8jOaXoOmcgOWIh+aNoicpOwogICAgICB9CiAgICB9LAogICAgY2hhbmdlTWFwVHlwZUZuOiBmdW5jdGlvbiBjaGFuZ2VNYXBUeXBlRm4odHlwZSkgewogICAgICB0aGlzLm1hcFR5cGUgPSB0eXBlOwogICAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKCdtYXBUeXBlJywgdHlwZSk7CiAgICAgIGxvY2F0aW9uLnJlbG9hZCgpOwogICAgfSwKICAgIGRyYXdBcnJvdzogZnVuY3Rpb24gZHJhd0Fycm93KGN0eCwgc3RhcnRfcG9pbnQsIGVuZF9wb2ludCkgewogICAgICB2YXIgZnJvbVgsIGZyb21ZLCB0b1gsIHRvWTsKICAgICAgZnJvbVggPSBlbmRfcG9pbnQueDsKICAgICAgZnJvbVkgPSBlbmRfcG9pbnQueTsKICAgICAgdG9YID0gc3RhcnRfcG9pbnQueDsKICAgICAgdG9ZID0gc3RhcnRfcG9pbnQueTsKICAgICAgdmFyIHRoZXRhID0gMzAsCiAgICAgICAgaGVhZGxlbiA9IDEyLAogICAgICAgIHdpZHRoID0gMiwKICAgICAgICBjb2xvciA9ICcjNjY2JzsKICAgICAgLy8g6K6h566X55u057q/5Lit54K55Z2Q5qCHCgogICAgICB2YXIgbWlkWCA9IChmcm9tWCArIHRvWCkgLyAyOwogICAgICB2YXIgbWlkWSA9IChmcm9tWSArIHRvWSkgLyAyOwoKICAgICAgLy8g6K6h566X566t5aS06LW354K55ZKM57uI54K555qE5Z2Q5qCHCiAgICAgIHZhciBhbmdsZSA9IE1hdGguYXRhbjIoZnJvbVkgLSB0b1ksIGZyb21YIC0gdG9YKSAqIDE4MCAvIE1hdGguUEk7CiAgICAgIHZhciBhbmdsZTEgPSAoYW5nbGUgKyB0aGV0YSkgKiBNYXRoLlBJIC8gMTgwOwogICAgICB2YXIgYW5nbGUyID0gKGFuZ2xlIC0gdGhldGEpICogTWF0aC5QSSAvIDE4MDsKICAgICAgdmFyIHRvcFggPSBoZWFkbGVuICogTWF0aC5jb3MoYW5nbGUxKTsKICAgICAgdmFyIHRvcFkgPSBoZWFkbGVuICogTWF0aC5zaW4oYW5nbGUxKTsKICAgICAgdmFyIGJvdFggPSBoZWFkbGVuICogTWF0aC5jb3MoYW5nbGUyKTsKICAgICAgdmFyIGJvdFkgPSBoZWFkbGVuICogTWF0aC5zaW4oYW5nbGUyKTsKICAgICAgdmFyIGFycm93WCwgYXJyb3dZOwogICAgICBjdHguYmVnaW5QYXRoKCk7CiAgICAgIGN0eC5tb3ZlVG8oZnJvbVgsIGZyb21ZKTsKICAgICAgY3R4LmxpbmVUbyh0b1gsIHRvWSk7CiAgICAgIC8vY3R4LmJlemllckN1cnZlVG8oc3RhcnRfcG9pbnQueCArICgoZW5kX3BvaW50LnggLSBzdGFydF9wb2ludC54KSAqIDIpIC8gMywgc3RhcnRfcG9pbnQueSwgc3RhcnRfcG9pbnQueCwgZW5kX3BvaW50LnksIGVuZF9wb2ludC54LCBlbmRfcG9pbnQueSk7CgogICAgICBhcnJvd1ggPSBtaWRYICsgdG9wWDsKICAgICAgYXJyb3dZID0gbWlkWSArIHRvcFk7CiAgICAgIGN0eC5tb3ZlVG8oYXJyb3dYLCBhcnJvd1kpOwogICAgICBjdHgubGluZVRvKG1pZFgsIG1pZFkpOwogICAgICBhcnJvd1ggPSBtaWRYICsgYm90WDsKICAgICAgYXJyb3dZID0gbWlkWSArIGJvdFk7CiAgICAgIGN0eC5saW5lVG8oYXJyb3dYLCBhcnJvd1kpOwogICAgICBjdHguc3Ryb2tlU3R5bGUgPSBjb2xvcjsKICAgICAgY3R4LmxpbmVXaWR0aCA9IHdpZHRoOwogICAgICBjdHguc3Ryb2tlKCk7CiAgICB9LAogICAgZHJhd0N1cnZlQXJyb3c6IGZ1bmN0aW9uIGRyYXdDdXJ2ZUFycm93KGN0eCwgc3RhcnRQb2ludCwgZW5kUG9pbnQsIHQpIHsKICAgICAgdmFyIGZyb21YID0gc3RhcnRQb2ludC54OwogICAgICB2YXIgZnJvbVkgPSBzdGFydFBvaW50Lnk7CiAgICAgIHZhciB0b1ggPSBlbmRQb2ludC54OwogICAgICB2YXIgdG9ZID0gZW5kUG9pbnQueTsKICAgICAgdmFyIGNvbnRyb2xQb2ludDFYID0gZnJvbVggKyAodG9YIC0gZnJvbVgpICogMiAvIDM7CiAgICAgIHZhciBjb250cm9sUG9pbnQxWSA9IGZyb21ZOwogICAgICB2YXIgY29udHJvbFBvaW50MlggPSBmcm9tWDsKICAgICAgdmFyIGNvbnRyb2xQb2ludDJZID0gdG9ZOwogICAgICB2YXIgYXJyb3dUaGV0YSA9IDQ1OyAvLyDnrq3lpLTop5LluqbvvIjluqbvvIkKICAgICAgdmFyIGFycm93SGVhZExlbmd0aCA9IDEyOyAvLyDnrq3lpLTplb/luqYKICAgICAgdmFyIGxpbmVXaWR0aCA9IDI7IC8vIOe6v+adoeWuveW6pgogICAgICB2YXIgc3Ryb2tlQ29sb3IgPSAnIzY2Nic7IC8vIOe6v+adoeminOiJsgoKICAgICAgLy8g6K6h566X6LSd5aGe5bCU5puy57q/55qENC8x5aSE55qE54K577yIdCA9IDAuNzXvvIkKICAgICAgLy8gICBjb25zdCB0ID0gMC41OwogICAgICB2YXIgY3VydmVQb2ludFggPSBNYXRoLnBvdygxIC0gdCwgMykgKiBmcm9tWCArIDMgKiBNYXRoLnBvdygxIC0gdCwgMikgKiB0ICogY29udHJvbFBvaW50MVggKyAzICogKDEgLSB0KSAqIE1hdGgucG93KHQsIDIpICogY29udHJvbFBvaW50MlggKyBNYXRoLnBvdyh0LCAzKSAqIHRvWDsKICAgICAgdmFyIGN1cnZlUG9pbnRZID0gTWF0aC5wb3coMSAtIHQsIDMpICogZnJvbVkgKyAzICogTWF0aC5wb3coMSAtIHQsIDIpICogdCAqIGNvbnRyb2xQb2ludDFZICsgMyAqICgxIC0gdCkgKiBNYXRoLnBvdyh0LCAyKSAqIGNvbnRyb2xQb2ludDJZICsgTWF0aC5wb3codCwgMykgKiB0b1k7CgogICAgICAvLyDorqHnrpfmm7Lnur/lnKhjdXJ2ZVBvaW505aSE55qE5pa55ZCR77yI5a+85pWw77yJCiAgICAgIHZhciBkZXJpdmF0aXZlWCA9IC0zICogTWF0aC5wb3coMSAtIHQsIDIpICogZnJvbVggKyAzICogKDMgKiBNYXRoLnBvdygxIC0gdCwgMikgLSA2ICogKDEgLSB0KSAqIHQpICogY29udHJvbFBvaW50MVggKyAzICogKC0zICogKDEgLSB0KSAqIHQgKyAyICogdCAqIHQpICogY29udHJvbFBvaW50MlggKyAzICogTWF0aC5wb3codCwgMikgKiB0b1g7CiAgICAgIHZhciBkZXJpdmF0aXZlWSA9IC0zICogTWF0aC5wb3coMSAtIHQsIDIpICogZnJvbVkgKyAzICogKDMgKiBNYXRoLnBvdygxIC0gdCwgMikgLSA2ICogKDEgLSB0KSAqIHQpICogY29udHJvbFBvaW50MVkgKyAzICogKC0zICogKDEgLSB0KSAqIHQgKyAyICogdCAqIHQpICogY29udHJvbFBvaW50MlkgKyAzICogTWF0aC5wb3codCwgMikgKiB0b1k7CgogICAgICAvLyDorqHnrpfnrq3lpLTnmoTop5LluqYKICAgICAgdmFyIGFuZ2xlID0gTWF0aC5hdGFuMihkZXJpdmF0aXZlWSwgZGVyaXZhdGl2ZVgpOwogICAgICB2YXIgYW5nbGUxID0gKGFuZ2xlICsgYXJyb3dUaGV0YSkgKiBNYXRoLlBJIC8gMTgwOwogICAgICB2YXIgYW5nbGUyID0gKGFuZ2xlIC0gYXJyb3dUaGV0YSkgKiBNYXRoLlBJIC8gMTgwOwogICAgICAvLyAgIGNvbnN0IGFuZ2xlMSA9IGFuZ2xlICsgKGFycm93VGhldGEgKiBNYXRoLlBJKSAvIDE4MDsKICAgICAgLy8gICBjb25zdCBhbmdsZTIgPSBhbmdsZSAtIChhcnJvd1RoZXRhICogTWF0aC5QSSkgLyAxODA7CiAgICAgIC8vICAgY29uc29sZS5sb2coYW5nbGUsIGFuZ2xlMSwgYW5nbGUyLCAnYW5nbGUnKTsKCiAgICAgIC8vIOiuoeeul+eureWktOS4pOS4quWIhuaUr+eahOe7iOeCueWdkOaghwogICAgICB2YXIgdG9wWCA9IHRvWCArIGFycm93SGVhZExlbmd0aCAqIE1hdGguY29zKGFuZ2xlMSk7CiAgICAgIHZhciB0b3BZID0gdG9ZICsgYXJyb3dIZWFkTGVuZ3RoICogTWF0aC5zaW4oYW5nbGUxKTsKICAgICAgdmFyIGJvdFggPSB0b1ggKyBhcnJvd0hlYWRMZW5ndGggKiBNYXRoLmNvcyhhbmdsZTIpOwogICAgICB2YXIgYm90WSA9IHRvWSArIGFycm93SGVhZExlbmd0aCAqIE1hdGguc2luKGFuZ2xlMik7CiAgICAgIGN0eC5iZWdpblBhdGgoKTsKICAgICAgY3R4Lm1vdmVUbyhmcm9tWCwgZnJvbVkpOwogICAgICBjdHguYmV6aWVyQ3VydmVUbyhjb250cm9sUG9pbnQxWCwgY29udHJvbFBvaW50MVksIGNvbnRyb2xQb2ludDJYLCBjb250cm9sUG9pbnQyWSwgdG9YLCB0b1kpOwogICAgICBjdHgubGluZVRvKHRvcFgsIHRvcFkpOwogICAgICBjdHgubW92ZVRvKHRvWCwgdG9ZKTsKICAgICAgY3R4LmxpbmVUbyhib3RYLCBib3RZKTsKICAgICAgY3R4LnN0cm9rZVN0eWxlID0gc3Ryb2tlQ29sb3I7CiAgICAgIGN0eC5saW5lV2lkdGggPSBsaW5lV2lkdGg7CiAgICAgIGN0eC5zdHJva2UoKTsKICAgIH0KICB9LCBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX21ldGhvZHMsICJkcmF3Q3VydmVBcnJvdyIsIGZ1bmN0aW9uIGRyYXdDdXJ2ZUFycm93KGN0eCwgc3RhcnRQb2ludCwgZW5kUG9pbnQpIHsKICAgIHZhciBmcm9tWCA9IHN0YXJ0UG9pbnQueDsKICAgIHZhciBmcm9tWSA9IHN0YXJ0UG9pbnQueTsKICAgIHZhciB0b1ggPSBlbmRQb2ludC54OwogICAgdmFyIHRvWSA9IGVuZFBvaW50Lnk7CiAgICB2YXIgY29udHJvbFBvaW50MVggPSBmcm9tWCArICh0b1ggLSBmcm9tWCkgKiAyIC8gMzsKICAgIHZhciBjb250cm9sUG9pbnQxWSA9IGZyb21ZOwogICAgdmFyIGNvbnRyb2xQb2ludDJYID0gZnJvbVg7CiAgICB2YXIgY29udHJvbFBvaW50MlkgPSB0b1k7CiAgICB2YXIgYXJyb3dUaGV0YSA9IDMwOyAvLyDnrq3lpLTop5LluqbvvIjluqbvvIkKICAgIHZhciBhcnJvd0hlYWRMZW5ndGggPSAxMjsgLy8g566t5aS06ZW/5bqmCiAgICB2YXIgbGluZVdpZHRoID0gMjsgLy8g57q/5p2h5a695bqmCiAgICB2YXIgc3Ryb2tlQ29sb3IgPSAnIzY2Nic7IC8vIOe6v+adoeminOiJsgoKICAgIC8vIOiuoeeul+i0neWhnuWwlOabsue6v+eahOe7k+adn+eCue+8iHQgPSAx77yJCiAgICB2YXIgY3VydmVQb2ludFggPSB0b1g7CiAgICB2YXIgY3VydmVQb2ludFkgPSB0b1k7CgogICAgLy8g6K6h566X5puy57q/5Zyo57uT5p2f54K55aSE55qE5pa55ZCR77yI5a+85pWw77yMdCA9IDHvvIkKICAgIHZhciBkZXJpdmF0aXZlWCA9IDIgKiAodG9YIC0gY29udHJvbFBvaW50MlgpOwogICAgdmFyIGRlcml2YXRpdmVZID0gMiAqICh0b1kgLSBjb250cm9sUG9pbnQyWSk7CgogICAgLy8g6K6h566X566t5aS055qE6KeS5bqmCiAgICB2YXIgYW5nbGUgPSBNYXRoLmF0YW4yKGRlcml2YXRpdmVZLCBkZXJpdmF0aXZlWCk7CiAgICB2YXIgYW5nbGUxID0gYW5nbGUgKyBhcnJvd1RoZXRhICogTWF0aC5QSSAvIDE4MDsKICAgIHZhciBhbmdsZTIgPSBhbmdsZSAtIGFycm93VGhldGEgKiBNYXRoLlBJIC8gMTgwOwoKICAgIC8vIOiuoeeul+eureWktOS4pOS4quWIhuaUr+eahOe7iOeCueWdkOaghwogICAgdmFyIHRvcFggPSB0b1ggLSBhcnJvd0hlYWRMZW5ndGggKiBNYXRoLmNvcyhhbmdsZTEpOwogICAgdmFyIHRvcFkgPSB0b1kgLSBhcnJvd0hlYWRMZW5ndGggKiBNYXRoLnNpbihhbmdsZTEpOwogICAgdmFyIGJvdFggPSB0b1ggLSBhcnJvd0hlYWRMZW5ndGggKiBNYXRoLmNvcyhhbmdsZTIpOwogICAgdmFyIGJvdFkgPSB0b1kgLSBhcnJvd0hlYWRMZW5ndGggKiBNYXRoLnNpbihhbmdsZTIpOwogICAgY3R4LmJlZ2luUGF0aCgpOwogICAgY3R4Lm1vdmVUbyhmcm9tWCwgZnJvbVkpOwogICAgY3R4LmJlemllckN1cnZlVG8oY29udHJvbFBvaW50MVgsIGNvbnRyb2xQb2ludDFZLCBjb250cm9sUG9pbnQyWCwgY29udHJvbFBvaW50MlksIHRvWCwgdG9ZKTsKICAgIGN0eC5saW5lVG8odG9wWCwgdG9wWSk7CiAgICBjdHgubW92ZVRvKHRvWCwgdG9ZKTsKICAgIGN0eC5saW5lVG8oYm90WCwgYm90WSk7CiAgICBjdHguc3Ryb2tlU3R5bGUgPSBzdHJva2VDb2xvcjsKICAgIGN0eC5saW5lV2lkdGggPSBsaW5lV2lkdGg7CiAgICBjdHguc3Ryb2tlKCk7CiAgfSksICJoYW5kbGVDbGlja1RhYiIsIGZ1bmN0aW9uIGhhbmRsZUNsaWNrVGFiKHRhYikgewogICAgaWYgKHRhYi5uYW1lID09PSAnZmlmdGgnKSB7CiAgICAgIHRoaXMuZ2V0VmVyc2lvbkxpc3QoKTsKICAgIH0gZWxzZSBpZiAodGFiLm5hbWUgPT09ICdzZWNvbmQnKSB7CiAgICAgIHRoaXMuZ2V0VGFyZ2V0TGlzdCgxKTsKICAgIH0KICB9KSwgInRvZ2dsZVNpZGVFZGl0b3IiLCBmdW5jdGlvbiB0b2dnbGVTaWRlRWRpdG9yKHR5cGUpIHsKICAgIHZhciBfdGhpczkgPSB0aGlzOwogICAgdGhpcy5zaG93U2lkZUVkaXRvciA9IHR5cGUgPT09IHVuZGVmaW5lZCA/ICF0aGlzLnNob3dTaWRlRWRpdG9yIDogdHlwZTsKICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICBfdGhpczkucmVzZXQoKTsKICAgIH0sIDIwMCk7CiAgfSksICJ6b29tT3V0IiwgZnVuY3Rpb24gem9vbU91dCgpIHsKICAgIHRoaXMuam0udmlldy56b29tX291dCgpOwogIH0pLCAiem9vbUluIiwgZnVuY3Rpb24gem9vbUluKCkgewogICAgdGhpcy5qbS52aWV3Lnpvb21faW4oKTsKICB9KSwgInJlc2V0IiwgZnVuY3Rpb24gcmVzZXQoKSB7CiAgICB0aGlzLmptLnJlc2l6ZSgpOwogIH0pLCAiZXhwb3J0SW1hZ2UiLCBmdW5jdGlvbiBleHBvcnRJbWFnZSgpIHsKICAgIHZhciBqbSA9IGpzTWluZC5jdXJyZW50OwogICAgam0uc2hvb3QoKTsKICB9KSwgImxvb3BBcnJheURhdGEiLCBmdW5jdGlvbiBsb29wQXJyYXlEYXRhKGxpc3QsIGNhbGxiYWNrKSB7CiAgICBsaXN0LmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGkpIHsKICAgICAgY2FsbGJhY2soaXRlbSwgaSk7CiAgICB9KTsKICB9KSwgImxvb3BUcmVlRGF0YSIsIGZ1bmN0aW9uIGxvb3BUcmVlRGF0YShsaXN0LCBjYWxsYmFjaykgewogICAgKGZ1bmN0aW9uIGRvT25lRmxvb3IobGlzdCkgewogICAgICBpZiAoQXJyYXkuaXNBcnJheShsaXN0KSkgewogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykgewogICAgICAgICAgdmFyIGl0ZW0gPSBsaXN0W2ldOwogICAgICAgICAgY2FsbGJhY2soaXRlbSwgaSk7CiAgICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbiAmJiBpdGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgZG9PbmVGbG9vcihpdGVtLmNoaWxkcmVuKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0pKGxpc3QpOwogIH0pLCAic3RvcERCY2xpY2siLCBmdW5jdGlvbiBzdG9wREJjbGljaygpIHsKICAgIHZhciBqbW5vZGVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2ptbm9kZScpOwogICAgT2JqZWN0LnZhbHVlcyhqbW5vZGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChqbW5vZGUpIHsKICAgICAgam1ub2RlLm9uZGJsY2xpY2sgPSBmdW5jdGlvbiAoZSkgewogICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICB9OwogICAgfSk7CiAgfSksIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfbWV0aG9kcywgInNob3dUaXAiLCBmdW5jdGlvbiBzaG93VGlwKGV2ZW50KSB7CiAgICB2YXIgX2V2ZW50JGZyb21FbGVtZW50OwogICAgaWYgKHRoaXMuc2hvd1BvcG92ZXIpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5jdXJyZW50TWVtbyA9IChldmVudCA9PT0gbnVsbCB8fCBldmVudCA9PT0gdm9pZCAwIHx8IChfZXZlbnQkZnJvbUVsZW1lbnQgPSBldmVudC5mcm9tRWxlbWVudCkgPT09IG51bGwgfHwgX2V2ZW50JGZyb21FbGVtZW50ID09PSB2b2lkIDAgfHwgKF9ldmVudCRmcm9tRWxlbWVudCA9IF9ldmVudCRmcm9tRWxlbWVudC5jaGlsZHJlblswXSkgPT09IG51bGwgfHwgX2V2ZW50JGZyb21FbGVtZW50ID09PSB2b2lkIDAgfHwgKF9ldmVudCRmcm9tRWxlbWVudCA9IF9ldmVudCRmcm9tRWxlbWVudC5kYXRhc2V0KSA9PT0gbnVsbCB8fCBfZXZlbnQkZnJvbUVsZW1lbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9ldmVudCRmcm9tRWxlbWVudC5jb250ZW50KSB8fCAnJzsKICAgIHZhciBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb21tb24tdGlwJyk7CiAgICB2YXIgd2lkdGggPSBwYXJzZUZsb2F0KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKS53aWR0aCk7CiAgICB2YXIgaGVpZ2h0ID0gcGFyc2VGbG9hdCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCkuaGVpZ2h0KSAqIDMgKyAxMjsKICAgIHZhciB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7CiAgICB2YXIgd2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDsKICAgIC8vIOaegemZkOS9jee9riDpgb/lhY3otornlYwKICAgIGlmIChldmVudC5jbGllbnRZICsgaGVpZ2h0ID4gd2luZG93SGVpZ2h0KSB7CiAgICAgIHRoaXMudGlwU3R5bGUubGVmdCA9IGV2ZW50LmNsaWVudFggKyAncHgnOwogICAgICB0aGlzLnRpcFN0eWxlLnRvcCA9ICd1bnNldCc7CiAgICAgIHRoaXMudGlwU3R5bGUuYm90dG9tID0gMDsKICAgIH0gZWxzZSBpZiAoZXZlbnQuY2xpZW50WCArIHdpZHRoID4gd2luZG93V2lkdGgpIHsKICAgICAgdGhpcy50aXBTdHlsZS50b3AgPSBldmVudC5jbGllbnRZICsgJ3B4JzsKICAgICAgdGhpcy50aXBTdHlsZS5sZWZ0ID0gJ3Vuc2V0JzsKICAgICAgdGhpcy50aXBTdHlsZS5yaWdodCA9IDA7CiAgICB9IGVsc2UgewogICAgICB0aGlzLnRpcFN0eWxlLmxlZnQgPSBldmVudC5jbGllbnRYICsgJ3B4JzsKICAgICAgdGhpcy50aXBTdHlsZS50b3AgPSBldmVudC5jbGllbnRZICsgJ3B4JzsKICAgICAgdGhpcy50aXBTdHlsZS5ib3R0b20gPSAndW5zZXQnOwogICAgfQogICAgaWYgKHRoaXMuY3VycmVudE1lbW8pIHsKICAgICAgdGhpcy5zaG93UG9wb3ZlciA9IHRydWU7CiAgICB9CiAgfSksICJoaWRlVGlwIiwgZnVuY3Rpb24gaGlkZVRpcCgpIHsKICAgIHRoaXMuY3VycmVudE1lbW8gPSAnJzsKICAgIHRoaXMuc2hvd1BvcG92ZXIgPSBmYWxzZTsKICB9KSwgInRpcHNDbGljayIsIGZ1bmN0aW9uIHRpcHNDbGljaygpIHsKICAgIHZhciBfdGhpczEwID0gdGhpczsKICAgIHZhciB0aXBzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgndGlwLWljb24gc2hvd1RpcCcpOwogICAgT2JqZWN0LnZhbHVlcyh0aXBzKS5mb3JFYWNoKGZ1bmN0aW9uICh0aXApIHsKICAgICAgdGlwLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlb3ZlcicsIF90aGlzMTAuc2hvd1RpcCk7CiAgICAgIHRpcC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBfdGhpczEwLnNob3dUaXApOwogICAgfSk7CiAgICBPYmplY3QudmFsdWVzKHRpcHMpLmZvckVhY2goZnVuY3Rpb24gKHRpcCkgewogICAgICB0aXAucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIF90aGlzMTAuaGlkZVRpcCk7CiAgICAgIHRpcC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgX3RoaXMxMC5oaWRlVGlwKTsKICAgIH0pOwogIH0pLCAicmlnaHRDbGlja01lbnUiLCBmdW5jdGlvbiByaWdodENsaWNrTWVudSgpIHsKICAgIHZhciBfdGhpczExID0gdGhpczsKICAgIC8vIOWPs+mUruiPnOWNlQogICAgdGhpcy5qbS52aWV3LmFkZF9ldmVudCh0aGlzLmVkaXRvciwgJ2NvbnRleHRtZW51JywgZnVuY3Rpb24gKGUpIHsKICAgICAgdmFyIHNlbGVjdGVkTm9kZSA9IF90aGlzMTEuam0uZ2V0X3NlbGVjdGVkX25vZGUoKTsKICAgICAgaWYgKHNlbGVjdGVkTm9kZSkgewogICAgICAgIF90aGlzMTEuaXNyb290ID0gc2VsZWN0ZWROb2RlLmlkID09PSAncm9vdCc7CiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHZhciBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5jb250ZXh0LW1lbnUgLmVsLW1lbnUtaXRlbScpOwogICAgICAgIHZhciBtZW51ID0gX3RoaXMxMS4kcmVmcy5jb250ZXh0LiRlbDsKCiAgICAgICAgLy8gICBjb25zdCB3aWR0aCA9IHBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLndpZHRoKTsKICAgICAgICAvLyAgIGNvbnN0IGhlaWdodCA9IHBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpLmhlaWdodCkgKiAzICsgMTI7CiAgICAgICAgdmFyIHdpZHRoID0gcGFyc2VGbG9hdChtZW51Lm9mZnNldFdpZHRoKTsKICAgICAgICB2YXIgaGVpZ2h0ID0gcGFyc2VGbG9hdChtZW51Lm9mZnNldEhlaWdodCkgKiAyICsgMTI7CiAgICAgICAgdmFyIHdpbmRvd0hlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDsKICAgICAgICB2YXIgd2luZG93V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDsKCiAgICAgICAgLy8g5p6B6ZmQ5L2N572uIOmBv+WFjei2iueVjAogICAgICAgIGlmIChlLmNsaWVudFkgKyBoZWlnaHQgPiB3aW5kb3dIZWlnaHQpIHsKICAgICAgICAgIF90aGlzMTEubWVudVN0eWxlLmxlZnQgPSBlLmNsaWVudFggKyAncHgnOwogICAgICAgICAgX3RoaXMxMS5tZW51U3R5bGUudG9wID0gJ3Vuc2V0JzsKICAgICAgICAgIF90aGlzMTEubWVudVN0eWxlLmJvdHRvbSA9IDA7CiAgICAgICAgfSBlbHNlIGlmIChlLmNsaWVudFggKyB3aWR0aCA+IHdpbmRvd1dpZHRoKSB7CiAgICAgICAgICBfdGhpczExLm1lbnVTdHlsZS50b3AgPSBlLmNsaWVudFkgKyAncHgnOwogICAgICAgICAgX3RoaXMxMS5tZW51U3R5bGUubGVmdCA9ICd1bnNldCc7CiAgICAgICAgICBfdGhpczExLm1lbnVTdHlsZS5yaWdodCA9IDA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90aGlzMTEubWVudVN0eWxlLmxlZnQgPSBlLmNsaWVudFggKyAyMCArICdweCc7CiAgICAgICAgICBfdGhpczExLm1lbnVTdHlsZS50b3AgPSBlLmNsaWVudFkgKyAyMCArICdweCc7CiAgICAgICAgICBfdGhpczExLm1lbnVTdHlsZS5ib3R0b20gPSAndW5zZXQnOwogICAgICAgIH0KICAgICAgICBfdGhpczExLnNob3dNZW51ID0gdHJ1ZTsKICAgICAgfSBlbHNlIHsKICAgICAgICBfdGhpczExLnNob3dNZW51ID0gZmFsc2U7CiAgICAgIH0KICAgIH0pOwogIH0pLCAiaW5pdCIsIGZ1bmN0aW9uIGluaXQoKSB7CiAgICB0aGlzLmptLmV4cGFuZF9hbGwoKTsKICAgIHRoaXMuc3RvcERCY2xpY2soKTsKICAgIHRoaXMudGlwc0NsaWNrKCk7CiAgICB0aGlzLnJpZ2h0Q2xpY2tNZW51KCk7CiAgfSksICJnZXRfc2VsZWN0ZWRfbm9kZWlkIiwgZnVuY3Rpb24gZ2V0X3NlbGVjdGVkX25vZGVpZCgpIHsKICAgIHZhciBzZWxlY3RlZE5vZGUgPSB0aGlzLmptLmdldF9zZWxlY3RlZF9ub2RlKCk7CiAgICBpZiAoc2VsZWN0ZWROb2RlKSB7CiAgICAgIHJldHVybiBzZWxlY3RlZE5vZGUuaWQ7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9KSwgInRvZ2dsZVN0dWN0dXJlIiwgZnVuY3Rpb24gdG9nZ2xlU3R1Y3R1cmUodHlwZSkgewogICAgaWYgKHRoaXMuc3RydWN0dXJlLmFjdGl2ZSA9PT0gdHlwZSkgcmV0dXJuOwogICAgdGhpcy5zdHJ1Y3R1cmUuYWN0aXZlID0gdHlwZTsKICAgIHN3aXRjaCAodHlwZSkgewogICAgICBjYXNlICdzaWRlJzoKICAgICAgICAvLyDkuKTovrnliIbluIMKICAgICAgICB0aGlzLmxvb3BBcnJheURhdGEodGhpcy5taW5kRGF0YS5kYXRhLCBmdW5jdGlvbiAoaXRlbSwgaSkgewogICAgICAgICAgaXRlbS5kaXJlY3Rpb24gPSBpICUgMiA/ICdsZWZ0JyA6ICdyaWdodCc7CiAgICAgICAgfSk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgJ211bHRpVG9TaW5nbGUnOgogICAgICAgIC8vIOWQkeW3puWIhuW4gwogICAgICAgIHRoaXMubG9vcEFycmF5RGF0YSh0aGlzLm1pbmREYXRhLmRhdGEsIGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICBpdGVtLmRpcmVjdGlvbiA9ICdsZWZ0JzsKICAgICAgICB9KTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAnc2luZ2xlVG9NdWx0aSc6CiAgICAgICAgLy8g5ZCR5Y+z5YiG5biDCiAgICAgICAgdGhpcy5sb29wQXJyYXlEYXRhKHRoaXMubWluZERhdGEuZGF0YSwgZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgIGl0ZW0uZGlyZWN0aW9uID0gJ3JpZ2h0JzsKICAgICAgICB9KTsKICAgICAgICBicmVhazsKICAgICAgZGVmYXVsdDoKICAgICAgICBicmVhazsKICAgIH0KICB9KSwgImhhbmRsZURyb3AiLCBmdW5jdGlvbiBoYW5kbGVEcm9wKGRyYWdnaW5nTm9kZSwgZHJvcE5vZGUpIHsKICAgIC8vIOWJjeS4gOS4quWFhOW8n+iKgueCuQogICAgdmFyIHByZXZOb2RlID0gdGhpcy5qbS5maW5kX25vZGVfYmVmb3JlKGRyb3BOb2RlKTsKICAgIC8vIOiOt+WPluenu+WKqOWQjueahG5vZGUKICAgIHZhciBkcmFnRm9ybSA9IHsKICAgICAgbW9kZWxJZDogJycsCiAgICAgIHRyZWVOdW06ICFwcmV2Tm9kZSA/IGRyYWdnaW5nTm9kZSA6IHByZXZOb2RlLmlkLAogICAgICB0aGlzVHJlZU51bTogZHJvcE5vZGUKICAgIH07CiAgICBjb25zb2xlLmxvZygnZHJhZ0Zvcm0nLCBkcmFnRm9ybSk7CgogICAgLy8gVE9ETyDosIPmjqXlj6MKICB9KSwgIm5vZGVDbGljayIsIGZ1bmN0aW9uIG5vZGVDbGljaygpIHsKICAgIHRoaXMuc2hvd01lbnUgPSBmYWxzZTsKICAgIHZhciBzZWxlY3RlZE5vZGUgPSB0aGlzLmptLmdldF9zZWxlY3RlZF9ub2RlKCk7CiAgICBpZiAoc2VsZWN0ZWROb2RlKSB7CiAgICAgIGNvbnNvbGUubG9nKCdzZWxlY3RlZE5vZGUnLCBzZWxlY3RlZE5vZGUpOwogICAgICB0aGlzLmN1cnJlbnROb2RlID0gc2VsZWN0ZWROb2RlOwogICAgICB0aGlzLmFkZFRhcmdldC50b3BpYyA9IHRoaXMuY3VycmVudE5vZGUudG9waWMgfHwgJyc7CiAgICAgIHRoaXMudG9nZ2xlU2lkZUVkaXRvcih0cnVlKTsKICAgIH0KICB9KSwgIm5vZGVQcmV2ZW50Q2xpY2siLCBmdW5jdGlvbiBub2RlUHJldmVudENsaWNrKCkge30pLCBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX21ldGhvZHMsICJjaGFuZ2VOb2RlVG9waWMiLCBmdW5jdGlvbiBjaGFuZ2VOb2RlVG9waWModmFsKSB7CiAgICBpZiAodmFsKSB7CiAgICAgIHRoaXMuam0udXBkYXRlX25vZGUodGhpcy5jdXJyZW50Tm9kZS5pZCwgdmFsKTsKICAgICAgdGhpcy50aXBzQ2xpY2soKTsKICAgICAgdGhpcy5zdG9wREJjbGljaygpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcign6K+36L6T5YWl6IqC54K55qCH6aKYJyk7CiAgICB9CiAgfSksICJjaGFuZ2VGb250V2VpZ2h0IiwgZnVuY3Rpb24gY2hhbmdlRm9udFdlaWdodCgpIHsKICAgIHZhciBfdGhpcyRjdXJyZW50Tm9kZTsKICAgIHZhciBmb250V2VpZ2h0ID0gKChfdGhpcyRjdXJyZW50Tm9kZSA9IHRoaXMuY3VycmVudE5vZGUpID09PSBudWxsIHx8IF90aGlzJGN1cnJlbnROb2RlID09PSB2b2lkIDAgfHwgKF90aGlzJGN1cnJlbnROb2RlID0gX3RoaXMkY3VycmVudE5vZGUuZGF0YSkgPT09IG51bGwgfHwgX3RoaXMkY3VycmVudE5vZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGN1cnJlbnROb2RlWydmb250LXdlaWdodCddKSA9PT0gJ2JvbGQnID8gJ25vcm1hbCcgOiAnYm9sZCc7CiAgICB0aGlzLmptLnNldF9ub2RlX2ZvbnRfc3R5bGUodGhpcy5jdXJyZW50Tm9kZS5pZCwgbnVsbCwgZm9udFdlaWdodCwgbnVsbCk7CiAgICB2YXIgZGF0YSA9IHRoaXMuY3VycmVudE5vZGUuZGF0YSB8fCB7fTsKICAgIGRhdGFbJ2ZvbnQtd2VpZ2h0J10gPSBmb250V2VpZ2h0OwogICAgdGhpcy4kc2V0KHRoaXMuY3VycmVudE5vZGUsICdkYXRhJywgZGF0YSk7CiAgICBjb25zb2xlLmxvZyh0aGlzLmN1cnJlbnROb2RlKTsKICAgIHRoaXMuJGZvcmNlVXBkYXRlKCk7CiAgfSksICJjaGFuZ2VGb250U3R5bGUiLCBmdW5jdGlvbiBjaGFuZ2VGb250U3R5bGUoKSB7CiAgICB2YXIgX3RoaXMkY3VycmVudE5vZGUyOwogICAgdmFyIGZvbnRTdHlsZSA9ICgoX3RoaXMkY3VycmVudE5vZGUyID0gdGhpcy5jdXJyZW50Tm9kZSkgPT09IG51bGwgfHwgX3RoaXMkY3VycmVudE5vZGUyID09PSB2b2lkIDAgfHwgKF90aGlzJGN1cnJlbnROb2RlMiA9IF90aGlzJGN1cnJlbnROb2RlMi5kYXRhKSA9PT0gbnVsbCB8fCBfdGhpcyRjdXJyZW50Tm9kZTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzJGN1cnJlbnROb2RlMlsnZm9udC1zdHlsZSddKSA9PT0gJ2l0YWxpYycgPyAnbm9ybWFsJyA6ICdpdGFsaWMnOwogICAgdGhpcy5qbS5zZXRfbm9kZV9mb250X3N0eWxlKHRoaXMuY3VycmVudE5vZGUuaWQsIG51bGwsIG51bGwsIGZvbnRTdHlsZSk7CiAgICB2YXIgZGF0YSA9IHRoaXMuY3VycmVudE5vZGUuZGF0YSB8fCB7fTsKICAgIGRhdGFbJ2ZvbnQtc3R5bGUnXSA9IGZvbnRTdHlsZTsKICAgIHRoaXMuJHNldCh0aGlzLmN1cnJlbnROb2RlLCAnZGF0YScsIGRhdGEpOwogICAgdGhpcy4kZm9yY2VVcGRhdGUoKTsKICB9KSwgImNoYW5nZVRleHRTaXplIiwgZnVuY3Rpb24gY2hhbmdlVGV4dFNpemUodmFsKSB7CiAgICBpZiAodmFsKSB7CiAgICAgIHRoaXMuam0uc2V0X25vZGVfZm9udF9zdHlsZSh0aGlzLmN1cnJlbnROb2RlLmlkLCB2YWwsIG51bGwsIG51bGwpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcign6K+36YCJ5oup5a2X5L2T5aSn5bCPJyk7CiAgICB9CiAgfSksICJjaGFuZ2VUZXh0Q29sb3IiLCBmdW5jdGlvbiBjaGFuZ2VUZXh0Q29sb3IodmFsKSB7CiAgICBpZiAodmFsKSB7CiAgICAgIHRoaXMuam0uc2V0X25vZGVfY29sb3IodGhpcy5jdXJyZW50Tm9kZS5pZCwgbnVsbCwgdmFsKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+ivt+mAieaLqeaWh+Wtl+minOiJsicpOwogICAgfQogIH0pLCAiY2hhbmdlTm9kZUNvbG9yIiwgZnVuY3Rpb24gY2hhbmdlTm9kZUNvbG9yKHZhbCkgewogICAgaWYgKHZhbCkgewogICAgICB0aGlzLmptLnNldF9ub2RlX2NvbG9yKHRoaXMuY3VycmVudE5vZGUuaWQsIHZhbCwgbnVsbCk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKCfor7fpgInmi6nog4zmma/popzoibInKTsKICAgIH0KICB9KSwgImNoYW5nZU5vZGVNZW1vIiwgZnVuY3Rpb24gY2hhbmdlTm9kZU1lbW8odmFsLCBpZCkgewogICAgaWYgKHZhbCkgewogICAgICB0aGlzLmxvb3BBcnJheURhdGEodGhpcy5taW5kRGF0YS5kYXRhLCBmdW5jdGlvbiAoaXRlbSwgaSkgewogICAgICAgIGlmIChpdGVtLmlkID09PSBpZCkgewogICAgICAgICAgaXRlbS5jb250ZW50ID0gdmFsOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMuam0uc2hvdyh0aGlzLm1pbmREYXRhKTsKICAgICAgdGhpcy5zdG9wREJjbGljaygpOwogICAgICB0aGlzLnRpcHNDbGljaygpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy4kbWVzc2FnZS5lcnJvcign6K+36L6T5YWl6IqC54K56K6h566X5YWs5byPJyk7CiAgICB9CiAgfSksICJjaGFuZ2VOb2RlUmVsYXRpb24iLCBmdW5jdGlvbiBjaGFuZ2VOb2RlUmVsYXRpb24odmFsLCBpZCkgewogICAgaWYgKHZhbCkgewogICAgICB0aGlzLmxvb3BBcnJheURhdGEodGhpcy5taW5kRGF0YS5kYXRhLCBmdW5jdGlvbiAoaXRlbSwgaSkgewogICAgICAgIGlmIChpdGVtLmlkID09PSBpZCkgewogICAgICAgICAgaXRlbS5yZWxhdGlvbkNvbnRlbnQgPSB2YWw7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5qbS5zaG93KHRoaXMubWluZERhdGEpOwogICAgICB0aGlzLnN0b3BEQmNsaWNrKCk7CiAgICAgIHRoaXMudGlwc0NsaWNrKCk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKCfor7fovpPlhaXlhbPns7vmj4/ov7AnKTsKICAgIH0KICB9KSwgImltcG9ydENoaWxkIiwgZnVuY3Rpb24gaW1wb3J0Q2hpbGQoKSB7fSksICJhZGRDaGlsZCIsIGZ1bmN0aW9uIGFkZENoaWxkKCkgewogICAgdmFyIHNlbGVjdGVkTm9kZSA9IHRoaXMuam0uZ2V0X3NlbGVjdGVkX25vZGUoKTsKICAgIGlmIChzZWxlY3RlZE5vZGUpIHsKICAgICAgdmFyIGlkID0gdXRpbHMudXVpZCgpOwogICAgICB0aGlzLmptLmFkZF9ub2RlKHNlbGVjdGVkTm9kZSwgaWQsICfmlrDlop7oioLngrknLCB7CiAgICAgICAgbGV2ZWw6IHNlbGVjdGVkTm9kZS5kYXRhLmxldmVsICsgMSwKICAgICAgICAnZm9udC1zaXplJzogMTYsCiAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBzZWxlY3RlZE5vZGUuZGF0YS5sZXZlbCArIDEgPiB0aGlzLnByZWRlZmluZUNvbG9ycy5sZW5ndGggPyB0aGlzLnByZWRlZmluZUNvbG9yc1sxXSA6IHRoaXMucHJlZGVmaW5lQ29sb3JzW3NlbGVjdGVkTm9kZS5kYXRhLmxldmVsICsgMV0KICAgICAgfSk7CiAgICAgIHRoaXMuZ2V0TWluZERhdGEoKTsKICAgICAgdGhpcy5qbS5zZWxlY3Rfbm9kZShpZCk7CiAgICAgIHRoaXMuc3RvcERCY2xpY2soKTsKICAgICAgdGhpcy5ub2RlQ2xpY2soKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+ivt+mAieaLqeeItuiKgueCuScpOwogICAgfQogICAgdGhpcy5zaG93TWVudSA9IGZhbHNlOwogIH0pLCBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX21ldGhvZHMsICJhZGRDaGlsZEJ5VGFyZ2V0IiwgZnVuY3Rpb24gYWRkQ2hpbGRCeVRhcmdldChyb3cpIHsKICAgIHZhciBzZWxlY3RlZE5vZGUgPSB0aGlzLmptLmdldF9zZWxlY3RlZF9ub2RlKCk7CiAgICBpZiAoc2VsZWN0ZWROb2RlKSB7CiAgICAgIHZhciBpZCA9IHV0aWxzLnV1aWQoKTsKICAgICAgdGhpcy5qbS5hZGRfbm9kZShzZWxlY3RlZE5vZGUsIGlkLCByb3cubmFtZSwgewogICAgICAgIGxldmVsOiBzZWxlY3RlZE5vZGUuZGF0YS5sZXZlbCArIDEsCiAgICAgICAgY29kZTogcm93LmNvZGUsCiAgICAgICAgaW5kZXhUeXBlOiByb3cubGV2ZWwsCiAgICAgICAgJ2ZvbnQtc2l6ZSc6IDE2LAogICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogc2VsZWN0ZWROb2RlLmRhdGEubGV2ZWwgKyAxID4gdGhpcy5wcmVkZWZpbmVDb2xvcnMubGVuZ3RoID8gdGhpcy5wcmVkZWZpbmVDb2xvcnNbMV0gOiB0aGlzLnByZWRlZmluZUNvbG9yc1tzZWxlY3RlZE5vZGUuZGF0YS5sZXZlbCArIDFdCiAgICAgIH0pOwogICAgICB0aGlzLmdldE1pbmREYXRhKCk7CiAgICAgIHRoaXMuam0uc2VsZWN0X25vZGUoaWQpOwogICAgICB0aGlzLnN0b3BEQmNsaWNrKCk7CiAgICAgIHRoaXMubm9kZUNsaWNrKCk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLiRtZXNzYWdlLmVycm9yKCfor7fpgInmi6nniLboioLngrknKTsKICAgIH0KICB9KSwgImRlbENhcmQiLCBmdW5jdGlvbiBkZWxDYXJkKCkgewogICAgdmFyIHNlbGVjdGVkTm9kZSA9IHRoaXMuam0uZ2V0X3NlbGVjdGVkX25vZGUoKTsKICAgIGlmIChzZWxlY3RlZE5vZGUuZGF0YSkgewogICAgICB0aGlzLmptLnJlbW92ZV9ub2RlKHNlbGVjdGVkTm9kZS5pZCk7CiAgICAgIHRoaXMuZ2V0TWluZERhdGEoKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuJG1lc3NhZ2UuZXJyb3IoJ+ivt+mAieaLqeiKgueCuScpOwogICAgfQogICAgdGhpcy5zaG93TWVudSA9IGZhbHNlOwogIH0pLCAiZ2V0TWluZERhdGEiLCBmdW5jdGlvbiBnZXRNaW5kRGF0YSgpIHsKICAgIGlmICh0aGlzLmptKSB7CiAgICAgIHRoaXMubWluZERhdGEgPSB0aGlzLmptLmdldF9kYXRhKCdub2RlX2FycmF5Jyk7CiAgICAgIGNvbnNvbGUubG9nKHRoaXMubWluZERhdGEsICd0aGlzLmRhdGFVcGRhdGEnKTsKICAgIH0KICB9KSwgIm1vdXNlV2hlZWwiLCBmdW5jdGlvbiBtb3VzZVdoZWVsKCkgewogICAgaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignZG9tTW91c2VTY3JvbGwnLCB0aGlzLnNjcm9sbEZ1bmMsIGZhbHNlKTsKICAgIH0KICAgIHRoaXMuJHJlZnMuY29udGFpbmVyLm9ubW91c2V3aGVlbCA9IHRoaXMuc2Nyb2xsRnVuYzsKICB9KSwgInNjcm9sbEZ1bmMiLCBmdW5jdGlvbiBzY3JvbGxGdW5jKGUpIHsKICAgIHRoaXMuc2hvd01lbnUgPSBmYWxzZTsKICAgIGUgPSBlIHx8IHdpbmRvdy5ldmVudDsKICAgIGlmIChlLndoZWVsRGVsdGEpIHsKICAgICAgaWYgKGUud2hlZWxEZWx0YSA+IDApIHsKICAgICAgICB0aGlzLnpvb21JbigpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuem9vbU91dCgpOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGUuZGV0YWlsKSB7CiAgICAgIGlmIChlLmRldGFpbCA+IDApIHsKICAgICAgICB0aGlzLnpvb21JbigpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuem9vbU91dCgpOwogICAgICB9CiAgICB9CiAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICB0aGlzLmptLnJlc2l6ZSgpOwogIH0pLCAibW91c2VEcmFnIiwgZnVuY3Rpb24gbW91c2VEcmFnKCkgewogICAgdmFyIF90aGlzMTIgPSB0aGlzOwogICAgLy8g6YeM5bGCCiAgICB2YXIgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuanNtaW5kLWlubmVyJyk7CiAgICAvLyDpgInkuK3oioLngrkKICAgIHZhciBzZWxlY3RlZDsKICAgIGVsLm9ubW91c2Vkb3duID0gZnVuY3Rpb24gKGV2KSB7CiAgICAgIC8vIOmAieS4reiKgueCuQogICAgICBzZWxlY3RlZCA9IF90aGlzMTIuam0uZ2V0X3NlbGVjdGVkX25vZGUoKTsKICAgICAgLy8g5qCH6K+GIOaYr+WQpuaLluaLveiKgueCuSDpgb/lhY3lhrLnqoEKICAgICAgX3RoaXMxMi5kcmFnTm9kZUZsYWcgPSAhIXNlbGVjdGVkOwogICAgICB2YXIgZGlzWCA9IGV2LmNsaWVudFg7CiAgICAgIHZhciBkaXNZID0gZXYuY2xpZW50WTsKICAgICAgdmFyIG9yaWdpbmFsU2Nyb2xsTGVmdCA9IGVsLnNjcm9sbExlZnQ7CiAgICAgIHZhciBvcmlnaW5hbFNjcm9sbFRvcCA9IGVsLnNjcm9sbFRvcDsKICAgICAgdmFyIG9yaWdpbmFsU2Nyb2xsQmVoYXZpb3IgPSBlbC5zdHlsZVsnc2Nyb2xsLWJlaGF2aW9yJ107CiAgICAgIHZhciBvcmlnaW5hbFBvaW50ZXJFdmVudHMgPSBlbC5zdHlsZVsncG9pbnRlci1ldmVudHMnXTsKICAgICAgLy8gYXV0bzog6buY6K6k5YC877yM6KGo56S65rua5Yqo5qGG56uL5Y2z5rua5Yqo5Yiw5oyH5a6a5L2N572u44CCCiAgICAgIGVsLnN0eWxlWydzY3JvbGwtYmVoYXZpb3InXSA9ICdhdXRvJzsKICAgICAgLy8g6byg5qCH56e75Yqo5LqL5Lu25piv55uR5ZCs55qE5pW05LiqZG9jdW1lbnTvvIzov5nmoLflj6/ku6Xkvb/pvKDmoIfog73lpJ/lnKjlhYPntKDlpJbpg6jnp7vliqjnmoTml7blgJnkuZ/og73lrp7njrDmi5bliqgKICAgICAgZG9jdW1lbnQub25tb3VzZW1vdmUgPSBmdW5jdGlvbiAoZXYpIHsKICAgICAgICBpZiAoX3RoaXMxMi5kcmFnTm9kZUZsYWcpIHJldHVybjsKICAgICAgICBfdGhpczEyLmRyYWcgPSBmYWxzZTsKICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIC8vIOiuoeeul+aLluaLveeahOWBj+enu+i3neemuwogICAgICAgIHZhciBkaXN0YW5jZVggPSBldi5jbGllbnRYIC0gZGlzWDsKICAgICAgICB2YXIgZGlzdGFuY2VZID0gZXYuY2xpZW50WSAtIGRpc1k7CiAgICAgICAgZWwuc2Nyb2xsVG8ob3JpZ2luYWxTY3JvbGxMZWZ0IC0gZGlzdGFuY2VYLCBvcmlnaW5hbFNjcm9sbFRvcCAtIGRpc3RhbmNlWSk7CgogICAgICAgIC8vIOWcqOm8oOagh+aLluWKqOeahOaXtuWAmeWwhueCueWHu+S6i+S7tuWxj+iUveaOiQogICAgICAgIGVsLnN0eWxlWydwb2ludGVyLWV2ZW50cyddID0gJ25vbmUnOwogICAgICAgIGVsLnN0eWxlLmN1cnNvciA9ICdncmFiYmluZyc7CiAgICAgIH07CiAgICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9IGZ1bmN0aW9uICgpIHsKICAgICAgICBpZiAoIV90aGlzMTIuZHJhZ05vZGVGbGFnKSB7CiAgICAgICAgICBlbC5zdHlsZVsnc2Nyb2xsLWJlaGF2aW9yJ10gPSBvcmlnaW5hbFNjcm9sbEJlaGF2aW9yOwogICAgICAgICAgZWwuc3R5bGVbJ3BvaW50ZXItZXZlbnRzJ10gPSBvcmlnaW5hbFBvaW50ZXJFdmVudHM7CiAgICAgICAgICBlbC5zdHlsZS5jdXJzb3IgPSAnZ3JhYic7CiAgICAgICAgfQogICAgICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZG9jdW1lbnQub25tb3VzZXVwID0gbnVsbDsKICAgICAgfTsKICAgIH07CiAgfSksICJzYXZlIiwgZnVuY3Rpb24gc2F2ZSgpIHt9KSwgImhhbmRsZVZlcnNpb25DaGFuZ2UiLCBmdW5jdGlvbiBoYW5kbGVWZXJzaW9uQ2hhbmdlKHJvdykgewogICAgdmFyIF90aGlzJHRhc2tEYXRhID0gdGhpcy50YXNrRGF0YSwKICAgICAgaWQgPSBfdGhpcyR0YXNrRGF0YS5pZCwKICAgICAgbmFtZSA9IF90aGlzJHRhc2tEYXRhLm5hbWUsCiAgICAgIGNvZGUgPSBfdGhpcyR0YXNrRGF0YS5jb2RlOwogICAgLy8g5omT5byA5paw55qE6aG16Z2iIOWIsCBocmVmIOi/meS4qumhtemdogogICAgdmFyIGhyZWYgPSB0aGlzLiRyb3V0ZXIucmVzb2x2ZSh7CiAgICAgIHBhdGg6ICcvYXJpdGhtZXRpY01hbmFnZS9hcml0aG1ldGljVGFzay9taW5kTWFwUGFnZScsCiAgICAgIHF1ZXJ5OiB7CiAgICAgICAgaWQ6IGlkLAogICAgICAgIG5hbWU6IG5hbWUsCiAgICAgICAgY29kZTogY29kZSwKICAgICAgICB2ZXJzaW9uOiByb3cuaWQKICAgICAgfQogICAgfSkuaHJlZjsKICAgIHdpbmRvdy5vcGVuKGhyZWYsICdfYmxhbmsnKTsKICB9KSwgInRhYmxlUm93Q2xhc3NOYW1lIiwgZnVuY3Rpb24gdGFibGVSb3dDbGFzc05hbWUoX3JlZjMpIHsKICAgIHZhciByb3cgPSBfcmVmMy5yb3csCiAgICAgIHJvd0luZGV4ID0gX3JlZjMucm93SW5kZXg7CiAgICBpZiAocm93LnZlcnNpb25Db2RlID09PSB0aGlzLmN1clZlcnNpb24pIHsKICAgICAgcmV0dXJuICdjdXJyZW50LXJvdyc7CiAgICB9CiAgICByZXR1cm4gJyc7CiAgfSksICJyZWxhdGlvblNlYXJjaCIsIGZ1bmN0aW9uIHJlbGF0aW9uU2VhcmNoKCkgewogICAgLy8g6YCJ5Lit6IqC54K5CiAgICB2YXIgX3RoaXMkam0kZ2V0X3NlbGVjdGVkID0gdGhpcy5qbS5nZXRfc2VsZWN0ZWRfbm9kZSgpLAogICAgICBpZCA9IF90aGlzJGptJGdldF9zZWxlY3RlZC5pZDsKICAgIC8vIOaJk+W8gOaWsOeahOmhtemdoiDliLAgaHJlZiDov5nkuKrpobXpnaIKICAgIHZhciBocmVmID0gdGhpcy4kcm91dGVyLnJlc29sdmUoewogICAgICBwYXRoOiAnL2FyaXRobWV0aWNNYW5hZ2UvYXJpdGhtZXRpY1Rhc2svdGFyZ2V0UmVsYXRpb24nLAogICAgICBxdWVyeTogewogICAgICAgIGlkOiBpZAogICAgICB9CiAgICB9KS5ocmVmOwogICAgd2luZG93Lm9wZW4oaHJlZiwgJ19ibGFuaycpOwogIH0pKSwKICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkgewogICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignZG9tTW91c2VTY3JvbGwnLCB0aGlzLnNjcm9sbEZ1bmMsIGZhbHNlKTsKICB9Cn07"},null]}