{"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\\components\\MineMap\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\src\\components\\MineMap\\index.vue","mtime":1742501335225},{"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:aW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmRlc2NyaXB0aW9uLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmNvbnN0cnVjdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IuZm9yLWVhY2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZnJlZXplLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL3dlYi5kb20tY29sbGVjdGlvbnMuZm9yLWVhY2guanMiOwovLwovLwovLwovLwoKaW1wb3J0IHBhdHJvSWNvbiBmcm9tICdAL3ZpZXdzL2JpZ1NjcmVlbi9wYXRyb2xSZXNjdWUvaW1hZ2UvcGF0cm9sLWljb24ucG5nJzsKaW1wb3J0IHJlc2N1ZUljb24gZnJvbSAnQC92aWV3cy9iaWdTY3JlZW4vcGF0cm9sUmVzY3VlL2ltYWdlL3Jlc2N1ZS1pY29uLnBuZyc7CmltcG9ydCBlbWVyZ2VyRXZlbnRJY29uIGZyb20gJ0Avdmlld3MvYmlnU2NyZWVuL3BhdHJvbFJlc2N1ZS9pbWFnZS9lbWVyZ2VyLWV2ZW50LWljb24ucG5nJzsKaW1wb3J0IHJlc2N1ZUV2ZW50SWNvbiBmcm9tICdAL3ZpZXdzL2JpZ1NjcmVlbi9wYXRyb2xSZXNjdWUvaW1hZ2UvcmVzY3VlLWV2ZW50LWljb24ucG5nJzsKaW1wb3J0IHJvYWRJY29uIGZyb20gJ0Avdmlld3MvYmlnU2NyZWVuL3BhdHJvbFJlc2N1ZS9pbWFnZS9jYXJkUnJvYWQucG5nJzsKaW1wb3J0IHBpY2t1cEljb24gZnJvbSAnQC92aWV3cy9iaWdTY3JlZW4vcGF0cm9sUmVzY3VlL2ltYWdlL3BpY2t1cC5wbmcnOwpleHBvcnQgZGVmYXVsdCB7CiAgbmFtZTogJ01pbmVNYXAnLAogIC8vIE1haW4KICBwcm9wczogewogICAgLy8g6buY6K6k5Zyw5Zu+5Yqg6L296YWN572uCiAgICBkZWZhdWx0T3B0aW9uczogewogICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHsKICAgICAgICByZXR1cm4ge307CiAgICAgIH0sCiAgICAgIHR5cGU6IE9iamVjdCwKICAgICAgcmVxdWlyZWQ6IGZhbHNlCiAgICB9LAogICAgLy8g6Ieq5a6a5LmJ57G75ZCNCiAgICBjdXN0b21DbGFzczogewogICAgICBkZWZhdWx0OiAnJywKICAgICAgdHlwZTogU3RyaW5nLAogICAgICByZXF1aXJlZDogZmFsc2UKICAgIH0sCiAgICAvLyDoh6rlrprkuYnngrnkvY3pm4blkIgKICAgIG1hcmtlcnM6IHsKICAgICAgZGVmYXVsdDogZnVuY3Rpb24gX2RlZmF1bHQoKSB7CiAgICAgICAgcmV0dXJuIFtdOwogICAgICB9LAogICAgICB0eXBlOiBBcnJheSwKICAgICAgcmVxdWlyZWQ6IGZhbHNlCiAgICB9LAogICAgLy8g6Ieq5a6a5LmJ57q/6ZuG5ZCICiAgICBsaW5lczogewogICAgICBkZWZhdWx0OiBmdW5jdGlvbiBfZGVmYXVsdCgpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0sCiAgICAgIHR5cGU6IEFycmF5LAogICAgICByZXF1aXJlZDogZmFsc2UKICAgIH0sCiAgICAvLyDoh6rlrprkuYnpnaLpm4blkIgKICAgIHBvbHlnb25zOiB7CiAgICAgIGRlZmF1bHQ6IGZ1bmN0aW9uIF9kZWZhdWx0KCkgewogICAgICAgIHJldHVybiBbXTsKICAgICAgfSwKICAgICAgdHlwZTogQXJyYXksCiAgICAgIHJlcXVpcmVkOiBmYWxzZQogICAgfQogIH0sCiAgZGF0YTogZnVuY3Rpb24gZGF0YSgpIHsKICAgIHJldHVybiB7CiAgICAgIG1hcE9wdGlvbnM6IHsKICAgICAgICAvLyBzdHlsZTogJ2h0dHBzOi8vc2VydmljZS5taW5lZGF0YS5jbi9tYXAvc29sdS9zdHlsZS8xMTAwMScgLyog5bqV5Zu+5qC35byPICovLAogICAgICAgIC8vIHN0eWxlOiAnbWluaU1hcC9zZXJ2aWNlL3NvbHUvc3R5bGUvaWQvMTY5MzInIC8qIOW6leWbvuagt+W8jyAqLywKICAgICAgICBzdHlsZTogJ2h0dHBzOi8vbWFwLmhvcGUuY21ldDE5NjUuY29tOjU4MDAwL3NlcnZpY2Uvc29sdS9zdHlsZS9pZC8xNjkzMicgLyog5bqV5Zu+5qC35byPICovLAogICAgICAgIGNlbnRlcjogWzEwNy44NTU4NSwgMjguNDY1OTA4XSAvKuWcsOWbvuS4reW/g+eCuSovLAogICAgICAgIHpvb206IDYgLyrlnLDlm77pu5jorqTnvKnmlL7nrYnnuqcqLywKICAgICAgICBwaXRjaDogMCAvKuWcsOWbvuS/r+S7sOinkuW6piovLAogICAgICAgIG1heFpvb206IDIwIC8q5Zyw5Zu+5pyA5aSn57yp5pS+562J57qnKi8sCiAgICAgICAgbWluWm9vbTogMyAvKuWcsOWbvuacgOWwj+e8qeaUvuetiee6pyovCiAgICAgIH0sCiAgICAgIG1pbmVNYXA6IE9iamVjdC5mcmVlemUobWluZW1hcCksCiAgICAgIC8vIG1pbmVNYXDmj5Lku7YKICAgICAgbWFwOiBudWxsLAogICAgICAvLyDlnLDlm77lrp7kvovlr7nosaEKICAgICAgbWFwTG9hZGVkOiBmYWxzZSwKICAgICAgYm91bmRhcnlMaW5lRmFjZTogW3sKICAgICAgICAvLyDlnLDlm77nnIHku73ovrnnlYwgIGxheWVySWRs6L6555WM57q/IGxheWVySWRmIOi+ueeVjOmdogogICAgICAgIGNvZGU6ICdTQycsCiAgICAgICAgbGF5ZXJJZGw6ICcyMDE4N2FjNzM2N2UxNDAzNGI4YzE5YTQwYTMzZmUzMCcsCiAgICAgICAgbGF5ZXJJZGY6ICc0Mzk0ODc2NDYwZjZjM2JkMzRkMDYxNWJmMDRjZmY0NycKICAgICAgfSwgewogICAgICAgIGNvZGU6ICdBSCcsCiAgICAgICAgbGF5ZXJJZGw6ICdlZjAxYTAxNjlhYWVjODFlNzdlOWYwMDQ4Y2ViOTcxMycsCiAgICAgICAgbGF5ZXJJZGY6ICczZGRlNTEwYzQ0NjIzMGNiZDRmZGQxNWM1ZmI4NTQxNicKICAgICAgfSwgewogICAgICAgIGNvZGU6ICdZTicsCiAgICAgICAgbGF5ZXJJZGw6ICcwNmZjMDIzMGRhZDQzN2U4NWQyNDYwMGUwNjUxNjU4NycsCiAgICAgICAgbGF5ZXJJZGY6ICcwMzFlNWU2MWRmNzM3NzhiY2UyYzJkODJhNGZjMGExYycKICAgICAgfSwgewogICAgICAgIGNvZGU6ICdHWicsCiAgICAgICAgbGF5ZXJJZGw6ICc2YzY2Y2RiYWRkYmNmODM5YTUyOWIwM2JjZWUyMzI2NicsCiAgICAgICAgbGF5ZXJJZGY6ICdkOTYwY2U0ZjBmZTNlYWZlZWJmMDJhOTA4ZTI1OTEwYicKICAgICAgfSwgewogICAgICAgIGNvZGU6ICdDUScsCiAgICAgICAgbGF5ZXJJZGw6ICdkZmM5Nzc5YTUxZGU3OWIyZWI0MDc5MGY2MTM5NjRlMicsCiAgICAgICAgbGF5ZXJJZGY6ICdiMzc1NzNkNWQ3M2YyMjNhYTVjZjQyOTNlZmVkYTNjMCcKICAgICAgfSwgewogICAgICAgIGNvZGU6ICdYSicsCiAgICAgICAgbGF5ZXJJZGw6ICdiNmY4YzczYjJkMzE0YmQ2ZTA5MTAxMmZkNzY5OGU5NCcsCiAgICAgICAgbGF5ZXJJZGY6ICcyMzhhNWU5ZGU1NmZhYTczODU4NzNhYWFkZjNhZDY3ZCcKICAgICAgfSwgewogICAgICAgIGNvZGU6ICdITicsCiAgICAgICAgbGF5ZXJJZGw6ICc0ZWRiZTk1ZTNlYzg3ODYyNzZiYjM5Y2U3YzQyNDUzZicsCiAgICAgICAgbGF5ZXJJZGY6ICdjMWM1YzA0MDI1NzMyNjM1MmQ2OTQ1MjhiN2UzM2ZhYycKICAgICAgfV0sCiAgICAgIC8vIOmHjeW6hiAxNzY2MDE3NDcyNjk3NDc1MDcyCiAgICAgIC8v5LqR5Y2XICAgMTc2NjAxNzk3NjIwMjY5ODc1MgogICAgICAvL+Wbm+W3nSAxNzY2MDE5MzIyODk3MjQ0MTYwCiAgICAgIHByb3ZpbmNlTWFya2VyOiBbewogICAgICAgIHpiOiBbMTA3LjU2OTg1NSwgMzAuMzY3MDk1XSwKICAgICAgICBpZDogJzE0MzAwNDk1NTA1Mzc3MjM5MDQnLAogICAgICAgIC8v6YeN5bqGCiAgICAgICAgem9vbTogNi44CiAgICAgIH0sIHsKICAgICAgICB6YjogWzEwMi45Mjg5OTUsIDMwLjUyNDg3XSwKICAgICAgICBpZDogJyIxNTUxOTczNjM0NTY1Nzg3NjM3IicsCiAgICAgICAgem9vbTogNS44IC8v5Zub5bedCiAgICAgIH0sIHsKICAgICAgICB6YjogWzEwMS41OTMxMDMsIDI1LjM1MzM3NV0sCiAgICAgICAgaWQ6ICcxNTUxOTczNjMwMTAyMDgxNTM2JywKICAgICAgICAvL+S6keWNlwogICAgICAgIHpvb206IDYKICAgICAgfSwgewogICAgICAgIHpiOiBbMTA2LjY0MTI0MywgMjcuMTA3OTddLAogICAgICAgIGlkOiAnR1onLAogICAgICAgIHpvb206IDYuNQogICAgICB9LCB7CiAgICAgICAgemI6IFsxMTcuMjI5OTI5LCAzMi4zMjUzOThdLAogICAgICAgIGlkOiAnQUgnLAogICAgICAgIHpvb206IDYuNQogICAgICB9XSwKICAgICAgaW50ZXJ2YWxJZDogbnVsbCwKICAgICAgc3RhcnRSZXNjdWVpbnRlcnZhbElkOiBudWxsLAogICAgICByZXNjdWVCbGlua0ludGVydmFsczogW10sCiAgICAgIGlkTGlzdDogW10sCiAgICAgIHNvdXJjZUlkTGlzdDogW10sCiAgICAgIHJlc2N1ZUlkTGlzdDogW10sCiAgICAgIHJlc2N1ZVNvdXJjZUlkTGlzdDogW10sCiAgICAgIC8v5Zu+5bGC6LWE5rqQaWQKICAgICAgbWFya2Vyc1Jlc2N1ZTogW10sCiAgICAgIG1hcmtlclJlc2N1ZUV2ZW50OiBbXSwKICAgICAgbWFya2VyRW1lcmdlbmNpZXM6IFtdLAogICAgICBtYXJrZXJPbmxpbmVDYXI6IFtdLAogICAgICBtYXJrZXJPbmx5Q2FyOiBbXSwKICAgICAgb25saW5lQ2FyQ2xpY2s6IGZhbHNlLAogICAgICBjb3VudDogMCwKICAgICAgcGF0cm9sQ2xpY2s6IGZhbHNlLAogICAgICByZXNjdWVDbGljazogZmFsc2UsCiAgICAgIGVtZXJnZW5jaWVzQ2xpY2s6IGZhbHNlLAogICAgICByZXNjdWVFdmVudENsaWNrOiBmYWxzZSwKICAgICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgIGV2ZW50TWFya2VyczogW10sCiAgICAgIC8vIOS6i+S7tumpu+eCuQogICAgICB0YXNrTWFya2VyczogW10sCiAgICAgIC8vIOS7u+WKoempu+eCuQogICAgICBqeVBsYWNlTWFya2VyczogW10sCiAgICAgIC8vIOW3oeafpempu+eCuQogICAgICB4Y1BsYWNlTWFya2VyczogW10gLy8g5pWR5o+06am754K5CiAgICB9OwogIH0sCiAgY3JlYXRlZDogZnVuY3Rpb24gY3JlYXRlZCgpIHsKICAgIC8vIOmFjee9riBrZXnjgIFzb2x1dGlvbgogICAgdGhpcy5taW5lTWFwLmtleSA9ICczMGJlNzgzMWNhZjg0Njg1Yjk0ZTc4NzI3ZTRjZTI1Zic7CiAgICB0aGlzLm1pbmVNYXAuc29sdXRpb24gPSAxNjkzMjsKICAgIHRoaXMubWluZU1hcC5kb21haW5VcmwgPSAnaHR0cHM6Ly9tYXAuaG9wZS5jbWV0MTk2NS5jb206NTgwMDAnOyAvKiBNaW5lTWFw5qC55Z+f5ZCN5Zyw5Z2AICovCiAgICAvKiBNaW5lTWFw55+i6YeP5pWw5o2u5pyN5Yqh5qC55Z+f5ZCN5Zyw5Z2AICovCiAgICB0aGlzLm1pbmVNYXAuZGF0YURvbWFpblVybCA9ICdodHRwczovL21hcC5ob3BlLmNtZXQxOTY1LmNvbTo1ODAwMCc7CiAgICAvKiBNaW5lTWFw55+i6YeP5pWw5o2u5pyN5Yqh5paw6KeE6IyD5qC55Z+f5ZCN5Zyw5Z2AICovCiAgICB0aGlzLm1pbmVNYXAuc2VydmVyRG9tYWluVXJsID0gJ2h0dHBzOi8vbWFwLmhvcGUuY21ldDE5NjUuY29tOjU4MDAwJzsKICAgIC8qIE1pbmVNYXDlupXlm77pm6rnoqflm77lnLDlnYAgKi8KICAgIHRoaXMubWluZU1hcC5zcHJpdGVVcmwgPSBbJ2h0dHBzOi8vbWFwLmhvcGUuY21ldDE5NjUuY29tOjU4MDAwL21pbmVtYXBhcGkvenN4ei96c3h6J107IC8vICIuL21hcHJlc291cmNlL3Nwcml0ZS9zcHJpdGUiLAogICAgLyogTWluZU1hcOWQjuWPsOacjeWKoeagueWcsOWdgCAqLwogICAgdGhpcy5taW5lTWFwLnNlcnZpY2VVcmwgPSAnaHR0cHM6Ly9tYXAuaG9wZS5jbWV0MTk2NS5jb206NTgwMDAvc2VydmljZS8nOwoKICAgIC8vIOWQiOW5tuimhueblum7mOiupOmFjee9rumhuQogICAgdGhpcy5tYXBPcHRpb25zID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB0aGlzLm1hcE9wdGlvbnMpLCB0aGlzLmRlZmF1bHRPcHRpb25zKTsKICB9LAogIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7CiAgICB0aGlzLmluaXRNaW5lTWFwKCk7CiAgfSwKICBtZXRob2RzOiB7CiAgICAvLyDliqDovb1taW5lTWFwMkTlnLDlm74KICAgIGluaXRNaW5lTWFwOiBmdW5jdGlvbiBpbml0TWluZU1hcCgpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgLy8g5Yid5aeL5YyW5Zyw5Zu+5a6e5L6LCiAgICAgIHRoaXMubWFwID0gbmV3IHRoaXMubWluZU1hcC5NYXAoX29iamVjdFNwcmVhZCh7CiAgICAgICAgY29udGFpbmVyOiB0aGlzLiRyZWZzLm1hcAogICAgICB9LCB0aGlzLm1hcE9wdGlvbnMpKS5vbignbG9hZCcsIGZ1bmN0aW9uIChfKSB7CiAgICAgICAgX3RoaXMuc2V0SGluaWdodCgpOyAvLyDnoa7kv53lnKjlnLDlm77liqDovb3lrozmiJDlkI7osIPnlKggc2V0SGluaWdodAogICAgICAgIF90aGlzLm1hcExvYWRlZCA9IHRydWU7IC8vIOW9k+WcsOWbvuWKoOi9veWujOaIkOaXtu+8jOiuvue9ruagh+W/l+S4uiB0cnVlCiAgICAgIH0pLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnJvcikgewogICAgICAgIHJldHVybiBfdGhpcy4kZW1pdCgnb25FcnJvcicsIGVycm9yKTsKICAgICAgfSk7CiAgICB9LAogICAgLy/orr7nva7pq5jkuq7ljLrln58KICAgIHNldEhpbmlnaHQ6IGZ1bmN0aW9uIHNldEhpbmlnaHQoKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICBpZiAodGhpcy5tYXApIHsKICAgICAgICB0aGlzLmJvdW5kYXJ5TGluZUZhY2UuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsKICAgICAgICAgIF90aGlzMi5tYXAuc2V0TGF5b3V0UHJvcGVydHkoZWwubGF5ZXJJZGwsICd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTsKICAgICAgICAgIF90aGlzMi5tYXAuc2V0TGF5b3V0UHJvcGVydHkoZWwubGF5ZXJJZGYsICd2aXNpYmlsaXR5JywgJ3Zpc2libGUnKTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLiRlbWl0KCdvbkxvYWQnLCB0aGlzLm1hcCk7CiAgICAgIH0KICAgIH0sCiAgICAvL+WcsOWbvuS4reW/g+eCueWIh+aNoi10ZXN0CiAgICBjaGFuZ2VNYXBDZW50ZXI6IGZ1bmN0aW9uIGNoYW5nZU1hcENlbnRlcih2YWwpIHsKICAgICAgdmFyIF90aGlzMyA9IHRoaXM7CiAgICAgIHRoaXMucHJvdmluY2VNYXJrZXIuZm9yRWFjaChmdW5jdGlvbiAoZWwpIHsKICAgICAgICBpZiAodmFsID09PSBlbC5pZCkgewogICAgICAgICAgX3RoaXMzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIF90aGlzMy5tYXAuZmx5VG8oewogICAgICAgICAgICAgIGNlbnRlcjogZWwuemIsCiAgICAgICAgICAgICAgem9vbTogZWwuem9vbQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9LAogICAgLy8g6YeN5paw5Yqg6L295Zyw5Zu+CiAgICByZXNldE1hcDogZnVuY3Rpb24gcmVzZXRNYXAoY2FsbGJhY2spIHsKICAgICAgdmFyIF90aGlzNCA9IHRoaXM7CiAgICAgIGlmICh0aGlzLm1hcCAmJiB0aGlzLm1hcExvYWRlZCkgewogICAgICAgIC8vIOenu+mZpOaJgOacieWKqOaAgea3u+WKoOeahOagh+iusOOAgee6v+WSjOmdogogICAgICAgIHRoaXMubWFya2Vycy5mb3JFYWNoKGZ1bmN0aW9uIChtYXJrZXIpIHsKICAgICAgICAgIHJldHVybiBtYXJrZXIucmVtb3ZlKCk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5saW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChsaW5lKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXM0Lm1hcC5yZW1vdmVMYXllcihsaW5lLmlkKTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLnBvbHlnb25zLmZvckVhY2goZnVuY3Rpb24gKHBvbHlnb24pIHsKICAgICAgICAgIHJldHVybiBfdGhpczQubWFwLnJlbW92ZUxheWVyKHBvbHlnb24uaWQpOwogICAgICAgIH0pOwoKICAgICAgICAvLyDmuIXnqbrlrZjlgqjnmoTlm77lsYLlvJXnlKgKICAgICAgICB0aGlzLm1hcmtlcnMubGVuZ3RoID0gMDsKICAgICAgICB0aGlzLmxpbmVzLmxlbmd0aCA9IDA7CiAgICAgICAgdGhpcy5wb2x5Z29ucy5sZW5ndGggPSAwOwoKICAgICAgICAvLyDph43mlrDlupTnlKjlupXlm77moLflvI8KICAgICAgICB2YXIgX3RoaXMkbWFwT3B0aW9ucyA9IHRoaXMubWFwT3B0aW9ucywKICAgICAgICAgIGNlbnRlciA9IF90aGlzJG1hcE9wdGlvbnMuY2VudGVyLAogICAgICAgICAgem9vbSA9IF90aGlzJG1hcE9wdGlvbnMuem9vbTsKICAgICAgICB0aGlzLm1hcC5zZXRDZW50ZXIoY2VudGVyKTsKICAgICAgICB0aGlzLm1hcC5zZXRab29tKHpvb20pOwogICAgICB9CiAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKHRoaXMubWFwKTsKICAgIH0sCiAgICAvL+a4hemZpOW3oeafpempu+eCueWbvuWxguagh+iusAogICAgY2xlYXJMYXlNYXJrZXI6IGZ1bmN0aW9uIGNsZWFyTGF5TWFya2VyKCkgewogICAgICB2YXIgX3RoaXM1ID0gdGhpczsKICAgICAgdGhpcy5tYXJrZXJzLmZvckVhY2goZnVuY3Rpb24gKG1hcmtlcikgewogICAgICAgIHJldHVybiBtYXJrZXIucmVtb3ZlKCk7CiAgICAgIH0pOwogICAgICB0aGlzLm1hcmtlcnMubGVuZ3RoID0gMDsgLy8g5riF56m65qCH6K6w5pWw57uECiAgICAgIC8v56e76Zmk5pWw5o2u5rqQCiAgICAgIHRoaXMuc291cmNlSWRMaXN0LmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICBfdGhpczUubWFwLnJlbW92ZVNvdXJjZShpdGVtKTsKICAgICAgfSk7CiAgICAgIHRoaXMuc291cmNlSWRMaXN0Lmxlbmd0aCA9IDA7CiAgICAgIC8vIOenu+mZpOi3r+auteWbvuWxggogICAgICB0aGlzLmlkTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgaWYgKF90aGlzNS5tYXAuZ2V0TGF5ZXIoaXRlbSkpIHsKICAgICAgICAgIF90aGlzNS5tYXAucmVtb3ZlTGF5ZXIoaXRlbSk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5pZExpc3QubGVuZ3RoID0gMDsKICAgICAgLy8gdGhpcy5zdG9wQmxpbmsoKQogICAgICAvLyB0aGlzLnN0b3BCbGlua2luZygpCiAgICB9LAogICAgLy/muIXpmaTmlZHmj7Tpqbvngrnlm77lsYLmoIforrAKICAgIGNsZWFyTGF5UmVzY3VlTWFrZXI6IGZ1bmN0aW9uIGNsZWFyTGF5UmVzY3VlTWFrZXIoKSB7CiAgICAgIHZhciBfdGhpczYgPSB0aGlzOwogICAgICB0aGlzLm1hcmtlcnNSZXNjdWUuZm9yRWFjaChmdW5jdGlvbiAobWFya2VyKSB7CiAgICAgICAgcmV0dXJuIG1hcmtlci5yZW1vdmUoKTsKICAgICAgfSk7CiAgICAgIHRoaXMubWFya2Vyc1Jlc2N1ZS5sZW5ndGggPSAwOyAvLyDmuIXnqbrmoIforrDmlbDnu4QKICAgICAgLy/np7vpmaTmlbDmja7mupAKICAgICAgdGhpcy5yZXNjdWVTb3VyY2VJZExpc3QuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgIF90aGlzNi5tYXAucmVtb3ZlU291cmNlKGl0ZW0pOwogICAgICB9KTsKICAgICAgdGhpcy5yZXNjdWVTb3VyY2VJZExpc3QubGVuZ3RoID0gMDsKICAgICAgLy8g56e76Zmk6Lev5q615Zu+5bGCCiAgICAgIHRoaXMucmVzY3VlSWRMaXN0LmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICBpZiAoX3RoaXM2Lm1hcC5nZXRMYXllcihpdGVtKSkgewogICAgICAgICAgX3RoaXM2Lm1hcC5yZW1vdmVMYXllcihpdGVtKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLnJlc2N1ZUlkTGlzdC5sZW5ndGggPSAwOwogICAgICB0aGlzLnN0b3BSZXNjdWVTdGFydEJsaW5raW5nKCk7CiAgICB9LAogICAgLy/muIXpmaTovabovobmo4DmtYvmoIforrAKICAgIGNsZWFyQ2FyTWFya2VyOiBmdW5jdGlvbiBjbGVhckNhck1hcmtlcigpIHsKICAgICAgdGhpcy5tYXJrZXJPbmxpbmVDYXIuZm9yRWFjaChmdW5jdGlvbiAobWFya2VyKSB7CiAgICAgICAgbWFya2VyLnJlbW92ZSgpOwogICAgICB9KTsKICAgICAgdGhpcy5tYXJrZXJPbmxpbmVDYXIubGVuZ3RoID0gMDsKICAgICAgdGhpcy5tYXJrZXJPbmx5Q2FyLmZvckVhY2goZnVuY3Rpb24gKG1hcmtlcikgewogICAgICAgIG1hcmtlci5yZW1vdmUoKTsKICAgICAgfSk7CiAgICAgIHRoaXMubWFya2VyT25seUNhci5sZW5ndGggPSAwOwogICAgfSwKICAgIC8v5pS55Y+Y5Zyw5Zu+5Lit5b+D54K5CiAgICBjaGFuZ2VDZW50ZXI6IGZ1bmN0aW9uIGNoYW5nZUNlbnRlcih2YWwpIHsKICAgICAgaWYgKHRoaXMubWFwKSB7CiAgICAgICAgLy8gdGhpcy5tYXAgLy8g5ZCM5pe25Lyg5YWl57yp5pS+57qn5Yir5ZKM5Lit5b+D54K557uP57qs5bqmCiAgICAgICAgLy8gICAuc2V0Wm9vbUFuZENlbnRlcig4LCB2YWwpIC8v6K6+572u5Zyw5Zu+5bGC57qnCiAgICAgICAgdGhpcy5tYXAuZmx5VG8oewogICAgICAgICAgY2VudGVyOiB2YWwsCiAgICAgICAgICB6b29tOiA2LjUKICAgICAgICB9KTsKICAgICAgfQogICAgfSwKICAgIC8qKg0KICAgICAqIEBkZXNjcmlwdGlvbjoNCiAgICAgKiBAcGFyYW0geyp9IHR5cGUg57G75Z6LDQogICAgICogQHJldHVybiB7Kn0NCiAgICAgKi8KICAgIHJlbW92ZU1hcmtlcjogZnVuY3Rpb24gcmVtb3ZlTWFya2VyKHR5cGUpIHsKICAgICAgdGhpc1siIi5jb25jYXQodHlwZSwgIk1hcmtlcnMiKV0uZm9yRWFjaChmdW5jdGlvbiAobWFya2VyKSB7CiAgICAgICAgcmV0dXJuIG1hcmtlci5yZW1vdmUoKTsKICAgICAgfSk7CiAgICB9LAogICAgcmVtb3ZlQWxsTWFya2VyOiBmdW5jdGlvbiByZW1vdmVBbGxNYXJrZXIoKSB7CiAgICAgIHRoaXMuZXZlbnRNYXJrZXJzLmZvckVhY2goZnVuY3Rpb24gKG1hcmtlcikgewogICAgICAgIHJldHVybiBtYXJrZXIucmVtb3ZlKCk7CiAgICAgIH0pOwogICAgICB0aGlzLnRhc2tNYXJrZXJzLmZvckVhY2goZnVuY3Rpb24gKG1hcmtlcikgewogICAgICAgIHJldHVybiBtYXJrZXIucmVtb3ZlKCk7CiAgICAgIH0pOwogICAgICB0aGlzLmp5UGxhY2VNYXJrZXJzLmZvckVhY2goZnVuY3Rpb24gKG1hcmtlcikgewogICAgICAgIHJldHVybiBtYXJrZXIucmVtb3ZlKCk7CiAgICAgIH0pOwogICAgICB0aGlzLnhjUGxhY2VNYXJrZXJzLmZvckVhY2goZnVuY3Rpb24gKG1hcmtlcikgewogICAgICAgIHJldHVybiBtYXJrZXIucmVtb3ZlKCk7CiAgICAgIH0pOwogICAgfSwKICAgIC8qKg0KICAgICAqIEBkZXNjcmlwdGlvbjoNCiAgICAgKiBAcGFyYW0ge0FycmF5fSBtYXJrZXJzIOeCueS9jembhuWQiA0KICAgICAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIOexu+Weiw0KICAgICAqIEByZXR1cm4geyB2b2lkIH0NCiAgICAgKi8KICAgIC8vIOWcsOWbvuaJk+eCuQogICAgbWluZW1hcE1hcmtlcjogZnVuY3Rpb24gbWluZW1hcE1hcmtlcihtYXJrZXJzLCB0eXBlKSB7CiAgICAgIHZhciBfdGhpczcgPSB0aGlzOwogICAgICBtYXJrZXJzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICBpZiAoaXRlbS5sbmcgJiYgaXRlbS5sYXQpIHsKICAgICAgICAgIGl0ZW0ubG5nbGF0ID0gW2l0ZW0ubG5nLCBpdGVtLmxhdF07CiAgICAgICAgICAvLyDliJvlu7pkaXbkvZzkuLrmoIforrDngrkKICAgICAgICAgIHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgICAgZWwuY2xhc3NOYW1lID0gJ21hcC1wb2ludCc7CgogICAgICAgICAgLy8gbGV0IHAxID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykKICAgICAgICAgIC8vIHAxLmNsYXNzTmFtZSA9ICd0ZXh0LWJveCB0ZXh0LWJveC1iZy0nICsgaXRlbS5zdGF0ZQogICAgICAgICAgLy8gcDEuaW5uZXJIVE1MID0gaXRlbS5icmlkZ2VOYW1lCgogICAgICAgICAgdmFyIHAyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICBwMi5jbGFzc05hbWUgPSAnaWNvbi1ib3ggaWNvbi1wb2ludC0nICsgdHlwZSArICdQb2ludCc7CgogICAgICAgICAgLy8gbGV0IHAzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykKICAgICAgICAgIC8vIHAzLmNsYXNzTmFtZSA9ICdpY29uLWJyaWRnZSBpY29uLWJyaWRnZS0nICsgaXRlbS50eXBlCgogICAgICAgICAgLy8gcDIuYXBwZW5kQ2hpbGQocDMpCiAgICAgICAgICAvLyBlbC5hcHBlbmRDaGlsZChwMSkKICAgICAgICAgIGVsLmFwcGVuZENoaWxkKHAyKTsKCiAgICAgICAgICAvLyDmoIforrDngrnkvY0KICAgICAgICAgIHZhciBtYXJrZXIgPSBuZXcgbWluZW1hcC5NYXJrZXIoZWwsIHsKICAgICAgICAgICAgb2Zmc2V0OiBbLTMzLCAtMzBdCiAgICAgICAgICB9KS5zZXRMbmdMYXQoaXRlbS5sbmdsYXQpLmFkZFRvKF90aGlzNy5tYXApOwogICAgICAgICAgX3RoaXM3WyIiLmNvbmNhdCh0eXBlLCAiTWFya2VycyIpXS5wdXNoKG1hcmtlcik7CiAgICAgICAgICAvL+a3u+WKoOeCueWHu+S6i+S7tgogICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIF90aGlzNy4kZW1pdCgnbWFya2VyQ2xpY2snLCB7CiAgICAgICAgICAgICAgZGF0YTogX29iamVjdFNwcmVhZCh7fSwgaXRlbSksCiAgICAgICAgICAgICAgdHlwZTogdHlwZQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgLy8gdGhpcy4kcmVmcy5pbmZvRGlhbG9nLm9wZW4oaXRlbSkKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zb2xlLmxvZygn6K+l54K55L2N5peg5a6a5L2N5pWw5o2uJywgaXRlbSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCiAgICBhYmM6IGZ1bmN0aW9uIGFiYygpIHsKICAgICAgY29uc29sZS5sb2coMTIzLCAn6LCD55So5Zyw5Zu+5pa55rOVLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nKTsKICAgIH0sCiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgIC8v5rua5Yqo57uE5Lu26L2m6L295biD5o6n55CDCiAgICBhZGRDYXJWaWRlb01hcmtlcjogZnVuY3Rpb24gYWRkQ2FyVmlkZW9NYXJrZXIodmFsKSB7CiAgICAgIHZhciBfdGhpczggPSB0aGlzOwogICAgICB0aGlzLmNsZWFyQ2FyTWFya2VyKCk7CiAgICAgIGlmICh0aGlzLm1hcCkgewogICAgICAgIHZhciBjb29yZGluYXRlT2JqZWN0cyA9IFtdOwogICAgICAgIGlmICghdmFsKSB7CiAgICAgICAgICBjb29yZGluYXRlT2JqZWN0cyA9IFt7CiAgICAgICAgICAgIGxuZzogMTA2LjA4LAogICAgICAgICAgICBsYXQ6IDI5Ljg4CiAgICAgICAgICB9LCB7CiAgICAgICAgICAgIGxuZzogMTA2LjEsCiAgICAgICAgICAgIGxhdDogMjkuODYKICAgICAgICAgIH0sIHsKICAgICAgICAgICAgbG5nOiAxMDUuNzE5MDE3LAogICAgICAgICAgICBsYXQ6IDMwLjI1MzA0CiAgICAgICAgICB9XTsKICAgICAgICAgIHRoaXMuY291bnQrKzsKICAgICAgICAgIHRoaXMuY2hhbmdlQ2VudGVyKFsxMDYuMDgsIDI5Ljg4XSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvb3JkaW5hdGVPYmplY3RzLnB1c2goewogICAgICAgICAgICBsbmc6IDEwNi4wOCwKICAgICAgICAgICAgbGF0OiAyOS44OAogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmNoYW5nZUNlbnRlcihbMTA2LjA4LCAyOS44OF0pOwogICAgICAgICAgdGhpcy5jb3VudCA9IDA7CiAgICAgICAgICB0aGlzLmNsZWFyQ2FyTWFya2VyKCk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmNvdW50ICE9PSAwICYmIHRoaXMuY291bnQgJSAyID09IDApIHsKICAgICAgICAgIHRoaXMuY2xlYXJDYXJNYXJrZXIoKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLy8g6YGN5Y6G5Z2Q5qCH5a+56LGh5pWw57uE77yM5Li65q+P5Liq5Z2Q5qCH5Yib5bu65LiA5Liq5qCH5rOoCiAgICAgICAgY29vcmRpbmF0ZU9iamVjdHMuZm9yRWFjaChmdW5jdGlvbiAoY29vcmRpbmF0ZU9iaiwgaW5kZXgpIHsKICAgICAgICAgIHZhciBib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICAgIGJveC5zdHlsZVsncG9zaXRpb24nXSA9ICdyZWxhdGl2ZSc7CiAgICAgICAgICBib3guc3R5bGUud2lkdGggPSAnNzVweCc7CiAgICAgICAgICBib3guc3R5bGUud2lkdGggPSAnMTI4cHgnOwogICAgICAgICAgLy8g5Yib5bu65qCH5rOo5YWD57SgCiAgICAgICAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICAgIHZhciBjYXJNYWtlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgICAgdmFyIGNhck51bWJlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgICAgdmFyIHNtYWxsYm94ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICBlbC5pZCA9ICdtYXJrZXInOwogICAgICAgICAgY2FyTWFrZXIuc3R5bGUud2lkdGggPSAnM3B4JzsKICAgICAgICAgIGNhck1ha2VyLnN0eWxlLmhlaWdodCA9ICc0NnB4JzsKICAgICAgICAgIGNhck1ha2VyLnN0eWxlLmJhY2tncm91bmQgPSAnbGluZWFyLWdyYWRpZW50KCAxODBkZWcsICMxQUIzRkYgNDQlLCByZ2JhKDI2LDE3OSwyNTUsMCkgMTAwJSknOwogICAgICAgICAgY2FyTWFrZXIuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzAgMCAycHggMnB4JzsKICAgICAgICAgIGNhck51bWJlci50ZXh0Q29udGVudCA9ICfmuJ1BWVgyODYnOwogICAgICAgICAgY2FyTnVtYmVyLnN0eWxlLndpZHRoID0gJzc1cHgnOwogICAgICAgICAgY2FyTnVtYmVyLnN0eWxlLmhlaWdodCA9ICcyMnB4JzsKICAgICAgICAgIGNhck51bWJlci5zdHlsZS5iYWNrZ3JvdW5kID0gJyMxYWIzZmYnOwogICAgICAgICAgY2FyTnVtYmVyLnN0eWxlWydib3JkZXInXSA9ICcxcHggc29saWQgI2ZmZic7CiAgICAgICAgICBjYXJOdW1iZXIuc3R5bGVbJ2ZvbnQtc2l6ZSddID0gJzEycHgnOwogICAgICAgICAgY2FyTnVtYmVyLnN0eWxlLmNvbG9yID0gJyNmZmYnOwogICAgICAgICAgY2FyTnVtYmVyLnN0eWxlWydib3gtc2hhZG93J10gPSAnaW5zZXQgMCAwIDRweCAwJzsKICAgICAgICAgIGNhck51bWJlci5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJzsKICAgICAgICAgIGVsLnN0eWxlWydiYWNrZ3JvdW5kLWltYWdlJ10gPSAidXJsKCIuY29uY2F0KHBpY2t1cEljb24sICIpIik7CiAgICAgICAgICBlbC5zdHlsZVsnYmFja2dyb3VuZC1zaXplJ10gPSAnY292ZXInOwogICAgICAgICAgZWwuc3R5bGUud2lkdGggPSAnNjBweCc7CiAgICAgICAgICBlbC5zdHlsZS5oZWlnaHQgPSAnNjBweCc7CiAgICAgICAgICBlbC5zdHlsZVsnYm9yZGVyLXJhZGl1cyddID0gJzIwJSc7CiAgICAgICAgICBzbWFsbGJveC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7CiAgICAgICAgICBzbWFsbGJveC5zdHlsZS50b3AgPSAnLTMycHgnOwogICAgICAgICAgc21hbGxib3guc3R5bGUubGVmdCA9ICcyOHB4JzsKICAgICAgICAgIHNtYWxsYm94LmFwcGVuZENoaWxkKGNhck51bWJlcik7CiAgICAgICAgICBzbWFsbGJveC5hcHBlbmRDaGlsZChjYXJNYWtlcik7CiAgICAgICAgICBib3guYXBwZW5kQ2hpbGQoc21hbGxib3gpOwogICAgICAgICAgYm94LmFwcGVuZENoaWxkKGVsKTsKICAgICAgICAgIGlmICghdmFsKSB7CiAgICAgICAgICAgIHZhciBfbWFya2VyID0gbmV3IG1pbmVtYXAuTWFya2VyKGJveCwgewogICAgICAgICAgICAgIG9mZnNldDogWzAsIDBdCiAgICAgICAgICAgIH0pLnNldExuZ0xhdChjb29yZGluYXRlT2JqKSAvLyDkvb/nlKjlr7nosaHnmoQgbG5nIOWSjCBsYXQg5bGe5oCnCiAgICAgICAgICAgIC5hZGRUbyhfdGhpczgubWFwKTsKICAgICAgICAgICAgX3RoaXM4Lm1hcmtlck9ubGluZUNhci5wdXNoKF9tYXJrZXIpOwogICAgICAgICAgICBib3guYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgX3RoaXM4LiRlbWl0KCdvcGVuVmlkZW9EaWFsb2cnLCBjb29yZGluYXRlT2JqKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvL+i9pui9veinhumikeaYvuekugogICAgICAgICAgICB2YXIgX21hcmtlciA9IG5ldyBtaW5lbWFwLk1hcmtlcihib3gsIHsKICAgICAgICAgICAgICBvZmZzZXQ6IFswLCAwXQogICAgICAgICAgICB9KS5zZXRMbmdMYXQoY29vcmRpbmF0ZU9iaikgLy8g5L2/55So5a+56LGh55qEIGxuZyDlkowgbGF0IOWxnuaApwogICAgICAgICAgICAuYWRkVG8oX3RoaXM4Lm1hcCk7CiAgICAgICAgICAgIF90aGlzOC5tYXJrZXJPbmx5Q2FyLnB1c2goX21hcmtlcik7CiAgICAgICAgICAgIF90aGlzOC4kZW1pdCgnb3BlblZpZGVvRGlhbG9nJywgY29vcmRpbmF0ZU9iaik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0sCiAgICAvL+i3r+e6v+WbvuWxggogICAgYWRkQ3VzdG9tZXJNYXJrZXI6IGZ1bmN0aW9uIGFkZEN1c3RvbWVyTWFya2VyKHZhbCkgewogICAgICB2YXIgX3RoaXM5ID0gdGhpczsKICAgICAgaWYgKHRoaXMubWFwKSB7CiAgICAgICAgLy8gdGhpcy5jbGVhckxheU1hcmtlcigpCiAgICAgICAgdmFyIGNvb3JkaW5hdGVPYmplY3RzID0gW3sKICAgICAgICAgIGxuZzogMTA1Ljg5LAogICAgICAgICAgbGF0OiAzMC4wNywKICAgICAgICAgIGRlc2NyaXB0aW9uOiAn55Kn5bGx5YyX5pS26LS556uZJywKICAgICAgICAgIGlkOiAxLAogICAgICAgICAgY29vcmRpbmF0ZXM6IFtbMTA1Ljk2LCAyOS45N10sIFsxMDUuODksIDMwLjA3XV0sCiAgICAgICAgICBTZWN0aW9uczogJ+a4nemBgicsCiAgICAgICAgICBTdGF0aW9uOiBbMzkwLCAwXSwKICAgICAgICAgIHR5cGU6ICfmlLbotLnnq5knLAogICAgICAgICAgbWFuYWdlbWVudENvbXBhbnk6ICfph43luobnj5Hpkp/mlZHmj7TmnI3liqHmnInpmZDlhazlj7gnLAogICAgICAgICAgdHJhaWxlck51bTogMywKICAgICAgICAgIC8v5ouW6L2mCiAgICAgICAgICBjcmFuZTogMiwKICAgICAgICAgIC8v5ZCK6L2mCiAgICAgICAgICBsZWFkZXI6ICfmsrPkuJwnLAogICAgICAgICAgbGVhZGVyUGhvbmU6ICcxNTgyNTkyMjcxNicsCiAgICAgICAgICBwaWNrdXA6IDIgLy/nmq7ljaEKICAgICAgICB9LCB7CiAgICAgICAgICBsbmc6IDEwNi4xLAogICAgICAgICAgbGF0OiAyOS44NiwKICAgICAgICAgIGRlc2NyaXB0aW9uOiAn6ZOc5qKB5YyX5pS26LS556uZJywKICAgICAgICAgIGlkOiAyLAogICAgICAgICAgY29vcmRpbmF0ZXM6IFtbMTA2LjEsIDI5Ljg2XSwgWzEwNi4xMSwgMjkuODVdXSwKICAgICAgICAgIFNlY3Rpb25zOiAn5rid6YGCJywKICAgICAgICAgIFN0YXRpb246IFszNjMsIDBdLAogICAgICAgICAgdHlwZTogJ+aUtui0ueermScsCiAgICAgICAgICBtYW5hZ2VtZW50Q29tcGFueTogJ+mHjeW6huePkemSn+aVkeaPtOacjeWKoeaciemZkOWFrOWPuCcsCiAgICAgICAgICB0cmFpbGVyTnVtOiAzLAogICAgICAgICAgLy/mi5bovaYKICAgICAgICAgIGNyYW5lOiAyLAogICAgICAgICAgLy/lkIrovaYKICAgICAgICAgIGxlYWRlcjogJ+ays+S4nCcsCiAgICAgICAgICBsZWFkZXJQaG9uZTogJzE1ODI1OTIyNzE2JywKICAgICAgICAgIHBpY2t1cDogMyAvL+earuWNoQogICAgICAgIH0sIHsKICAgICAgICAgIGxuZzogMTA1LjcxOTAxNywKICAgICAgICAgIGxhdDogMzAuMjUzMDQsCiAgICAgICAgICBkZXNjcmlwdGlvbjogJ+mTnOaigeS4nOaUtui0ueermScsCiAgICAgICAgICBpZDogMywKICAgICAgICAgIGNvb3JkaW5hdGVzOiBbWzEwNS43MTkwMTcsIDMwLjI1MzA0XSwgWzEwNS43MjEzNjcsIDMwLjI0NjQwMV1dLAogICAgICAgICAgU2VjdGlvbnM6ICfmuJ3pgYInLAogICAgICAgICAgU3RhdGlvbjogWzM3MiwgMF0sCiAgICAgICAgICB0eXBlOiAn5pS26LS556uZJywKICAgICAgICAgIG1hbmFnZW1lbnRDb21wYW55OiAn6YeN5bqG54+R6ZKf5pWR5o+05pyN5Yqh5pyJ6ZmQ5YWs5Y+4JywKICAgICAgICAgIHRyYWlsZXJOdW06IDMsCiAgICAgICAgICAvL+aLlui9pgogICAgICAgICAgY3JhbmU6IDIsCiAgICAgICAgICAvL+WQiui9pgogICAgICAgICAgbGVhZGVyOiAn5rKz5LicJywKICAgICAgICAgIGxlYWRlclBob25lOiAnMTU4MjU5MjI3MTYnLAogICAgICAgICAgcGlja3VwOiA1IC8v55qu5Y2hCiAgICAgICAgfSwgewogICAgICAgICAgbG5nOiAxMDUuOTgsCiAgICAgICAgICBsYXQ6IDI5Ljk1LAogICAgICAgICAgZGVzY3JpcHRpb246ICfnlLDlrrbmlLbotLnnq5knLAogICAgICAgICAgaWQ6IDQsCiAgICAgICAgICBjb29yZGluYXRlczogW1sxMDUuOTgsIDI5Ljk1XSwgWzEwNi4wMSwgMjkuOTNdXSwKICAgICAgICAgIFNlY3Rpb25zOiAn5rid6YGCJywKICAgICAgICAgIFN0YXRpb246IFszMzAsIDBdLAogICAgICAgICAgdHlwZTogJ+aUtui0ueermScsCiAgICAgICAgICBtYW5hZ2VtZW50Q29tcGFueTogJ+mHjeW6huePkemSn+aVkeaPtOacjeWKoeaciemZkOWFrOWPuCcsCiAgICAgICAgICB0cmFpbGVyTnVtOiAzLAogICAgICAgICAgLy/mi5bovaYKICAgICAgICAgIGNyYW5lOiAyLAogICAgICAgICAgLy/lkIrovaYKICAgICAgICAgIGxlYWRlcjogJ+ays+S4nCcsCiAgICAgICAgICBsZWFkZXJQaG9uZTogJzE1ODI1OTIyNzE2JywKICAgICAgICAgIHBpY2t1cDogMiAvL+earuWNoQogICAgICAgIH1dOwogICAgICAgIHRoaXMuY2hhbmdlQ2VudGVyKFsxMDYuMDgsIDI5Ljg4XSk7CiAgICAgICAgLy/liKTmlq3mmK/lkKbmuIXpmaTmoIforrAKICAgICAgICBpZiAodmFsID09ICdwYXRyb2wnKSB7CiAgICAgICAgICB0aGlzLnBhdHJvbENsaWNrID0gIXRoaXMucGF0cm9sQ2xpY2s7CiAgICAgICAgICBpZiAoIXRoaXMucGF0cm9sQ2xpY2spIHsKICAgICAgICAgICAgdGhpcy5jbGVhckxheU1hcmtlcigpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh2YWwgPT0gJ3Jlc2N1ZScpIHsKICAgICAgICAgIHRoaXMucmVzY3VlQ2xpY2sgPSAhdGhpcy5yZXNjdWVDbGljazsKICAgICAgICAgIGlmICghdGhpcy5yZXNjdWVDbGljaykgewogICAgICAgICAgICB0aGlzLmNsZWFyTGF5UmVzY3VlTWFrZXIoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodmFsID09ICdFbWVyZ2VuY2llcycpIHsKICAgICAgICAgIHRoaXMuZW1lcmdlbmNpZXNDbGljayA9ICF0aGlzLmVtZXJnZW5jaWVzQ2xpY2s7CiAgICAgICAgICBpZiAoIXRoaXMuZW1lcmdlbmNpZXNDbGljaykgewogICAgICAgICAgICB0aGlzLm1hcmtlckVtZXJnZW5jaWVzLmZvckVhY2goZnVuY3Rpb24gKG1hcmtlcikgewogICAgICAgICAgICAgIHJldHVybiBtYXJrZXIucmVtb3ZlKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICB0aGlzLm1hcmtlckVtZXJnZW5jaWVzLmxlbmd0aCA9IDA7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHZhbCA9PSAncmVzY3VlRXZlbnQnKSB7CiAgICAgICAgICB0aGlzLnJlc2N1ZUV2ZW50Q2xpY2sgPSAhdGhpcy5yZXNjdWVFdmVudENsaWNrOwogICAgICAgICAgaWYgKCF0aGlzLnJlc2N1ZUV2ZW50Q2xpY2spIHsKICAgICAgICAgICAgdGhpcy5tYXJrZXJSZXNjdWVFdmVudC5mb3JFYWNoKGZ1bmN0aW9uIChtYXJrZXIpIHsKICAgICAgICAgICAgICByZXR1cm4gbWFya2VyLnJlbW92ZSgpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGhpcy5tYXJrZXJSZXNjdWVFdmVudC5sZW5ndGggPSAwOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8vIOmBjeWOhuWdkOagh+WvueixoeaVsOe7hO+8jOS4uuavj+S4quWdkOagh+WIm+W7uuS4gOS4quagh+azqAogICAgICAgIGNvb3JkaW5hdGVPYmplY3RzLmZvckVhY2goZnVuY3Rpb24gKGNvb3JkaW5hdGVPYmosIGluZGV4KSB7CiAgICAgICAgICAvL+WFrOWFseWuueWZqAogICAgICAgICAgdmFyIHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgICAgIC8vIOWIm+W7uuagh+azqOWFg+e0oAogICAgICAgICAgdmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICB2YXIgdGV4dEVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgICBlbC5pZCA9ICdtYXJrZXInOwoKICAgICAgICAgIC8v5beh5p+l6am754K5CiAgICAgICAgICBpZiAodmFsID09ICdwYXRyb2wnKSB7CiAgICAgICAgICAgIGVsLnN0eWxlWydiYWNrZ3JvdW5kLWltYWdlJ10gPSAidXJsKCIuY29uY2F0KHBhdHJvSWNvbiwgIikiKTsKICAgICAgICAgICAgdGV4dEVsLnN0eWxlLmJvcmRlciA9ICcycHggc29saWQgIzUxZmQ4YSc7CiAgICAgICAgICAgIHRleHRFbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnIzFlYTY0Yic7IC8vIOWPr+S7peiuvue9ruiDjOaZr+iJsgogICAgICAgICAgfQogICAgICAgICAgLy/mlZHmj7TpqbvngrkKICAgICAgICAgIGlmICh2YWwgPT0gJ3Jlc2N1ZScpIHsKICAgICAgICAgICAgZWwuc3R5bGVbJ2JhY2tncm91bmQtaW1hZ2UnXSA9ICJ1cmwoIi5jb25jYXQocmVzY3VlSWNvbiwgIikiKTsKICAgICAgICAgICAgdGV4dEVsLnN0eWxlLmJhY2tncm91bmRDb2xvciA9ICcjNDNhZGFkJzsKICAgICAgICAgICAgdGV4dEVsLnN0eWxlLmJvcmRlciA9ICcycHggc29saWQgIzA0ZmJmYic7CiAgICAgICAgICB9CiAgICAgICAgICAvL+eqgeWPkeS6i+S7tgogICAgICAgICAgaWYgKHZhbCA9PSAnRW1lcmdlbmNpZXMnKSB7CiAgICAgICAgICAgIGVsLnN0eWxlWydiYWNrZ3JvdW5kLWltYWdlJ10gPSAidXJsKCIuY29uY2F0KGVtZXJnZXJFdmVudEljb24sICIpIik7CiAgICAgICAgICAgIHRleHRFbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnIzc4NTAwMCc7CiAgICAgICAgICAgIHRleHRFbC5zdHlsZS5ib3JkZXIgPSAnMnB4IHNvbGlkICNmZmM5NWEnOwogICAgICAgICAgfQogICAgICAgICAgLy/mlZHmj7Tkuovku7YKICAgICAgICAgIGlmICh2YWwgPT0gJ3Jlc2N1ZUV2ZW50JykgewogICAgICAgICAgICBlbC5zdHlsZVsnYmFja2dyb3VuZC1pbWFnZSddID0gInVybCgiLmNvbmNhdChyZXNjdWVFdmVudEljb24sICIpIik7CiAgICAgICAgICAgIHRleHRFbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnIzdjMGQyZCc7CiAgICAgICAgICAgIHRleHRFbC5zdHlsZS5ib3JkZXIgPSAnMnB4IHNvbGlkICNiZDQ0NjcnOwogICAgICAgICAgfQogICAgICAgICAgZWwuc3R5bGVbJ2JhY2tncm91bmQtc2l6ZSddID0gJ2NvdmVyJzsKICAgICAgICAgIGVsLnN0eWxlLndpZHRoID0gJzQwcHgnOwogICAgICAgICAgZWwuc3R5bGUuaGVpZ2h0ID0gJzQwcHgnOwogICAgICAgICAgZWwuc3R5bGVbJ2JvcmRlci1yYWRpdXMnXSA9ICcyMCUnOwogICAgICAgICAgLy8g5Yib5bu65paH5a2X5o+P6L+w5YWD57SgCiAgICAgICAgICB0ZXh0RWwudGV4dENvbnRlbnQgPSBjb29yZGluYXRlT2JqLmRlc2NyaXB0aW9uOyAvLyDorr7nva7mj4/ov7DmlofmnKwKICAgICAgICAgIHRleHRFbC5zdHlsZS5wYWRkaW5nID0gJzJweCA1cHgnOyAvLyDlhoXovrnot50KICAgICAgICAgIHRleHRFbC5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnM3B4JzsgLy8g5ZyG6KeSCiAgICAgICAgICB0ZXh0RWwuc3R5bGUuZm9udFNpemUgPSAnMTJweCc7IC8vIOWtl+S9k+Wkp+WwjwogICAgICAgICAgdGV4dEVsLnN0eWxlLmNvbG9yID0gJ3doaXRlJzsKICAgICAgICAgIHRleHRFbC5zdHlsZS53aGl0ZVNwYWNlID0gJ25vd3JhcCc7IC8vIOmYsuatouaWh+acrOaNouihjAogICAgICAgICAgcC5hcHBlbmRDaGlsZCh0ZXh0RWwpOwogICAgICAgICAgcC5hcHBlbmRDaGlsZChlbCk7CiAgICAgICAgICBwLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7CiAgICAgICAgICBwLnN0eWxlLmZsZXhEaXJlY3Rpb24gPSAnY29sdW1uJzsKICAgICAgICAgIHAuc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnY2VudGVyJzsKICAgICAgICAgIHAuc3R5bGUuYWxpZ25JdGVtcyA9ICdjZW50ZXInOwogICAgICAgICAgLy8g5Yib5bu65LiA5Liq5paw55qE5qCH5rOo5a6e5L6L77yM5bm26K6+572u5YGP56e76YePCiAgICAgICAgICBpZiAodmFsID09ICdwYXRyb2wnKSB7CiAgICAgICAgICAgIHZhciBfbWFya2VyID0gbmV3IG1pbmVtYXAuTWFya2VyKHAsIHsKICAgICAgICAgICAgICBvZmZzZXQ6IFswLCAwXQogICAgICAgICAgICB9KS5zZXRMbmdMYXQoY29vcmRpbmF0ZU9iaikgLy8g5L2/55So5a+56LGh55qEIGxuZyDlkowgbGF0IOWxnuaApwogICAgICAgICAgICAuYWRkVG8oX3RoaXM5Lm1hcCk7CiAgICAgICAgICAgIF90aGlzOS5tYXJrZXJzLnB1c2goX21hcmtlcik7CiAgICAgICAgICAgIF90aGlzOS5hZGRTb3VyY2VzKGNvb3JkaW5hdGVPYmouY29vcmRpbmF0ZXMsIGNvb3JkaW5hdGVPYmouaWQpOwogICAgICAgICAgICBfdGhpczkuYWRkTGF5ZXJzKGNvb3JkaW5hdGVPYmouaWQpOwogICAgICAgICAgICBfdGhpczkuaWRMaXN0LnB1c2goImxpbmVMYXllci0iLmNvbmNhdChjb29yZGluYXRlT2JqLmlkKSk7CiAgICAgICAgICAgIF90aGlzOS5zb3VyY2VJZExpc3QucHVzaCgibGluZVNvdXJjZS0iLmNvbmNhdChjb29yZGluYXRlT2JqLmlkKSk7CiAgICAgICAgICAgIGlmIChfdGhpczkucmVzY3VlSWRMaXN0Lmxlbmd0aCkgewogICAgICAgICAgICAgIF90aGlzOS5zdG9wUmVzY3VlU3RhcnRCbGlua2luZygpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHAuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgX3RoaXM5LiRlbWl0KCdwYXRyb2xTdGF0aW9uTGlzdCcsIGNvb3JkaW5hdGVPYmopOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh2YWwgPT0gJ3Jlc2N1ZScpIHsKICAgICAgICAgICAgdmFyIF9tYXJrZXIgPSBuZXcgbWluZW1hcC5NYXJrZXIocCwgewogICAgICAgICAgICAgIG9mZnNldDogWzAsIDBdCiAgICAgICAgICAgIH0pLnNldExuZ0xhdChjb29yZGluYXRlT2JqKSAvLyDkvb/nlKjlr7nosaHnmoQgbG5nIOWSjCBsYXQg5bGe5oCnCiAgICAgICAgICAgIC5hZGRUbyhfdGhpczkubWFwKTsKICAgICAgICAgICAgX3RoaXM5Lm1hcmtlcnNSZXNjdWUucHVzaChfbWFya2VyKTsKICAgICAgICAgICAgX3RoaXM5LmFkZFJlc2N1ZVNvdXJjZXMoY29vcmRpbmF0ZU9iai5jb29yZGluYXRlcywgY29vcmRpbmF0ZU9iai5pZCk7CiAgICAgICAgICAgIF90aGlzOS5hZGRSZXNjdWVMYXllcnMoY29vcmRpbmF0ZU9iai5pZCk7CiAgICAgICAgICAgIF90aGlzOS5yZXNjdWVJZExpc3QucHVzaCgibGluZVJlc2N1ZUxheWVyLSIuY29uY2F0KGNvb3JkaW5hdGVPYmouaWQpKTsKICAgICAgICAgICAgX3RoaXM5LnJlc2N1ZVNvdXJjZUlkTGlzdC5wdXNoKCJsaW5lUmVzY3VlU291cmNlLSIuY29uY2F0KGNvb3JkaW5hdGVPYmouaWQpKTsKICAgICAgICAgICAgcC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICBfdGhpczkuJGVtaXQoJ3N0YXRpb25MaXN0JywgY29vcmRpbmF0ZU9iaik7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHZhbCA9PSAnRW1lcmdlbmNpZXMnKSB7CiAgICAgICAgICAgIHZhciBfbWFya2VyID0gbmV3IG1pbmVtYXAuTWFya2VyKHAsIHsKICAgICAgICAgICAgICBvZmZzZXQ6IFswLCAwXQogICAgICAgICAgICB9KS5zZXRMbmdMYXQoY29vcmRpbmF0ZU9iaikgLy8g5L2/55So5a+56LGh55qEIGxuZyDlkowgbGF0IOWxnuaApwogICAgICAgICAgICAuYWRkVG8oX3RoaXM5Lm1hcCk7CiAgICAgICAgICAgIF90aGlzOS5tYXJrZXJFbWVyZ2VuY2llcy5wdXNoKF9tYXJrZXIpOwogICAgICAgICAgICAvLyBpZiAodGhpcy5pZExpc3QubGVuZ3RoKSB7CiAgICAgICAgICAgIC8vICAgdGhpcy5zdG9wQmxpbmsoKQogICAgICAgICAgICAvLyB9CiAgICAgICAgICAgIGlmIChfdGhpczkucmVzY3VlSWRMaXN0Lmxlbmd0aCkgewogICAgICAgICAgICAgIF90aGlzOS5zdG9wUmVzY3VlU3RhcnRCbGlua2luZygpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHAuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgX3RoaXM5LiRlbWl0KCdvcGVuRXZlbnREaWFsb2cnLCBjb29yZGluYXRlT2JqKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodmFsID09ICdyZXNjdWVFdmVudCcpIHsKICAgICAgICAgICAgdmFyIF9tYXJrZXIgPSBuZXcgbWluZW1hcC5NYXJrZXIocCwgewogICAgICAgICAgICAgIG9mZnNldDogWzAsIDBdCiAgICAgICAgICAgIH0pLnNldExuZ0xhdChjb29yZGluYXRlT2JqKSAvLyDkvb/nlKjlr7nosaHnmoQgbG5nIOWSjCBsYXQg5bGe5oCnCiAgICAgICAgICAgIC5hZGRUbyhfdGhpczkubWFwKTsKICAgICAgICAgICAgX3RoaXM5Lm1hcmtlclJlc2N1ZUV2ZW50LnB1c2goX21hcmtlcik7CiAgICAgICAgICAgIC8vIGlmICh0aGlzLmlkTGlzdC5sZW5ndGgpIHsKICAgICAgICAgICAgLy8gICB0aGlzLnN0b3BCbGluaygpCiAgICAgICAgICAgIC8vIH0KICAgICAgICAgICAgaWYgKF90aGlzOS5yZXNjdWVJZExpc3QubGVuZ3RoKSB7CiAgICAgICAgICAgICAgX3RoaXM5LnN0b3BSZXNjdWVTdGFydEJsaW5raW5nKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICBfdGhpczkuJGVtaXQoJ29wZW5FdmVudERpYWxvZycsIGNvb3JkaW5hdGVPYmopOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAodGhpcy5yZXNjdWVJZExpc3QubGVuZ3RoICYmIHZhbCA9PSAncmVzY3VlJykgewogICAgICAgICAgdGhpcy5zdGFydFJlc2N1ZVN0YXJ0QmxpbmtpbmcoKTsKICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgICBfdGhpczkuc3RvcFJlc2N1ZVN0YXJ0QmxpbmtpbmcoKTsKICAgICAgICAgIH0sIDgwMDApOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIC8vIOS4uuavj+S4quagh+azqOeCueiuvuiuoea6kC0t5beh5p+l6am754K5CiAgICBhZGRTb3VyY2VzOiBmdW5jdGlvbiBhZGRTb3VyY2VzKGNvb3JkaW5hdGVzLCBpZCkgewogICAgICB2YXIganNvbkRhdGEgPSB7CiAgICAgICAgdHlwZTogJ0ZlYXR1cmVDb2xsZWN0aW9uJywKICAgICAgICBmZWF0dXJlczogW3sKICAgICAgICAgIHR5cGU6ICdGZWF0dXJlJywKICAgICAgICAgIGdlb21ldHJ5OiB7CiAgICAgICAgICAgIHR5cGU6ICdMaW5lU3RyaW5nJywKICAgICAgICAgICAgY29vcmRpbmF0ZXM6IGNvb3JkaW5hdGVzCiAgICAgICAgICB9LAogICAgICAgICAgcHJvcGVydGllczogewogICAgICAgICAgICB0aXRsZTogJ+i3r+e6v+S4gCcsCiAgICAgICAgICAgIGtpbmQ6IDEKICAgICAgICAgIH0KICAgICAgICB9XQogICAgICB9OwogICAgICB0aGlzLm1hcC5hZGRTb3VyY2UoImxpbmVTb3VyY2UtIi5jb25jYXQoaWQpLCB7CiAgICAgICAgdHlwZTogJ2dlb2pzb24nLAogICAgICAgIGRhdGE6IGpzb25EYXRhCiAgICAgIH0pOwogICAgfSwKICAgIC8vIOS4uuavj+S4quagh+azqOeCuea3u+WKoOWbvuWxgi0t5beh5p+l6am754K5CiAgICBhZGRMYXllcnM6IGZ1bmN0aW9uIGFkZExheWVycyhpZCkgewogICAgICB0aGlzLm1hcC5hZGRMYXllcih7CiAgICAgICAgaWQ6ICJsaW5lTGF5ZXItIi5jb25jYXQoaWQpLAogICAgICAgIHR5cGU6ICdsaW5lJywKICAgICAgICBzb3VyY2U6ICJsaW5lU291cmNlLSIuY29uY2F0KGlkKSwKICAgICAgICBsYXlvdXQ6IHsKICAgICAgICAgICdsaW5lLWpvaW4nOiAncm91bmQnLAogICAgICAgICAgJ2xpbmUtY2FwJzogJ3JvdW5kJywKICAgICAgICAgICdib3JkZXItdmlzaWJpbGl0eSc6ICd2aXNpYmxlJyAvL+aYr+WQpuW8gOWQr+e6v+i+ueahhgogICAgICAgIH0sCiAgICAgICAgcGFpbnQ6IHsKICAgICAgICAgICdsaW5lLXdpZHRoJzogOCwKICAgICAgICAgICdsaW5lLWNvbG9yJzogewogICAgICAgICAgICB0eXBlOiAnY2F0ZWdvcmljYWwnLAogICAgICAgICAgICBwcm9wZXJ0eTogJ2tpbmQnLAogICAgICAgICAgICBzdG9wczogW1sxLCAnI0ZGRDQ4QSAnXSwgWzIsICcjRkZENDhBICddXSwKICAgICAgICAgICAgZGVmYXVsdDogJyNmZjAwMDAnCiAgICAgICAgICB9LAogICAgICAgICAgJ2xpbmUtYm9yZGVyLXdpZHRoJzogMiwKICAgICAgICAgIC8v6K6+572u57q/6L655qGG5a695bqmCiAgICAgICAgICAnbGluZS1ib3JkZXItb3BhY2l0eSc6IDEsCiAgICAgICAgICAvL+iuvue9rue6v+i+ueahhumAj+aYjuW6pgogICAgICAgICAgJ2xpbmUtYm9yZGVyLWNvbG9yJzogewogICAgICAgICAgICBzdG9wczogW1sxLCAnIzAwRkZGRiddLCBbMiwgJyAjRkZGRkZGJ11dCiAgICAgICAgICB9IC8v6K6+572u57q/6L655qGG6aKc6ImyCiAgICAgICAgfSwKICAgICAgICBtaW56b29tOiA3LAogICAgICAgIG1heHpvb206IDE3LjUKICAgICAgfSk7CiAgICB9LAogICAgLy8g5Li65q+P5Liq5qCH5rOo54K56K6+6K6h5rqQLS3mlZHmj7TpqbvngrkKICAgIGFkZFJlc2N1ZVNvdXJjZXM6IGZ1bmN0aW9uIGFkZFJlc2N1ZVNvdXJjZXMoY29vcmRpbmF0ZXMsIGlkKSB7CiAgICAgIHZhciBqc29uRGF0YSA9IHsKICAgICAgICB0eXBlOiAnRmVhdHVyZUNvbGxlY3Rpb24nLAogICAgICAgIGZlYXR1cmVzOiBbewogICAgICAgICAgdHlwZTogJ0ZlYXR1cmUnLAogICAgICAgICAgZ2VvbWV0cnk6IHsKICAgICAgICAgICAgdHlwZTogJ0xpbmVTdHJpbmcnLAogICAgICAgICAgICBjb29yZGluYXRlczogY29vcmRpbmF0ZXMKICAgICAgICAgIH0sCiAgICAgICAgICBwcm9wZXJ0aWVzOiB7CiAgICAgICAgICAgIHRpdGxlOiAn6Lev57q/5LiAJywKICAgICAgICAgICAga2luZDogMQogICAgICAgICAgfQogICAgICAgIH1dCiAgICAgIH07CiAgICAgIHRoaXMubWFwLmFkZFNvdXJjZSgibGluZVJlc2N1ZVNvdXJjZS0iLmNvbmNhdChpZCksIHsKICAgICAgICB0eXBlOiAnZ2VvanNvbicsCiAgICAgICAgZGF0YToganNvbkRhdGEKICAgICAgfSk7CiAgICB9LAogICAgLy8g5Li65q+P5Liq5qCH5rOo54K55re75Yqg5Zu+5bGCLS3mlZHmj7TpqbvngrkKICAgIGFkZFJlc2N1ZUxheWVyczogZnVuY3Rpb24gYWRkUmVzY3VlTGF5ZXJzKGlkKSB7CiAgICAgIHRoaXMubWFwLmFkZExheWVyKHsKICAgICAgICBpZDogImxpbmVSZXNjdWVMYXllci0iLmNvbmNhdChpZCksCiAgICAgICAgdHlwZTogJ2xpbmUnLAogICAgICAgIHNvdXJjZTogImxpbmVSZXNjdWVTb3VyY2UtIi5jb25jYXQoaWQpLAogICAgICAgIGxheW91dDogewogICAgICAgICAgJ2xpbmUtam9pbic6ICdyb3VuZCcsCiAgICAgICAgICAnbGluZS1jYXAnOiAncm91bmQnLAogICAgICAgICAgJ2JvcmRlci12aXNpYmlsaXR5JzogJ3Zpc2libGUnIC8v5piv5ZCm5byA5ZCv57q/6L655qGGCiAgICAgICAgfSwKICAgICAgICBwYWludDogewogICAgICAgICAgJ2xpbmUtd2lkdGgnOiA4LAogICAgICAgICAgJ2xpbmUtY29sb3InOiB7CiAgICAgICAgICAgIHR5cGU6ICdjYXRlZ29yaWNhbCcsCiAgICAgICAgICAgIHByb3BlcnR5OiAna2luZCcsCiAgICAgICAgICAgIHN0b3BzOiBbWzEsICcjRkZENDhBICddLCBbMiwgJyNGRkQ0OEEgJ11dLAogICAgICAgICAgICBkZWZhdWx0OiAnI2ZmMDAwMCcKICAgICAgICAgIH0sCiAgICAgICAgICAnbGluZS1ib3JkZXItd2lkdGgnOiAyLAogICAgICAgICAgLy/orr7nva7nur/ovrnmoYblrr3luqYKICAgICAgICAgICdsaW5lLWJvcmRlci1vcGFjaXR5JzogMSwKICAgICAgICAgIC8v6K6+572u57q/6L655qGG6YCP5piO5bqmCiAgICAgICAgICAnbGluZS1ib3JkZXItY29sb3InOiB7CiAgICAgICAgICAgIHN0b3BzOiBbWzEsICcjMDBGRkZGJ10sIFsyLCAnICNGRkZGRkYnXV0KICAgICAgICAgIH0gLy/orr7nva7nur/ovrnmoYbpopzoibIKICAgICAgICB9LAogICAgICAgIG1pbnpvb206IDcsCiAgICAgICAgbWF4em9vbTogMTcuNQogICAgICB9KTsKICAgIH0sCiAgICAvLyAvL+W3oeafpempu+eCuemXqueDgQogICAgLy8gc3RhcnRCbGlua2luZygpIHsKICAgIC8vICAgdGhpcy5pbnRlcnZhbElkID0gc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgLy8gICAgIHRoaXMuaWRMaXN0LmZvckVhY2goKGl0ZW0pID0+IHsKICAgIC8vICAgICAgIC8vIHRoaXMubWFwLnNldFBhaW50UHJvcGVydHkoaXRlbSwgJ2xpbmUtb3BhY2l0eScsIDApCiAgICAvLyAgICAgICBpZiAodGhpcy5tYXAuZ2V0TGF5ZXIpIHsKICAgIC8vICAgICAgICAgdGhpcy5tYXAuc2V0UGFpbnRQcm9wZXJ0eSgKICAgIC8vICAgICAgICAgICBpdGVtLAogICAgLy8gICAgICAgICAgICdsaW5lLW9wYWNpdHknLAogICAgLy8gICAgICAgICAgIHRoaXMubWFwLmdldFBhaW50UHJvcGVydHkoaXRlbSwgJ2xpbmUtb3BhY2l0eScpID09IDAgPyAxIDogMAogICAgLy8gICAgICAgICApCiAgICAvLyAgICAgICB9CiAgICAvLyAgICAgfSkKICAgIC8vICAgfSwgMTAwMCkKICAgIC8vIH0sCiAgICAvLyAvL+WFs+mXreW3oeafpempu+eCuemXqueDgQogICAgLy8gc3RvcEJsaW5rKCkgewogICAgLy8gICBpZiAodGhpcy5pbnRlcnZhbElkKSB7CiAgICAvLyAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmludGVydmFsSWQpCiAgICAvLyAgICAgdGhpcy5pbnRlcnZhbElkID0gbnVsbCAvLyDmuIXpmaTlvJXnlKjvvIzpgb/lhY3lhoXlrZjms4TmvI8KICAgIC8vICAgICB0aGlzLmlkTGlzdC5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAvLyAgICAgICB0aGlzLm1hcC5zZXRQYWludFByb3BlcnR5KGl0ZW0sICdsaW5lLW9wYWNpdHknLCAxKQogICAgLy8gICAgIH0pCiAgICAvLyAgIH0KICAgIC8vIH0sCiAgICAvL+W8gOWQr+aVkeaPtOmpu+eCuemXqueDgQogICAgc3RhcnRSZXNjdWVTdGFydEJsaW5raW5nOiBmdW5jdGlvbiBzdGFydFJlc2N1ZVN0YXJ0QmxpbmtpbmcoKSB7CiAgICAgIHZhciBfdGhpczEwID0gdGhpczsKICAgICAgdGhpcy5zdGFydFJlc2N1ZWludGVydmFsSWQgPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7CiAgICAgICAgX3RoaXMxMC5yZXNjdWVJZExpc3QuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICAgICAgaWYgKF90aGlzMTAubWFwLmdldExheWVyKSB7CiAgICAgICAgICAgIF90aGlzMTAubWFwLnNldFBhaW50UHJvcGVydHkoaXRlbSwgJ2xpbmUtb3BhY2l0eScsIF90aGlzMTAubWFwLmdldFBhaW50UHJvcGVydHkoaXRlbSwgJ2xpbmUtb3BhY2l0eScpID09IDAgPyAxIDogMCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0sIDEwMDApOwogICAgfSwKICAgIC8v5YWz6Zet5beh5p+l5pWR5o+06Zeq54OBCiAgICBzdG9wUmVzY3VlU3RhcnRCbGlua2luZzogZnVuY3Rpb24gc3RvcFJlc2N1ZVN0YXJ0QmxpbmtpbmcoKSB7CiAgICAgIHZhciBfdGhpczExID0gdGhpczsKICAgICAgaWYgKHRoaXMuc3RhcnRSZXNjdWVpbnRlcnZhbElkKSB7CiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnN0YXJ0UmVzY3VlaW50ZXJ2YWxJZCk7CiAgICAgICAgdGhpcy5zdGFydFJlc2N1ZWludGVydmFsSWQgPSBudWxsOwogICAgICAgIHRoaXMucmVzY3VlSWRMaXN0LmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgIF90aGlzMTEubWFwLnNldFBhaW50UHJvcGVydHkoaXRlbSwgJ2xpbmUtb3BhY2l0eScsIDEpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgfSwKICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkgewogICAgLy8g5rOo6ZSA5Zyw5Zu+5a6e5L6LLOenu+mZpOWcsOWbvgogICAgaWYgKHRoaXMubWFwKSB7CiAgICAgIHRoaXMubWFwLnJlbW92ZSgpOwogICAgfQogIH0KfTs="},null]}