{"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":1705389397681},{"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:aW1wb3J0IHsgdXRpbHMsIFZNYXAsIFZUaWxlLCBWVmVjdG9yLCBWT3ZlcmxheSwgVkRyYXcgfSBmcm9tICJ2LW9sLW1hcCI7CmltcG9ydCAidi1vbC1tYXAvbGliL3Ytb2wtbWFwLmNzcyI7CmltcG9ydCBtYXBUb29sYmFyIGZyb20gIkAvY29tcG9uZW50cy9tYXBUb29sYmFyL2luZGV4LnZ1ZSI7CmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tICJlbGVtZW50LXVpIjsKaW1wb3J0IHsgZGVsZXRlUmFpbEFjY2VzcywgZ2V0UmFpbERldGFpbEFjY2Vzcywgc2VhcmNoUmFpbEFjY2VzcyB9IGZyb20gIkAvYXBpL3NlY3VyaXR5LXN0YXRpb24tcmFpbHMtY29udHJvbGxlciI7CmltcG9ydCB7IHRleHRTbGljZSB9IGZyb20gIkAvYXBpL2NvbW1vbiI7CmltcG9ydCBPdmVybGF5U3RhdGlvbiBmcm9tICJAL2NvbXBvbmVudHMvbWFwT3ZlcmxheS9zdGF0aW9uIjsKaW1wb3J0IE92ZXJsYXlDb21wYW55IGZyb20gIkAvY29tcG9uZW50cy9tYXBPdmVybGF5L2NvbXBhbnkiOwppbXBvcnQgeyBnZXRDb21wYW55RGV0YWlsIH0gZnJvbSAiQC9hcGkvY29tcGFueS1jb250cm9sbGVyIjsKaW1wb3J0IHsgZ2V0RW1wbG95ZWVzIH0gZnJvbSAiQC9hcGkvZW1wbG95ZWUtY29udHJvbGxlciI7CmltcG9ydCBPdmVybGF5U3RhdGlvbkVtcGxveWVlcyBmcm9tICJAL2NvbXBvbmVudHMvbWFwT3ZlcmxheS9zdGF0aW9uRW1wbG95ZWVzIjsKaW1wb3J0IGVsZWN0cm9uaWNGZW5jZURpYWxvZyBmcm9tICJAL3ZpZXdzL3JhaWwvY29tcG9uZW50cy9lbGVjdHJvbmljRmVuY2UudnVlIjsKaW1wb3J0IGVsZWN0cm9uaWNGZW5jZUVkaXREaWFsb2cgZnJvbSAiQC9jb21wb25lbnRzL2VsZWN0cm9uaWNGZW5jZUVkaXQudnVlIjsKaW1wb3J0IGVsZWN0cm9uaWNGZW5jZVBlb3BsZSBmcm9tICJAL2NvbXBvbmVudHMvZWxlY3Ryb25pY0ZlbmNlUGVvcGxlLnZ1ZSI7CmltcG9ydCBlbGVjdHJvbmljRmVuY2VTdGF0aW9uRGlhbG9nIGZyb20gIkAvY29tcG9uZW50cy9lbGVjdHJvbmljRmVuY2VTdGF0aW9uLnZ1ZSI7CmV4cG9ydCBkZWZhdWx0IHsKICBuYW1lOiAicmFpbCIsCiAgY29tcG9uZW50czogewogICAgVk1hcCwKICAgIFZUaWxlLAogICAgVlZlY3RvciwKICAgIFZPdmVybGF5LAogICAgVkRyYXcsCiAgICBtYXBUb29sYmFyLAogICAgT3ZlcmxheVN0YXRpb24sCiAgICBPdmVybGF5Q29tcGFueSwKICAgIE92ZXJsYXlTdGF0aW9uRW1wbG95ZWVzLAogICAgZWxlY3Ryb25pY0ZlbmNlRGlhbG9nLAogICAgZWxlY3Ryb25pY0ZlbmNlRWRpdERpYWxvZywKICAgIGVsZWN0cm9uaWNGZW5jZVN0YXRpb25EaWFsb2csCiAgICBlbGVjdHJvbmljRmVuY2VQZW9wbGUKICB9LAogIGRhdGEoKSB7CiAgICByZXR1cm4gewogICAgICB2aWV3OiB7CiAgICAgICAgY2l0eTogIuWOpumXqCIsCiAgICAgICAgem9vbTogMTIKICAgICAgfSwKICAgICAgdGlsZVR5cGU6ICJHRCIsCiAgICAgIGludGVyYWN0aW9uczogewogICAgICAgIERyYWdSb3RhdGVBbmRab29tOiB0cnVlLAogICAgICAgIGRvdWJsZUNsaWNrWm9vbTogZmFsc2UKICAgICAgfSwKICAgICAgY29udHJvbHM6IHsKICAgICAgICB6b29tOiB0cnVlLAogICAgICAgIHpvb21PcHRpb25zOiB7CiAgICAgICAgICBjbGFzc05hbWU6ICJvbC16b29tLWN1c3RvbSIKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHN0YXRpb25JZDogIiIsCiAgICAgIG1hcFRvb2xMaXN0OiBbImZlbmNlIiwgInRpbGUiXSwKICAgICAgdGFibGVEYXRhOiBbXSwKICAgICAgb3JpZ2luRGF0YTogW10sCiAgICAgIHN0YXRpb246IHt9LAogICAgICBpbmZvOiB7fSwKICAgICAgcmV0dXJuV2luOiB7fSwKICAgICAgbGF5ZXJzOiB7CiAgICAgICAgLy8g6am75Yuk54K5CiAgICAgICAgc3RhdGlvbkxheWVyOiB7CiAgICAgICAgICBmZWF0dXJlczogW10sCiAgICAgICAgICBvdmVybGF5OiB7CiAgICAgICAgICAgIHBvc2l0aW9uOiB1bmRlZmluZWQsCiAgICAgICAgICAgIG9mZnNldDogWzAsIC0zNl0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIC8vIOS8geS4mgogICAgICAgIGNvbXBhbnlMYXllcjogewogICAgICAgICAgZmVhdHVyZXM6IFtdLAogICAgICAgICAgb3ZlcmxheTogewogICAgICAgICAgICBwb3NpdGlvbjogdW5kZWZpbmVkLAogICAgICAgICAgICBvZmZzZXQ6IFswLCAtMzZdCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAvLyDpqbvli6TngrnkurrlkZgKICAgICAgICBzdGF0aW9uRW1wbG95ZWVzTGF5ZXI6IHsKICAgICAgICAgIGZlYXR1cmVzOiBbXSwKICAgICAgICAgIG92ZXJsYXk6IHsKICAgICAgICAgICAgcG9zaXRpb246IHVuZGVmaW5lZCwKICAgICAgICAgICAgb2Zmc2V0OiBbMCwgLTM2XQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgLy8g55S15a2Q5Zu05qCPCiAgICAgICAgcmFpbExheWVyOiB7CiAgICAgICAgICBmZWF0dXJlczogW10sCiAgICAgICAgICBjbHVzdGVyOiB7CiAgICAgICAgICAgIGRpc3RhbmNlOiAxMTAsCiAgICAgICAgICAgIHN0eWxlOiB7CiAgICAgICAgICAgICAgY2lyY2xlOiB7CiAgICAgICAgICAgICAgICByYWRpdXM6IDUwLAogICAgICAgICAgICAgICAgZmlsbDogewogICAgICAgICAgICAgICAgICBjb2xvcjogIiMwRTcxRkYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICB0ZXh0OiB7CiAgICAgICAgICAgICAgICBmb250OiAiMjJweCBTb3VyY2UgSGFuIFNhbnMgQ04tTWVkaXVtLCBTb3VyY2UgSGFuIFNhbnMgQ04iLAogICAgICAgICAgICAgICAgZmlsbDogewogICAgICAgICAgICAgICAgICBjb2xvcjogIiNGRkZGRkYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgc3R5bGU6IHsKICAgICAgICAgICAgZmlsbDogewogICAgICAgICAgICAgIGNvbG9yOiAicmdiYSgyMzAsMTYyLDYwLDAuMikiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHN0cm9rZTogewogICAgICAgICAgICAgIGNvbG9yOiAiI0U2QTIzQyIsCiAgICAgICAgICAgICAgd2lkdGg6IDIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIG92ZXJsYXk6IHsKICAgICAgICAgICAgcG9zaXRpb246IHVuZGVmaW5lZCwKICAgICAgICAgICAgb2Zmc2V0OiBbMCwgLTM2XQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSwKICAgICAgaXNFbGVjdHJvbmljRmVuY2VFZGl0RGlhbG9nOiBmYWxzZSwKICAgICAgaXNFbGVjdHJvbmljRmVuY2VTdGF0aW9uRGlhbG9nOiBmYWxzZSwKICAgICAgaXNFbGVjdHJvbmljRmVuY2VEaWFsb2c6IGZhbHNlLAogICAgICBpc0VsZWN0cm9uaWNGZW5jZVBlb3BsZTogZmFsc2UsCiAgICAgIGVsZWN0cm9uaWNGZW5jZURhdGE6IFtdLAogICAgICBlbGVjdHJvbmljRmVuY2VJbmZvOiB7fSwKICAgICAgZHJhd1R5cGU6ICIiLAogICAgICBlbGVjdHJvbmljRmVuY2VQZW9wbGVMaXN0OiBbXSwKICAgICAgcGVvcGxlU3RhdGlvbk5hbWU6ICIiCiAgICB9OwogIH0sCiAgbWV0aG9kczogewogICAgLyoqCiAgICAgKiBA6am75Yuk54K55Zu+5bGC54K55Ye75LqL5Lu2CiAgICAgKiAx44CB5YWI5Yik5pat54K55Ye75L2N572u5piv5ZCm5pyJ6am75Yuk54K5CiAgICAgKiAy44CB6I635Y+W54K55bGe5oCnaWQKICAgICAqIDPjgIHpgJrov4dpZOafpeaJvumpu+WLpOeCueivpuaDhQogICAgICogNOOAgeaKiuivpuaDheaUvuWIsGluZm/lj5jph4/nlKjmnaXlsZXnjrDor6bmg4XvvIhzaG93U3RhdGlvbkluZm/vvIkKICAgICAqIDXjgIHmiornu4/nuqzluqbotYvlgLznu5lwb3NpdGlvbuWxnuaAp+WxleekuuW8ueahhgogICAgICogQHBhcmFtIGV2dAogICAgICogQHBhcmFtIGZlYXR1cmUKICAgICAqLwogICAgY2xpY2tTdGF0aW9uKGV2dCwgZmVhdHVyZSkgewogICAgICBpZiAoZmVhdHVyZSkgewogICAgICAgIHRoaXMuc2hvd1N0YXRpb25JbmZvKCk7CiAgICAgIH0KICAgIH0sCiAgICAvKioKICAgICAqIEDkvIHkuJrlm77lsYLngrnlh7vkuovku7YKICAgICAqIEBwYXJhbSBldnQKICAgICAqIEBwYXJhbSBmZWF0dXJlCiAgICAgKi8KICAgIGNsaWNrQ29tcGFueShldnQsIGZlYXR1cmUpIHsKICAgICAgaWYgKGZlYXR1cmUpIHsKICAgICAgICBjb25zb2xlLmxvZyhmZWF0dXJlKTsKICAgICAgICBjb25zdCBmZWF0dXJlcyA9IGZlYXR1cmUuZ2V0KCJmZWF0dXJlcyIpOwogICAgICAgIGlmIChmZWF0dXJlcyAmJiBmZWF0dXJlcy5sZW5ndGggPT09IDEpIHsKICAgICAgICAgIGNvbnN0IGNvbXBhbnkgPSBmZWF0dXJlc1swXTsKICAgICAgICAgIGNvbnN0IGluZm8gPSBjb21wYW55LmdldCgicHJvcHMiKTsKICAgICAgICAgIGNvbnNvbGUubG9nKGluZm8pOwogICAgICAgICAgdGhpcy5zaG93Q29tcGFueUluZm8oewogICAgICAgICAgICBpbmZvCiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgLy8g5aaC5p6c5piv6IGa5ZCI54K55bCx5LiL6ZK75LiA57qnCiAgICAgICAgICBjb25zdCB6b29tID0gdGhpcy4kcmVmcy5tYXAubWFwLmdldFZpZXcoKS5nZXRab29tKCkgKyAxOwogICAgICAgICAgY29uc3QgY2VudGVyID0gZXZ0LmNvb3JkaW5hdGU7CiAgICAgICAgICB0aGlzLiRyZWZzLm1hcC5wYW5Ubyh7CiAgICAgICAgICAgIHpvb20sCiAgICAgICAgICAgIGNlbnRlcgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgLyoqCiAgICAgKiBA6am75Yuk54K56K+m5oOFCiAgICAgKi8KICAgIHNob3dTdGF0aW9uSW5mbygpIHsKICAgICAgdGhpcy5jbGVhck1hcCgpOwogICAgICBjb25zdCB7CiAgICAgICAgc3VwZXJ2aXNlRGVwYXJ0TmFtZSwKICAgICAgICBhZGRyZXNzLAogICAgICAgIGxvbmdpdHVkZSwKICAgICAgICBsYXRpdHVkZSwKICAgICAgICBzdGF0aW9uVHlwZXMKICAgICAgfSA9IHRoaXMuc3RhdGlvbjsKICAgICAgY29uc3QgW3sKICAgICAgICBtYXBJY29uCiAgICAgIH1dID0gc3RhdGlvblR5cGVzOwogICAgICBpZiAodGhpcy5sYXllcnMuc3RhdGlvbkxheWVyLmZlYXR1cmVzLmxlbmd0aCA8PSAwKSB7CiAgICAgICAgdGhpcy5sYXllcnMuc3RhdGlvbkxheWVyLmZlYXR1cmVzID0gW3sKICAgICAgICAgIGNvb3JkaW5hdGVzOiBbTnVtYmVyKGxvbmdpdHVkZSksIE51bWJlcihsYXRpdHVkZSldLAogICAgICAgICAgY29udmVydDogImdkLTg0IiwKICAgICAgICAgIHN0eWxlOiB7CiAgICAgICAgICAgIGljb246IHsKICAgICAgICAgICAgICBzcmM6IG1hcEljb24sCiAgICAgICAgICAgICAgc2NhbGU6IDAuNQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgcHJvcHM6IHRoaXMuc3RhdGlvbgogICAgICAgIH1dOwogICAgICB9CiAgICAgIHRoaXMuaW5mbyA9IHsKICAgICAgICAuLi50aGlzLnN0YXRpb24sCiAgICAgICAgc3VwZXJ2aXNlRGVwYXJ0TmFtZVNsaWNlOiB0ZXh0U2xpY2Uoc3VwZXJ2aXNlRGVwYXJ0TmFtZSksCiAgICAgICAgYWRkcmVzc1NsaWNlOiB0ZXh0U2xpY2UoYWRkcmVzcykKICAgICAgfTsKICAgICAgLyoqCiAgICAgICAqIEDlvLnmoYbkvY3nva7ovazpq5jlvrfovaw4NAogICAgICAgKi8KICAgICAgdGhpcy5sYXllcnMuc3RhdGlvbkxheWVyLm92ZXJsYXkucG9zaXRpb24gPSB1dGlscy5jb252ZXJ0Q29vcmRpbmF0ZShbTnVtYmVyKGxvbmdpdHVkZSksIE51bWJlcihsYXRpdHVkZSldLCAiZ2QtODQiKTsKICAgICAgdGhpcy4kcmVmcy5tYXAucGFuVG8oewogICAgICAgIGNlbnRlcjogdGhpcy5sYXllcnMuc3RhdGlvbkxheWVyLm92ZXJsYXkucG9zaXRpb24KICAgICAgfSk7CiAgICB9LAogICAgLyoqCiAgICAgKiBA6am75Yuk54K55by55qGG54K55Ye75YWz6ZetCiAgICAgKi8KICAgIGNsb3NlU3RhdGlvbkluZm8oKSB7CiAgICAgIHRoaXMubGF5ZXJzLnN0YXRpb25MYXllci5vdmVybGF5LnBvc2l0aW9uID0gdW5kZWZpbmVkOwogICAgfSwKICAgIC8qKgogICAgICogQOS8geS4muivpuaDhQogICAgICogQHBhcmFtIGluZm8KICAgICAqIEBwYXJhbSBpbmZvVHlwZQogICAgICovCiAgICBzaG93Q29tcGFueUluZm8oewogICAgICBpbmZvLAogICAgICBpbmZvVHlwZQogICAgfSkgewogICAgICBjb25zb2xlLmxvZygiY29tcGFueSIsIGluZm8pOwogICAgICBsZXQgewogICAgICAgIG9yZ2FuaXphdGlvbklkCiAgICAgIH0gPSBpbmZvOwogICAgICBnZXRDb21wYW55RGV0YWlsKG9yZ2FuaXphdGlvbklkKS50aGVuKGNvbXBhbnkgPT4gewogICAgICAgIGNvbnN0IHsKICAgICAgICAgIHJlZ2lzdGVyQWRkcmVzcywKICAgICAgICAgIGxvbmdpdHVkZSwKICAgICAgICAgIGxhdGl0dWRlCiAgICAgICAgfSA9IGNvbXBhbnk7CiAgICAgICAgY29uc29sZS5sb2coImNvbXBhbnkiLCBjb21wYW55KTsKICAgICAgICB0aGlzLmluZm8gPSB7CiAgICAgICAgICAuLi5jb21wYW55LAogICAgICAgICAgcmVnaXN0ZXJBZGRyZXNzU2xpY2U6IHRleHRTbGljZShyZWdpc3RlckFkZHJlc3MpCiAgICAgICAgfTsKICAgICAgICBpZiAoaW5mb1R5cGUpIHsKICAgICAgICAgIHRoaXMuY2xlYXJNYXAoKTsKICAgICAgICAgIHRoaXMuaGlkZUZlbmNlVGFibGUoKTsKICAgICAgICAgIHRoaXMucmV0dXJuV2luID0gewogICAgICAgICAgICBpbmZvLAogICAgICAgICAgICBpbmZvVHlwZQogICAgICAgICAgfTsKICAgICAgICAgIHRoaXMubGF5ZXJzLmNvbXBhbnlMYXllci5mZWF0dXJlcyA9IFt7CiAgICAgICAgICAgIGNvb3JkaW5hdGVzOiBbTnVtYmVyKGxvbmdpdHVkZSksIE51bWJlcihsYXRpdHVkZSldLAogICAgICAgICAgICBjb252ZXJ0OiAiZ2QtODQiLAogICAgICAgICAgICBzdHlsZTogewogICAgICAgICAgICAgIGljb246IHsKICAgICAgICAgICAgICAgIHNyYzogcmVxdWlyZSgiQC9hc3NldHMvaW1hZ2VzL21hcFNlYXJjaC/lhazlj7gucG5nIikKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHByb3BzOiBjb21wYW55CiAgICAgICAgICB9XTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogQOW8ueahhuS9jee9rui9rOmrmOW+t+i9rDg0CiAgICAgICAgICovCiAgICAgICAgdGhpcy5sYXllcnMuY29tcGFueUxheWVyLm92ZXJsYXkucG9zaXRpb24gPSB1dGlscy5jb252ZXJ0Q29vcmRpbmF0ZShbTnVtYmVyKGxvbmdpdHVkZSksIE51bWJlcihsYXRpdHVkZSldLCAiZ2QtODQiKTsKICAgICAgICB0aGlzLiRyZWZzLm1hcC5wYW5Ubyh7CiAgICAgICAgICBjZW50ZXI6IHRoaXMubGF5ZXJzLmNvbXBhbnlMYXllci5vdmVybGF5LnBvc2l0aW9uCiAgICAgICAgfSk7CiAgICAgIH0pLmNhdGNoKGVyciA9PiB7CiAgICAgICAgY29uc29sZS5sb2coZXJyKTsKICAgICAgfSk7CiAgICB9LAogICAgLyoqCiAgICAgKiBA5LyB5Lia5by55qGG54K55Ye75YWz6ZetCiAgICAgKi8KICAgIGNsb3NlQ29tcGFueUluZm8oKSB7CiAgICAgIHRoaXMucmV0dXJuV2luID0ge307CiAgICAgIHRoaXMubGF5ZXJzLmNvbXBhbnlMYXllci5vdmVybGF5LnBvc2l0aW9uID0gdW5kZWZpbmVkOwogICAgfSwKICAgIC8qKgogICAgICogQOmpu+WLpOeCueS6uuWRmOivpuaDhQogICAgICogQHBhcmFtIGluZm8KICAgICAqIEBwYXJhbSBpbmZvVHlwZQogICAgICovCiAgICBzaG93U3RhdGlvbkVtcGxveWVlc0luZm8oewogICAgICBpbmZvLAogICAgICBpbmZvVHlwZQogICAgfSkgewogICAgICBjb25zb2xlLmxvZygic2hvd1N0YXRpb25FbXBsb3llZXNJbmZvLSIgKyBpbmZvVHlwZSwgaW5mbyk7CiAgICAgIGxldCB7CiAgICAgICAgaWQKICAgICAgfSA9IGluZm87CiAgICAgIGdldEVtcGxveWVlcyh7CiAgICAgICAgcGFnZUluZGV4OiAxLAogICAgICAgIHBhZ2VTaXplOiAxMDAwLAogICAgICAgIHNlY3VyaXR5U3RhdGlvbklkOiBpZCwKICAgICAgICBzZWFyY2hNb2RlbDogInNlY3VyaXR5U3RhdGlvbiIKICAgICAgfSkudGhlbihyZXMgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCJzdGF0aW9uRW1wbG95ZWVzIiwgcmVzKTsKICAgICAgICBjb25zb2xlLmxvZygic3RhdGlvbiIsIGluZm8pOwogICAgICAgIGluZm9bInN0YXRpb25FbXBsb3llZXMiXSA9IFsuLi5yZXNdLm1hcCh4ID0+IHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIC4uLngsCiAgICAgICAgICAgIGlzUGhvbmU6IGZhbHNlCiAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgICAgIHRoaXMuaW5mbyA9IHsKICAgICAgICAgIC4uLnt9LAogICAgICAgICAgLi4uaW5mbwogICAgICAgIH07CiAgICAgICAgY29uc29sZS5sb2coImluZm8iLCB0aGlzLmluZm8pOwogICAgICAgIGlmIChpbmZvVHlwZSkgewogICAgICAgICAgdGhpcy5jbGVhck1hcCgpOwogICAgICAgICAgdGhpcy5oaWRlRmVuY2VUYWJsZSgpOwogICAgICAgICAgdGhpcy5yZXR1cm5XaW4gPSB7CiAgICAgICAgICAgIGluZm8sCiAgICAgICAgICAgIGluZm9UeXBlCiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5sYXllcnMuc3RhdGlvbkVtcGxveWVlc0xheWVyLmZlYXR1cmVzID0gW3sKICAgICAgICAgICAgY29vcmRpbmF0ZXM6IFtOdW1iZXIoaW5mby5sb25naXR1ZGUpLCBOdW1iZXIoaW5mby5sYXRpdHVkZSldLAogICAgICAgICAgICBjb252ZXJ0OiAiZ2QtODQiLAogICAgICAgICAgICBzdHlsZTogewogICAgICAgICAgICAgIGljb246IHsKICAgICAgICAgICAgICAgIHNyYzogcmVxdWlyZSgiQC9hc3NldHMvaW1hZ2VzL21hcFNlYXJjaC/lnKjlspdf5L+d5a6J5ZGYLnBuZyIpCiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICBwcm9wczogaW5mbwogICAgICAgICAgfV07CiAgICAgICAgICBpZiAoaW5mb1R5cGUgPT09ICJyYWlsIikgewogICAgICAgICAgICBpbmZvWyJuYW1lIl0gPSBpbmZvLnN0YXRpb25OYW1lOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBA5by55qGG5L2N572u6L2s6auY5b636L2sODQKICAgICAgICAgKi8KICAgICAgICB0aGlzLmxheWVycy5zdGF0aW9uRW1wbG95ZWVzTGF5ZXIub3ZlcmxheS5wb3NpdGlvbiA9IHV0aWxzLmNvbnZlcnRDb29yZGluYXRlKFtOdW1iZXIoaW5mby5sb25naXR1ZGUpLCBOdW1iZXIoaW5mby5sYXRpdHVkZSldLCAiZ2QtODQiKTsKICAgICAgICB0aGlzLiRyZWZzLm1hcC5wYW5Ubyh7CiAgICAgICAgICAvLyB6b29tOiAxMywKICAgICAgICAgIC8vIGZseVpvb206IDgsCiAgICAgICAgICBjZW50ZXI6IHRoaXMubGF5ZXJzLnN0YXRpb25FbXBsb3llZXNMYXllci5vdmVybGF5LnBvc2l0aW9uCiAgICAgICAgfSk7CiAgICAgIH0pLmNhdGNoKGVyciA9PiB7CiAgICAgICAgY29uc29sZS5sb2coZXJyKTsKICAgICAgfSk7CiAgICB9LAogICAgLyoqCiAgICAgKiBA6am75Yuk54K55Lq65ZGY5Zu+5bGC54K55Ye75LqL5Lu2CiAgICAgKiBAcGFyYW0gZXZ0CiAgICAgKiBAcGFyYW0gZmVhdHVyZQogICAgICovCiAgICBjbGlja1N0YXRpb25FbXBsb3llZXMoZXZ0LCBmZWF0dXJlKSB7CiAgICAgIGlmIChmZWF0dXJlKSB7CiAgICAgICAgY29uc29sZS5sb2coImNsaWNrU3RhdGlvbkVtcGxveWVlcy1mZWF0dXJlIiwgZmVhdHVyZSk7CiAgICAgICAgY29uc3Qgc3RhdGlvbnMgPSBmZWF0dXJlLmdldCgiZmVhdHVyZXMiKTsKICAgICAgICBpZiAoc3RhdGlvbnMgJiYgc3RhdGlvbnMubGVuZ3RoID09PSAxKSB7CiAgICAgICAgICBjb25zdCBzdGF0aW9uID0gc3RhdGlvbnNbMF07CiAgICAgICAgICBjb25zdCBpbmZvID0gc3RhdGlvbi5nZXQoInByb3BzIik7CiAgICAgICAgICB0aGlzLnNob3dTdGF0aW9uRW1wbG95ZWVzSW5mbyh7CiAgICAgICAgICAgIGluZm8KICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoZmVhdHVyZS5nZXQoInByb3BzIikpIHsKICAgICAgICAgICAgY29uc3QgaW5mbyA9IGZlYXR1cmUuZ2V0KCJwcm9wcyIpOwogICAgICAgICAgICB0aGlzLnNob3dTdGF0aW9uRW1wbG95ZWVzSW5mbyh7CiAgICAgICAgICAgICAgaW5mbwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIOWmguaenOaYr+iBmuWQiOeCueWwseS4i+mSu+S4gOe6pwogICAgICAgICAgICBjb25zdCB6b29tID0gdGhpcy4kcmVmcy5tYXAubWFwLmdldFZpZXcoKS5nZXRab29tKCkgKyAxOwogICAgICAgICAgICBjb25zdCBjZW50ZXIgPSBldnQuY29vcmRpbmF0ZTsKICAgICAgICAgICAgdGhpcy4kcmVmcy5tYXAucGFuVG8oewogICAgICAgICAgICAgIHpvb20sCiAgICAgICAgICAgICAgY2VudGVyCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIC8qKgogICAgICogQOmpu+WLpOeCueS6uuaVsOW8ueahhueCueWHu+WFs+mXrQogICAgICovCiAgICBjbG9zZVN0YXRpb25FbXBsb3llZXNJbmZvKCkgewogICAgICB0aGlzLnJldHVybldpbiA9IHt9OwogICAgICB0aGlzLmxheWVycy5zdGF0aW9uRW1wbG95ZWVzTGF5ZXIub3ZlcmxheS5wb3NpdGlvbiA9IHVuZGVmaW5lZDsKICAgIH0sCiAgICAvKioKICAgICAqIEDnlLXlrZDlm7TmoI/lm77lsYLngrnlh7vkuovku7YKICAgICAqIEBwYXJhbSBldnQKICAgICAqIEBwYXJhbSBmZWF0dXJlCiAgICAgKi8KICAgIGNsaWNrUmFpbChldnQsIGZlYXR1cmUpIHsKICAgICAgaWYgKGZlYXR1cmUpIHsKICAgICAgICBjb25zb2xlLmxvZyhmZWF0dXJlKTsKICAgICAgICBjb25zdCByYWlscyA9IGZlYXR1cmUuZ2V0KCJmZWF0dXJlcyIpOwogICAgICAgIGlmIChyYWlscyAmJiByYWlscy5sZW5ndGggPT09IDEpIHsKICAgICAgICAgIHRoaXMuc2hvd1JhaWxJbmZvRnJvbUxpc3QgPSBmYWxzZTsKICAgICAgICAgIGNvbnN0IHJhaWwgPSByYWlsc1swXTsKICAgICAgICAgIGNvbnN0IGluZm8gPSByYWlsLmdldCgicHJvcHMiKTsKICAgICAgICAgIGNvbnNvbGUubG9nKCJjbGlja1JhaWxJbmZvIiwgaW5mbyk7CiAgICAgICAgICB0aGlzLnNob3dSYWlsSW5mbyh7CiAgICAgICAgICAgIGluZm8KICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoZmVhdHVyZS5nZXQoInByb3BzIikpIHsKICAgICAgICAgICAgdGhpcy5zaG93UmFpbEluZm9Gcm9tTGlzdCA9IGZhbHNlOwogICAgICAgICAgICBjb25zdCBpbmZvID0gZmVhdHVyZS5nZXQoInByb3BzIik7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJjbGlja1JhaWxJbmZvIiwgaW5mbyk7CiAgICAgICAgICAgIHRoaXMuc2hvd1JhaWxJbmZvKHsKICAgICAgICAgICAgICBpbmZvCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8g5aaC5p6c5piv6IGa5ZCI54K55bCx5LiL6ZK75LiA57qnCiAgICAgICAgICAgIGNvbnN0IHpvb20gPSB0aGlzLiRyZWZzLm1hcC5tYXAuZ2V0VmlldygpLmdldFpvb20oKSArIDE7CiAgICAgICAgICAgIGNvbnN0IGNlbnRlciA9IGV2dC5jb29yZGluYXRlOwogICAgICAgICAgICB0aGlzLiRyZWZzLm1hcC5wYW5Ubyh7CiAgICAgICAgICAgICAgem9vbSwKICAgICAgICAgICAgICBjZW50ZXIKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgLyoqCiAgICAgKiBA55S15a2Q5Zu05qCP6K+m5oOFCiAgICAgKiBAcGFyYW0gaW5mbwogICAgICogQHBhcmFtIGluZm9UeXBlCiAgICAgKi8KICAgIHNob3dSYWlsSW5mbyh7CiAgICAgIGluZm8sCiAgICAgIGluZm9UeXBlCiAgICB9KSB7CiAgICAgIC8vIHRoaXMubGF5ZXJzLnJhaWxMYXllci5mZWF0dXJlcyA9IFtdOwogICAgICBnZXRSYWlsRGV0YWlsQWNjZXNzKGluZm8uaWQpLnRoZW4ocmVzID0+IHsKICAgICAgICBjb25zb2xlLmxvZygicmFpbHJlcyIsIHJlcyk7CiAgICAgICAgY29uc29sZS5sb2coInJhaWxpbmZvIiwgaW5mbyk7CiAgICAgICAgY29uc3QgewogICAgICAgICAgaWQsCiAgICAgICAgICBzaGFwZWRMb2NhdGlvbgogICAgICAgIH0gPSBpbmZvOwogICAgICAgIGNvbnN0IHsKICAgICAgICAgIGNvbXBhbnlOYW1lLAogICAgICAgICAgcmFpbFNoYXBlVHlwZQogICAgICAgIH0gPSByZXM7CiAgICAgICAgdGhpcy5pbmZvID0gewogICAgICAgICAgLi4ucmVzLAogICAgICAgICAgY29tcGFueU5hbWVTbGljZTogdGV4dFNsaWNlKGNvbXBhbnlOYW1lKSwKICAgICAgICAgIHNoYXBlZExvY2F0aW9uLAogICAgICAgICAgLy/lkI7nq6/kvKDlgLzmnInpl67popgKICAgICAgICAgIGlkIC8v5ZCO56uv5Lyg5YC85pyJ6Zeu6aKYCiAgICAgICAgfTsKICAgICAgICBpZiAoaW5mb1R5cGUpIHsKICAgICAgICAgIHRoaXMuY2xlYXJNYXAoKTsKICAgICAgICAgIHRoaXMuaGlkZUZlbmNlVGFibGUoKTsKICAgICAgICAgIHRoaXMucmV0dXJuV2luID0gewogICAgICAgICAgICBpbmZvLAogICAgICAgICAgICBpbmZvVHlwZQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgaWYgKHJhaWxTaGFwZVR5cGUgJiYgcmFpbFNoYXBlVHlwZSA9PT0gIkNpcmNsZSIpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKCJDaXJjbGUiLCByZXMuc2hhcGVkTG9jYXRpb24pOwogICAgICAgICAgY29uc3QgZmVhdHVyZSA9IHsKICAgICAgICAgICAgdHlwZTogImNpcmNsZSIsCiAgICAgICAgICAgIC8vIGNlbnRlcjogWzExOC4wNTE4NzYsIDI0LjYwNzQ1M10sCiAgICAgICAgICAgIC8vIHJhZGl1czogMjcyLAogICAgICAgICAgICBjb252ZXJ0OiAiZ2QtODQiLAogICAgICAgICAgICBjZW50ZXI6IFtyZXMuc2hhcGVkTG9jYXRpb24uZ2Vvc1swXS5sb24sIHJlcy5zaGFwZWRMb2NhdGlvbi5nZW9zWzBdLmxhdF0sCiAgICAgICAgICAgIHJhZGl1czogcmVzLnNoYXBlZExvY2F0aW9uLnJhZGl1cywKICAgICAgICAgICAgcHJvcHM6IGluZm8KICAgICAgICAgIH07CiAgICAgICAgICBjb25zb2xlLmxvZyhmZWF0dXJlKTsKICAgICAgICAgIHRoaXMubGF5ZXJzLnJhaWxMYXllci5jbHVzdGVyID0gZmFsc2U7CiAgICAgICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIuZmVhdHVyZXMgPSBbZmVhdHVyZV07CiAgICAgICAgfSBlbHNlIGlmIChyYWlsU2hhcGVUeXBlID09PSAiQ3JpYiIgfHwgcmFpbFNoYXBlVHlwZSA9PT0gIlBvbHlnb24iKSB7CiAgICAgICAgICBjb25zdCBjb29yZGluYXRlcyA9IHJlcy5zaGFwZWRMb2NhdGlvbi5nZW9zLm1hcCh4ID0+IHsKICAgICAgICAgICAgcmV0dXJuIFt4LmxvbiwgeC5sYXRdOwogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIuY2x1c3RlciA9IGZhbHNlOwogICAgICAgICAgdGhpcy5sYXllcnMucmFpbExheWVyLmZlYXR1cmVzID0gW3sKICAgICAgICAgICAgdHlwZTogInBvbHlnb24iLAogICAgICAgICAgICBjb252ZXJ0OiAiZ2QtODQiLAogICAgICAgICAgICBjb29yZGluYXRlcywKICAgICAgICAgICAgcHJvcHM6IGluZm8KICAgICAgICAgIH1dOwogICAgICAgIH0KICAgICAgfSkuY2F0Y2goZXJyID0+IHsKICAgICAgICBjb25zb2xlLmxvZyhlcnIpOwogICAgICB9KTsKICAgIH0sCiAgICBvblJhaWxMYXllckNoYW5nZShmZWF0dXJlcykgewogICAgICBjb25zb2xlLmxvZyhmZWF0dXJlcyk7CiAgICAgIGlmIChmZWF0dXJlcyAmJiBmZWF0dXJlcy5sZW5ndGggPT09IDEpIHsKICAgICAgICBjb25zdCBmZWF0dXJlID0gZmVhdHVyZXNbMF07CiAgICAgICAgY29uc3QgdHlwZSA9IGZlYXR1cmUuZ2V0KCJ0eXBlIik7CiAgICAgICAgaWYgKHR5cGUgJiYgIXRoaXMuc2hvd1JhaWxJbmZvRnJvbUxpc3QpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKHR5cGUpOwogICAgICAgICAgaWYgKHR5cGUgPT09ICJwb2x5Z29uIiB8fCB0eXBlID09PSAiUG9seWdvbiIpIHsKICAgICAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBmZWF0dXJlLmdldCgiZ2VvbWV0cnkiKTsKICAgICAgICAgICAgLy8gY29uc3QgdmlldyA9IHRoaXMuJHJlZnMubWFwLm1hcC5nZXRWaWV3KCk7CiAgICAgICAgICAgIC8vIHZpZXcuZml0KGdlb21ldHJ5LCB7CiAgICAgICAgICAgIC8vICAgZHVyYXRpb246IDEwMDAsCiAgICAgICAgICAgIC8vIH0pOwogICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLiRyZWZzLm1hcC5jYWxjdWxhdGVDZW50ZXIoZ2VvbWV0cnkpOwogICAgICAgICAgICBjb25zdCB7CiAgICAgICAgICAgICAgY2VudGVyCiAgICAgICAgICAgIH0gPSByZXN1bHQ7CiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGNvb3JkaW5hdGVzKQogICAgICAgICAgICAvKioKICAgICAgICAgICAgICogQOW8ueahhuS9jee9rui9rOmrmOW+t+i9rDg0CiAgICAgICAgICAgICAqLwogICAgICAgICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIub3ZlcmxheS5wb3NpdGlvbiA9IGNlbnRlcjsKICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gImNpcmNsZSIgfHwgdHlwZSA9PT0gIkNpcmNsZSIpIHsKICAgICAgICAgICAgY29uc3QgZ2VvbWV0cnkgPSBmZWF0dXJlLmdldCgiZ2VvbWV0cnkiKTsKICAgICAgICAgICAgLy8gY29uc3QgdmlldyA9IHRoaXMuJHJlZnMubWFwLm1hcC5nZXRWaWV3KCk7CiAgICAgICAgICAgIC8vIHZpZXcuZml0KGdlb21ldHJ5LCB7CiAgICAgICAgICAgIC8vICAgZHVyYXRpb246IDEwMDAsCiAgICAgICAgICAgIC8vIH0pOwogICAgICAgICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIub3ZlcmxheS5wb3NpdGlvbiA9IGdlb21ldHJ5LmdldENlbnRlcigpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIC8qKgogICAgICogQOeUteWtkOWbtOagj+WIl+ihqAogICAgICovCiAgICBzZXRGZW5jZSgpIHsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZURpYWxvZyA9IHRydWU7CiAgICB9LAogICAgLyoqCiAgICAgKiBA5rOo5YaM5pi+56S65by55qGG57G75LqL5Lu2CiAgICAgKi8KICAgIGV2ZW50QnVzQmluZGluZygpIHsKICAgICAgdGhpcy4kYnVzLiRvbigiY2xpY2stc3RhdGlvbiIsIHRoaXMuc2hvd1N0YXRpb25JbmZvKTsgLy8g5pi+56S66am75Yuk54K55by55qGGCiAgICAgIHRoaXMuJGJ1cy4kb24oImNsaWNrLWNvbXBhbnkiLCB0aGlzLnNob3dDb21wYW55SW5mbyk7IC8vIOaYvuekuuWFrOWPuOW8ueahhgogICAgICB0aGlzLiRidXMuJG9uKCJjbGljay1zdGF0aW9uRW1wbG95ZWVzIiwgdGhpcy5zaG93U3RhdGlvbkVtcGxveWVlc0luZm8pOyAvLyDmmL7npLrpqbvli6TngrnkurrlkZgKICAgIH0sCiAgICAvKioKICAgICAqIEDmuIXnqbrlnLDlm74KICAgICAqLwogICAgY2xlYXJNYXAoZXhjbHVkZSA9IFsic3RhdGlvbkxheWVyIl0pIHsKICAgICAgZm9yIChsZXQgbGF5ZXJzS2V5IGluIHRoaXMubGF5ZXJzKSB7CiAgICAgICAgaWYgKCFleGNsdWRlLmluY2x1ZGVzKGxheWVyc0tleSkpIHsKICAgICAgICAgIHRoaXMubGF5ZXJzW2xheWVyc0tleV0uZmVhdHVyZXMgPSBbXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy4kcmVmcy5tYXAuY2xvc2VPdmVybGF5cygpOwogICAgfSwKICAgIG9uQ2hhbmdlTGF5ZXIodHlwZSkgewogICAgICAvLyBjb25zb2xlLmxvZygib25DaGFuZ2VMYXllciIsIHR5cGUpOwogICAgICBpZiAodHlwZS5pbmRleE9mKCJkZWZhdWx0IikgPiAtMSkgewogICAgICAgIHRoaXMudGlsZVR5cGUgPSAiR0QiOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMudGlsZVR5cGUgPSAiR0RfSU1HIjsKICAgICAgfQogICAgfSwKICAgIGhpZGVGZW5jZVRhYmxlKCkgewogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlRWRpdERpYWxvZyA9IGZhbHNlOwogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlU3RhdGlvbkRpYWxvZyA9IGZhbHNlOwogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlRGlhbG9nID0gZmFsc2U7CiAgICB9LAogICAgZWxlY3Ryb25pY0ZlbmNlQ2FuY2VsKCkgewogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlRGlhbG9nID0gZmFsc2U7CiAgICB9LAogICAgLyoqCiAgICAgKiBA5paw5aKe55S15a2Q5Zu05qCPCiAgICAgKi8KICAgIGFkZEVsZWN0cm9uaWMoKSB7CiAgICAgIHRoaXMuaXNFbGVjdHJvbmljRmVuY2VFZGl0RGlhbG9nID0gdHJ1ZTsKICAgICAgdGhpcy5pc0VsZWN0cm9uaWNGZW5jZURpYWxvZyA9IGZhbHNlOwogICAgICB0aGlzLmVsZWN0cm9uaWNGZW5jZUluZm8gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuaW5mbykpOwogICAgICB0aGlzLmVsZWN0cm9uaWNGZW5jZUluZm8gPSB7fTsKICAgICAgY29uc29sZS5sb2codGhpcy5zdGF0aW9uKTsKICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gewogICAgICAgIHRoaXMuJHJlZnMuZWxlY3Ryb25pY0ZlbmNlRWRpdC51cGRhdGVTdGF0aW9uKHsKICAgICAgICAgIHN0YXRpb25OYW1lOiB0aGlzLnN0YXRpb24ubmFtZSwKICAgICAgICAgIHBlb3BsZU51bTogdGhpcy5zdGF0aW9uLmNvdW50T2ZTZWN1cml0eU1hbiwKICAgICAgICAgIGNvdW50T2ZTZWN1cml0eU1hbjogdGhpcy5zdGF0aW9uLmNvdW50T2ZTZWN1cml0eU1hbiwKICAgICAgICAgIHN0YXRpb25JZDogdGhpcy5zdGF0aW9uLmlkCiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfSwKICAgIC8qKgogICAgICogQOe8lui+keafkOadoeeUteWtkOWbtOagjwogICAgICogQHBhcmFtIGRhdGEKICAgICAqLwogICAgYXN5bmMgZWxlY3Ryb25pY0ZlbmNlRWRpdEZuKHsKICAgICAgZGF0YQogICAgfSkgewogICAgICBjb25zb2xlLmxvZygi57yW6L6R5p+Q5p2h55S15a2Q5Zu05qCPIiwgZGF0YSk7CiAgICAgIHRoaXMuc2hvd1JhaWxJbmZvRnJvbUxpc3QgPSB0cnVlOwogICAgICAvLyB0aGlzLm1hcC5jbGVhck1hcCgpOwogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlRGlhbG9nID0gZmFsc2U7CiAgICAgIHRoaXMuZWxlY3Ryb25pY0ZlbmNlSW5mbyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpOwogICAgICB0aGlzLmVsZWN0cm9uaWNGZW5jZUluZm8udGltZSA9IFt0aGlzLmVsZWN0cm9uaWNGZW5jZUluZm8uYmVnaW5UaW1lLCB0aGlzLmVsZWN0cm9uaWNGZW5jZUluZm8uZW5kVGltZV07CiAgICAgIGNvbnN0IHJhaWwgPSBhd2FpdCBnZXRSYWlsRGV0YWlsQWNjZXNzKGRhdGEuaWQpOwogICAgICB0aGlzLmluZm8gPSB7CiAgICAgICAgLi4ucmFpbCwKICAgICAgICAuLi50aGlzLmVsZWN0cm9uaWNGZW5jZUluZm8KICAgICAgfTsgLy8g5by55qGG5L+h5oGvCiAgICAgIGNvbnNvbGUubG9nKHRoaXMuaW5mbyk7CiAgICAgIHRoaXMuaXNFbGVjdHJvbmljRmVuY2VFZGl0RGlhbG9nID0gdHJ1ZTsKICAgICAgLy8g5pi+56S65Y+v57yW6L6R5Zu05qCP5Yy65Z+fCiAgICAgIHRoaXMuc2hvd01hcEVkaXRvcihkYXRhKTsKICAgIH0sCiAgICBkZWxFbGVjdHJvbmljKGRhdGEpIHsKICAgICAgY29uc29sZS5sb2coZGF0YSk7CiAgICAgIGxldCBwYXJhbXMgPSB7CiAgICAgICAgaWQ6IGRhdGEuZGF0YS5pZAogICAgICB9OwogICAgICBkZWxldGVSYWlsQWNjZXNzKHBhcmFtcykudGhlbihyZXMgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCJkZWxldGVSYWlsQWNjZXNzIiwgcmVzKTsKICAgICAgICB0aGlzLiRyZWZzWyJlbGVjdHJvbmljRmVuY2UiXS5nZXRSYWlscygpOwogICAgICAgIHRoaXMuJG1lc3NhZ2UoewogICAgICAgICAgbWVzc2FnZTogIuWIoOmZpOaIkOWKnyIsCiAgICAgICAgICB0eXBlOiAic3VjY2VzcyIKICAgICAgICB9KTsKICAgICAgfSkuY2F0Y2goZXJyID0+IHsKICAgICAgICBjb25zb2xlLmxvZyhlcnIpOwogICAgICB9KTsKICAgIH0sCiAgICBvcGVuUGVvcGxlTnVtRm4oaWQsIHN0YXRpb25OYW1lKSB7CiAgICAgIHRoaXMuZWxlY3Ryb25pY0ZlbmNlUGVvcGxlTGlzdCA9IFtdOwogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlUGVvcGxlID0gdHJ1ZTsKICAgICAgdGhpcy5wZW9wbGVTdGF0aW9uTmFtZSA9IHN0YXRpb25OYW1lOwogICAgICBnZXRFbXBsb3llZXMoewogICAgICAgIHBhZ2VJbmRleDogMSwKICAgICAgICBwYWdlU2l6ZTogMTAwMCwKICAgICAgICBzZWN1cml0eVN0YXRpb25JZDogaWQsCiAgICAgICAgc2VhcmNoTW9kZWw6ICJzZWN1cml0eVN0YXRpb24iCiAgICAgIH0pLnRoZW4ocmVzID0+IHsKICAgICAgICB0aGlzLmVsZWN0cm9uaWNGZW5jZVBlb3BsZUxpc3QgPSByZXM7CiAgICAgIH0pOwogICAgfSwKICAgIC8qKgogICAgICogQOWFs+iBlOmpu+WLpOeCuQogICAgICovCiAgICByZWxhdGlvblN0YXRpb25GbihpbmZvKSB7CiAgICAgIHRoaXMuaXNFbGVjdHJvbmljRmVuY2VTdGF0aW9uRGlhbG9nID0gdHJ1ZTsKICAgICAgdGhpcy5pbmZvID0gewogICAgICAgIC4uLnRoaXMuaW5mbywKICAgICAgICAuLi5pbmZvCiAgICAgIH07CiAgICB9LAogICAgZWxlY3Ryb25pY0ZlbmNlRWRpdENhbmNlbCgpIHsKICAgICAgdGhpcy5sYXllcnMucmFpbExheWVyLmZlYXR1cmVzID0gW107CiAgICAgIHRoaXMuaXNFbGVjdHJvbmljRmVuY2VFZGl0RGlhbG9nID0gZmFsc2U7CiAgICAgIHRoaXMuY2xlYW5EcmF3RmlndXJlKCk7CiAgICAgIHNlYXJjaFJhaWxBY2Nlc3MoewogICAgICAgIHBhZ2VJbmRleDogMSwKICAgICAgICBwYWdlU2l6ZTogMTAsCiAgICAgICAgc2VhcmNoTW9kZWw6ICJTdGF0aW9uIiwKICAgICAgICBzdGF0aW9uSWQ6IHRoaXMuc3RhdGlvbklkCiAgICAgIH0pLnRoZW4ocmVzID0+IHsKICAgICAgICBjb25zb2xlLmxvZygic2VhcmNoUmFpbCIsIHJlcyk7CiAgICAgICAgaWYgKHJlcykgewogICAgICAgICAgdGhpcy5lbGVjdHJvbmljRmVuY2VEYXRhID0gcmVzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBNZXNzYWdlKHsKICAgICAgICAgICAgdHlwZTogImVycm9yIiwKICAgICAgICAgICAgbWVzc2FnZTogIuafpeivoueUteWtkOWbtOagj+S/oeaBr+Wksei0pSIsCiAgICAgICAgICAgIG9uQ2xvc2U6ICgpID0+IHsKICAgICAgICAgICAgICAvLyB3aW5kb3cubG9jYXRpb24gPSAiaHR0cHM6Ly93d3cuYmFpZHUuY29tIjsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KS5jYXRjaCgoKSA9PiB7CiAgICAgICAgTWVzc2FnZSh7CiAgICAgICAgICB0eXBlOiAiZXJyb3IiLAogICAgICAgICAgbWVzc2FnZTogIuafpeivoueUteWtkOWbtOagj+S/oeaBr+Wksei0pSIsCiAgICAgICAgICBvbkNsb3NlOiAoKSA9PiB7CiAgICAgICAgICAgIC8vIHdpbmRvdy5sb2NhdGlvbiA9ICJodHRwczovL3d3dy5iYWlkdS5jb20iOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0sCiAgICBjbGVhbkRyYXdGaWd1cmUoKSB7CiAgICAgIHRoaXMuZHJhd1R5cGUgPSAiIjsKICAgIH0sCiAgICAvKioKICAgICAqIEDlhbPpl63pqbvli6TngrnkurrlkZgKICAgICAqLwogICAgZWxlY3Ryb25pY0ZlbmNlUGVvcGxlQ2FuY2VsKCkgewogICAgICB0aGlzLmlzRWxlY3Ryb25pY0ZlbmNlUGVvcGxlID0gZmFsc2U7CiAgICB9LAogICAgZWxlY3Ryb25pY0ZlbmNlU3RhdGlvbkNhbmNlbCgpIHsKICAgICAgdGhpcy5sYXllcnMucmFpbExheWVyLmZlYXR1cmVzID0gW107CiAgICAgIHRoaXMuaXNFbGVjdHJvbmljRmVuY2VTdGF0aW9uRGlhbG9nID0gZmFsc2U7CiAgICAgIHRoaXMuY2xlYW5EcmF3RmlndXJlKCk7CiAgICB9LAogICAgc2hvd01hcEVkaXRvcih7CiAgICAgIHNoYXBlVHlwZSwKICAgICAgc2hhcGVkTG9jYXRpb24KICAgIH0pIHsKICAgICAgc3dpdGNoIChzaGFwZVR5cGUpIHsKICAgICAgICBjYXNlICJDaXJjbGUiOgogICAgICAgICAgLy8g5ZyGCiAgICAgICAgICB0aGlzLnNob3dDaXJjbGVFZGl0b3Ioc2hhcGVkTG9jYXRpb24pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiUG9seWdvbiI6CiAgICAgICAgICB0aGlzLnNob3dQb2x5Z29uRWRpdG9yKHNoYXBlZExvY2F0aW9uKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkNyaWIiOgogICAgICAgICAgdGhpcy5zaG93Q3JpYkVkaXRvcihzaGFwZWRMb2NhdGlvbik7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfSwKICAgIHNob3dQb2x5Z29uRWRpdG9yKHsKICAgICAgZ2VvcwogICAgfSkgewogICAgICBsZXQgbGlzdCA9IGdlb3MubWFwKGl0ZW0gPT4gW2l0ZW0ubG9uLCBpdGVtLmxhdF0pOwogICAgICBjb25zb2xlLmxvZyhsaXN0KTsKICAgICAgdGhpcy5sYXllcnMucmFpbExheWVyLmZlYXR1cmVzID0gW3sKICAgICAgICB0eXBlOiAicG9seWdvbiIsCiAgICAgICAgY29vcmRpbmF0ZXM6IGxpc3QsCiAgICAgICAgc3R5bGU6IHRoaXMubGF5ZXJzLnJhaWxMYXllci5zdHlsZSwKICAgICAgICBjb252ZXJ0OiAiZ2QtODQiCiAgICAgIH1dOwogICAgICB0aGlzLiRyZWZzLm1hcC5mbHlUbyh7CiAgICAgICAgem9vbTogMTMsCiAgICAgICAgZmx5Wm9vbTogOCwKICAgICAgICBjZW50ZXI6IGxpc3RbMF0KICAgICAgfSk7CiAgICAgIGNvbnNvbGUubG9nKHRoaXMubGF5ZXJzLnJhaWxMYXllci5mZWF0dXJlcyk7CiAgICB9LAogICAgc2hvd0NyaWJFZGl0b3IoewogICAgICBnZW9zCiAgICB9KSB7CiAgICAgIGxldCBsaXN0ID0gZ2Vvcy5tYXAoaXRlbSA9PiBbaXRlbS5sb24sIGl0ZW0ubGF0XSk7CiAgICAgIGNvbnNvbGUubG9nKGxpc3QpOwogICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIuZmVhdHVyZXMgPSBbewogICAgICAgIHR5cGU6ICJwb2x5Z29uIiwKICAgICAgICBjb29yZGluYXRlczogbGlzdCwKICAgICAgICBzdHlsZTogdGhpcy5sYXllcnMucmFpbExheWVyLnN0eWxlLAogICAgICAgIGNvbnZlcnQ6ICJnZC04NCIKICAgICAgfV07CiAgICAgIHRoaXMuJHJlZnMubWFwLmZseVRvKHsKICAgICAgICB6b29tOiAxMywKICAgICAgICBmbHlab29tOiA4LAogICAgICAgIGNlbnRlcjogbGlzdFswXQogICAgICB9KTsKICAgICAgY29uc29sZS5sb2codGhpcy5sYXllcnMucmFpbExheWVyLmZlYXR1cmVzKTsKICAgIH0sCiAgICBzaG93Q2lyY2xlRWRpdG9yKHsKICAgICAgZ2VvcywKICAgICAgcmFkaXVzCiAgICB9KSB7CiAgICAgIGNvbnN0IFtjZW50ZXJdID0gZ2Vvcy5tYXAoaXRlbSA9PiBbaXRlbS5sb24sIGl0ZW0ubGF0XSk7CiAgICAgIGNvbnNvbGUubG9nKGNlbnRlcik7CiAgICAgIHRoaXMubGF5ZXJzLnJhaWxMYXllci5mZWF0dXJlcyA9IFt7CiAgICAgICAgdHlwZTogIkNpcmNsZSIsCiAgICAgICAgY2VudGVyLAogICAgICAgIHJhZGl1cywKICAgICAgICBzdHlsZTogdGhpcy5sYXllcnMucmFpbExheWVyLnN0eWxlLAogICAgICAgIGNvbnZlcnQ6ICJnZC04NCIKICAgICAgfV07CiAgICAgIHRoaXMuJHJlZnMubWFwLmZseVRvKHsKICAgICAgICB6b29tOiAxMywKICAgICAgICAvLyBmbHlab29tOiA4LAogICAgICAgIGNlbnRlcgogICAgICB9KTsKICAgIH0sCiAgICBkcmF3UmFpbCh0eXBlKSB7CiAgICAgIGNvbnNvbGUubG9nKCJkcmF3UmFpbCIsIHR5cGUpOwogICAgICAvLyB0aGlzLmxheWVycy5yYWlsTGF5ZXIuZmVhdHVyZXMgPSBbXQogICAgICB0aGlzLmRyYXdUeXBlID0gdHlwZTsKICAgIH0sCiAgICBkcmF3ZW5kKGV2dCwgbWFwKSB7CiAgICAgIGNvbnN0IHsKICAgICAgICBmZWF0dXJlCiAgICAgIH0gPSBldnQ7CiAgICAgIGNvbnNvbGUubG9nKHRoaXMuZHJhd1R5cGUpOwogICAgICB0aGlzLmxheWVycy5yYWlsTGF5ZXIuZmVhdHVyZXMgPSBbXTsgLy8g5riF56m65LiK5LiA5Liq55S15a2Q5Zu05qCPCiAgICAgIGNvbnN0IGdlb21ldHJ5ID0gZmVhdHVyZS5nZXRHZW9tZXRyeSgpOwogICAgICBpZiAodGhpcy5kcmF3VHlwZSA9PT0gIlJlY3RhbmdsZSIgfHwgdGhpcy5kcmF3VHlwZSA9PT0gIlBvbHlnb24iKSB7CiAgICAgICAgY29uc3QgW2Nvb3JkaW5hdGVzXSA9IGdlb21ldHJ5LmdldENvb3JkaW5hdGVzKCk7CiAgICAgICAgY29uc3QgY29udmVydENvb3JkaW5hdGVzID0gY29vcmRpbmF0ZXMubWFwKGNvb3JkaW5hdGUgPT4gewogICAgICAgICAgcmV0dXJuIHV0aWxzLmNvbnZlcnRDb29yZGluYXRlKGNvb3JkaW5hdGUsICI4NC1nZCIpOwogICAgICAgIH0pOwogICAgICAgIGNvbnNvbGUubG9nKGNvb3JkaW5hdGVzKTsKICAgICAgICBjb25zb2xlLmxvZyhjb252ZXJ0Q29vcmRpbmF0ZXMpOwogICAgICAgIGNvbnN0IHBhcmFtcyA9IHsKICAgICAgICAgIGdlb3M6IGNvbnZlcnRDb29yZGluYXRlcy5tYXAoaXRlbSA9PiB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgbG9uOiBpdGVtWzBdLAogICAgICAgICAgICAgIGxhdDogaXRlbVsxXQogICAgICAgICAgICB9OwogICAgICAgICAgfSkKICAgICAgICB9OwogICAgICAgIGNvbnNvbGUubG9nKHBhcmFtcyk7CiAgICAgICAgdGhpcy4kcmVmcy5lbGVjdHJvbmljRmVuY2VFZGl0LnVwZGF0ZUdlb21ldHJ5KHBhcmFtcyk7CiAgICAgIH0gZWxzZSBpZiAodGhpcy5kcmF3VHlwZSA9PT0gIkNpcmNsZSIpIHsKICAgICAgICBjb25zdCBjZW50ZXIgPSBnZW9tZXRyeS5nZXRDZW50ZXIoKTsKICAgICAgICBjb25zb2xlLmxvZyhjZW50ZXIpOwogICAgICAgIGNvbnN0IGdlb1JhZGl1cyA9IGdlb21ldHJ5LmdldFJhZGl1cygpOyAvLyDljYrlvoQKICAgICAgICBjb25zdCBtZXRlcnNQZXJVbml0ID0gbWFwLmdldFZpZXcoKS5nZXRQcm9qZWN0aW9uKCkuZ2V0TWV0ZXJzUGVyVW5pdCgpOyAvLyDljYrlvoTku6XnsbPkuLrljZXkvY0KICAgICAgICBjb25zdCByYWRpdXMgPSAoZ2VvUmFkaXVzICogbWV0ZXJzUGVyVW5pdCkudG9GaXhlZCgyKTsKICAgICAgICBjb25zb2xlLmxvZyhyYWRpdXMpOwogICAgICAgIGNvbnN0IGNvbnZlcnRDb29yZGluYXRlcyA9IHV0aWxzLmNvbnZlcnRDb29yZGluYXRlKGNlbnRlciwgIjg0LWdkIik7CiAgICAgICAgY29uc3QgcGFyYW1zID0gewogICAgICAgICAgZ2VvczogW3sKICAgICAgICAgICAgbG9uOiBjb252ZXJ0Q29vcmRpbmF0ZXNbMF0sCiAgICAgICAgICAgIGxhdDogY29udmVydENvb3JkaW5hdGVzWzFdCiAgICAgICAgICB9XSwKICAgICAgICAgIHJhZGl1cwogICAgICAgIH07CiAgICAgICAgY29uc29sZS5sb2cocGFyYW1zKTsKICAgICAgICB0aGlzLiRyZWZzLmVsZWN0cm9uaWNGZW5jZUVkaXQudXBkYXRlR2VvbWV0cnkocGFyYW1zKTsKICAgICAgfQogICAgfQogIH0sCiAgYmVmb3JlUm91dGVFbnRlcih0bywgZnJvbSwgbmV4dCkgewogICAgLy8gaHR0cDovL2xvY2FsaG9zdDo4MDgwLyMvcmFpbAogICAgLy8gP3N0YXRpb25JZD1WR1VrVFd6SnFFN1llT2NqVlVwLS1fX1cwNTJiMVhOb0xtUGNrRjZjaDEKICAgIC8vICZhY2Nlc3NUb2tlbj1leUpoYkdjaU9pSklVekkxTmlKOS5leUpwYzNNaU9pSmhkWFJvTUNJc0ltVjRjQ0k2TVRjd01qVXpOek13T0N3aWRYTmxjbTVoYldVaU9pSnZkVUZ2Y2paU2NraEpSbloyUzJsdFdUUkNJbjAuMGR3Qkgtb0dJNm95RHQ0YlFIRVczNWtaX3Z5NXkwWEUtekVtRzR2bTcwYwogICAgY29uc3Qgc3RhdGlvbklkID0gdG8ucXVlcnkuc3RhdGlvbklkOwogICAgaWYgKHN0YXRpb25JZCkgewogICAgICAvLyDojrflj5bnlLXlrZDlm7TmoI/kv6Hmga8KICAgICAgc2VhcmNoUmFpbEFjY2Vzcyh7CiAgICAgICAgcGFnZUluZGV4OiAxLAogICAgICAgIHBhZ2VTaXplOiAxMCwKICAgICAgICBzZWFyY2hNb2RlbDogIlN0YXRpb24iLAogICAgICAgIHN0YXRpb25JZAogICAgICB9KS50aGVuKHJlcyA9PiB7CiAgICAgICAgY29uc29sZS5sb2coInNlYXJjaFJhaWwiLCByZXMpOwogICAgICAgIGlmIChyZXMpIHsKICAgICAgICAgIG5leHQodm0gPT4gewogICAgICAgICAgICB2bS5zdGF0aW9uSWQgPSBzdGF0aW9uSWQ7CiAgICAgICAgICAgIHZtLmVsZWN0cm9uaWNGZW5jZURhdGEgPSByZXM7CiAgICAgICAgICAgIHZtLmlzRWxlY3Ryb25pY0ZlbmNlRGlhbG9nID0gdHJ1ZTsKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBNZXNzYWdlKHsKICAgICAgICAgICAgdHlwZTogImVycm9yIiwKICAgICAgICAgICAgbWVzc2FnZTogIuafpeivoueUteWtkOWbtOagj+S/oeaBr+Wksei0pSIsCiAgICAgICAgICAgIG9uQ2xvc2U6ICgpID0+IHsKICAgICAgICAgICAgICAvLyB3aW5kb3cubG9jYXRpb24gPSAiaHR0cHM6Ly93d3cuYmFpZHUuY29tIjsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KS5jYXRjaCgoewogICAgICAgIHJlc3BvbnNlCiAgICAgIH0pID0+IHsKICAgICAgICBjb25zdCB7CiAgICAgICAgICBkYXRhCiAgICAgICAgfSA9IHJlc3BvbnNlOwogICAgICAgIE1lc3NhZ2UoewogICAgICAgICAgdHlwZTogImVycm9yIiwKICAgICAgICAgIG1lc3NhZ2U6IGRhdGEubWVzc2FnZSwKICAgICAgICAgIG9uQ2xvc2U6ICgpID0+IHsKICAgICAgICAgICAgLy8gd2luZG93LmxvY2F0aW9uID0gImh0dHBzOi8vd3d3LmJhaWR1LmNvbSI7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgTWVzc2FnZSh7CiAgICAgICAgdHlwZTogImVycm9yIiwKICAgICAgICBtZXNzYWdlOiAi5pyq6K+G5Yir6am75Yuk54K5SUQiLAogICAgICAgIG9uQ2xvc2U6ICgpID0+IHsKICAgICAgICAgIC8vIHdpbmRvdy5sb2NhdGlvbiA9ICJodHRwczovL3d3dy5iYWlkdS5jb20iOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfSwKICBtb3VudGVkKCkgewogICAgdGhpcy5ldmVudEJ1c0JpbmRpbmcoKTsKICB9Cn07"},null]}