{"remainingRequest":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\xcjy-fvue\\src\\views\\patrolAndRescue\\HomePage\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\src\\views\\patrolAndRescue\\HomePage\\index.vue","mtime":1741928431670},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\babel.config.js","mtime":1741314102158},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9yZWdlbmVyYXRvclJ1bnRpbWUgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9yZWdlbmVyYXRvclJ1bnRpbWUuanMiOwppbXBvcnQgX2FzeW5jVG9HZW5lcmF0b3IgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3luY1RvR2VuZXJhdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmZvci1lYWNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnkuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcucGFkLXN0YXJ0LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyI7Ci8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCi8vCgppbXBvcnQgeyBkaWN0aW9uYXJ5RXNjYXBlIH0gZnJvbSAnQC91dGlscy9kaWN0aW9uYXJ5JzsKaW1wb3J0IHsgZ2V0VHJlZSwgdGFibGVEYXRhYSwgdGFibGVEYXRhYUxpc3QsIHRhYmxlRGF0YWIsIHRhYmxlRGF0YWJMaXN0LCB0YWJsZURhdGFjLCB0YWJsZURhdGFjTGlzdCB9IGZyb20gJ0AvYXBpL3BhdHJvbEFuZFJlc2N1ZS9ob21lUGFnZSc7CmltcG9ydCB7IFRhYmxlTWl4aW4gfSBmcm9tICdAL21peGlucy90YWJsZU1peGluJzsKaW1wb3J0IHBhZ2luYXRpb24gZnJvbSAnQC9jb21wb25lbnRzL1N1cGVyUGFnaW5hdGlvbi9pbmRleC52dWUnOwpleHBvcnQgZGVmYXVsdCB7CiAgbmFtZTogJ0hvbWVQYWdlJywKICBjb21wb25lbnRzOiB7CiAgICBwYWdpbmF0aW9uOiBwYWdpbmF0aW9uCiAgfSwKICBtaXhpbnM6IFtUYWJsZU1peGluXSwKICBjb21wdXRlZDoge30sCiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHsKICAgIHJldHVybiB7CiAgICAgIHBhZ2VSZXN1bHQ6IHsKICAgICAgICB0eXBlb2Y6IE9iamVjdCwKICAgICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdChfKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBwYWdlOiAxLAogICAgICAgICAgICBwYWdlU2l6ZTogMjAsCiAgICAgICAgICAgIHRvdGFsOiAwCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgfSwKICAgICAgcGFyYW1zOiB7CiAgICAgICAgcGFnZUJlYW46IHsKICAgICAgICAgIHBhZ2VTaXplOiAxMCwKICAgICAgICAgIHBhZ2U6IDEsCiAgICAgICAgICB0b3RhbDogMAogICAgICAgIH0KICAgICAgfSwKICAgICAgdGFza0xpc3RvdGhlcmFhYTogW10sCiAgICAgIC8v5Lu75Yqh5YiX6KGoCiAgICAgIHRhc2tMaXN0b3RoZXJiYmI6IFtdLAogICAgICAvL+S6i+S7tuafpeivouWIl+ihqAogICAgICB0aW1lU2hvdzogJ2RheScsCiAgICAgIC8vIOm7mOiupOmAieaLqeKAnOaXpeKAnQogICAgICB0YXNrTGlzdG90aGVyY2NjOiBbXSwKICAgICAgLy/lvILluLjkv6Hmga/liJfooagKICAgICAgcGFnaW5hdGlvbkFhYTogewogICAgICAgIHBhZ2VTaXplOiAxMCwKICAgICAgICBwYWdlOiAxLAogICAgICAgIHRvdGFsOiAwCiAgICAgIH0sCiAgICAgIC8vIHRhc2tMaXN0b3RoZXJhYWEg55qE5YiG6aG15Y+C5pWwCiAgICAgIHBhZ2luYXRpb25CYmI6IHsKICAgICAgICBwYWdlU2l6ZTogMTAsCiAgICAgICAgcGFnZTogMSwKICAgICAgICB0b3RhbDogMAogICAgICB9LAogICAgICAvLyB0YXNrTGlzdG90aGVyYmJiIOeahOWIhumhteWPguaVsAogICAgICBwYWdpbmF0aW9uQ2NjOiB7CiAgICAgICAgcGFnZVNpemU6IDEwLAogICAgICAgIHBhZ2U6IDEsCiAgICAgICAgdG90YWw6IDAKICAgICAgfSwKICAgICAgLy8gdGFza0xpc3RvdGhlcmNjYyDnmoTliIbpobXlj4LmlbAKICAgICAgZXZlbnRTdGF0dXM6IG51bGwsCiAgICAgIC8vIOW9k+WJjeeCueWHu+eahOS6i+S7tueKtuaAgS3kuovku7bmn6Xor6LliJfooagKICAgICAgY3VycmVudFR5cGU6IDEsCiAgICAgIC8vIOm7mOiupOexu+Wei+S4uuW3oeafpeS7u+WKoQogICAgICBiYWNrZ3JvdW5kSW1hZ2VVcmw6IHJlcXVpcmUoJ0AvYXNzZXRzL2ltZy9ob21lUGFnZS9kYW5nLnBuZycpLAogICAgICB0YWJsZURhdGE6IFtdLAogICAgICBjdXJyZW50TWVudTogJ2hvbWVQYWdlJywKICAgICAgdGFza0xpc3Q6IFtdLAogICAgICAvL+S6i+S7tuafpeivogogICAgICB0YXNrTGlzdG90aGVyOiBbXSwKICAgICAgLy/lvZPliY3ku7vliqEKICAgICAgdGFza0xpc3RvdGhlckxpc3Q6IFtdLAogICAgICAvL+W8guW4uOS/oeaBrwogICAgICBjdXJyZW50QWN0aXZlSW5kZXg6IC0xLAogICAgICAvLyDmlrDlop7lj5jph4/vvIzorrDlvZXlvZPliY3ngrnlh7vnmoTntKLlvJUKICAgICAgb3JnTGlzdDogW10sCiAgICAgIGN1cnJlbnRTdGFydFRpbWU6ICcnLAogICAgICAvLyDmlrDlop7lj5jph4/vvIzlrZjlgqjlvZPliY3lvIDlp4vml7bpl7QKICAgICAgY3VycmVudEVuZFRpbWU6ICcnIC8vIOaWsOWinuWPmOmHj++8jOWtmOWCqOW9k+WJjee7k+adn+aXtumXtAogICAgfTsKICB9LAogIGNyZWF0ZWQ6IGZ1bmN0aW9uIGNyZWF0ZWQoKSB7CiAgICAvLyDliJ3lp4vljJbpu5jorqTpgInkuK3igJzml6XigJ0KICAgIHRoaXMudGltZVNob3cgPSAnZGF5JzsKICAgIC8vIOiOt+WPluW9k+WJjeaXpeacnwogICAgdmFyIG5vdyA9IG5ldyBEYXRlKCk7CiAgICB2YXIgeWVhciA9IG5vdy5nZXRGdWxsWWVhcigpOwogICAgdmFyIG1vbnRoID0gU3RyaW5nKG5vdy5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTsgLy8g5pyI5Lu95LuOIDAg5byA5aeL77yM6ZyA6KaBICsxCiAgICB2YXIgZGF5ID0gU3RyaW5nKG5vdy5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7CiAgICB0aGlzLmN1cnJlbnRTdGFydFRpbWUgPSAiIi5jb25jYXQoeWVhciwgIi0iKS5jb25jYXQobW9udGgsICItIikuY29uY2F0KGRheSk7CiAgICB0aGlzLmN1cnJlbnRFbmRUaW1lID0gdGhpcy5jdXJyZW50U3RhcnRUaW1lOwoKICAgIC8vIOm7mOiupOeCueWHu+KAnOS6i+S7tuaAu+aVsCjku7Yp4oCdCiAgICB0aGlzLmhhbmRsZVRhc2tDbGljaygwKTsgLy8gMCDooajnpLrkuovku7bmgLvmlbAKICAgIHRoaXMudGFza0xpc3RvdGhlckRhdGEoKTsKICAgIHRoaXMudGFza0xpc3RvdGhlckxpc3REYXRhKCk7CiAgICB0aGlzLnRhc2tMaXN0RGF0YSh0aGlzLmN1cnJlbnRTdGFydFRpbWUsIHRoaXMuY3VycmVudEVuZFRpbWUpOwogICAgdGhpcy5MaXN0YWFhKCk7CiAgICB0aGlzLkxpc3RiYmIodGhpcy5jdXJyZW50U3RhcnRUaW1lLCB0aGlzLmN1cnJlbnRFbmRUaW1lKTsKICAgIHRoaXMuTGlzdGNjYygpOwogICAgdGhpcy5nZXRPcmdUcmVlRGF0YSgpOwogIH0sCiAgd2F0Y2g6IHsKICAgIC8vIOebkeWQrCB0aW1lU2hvdyDnmoTlj5jljJYKICAgIHRpbWVTaG93OiBmdW5jdGlvbiB0aW1lU2hvdyhuZXdWYWwpIHsKICAgICAgdGhpcy5oYW5kbGVUaW1lQ2hhbmdlKG5ld1ZhbCk7IC8vIOiwg+eUqOaXtumXtOWPmOWMluWkhOeQhuaWueazlQogICAgfSAvLyB0aGlzLm9wZW5QYWdlKCkKICB9LAogIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7CiAgICB2YXIgY3VycmVudFVzZXIgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdjdXJyZW50VXNlckRldGFpbCcpOwogICAgdGhpcy5uYW1lID0gSlNPTi5wYXJzZShjdXJyZW50VXNlcikudXNlci5mdWxsbmFtZTsKICAgIHRoaXMuZGVwdE5hbWUgPSBKU09OLnBhcnNlKGN1cnJlbnRVc2VyKS5vcmdbMF0uZGVwdE5hbWU7CiAgICB0aGlzLm9yZ05hbWUgPSBKU09OLnBhcnNlKGN1cnJlbnRVc2VyKS5vcmdbMF0ub3JnTmFtZTsKICB9LAogIG1ldGhvZHM6IHsKICAgIC8vIOi3s+i9rOWIsOS6i+S7tueZu+iusOmhtemdogogICAgbmF2aWdhdGVUb0V2ZW50UmVnaXN0cmF0aW9uYTogZnVuY3Rpb24gbmF2aWdhdGVUb0V2ZW50UmVnaXN0cmF0aW9uYSgpIHsKICAgICAgdGhpcy4kcm91dGVyLnB1c2goewogICAgICAgIHBhdGg6ICdwYXRyb2xBbmRSZXNjdWUvcm9hZFdhdGNoL2luc3BlY3Rpb25SZXN1bHRzJwogICAgICB9KTsKICAgIH0sCiAgICBuYXZpZ2F0ZVRvRXZlbnRSZWdpc3RyYXRpb25iOiBmdW5jdGlvbiBuYXZpZ2F0ZVRvRXZlbnRSZWdpc3RyYXRpb25iKCkgewogICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7CiAgICAgICAgcGF0aDogJ3BhdHJvbEFuZFJlc2N1ZS9jb21tYW5kRGlzcGF0Y2gvZXZlbnRSZWdpc3RyYXRpb24nCiAgICAgIH0pOwogICAgfSwKICAgIG5hdmlnYXRlVG9FdmVudFJlZ2lzdHJhdGlvbmM6IGZ1bmN0aW9uIG5hdmlnYXRlVG9FdmVudFJlZ2lzdHJhdGlvbmMoKSB7CiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsKICAgICAgICBwYXRoOiAncGF0cm9sQW5kUmVzY3VlL29ic3RhY2xlQ2xlYXJpbmdSZXNjdWUvcmVzY3VlUmVnaXN0cmF0aW9uJwogICAgICB9KTsKICAgIH0sCiAgICAvLyDlpITnkIbml7bpl7Tlj5jljJYKICAgIGhhbmRsZVRpbWVDaGFuZ2U6IGZ1bmN0aW9uIGhhbmRsZVRpbWVDaGFuZ2UodGltZVR5cGUpIHsKICAgICAgdmFyIHN0YXJ0VGltZSA9ICcnOwogICAgICB2YXIgZW5kVGltZSA9ICcnOwogICAgICB2YXIgbm93ID0gbmV3IERhdGUoKTsKICAgICAgdmFyIHllYXIgPSBub3cuZ2V0RnVsbFllYXIoKTsKICAgICAgdmFyIG1vbnRoID0gU3RyaW5nKG5vdy5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTsgLy8g5pyI5Lu95LuOIDAg5byA5aeL77yM6ZyA6KaBICsxCiAgICAgIHZhciBkYXkgPSBTdHJpbmcobm93LmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTsKICAgICAgc3dpdGNoICh0aW1lVHlwZSkgewogICAgICAgIGNhc2UgJ2RheSc6CiAgICAgICAgICAvLyDml6UKICAgICAgICAgIHN0YXJ0VGltZSA9ICIiLmNvbmNhdCh5ZWFyLCAiLSIpLmNvbmNhdChtb250aCwgIi0iKS5jb25jYXQoZGF5KTsKICAgICAgICAgIGVuZFRpbWUgPSBzdGFydFRpbWU7IC8vIOW8gOWni+aXtumXtOWSjOe7k+adn+aXtumXtOebuOWQjAogICAgICAgICAgY29uc29sZS5sb2coJ+W9k+WJjeaXpeacnzonLCBzdGFydFRpbWUpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAnbW9udGgnOgogICAgICAgICAgLy8g5pyICiAgICAgICAgICBzdGFydFRpbWUgPSAiIi5jb25jYXQoeWVhciwgIi0iKS5jb25jYXQobW9udGgsICItMDEiKTsgLy8g5b2T5YmN5pyI55qE56ys5LiA5aSpCiAgICAgICAgICBlbmRUaW1lID0gIiIuY29uY2F0KHllYXIsICItIikuY29uY2F0KG1vbnRoLCAiLSIpLmNvbmNhdChuZXcgRGF0ZSh5ZWFyLCBub3cuZ2V0TW9udGgoKSArIDEsIDApLmdldERhdGUoKSk7IC8vIOW9k+WJjeaciOeahOacgOWQjuS4gOWkqQogICAgICAgICAgY29uc29sZS5sb2coJ+W9k+WJjeaciOeahOesrOS4gOWkqTonLCBzdGFydFRpbWUpOwogICAgICAgICAgY29uc29sZS5sb2coJ+W9k+WJjeaciOeahOacgOWQjuS4gOWkqTonLCBlbmRUaW1lKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgJ3llYXInOgogICAgICAgICAgLy8g5bm0CiAgICAgICAgICBzdGFydFRpbWUgPSAiIi5jb25jYXQoeWVhciwgIi0wMS0wMSIpOyAvLyDlvZPliY3lubTnmoTnrKzkuIDlpKkKICAgICAgICAgIGVuZFRpbWUgPSAiIi5jb25jYXQoeWVhciwgIi0xMi0zMSIpOyAvLyDlvZPliY3lubTnmoTmnIDlkI7kuIDlpKkKICAgICAgICAgIGNvbnNvbGUubG9nKCflvZPliY3lubTnmoTnrKzkuIDlpKk6Jywgc3RhcnRUaW1lKTsKICAgICAgICAgIGNvbnNvbGUubG9nKCflvZPliY3lubTnmoTmnIDlkI7kuIDlpKk6JywgZW5kVGltZSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgc3RhcnRUaW1lID0gJyc7CiAgICAgICAgICBlbmRUaW1lID0gJyc7CiAgICAgIH0KICAgICAgLy8g5a2Y5YKo5b2T5YmN5pe26Ze06IyD5Zu0CiAgICAgIHRoaXMuY3VycmVudFN0YXJ0VGltZSA9IHN0YXJ0VGltZTsKICAgICAgdGhpcy5jdXJyZW50RW5kVGltZSA9IGVuZFRpbWU7CgogICAgICAvLyDosIPnlKggTGlzdGJiYiDmlrnms5XvvIzkvKDlhaXml7bpl7TojIPlm7QKICAgICAgdGhpcy5MaXN0YmJiKHN0YXJ0VGltZSwgZW5kVGltZSk7CiAgICAgIC8vIOiwg+eUqCB0YXNrTGlzdERhdGEg5pa55rOV77yM5Lyg5YWl5pe26Ze06IyD5Zu0CiAgICAgIHRoaXMudGFza0xpc3REYXRhKHN0YXJ0VGltZSwgZW5kVGltZSk7CiAgICB9LAogICAgZGljdGlvbmFyeUVzY2FwZTogZGljdGlvbmFyeUVzY2FwZSwKICAgIC8v5byC5bi45L+h5oGvCiAgICB0YXNrTGlzdG90aGVyTGlzdERhdGE6IGZ1bmN0aW9uIHRhc2tMaXN0b3RoZXJMaXN0RGF0YSgpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlKCkgewogICAgICAgIHZhciByZXNwb25zZTsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZSQoX2NvbnRleHQpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0LnByZXYgPSBfY29udGV4dC5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBfdGhpcy50YWJsZUxvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICAgIF9jb250ZXh0LnByZXYgPSAxOwogICAgICAgICAgICAgIGlmICghKCFfdGhpcy5vcmdMaXN0IHx8IF90aGlzLm9yZ0xpc3QubGVuZ3RoID09PSAwKSkgewogICAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDU7CiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzLmdldE9yZ1RyZWVEYXRhKCk7CiAgICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gNzsKICAgICAgICAgICAgICByZXR1cm4gdGFibGVEYXRhYihfdGhpcy5vcmdMaXN0KTsKICAgICAgICAgICAgY2FzZSA3OgogICAgICAgICAgICAgIHJlc3BvbnNlID0gX2NvbnRleHQuc2VudDsKICAgICAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UudmFsdWUpIHsKICAgICAgICAgICAgICAgIF90aGlzLnRhc2tMaXN0b3RoZXJMaXN0ID0gcmVzcG9uc2UudmFsdWU7IC8vIOWwhuaOpeWPo+i/lOWbnueahOaVsOaNrui1i+WAvOe7mSB0YXNrTGlzdG90aGVyCiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAxNDsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAxMToKICAgICAgICAgICAgICBfY29udGV4dC5wcmV2ID0gMTE7CiAgICAgICAgICAgICAgX2NvbnRleHQudDAgPSBfY29udGV4dFsiY2F0Y2giXSgxKTsKICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCfor7fmsYLmlbDmja7lpLHotKU6JywgX2NvbnRleHQudDApOwogICAgICAgICAgICBjYXNlIDE0OgogICAgICAgICAgICAgIF9jb250ZXh0LnByZXYgPSAxNDsKICAgICAgICAgICAgICBfdGhpcy50YWJsZUxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuZmluaXNoKDE0KTsKICAgICAgICAgICAgY2FzZSAxNzoKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWUsIG51bGwsIFtbMSwgMTEsIDE0LCAxN11dKTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgLy/kuovku7bnu5/orqEKICAgIHRhc2tMaXN0RGF0YTogZnVuY3Rpb24gdGFza0xpc3REYXRhKHN0YXJ0VGltZSwgZW5kVGltZSkgewogICAgICB2YXIgX3RoaXMyID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlMigpIHsKICAgICAgICB2YXIgcmVxdWVzdEJvZHksIHJlc3BvbnNlOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlMiQoX2NvbnRleHQyKSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDIucHJldiA9IF9jb250ZXh0Mi5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBjb25zb2xlLmxvZyhzdGFydFRpbWUsICfnu5/orqHml7bpl7QnKTsKICAgICAgICAgICAgICBfdGhpczIudGFibGVMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICBfY29udGV4dDIucHJldiA9IDI7CiAgICAgICAgICAgICAgaWYgKCEoIV90aGlzMi5vcmdMaXN0IHx8IF90aGlzMi5vcmdMaXN0Lmxlbmd0aCA9PT0gMCkpIHsKICAgICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gNjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDY7CiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzMi5nZXRPcmdUcmVlRGF0YSgpOwogICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgICAgLy8g5p6E6YCg6K+35rGC5L2TCiAgICAgICAgICAgICAgcmVxdWVzdEJvZHkgPSB7CiAgICAgICAgICAgICAgICBncm91cFJlbGF0aW9uOiAnQU5EJywKICAgICAgICAgICAgICAgIGdyb3VwVHJlZToge30sCiAgICAgICAgICAgICAgICBwYWdlQmVhbjogewogICAgICAgICAgICAgICAgICBwYWdlOiAxLAogICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogMTAsCiAgICAgICAgICAgICAgICAgIHNob3dUb3RhbDogdHJ1ZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHBhcmFtczogewogICAgICAgICAgICAgICAgICAvLyBzdGFydFRpbWU6IHN0YXJ0VGltZSwgLy8g5byA5aeL5pe26Ze0CiAgICAgICAgICAgICAgICAgIC8vIGVuZFRpbWU6IGVuZFRpbWUgLy8g57uT5p2f5pe26Ze0CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgcXVlcnlzOiBbXSwKICAgICAgICAgICAgICAgIHNvcnRlcjogW3sKICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAnQVNDJywKICAgICAgICAgICAgICAgICAgcHJvcGVydHk6ICcnCiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgIH07IC8vIOivt+axgiB0YWJsZURhdGEg5o6l5Y+jCiAgICAgICAgICAgICAgLy8g5omT5Y2w6K+35rGC5L2T77yM5qOA5p+l5piv5ZCm5q2j56GuCiAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVxdWVzdEJvZHksICfkvKDlhaXnu5/orqEnKTsKICAgICAgICAgICAgICBjb25zb2xlLmxvZygnUmVxdWVzdCBCb2R5OicsIEpTT04uc3RyaW5naWZ5KHJlcXVlc3RCb2R5LCBudWxsLCAyKSk7CiAgICAgICAgICAgICAgLy8g5omT5Y2w6K+35rGC5L2T77yM5qOA5p+l5piv5ZCm5q2j56GuCiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAxMTsKICAgICAgICAgICAgICByZXR1cm4gdGFibGVEYXRhYyhyZXF1ZXN0Qm9keSwgX3RoaXMyLm9yZ0xpc3QsIHN0YXJ0VGltZSwgZW5kVGltZSk7CiAgICAgICAgICAgIGNhc2UgMTE6CiAgICAgICAgICAgICAgcmVzcG9uc2UgPSBfY29udGV4dDIuc2VudDsKICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwb25zZSwgJzExMTExMTExMTExMTEyMjIyMjIyMjIyMicpOwogICAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS52YWx1ZSkgewogICAgICAgICAgICAgICAgX3RoaXMyLnRhc2tMaXN0ID0gcmVzcG9uc2UudmFsdWU7IC8vIOWwhuaOpeWPo+i/lOWbnueahOaVsOaNrui1i+WAvOe7mSB0YXNrTGlzdG90aGVyCiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMTk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMTY6CiAgICAgICAgICAgICAgX2NvbnRleHQyLnByZXYgPSAxNjsKICAgICAgICAgICAgICBfY29udGV4dDIudDAgPSBfY29udGV4dDJbImNhdGNoIl0oMik7CiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcign6K+35rGC5pWw5o2u5aSx6LSlOicsIF9jb250ZXh0Mi50MCk7CiAgICAgICAgICAgIGNhc2UgMTk6CiAgICAgICAgICAgICAgX2NvbnRleHQyLnByZXYgPSAxOTsKICAgICAgICAgICAgICBfdGhpczIudGFibGVMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Mi5maW5pc2goMTkpOwogICAgICAgICAgICBjYXNlIDIyOgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWUyLCBudWxsLCBbWzIsIDE2LCAxOSwgMjJdXSk7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIC8v5LqL5Lu25p+l6K+i54K55Ye7Leivt+axguWIl+ihqAogICAgaGFuZGxlVGFza0NsaWNrOiBmdW5jdGlvbiBoYW5kbGVUYXNrQ2xpY2soaW5kZXgpIHsKICAgICAgdGhpcy5jdXJyZW50QWN0aXZlSW5kZXggPSBpbmRleDsgLy8g5pu05paw5b2T5YmN54K55Ye755qE57Si5byVCiAgICAgIHN3aXRjaCAoaW5kZXgpIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgICAvLyDkuovku7bmgLvmlbAKICAgICAgICAgIHRoaXMuZXZlbnRTdGF0dXMgPSBudWxsOyAvLyDkuI3kvKAgZXZlbnRTdGF0dXMKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMToKICAgICAgICAgIC8vIOW+heaOpeWNleS6i+S7tgogICAgICAgICAgdGhpcy5ldmVudFN0YXR1cyA9IDE7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICAvLyDlpITnva7kuK3kuovku7YKICAgICAgICAgIHRoaXMuZXZlbnRTdGF0dXMgPSAyOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAzOgogICAgICAgICAgLy8g5aSE572u57uT5p2f5LqL5Lu2CiAgICAgICAgICB0aGlzLmV2ZW50U3RhdHVzID0gMzsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNDoKICAgICAgICAgIC8vIOW3suWKnue7k+S6i+S7tgogICAgICAgICAgdGhpcy5ldmVudFN0YXR1cyA9IDQ7CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgdGhpcy5ldmVudFN0YXR1cyA9IG51bGw7CiAgICAgIH0KICAgICAgY29uc29sZS5sb2codGhpcy5jdXJyZW50U3RhcnRUaW1lLCB0aGlzLmV2ZW50U3RhdHVzLCAn5pe26Ze0MTExMTExMTExMTExMTExMTExMTEnKTsgLy/kvKDov5vmnaXnmoQKICAgICAgLy8g5L2/55So5b2T5YmN5pe26Ze06IyD5Zu06LCD55SoIExpc3RiYmIKICAgICAgdGhpcy5MaXN0YmJiKHRoaXMuY3VycmVudFN0YXJ0VGltZSwgdGhpcy5jdXJyZW50RW5kVGltZSk7CiAgICB9LAogICAgLy/kuovku7bliJfooajmn6Xor6IKICAgIExpc3RiYmI6IGZ1bmN0aW9uIExpc3RiYmIoc3RhcnRUaW1lLCBlbmRUaW1lKSB7CiAgICAgIHZhciBfdGhpczMgPSB0aGlzOwogICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUzKCkgewogICAgICAgIHZhciByZXF1ZXN0Qm9keSwgcmVzcG9uc2U7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUzJChfY29udGV4dDMpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0My5wcmV2ID0gX2NvbnRleHQzLm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF90aGlzMy50YWJsZUxvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICAgIF9jb250ZXh0My5wcmV2ID0gMTsKICAgICAgICAgICAgICBpZiAoISghX3RoaXMzLm9yZ0xpc3QgfHwgX3RoaXMzLm9yZ0xpc3QubGVuZ3RoID09PSAwKSkgewogICAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSA1OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gNTsKICAgICAgICAgICAgICByZXR1cm4gX3RoaXMzLmdldE9yZ1RyZWVEYXRhKCk7CiAgICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgICAvLyDmnoTpgKDor7fmsYLkvZMKICAgICAgICAgICAgICByZXF1ZXN0Qm9keSA9IHsKICAgICAgICAgICAgICAgIGdyb3VwUmVsYXRpb246ICdBTkQnLAogICAgICAgICAgICAgICAgZ3JvdXBUcmVlOiB7fSwKICAgICAgICAgICAgICAgIHBhZ2VCZWFuOiB7CiAgICAgICAgICAgICAgICAgIHBhZ2U6IF90aGlzMy5wYWdpbmF0aW9uQmJiLnBhZ2UsCiAgICAgICAgICAgICAgICAgIC8vIOW9k+WJjemhteeggQogICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogX3RoaXMzLnBhZ2luYXRpb25CYmIucGFnZVNpemUsCiAgICAgICAgICAgICAgICAgIC8vIOavj+mhteadoeaVsAogICAgICAgICAgICAgICAgICBzaG93VG90YWw6IHRydWUKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBwYXJhbXM6IHsKICAgICAgICAgICAgICAgICAgc3RhcnRUaW1lOiBzdGFydFRpbWUsCiAgICAgICAgICAgICAgICAgIC8vIOW8gOWni+aXtumXtAogICAgICAgICAgICAgICAgICBlbmRUaW1lOiBlbmRUaW1lIC8vIOe7k+adn+aXtumXtAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHF1ZXJ5czogW3sKICAgICAgICAgICAgICAgICAgZ3JvdXA6ICdtYWluJywKICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiAnRVFVQUwnLAogICAgICAgICAgICAgICAgICBwYXJlbnRHcm91cDogJycsCiAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiAnZXZlbnRTdGF0dXMnLAogICAgICAgICAgICAgICAgICByZWxhdGlvbjogJ0FORCcsCiAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdGhpczMuZXZlbnRTdGF0dXMKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgZ3JvdXA6ICdtYWluJywKICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiAnSU4nLAogICAgICAgICAgICAgICAgICAvLyDkvb/nlKggSU4g5pON5L2c56ymCiAgICAgICAgICAgICAgICAgIHBhcmVudEdyb3VwOiAnJywKICAgICAgICAgICAgICAgICAgcHJvcGVydHk6ICdyb2FkX2lkXycsCiAgICAgICAgICAgICAgICAgIC8vIOWxnuaAp+WQjQogICAgICAgICAgICAgICAgICByZWxhdGlvbjogJ0FORCcsCiAgICAgICAgICAgICAgICAgIHZhbHVlOiBfdGhpczMub3JnTGlzdCAvLyDkvKDlhaUgb3JnTGlzdCDmlbDnu4QKICAgICAgICAgICAgICAgIH1dLAogICAgICAgICAgICAgICAgc29ydGVyOiBbewogICAgICAgICAgICAgICAgICBkaXJlY3Rpb246ICdBU0MnLAogICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogJycKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgfTsgLy8g5omT5Y2w6K+35rGC5L2T77yM5qOA5p+l5piv5ZCm5q2j56GuCiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1JlcXVlc3QgQm9keTonLCByZXF1ZXN0Qm9keSk7CiAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSA5OwogICAgICAgICAgICAgIHJldHVybiB0YWJsZURhdGFiTGlzdChyZXF1ZXN0Qm9keSk7CiAgICAgICAgICAgIGNhc2UgOToKICAgICAgICAgICAgICByZXNwb25zZSA9IF9jb250ZXh0My5zZW50OwogICAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yb3dzKSB7CiAgICAgICAgICAgICAgICBfdGhpczMudGFza0xpc3RvdGhlcmJiYiA9IHJlc3BvbnNlLnJvd3M7IC8vIOWwhuaOpeWPo+i/lOWbnueahOaVsOaNrui1i+WAvOe7mSB0YXNrTGlzdG90aGVyCiAgICAgICAgICAgICAgICBfdGhpczMucGFnaW5hdGlvbkJiYi50b3RhbCA9IHJlc3BvbnNlLnRvdGFsIHx8IDA7IC8vIOabtOaWsOaAu+adoeaVsAogICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UsICfkuovku7bliJfooagnKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX2NvbnRleHQzLm5leHQgPSAxNjsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAxMzoKICAgICAgICAgICAgICBfY29udGV4dDMucHJldiA9IDEzOwogICAgICAgICAgICAgIF9jb250ZXh0My50MCA9IF9jb250ZXh0M1siY2F0Y2giXSgxKTsKICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCfor7fmsYLmlbDmja7lpLHotKU6JywgX2NvbnRleHQzLnQwKTsKICAgICAgICAgICAgY2FzZSAxNjoKICAgICAgICAgICAgICBfY29udGV4dDMucHJldiA9IDE2OwogICAgICAgICAgICAgIF90aGlzMy50YWJsZUxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmZpbmlzaCgxNik7CiAgICAgICAgICAgIGNhc2UgMTk6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTMsIG51bGwsIFtbMSwgMTMsIDE2LCAxOV1dKTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgLy/lvZPliY3ku7vliqEKICAgIHRhc2tMaXN0b3RoZXJEYXRhOiBmdW5jdGlvbiB0YXNrTGlzdG90aGVyRGF0YSgpIHsKICAgICAgdmFyIF90aGlzNCA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTQoKSB7CiAgICAgICAgdmFyIHJlc3BvbnNlOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlNCQoX2NvbnRleHQ0KSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDQucHJldiA9IF9jb250ZXh0NC5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBfdGhpczQudGFibGVMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICBfY29udGV4dDQucHJldiA9IDE7CiAgICAgICAgICAgICAgaWYgKCEoIV90aGlzNC5vcmdMaXN0IHx8IF90aGlzNC5vcmdMaXN0Lmxlbmd0aCA9PT0gMCkpIHsKICAgICAgICAgICAgICAgIF9jb250ZXh0NC5uZXh0ID0gNTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfY29udGV4dDQubmV4dCA9IDU7CiAgICAgICAgICAgICAgcmV0dXJuIF90aGlzNC5nZXRPcmdUcmVlRGF0YSgpOwogICAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgX2NvbnRleHQ0Lm5leHQgPSA3OwogICAgICAgICAgICAgIHJldHVybiB0YWJsZURhdGFhKF90aGlzNC5vcmdMaXN0KTsKICAgICAgICAgICAgY2FzZSA3OgogICAgICAgICAgICAgIHJlc3BvbnNlID0gX2NvbnRleHQ0LnNlbnQ7CiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnZhbHVlKSB7CiAgICAgICAgICAgICAgICBfdGhpczQudGFza0xpc3RvdGhlciA9IHJlc3BvbnNlLnZhbHVlOyAvLyDlsIbmjqXlj6Pov5Tlm57nmoTmlbDmja7otYvlgLznu5kgdGFza0xpc3RvdGhlcgogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfY29udGV4dDQubmV4dCA9IDE0OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDExOgogICAgICAgICAgICAgIF9jb250ZXh0NC5wcmV2ID0gMTE7CiAgICAgICAgICAgICAgX2NvbnRleHQ0LnQwID0gX2NvbnRleHQ0WyJjYXRjaCJdKDEpOwogICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ+ivt+axguaVsOaNruWksei0pTonLCBfY29udGV4dDQudDApOwogICAgICAgICAgICBjYXNlIDE0OgogICAgICAgICAgICAgIF9jb250ZXh0NC5wcmV2ID0gMTQ7CiAgICAgICAgICAgICAgX3RoaXM0LnRhYmxlTG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDQuZmluaXNoKDE0KTsKICAgICAgICAgICAgY2FzZSAxNzoKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0LnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlNCwgbnVsbCwgW1sxLCAxMSwgMTQsIDE3XV0pOwogICAgICB9KSkoKTsKICAgIH0sCiAgICAvL+S7u+WKoeeCueWHuy3or7fmsYLliJfooagKICAgIHRhc2tDaGFuZ2U6IGZ1bmN0aW9uIHRhc2tDaGFuZ2UoaW5kZXgpIHsKICAgICAgaWYgKGluZGV4ID09PSAwKSB7CiAgICAgICAgdGhpcy5jdXJyZW50VHlwZSA9IDE7IC8vIOW3oeafpeS7u+WKoQogICAgICB9IGVsc2UgaWYgKGluZGV4ID09PSAxKSB7CiAgICAgICAgdGhpcy5jdXJyZW50VHlwZSA9IDI7IC8vIOS6i+S7tuWkhOe9ruS7u+WKoQogICAgICB9IGVsc2UgaWYgKGluZGV4ID09PSAyKSB7CiAgICAgICAgdGhpcy5jdXJyZW50VHlwZSA9IDM7IC8vIOaVkeaPtOS7u+WKoQogICAgICB9CiAgICAgIHRoaXMuTGlzdGFhYSgpOyAvLyDosIPnlKjmjqXlj6PliLfmlrDmlbDmja4KICAgIH0sCiAgICAvLyDmoLnmja4gY3VycmVudFR5cGUg6L+U5Zue5a+55bqU55qE5pe26Ze05a2X5q61CiAgICBnZXRUYXNrVGltZTogZnVuY3Rpb24gZ2V0VGFza1RpbWUodGFzaykgewogICAgICBpZiAodGhpcy5jdXJyZW50VHlwZSA9PT0gMSkgewogICAgICAgIHJldHVybiB0YXNrLnRhc2tEYXRlOyAvLyDlt6Hmn6Xku7vliqEKICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRUeXBlID09PSAyKSB7CiAgICAgICAgcmV0dXJuIHRhc2suZXZlbnRUaW1lOyAvLyDkuovku7blpITnva7ku7vliqEKICAgICAgfSBlbHNlIGlmICh0aGlzLmN1cnJlbnRUeXBlID09PSAzKSB7CiAgICAgICAgcmV0dXJuIHRhc2sucmVzY3VlVGltZTsgLy8g5pWR5o+05Lu75YqhCiAgICAgIH0KICAgICAgcmV0dXJuICcnOyAvLyDpu5jorqTov5Tlm57nqbrlrZfnrKbkuLIKICAgIH0sCiAgICAvL+S7u+WKoeWIl+ihqAogICAgTGlzdGFhYTogZnVuY3Rpb24gTGlzdGFhYSgpIHsKICAgICAgdmFyIF90aGlzNSA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTUoKSB7CiAgICAgICAgdmFyIHJlcXVlc3RCb2R5LCByZXNwb25zZTsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTUkKF9jb250ZXh0NSkgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ1LnByZXYgPSBfY29udGV4dDUubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgX3RoaXM1LnRhYmxlTG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgX2NvbnRleHQ1LnByZXYgPSAxOwogICAgICAgICAgICAgIGlmICghKCFfdGhpczUub3JnTGlzdCB8fCBfdGhpczUub3JnTGlzdC5sZW5ndGggPT09IDApKSB7CiAgICAgICAgICAgICAgICBfY29udGV4dDUubmV4dCA9IDU7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX2NvbnRleHQ1Lm5leHQgPSA1OwogICAgICAgICAgICAgIHJldHVybiBfdGhpczUuZ2V0T3JnVHJlZURhdGEoKTsKICAgICAgICAgICAgY2FzZSA1OgogICAgICAgICAgICAgIC8vIOaehOmAoOivt+axguS9kwogICAgICAgICAgICAgIHJlcXVlc3RCb2R5ID0gewogICAgICAgICAgICAgICAgZ3JvdXBSZWxhdGlvbjogJ0FORCcsCiAgICAgICAgICAgICAgICBncm91cFRyZWU6IHt9LAogICAgICAgICAgICAgICAgcGFnZUJlYW46IHsKICAgICAgICAgICAgICAgICAgcGFnZTogX3RoaXM1LnBhZ2luYXRpb25BYWEucGFnZSwKICAgICAgICAgICAgICAgICAgLy8g5b2T5YmN6aG156CBCiAgICAgICAgICAgICAgICAgIHBhZ2VTaXplOiBfdGhpczUucGFnaW5hdGlvbkFhYS5wYWdlU2l6ZSwKICAgICAgICAgICAgICAgICAgLy8g5q+P6aG15p2h5pWwCiAgICAgICAgICAgICAgICAgIHNob3dUb3RhbDogdHJ1ZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHBhcmFtczoge30sCiAgICAgICAgICAgICAgICBxdWVyeXM6IFt7CiAgICAgICAgICAgICAgICAgIGdyb3VwOiAnbWFpbicsCiAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogJ0lOJywKICAgICAgICAgICAgICAgICAgLy8g5L2/55SoIElOIOaTjeS9nOespgogICAgICAgICAgICAgICAgICBwYXJlbnRHcm91cDogJycsCiAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiAncm9hZF9pZF8nLAogICAgICAgICAgICAgICAgICAvLyDlsZ7mgKflkI0KICAgICAgICAgICAgICAgICAgcmVsYXRpb246ICdBTkQnLAogICAgICAgICAgICAgICAgICB2YWx1ZTogX3RoaXM1Lm9yZ0xpc3QgLy8g5Lyg5YWlIG9yZ0xpc3Qg5pWw57uECiAgICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgIHNvcnRlcjogW3sKICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uOiAnQVNDJywKICAgICAgICAgICAgICAgICAgcHJvcGVydHk6ICcnCiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgX2NvbnRleHQ1Lm5leHQgPSA4OwogICAgICAgICAgICAgIHJldHVybiB0YWJsZURhdGFhTGlzdChyZXF1ZXN0Qm9keSwgX3RoaXM1LmN1cnJlbnRUeXBlKTsKICAgICAgICAgICAgY2FzZSA4OgogICAgICAgICAgICAgIHJlc3BvbnNlID0gX2NvbnRleHQ1LnNlbnQ7CiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJvd3MpIHsKICAgICAgICAgICAgICAgIF90aGlzNS50YXNrTGlzdG90aGVyYWFhID0gcmVzcG9uc2Uucm93czsgLy8g5bCG5o6l5Y+j6L+U5Zue55qE5pWw5o2u6LWL5YC857uZIHRhc2tMaXN0b3RoZXIKICAgICAgICAgICAgICAgIF90aGlzNS5wYWdpbmF0aW9uQWFhLnRvdGFsID0gcmVzcG9uc2UudG90YWwgfHwgMDsgLy8g5pu05paw5oC75p2h5pWwCiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9jb250ZXh0NS5uZXh0ID0gMTU7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMTI6CiAgICAgICAgICAgICAgX2NvbnRleHQ1LnByZXYgPSAxMjsKICAgICAgICAgICAgICBfY29udGV4dDUudDAgPSBfY29udGV4dDVbImNhdGNoIl0oMSk7CiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcign6K+35rGC5pWw5o2u5aSx6LSlOicsIF9jb250ZXh0NS50MCk7CiAgICAgICAgICAgIGNhc2UgMTU6CiAgICAgICAgICAgICAgX2NvbnRleHQ1LnByZXYgPSAxNTsKICAgICAgICAgICAgICBfdGhpczUudGFibGVMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NS5maW5pc2goMTUpOwogICAgICAgICAgICBjYXNlIDE4OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDUuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWU1LCBudWxsLCBbWzEsIDEyLCAxNSwgMThdXSk7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIC8v5byC5bi454K55Ye7CiAgICBjaGFuZ2U6IGZ1bmN0aW9uIGNoYW5nZShpbmRleCkgewogICAgICB2YXIgaGFuZGxlVHlwZSA9IG51bGw7CiAgICAgIGlmIChpbmRleCA9PT0gMSkgewogICAgICAgIGhhbmRsZVR5cGUgPSAxOyAvLyDnjrDlnLrlpITnkIYKICAgICAgfSBlbHNlIGlmIChpbmRleCA9PT0gMikgewogICAgICAgIGhhbmRsZVR5cGUgPSAyOyAvLyDkuIrmiqXkuK3lv4MKICAgICAgfQogICAgICB0aGlzLkxpc3RjY2MoaGFuZGxlVHlwZSk7IC8vIOiwg+eUqCBMaXN0Y2NjIOaWueazleW5tuS8oOmAkiBoYW5kbGVUeXBlCiAgICB9LAogICAgLy/lvILluLjliJfooagKICAgIExpc3RjY2M6IGZ1bmN0aW9uIExpc3RjY2MoaGFuZGxlVHlwZSkgewogICAgICB2YXIgX3RoaXM2ID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlNigpIHsKICAgICAgICB2YXIgbm93LCB5ZWFyLCBtb250aCwgZGF5LCBmb3JtYXR0ZWREYXRlLCByZXF1ZXN0Qm9keSwgcmVzcG9uc2U7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWU2JChfY29udGV4dDYpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0Ni5wcmV2ID0gX2NvbnRleHQ2Lm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF90aGlzNi50YWJsZUxvYWRpbmcgPSB0cnVlOwogICAgICAgICAgICAgIF9jb250ZXh0Ni5wcmV2ID0gMTsKICAgICAgICAgICAgICBpZiAoISghX3RoaXM2Lm9yZ0xpc3QgfHwgX3RoaXM2Lm9yZ0xpc3QubGVuZ3RoID09PSAwKSkgewogICAgICAgICAgICAgICAgX2NvbnRleHQ2Lm5leHQgPSA1OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9jb250ZXh0Ni5uZXh0ID0gNTsKICAgICAgICAgICAgICByZXR1cm4gX3RoaXM2LmdldE9yZ1RyZWVEYXRhKCk7CiAgICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgICAvLyDojrflj5blvZPliY3ml7bpl7TlubbmoLzlvI/ljJbkuLogWVlZWS1NTS1ERAogICAgICAgICAgICAgIG5vdyA9IG5ldyBEYXRlKCk7CiAgICAgICAgICAgICAgeWVhciA9IG5vdy5nZXRGdWxsWWVhcigpOwogICAgICAgICAgICAgIG1vbnRoID0gU3RyaW5nKG5vdy5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTsgLy8g5pyI5Lu95LuOIDAg5byA5aeL77yM6ZyA6KaBICsxCiAgICAgICAgICAgICAgZGF5ID0gU3RyaW5nKG5vdy5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7CiAgICAgICAgICAgICAgZm9ybWF0dGVkRGF0ZSA9ICIiLmNvbmNhdCh5ZWFyLCAiLSIpLmNvbmNhdChtb250aCwgIi0iKS5jb25jYXQoZGF5KTsgLy8g5qC85byP5YyW5Li6IFlZWVktTU0tREQKICAgICAgICAgICAgICAvLyDmnoTpgKDor7fmsYLkvZMKICAgICAgICAgICAgICByZXF1ZXN0Qm9keSA9IHsKICAgICAgICAgICAgICAgIGdyb3VwUmVsYXRpb246ICdBTkQnLAogICAgICAgICAgICAgICAgZ3JvdXBUcmVlOiB7fSwKICAgICAgICAgICAgICAgIHBhZ2VCZWFuOiB7CiAgICAgICAgICAgICAgICAgIHBhZ2U6IF90aGlzNi5wYWdpbmF0aW9uQ2NjLnBhZ2UsCiAgICAgICAgICAgICAgICAgIC8vIOW9k+WJjemhteeggQogICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogX3RoaXM2LnBhZ2luYXRpb25DY2MucGFnZVNpemUsCiAgICAgICAgICAgICAgICAgIC8vIOavj+mhteadoeaVsAogICAgICAgICAgICAgICAgICBzaG93VG90YWw6IHRydWUKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBwYXJhbXM6IHt9LAogICAgICAgICAgICAgICAgcXVlcnlzOiBbewogICAgICAgICAgICAgICAgICAnZ3JvdXAnOiAnbWFpbicsCiAgICAgICAgICAgICAgICAgICdvcGVyYXRpb24nOiAnRVFVQUwnLAogICAgICAgICAgICAgICAgICAncGFyZW50R3JvdXAnOiAnJywKICAgICAgICAgICAgICAgICAgJ3Byb3BlcnR5JzogJ1RBU0tfREFURV8nLAogICAgICAgICAgICAgICAgICAncmVsYXRpb24nOiAnQU5EJywKICAgICAgICAgICAgICAgICAgJ3ZhbHVlJzogZm9ybWF0dGVkRGF0ZQogICAgICAgICAgICAgICAgfSwgewogICAgICAgICAgICAgICAgICBncm91cDogJ21haW4nLAogICAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdJTicsCiAgICAgICAgICAgICAgICAgIC8vIOS9v+eUqCBJTiDmk43kvZznrKYKICAgICAgICAgICAgICAgICAgcGFyZW50R3JvdXA6ICcnLAogICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogJ3JvYWRfaWRfJywKICAgICAgICAgICAgICAgICAgLy8g5bGe5oCn5ZCNCiAgICAgICAgICAgICAgICAgIHJlbGF0aW9uOiAnQU5EJywKICAgICAgICAgICAgICAgICAgdmFsdWU6IF90aGlzNi5vcmdMaXN0IC8vIOS8oOWFpSBvcmdMaXN0IOaVsOe7hAogICAgICAgICAgICAgICAgfV0sCiAgICAgICAgICAgICAgICBzb3J0ZXI6IFt7CiAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogJ0FTQycsCiAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiAnJwogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICB9OyAvLyDlpoLmnpwgaGFuZGxlVHlwZSDkuI3kuLrnqbrvvIzmt7vliqDliLAgcXVlcnlzIOS4rQogICAgICAgICAgICAgIGlmIChoYW5kbGVUeXBlICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICByZXF1ZXN0Qm9keS5xdWVyeXMucHVzaCh7CiAgICAgICAgICAgICAgICAgIGdyb3VwOiAnbWFpbicsCiAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogJ0VRVUFMJywKICAgICAgICAgICAgICAgICAgcGFyZW50R3JvdXA6ICcnLAogICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogJ2hhbmRsZVR5cGUnLAogICAgICAgICAgICAgICAgICByZWxhdGlvbjogJ0FORCcsCiAgICAgICAgICAgICAgICAgIHZhbHVlOiBoYW5kbGVUeXBlCiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX2NvbnRleHQ2Lm5leHQgPSAxNDsKICAgICAgICAgICAgICByZXR1cm4gdGFibGVEYXRhY0xpc3QocmVxdWVzdEJvZHkpOwogICAgICAgICAgICBjYXNlIDE0OgogICAgICAgICAgICAgIHJlc3BvbnNlID0gX2NvbnRleHQ2LnNlbnQ7CiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJvd3MpIHsKICAgICAgICAgICAgICAgIF90aGlzNi50YXNrTGlzdG90aGVyY2NjID0gcmVzcG9uc2Uucm93czsgLy8g5bCG5o6l5Y+j6L+U5Zue55qE5pWw5o2u6LWL5YC857uZIHRhc2tMaXN0b3RoZXIKICAgICAgICAgICAgICAgIF90aGlzNi5wYWdpbmF0aW9uQ2NjLnRvdGFsID0gcmVzcG9uc2UudG90YWwgfHwgMDsgLy8g5pu05paw5oC75p2h5pWwCiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9jb250ZXh0Ni5uZXh0ID0gMjE7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMTg6CiAgICAgICAgICAgICAgX2NvbnRleHQ2LnByZXYgPSAxODsKICAgICAgICAgICAgICBfY29udGV4dDYudDAgPSBfY29udGV4dDZbImNhdGNoIl0oMSk7CiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcign6K+35rGC5pWw5o2u5aSx6LSlOicsIF9jb250ZXh0Ni50MCk7CiAgICAgICAgICAgIGNhc2UgMjE6CiAgICAgICAgICAgICAgX2NvbnRleHQ2LnByZXYgPSAyMTsKICAgICAgICAgICAgICBfdGhpczYudGFibGVMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ni5maW5pc2goMjEpOwogICAgICAgICAgICBjYXNlIDI0OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDYuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWU2LCBudWxsLCBbWzEsIDE4LCAyMSwgMjRdXSk7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIC8vIOiOt+WPluWFrOWPuOagkS3lsIZpZOmbhuWQiOi1t+adpeS8oOe7meWQjuerrwogICAgZ2V0T3JnVHJlZURhdGE6IGZ1bmN0aW9uIGdldE9yZ1RyZWVEYXRhKGNhbGxiYWNrKSB7CiAgICAgIHZhciBfdGhpczcgPSB0aGlzOwogICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU3KCkgewogICAgICAgIHZhciB2YWx1ZWRhdGEsIGFsbElkczsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTckKF9jb250ZXh0NykgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ3LnByZXYgPSBfY29udGV4dDcubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgX2NvbnRleHQ3LnByZXYgPSAwOwogICAgICAgICAgICAgIF90aGlzNy50cmVlTG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgX2NvbnRleHQ3Lm5leHQgPSA0OwogICAgICAgICAgICAgIHJldHVybiBnZXRUcmVlKCk7CiAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICB2YWx1ZWRhdGEgPSBfY29udGV4dDcuc2VudDsKICAgICAgICAgICAgICAvLyDmj5Dlj5bmiYDmnIkgcm9hZExpc3Qg5Lit55qEIGlkCiAgICAgICAgICAgICAgYWxsSWRzID0gW107CiAgICAgICAgICAgICAgdmFsdWVkYXRhLnZhbHVlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgICAgICAgIGlmIChpdGVtLnJvYWRMaXN0ICYmIGl0ZW0ucm9hZExpc3QubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgICBpdGVtLnJvYWRMaXN0LmZvckVhY2goZnVuY3Rpb24gKHJvYWQpIHsKICAgICAgICAgICAgICAgICAgICBpZiAocm9hZC5pZCkgewogICAgICAgICAgICAgICAgICAgICAgYWxsSWRzLnB1c2gocm9hZC5pZCk7IC8vIOWwhiBpZCDmt7vliqDliLDmlbDnu4TkuK0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIF90aGlzNy5vcmdMaXN0ID0gYWxsSWRzOwogICAgICAgICAgICAgIGNvbnNvbGUubG9nKF90aGlzNy5vcmdMaXN0LCAnaWTmlbDnu4QnKTsKICAgICAgICAgICAgY2FzZSA5OgogICAgICAgICAgICAgIF9jb250ZXh0Ny5wcmV2ID0gOTsKICAgICAgICAgICAgICBfdGhpczcudHJlZUxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayhfdGhpczcudHJlZURhdGEpOwogICAgICAgICAgICAgIC8vIHRoaXMudGFibGVMb2FkaW5nID0gZmFsc2UKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ3LmZpbmlzaCg5KTsKICAgICAgICAgICAgY2FzZSAxMzoKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ3LnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlNywgbnVsbCwgW1swLCwgOSwgMTNdXSk7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIC8vIOS7u+WKoeWIl+ihqOWIhumhteS6i+S7tgogICAgaGFuZGxlU2l6ZUNoYW5nZUFhYTogZnVuY3Rpb24gaGFuZGxlU2l6ZUNoYW5nZUFhYShwYWdlU2l6ZSkgewogICAgICB0aGlzLnBhZ2luYXRpb25BYWEucGFnZVNpemUgPSBwYWdlU2l6ZTsKICAgICAgdGhpcy5wYWdpbmF0aW9uQWFhLnBhZ2UgPSAxOyAvLyDph43nva7kuLrnrKzkuIDpobUKICAgICAgdGhpcy5MaXN0YWFhKCk7IC8vIOmHjeaWsOivt+axguaVsOaNrgogICAgfSwKICAgIGhhbmRsZUN1cnJlbnRDaGFuZ2VBYWE6IGZ1bmN0aW9uIGhhbmRsZUN1cnJlbnRDaGFuZ2VBYWEocGFnZSkgewogICAgICB0aGlzLnBhZ2luYXRpb25BYWEucGFnZSA9IHBhZ2U7CiAgICAgIHRoaXMuTGlzdGFhYSgpOyAvLyDph43mlrDor7fmsYLmlbDmja4KICAgIH0sCiAgICAvLyDkuovku7bmn6Xor6LliJfooajliIbpobXkuovku7YKICAgIGhhbmRsZVNpemVDaGFuZ2VCYmI6IGZ1bmN0aW9uIGhhbmRsZVNpemVDaGFuZ2VCYmIocGFnZVNpemUpIHsKICAgICAgdGhpcy5wYWdpbmF0aW9uQmJiLnBhZ2VTaXplID0gcGFnZVNpemU7CiAgICAgIHRoaXMucGFnaW5hdGlvbkJiYi5wYWdlID0gMTsgLy8g6YeN572u5Li656ys5LiA6aG1CiAgICAgIHRoaXMuTGlzdGJiYih0aGlzLmN1cnJlbnRTdGFydFRpbWUsIHRoaXMuY3VycmVudEVuZFRpbWUpOyAvLyDph43mlrDor7fmsYLmlbDmja4KICAgIH0sCiAgICBoYW5kbGVDdXJyZW50Q2hhbmdlQmJiOiBmdW5jdGlvbiBoYW5kbGVDdXJyZW50Q2hhbmdlQmJiKHBhZ2UpIHsKICAgICAgdGhpcy5wYWdpbmF0aW9uQmJiLnBhZ2UgPSBwYWdlOwogICAgICB0aGlzLkxpc3RiYmIodGhpcy5jdXJyZW50U3RhcnRUaW1lLCB0aGlzLmN1cnJlbnRFbmRUaW1lKTsgLy8g6YeN5paw6K+35rGC5pWw5o2uCiAgICB9LAogICAgLy8g5byC5bi45YiX6KGo5YiG6aG15LqL5Lu2CiAgICBoYW5kbGVTaXplQ2hhbmdlQ2NjOiBmdW5jdGlvbiBoYW5kbGVTaXplQ2hhbmdlQ2NjKHBhZ2VTaXplKSB7CiAgICAgIHRoaXMucGFnaW5hdGlvbkNjYy5wYWdlU2l6ZSA9IHBhZ2VTaXplOwogICAgICB0aGlzLnBhZ2luYXRpb25DY2MucGFnZSA9IDE7IC8vIOmHjee9ruS4uuesrOS4gOmhtQogICAgICB0aGlzLkxpc3RjY2MoKTsgLy8g6YeN5paw6K+35rGC5pWw5o2uCiAgICB9LAogICAgaGFuZGxlQ3VycmVudENoYW5nZUNjYzogZnVuY3Rpb24gaGFuZGxlQ3VycmVudENoYW5nZUNjYyhwYWdlKSB7CiAgICAgIHRoaXMucGFnaW5hdGlvbkNjYy5wYWdlID0gcGFnZTsKICAgICAgdGhpcy5MaXN0Y2NjKCk7IC8vIOmHjeaWsOivt+axguaVsOaNrgogICAgfQogIH0KfTs="},null]}