c9c51a51024f925aa2be4ed6dc1c63be.json 37 KB

1
  1. {"remainingRequest":"D:\\front\\item\\zyAdmin\\node_modules\\thread-loader\\dist\\cjs.js!D:\\front\\item\\zyAdmin\\node_modules\\babel-loader\\lib\\index.js!D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\front\\item\\zyAdmin\\src\\pages\\system\\maintain\\systemFile\\opendir.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\front\\item\\zyAdmin\\src\\pages\\system\\maintain\\systemFile\\opendir.vue","mtime":1761614939077},{"path":"D:\\front\\item\\zyAdmin\\babel.config.js","mtime":1761614925168},{"path":"D:\\front\\item\\zyAdmin\\.babelrc","mtime":1761614925165},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1761614927801},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\thread-loader\\dist\\cjs.js","mtime":1761614937017},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\babel-loader\\lib\\index.js","mtime":1761614927320},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\cache-loader\\dist\\cjs.js","mtime":1761614927801},{"path":"D:\\front\\item\\zyAdmin\\node_modules\\vue-loader\\lib\\index.js","mtime":1761614937402}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tICJEOi9mcm9udC9pdGVtL3p5QWRtaW4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2RlZmluZVByb3BlcnR5LmpzIjsKaW1wb3J0IF9yZWdlbmVyYXRvciBmcm9tICJEOi9mcm9udC9pdGVtL3p5QWRtaW4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3JlZ2VuZXJhdG9yLmpzIjsKaW1wb3J0IF9hc3luY1RvR2VuZXJhdG9yIGZyb20gIkQ6L2Zyb250L2l0ZW0venlBZG1pbi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXN5bmNUb0dlbmVyYXRvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbmQtaW5kZXguanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuc2xpY2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zcGxpY2UuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmZvci1lYWNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLmNvbnN0cnVjdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIjsKaW1wb3J0IHsgcmVzb2x2ZUNvbXBvbmVudCB9IGZyb20gJ3Z1ZSc7CmltcG9ydCB7IG9wZW5kaXJMaXN0QXBpLCBvcGVuZmlsZUFwaSwgc2F2ZWZpbGVBcGksIG9wZW5kaXJMb2dpbkFwaSwgY3JlYXRlRm9sZGVyLCBjcmVhdGVGaWxlLCBkZWxGb2xkZXIsIHJlbmFtZSwgZmlsZU1hcmssIG1hcmtTYXZlIH0gZnJvbSAnQC9hcGkvc3lzdGVtJzsKaW1wb3J0IENvZGVNaXJyb3IgZnJvbSAnY29kZW1pcnJvci9saWIvY29kZW1pcnJvcic7CmltcG9ydCBsb2dpbkZyb20gZnJvbSAnLi9jb21wb25lbnRzL2xvZ2luRnJvbSc7CmltcG9ydCB7IHNldENvb2tpZXMsIGdldENvb2tpZXMsIHJlbW92ZUNvb2tpZXMgfSBmcm9tICdAL2xpYnMvdXRpbCc7Ci8vIGltcG9ydCBGdWxsc2NyZWVuIGZyb20gJ0AvbGF5b3V0L2NvbXBvbmVudHMvZnVsbHNjcmVlbic7CmltcG9ydCAqIGFzIG1vbmFjbyBmcm9tICdtb25hY28tZWRpdG9yJzsKZXhwb3J0IGRlZmF1bHQgewogIG5hbWU6ICdvcGVuZGlyJywKICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkgewogICAgcmV0dXJuIHsKICAgICAgbW9kYWxzOiBmYWxzZSwKICAgICAgLy/nvJbovpHlmajlvIDlhbMKICAgICAgZWRpdG9yOiAnJywKICAgICAgLy/lvZPliY3nvJbovpHlmajlr7nosaEKICAgICAgZWRpdG9ySW5kZXg6IFsKICAgICAgLy/pgInpobnljaHmlbDnu4QKICAgICAgewogICAgICAgIHRhYjogdHJ1ZSwKICAgICAgICBpbmRleDogJzAnLAogICAgICAgIHRpdGxlOiAnJywKICAgICAgICBpY29uOiAnJwogICAgICB9XSwKICAgICAgZWRpdG9yTGlzdDogW10sCiAgICAgIC8v57yW6L6R5Zmo5pWw57uECiAgICAgIGluZGV4RWRpdG9yOiAwLAogICAgICAvL+W9k+WJjee8lui+keWZqOe0ouW8lQogICAgICBjb2RlOiAnJywKICAgICAgLy/lvZPliY3mlofku7bmiZPlvIDml7bnmoTlhoXlrrkKICAgICAgbmF2TGlzdDogW10sCiAgICAgIC8v5bem5L6n5a+86Iiq5pWw5o2uCiAgICAgIG5hdkl0ZW06IHt9LAogICAgICAvL+W3puS+p+WvvOiIqueCueWHu+aYr+mAieS4reeahOaVsOaNrgogICAgICBjb250ZXh0RGF0YTogbnVsbCwKICAgICAgLy/lt6bkvqflr7zoiKrlj7PplK7ngrnlh7vmmK/kuqfnlJ/nmoTmlbDmja7lr7nosaEKCiAgICAgIGZpbGVUeXBlOiAnJywKICAgICAgLy8g5paH5Lu25pON5L2c57G75Z6LIGNyZWF0ZUZvbGRlcnzliJvlu7rmlofku7blpLkgY3JlYXRlRmlsZXzliJvlu7rmlofku7YgZGVsRm9sZGVyfOWIoOmZpOaWh+S7tuWkueaIluiAheaWh+S7tgogICAgICBjbGFzc05hbWU6ICcnLAogICAgICAvL+WFqOWxjyBjbGFzc+WQjQogICAgICAvLyBmdWxsc2NyZWVuOmZhbHNlLCAgLy8g5piv5ZCm5YWo5bGPCiAgICAgIGlzU2F2ZTogdHJ1ZSwKICAgICAgLy/lvZPliY3mlofku7bmmK/lkKbkv53lrZgKCiAgICAgIGlzU2hvd0xvZ246IGZhbHNlLAogICAgICAvLyDnmbvlvZUKICAgICAgaXNTaG93TGlzdDogZmFsc2UsCiAgICAgIC8vIOeZu+W9leS5i+WQjuWIl+ihqAoKICAgICAgc3BpblNob3c6IGZhbHNlLAogICAgICBsb2FkaW5nOiBmYWxzZSwKICAgICAgdGFiTGlzdDogW10sCiAgICAgIGZvcm1JdGVtOiB7CiAgICAgICAgLy/orrDlvZXlvZPliY3ot6/lvoTkv6Hmga/vvIzojrflj5bmlofku7bliJfooajml7bkvb/nlKgKICAgICAgICBkaXI6ICcnLAogICAgICAgIHN1cGVyaW9yOiAwLAogICAgICAgIGZpbGVkaXI6ICcnLAogICAgICAgIGZpbGVUb2tlbjogZ2V0Q29va2llcygnZmlsZV90b2tlbicpCiAgICAgIH0sCiAgICAgIGRpcjogJycsCiAgICAgIC8v5b2T5YmN5a6M5pW05paH5Lu26Lev5b6ECiAgICAgIC8vIHJvd3M6IHt9LCAgLy8KICAgICAgcGF0aG5hbWU6ICcnLAogICAgICAvLyDlvZPliY3mlofku7bot6/lvoQKICAgICAgdGl0bGU6ICcnLAogICAgICAvL+W9k+WJjeaWh+S7tuagh+mimAoKICAgICAgZm9ybUZpbGU6IHsKICAgICAgICAvL+mHjeWRveWQjeihqOWNlQogICAgICAgIGZpbGVuYW1lOiAnJwogICAgICB9LAogICAgICBydWxlSW5saW5lOiB7CiAgICAgICAgZmlsZW5hbWU6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICfor7fovpPlhaXmlofku7bmiJbmlofku7blpLnnmoTlkI3lrZcnLAogICAgICAgICAgdHJpZ2dlcjogJ2JsdXInCiAgICAgICAgfV0KICAgICAgfSwKICAgICAgZm9ybVNob3c6IGZhbHNlLAogICAgICAvL+ihqOWNleW8gOWFswogICAgICBmb3JtVGl0bGU6ICcnLAogICAgICAvL+ihqOWNleagh+mimAogICAgICBmaWxlVG9rZW46IGdldENvb2tpZXMoJ2ZpbGVfdG9rZW4nKSwKICAgICAgcm91dGVMaXN0OiBbXSwKICAgICAgLy8gIOaJk+W8gOaWh+S7tui3r+W+hAogICAgICBwcm9wczogewogICAgICAgIGxhYmVsOiAndGl0bGUnLAogICAgICAgIGNoaWxkcmVuOiAnY2hpbGRyZW4nLAogICAgICAgIGlzTGVhZjogJ2lzTGVhZicKICAgICAgfQogICAgfTsKICB9LAogIGNvbXBvbmVudHM6IHsKICAgIGxvZ2luRnJvbTogbG9naW5Gcm9tCiAgfSwKICBtb3VudGVkOiBmdW5jdGlvbiBtb3VudGVkKCkgewogICAgLy8gdGhpcy5pbml0RWRpdG9yKCk7CiAgfSwKICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkgewogICAgdGhpcy5nZXRMaXN0KCk7CiAgfSwKICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkgewogICAgcmVtb3ZlQ29va2llcygnZmlsZV90b2tlbicpOwogIH0sCiAgY29tcHV0ZWQ6IHt9LAogIG1ldGhvZHM6IHsKICAgIC8vIOeCueWHu+ihjAogICAgY3VycmVudENoYW5nZTogZnVuY3Rpb24gY3VycmVudENoYW5nZShjdXJyZW50Um93KSB7CiAgICAgIGlmIChjdXJyZW50Um93LmlzRGlyKSB7CiAgICAgICAgdGhpcy5vcGVuKGN1cnJlbnRSb3cpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuZWRpdChjdXJyZW50Um93KTsKICAgICAgfQogICAgfSwKICAgIC8qKg0KICAgICAqIOaWh+S7tuWIl+ihqA0KICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZWZyZXNoICAgLy8g5piv5ZCm6YeN5paw5Yqg6L29IGJvb2wNCiAgICAgKiBAcGFyYW0ge09iamVjdH0gaXNfZWRpdCAgIC8vIOaYr+WQpuaYr+e8lui+keWZqOS4reeahOWIt+aWsCBib29sDQogICAgICovCiAgICBnZXRMaXN0OiBmdW5jdGlvbiBnZXRMaXN0KHJlZnJlc2gsIGlzX2VkaXQpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgdmFyIHBhcmFtczsKICAgICAgaWYgKHJlZnJlc2gpIHsKICAgICAgICBwYXJhbXMgPSB7CiAgICAgICAgICBkaXI6ICcnLAogICAgICAgICAgc3VwZXJpb3I6IDAsCiAgICAgICAgICBmaWxlZGlyOiAnJywKICAgICAgICAgIGZpbGVUb2tlbjogdGhpcy5maWxlVG9rZW4KICAgICAgICB9OwogICAgICB9IGVsc2UgewogICAgICAgIHBhcmFtcyA9IHRoaXMuZm9ybUl0ZW07CiAgICAgICAgcGFyYW1zLmZpbGVUb2tlbiA9IHRoaXMuZmlsZVRva2VuOwogICAgICB9CiAgICAgIGlmICghaXNfZWRpdCkgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgICAgb3BlbmRpckxpc3RBcGkocGFyYW1zKS50aGVuKC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIF9yZWYgPSBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yKCkubShmdW5jdGlvbiBfY2FsbGVlKHJlcykgewogICAgICAgICAgdmFyIGRhdGE7CiAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yKCkudyhmdW5jdGlvbiAoX2NvbnRleHQpIHsKICAgICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQubikgewogICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgIGRhdGEgPSByZXMuZGF0YTsKICAgICAgICAgICAgICAgIF90aGlzLnJvdXRlTGlzdCA9IGRhdGEucm91dGVMaXN0OwogICAgICAgICAgICAgICAgaWYgKGlzX2VkaXQpIHsKICAgICAgICAgICAgICAgICAgX3RoaXMubmF2TGlzdCA9IGRhdGEubmF2TGlzdDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIF90aGlzLm5hdkxpc3RGb3JUYWIgPSBkYXRhLm5hdkxpc3Q7CiAgICAgICAgICAgICAgICAgIF90aGlzLnRhYkxpc3QgPSBkYXRhLmxpc3Q7CiAgICAgICAgICAgICAgICAgIC8vIHRoaXMubmF2TGlzdCA9IGRhdGEubmF2TGlzdDsKICAgICAgICAgICAgICAgICAgX3RoaXMuaXNTaG93TGlzdCA9IHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBfdGhpcy5kaXIgPSBkYXRhLmRpcjsKICAgICAgICAgICAgICAgIF90aGlzLmlzU2hvd0xvZ24gPSBmYWxzZTsKICAgICAgICAgICAgICAgIF90aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuYSgyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbGxlZSk7CiAgICAgICAgfSkpOwogICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gpIHsKICAgICAgICAgIHJldHVybiBfcmVmLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgfTsKICAgICAgfSgpKS5jYXRjaChmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgX3RoaXMuY2F0Y2hGdW4ocmVzKTsKICAgICAgfSk7CiAgICB9LAogICAgLy/mlrDlu7rmlofku7blkI7ph43mlrDliqDovb3lt6bkvqflr7zoiKoKICAgIGdldExpc3RJdGVtOiBmdW5jdGlvbiBnZXRMaXN0SXRlbShkYXRhKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICBvcGVuZGlyTGlzdEFwaShkYXRhKS50aGVuKC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIF9yZWYyID0gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvcigpLm0oZnVuY3Rpb24gX2NhbGxlZTIocmVzKSB7CiAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yKCkudyhmdW5jdGlvbiAoX2NvbnRleHQyKSB7CiAgICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0Mi5uKSB7CiAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgX3RoaXMyLiRzZXQoX3RoaXMyLmNvbnRleHREYXRhLCAnY2hpbGRyZW4nLCByZXMuZGF0YS5uYXZMaXN0KTsKICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQyLmEoMik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIF9jYWxsZWUyKTsKICAgICAgICB9KSk7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeDIpIHsKICAgICAgICAgIHJldHVybiBfcmVmMi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgIH07CiAgICAgIH0oKSkuY2F0Y2goZnVuY3Rpb24gKHJlcykgewogICAgICAgIF90aGlzMi5jYXRjaEZ1bihyZXMpOwogICAgICB9KTsKICAgIH0sCiAgICAvLyDov5Tlm57kuIrnuqcKICAgIGdvQmFjazogZnVuY3Rpb24gZ29CYWNrKGlzX2VkaXQpIHsKICAgICAgdGhpcy5mb3JtSXRlbSA9IHsKICAgICAgICBkaXI6IHRoaXMuZGlyLAogICAgICAgIHN1cGVyaW9yOiAxLAogICAgICAgIGZpbGVkaXI6ICcnCiAgICAgIH07CiAgICAgIHRoaXMuZ2V0TGlzdChmYWxzZSwgaXNfZWRpdCk7CiAgICB9LAogICAgLy8g5omT5byACiAgICBvcGVuOiBmdW5jdGlvbiBvcGVuKHJvdykgewogICAgICAvLyB0aGlzLnJvd3MgPSByb3c7CiAgICAgIHRoaXMuZm9ybUl0ZW0gPSB7CiAgICAgICAgZGlyOiByb3cucGF0aCwKICAgICAgICBzdXBlcmlvcjogMCwKICAgICAgICBmaWxlZGlyOiByb3cuZmlsZW5hbWUsCiAgICAgICAgZmlsZVRva2VuOiB0aGlzLmZpbGVUb2tlbgogICAgICB9OwogICAgICB0aGlzLmdldExpc3QoZmFsc2UsIGZhbHNlKTsKICAgIH0sCiAgICBqdW1wUm91dGU6IGZ1bmN0aW9uIGp1bXBSb3V0ZShpdGVtKSB7CiAgICAgIHZhciBkYXRhID0gewogICAgICAgIHBhdGg6IGl0ZW0ucm91dGUsCiAgICAgICAgZmlsZW5hbWU6ICcnCiAgICAgIH07CiAgICAgIHRoaXMub3BlbihkYXRhKTsKICAgIH0sCiAgICByZWZyZXNoUm91dGU6IGZ1bmN0aW9uIHJlZnJlc2hSb3V0ZSgpIHsKICAgICAgdmFyIGRhdGEgPSB7CiAgICAgICAgcGF0aDogdGhpcy5yb3V0ZUxpc3RbdGhpcy5yb3V0ZUxpc3QubGVuZ3RoIC0gMV0ucm91dGUsCiAgICAgICAgZmlsZW5hbWU6ICcnCiAgICAgIH07CiAgICAgIHRoaXMub3BlbihkYXRhKTsKICAgIH0sCiAgICAvLyDnvJbovpHDnwogICAgZWRpdDogZnVuY3Rpb24gZWRpdChyb3cpIHsKICAgICAgdGhpcy5uYXZJdGVtID0gcm93OwogICAgICB0aGlzLnNwaW5TaG93ID0gdHJ1ZTsKICAgICAgdGhpcy5wYXRobmFtZSA9IHJvdy5wYXRobmFtZTsKICAgICAgdGhpcy50aXRsZSA9IHJvdy5maWxlbmFtZTsKICAgICAgdGhpcy5lZGl0b3JJbmRleFswXS50aXRsZSA9IHJvdy5maWxlbmFtZTsKICAgICAgdGhpcy5lZGl0b3JJbmRleFswXS5wYXRobmFtZSA9IHJvdy5wYXRobmFtZTsKICAgICAgdGhpcy5uYXZMaXN0ID0gdGhpcy5uYXZMaXN0Rm9yVGFiOwogICAgICB0aGlzLmRpciA9IHJvdy5wYXRoOwogICAgICAvLyDliJvlu7rku6PnoIHlrrnlmagKICAgICAgaWYgKHRoaXMuZWRpdG9yTGlzdC5sZW5ndGggPD0gMCkgewogICAgICAgIC8vIHRoaXMuaW5pdEVkaXRvcigpOwogICAgICB9CiAgICAgIHRoaXMub3BlbmZpbGUocm93LnBhdGhuYW1lLCBmYWxzZSk7CiAgICB9LAogICAgLyoqDQogICAgICog5aSH5rOoDQogICAgICovCiAgICBtYXJrOiBmdW5jdGlvbiBtYXJrKHJvdykgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKICAgICAgdGhpcy4kbW9kYWxGb3JtKGZpbGVNYXJrKHsKICAgICAgICBwYXRoOiByb3cucGF0aG5hbWUsCiAgICAgICAgZmlsZVRva2VuOiB0aGlzLmZpbGVUb2tlbgogICAgICB9KSkudGhlbihmdW5jdGlvbiAoKSB7CiAgICAgICAgcmV0dXJuIF90aGlzMy5nZXRMaXN0KHRydWUsIGZhbHNlKTsKICAgICAgfSk7CiAgICB9LAogICAgLyoqDQogICAgICog5L+d5a2YDQogICAgICogQHBhcmFtIHtPYmplY3R9IGluZGV4ICAgLy8g5b2T5YmN57Si5byVDQogICAgICogQHBhcmFtIHtPYmplY3R9IHR5cGUgICAgLy8gdHJ1ZSDkuI3mm7TmlrDlvZPliY3mnKzlnLDmlbDmja7vvIxmYWxzZeaIluiAheS4uuepuiDmm7TmlrDlvZPliY3mlbDmja4NCiAgICAgKi8KICAgIHNhdmVmaWxlOiBmdW5jdGlvbiBzYXZlZmlsZShpbmRleCwgdHlwZSkgewogICAgICB2YXIgY29kZSA9IHRoaXMuZWRpdG9yTGlzdFtpbmRleF0uZWRpdG9yLmdldFZhbHVlKCk7CiAgICAgIHZhciBkYXRhID0gewogICAgICAgIGNvbW1lbnQ6IGNvZGUsCiAgICAgICAgZmlsZXBhdGg6IHRoaXMuZWRpdG9yTGlzdFtpbmRleF0ucGF0aCwKICAgICAgICBmaWxlVG9rZW46IHRoaXMuZmlsZVRva2VuCiAgICAgIH07CiAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgc2F2ZWZpbGVBcGkoZGF0YSkudGhlbigvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBfcmVmMyA9IF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IoKS5tKGZ1bmN0aW9uIF9jYWxsZWUzKHJlcykgewogICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcigpLncoZnVuY3Rpb24gKF9jb250ZXh0MykgewogICAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDMubikgewogICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgIGlmICghdHlwZSkgewogICAgICAgICAgICAgICAgICB0aGF0LmNvZGUgPSBjb2RlOwogICAgICAgICAgICAgICAgICB0aGF0LmlzU2F2ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgIHRoYXQuZWRpdG9ySW5kZXhbaW5kZXhdLmljb24gPSAnJzsKICAgICAgICAgICAgICAgICAgdGhhdC5lZGl0b3JMaXN0W2luZGV4XS5pc1NhdmUgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhhdC4kbWVzc2FnZS5zdWNjZXNzKHJlcy5tc2cpOwogICAgICAgICAgICAgICAgdGhhdC4kTW9kYWwucmVtb3ZlKCk7CiAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5hKDIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBfY2FsbGVlMyk7CiAgICAgICAgfSkpOwogICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gzKSB7CiAgICAgICAgICByZXR1cm4gX3JlZjMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgICB9KCkpLmNhdGNoKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICB0aGF0LmNhdGNoRnVuKHJlcyk7CiAgICAgIH0pOwogICAgfSwKICAgIC8vIOWIt+aWsAogICAgcmVmcmVzaGZpbGU6IGZ1bmN0aW9uIHJlZnJlc2hmaWxlKCkgewogICAgICAvLyDliLfmlrDnvJbovpHlmagKICAgICAgaWYgKHRoaXMuZWRpdG9yTGlzdFt0aGlzLmluZGV4RWRpdG9yXSkgdGhpcy5vcGVuZmlsZSh0aGlzLmVkaXRvckxpc3RbdGhpcy5pbmRleEVkaXRvcl0ucGF0aCwgdHJ1ZSk7CiAgICB9LAogICAgLy/orqHnrpd0b2tlbui/h+acn+aXtumXtAogICAgZ2V0RXhwaXJlc1RpbWU6IGZ1bmN0aW9uIGdldEV4cGlyZXNUaW1lKGV4cGlyZXNUaW1lKSB7CiAgICAgIHZhciBub3dUaW1lTnVtID0gTWF0aC5yb3VuZChuZXcgRGF0ZSgpIC8gMTAwMCk7CiAgICAgIHZhciBleHBpcmVzVGltZU51bSA9IGV4cGlyZXNUaW1lIC0gbm93VGltZU51bTsKICAgICAgcmV0dXJuIHBhcnNlRmxvYXQocGFyc2VGbG9hdChwYXJzZUZsb2F0KGV4cGlyZXNUaW1lTnVtIC8gNjApIC8gNjApIC8gMjQpOwogICAgfSwKICAgIC8vIOS+p+i+ueagj+W8guatpeWKoOi9vQogICAgbG9hZERhdGE6IGZ1bmN0aW9uIGxvYWREYXRhKGl0ZW0sIGNhbGxiYWNrKSB7CiAgICAgIHZhciBfdGhpczQgPSB0aGlzOwogICAgICBpZiAoIWl0ZW0uZGF0YS5pc0xlYWYpIHsKICAgICAgICB0aGlzLmZvcm1JdGVtID0gewogICAgICAgICAgZGlyOiBpdGVtLmRhdGEucGF0aCwKICAgICAgICAgIHN1cGVyaW9yOiAwLAogICAgICAgICAgZmlsZWRpcjogaXRlbS5kYXRhLnRpdGxlLAogICAgICAgICAgZmlsZVRva2VuOiB0aGlzLmZpbGVUb2tlbgogICAgICAgIH07CiAgICAgICAgb3BlbmRpckxpc3RBcGkodGhpcy5mb3JtSXRlbSkudGhlbigvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICAgICAgdmFyIF9yZWY0ID0gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvcigpLm0oZnVuY3Rpb24gX2NhbGxlZTQocmVzKSB7CiAgICAgICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3IoKS53KGZ1bmN0aW9uIChfY29udGV4dDQpIHsKICAgICAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDQubikgewogICAgICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgICAgICBjYWxsYmFjayhyZXMuZGF0YS5uYXZMaXN0KTsKICAgICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NC5hKDIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwgX2NhbGxlZTQpOwogICAgICAgICAgfSkpOwogICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChfeDQpIHsKICAgICAgICAgICAgcmV0dXJuIF9yZWY0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgICAgICB9OwogICAgICAgIH0oKSkuY2F0Y2goZnVuY3Rpb24gKHJlcykgewogICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT0gMTEwMDA4KSB7CiAgICAgICAgICAgIF90aGlzNC4kbWVzc2FnZS5lcnJvcihyZXMubXNnKTsKICAgICAgICAgICAgX3RoaXM0LmlzU2hvd0xvZ24gPSB0cnVlOwogICAgICAgICAgICBfdGhpczQuaXNTaG93TGlzdCA9IGZhbHNlOwogICAgICAgICAgICBfdGhpczQubG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgX3RoaXM0LmNhdGNoRnVuKHJlcyk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0sCiAgICAvLyDoh6rlrprkuYnmmL7npLoKICAgIHJlbmRlckNvbnRlbnQ6IGZ1bmN0aW9uIHJlbmRlckNvbnRlbnQoaCwgX3JlZjUpIHsKICAgICAgdmFyIG5vZGUgPSBfcmVmNS5ub2RlLAogICAgICAgIGRhdGEgPSBfcmVmNS5kYXRhLAogICAgICAgIHJvb3QgPSBfcmVmNS5yb290OwogICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgIHJldHVybiBoKCdzcGFuJywgewogICAgICAgIHN0eWxlOiBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7CiAgICAgICAgICBkaXNwbGF5OiAnaW5saW5lLWJsb2NrJywKICAgICAgICAgIGN1cnNvcjogJ3BvaW50ZXInLAogICAgICAgICAgdXNlclNlbGVjdDogJ251bGwnLAogICAgICAgICAgY29sb3I6ICcjY2NjY2NjJwogICAgICAgIH0sICJkaXNwbGF5IiwgJ2lubGluZS1ibG9jaycpLCAid2lkdGgiLCAnMTAwJScpLCAiYm9yZGVyUmFkaXMiLCAnNXB4JyksCiAgICAgICAgb246IHsKICAgICAgICAgIGNsaWNrOiBmdW5jdGlvbiBjbGljaygpIHsKICAgICAgICAgICAgdGhhdC5jbGlja0RpcihkYXRhLCByb290LCBub2RlKTsKICAgICAgICAgIH0sCiAgICAgICAgICBjb250ZXh0bWVudTogZnVuY3Rpb24gY29udGV4dG1lbnUoKSB7CiAgICAgICAgICAgIC8vIHRoYXQuaGFuZGxlQ29udGV4dERlbEZvbGRlcihkYXRhLHJvb3Qsbm9kZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LCBbaCgnc3BhbicsIFtoKCdJY29uJywgewogICAgICAgIHByb3BzOiB7CiAgICAgICAgICB0eXBlOiAhZGF0YS5pc0xlYWYgPyAnbWQtZm9sZGVyJyA6ICdpb3MtZG9jdW1lbnQtb3V0bGluZScKICAgICAgICB9LAogICAgICAgIHN0eWxlOiB7CiAgICAgICAgICBtYXJnaW5SaWdodDogJzhweCcKICAgICAgICB9CiAgICAgIH0pLCBoKCdzcGFuJywgewogICAgICAgIGF0dHJzOiB7CiAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZQogICAgICAgIH0KICAgICAgfSwgZGF0YS50aXRsZSldKV0pOwogICAgfSwKICAgIC8qKg0KICAgICAqIOS+p+i+ueagj+eCueWHu+S6i+S7tg0KICAgICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhDQogICAgICovCiAgICBjbGlja0RpcjogZnVuY3Rpb24gY2xpY2tEaXIoZGF0YSwgcm9vdCwgbm9kZSkgewogICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgIHRoYXQubmF2SXRlbSA9IGRhdGE7CiAgICAgIHRoYXQucGF0aG5hbWUgPSBkYXRhLnBhdGhuYW1lOwogICAgICBpZiAoIWRhdGEuaXNEaXIpIHsKICAgICAgICB2YXIgaSA9IHRoYXQuZWRpdG9ySW5kZXguZmluZEluZGV4KGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICByZXR1cm4gZS5wYXRobmFtZSA9PT0gZGF0YS5wYXRobmFtZTsKICAgICAgICB9KTsKICAgICAgICBpZiAoaSA+IC0xKSB7CiAgICAgICAgICB0aGF0LmluZGV4RWRpdG9yID0gaS50b1N0cmluZygpOwogICAgICAgICAgdGhhdC50b2dnbGVFZGl0b3IoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIGluZGV4ID0gdGhhdC5lZGl0b3JJbmRleC5sZW5ndGg7CiAgICAgICAgICAvLyDliJvlu7p0YWJzCiAgICAgICAgICB0aGF0LmVkaXRvckluZGV4LnB1c2goewogICAgICAgICAgICB0YWI6IHRydWUsCiAgICAgICAgICAgIGluZGV4OiBpbmRleC50b1N0cmluZygpLAogICAgICAgICAgICB0aXRsZTogZGF0YS50aXRsZSwKICAgICAgICAgICAgaWNvbjogJycsCiAgICAgICAgICAgIHBhdGhuYW1lOiBkYXRhLnBhdGhuYW1lCiAgICAgICAgICB9KTsKICAgICAgICAgIHRoYXQuaW5kZXhFZGl0b3IgPSBpbmRleC50b1N0cmluZygpOwogICAgICAgICAgLy8g5Yib5bu65Luj56CB5a655ZmoCiAgICAgICAgICB0aGF0LmluaXRFZGl0b3IoKTsKICAgICAgICAgIHRoYXQub3BlbmZpbGUoZGF0YS5wYXRobmFtZSwgdHJ1ZSk7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgLy/kvqfovrnmoI/lj7PplK7ngrnlh7vkuovku7YKICAgIGhhbmRsZUNvbnRleHRNZW51OiBmdW5jdGlvbiBoYW5kbGVDb250ZXh0TWVudShkYXRhLCBldmVudCwgcG9zaXRpb24pIHsKICAgICAgcG9zaXRpb24ubGVmdCA9IE51bWJlcihwb3NpdGlvbi5sZWZ0LnNsaWNlKDAsIC0yKSkgKyA3NSArICdweCc7CiAgICAgIHRoaXMuY29udGV4dERhdGEgPSBkYXRhOwogICAgfSwKICAgIC8vIOaWh+S7tuaTjeS9nOexu+WeiyBjcmVhdGVGb2xkZXJ85Yib5bu65paH5Lu25aS5IGNyZWF0ZUZpbGV85Yib5bu65paH5Lu2IGRlbEZvbGRlcnzliKDpmaTmlofku7blpLnmiJbogIXmlofku7YgcmVuYW1lRmlsZXzmlofku7bph43lkb3lkI0KICAgIC8v5Yib5bu65paH5Lu25aS5CiAgICBoYW5kbGVDb250ZXh0Q3JlYXRlRm9sZGVyOiBmdW5jdGlvbiBoYW5kbGVDb250ZXh0Q3JlYXRlRm9sZGVyKCkgewogICAgICB0aGlzLmZvcm1GaWxlLmZpbGVuYW1lID0gJyc7CiAgICAgIHRoaXMuZm9ybVRpdGxlID0gJ+WIm+W7uuaWh+S7tuWkuSc7CiAgICAgIHRoaXMuZm9ybVNob3cgPSB0cnVlOwogICAgICB0aGlzLmZpbGVUeXBlID0gJ2NyZWF0ZUZvbGRlcic7CiAgICB9LAogICAgLy/liJvlu7rmlofku7YKICAgIGhhbmRsZUNvbnRleHRDcmVhdGVGaWxlOiBmdW5jdGlvbiBoYW5kbGVDb250ZXh0Q3JlYXRlRmlsZSgpIHsKICAgICAgdGhpcy5mb3JtRmlsZS5maWxlbmFtZSA9ICcnOwogICAgICB0aGlzLmZvcm1UaXRsZSA9ICfliJvlu7rmlofku7YnOwogICAgICB0aGlzLmZvcm1TaG93ID0gdHJ1ZTsKICAgICAgdGhpcy5maWxlVHlwZSA9ICdjcmVhdGVGaWxlJzsKICAgIH0sCiAgICAvL+WIoOmZpOaWh+S7tgogICAgaGFuZGxlQ29udGV4dERlbEZvbGRlcjogZnVuY3Rpb24gaGFuZGxlQ29udGV4dERlbEZvbGRlcigpIHsKICAgICAgdmFyIF90aGlzNSA9IHRoaXM7CiAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgdGhhdC4kTW9kYWwuY29uZmlybSh7CiAgICAgICAgdGl0bGU6ICfliKDpmaTmlofku7blpLnlkozmlofku7YnLAogICAgICAgIGNvbnRlbnQ6ICfmgqjnoa7lrpropoHliKDpmaTmlLnmlofku7bvvJ8nLAogICAgICAgIGxvYWRpbmc6IHRydWUsCiAgICAgICAgb25PazogZnVuY3Rpb24gb25PaygpIHsKICAgICAgICAgIHZhciBkYXRhID0gewogICAgICAgICAgICBwYXRoOiB0aGF0LmNvbnRleHREYXRhLnBhdGhuYW1lLAogICAgICAgICAgICBmaWxlVG9rZW46IF90aGlzNS5maWxlVG9rZW4KICAgICAgICAgIH07CiAgICAgICAgICBkZWxGb2xkZXIoZGF0YSkudGhlbigvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgX3JlZjYgPSBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yKCkubShmdW5jdGlvbiBfY2FsbGVlNShyZXMpIHsKICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yKCkudyhmdW5jdGlvbiAoX2NvbnRleHQ1KSB7CiAgICAgICAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDUubikgewogICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgdGhhdC5sb29wRGVsKHRoYXQubmF2TGlzdCwgdGhhdC5jb250ZXh0RGF0YS5ub2RlS2V5KTsKICAgICAgICAgICAgICAgICAgICB0aGF0LiRNb2RhbC5yZW1vdmUoKTsKICAgICAgICAgICAgICAgICAgICB0aGF0LiRtZXNzYWdlLnN1Y2Nlc3MoJ+WIoOmZpOaIkOWKnycpOwogICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NS5hKDIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sIF9jYWxsZWU1KTsKICAgICAgICAgICAgfSkpOwogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKF94NSkgewogICAgICAgICAgICAgIHJldHVybiBfcmVmNi5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgICAgICB9OwogICAgICAgICAgfSgpKS5jYXRjaChmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICAgIHRoYXQuY2F0Y2hGdW4ocmVzKTsKICAgICAgICAgIH0pOwogICAgICAgIH0sCiAgICAgICAgb25DYW5jZWw6IGZ1bmN0aW9uIG9uQ2FuY2VsKCkgewogICAgICAgICAgdGhhdC4kbWVzc2FnZS5pbmZvKCflj5bmtojliKDpmaQnKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSwKICAgIC8v6YeN5ZG95ZCNCiAgICBoYW5kbGVDb250ZXh0UmVuYW1lOiBmdW5jdGlvbiBoYW5kbGVDb250ZXh0UmVuYW1lKCkgewogICAgICB0aGlzLmZvcm1GaWxlLmZpbGVuYW1lID0gdGhpcy5jb250ZXh0RGF0YS50aXRsZTsKICAgICAgdGhpcy5mb3JtVGl0bGUgPSAn6YeN5ZG95ZCN5paH5Lu2JzsKICAgICAgdGhpcy5mb3JtU2hvdyA9IHRydWU7CiAgICAgIHRoaXMuZmlsZVR5cGUgPSAncmVuYW1lRmlsZSc7CiAgICB9LAogICAgLy/miZPlvIDmlofku7YKICAgIG9wZW5maWxlOiBmdW5jdGlvbiBvcGVuZmlsZShwYXRoLCBpc19lZGl0KSB7CiAgICAgIHZhciBfdGhpczYgPSB0aGlzOwogICAgICB2YXIgdGhhdCA9IHRoaXM7CiAgICAgIHZhciBwYXJhbXMgPSB7CiAgICAgICAgZmlsZXBhdGg6IHBhdGgsCiAgICAgICAgZmlsZVRva2VuOiB0aGlzLmZpbGVUb2tlbgogICAgICB9OwogICAgICBvcGVuZmlsZUFwaShwYXJhbXMpLnRoZW4oLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgICB2YXIgX3JlZjcgPSBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yKCkubShmdW5jdGlvbiBfY2FsbGVlNihyZXMpIHsKICAgICAgICAgIHZhciBkYXRhOwogICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvcigpLncoZnVuY3Rpb24gKF9jb250ZXh0NikgewogICAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDYubikgewogICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgIGlmICghaXNfZWRpdCkgewogICAgICAgICAgICAgICAgICB0aGF0Lm1vZGFscyA9IHRydWU7CiAgICAgICAgICAgICAgICAgIHRoYXQuc3BpblNob3cgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgX3RoaXM2LmluaXRFZGl0b3IoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGRhdGEgPSByZXMuZGF0YTsKICAgICAgICAgICAgICAgIHRoYXQuY29kZSA9IGRhdGEuY29udGVudDsKICAgICAgICAgICAgICAgIC8vIOS/neWtmOebuOWvueS/oeaBrwoKICAgICAgICAgICAgICAgIHRoYXQuZWRpdG9yTGlzdFt0aGF0LmluZGV4RWRpdG9yXS5vbGRDb2RlID0gdGhhdC5jb2RlOwogICAgICAgICAgICAgICAgX3RoaXM2LiRuZXh0VGljayhmdW5jdGlvbiAoZSkgewogICAgICAgICAgICAgICAgICB0aGF0LmVkaXRvckxpc3RbdGhhdC5pbmRleEVkaXRvciB8fCAwXS5wYXRoID0gcGF0aDsKICAgICAgICAgICAgICAgICAgdGhhdC5lZGl0b3JMaXN0W3RoYXQuaW5kZXhFZGl0b3IgfHwgMF0ucGF0aG5hbWUgPSBwYXRoOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAvL+aUueWPmOWxnuaApwogICAgICAgICAgICAgICAgdGhhdC5jaGFuZ2VNb2RlbChkYXRhLm1vZGUsIHRoYXQuY29kZSk7CiAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ni5hKDIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBfY2FsbGVlNik7CiAgICAgICAgfSkpOwogICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3g2KSB7CiAgICAgICAgICByZXR1cm4gX3JlZjcuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgICB9KCkpLmNhdGNoKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICB0aGF0LmNhdGNoRnVuKHJlcyk7CiAgICAgIH0pOwogICAgfSwKICAgIC8qKg0KICAgICAqIOWIneWni+WMlue8lui+keWZqA0KICAgICAqLwogICAgaW5pdEVkaXRvcjogZnVuY3Rpb24gaW5pdEVkaXRvcigpIHsKICAgICAgdmFyIF90aGlzNyA9IHRoaXM7CiAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgdGhhdC4kbmV4dFRpY2soZnVuY3Rpb24gKCkgewogICAgICAgIC8vIOWIneWni+WMlue8lui+keWZqO+8jOehruS/nWRvbeW3sue7j+a4suafkwogICAgICAgIHRoYXQuZWRpdG9yID0gbW9uYWNvLmVkaXRvci5jcmVhdGUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnRhaW5lcl8nICsgdGhhdC5pbmRleEVkaXRvciksIHsKICAgICAgICAgIHZhbHVlOiB0aGF0LmNvZGUsCiAgICAgICAgICAvL+e8lui+keWZqOWIneWni+aYvuekuuaWh+WtlwogICAgICAgICAgbGFuZ3VhZ2U6ICdzcWwnLAogICAgICAgICAgLy/or63oqIDmlK/mjIHoh6rooYzmn6XpmIVkZW1vCiAgICAgICAgICBhdXRvbWF0aWNMYXlvdXQ6IHRydWUsCiAgICAgICAgICAvL+iHquWKqOW4g+WxgAogICAgICAgICAgdGhlbWU6ICd2cycsCiAgICAgICAgICAvL+WumOaWueiHquW4puS4ieenjeS4u+mimHZzLCBoYy1ibGFjaywgb3IgdnMtZGFyawogICAgICAgICAgZm9sZGluZ1N0cmF0ZWd5OiAnaW5kZW50YXRpb24nLAogICAgICAgICAgLy8g5Luj56CB5Y+v5YiG5bCP5q615oqY5Y+gCiAgICAgICAgICBvdmVydmlld1J1bGVyQm9yZGVyOiBmYWxzZSwKICAgICAgICAgIC8vIOS4jeimgea7muWKqOadoeeahOi+ueahhgogICAgICAgICAgc2Nyb2xsYmFyOiB7CiAgICAgICAgICAgIC8vIOa7muWKqOadoeiuvue9rgogICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbGJhclNpemU6IDQsCiAgICAgICAgICAgIC8vIOerlua7muWKqOadoQogICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZTogMTAgLy8g5qiq5rua5Yqo5p2hCiAgICAgICAgICB9LAogICAgICAgICAgYXV0b0luZGVudDogdHJ1ZSwKICAgICAgICAgIC8vIOiHquWKqOW4g+WxgAogICAgICAgICAgdGFiU2l6ZTogNCwKICAgICAgICAgIC8vIHRhYue8qei/m+mVv+W6pgogICAgICAgICAgYXV0b0Nsb3NpbmdPdmVydHlwZTogJ2Fsd2F5cycKICAgICAgICB9KTsKICAgICAgICAvL+a3u+WKoOaMiemUruebkeWQrAogICAgICAgIHRoYXQuZWRpdG9yLmFkZENvbW1hbmQobW9uYWNvLktleU1vZC5DdHJsQ21kIHwgbW9uYWNvLktleUNvZGUuS0VZX1MsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgIHRoYXQuc2F2ZWZpbGUodGhhdC5pbmRleEVkaXRvcik7CiAgICAgICAgfSk7CiAgICAgICAgdGhhdC5lZGl0b3Iub25LZXlVcChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAvLyDlvZPplK7nm5jmjInkuIvvvIzliKTmlq3lvZPliY3nvJbovpHlmajmlofmnKzkuI7lt7Lkv53lrZjnmoTnvJbovpHlmajmlofmnKzmmK/lkKbkuIDoh7QKICAgICAgICAgIGlmICh0aGF0LmVkaXRvci5nZXRWYWx1ZSgpICE9IHRoYXQuY29kZSkgewogICAgICAgICAgICB0aGF0LmlzU2F2ZSA9IGZhbHNlOwogICAgICAgICAgICB0aGF0LmVkaXRvckluZGV4W3RoYXQuaW5kZXhFZGl0b3JdLmljb24gPSAnbWQtd2FybmluZyc7CiAgICAgICAgICAgIHRoYXQuZWRpdG9yTGlzdFt0aGF0LmluZGV4RWRpdG9yXS5pc1NhdmUgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICB0aGF0LmVkaXRvckxpc3QucHVzaCh7CiAgICAgICAgICBlZGl0b3I6IHRoYXQuZWRpdG9yLAogICAgICAgICAgb2xkQ29kZTogdGhhdC5jb2RlLAogICAgICAgICAgcGF0aDogX3RoaXM3LnBhdGhuYW1lLAogICAgICAgICAgaXNTYXZlOiB0cnVlLAogICAgICAgICAgaW5kZXg6IHRoYXQuaW5kZXhFZGl0b3IKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9LAogICAgLyoqDQogICAgICog5YiH5o2i6K+t6KiADQogICAgICogQHBhcmFtIHtPYmplY3R9IG1vZGUNCiAgICAgKi8KICAgIGNoYW5nZU1vZGVsOiBmdW5jdGlvbiBjaGFuZ2VNb2RlbChtb2RlLCB2YWx1ZSkgewogICAgICB2YXIgb2xkTW9kZWwgPSB0aGlzLmVkaXRvckxpc3RbdGhpcy5pbmRleEVkaXRvcl0uZWRpdG9yLmdldE1vZGVsKCk7IC8v6I635Y+W5pen5qih5Z6LCiAgICAgIC8vIHZhciB2YWx1ZSA9IHRoaXMuZWRpdG9yLmdldFZhbHVlKCk7Ly/ojrflj5bml6fnmoTmlofmnKwKICAgICAgLy/liJvlu7rmlrDmqKHlnovvvIx2YWx1ZeS4uuaXp+aWh+acrO+8jGlk5Li6bW9kZUlk77yM5Y2z6K+t6KiA77yIbGFuZ3VhZ2UuaWTvvIkKICAgICAgLy9tb2Rlc0lkc+WNs+S4uuaUr+aMgeivreiogAogICAgICAvLyB2YXIgbW9kZXNJZHMgPSBtb25hY28ubGFuZ3VhZ2VzLmdldExhbmd1YWdlcygpLm1hcChmdW5jdGlvbihsYW5nKSB7IHJldHVybiBsYW5nLmlkOyB9KTsKICAgICAgaWYgKCFtb2RlKSBtb2RlID0gb2xkTW9kZWwuZ2V0TGFuZ3VhZ2VJZCgpOwogICAgICAvLyBpZighdmFsdWUpIHZhbHVlID0gdGhpcy5lZGl0b3IuZ2V0VmFsdWUoKTsKCiAgICAgIHZhciBuZXdNb2RlbCA9IG1vbmFjby5lZGl0b3IuY3JlYXRlTW9kZWwodmFsdWUsIG1vZGUpOwogICAgICAvL+WwhuaXp+aooeWei+mUgOavgQogICAgICBpZiAob2xkTW9kZWwpIHsKICAgICAgICBvbGRNb2RlbC5kaXNwb3NlKCk7CiAgICAgIH0KICAgICAgLy/orr7nva7mlrDmqKHlnosKICAgICAgdGhpcy5lZGl0b3JMaXN0W3RoaXMuaW5kZXhFZGl0b3JdLmVkaXRvci5zZXRNb2RlbChuZXdNb2RlbCk7CiAgICB9LAogICAgLy8g5paH5Lu25pON5L2c57G75Z6LIGNyZWF0ZUZvbGRlcnzliJvlu7rmlofku7blpLkgY3JlYXRlRmlsZXzliJvlu7rmlofku7YgZGVsRm9sZGVyfOWIoOmZpOaWh+S7tuWkueaIluiAheaWh+S7tgogICAgaGFuZGxlU3VibWl0OiBmdW5jdGlvbiBoYW5kbGVTdWJtaXQobmFtZSkgewogICAgICB2YXIgX3RoaXM4ID0gdGhpczsKICAgICAgdmFyIHRoYXQgPSB0aGlzOwogICAgICB2YXIgZGF0YSA9ICcnOwogICAgICB2YXIgZGF0YUl0ZW0gPSAnJzsKICAgICAgdGhpcy4kcmVmc1tuYW1lXS52YWxpZGF0ZShmdW5jdGlvbiAodmFsaWQpIHsKICAgICAgICBpZiAodmFsaWQpIHsKICAgICAgICAgIHN3aXRjaCAodGhhdC5maWxlVHlwZSkgewogICAgICAgICAgICBjYXNlICdjcmVhdGVGb2xkZXInOgogICAgICAgICAgICAgIGRhdGEgPSB7CiAgICAgICAgICAgICAgICBwYXRoOiB0aGF0LmNvbnRleHREYXRhLnBhdGhuYW1lLAogICAgICAgICAgICAgICAgbmFtZTogdGhhdC5mb3JtRmlsZS5maWxlbmFtZSwKICAgICAgICAgICAgICAgIGZpbGVUb2tlbjogX3RoaXM4LmZpbGVUb2tlbgogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgY3JlYXRlRm9sZGVyKGRhdGEpLnRoZW4oLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBfcmVmOCA9IF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IoKS5tKGZ1bmN0aW9uIF9jYWxsZWU3KHJlcykgewogICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yKCkudyhmdW5jdGlvbiAoX2NvbnRleHQ3KSB7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ3Lm4pIHsKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUl0ZW0gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyOiB0aGF0LmNvbnRleHREYXRhLnBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXJpb3I6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZWRpcjogdGhhdC5jb250ZXh0RGF0YS50aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlVG9rZW46IF90aGlzOC5maWxlVG9rZW4KICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5nZXRMaXN0SXRlbShkYXRhSXRlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGF0LmZvcm1TaG93KSB0aGF0LmZvcm1TaG93ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuJG1lc3NhZ2Uuc3VjY2Vzcygn5Yib5bu65oiQ5YqfJyk7CiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDcuYSgyKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0sIF9jYWxsZWU3KTsKICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3g3KSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVmOC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICB9KCkpLmNhdGNoKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgICAgICAgIHRoYXQuY2F0Y2hGdW4ocmVzKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnY3JlYXRlRmlsZSc6CiAgICAgICAgICAgICAgZGF0YSA9IHsKICAgICAgICAgICAgICAgIHBhdGg6IHRoYXQuY29udGV4dERhdGEucGF0aG5hbWUsCiAgICAgICAgICAgICAgICBuYW1lOiB0aGF0LmZvcm1GaWxlLmZpbGVuYW1lLAogICAgICAgICAgICAgICAgZmlsZVRva2VuOiBfdGhpczguZmlsZVRva2VuCiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICBjcmVhdGVGaWxlKGRhdGEpLnRoZW4oLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBfcmVmOSA9IF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IoKS5tKGZ1bmN0aW9uIF9jYWxsZWU4KHJlcykgewogICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yKCkudyhmdW5jdGlvbiAoX2NvbnRleHQ4KSB7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ4Lm4pIHsKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUl0ZW0gPSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyOiB0aGF0LmNvbnRleHREYXRhLnBhdGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwZXJpb3I6IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZWRpcjogdGhhdC5jb250ZXh0RGF0YS50aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlVG9rZW46IF90aGlzOC5maWxlVG9rZW4KICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC5nZXRMaXN0SXRlbShkYXRhSXRlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGF0LmZvcm1TaG93KSB0aGF0LmZvcm1TaG93ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuJG1lc3NhZ2Uuc3VjY2Vzcygn5Yib5bu65oiQ5YqfJyk7CiAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDguYSgyKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0sIF9jYWxsZWU4KTsKICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3g4KSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBfcmVmOS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICB9KCkpLmNhdGNoKGZ1bmN0aW9uIChyZXMpIHsKICAgICAgICAgICAgICAgIHRoYXQuY2F0Y2hGdW4ocmVzKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAncmVuYW1lRmlsZSc6CiAgICAgICAgICAgICAgZGF0YSA9IHsKICAgICAgICAgICAgICAgIG5ld25hbWU6IHRoYXQuY29udGV4dERhdGEucGF0aCArICdcXCcgKyB0aGF0LmZvcm1GaWxlLmZpbGVuYW1lLAogICAgICAgICAgICAgICAgb2xkbmFtZTogdGhhdC5jb250ZXh0RGF0YS5wYXRobmFtZSwKICAgICAgICAgICAgICAgIGZpbGVUb2tlbjogX3RoaXM4LmZpbGVUb2tlbgogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgcmVuYW1lKGRhdGEpLnRoZW4oLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHZhciBfcmVmMCA9IF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3IoKS5tKGZ1bmN0aW9uIF9jYWxsZWU5KHJlcykgewogICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yKCkudyhmdW5jdGlvbiAoX2NvbnRleHQ5KSB7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ5Lm4pIHsKICAgICAgICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAgdGhhdC4kc2V0KHRoYXQuY29udGV4dERhdGEsICd0aXRsZScsIHRoYXQuZm9ybUZpbGUuZmlsZW5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICB0aGF0LiRtZXNzYWdlLnN1Y2Nlc3MoJ+S/ruaUueaIkOWKnycpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhhdC5mb3JtU2hvdykgdGhhdC5mb3JtU2hvdyA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ5LmEoMik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9LCBfY2FsbGVlOSk7CiAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKF94OSkgewogICAgICAgICAgICAgICAgICByZXR1cm4gX3JlZjAuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgfSgpKS5jYXRjaChmdW5jdGlvbiAocmVzKSB7CiAgICAgICAgICAgICAgICB0aGF0LmNhdGNoRnVuKHJlcyk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90aGlzOC4kbWVzc2FnZS5lcnJvcignRmFpbCEnKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSwKICAgIC8qKg0KICAgICAqIOmAgOWHuuihqOWNlQ0KICAgICAqLwogICAgZm9ybUV4aXQ6IGZ1bmN0aW9uIGZvcm1FeGl0KCkgewogICAgICB0aGlzLmZvcm1TaG93ID0gZmFsc2U7CiAgICB9LAogICAgLyoqDQogICAgICog5aSE55CG5o6l5Y+j5Zue6LCDDQogICAgICogQHBhcmFtIHtPYmplY3R9IHJlcw0KICAgICAqLwogICAgY2F0Y2hGdW46IGZ1bmN0aW9uIGNhdGNoRnVuKHJlcykgewogICAgICBpZiAocmVzLnN0YXR1cykgewogICAgICAgIGlmIChyZXMuc3RhdHVzID09IDQwMCkgdGhpcy4kbWVzc2FnZS5lcnJvcihyZXMubXNnKTsKICAgICAgICBpZiAocmVzLnN0YXR1cyA9PSAxMTAwMDgpIHsKICAgICAgICAgIC8vIHRoaXMuJG1lc3NhZ2UuZXJyb3IocmVzLm1zZyk7CiAgICAgICAgICB0aGlzLmlzU2hvd0xvZ24gPSB0cnVlOwogICAgICAgICAgdGhpcy5pc1Nob3dMaXN0ID0gZmFsc2U7CiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gdGhpcy4kbWVzc2FnZS5lcnJvcign5paH5Lu257yW56CB5LiN6KKr5YW85a6577yM5peg5rOV5q2j56Gu6K+75Y+W5paH5Lu2IScpOwogICAgICB9CiAgICAgIC8v5YWz6Zet6JKZ54mI5bGCCiAgICAgIGlmICh0aGlzLnNwaW5TaG93KSB0aGlzLnNwaW5TaG93ID0gZmFsc2U7CiAgICAgIC8vIOWFs+mXreaWh+S7tuWIl+ihqOWxleekugogICAgICBpZiAodGhpcy5sb2FkaW5nKSB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgIH0sCiAgICBsb29wRGVsOiBmdW5jdGlvbiBsb29wRGVsKGRhdGEsIG5vZGVLZXkpIHsKICAgICAgdmFyIF90aGlzOSA9IHRoaXM7CiAgICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSwgaW5kZXgpIHsKICAgICAgICBpZiAoaXRlbS5ub2RlS2V5ID09PSBub2RlS2V5KSB7CiAgICAgICAgICByZXR1cm4gZGF0YS5zcGxpY2UoaW5kZXgsIDEpOwogICAgICAgIH0KICAgICAgICBpZiAoaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXM5Lmxvb3BEZWwoaXRlbS5jaGlsZHJlbiwgbm9kZUtleSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCiAgICAvKioNCiAgICAgKiDnqpflj6PmnIDlpKfljJYNCiAgICAgKi8KICAgIHdpbkNoYW5nZXM6IGZ1bmN0aW9uIHdpbkNoYW5nZXMoKSB7CiAgICAgIGlmICh0aGlzLmNsYXNzTmFtZSkgewogICAgICAgIHRoaXMuY2xhc3NOYW1lID0gJyc7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5jbGFzc05hbWUgPSAnZGl5LWZ1bGxzY3JlZW4nOwogICAgICB9CiAgICB9LAogICAgLyoqDQogICAgICog5YiH5o2i6YCJ6aG55Y2hDQogICAgICogQHBhcmFtIHtPYmplY3R9IGluZGV4DQogICAgICovCiAgICB0b2dnbGVFZGl0b3I6IGZ1bmN0aW9uIHRvZ2dsZUVkaXRvcigpIHsKICAgICAgdmFyIGluZGV4ID0gTnVtYmVyKHRoaXMuaW5kZXhFZGl0b3IpOwogICAgICB0aGlzLmNvZGUgPSB0aGlzLmVkaXRvckxpc3RbaW5kZXhdLm9sZENvZGU7IC8v6K6+572u5paH5Lu25omT5byA5pe255qE5Luj56CBCiAgICAgIHRoaXMuZWRpdG9yID0gdGhpcy5lZGl0b3JMaXN0W2luZGV4XS5lZGl0b3I7IC8v6K6+572u57yW6L6R5Zmo5a6e5L6LCiAgICB9LAogICAgaXNFZGl0TWFyazogZnVuY3Rpb24gaXNFZGl0TWFyayhyb3cpIHsKICAgICAgdmFyIF90aGlzMCA9IHRoaXM7CiAgICAgIHRyeSB7CiAgICAgICAgcm93LmlzX2VkaXQgPSB0cnVlOwogICAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICBfdGhpczAuJHJlZnMubWFyay5mb2N1cygpOwogICAgICAgIH0pOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTsKICAgICAgfQogICAgfSwKICAgIGlzRWRpdEJsdXI6IGZ1bmN0aW9uIGlzRWRpdEJsdXIocm93KSB7CiAgICAgIHZhciBfdGhpczEgPSB0aGlzOwogICAgICByb3cuaXNfZWRpdCA9IGZhbHNlOwogICAgICB2YXIgZGF0YSA9IHsKICAgICAgICBmdWxsX3BhdGg6IHJvdy5yZWFsX3BhdGgsCiAgICAgICAgbWFyazogcm93Lm1hcmsKICAgICAgfTsKICAgICAgbWFya1NhdmUodGhpcy5maWxlVG9rZW4sIGRhdGEpLnRoZW4oZnVuY3Rpb24gKHJlcykgewogICAgICAgIC8vIHRoaXMuJG1lc3NhZ2Uuc3VjY2VzcyhyZXMubXNnKTsKICAgICAgfSkuY2F0Y2goZnVuY3Rpb24gKGVycikgewogICAgICAgIF90aGlzMS4kbWVzc2FnZS5lcnJvcihlcnIubXNnKTsKICAgICAgfSk7CiAgICB9LAogICAgaGFuZGxlVGFiUmVtb3ZlOiBmdW5jdGlvbiBoYW5kbGVUYWJSZW1vdmUoaW5kZXgpIHsKICAgICAgdmFyIHRoYXQgPSB0aGlzOwoKICAgICAgLy8g5YWz6Zet6YCJ6aG55Y2hCiAgICAgIHRoYXQuZWRpdG9ySW5kZXhbaW5kZXhdLnRhYiA9IGZhbHNlOyAvLyDlhbPpl63pgInpobnljaEKICAgICAgLy8g5Yik5pat5b2T5YmN5paH5Lu25pyJ5rKh5pyJ5L+d5a2YCiAgICAgIGlmICghdGhhdC5lZGl0b3JMaXN0W2luZGV4XS5pc1NhdmUpIHsKICAgICAgICB0aGF0LiRNb2RhbC5jb25maXJtKHsKICAgICAgICAgIHRpdGxlOiAn5paH5Lu25pyq5L+d5a2YJywKICAgICAgICAgIGNvbnRlbnQ6ICfmgqjmmK/lkKbpnIDopoHkv53lrZjlvZPliY3mlofku7YnLAogICAgICAgICAgbG9hZGluZzogdHJ1ZSwKICAgICAgICAgIG9uT2s6IGZ1bmN0aW9uIG9uT2soKSB7CiAgICAgICAgICAgIC8vIOS/neWtmOaWh+S7tgogICAgICAgICAgICB0aGF0LnNhdmVmaWxlKGluZGV4KTsKICAgICAgICAgIH0sCiAgICAgICAgICBvbkNhbmNlbDogZnVuY3Rpb24gb25DYW5jZWwoKSB7CiAgICAgICAgICAgIHRoYXQuJG1lc3NhZ2UuaW5mbygn5Y+W5raI5L+d5a2YJyk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0sCiAgICAvL+e8lui+keWZqOeKtuaAgeWPmOWMlgogICAgZWRpdE1vZGFsQ2hhbmdlOiBmdW5jdGlvbiBlZGl0TW9kYWxDaGFuZ2UoKSB7CiAgICAgIHZhciB0aGF0ID0gdGhpczsKICAgICAgdGhhdC5lZGl0b3JMaXN0LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkgewogICAgICAgIGlmICh2YWx1ZS5pc1NhdmUgPT09IGZhbHNlKSB7CiAgICAgICAgICBpZiAoY29uZmlybSgiIi5jb25jYXQodGhhdC5lZGl0b3JJbmRleFtpbmRleF0udGl0bGUsICJcdTY1ODdcdTRFRjZcdTY3MkFcdTRGRERcdTVCNTgsXHU2NjJGXHU1NDI2XHU4OTgxXHU0RkREXHU1QjU4XHU4QkU1XHU2NTg3XHU0RUY2IikpKSB7CiAgICAgICAgICAgIC8vIOS/neWtmOW9k+WJjeaWh+S7tgogICAgICAgICAgICB0aGF0LnNhdmVmaWxlKGluZGV4LCB0cnVlKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoYXQuJG1lc3NhZ2UuaW5mbygiXHU1REYyXHU1M0Q2XHU2RDg4Ii5jb25jYXQodGhhdC5lZGl0b3JJbmRleFtpbmRleF0udGl0bGUsICJcdTY1ODdcdTRFRjZcdTRGRERcdTVCNTgiKSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIOmUgOavgeW9k+WJjee8lui+keWZqAogICAgICAgIHRoYXQuZWRpdG9yTGlzdFtpbmRleF0uZWRpdG9yLmRpc3Bvc2UoKTsKICAgICAgICB0aGF0LmVkaXRvckxpc3RbaW5kZXhdLmVkaXRvciA9IG51bGw7CiAgICAgIH0pOwogICAgICAvLyDliJ3lp4vor53mlbDmja4KICAgICAgdGhhdC5tb2RhbHMgPSBmYWxzZTsgLy/nvJbovpHlmajlvIDlhbMKICAgICAgdGhhdC5lZGl0b3IgPSAnJzsgLy/lvZPliY3nvJbovpHlmajlr7nosaEKICAgICAgdGhhdC5lZGl0b3JJbmRleCA9IFsKICAgICAgLy/pgInpobnljaHmlbDnu4QKICAgICAgewogICAgICAgIHRhYjogdHJ1ZSwKICAgICAgICBpbmRleDogJzAnLAogICAgICAgIHRpdGxlOiAnJywKICAgICAgICBpY29uOiAnJwogICAgICB9XTsKICAgICAgdGhhdC5lZGl0b3JMaXN0ID0gW107IC8v57yW6L6R5Zmo5pWw57uECiAgICAgIHRoYXQuaW5kZXhFZGl0b3IgPSAnMCc7IC8v5b2T5YmN57yW6L6R5Zmo57Si5byVCiAgICAgIHRoYXQuY29kZSA9ICcnOyAvL+W9k+WJjeaWh+S7tuaJk+W8gOaXtueahOWGheWuuQogICAgICB0aGF0Lm5hdkxpc3QgPSBbXTsgLy/lt6bkvqflr7zoiKrmlbDmja4KICAgICAgdGhhdC5uYXZJdGVtID0ge307IC8v5bem5L6n5a+86Iiq54K55Ye75piv6YCJ5Lit55qE5pWw5o2uCiAgICAgIHRoYXQuY29udGV4dERhdGEgPSBudWxsOyAvL+W3puS+p+WvvOiIquWPs+mUrueCueWHu+aYr+S6p+eUn+eahOaVsOaNruWvueixoQogICAgfQogIH0KfTs="},null]}