{"remainingRequest":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/node_modules/babel-loader/lib/index.js!/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/node_modules/cache-loader/dist/cjs.js??ref--1-0!/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/node_modules/vue-loader/lib/index.js??vue-loader-options!/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/src/views/rail/index.vue?vue&type=script&lang=js","dependencies":[{"path":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/src/views/rail/index.vue","mtime":1711675482394},{"path":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/babel.config.js","mtime":1702017170920},{"path":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/node_modules/babel-loader/lib/index.js","mtime":456789000000},{"path":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/data/jenkins/workspace/badp-bcxin-web-5.x-dispatch-rail/node_modules/vue-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IHsgdXRpbHMsIFZNYXAsIFZUaWxlLCBWVmVjdG9yLCBWT3ZlcmxheSwgVkRyYXcgfSBmcm9tICJ2LW9sLW1hcCI7CmltcG9ydCAidi1vbC1tYXAvbGliL3Ytb2wtbWFwLmNzcyI7CmltcG9ydCBtYXBUb29sYmFyIGZyb20gIkAvY29tcG9uZW50cy9tYXBUb29sYmFyL2luZGV4LnZ1ZSI7CmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICJlbGVtZW50LXVpIjsKaW1wb3J0IHsgZGVsZXRlUmFpbEFjY2VzcywgZ2V0UmFpbERldGFpbEFjY2Vzcywgc2VhcmNoUmFpbEFjY2VzcyB9IGZyb20gIkAvYXBpL3NlY3VyaXR5LXN0YXRpb24tcmFpbHMtY29udHJvbGxlciI7CmltcG9ydCB7IHRleHRTbGljZSB9IGZyb20gIkAvYXBpL2NvbW1vbiI7CmltcG9ydCBPdmVybGF5U3RhdGlvbiBmcm9tICJAL2NvbXBvbmVudHMvbWFwT3ZlcmxheS9zdGF0aW9uIjsKaW1wb3J0IE92ZXJsYXlDb21wYW55IGZyb20gIkAvY29tcG9uZW50cy9tYXBPdmVybGF5L2NvbXBhbnkiOwppbXBvcnQgeyBnZXRTdGF0aW9uRGV0YWlsIH0gZnJvbSAiQC9hcGkvc2VjdXJpdHktc3RhdGlvbi1jb250cm9sbGVyIjsKaW1wb3J0IHsgZ2V0Q29tcGFueURldGFpbCB9IGZyb20gIkAvYXBpL2NvbXBhbnktY29udHJvbGxlciI7CmltcG9ydCB7IGdldEVtcGxveWVlcyB9IGZyb20gIkAvYXBpL2VtcGxveWVlLWNvbnRyb2xsZXIiOwppbXBvcnQgT3ZlcmxheVN0YXRpb25FbXBsb3llZXMgZnJvbSAiQC9jb21wb25lbnRzL21hcE92ZXJsYXkvc3RhdGlvbkVtcGxveWVlcyI7CmltcG9ydCBlbGVjdHJvbmljRmVuY2VEaWFsb2cgZnJvbSAiQC92aWV3cy9yYWlsL2NvbXBvbmVudHMvZWxlY3Ryb25pY0ZlbmNlLnZ1ZSI7CmltcG9ydCBlbGVjdHJvbmljRmVuY2VFZGl0RGlhbG9nIGZyb20gIkAvY29tcG9uZW50cy9lbGVjdHJvbmljRmVuY2VFZGl0LnZ1ZSI7CmltcG9ydCBlbGVjdHJvbmljRmVuY2VQZW9wbGUgZnJvbSAiQC9jb21wb25lbnRzL2VsZWN0cm9uaWNGZW5jZVBlb3BsZS52dWUiOwppbXBvcnQgZWxlY3Ryb25pY0ZlbmNlU3RhdGlvbkRpYWxvZyBmcm9tICJAL2NvbXBvbmVudHMvZWxlY3Ryb25pY0ZlbmNlU3RhdGlvbi52dWUiOwpleHBvcnQgZGVmYXVsdCB7CiAgbmFtZTogInJhaWwiLAogIGNvbXBvbmVudHM6IHsKICAgIFZNYXAsCiAgICBWVGlsZSwKICAgIFZWZWN0b3IsCiAgICBWT3ZlcmxheSwKICAgIFZEcmF3LAogICAgbWFwVG9vbGJhciwKICAgIE92ZXJsYXlTdGF0aW9uLAogICAgT3ZlcmxheUNvbXBhbnksCiAgICBPdmVybGF5U3RhdGlvbkVtcGxveWVlcywKICAgIGVsZWN0cm9uaWNGZW5jZURpYWxvZywKICAgIGVsZWN0cm9uaWNGZW5jZUVkaXREaWFsb2csCiAgICBlbGVjdHJvbmljRmVuY2VTdGF0aW9uRGlhbG9nLAogICAgZWxlY3Ryb25pY0ZlbmNlUGVvcGxlCiAgfSwKICBkYXRhKCkgewogICAgcmV0dXJuIHsKICAgICAgdmlldzogewogICAgICAgIGNpdHk6ICLljqbpl6giLAogICAgICAgIHpvb206IDEyCiAgICAgIH0sCiAgICAgIHRpbGVUeXBlOiAiR0QiLAogICAgICBpbnRlcmFjdGlvbnM6IHsKICAgICAgICBEcmFnUm90YXRlQW5kWm9vbTogdHJ1ZSwKICAgICAgICBkb3VibGVDbGlja1pvb206IGZhbHNlCiAgICAgIH0sCiAgICAgIGNvbnRyb2xzOiB7CiAgICAgICAgem9vbTogdHJ1ZSwKICAgICAgICB6b29tT3B0aW9uczogewogICAgICAgICAgY2xhc3NOYW1lOiAib2wtem9vbS1jdXN0b20iCiAgICAgICAgfQogICAgICB9LAogICAgICBzdGF0aW9uSWQ6ICIiLAogICAgICBtYXBUb29sTGlzdDogWyJmZW5jZSIsICJ0aWxlIl0sCiAgICAgIHRhYmxlRGF0YTogW10sCiAgICAgIG9yaWdpbkRhdGE6IFtdLAogICAgICBzdGF0aW9uOiB7fSwKICAgICAgaW5mbzoge30sCiAgICAgIHJldHVybldpbjoge30sCiAgICAgIGxheWVyczogewogICAgICAgIC8vIOmpu+WLpOeCuQogICAgICAgIHN0YXRpb25MYXllcjogewogICAgICAgICAgZmVhdHVyZXM6IFtdLAogICAgICAgICAgb3ZlcmxheTogewogICAgICAgICAgICBwb3NpdGlvbjogdW5kZWZpbmVkLAogICAgICAgICAgICBvZmZzZXQ6IFswLCAtMzZdCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAvLyDkvIHkuJoKICAgICAgICBjb21wYW55TGF5ZXI6IHsKICAgICAgICAgIGZlYXR1cmVzOiBbXSwKICAgICAgICAgIG92ZXJsYXk6IHsKICAgICAgICAgICAgcG9zaXRpb246IHVuZGVmaW5lZCwKICAgICAgICAgICAgb2Zmc2V0OiBbMCwgLTM2XQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgLy8g6am75Yuk54K55Lq65ZGYCiAgICAgICAgc3RhdGlvbkVtcGxveWVlc0xheWVyOiB7CiAgICAgICAgICBmZWF0dXJlczogW10sCiAgICAgICAgICBvdmVybGF5OiB7CiAgICAgICAgICAgIHBvc2l0aW9uOiB1bmRlZmluZWQsCiAgICAgICAgICAgIG9mZnNldDogWzAsIC0zNl0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIC8vIOeUteWtkOWbtOagjwogICAgICAgIHJhaWxMYXllcjogewogICAgICAgICAgZmVhdHVyZXM6IFtdLAogICAgICAgICAgY2x1c3RlcjogewogICAgICAgICAgICBkaXN0YW5jZTogMTEwLAogICAgICAgICAgICBzdHlsZTogewogICAgICAgICAgICAgIGNpcmNsZTogewogICAgICAgICAgICAgICAgcmFkaXVzOiA1MCwKICAgICAgICAgICAgICAgIGZpbGw6IHsKICAgICAgICAgICAgICAgICAgY29sb3I6ICIjMEU3MUZGIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgdGV4dDogewogICAgICAgICAgICAgICAgZm9udDogIjIycHggU291cmNlIEhhbiBTYW5zIENOLU1lZGl1bSwgU291cmNlIEhhbiBTYW5zIENOIiwKICAgICAgICAgICAgICAgIGZpbGw6IHsKICAgICAgICAgICAgICAgICAgY29sb3I6ICIjRkZGRkZGIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHN0eWxlOiB7CiAgICAgICAgICAgIGZpbGw6IHsKICAgICAgICAgICAgICBjb2xvcjogInJnYmEoMjMwLDE2Miw2MCwwLjIpIgogICAgICAgICAgICB9LAogICAgICAgICAgICBzdHJva2U6IHsKICAgICAgICAgICAgICBjb2xvcjogIiNFNkEyM0MiLAogICAgICAgICAgICAgIHdpZHRoOiAyCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBvdmVybGF5OiB7CiAgICAgICAgICAgIHBvc2l0aW9uOiB1bmRlZmluZWQsCiAgICAgICAgICAgIG9mZnNldDogWzAsIC0zNl0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIGlzRWxlY3Ryb25pY0ZlbmNlRWRpdERpYWxvZzogZmFsc2UsCiAgICAgIGlzRWxlY3Ryb25pY0ZlbmNlU3RhdGlvbkRpYWxvZzogZmFsc2UsCiAgICAgIGlzRWxlY3Ryb25pY0ZlbmNlRGlhbG9nOiBmYWxzZSwKICAgICAgaXNFbGVjdHJvbmljRmVuY2VQZW9wbGU6IGZhbHNlLAogICAgICBlbGVjdHJvbmljRmVuY2VEYXRhOiBbXSwKICAgICAgZWxlY3Ryb25pY0ZlbmNlSW5mbzoge30sCiAgICAgIGRyYXdUeXBlOiAiIiwKICAgICAgZWxlY3Ryb25pY0ZlbmNlUGVvcGxlTGlzdDogW10sCiAgICAgIHBlb3BsZVN0YXRpb25OYW1lOiAiIgogICAgfTsKICB9LAogIG1ldGhvZHM6IHsKICAgIC8qKgogICAgICogQOmpu+WLpOeCueWbvuWxgueCueWHu+S6i+S7tgogICAgICogMeOAgeWFiOWIpOaWreeCueWHu+S9jee9ruaYr+WQpuaciempu+WLpOeCuQogICAgICogMuOAgeiOt+WPlueCueWxnuaAp2lkCiAgICAgKiAz44CB6YCa6L+HaWTmn6Xmib7pqbvli6Tngrnor6bmg4UKICAgICAqIDTjgIHmioror6bmg4XmlL7liLBpbmZv5Y+Y6YeP55So5p2l5bGV546w6K+m5oOF77yIc2hvd1N0YXRpb25JbmZv77yJCiAgICAgKiA144CB5oqK57uP57qs5bqm6LWL5YC857uZcG9zaXRpb27lsZ7mgKflsZXnpLrlvLnmoYYKICAgICAqIEBwYXJhbSBldnQKICAgICAqIEBwYXJhbSBmZWF0dXJlCiAgICAgKi8KICAgIGNsaWNrU3RhdGlvbihldnQsIGZlYXR1cmUpIHsKICAgICAgaWYgKGZlYXR1cmUpIHsKICAgICAgICB0aGlzLnNob3dTdGF0aW9uSW5mbygpOwogICAgICB9CiAgICB9LAogICAgLyoqCiAgICAgKiBA5LyB5Lia5Zu+5bGC54K55Ye75LqL5Lu2CiAgICAgKiBAcGFyYW0gZXZ0CiAgICAgKiBAcGFyYW0gZmVhdHVyZQogICAgICovCiAgICBjbGlja0NvbXBhbnkoZXZ0LCBmZWF0dXJlKSB7CiAgICAgIGlmIChmZWF0dXJlKSB7CiAgICAgICAgY29uc29sZS5sb2coZmVhdHVyZSk7CiAgICAgICAgY29uc3QgZmVhdHVyZXMgPSBmZWF0dXJlLmdldCgiZmVhdHVyZXMiKTsKICAgICAgICBpZiAoZmVhdHVyZXMgJiYgZmVhdHVyZXMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICBjb25zdCBjb21wYW55ID0gZmVhdHVyZXNbMF07CiAgICAgICAgICBjb25zdCBpbmZvID0gY29tcGFueS5nZXQoInByb3BzIik7CiAgICAgICAgICBjb25zb2xlLmxvZyhpbmZvKTsKICAgICAgICAgIHRoaXMuc2hvd0NvbXBhbnlJbmZvKHsKICAgICAgICAgICAgaW5mbwogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIC8vIOWmguaenOaYr+iBmuWQiOeCueWwseS4i+mSu+S4gOe6pwogICAgICAgICAgY29uc3Qgem9vbSA9IHRoaXMuJHJlZnMubWFwLm1hcC5nZXRWaWV3KCkuZ2V0Wm9vbSgpICsgMTsKICAgICAgICAgIGNvbnN0IGNlbnRlciA9IGV2dC5jb29yZGluYXRlOwogICAgICAgICAgdGhpcy4kcmVmcy5tYXAucGFuVG8oewogICAgICAgICAgICB6b29tLAogICAgICAgICAgICBjZW50ZXIKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIC8qKgogICAgICogQOmpu+WLpOeCueivpuaDhQogICAgICovCiAgICBzaG93U3RhdGlvbkluZm8oKSB7CiAgICAgIHRoaXMuY2xlYXJNYXAoKTsKICAgICAgY29uc3QgewogICAgICAgIHN1cGVydmlzZURlcGFydE5hbWUsCiAgICAgICAgYWRkcmVzcywKICAgICAgICBsb25naXR1ZGUsCiAgICAgICAgbGF0aXR1ZGUsCiAgICAgICAgc3RhdGlvblR5cGVzCiAgICAgIH0gPSB0aGlzLnN0YXRpb247CiAgICAgIGNvbnN0IFt7CiAgICAgICAgbWFwSWNvbgogICAgICB9XSA9IHN0YXRpb25UeXBlczsKICAgICAgaWYgKHRoaXMubGF5ZXJzLnN0YXRpb25MYXllci5mZWF0dXJlcy5sZW5ndGggPD0gMCkgewogICAgICAgIHRoaXMubGF5ZXJzLnN0YXRpb25MYXllci5mZWF0dXJlcyA9IFt7CiAgICAgICAgICBjb29yZGluYXRlczogW051bWJlcihsb25naXR1ZGUpLCBOdW1iZXIobGF0aXR1ZGUpXSwKICAgICAgICAgIGNvbnZlcnQ6ICJnZC04NCIsCiAgICAgICAgICBzdHlsZTogewogICAgICAgICAgICBpY29uOiB7CiAgICAgICAgICAgICAgc3JjOiBtYXBJY29uLAogICAgICAgICAgICAgIHNjYWxlOiAwLjUKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHByb3BzOiB0aGlzLnN0YXRpb24KICAgICAgICB9XTsKICAgICAgfQogICAgICB0aGlzLmluZm8gPSB7CiAgICAgICAgLi4udGhpcy5zdGF0aW9uLAogICAgICAgIHN1cGVydmlzZURlcGFydE5hbWVTbGljZTogdGV4dFNsaWNlKHN1cGVydmlzZURlcGFydE5hbWUpLAogICAgICAgIGFkZHJlc3NTbGljZTogdGV4dFNsaWNlKGFkZHJlc3MpCiAgICAgIH07CiAgICAgIC8qKgogICAgICAgKiBA5by55qGG5L2N572u6L2s6auY5b636L2sODQKICAgICAgICovCiAgICAgIHRoaXMubGF5ZXJzLnN0YXRpb25MYXllci5vdmVybGF5LnBvc2l0aW9uID0gdXRpbHMuY29udmVydENvb3JkaW5hdGUoW051bWJlcihsb25naXR1ZGUpLCBOdW1iZXIobGF0aXR1ZGUpXSwgImdkLTg0Iik7CiAgICAgIHRoaXMuJHJlZnMubWFwLnBhblRvKHsKICAgICAgICBjZW50ZXI6IHRoaXMubGF5ZXJzLnN0YXRpb25MYXllci5vdmVybGF5LnBvc2l0aW9uCiAgICAgIH0pOwogICAgfSwKICAgIC8qKgogICAgICogQOmpu+WLpOeCueW8ueahhueCueWHu+WFs+mXrQogICAgICovCiAgICBjbG9zZVN0YXRpb25JbmZvKCkgewogICAgICB0aGlzLmxheWVycy5zdGF0aW9uTGF5ZXIub3ZlcmxheS5wb3NpdGlvbiA9IHVuZGVmaW5lZDsKICAgIH0sCiAgICAvKioKICAgICAqIEDkvIHkuJror6bmg4UKICAgICAqIEBwYXJhbSBpbmZvCiAgICAgKiBAcGFyYW0gaW5mb1R5cGUKICAgICAqLwogICAgc2hvd0NvbXBhbnlJbmZvKHsKICAgICAgaW5mbywKICAgICAgaW5mb1R5cGUKICAgIH0pIHsKICAgICAgY29uc29sZS5sb2coImNvbXBhbnkiLCBpbmZvKTsKICAgICAgbGV0IHsKICAgICAgICBvcmdhbml6YXRpb25JZAogICAgICB9ID0gaW5mbzsKICAgICAgZ2V0Q29tcGFueURldGFpbChvcmdhbml6YXRpb25JZCkudGhlbihjb21wYW55ID0+IHsKICAgICAgICBjb25zdCB7CiAgICAgICAgICByZWdpc3RlckFkZHJlc3MsCiAgICAgICAgICBsb25naXR1ZGUsCiAgICAgICAgICBsYXRpdHVkZQogICAgICAgIH0gPSBjb21wYW55OwogICAgICAgIGNvbnNvbGUubG9nKCJjb21wYW55IiwgY29tcGFueSk7CiAgICAgICAgdGhpcy5pbmZvID0gewogICAgICAgICAgLi4uY29tcGFueSwKICAgICAgICAgIHJlZ2lzdGVyQWRkcmVzc1NsaWNlOiB0ZXh0U2xpY2UocmVnaXN0ZXJBZGRyZXNzKQogICAgICAgIH07CiAgICAgICAgaWYgKGluZm9UeXBlKSB7CiAgICAgICAgICB0aGlzLmNsZWFyTWFwKCk7CiAgICAgICAgICB0aGlzLmhpZGVGZW5jZVRhYmxlKCk7CiAgICAgICAgICB0aGlzLnJldHVybldpbiA9IHsKICAgICAgICAgICAgaW5mbywKICAgICAgICAgICAgaW5mb1R5cGUKICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLmxheWVycy5jb21wYW55TGF5ZXIuZmVhdHVyZXMgPSBbewogICAgICAgICAgICBjb29yZGluYXRlczogW051bWJlcihsb25naXR1ZGUpLCBOdW1iZXIobGF0aXR1ZGUpXSwKICAgICAgICAgICAgY29udmVydDogImdkLTg0IiwKICAgICAgICAgICAgc3R5bGU6IHsKICAgICAgICAgICAgICBpY29uOiB7CiAgICAgICAgICAgICAgICBzcmM6IHJlcXVpcmUoIkAvYXNzZXRzL2ltYWdlcy9tYXBTZWFyY2gv5YWs5Y+4LnBuZyIpCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBwcm9wczogY29tcGFueQogICAgICAgICAgfV07CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEDlvLnmoYbkvY3nva7ovazpq5jlvrfovaw4NAogICAgICAgICAqLwogICAgICAgIHRoaXMubGF5ZXJzLmNvbXBhbnlMYXllci5vdmVybGF5LnBvc2l0aW9uID0gdXRpbHMuY29udmVydENvb3JkaW5hdGUoW051bWJlcihsb25naXR1ZGUpLCBOdW1iZXIobGF0aXR1ZGUpXSwgImdkLTg0Iik7CiAgICAgICAgdGhpcy4kcmVmcy5tYXAucGFuVG8oewogICAgICAgICAgY2VudGVyOiB0aGlzLmxheWVycy5jb21wYW55TGF5ZXIub3ZlcmxheS5wb3NpdGlvbgogICAgICAgIH0pOwogICAgICB9KS5jYXRjaChlcnIgPT4gewogICAgICAgIGNvbnNvbGUubG9nKGVycik7CiAgICAgIH0pOwogICAgfSwKICAgIC8qKgogICAgICogQOS8geS4muW8ueahhueCueWHu+WFs+mXrQogICAgICovCiAgICBjbG9zZUNvbXBhbnlJbmZvKCkgewogICAgICB0aGlzLnJldHVybldpbiA9IHt9OwogICAgICB0aGlzLmxheWVycy5jb21wYW55TGF5ZXIub3ZlcmxheS5wb3NpdGlvbiA9IHVuZGVmaW5lZDsKICAgIH0sCiAgICAvKioKICAgICAqIEDpqbvli6TngrnkurrlkZjor6bmg4UKICAgICAqIEBwYXJhbSBpbmZvCiAgICAgKiBAcGFyYW0gaW5mb1R5cGUKICAgICAqLwogICAgc2hvd1N0YXRpb25FbXBsb3llZXNJbmZvKHsKICAgICAgaW5mbywKICAgICAgaW5mb1R5cGUKICAgIH0pIHsKICAgICAgY29uc29sZS5sb2coInNob3dTdGF0aW9uRW1wbG95ZWVzSW5mby0iICsgaW5mb1R5cGUsIGluZm8pOwogICAgICBsZXQgewogICAgICAgIGlkCiAgICAgIH0gPSBpbmZvOwogICAgICBnZXRFbXBsb3llZXMoewogICAgICAgIHBhZ2VJbmRleDogMSwKICAgICAgICBwYWdlU2l6ZTogMTAwMCwKICAgICAgICBzZWN1cml0eVN0YXRpb25JZDogaWQsCiAgICAgICAgc2VhcmNoTW9kZWw6ICJzZWN1cml0eVN0YXRpb24iCiAgICAgIH0pLnRoZW4ocmVzID0+IHsKICAgICAgICBjb25zb2xlLmxvZygic3RhdGlvbkVtcGxveWVlcyIsIHJlcyk7CiAgICAgICAgY29uc29sZS5sb2coInN0YXRpb24iLCBpbmZvKTsKICAgICAgICBpbmZvWyJzdGF0aW9uRW1wbG95ZWVzIl0gPSBbLi4ucmVzXS5tYXAoeCA9PiB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAuLi54LAogICAgICAgICAgICBpc1Bob25lOiBmYWxzZQogICAgICAgICAgfTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLmluZm8gPSB7CiAgICAgICAgICAuLi57fSwKICAgICAgICAgIC4uLmluZm8KICAgICAgICB9OwogICAgICAgIGNvbnNvbGUubG9nKCJpbmZvIiwgdGhpcy5pbmZvKTsKICAgICAgICBpZiAoaW5mb1R5cGUpIHsKICAgICAgICAgIHRoaXMuY2xlYXJNYXAoKTsKICAgICAgICAgIHRoaXMuaGlkZUZlbmNlVGFibGUoKTsKICAgICAgICAgIHRoaXMucmV0dXJuV2luID0gewogICAgICAgICAgICBpbmZvLAogICAgICAgICAgICBpbmZvVHlwZQogICAgICAgICAgfTsKICAgICAgICAgIHRoaXMubGF5ZXJzLnN0YXRpb25FbXBsb3llZXNMYXllci5mZWF0dXJlcyA9IFt7CiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBbTnVtYmVyKGluZm8ubG9uZ2l0dWRlKSwgTnVtYmVyKGluZm8ubGF0aXR1ZGUpXSwKICAgICAgICAgICAgY29udmVydDogImdkLTg0IiwKICAgICAgICAgICAgc3R5bGU6IHsKICAgICAgICAgICAgICBpY29uOiB7CiAgICAgICAgICAgICAgICBzcmM6IHJlcXVpcmUoIkAvYXNzZXRzL2ltYWdlcy9tYXBTZWFyY2gv5Zyo5bKXX+S/neWuieWRmC5wbmciKQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgcHJvcHM6IGluZm8KICAgICAgICAgIH1dOwogICAgICAgICAgaWYgKGluZm9UeXBlID09PSAicmFpbCIpIHsKICAgICAgICAgICAgaW5mb1sibmFtZSJdID0gaW5mby5zdGF0aW9uTmFtZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogQOW8ueahhuS9jee9rui9rOmrmOW+t+i9rDg0CiAgICAgICAgICovCiAgICAgICAgdGhpcy5sYXllcnMuc3RhdGlvbkVtcGxveWVlc0xheWVyLm92ZXJsYXkucG9zaXRpb24gPSB1dGlscy5jb252ZXJ0Q29vcmRpbmF0ZShbTnVtYmVyKGluZm8ubG9uZ2l0dWRlKSwgTnVtYmVyKGluZm8ubGF0aXR1ZGUpXSwgImdkLTg0Iik7CiAgICAgICAgdGhpcy4kcmVmcy5tYXAucGFuVG8oewogICAgICAgICAgLy8gem9vbTogMTMsCiAgICAgICAgICAvLyBmbHlab29tOiA4LAogICAgICAgICAgY2VudGVyOiB0aGlzLmxheWVycy5zdGF0aW9uRW1wbG95ZWVzTGF5ZXIub3ZlcmxheS5wb3NpdGlvbgogICAgICAgIH0pOwogICAgICB9KS5jYXRjaChlcnIgPT4gewogICAgICAgIGNvbnNvbGUubG9nKGVycik7CiAgICAgIH0pOwogICAgfSwKICAgIC8qKgogICAgICogQOmpu+WLpOeCueS6uuWRmOWbvuWxgueCueWHu+S6i+S7tgogICAgICogQHBhcmFtIGV2dAogICAgICogQHBhcmFtIGZlYXR1cmUKICAgICAqLwogICAgY2xpY2tTdGF0aW9uRW1wbG95ZWVzKGV2dCwgZmVhdHVyZSkgewogICAgICBpZiAoZmVhdHVyZSkgewogICAgICAgIGNvbnNvbGUubG9nKCJjbGlja1N0YXRpb25FbXBsb3llZXMtZmVhdHVyZSIsIGZlYXR1cmUpOwogICAgICAgIGNvbnN0IHN0YXRpb25zID0gZmVhdHVyZS5nZXQoImZlYXR1cmVzIik7CiAgICAgICAgaWYgKHN0YXRpb25zICYmIHN0YXRpb25zLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgY29uc3Qgc3RhdGlvbiA9IHN0YXRpb25zWzBdOwogICAgICAgICAgY29uc3QgaW5mbyA9IHN0YXRpb24uZ2V0KCJwcm9wcyIpOwogICAgICAgICAgdGhpcy5zaG93U3RhdGlvbkVtcGxveWVlc0luZm8oewogICAgICAgICAgICBpbmZvCiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGZlYXR1cmUuZ2V0KCJwcm9wcyIpKSB7CiAgICAgICAgICAgIGNvbnN0IGluZm8gPSBmZWF0dXJlLmdldCgicHJvcHMiKTsKICAgICAgICAgICAgdGhpcy5zaG93U3RhdGlvbkVtcGxveWVlc0luZm8oewogICAgICAgICAgICAgIGluZm8KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyDlpoLmnpzmmK/ogZrlkIjngrnlsLHkuIvpkrvkuIDnuqcKICAgICAgICAgICAgY29uc3Qgem9vbSA9IHRoaXMuJHJlZnMubWFwLm1hcC5nZXRWaWV3KCkuZ2V0Wm9vbSgpICsgMTsKICAgICAgICAgICAgY29uc3QgY2VudGVyID0gZXZ0LmNvb3JkaW5hdGU7CiAgICAgICAgICAgIHRoaXMuJHJlZnMubWFwLnBhblRvKHsKICAgICAgICAgICAgICB6b29tLAogICAgICAgICAgICAgIGNlbnRlcgogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAvKioKICAgICAqIEDpqbvli6TngrnkurrmlbDlvLnmoYbngrnlh7vlhbPpl60KICAgICAqLwogICAgY2xvc2VTdGF0aW9uRW1wbG95ZWVzSW5mbygpIHsKICAgICAgdGhpcy5yZXR1cm5XaW4gPSB7fTsKICAgICAgdGhpcy5sYXllcnMuc3RhdGlvbkVtcGxveWVlc0xheWVyLm92ZXJsYXkucG9zaXRpb24gPSB1bmRlZmluZWQ7CiAgICB9LAogICAgLyoqCiAgICAgKiBA55S15a2Q5Zu05qCP5Zu+5bGC54K55Ye75LqL5Lu2CiAgICAgKiBAcGFyYW0gZXZ0CiAgICAgKiBAcGFyYW0gZmVhdHVyZQogICAgICovCiAgICBjbGlja1JhaWwoZXZ0LCBmZWF0dXJlKSB7CiAgICAgIGlmIChmZWF0dXJlKSB7CiAgICAgICAgY29uc29sZS5sb2coZmVhdHVyZSk7CiAgICAgICAgY29uc3QgcmFpbHMgPSBmZWF0dXJlLmdldCgiZmVhdHVyZXMiKTsKICAgICAgICBpZiAocmFpbHMgJiYgcmFpbHMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICB0aGlzLnNob3dSYWlsSW5mb0Zyb21MaXN0ID0gZmFsc2U7CiAgICAgICAgICBjb25zdCByYWlsID0gcmFpbHNbMF07CiAgICAgICAgICBjb25zdCBpbmZvID0gcmFpbC5nZXQoInByb3BzIik7CiAgICAgICAgICBjb25zb2xlLmxvZygiY2xpY2tSYWlsSW5mbyIsIGluZm8pOwogICAgICAgICAgdGhpcy5zaG93UmFpbEluZm8oewogICAgICAgICAgICBpbmZvCiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKGZlYXR1cmUuZ2V0KCJwcm9wcyIpKSB7CiAgICAgICAgICAgIHRoaXMuc2hvd1JhaWxJbmZvRnJvbUxpc3QgPSBmYWxzZTsKICAgICAgICAgICAgY29uc3QgaW5mbyA9IGZlYXR1cmUuZ2V0KCJwcm9wcyIpOwogICAgICAgICAgICBjb25zb2xlLmxvZygiY2xpY2tSYWlsSW5mbyIsIGluZm8pOwogICAgICAgICAgICB0aGlzLnNob3dSYWlsSW5mbyh7CiAgICAgICAgICAgICAgaW5mbwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIOWmguaenOaYr+iBmuWQiOeCueWwseS4i+mSu+S4gOe6pwogICAgICAgICAgICBjb25zdCB6b29tID0gdGhpcy4kcmVmcy5tYXAubWFwLmdldFZpZXcoKS5nZXRab29tKCkgKyAxOwogICAgICAgICAgICBjb25zdCBjZW50ZXIgPSBldnQuY29vcmRpbmF0ZTsKICAgICAgICAgICAgdGhpcy4kcmVmcy5tYXAucGFuVG8oewogICAgICAgICAgICAgIHpvb20sCiAgICAgICAgICAgICAgY2VudGVyCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIC8qKgogICAgICogQOeUteWtkOWbtOagj+ivpuaDhQogICAgICogQHBhcmFtIGluZm8KICAgICAqIEBwYXJhbSBpbmZvVHlwZQogICAgICovCiAgICBzaG93UmFpbEluZm8oewogICAgICBpbmZvLAogICAgICBpbmZvVHlwZQogICAgfSkgewogICAgICAvLyB0aGlzLmxheWVycy5yYWlsTGF5ZXIuZmVhdHVyZXMgPSBbXTsKICAgICAgZ2V0UmFpbERldGFpbEFjY2VzcyhpbmZvLmlkKS50aGVuKHJlcyA9PiB7CiAgICAgICAgY29uc29sZS5sb2coInJhaWxyZXMiLCByZXMpOwogICAgICAgIGNvbnNvbGUubG9nKCJyYWlsaW5mbyIsIGluZm8pOwogICAgICAgIGNvbnN0IHsKICAgICAgICAgIGlkLAogICAgICAgICAgc2hhcGVkTG9jYXRpb24KICAgICAgICB9ID0gaW5mbzsKICAgICAgICBjb25zdCB7CiAgICAgICAgICBjb21wYW55TmFtZSwKICAgICAgICAgIHJhaWxTaGFwZVR5cGUKICAgICAgICB9ID0gcmVzOwogICAgICAgIHRoaXMuaW5mbyA9IHsKICAgICAgICAgIC4uLnJlcywKICAgICAgICAgIGNvbXBhbnlOYW1lU2xpY2U6IHRleHRTbGljZShjb21wYW55TmFtZSksCiAgICAgICAgICBzaGFwZWRMb2NhdGlvbiwKICAgICAgICAgIC8v5ZCO56uv5Lyg5YC85pyJ6Zeu6aKYCiAgICAgICAgICBpZCAvL+WQjuerr+S8oOWAvOaciemXrumimAogICAgICAgIH07CiAgICAgICAgaWYgKGluZm9UeXBlKSB7CiAgICAgICAgICB0aGlzLmNsZWFyTWFwKCk7CiAgICAgICAgICB0aGlzLmhpZGVGZW5jZVRhYmxlKCk7CiAgICAgICAgICB0aGlzLnJldHVybldpbiA9IHsKICAgICAgICAgICAgaW5mbywKICAgICAgICAgICAgaW5mb1R5cGUKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGlmIChyYWlsU2hhcGVUeXBlICYmIHJhaWxTaGFwZVR5cGUgPT09ICJDaXJjbGUiKSB7CiAgICAgICAgICBjb25zb2xlLmxvZygiQ2lyY2xlIiwgcmVzLnNoYXBlZExvY2F0aW9uKTsKICAgICAgICAgIGNvbnN0IGZlYXR1cmUgPSB7CiAgICAgICAgICAgIHR5cGU6ICJjaXJjbGUiLAogICAgICAgICAgICAvLyBjZW50ZXI6IFsxMTguMDUxODc2LCAyNC42MDc0NTNdLAogICAgICAgICAgICAvLyByYWRpdXM6IDI3MiwKICAgICAgICAgICAgY29udmVydDogImdkLTg0IiwKICAgICAgICAgICAgY2VudGVyOiBbcmVzLnNoYXBlZExvY2F0aW9uLmdlb3NbMF0ubG9uLCByZXMuc2hhcGVkTG9jYXRpb24uZ2Vvc1swXS5sYXRdLAogICAgICAgICAgICByYWRpdXM6IHJlcy5zaGFwZWRMb2NhdGlvbi5yYWRpdXMsCiAgICAgICAgICAgIHByb3BzOiBpbmZvCiAgICAgICAgICB9OwogICAgICAgICAgY29uc29sZS5sb2coZmVhdHVyZSk7CiAgICAgICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIuY2x1c3RlciA9IGZhbHNlOwogICAgICAgICAgdGhpcy5sYXllcnMucmFpbExheWVyLmZlYXR1cmVzID0gW2ZlYXR1cmVdOwogICAgICAgIH0gZWxzZSBpZiAocmFpbFNoYXBlVHlwZSA9PT0gIkNyaWIiIHx8IHJhaWxTaGFwZVR5cGUgPT09ICJQb2x5Z29uIikgewogICAgICAgICAgY29uc3QgY29vcmRpbmF0ZXMgPSByZXMuc2hhcGVkTG9jYXRpb24uZ2Vvcy5tYXAoeCA9PiB7CiAgICAgICAgICAgIHJldHVybiBbeC5sb24sIHgubGF0XTsKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5sYXllcnMucmFpbExheWVyLmNsdXN0ZXIgPSBmYWxzZTsKICAgICAgICAgIHRoaXMubGF5ZXJzLnJhaWxMYXllci5mZWF0dXJlcyA9IFt7CiAgICAgICAgICAgIHR5cGU6ICJwb2x5Z29uIiwKICAgICAgICAgICAgY29udmVydDogImdkLTg0IiwKICAgICAgICAgICAgY29vcmRpbmF0ZXMsCiAgICAgICAgICAgIHByb3BzOiBpbmZvCiAgICAgICAgICB9XTsKICAgICAgICB9CiAgICAgIH0pLmNhdGNoKGVyciA9PiB7CiAgICAgICAgY29uc29sZS5sb2coZXJyKTsKICAgICAgfSk7CiAgICB9LAogICAgb25SYWlsTGF5ZXJDaGFuZ2UoZmVhdHVyZXMpIHsKICAgICAgY29uc29sZS5sb2coZmVhdHVyZXMpOwogICAgICBpZiAoZmVhdHVyZXMgJiYgZmVhdHVyZXMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgY29uc3QgZmVhdHVyZSA9IGZlYXR1cmVzWzBdOwogICAgICAgIGNvbnN0IHR5cGUgPSBmZWF0dXJlLmdldCgidHlwZSIpOwogICAgICAgIGlmICh0eXBlICYmICF0aGlzLnNob3dSYWlsSW5mb0Zyb21MaXN0KSB7CiAgICAgICAgICBjb25zb2xlLmxvZyh0eXBlKTsKICAgICAgICAgIGlmICh0eXBlID09PSAicG9seWdvbiIgfHwgdHlwZSA9PT0gIlBvbHlnb24iKSB7CiAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gZmVhdHVyZS5nZXQoImdlb21ldHJ5Iik7CiAgICAgICAgICAgIC8vIGNvbnN0IHZpZXcgPSB0aGlzLiRyZWZzLm1hcC5tYXAuZ2V0VmlldygpOwogICAgICAgICAgICAvLyB2aWV3LmZpdChnZW9tZXRyeSwgewogICAgICAgICAgICAvLyAgIGR1cmF0aW9uOiAxMDAwLAogICAgICAgICAgICAvLyB9KTsKICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy4kcmVmcy5tYXAuY2FsY3VsYXRlQ2VudGVyKGdlb21ldHJ5KTsKICAgICAgICAgICAgY29uc3QgewogICAgICAgICAgICAgIGNlbnRlcgogICAgICAgICAgICB9ID0gcmVzdWx0OwogICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhjb29yZGluYXRlcykKICAgICAgICAgICAgLyoqCiAgICAgICAgICAgICAqIEDlvLnmoYbkvY3nva7ovazpq5jlvrfovaw4NAogICAgICAgICAgICAgKi8KICAgICAgICAgICAgdGhpcy5sYXllcnMucmFpbExheWVyLm92ZXJsYXkucG9zaXRpb24gPSBjZW50ZXI7CiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICJjaXJjbGUiIHx8IHR5cGUgPT09ICJDaXJjbGUiKSB7CiAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5ID0gZmVhdHVyZS5nZXQoImdlb21ldHJ5Iik7CiAgICAgICAgICAgIC8vIGNvbnN0IHZpZXcgPSB0aGlzLiRyZWZzLm1hcC5tYXAuZ2V0VmlldygpOwogICAgICAgICAgICAvLyB2aWV3LmZpdChnZW9tZXRyeSwgewogICAgICAgICAgICAvLyAgIGR1cmF0aW9uOiAxMDAwLAogICAgICAgICAgICAvLyB9KTsKICAgICAgICAgICAgdGhpcy5sYXllcnMucmFpbExheWVyLm92ZXJsYXkucG9zaXRpb24gPSBnZW9tZXRyeS5nZXRDZW50ZXIoKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAvKioKICAgICAqIEDnlLXlrZDlm7TmoI/liJfooagKICAgICAqLwogICAgc2V0RmVuY2UoKSB7CiAgICAgIHRoaXMuaXNFbGVjdHJvbmljRmVuY2VEaWFsb2cgPSB0cnVlOwogICAgfSwKICAgIC8qKgogICAgICogQOazqOWGjOaYvuekuuW8ueahhuexu+S6i+S7tgogICAgICovCiAgICBldmVudEJ1c0JpbmRpbmcoKSB7CiAgICAgIHRoaXMuJGJ1cy4kb24oImNsaWNrLXN0YXRpb24iLCB0aGlzLnNob3dTdGF0aW9uSW5mbyk7IC8vIOaYvuekuumpu+WLpOeCueW8ueahhgogICAgICB0aGlzLiRidXMuJG9uKCJjbGljay1jb21wYW55IiwgdGhpcy5zaG93Q29tcGFueUluZm8pOyAvLyDmmL7npLrlhazlj7jlvLnmoYYKICAgICAgdGhpcy4kYnVzLiRvbigiY2xpY2stc3RhdGlvbkVtcGxveWVlcyIsIHRoaXMuc2hvd1N0YXRpb25FbXBsb3llZXNJbmZvKTsgLy8g5pi+56S66am75Yuk54K55Lq65ZGYCiAgICB9LAogICAgLyoqCiAgICAgKiBA5riF56m65Zyw5Zu+CiAgICAgKi8KICAgIGNsZWFyTWFwKGV4Y2x1ZGUgPSBbInN0YXRpb25MYXllciJdKSB7CiAgICAgIGZvciAobGV0IGxheWVyc0tleSBpbiB0aGlzLmxheWVycykgewogICAgICAgIGlmICghZXhjbHVkZS5pbmNsdWRlcyhsYXllcnNLZXkpKSB7CiAgICAgICAgICB0aGlzLmxheWVyc1tsYXllcnNLZXldLmZlYXR1cmVzID0gW107CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMuJHJlZnMubWFwLmNsb3NlT3ZlcmxheXMoKTsKICAgIH0sCiAgICBvbkNoYW5nZUxheWVyKHR5cGUpIHsKICAgICAgLy8gY29uc29sZS5sb2coIm9uQ2hhbmdlTGF5ZXIiLCB0eXBlKTsKICAgICAgaWYgKHR5cGUuaW5kZXhPZigiZGVmYXVsdCIpID4gLTEpIHsKICAgICAgICB0aGlzLnRpbGVUeXBlID0gIkdEIjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnRpbGVUeXBlID0gIkdEX0lNRyI7CiAgICAgIH0KICAgIH0sCiAgICBoaWRlRmVuY2VUYWJsZSgpIHsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZUVkaXREaWFsb2cgPSBmYWxzZTsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZVN0YXRpb25EaWFsb2cgPSBmYWxzZTsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZURpYWxvZyA9IGZhbHNlOwogICAgfSwKICAgIGVsZWN0cm9uaWNGZW5jZUNhbmNlbCgpIHsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZURpYWxvZyA9IGZhbHNlOwogICAgfSwKICAgIC8qKgogICAgICogQOaWsOWinueUteWtkOWbtOagjwogICAgICovCiAgICBhZGRFbGVjdHJvbmljKCkgewogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlRWRpdERpYWxvZyA9IHRydWU7CiAgICAgIHRoaXMuaXNFbGVjdHJvbmljRmVuY2VEaWFsb2cgPSBmYWxzZTsKICAgICAgdGhpcy5lbGVjdHJvbmljRmVuY2VJbmZvID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmluZm8pKTsKICAgICAgdGhpcy5lbGVjdHJvbmljRmVuY2VJbmZvID0ge307CiAgICAgIGNvbnNvbGUubG9nKHRoaXMuc3RhdGlvbik7CiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHsKICAgICAgICB0aGlzLiRyZWZzLmVsZWN0cm9uaWNGZW5jZUVkaXQudXBkYXRlU3RhdGlvbih7CiAgICAgICAgICBzdGF0aW9uTmFtZTogdGhpcy5zdGF0aW9uLm5hbWUsCiAgICAgICAgICBwZW9wbGVOdW06IHRoaXMuc3RhdGlvbi5jb3VudE9mU2VjdXJpdHlNYW4sCiAgICAgICAgICBjb3VudE9mU2VjdXJpdHlNYW46IHRoaXMuc3RhdGlvbi5jb3VudE9mU2VjdXJpdHlNYW4sCiAgICAgICAgICBzdGF0aW9uSWQ6IHRoaXMuc3RhdGlvbi5pZAogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0sCiAgICAvKioKICAgICAqIEDnvJbovpHmn5DmnaHnlLXlrZDlm7TmoI8KICAgICAqIEBwYXJhbSBkYXRhCiAgICAgKi8KICAgIGFzeW5jIGVsZWN0cm9uaWNGZW5jZUVkaXRGbih7CiAgICAgIGRhdGEKICAgIH0pIHsKICAgICAgY29uc29sZS5sb2coIue8lui+keafkOadoeeUteWtkOWbtOagjyIsIGRhdGEpOwogICAgICB0aGlzLnNob3dSYWlsSW5mb0Zyb21MaXN0ID0gdHJ1ZTsKICAgICAgLy8gdGhpcy5tYXAuY2xlYXJNYXAoKTsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZURpYWxvZyA9IGZhbHNlOwogICAgICB0aGlzLmVsZWN0cm9uaWNGZW5jZUluZm8gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTsKICAgICAgdGhpcy5lbGVjdHJvbmljRmVuY2VJbmZvLnRpbWUgPSBbdGhpcy5lbGVjdHJvbmljRmVuY2VJbmZvLmJlZ2luVGltZSwgdGhpcy5lbGVjdHJvbmljRmVuY2VJbmZvLmVuZFRpbWVdOwogICAgICBjb25zdCByYWlsID0gYXdhaXQgZ2V0UmFpbERldGFpbEFjY2VzcyhkYXRhLmlkKTsKICAgICAgdGhpcy5pbmZvID0gewogICAgICAgIC4uLnJhaWwsCiAgICAgICAgLi4udGhpcy5lbGVjdHJvbmljRmVuY2VJbmZvCiAgICAgIH07IC8vIOW8ueahhuS/oeaBrwogICAgICBjb25zb2xlLmxvZyh0aGlzLmluZm8pOwogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlRWRpdERpYWxvZyA9IHRydWU7CiAgICAgIC8vIOaYvuekuuWPr+e8lui+keWbtOagj+WMuuWfnwogICAgICB0aGlzLnNob3dNYXBFZGl0b3IoZGF0YSk7CiAgICB9LAogICAgZGVsRWxlY3Ryb25pYyhkYXRhKSB7CiAgICAgIGNvbnNvbGUubG9nKGRhdGEpOwogICAgICBsZXQgcGFyYW1zID0gewogICAgICAgIGlkOiBkYXRhLmRhdGEuaWQKICAgICAgfTsKICAgICAgZGVsZXRlUmFpbEFjY2VzcyhwYXJhbXMpLnRoZW4ocmVzID0+IHsKICAgICAgICBjb25zb2xlLmxvZygiZGVsZXRlUmFpbEFjY2VzcyIsIHJlcyk7CiAgICAgICAgdGhpcy4kcmVmc1siZWxlY3Ryb25pY0ZlbmNlIl0uZ2V0UmFpbHMoKTsKICAgICAgICB0aGlzLiRtZXNzYWdlKHsKICAgICAgICAgIG1lc3NhZ2U6ICLliKDpmaTmiJDlip8iLAogICAgICAgICAgdHlwZTogInN1Y2Nlc3MiCiAgICAgICAgfSk7CiAgICAgIH0pLmNhdGNoKGVyciA9PiB7CiAgICAgICAgY29uc29sZS5sb2coZXJyKTsKICAgICAgfSk7CiAgICB9LAogICAgb3BlblBlb3BsZU51bUZuKGlkLCBzdGF0aW9uTmFtZSkgewogICAgICB0aGlzLmVsZWN0cm9uaWNGZW5jZVBlb3BsZUxpc3QgPSBbXTsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZVBlb3BsZSA9IHRydWU7CiAgICAgIHRoaXMucGVvcGxlU3RhdGlvbk5hbWUgPSBzdGF0aW9uTmFtZTsKICAgICAgZ2V0RW1wbG95ZWVzKHsKICAgICAgICBwYWdlSW5kZXg6IDEsCiAgICAgICAgcGFnZVNpemU6IDEwMDAsCiAgICAgICAgc2VjdXJpdHlTdGF0aW9uSWQ6IGlkLAogICAgICAgIHNlYXJjaE1vZGVsOiAic2VjdXJpdHlTdGF0aW9uIgogICAgICB9KS50aGVuKHJlcyA9PiB7CiAgICAgICAgdGhpcy5lbGVjdHJvbmljRmVuY2VQZW9wbGVMaXN0ID0gcmVzOwogICAgICB9KTsKICAgIH0sCiAgICAvKioKICAgICAqIEDlhbPogZTpqbvli6TngrkKICAgICAqLwogICAgcmVsYXRpb25TdGF0aW9uRm4oaW5mbykgewogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlU3RhdGlvbkRpYWxvZyA9IHRydWU7CiAgICAgIHRoaXMuaW5mbyA9IHsKICAgICAgICAuLi50aGlzLmluZm8sCiAgICAgICAgLi4uaW5mbwogICAgICB9OwogICAgfSwKICAgIGVsZWN0cm9uaWNGZW5jZUVkaXRDYW5jZWwoKSB7CiAgICAgIHRoaXMubGF5ZXJzLnJhaWxMYXllci5mZWF0dXJlcyA9IFtdOwogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlRWRpdERpYWxvZyA9IGZhbHNlOwogICAgICB0aGlzLmNsZWFuRHJhd0ZpZ3VyZSgpOwogICAgICBzZWFyY2hSYWlsQWNjZXNzKHsKICAgICAgICBwYWdlSW5kZXg6IDEsCiAgICAgICAgcGFnZVNpemU6IDEwLAogICAgICAgIHNlYXJjaE1vZGVsOiAiU3RhdGlvbiIsCiAgICAgICAgc3RhdGlvbklkOiB0aGlzLnN0YXRpb25JZAogICAgICB9KS50aGVuKHJlcyA9PiB7CiAgICAgICAgY29uc29sZS5sb2coInNlYXJjaFJhaWwiLCByZXMpOwogICAgICAgIGlmIChyZXMpIHsKICAgICAgICAgIHRoaXMuZWxlY3Ryb25pY0ZlbmNlRGF0YSA9IHJlczsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgTWVzc2FnZSh7CiAgICAgICAgICAgIHR5cGU6ICJlcnJvciIsCiAgICAgICAgICAgIG1lc3NhZ2U6ICLmn6Xor6LnlLXlrZDlm7TmoI/kv6Hmga/lpLHotKUiLAogICAgICAgICAgICBvbkNsb3NlOiAoKSA9PiB7CiAgICAgICAgICAgICAgLy8gd2luZG93LmxvY2F0aW9uID0gImh0dHBzOi8vd3d3LmJhaWR1LmNvbSI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSkuY2F0Y2goKCkgPT4gewogICAgICAgIE1lc3NhZ2UoewogICAgICAgICAgdHlwZTogImVycm9yIiwKICAgICAgICAgIG1lc3NhZ2U6ICLmn6Xor6LnlLXlrZDlm7TmoI/kv6Hmga/lpLHotKUiLAogICAgICAgICAgb25DbG9zZTogKCkgPT4gewogICAgICAgICAgICAvLyB3aW5kb3cubG9jYXRpb24gPSAiaHR0cHM6Ly93d3cuYmFpZHUuY29tIjsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9LAogICAgY2xlYW5EcmF3RmlndXJlKCkgewogICAgICB0aGlzLmRyYXdUeXBlID0gIiI7CiAgICB9LAogICAgLyoqCiAgICAgKiBA5YWz6Zet6am75Yuk54K55Lq65ZGYCiAgICAgKi8KICAgIGVsZWN0cm9uaWNGZW5jZVBlb3BsZUNhbmNlbCgpIHsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZVBlb3BsZSA9IGZhbHNlOwogICAgfSwKICAgIGVsZWN0cm9uaWNGZW5jZVN0YXRpb25DYW5jZWwoKSB7CiAgICAgIHRoaXMubGF5ZXJzLnJhaWxMYXllci5mZWF0dXJlcyA9IFtdOwogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlU3RhdGlvbkRpYWxvZyA9IGZhbHNlOwogICAgICB0aGlzLmNsZWFuRHJhd0ZpZ3VyZSgpOwogICAgfSwKICAgIHNob3dNYXBFZGl0b3IoewogICAgICBzaGFwZVR5cGUsCiAgICAgIHNoYXBlZExvY2F0aW9uCiAgICB9KSB7CiAgICAgIHN3aXRjaCAoc2hhcGVUeXBlKSB7CiAgICAgICAgY2FzZSAiQ2lyY2xlIjoKICAgICAgICAgIC8vIOWchgogICAgICAgICAgdGhpcy5zaG93Q2lyY2xlRWRpdG9yKHNoYXBlZExvY2F0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlBvbHlnb24iOgogICAgICAgICAgdGhpcy5zaG93UG9seWdvbkVkaXRvcihzaGFwZWRMb2NhdGlvbik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJDcmliIjoKICAgICAgICAgIHRoaXMuc2hvd0NyaWJFZGl0b3Ioc2hhcGVkTG9jYXRpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0sCiAgICBzaG93UG9seWdvbkVkaXRvcih7CiAgICAgIGdlb3MKICAgIH0pIHsKICAgICAgbGV0IGxpc3QgPSBnZW9zLm1hcChpdGVtID0+IFtpdGVtLmxvbiwgaXRlbS5sYXRdKTsKICAgICAgY29uc29sZS5sb2cobGlzdCk7CiAgICAgIHRoaXMubGF5ZXJzLnJhaWxMYXllci5mZWF0dXJlcyA9IFt7CiAgICAgICAgdHlwZTogInBvbHlnb24iLAogICAgICAgIGNvb3JkaW5hdGVzOiBsaXN0LAogICAgICAgIHN0eWxlOiB0aGlzLmxheWVycy5yYWlsTGF5ZXIuc3R5bGUsCiAgICAgICAgY29udmVydDogImdkLTg0IgogICAgICB9XTsKICAgICAgdGhpcy4kcmVmcy5tYXAuZmx5VG8oewogICAgICAgIHpvb206IDEzLAogICAgICAgIGZseVpvb206IDgsCiAgICAgICAgY2VudGVyOiBsaXN0WzBdCiAgICAgIH0pOwogICAgICBjb25zb2xlLmxvZyh0aGlzLmxheWVycy5yYWlsTGF5ZXIuZmVhdHVyZXMpOwogICAgfSwKICAgIHNob3dDcmliRWRpdG9yKHsKICAgICAgZ2VvcwogICAgfSkgewogICAgICBsZXQgbGlzdCA9IGdlb3MubWFwKGl0ZW0gPT4gW2l0ZW0ubG9uLCBpdGVtLmxhdF0pOwogICAgICBjb25zb2xlLmxvZyhsaXN0KTsKICAgICAgdGhpcy5sYXllcnMucmFpbExheWVyLmZlYXR1cmVzID0gW3sKICAgICAgICB0eXBlOiAicG9seWdvbiIsCiAgICAgICAgY29vcmRpbmF0ZXM6IGxpc3QsCiAgICAgICAgc3R5bGU6IHRoaXMubGF5ZXJzLnJhaWxMYXllci5zdHlsZSwKICAgICAgICBjb252ZXJ0OiAiZ2QtODQiCiAgICAgIH1dOwogICAgICB0aGlzLiRyZWZzLm1hcC5mbHlUbyh7CiAgICAgICAgem9vbTogMTMsCiAgICAgICAgZmx5Wm9vbTogOCwKICAgICAgICBjZW50ZXI6IGxpc3RbMF0KICAgICAgfSk7CiAgICAgIGNvbnNvbGUubG9nKHRoaXMubGF5ZXJzLnJhaWxMYXllci5mZWF0dXJlcyk7CiAgICB9LAogICAgc2hvd0NpcmNsZUVkaXRvcih7CiAgICAgIGdlb3MsCiAgICAgIHJhZGl1cwogICAgfSkgewogICAgICBjb25zdCBbY2VudGVyXSA9IGdlb3MubWFwKGl0ZW0gPT4gW2l0ZW0ubG9uLCBpdGVtLmxhdF0pOwogICAgICBjb25zb2xlLmxvZyhjZW50ZXIpOwogICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIuZmVhdHVyZXMgPSBbewogICAgICAgIHR5cGU6ICJDaXJjbGUiLAogICAgICAgIGNlbnRlciwKICAgICAgICByYWRpdXMsCiAgICAgICAgc3R5bGU6IHRoaXMubGF5ZXJzLnJhaWxMYXllci5zdHlsZSwKICAgICAgICBjb252ZXJ0OiAiZ2QtODQiCiAgICAgIH1dOwogICAgICB0aGlzLiRyZWZzLm1hcC5mbHlUbyh7CiAgICAgICAgem9vbTogMTMsCiAgICAgICAgLy8gZmx5Wm9vbTogOCwKICAgICAgICBjZW50ZXIKICAgICAgfSk7CiAgICB9LAogICAgZHJhd1JhaWwodHlwZSkgewogICAgICBjb25zb2xlLmxvZygiZHJhd1JhaWwiLCB0eXBlKTsKICAgICAgLy8gdGhpcy5sYXllcnMucmFpbExheWVyLmZlYXR1cmVzID0gW10KICAgICAgdGhpcy5kcmF3VHlwZSA9IHR5cGU7CiAgICB9LAogICAgZHJhd2VuZChldnQsIG1hcCkgewogICAgICBjb25zdCB7CiAgICAgICAgZmVhdHVyZQogICAgICB9ID0gZXZ0OwogICAgICBjb25zb2xlLmxvZyh0aGlzLmRyYXdUeXBlKTsKICAgICAgdGhpcy5sYXllcnMucmFpbExheWVyLmZlYXR1cmVzID0gW107IC8vIOa4heepuuS4iuS4gOS4queUteWtkOWbtOagjwogICAgICBjb25zdCBnZW9tZXRyeSA9IGZlYXR1cmUuZ2V0R2VvbWV0cnkoKTsKICAgICAgaWYgKHRoaXMuZHJhd1R5cGUgPT09ICJSZWN0YW5nbGUiIHx8IHRoaXMuZHJhd1R5cGUgPT09ICJQb2x5Z29uIikgewogICAgICAgIGNvbnN0IFtjb29yZGluYXRlc10gPSBnZW9tZXRyeS5nZXRDb29yZGluYXRlcygpOwogICAgICAgIGNvbnN0IGNvbnZlcnRDb29yZGluYXRlcyA9IGNvb3JkaW5hdGVzLm1hcChjb29yZGluYXRlID0+IHsKICAgICAgICAgIHJldHVybiB1dGlscy5jb252ZXJ0Q29vcmRpbmF0ZShjb29yZGluYXRlLCAiODQtZ2QiKTsKICAgICAgICB9KTsKICAgICAgICBjb25zb2xlLmxvZyhjb29yZGluYXRlcyk7CiAgICAgICAgY29uc29sZS5sb2coY29udmVydENvb3JkaW5hdGVzKTsKICAgICAgICBjb25zdCBwYXJhbXMgPSB7CiAgICAgICAgICBnZW9zOiBjb252ZXJ0Q29vcmRpbmF0ZXMubWFwKGl0ZW0gPT4gewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIGxvbjogaXRlbVswXSwKICAgICAgICAgICAgICBsYXQ6IGl0ZW1bMV0KICAgICAgICAgICAgfTsKICAgICAgICAgIH0pCiAgICAgICAgfTsKICAgICAgICBjb25zb2xlLmxvZyhwYXJhbXMpOwogICAgICAgIHRoaXMuJHJlZnMuZWxlY3Ryb25pY0ZlbmNlRWRpdC51cGRhdGVHZW9tZXRyeShwYXJhbXMpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuZHJhd1R5cGUgPT09ICJDaXJjbGUiKSB7CiAgICAgICAgY29uc3QgY2VudGVyID0gZ2VvbWV0cnkuZ2V0Q2VudGVyKCk7CiAgICAgICAgY29uc29sZS5sb2coY2VudGVyKTsKICAgICAgICBjb25zdCBnZW9SYWRpdXMgPSBnZW9tZXRyeS5nZXRSYWRpdXMoKTsgLy8g5Y2K5b6ECiAgICAgICAgY29uc3QgbWV0ZXJzUGVyVW5pdCA9IG1hcC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpLmdldE1ldGVyc1BlclVuaXQoKTsgLy8g5Y2K5b6E5Lul57Gz5Li65Y2V5L2NCiAgICAgICAgY29uc3QgcmFkaXVzID0gKGdlb1JhZGl1cyAqIG1ldGVyc1BlclVuaXQpLnRvRml4ZWQoMik7CiAgICAgICAgY29uc29sZS5sb2cocmFkaXVzKTsKICAgICAgICBjb25zdCBjb252ZXJ0Q29vcmRpbmF0ZXMgPSB1dGlscy5jb252ZXJ0Q29vcmRpbmF0ZShjZW50ZXIsICI4NC1nZCIpOwogICAgICAgIGNvbnN0IHBhcmFtcyA9IHsKICAgICAgICAgIGdlb3M6IFt7CiAgICAgICAgICAgIGxvbjogY29udmVydENvb3JkaW5hdGVzWzBdLAogICAgICAgICAgICBsYXQ6IGNvbnZlcnRDb29yZGluYXRlc1sxXQogICAgICAgICAgfV0sCiAgICAgICAgICByYWRpdXMKICAgICAgICB9OwogICAgICAgIGNvbnNvbGUubG9nKHBhcmFtcyk7CiAgICAgICAgdGhpcy4kcmVmcy5lbGVjdHJvbmljRmVuY2VFZGl0LnVwZGF0ZUdlb21ldHJ5KHBhcmFtcyk7CiAgICAgIH0KICAgIH0KICB9LAogIGJlZm9yZVJvdXRlRW50ZXIodG8sIGZyb20sIG5leHQpIHsKICAgIC8vIGh0dHA6Ly9sb2NhbGhvc3Q6ODA4MC8jL3JhaWwKICAgIC8vID9zdGF0aW9uSWQ9VkdVa1RXekpxRTdZZU9jalZVcC0tX19XMDUyYjFYTm9MbVBja0Y2Y2gxCiAgICAvLyAmYWNjZXNzVG9rZW49ZXlKaGJHY2lPaUpJVXpJMU5pSjkuZXlKcGMzTWlPaUpoZFhSb01DSXNJbVY0Y0NJNk1UY3dNalV6TnpNd09Dd2lkWE5sY201aGJXVWlPaUp2ZFVGdmNqWlNja2hKUm5aMlMybHRXVFJDSW4wLjBkd0JILW9HSTZveUR0NGJRSEVXMzVrWl92eTV5MFhFLXpFbUc0dm03MGMKICAgIGNvbnN0IHN0YXRpb25JZCA9IHRvLnF1ZXJ5LnN0YXRpb25JZDsKICAgIGlmIChzdGF0aW9uSWQpIHsKICAgICAgLy8g6I635Y+W55S15a2Q5Zu05qCP5L+h5oGvCiAgICAgIHNlYXJjaFJhaWxBY2Nlc3MoewogICAgICAgIHBhZ2VJbmRleDogMSwKICAgICAgICBwYWdlU2l6ZTogMTAsCiAgICAgICAgc2VhcmNoTW9kZWw6ICJTdGF0aW9uIiwKICAgICAgICBzdGF0aW9uSWQKICAgICAgfSkudGhlbihyZXMgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCJzZWFyY2hSYWlsIiwgcmVzKTsKICAgICAgICBpZiAocmVzKSB7CiAgICAgICAgICBuZXh0KHZtID0+IHsKICAgICAgICAgICAgdm0uc3RhdGlvbklkID0gc3RhdGlvbklkOwogICAgICAgICAgICB2bS5lbGVjdHJvbmljRmVuY2VEYXRhID0gcmVzOwogICAgICAgICAgICB2bS5pc0VsZWN0cm9uaWNGZW5jZURpYWxvZyA9IHRydWU7CiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgTWVzc2FnZSh7CiAgICAgICAgICAgIHR5cGU6ICJlcnJvciIsCiAgICAgICAgICAgIG1lc3NhZ2U6ICLmn6Xor6LnlLXlrZDlm7TmoI/kv6Hmga/lpLHotKUiLAogICAgICAgICAgICBvbkNsb3NlOiAoKSA9PiB7CiAgICAgICAgICAgICAgLy8gd2luZG93LmxvY2F0aW9uID0gImh0dHBzOi8vd3d3LmJhaWR1LmNvbSI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSkuY2F0Y2goKHsKICAgICAgICByZXNwb25zZQogICAgICB9KSA9PiB7CiAgICAgICAgY29uc3QgewogICAgICAgICAgZGF0YQogICAgICAgIH0gPSByZXNwb25zZTsKICAgICAgICBNZXNzYWdlKHsKICAgICAgICAgIHR5cGU6ICJlcnJvciIsCiAgICAgICAgICBtZXNzYWdlOiBkYXRhLm1lc3NhZ2UsCiAgICAgICAgICBvbkNsb3NlOiAoKSA9PiB7CiAgICAgICAgICAgIC8vIHdpbmRvdy5sb2NhdGlvbiA9ICJodHRwczovL3d3dy5iYWlkdS5jb20iOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIE1lc3NhZ2UoewogICAgICAgIHR5cGU6ICJlcnJvciIsCiAgICAgICAgbWVzc2FnZTogIuacquivhuWIq+mpu+WLpOeCuUlEIiwKICAgICAgICBvbkNsb3NlOiAoKSA9PiB7CiAgICAgICAgICAvLyB3aW5kb3cubG9jYXRpb24gPSAiaHR0cHM6Ly93d3cuYmFpZHUuY29tIjsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0sCiAgbW91bnRlZCgpIHsKICAgIHRoaXMuZXZlbnRCdXNCaW5kaW5nKCk7CiAgICBnZXRTdGF0aW9uRGV0YWlsKHRoaXMuc3RhdGlvbklkKS50aGVuKHN0YXRpb25EZXRhaWwgPT4gewogICAgICBjb25zb2xlLmxvZygic3RhdGlvbkRldGFpbCIsIHN0YXRpb25EZXRhaWwpOwogICAgICBjb25zdCB7CiAgICAgICAgc3VwZXJ2aXNlRGVwYXJ0TmFtZSwKICAgICAgICBhZGRyZXNzLAogICAgICAgIGxvbmdpdHVkZSwKICAgICAgICBsYXRpdHVkZSwKICAgICAgICBzdGF0aW9uVHlwZXMKICAgICAgfSA9IHN0YXRpb25EZXRhaWw7CiAgICAgIGNvbnN0IFt7CiAgICAgICAgbWFwSWNvbgogICAgICB9XSA9IHN0YXRpb25UeXBlczsKICAgICAgaWYgKHRoaXMubGF5ZXJzLnN0YXRpb25MYXllci5mZWF0dXJlcy5sZW5ndGggPD0gMCkgewogICAgICAgIHRoaXMubGF5ZXJzLnN0YXRpb25MYXllci5mZWF0dXJlcyA9IFt7CiAgICAgICAgICBjb29yZGluYXRlczogW051bWJlcihsb25naXR1ZGUpLCBOdW1iZXIobGF0aXR1ZGUpXSwKICAgICAgICAgIGNvbnZlcnQ6ICJnZC04NCIsCiAgICAgICAgICBzdHlsZTogewogICAgICAgICAgICBpY29uOiB7CiAgICAgICAgICAgICAgc3JjOiBtYXBJY29uLAogICAgICAgICAgICAgIHNjYWxlOiAwLjUKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHByb3BzOiBzdGF0aW9uRGV0YWlsCiAgICAgICAgfV07CiAgICAgIH0KICAgICAgdGhpcy5pbmZvID0gewogICAgICAgIC4uLnN0YXRpb25EZXRhaWwsCiAgICAgICAgc3VwZXJ2aXNlRGVwYXJ0TmFtZVNsaWNlOiB0ZXh0U2xpY2Uoc3VwZXJ2aXNlRGVwYXJ0TmFtZSksCiAgICAgICAgYWRkcmVzc1NsaWNlOiB0ZXh0U2xpY2UoYWRkcmVzcykKICAgICAgfTsKICAgICAgLyoqCiAgICAgICAqIEDlvLnmoYbkvY3nva7ovazpq5jlvrfovaw4NAogICAgICAgKi8KICAgICAgY29uc3QgY2VudGVyID0gdXRpbHMuY29udmVydENvb3JkaW5hdGUoW051bWJlcihsb25naXR1ZGUpLCBOdW1iZXIobGF0aXR1ZGUpXSwgImdkLTg0Iik7CiAgICAgIHRoaXMuJHJlZnMubWFwLnBhblRvKHsKICAgICAgICBjZW50ZXI6IGNlbnRlcgogICAgICB9KTsKICAgIH0pLmNhdGNoKGVyciA9PiB7CiAgICAgIGNvbnNvbGUubG9nKGVycik7CiAgICB9KTsKICB9Cn07"},null]}