{"remainingRequest":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\ljzc-fvue\\src\\components\\flow\\taskFlowComponents\\flowAction.vue?vue&type=script&lang=js&","dependencies":[{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\src\\components\\flow\\taskFlowComponents\\flowAction.vue","mtime":1705040076915},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\ljzc-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:Ly8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KDQppbXBvcnQgSW1hZ2VCcG0gZnJvbSAnQC9jb21wb25lbnRzL2Zsb3cvaW1hZ2VCcG0udnVlJw0KaW1wb3J0IEZvcm1Db250ZW50IGZyb20gJ0AvY29tcG9uZW50cy9mbG93L3Rhc2tGbG93Q29tcG9uZW50cy9mb3JtQ29udGVudC52dWUnDQovL2ltcG9ydCBPcGluaW9uVGV4dCBmcm9tICJAL2NvbXBvbmVudHMvY29tbW9uL29waW5pb25UZXh0LnZ1ZSI7DQovL2ltcG9ydCBGaWxlVXBsb2FkIGZyb20gIkAvY29tcG9uZW50cy9jb21tb24vZmlsZVVwbG9hZC52dWUiOw0KaW1wb3J0IHttYXBTdGF0ZX0gZnJvbSAndnVleCcNCmltcG9ydCB7TWVzc2FnZX0gZnJvbSAnZWxlbWVudC11aScNCmltcG9ydCBUYXNrVG9SZWplY3QgZnJvbSAnQC9jb21wb25lbnRzL2Zsb3cvdGFzay90YXNrVG9SZWplY3QudnVlJw0KaW1wb3J0IFRhc2tUb0RlbGVnYXRlIGZyb20gJ0AvY29tcG9uZW50cy9mbG93L3Rhc2svdGFza1RvRGVsZWdhdGUudnVlJw0KaW1wb3J0IFRhc2tUb0NvcHlUbyBmcm9tICdAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb0NvcHlUby52dWUnDQppbXBvcnQgVGFza1RvSW5xdSBmcm9tICdAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb0lucXUudnVlJw0KaW1wb3J0IFRhc2tUb0VuZFByb2Nlc3MgZnJvbSAnQC9jb21wb25lbnRzL2Zsb3cvdGFzay90YXNrVG9FbmRQcm9jZXNzLnZ1ZScNCmltcG9ydCBUYXNrVG9UcmFucyBmcm9tICdAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb1RyYW5zLnZ1ZScNCmltcG9ydCBUYXNrVG9BZGRTaWduIGZyb20gJ0AvY29tcG9uZW50cy9mbG93L3Rhc2svdGFza1RvQWRkU2lnbi52dWUnDQppbXBvcnQgVGFza1RvRGVsYXkgZnJvbSAnQC9jb21wb25lbnRzL2Zsb3cvdGFzay90YXNrVG9EZWxheS52dWUnDQppbXBvcnQgVGFza1NlbGVjdERlc3RpbmF0aW9uIGZyb20gJ0AvY29tcG9uZW50cy9mbG93L3Rhc2svdGFza1NlbGVjdERlc3RpbmF0aW9uLnZ1ZScNCmltcG9ydCBUYXNrVG9BcHByb3ZlTGluZSBmcm9tICdAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb0FwcHJvdmVMaW5lLnZ1ZScNCmltcG9ydCB0YXNrVG9TaWduU2VxdWVuY2UgZnJvbSAnQC9jb21wb25lbnRzL2Zsb3cvdGFzay90YXNrVG9TaWduU2VxdWVuY2UudnVlJw0KaW1wb3J0IHRhc2tUb1NpZ25MaW5lIGZyb20gJ0AvY29tcG9uZW50cy9mbG93L3Rhc2svdGFza1RvU2lnbkxpbmUudnVlJw0KaW1wb3J0IHRhc2tUb0NvbXBsZXRlIGZyb20gJ0AvY29tcG9uZW50cy9mbG93L3Rhc2svdGFza1RvQ29tcGxldGUudnVlJw0KaW1wb3J0IHRhc2tUb1NhdmUgZnJvbSAnQC9jb21wb25lbnRzL2Zsb3cvdGFzay90YXNrVG9TYXZlLnZ1ZScNCmltcG9ydCB0YXNrVG9SZWFkIGZyb20gJ0AvY29tcG9uZW50cy9mbG93L3Rhc2svdGFza1RvUmVhZC52dWUnDQppbXBvcnQgdGFza1RvRmVlQmFjayBmcm9tICdAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb0ZlZUJhY2sudnVlJw0KaW1wb3J0IHRhc2tUb0lucXVSZXBseSBmcm9tICdAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb0lucXVSZXBseS52dWUnDQppbXBvcnQgdXNlckFkZFNpZ25SZXBseSBmcm9tICdAL2NvbXBvbmVudHMvZmxvdy90YXNrL3VzZXJBZGRTaWduUmVwbHkudnVlJw0KaW1wb3J0IHRhc2tUb1Jldm9rZSBmcm9tICdAL2NvbXBvbmVudHMvZmxvdy90YXNrL3Rhc2tUb1Jldm9rZS52dWUnDQppbXBvcnQgdXRpbHMgZnJvbSAnQC91dGlscy5qcycNCmltcG9ydCB7QmFzZTY0fSBmcm9tICdqcy1iYXNlNjQnDQppbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCcgLy/ml6XmnJ/moLzlvI/ljJbmj5Lku7YNCmltcG9ydCBmb3JtIGZyb20gJ0AvYXBpL2Zvcm0uanMnDQppbXBvcnQgZmxvdyBmcm9tICdAL2FwaS9mbG93LmpzJw0KaW1wb3J0IGkxOG4gZnJvbSAnQC9sYW5nL2luZGV4LmpzJw0KaW1wb3J0IHJlcSBmcm9tICdAL3JlcXVlc3QuanMnDQpleHBvcnQgZGVmYXVsdCB7DQogIGNvbXBvbmVudHM6IHsNCiAgICBJbWFnZUJwbSwNCiAgICBGb3JtQ29udGVudCwNCiAgICAvL09waW5pb25UZXh0LA0KICAgIC8vRmlsZVVwbG9hZCwNCiAgICBUYXNrVG9SZWplY3QsDQogICAgVGFza1RvRGVsZWdhdGUsDQogICAgVGFza1RvQ29weVRvLA0KICAgIFRhc2tUb0lucXUsDQogICAgVGFza1RvRW5kUHJvY2VzcywNCiAgICBUYXNrVG9UcmFucywNCiAgICBUYXNrVG9BZGRTaWduLA0KICAgIFRhc2tUb0RlbGF5LA0KICAgIFRhc2tTZWxlY3REZXN0aW5hdGlvbiwNCiAgICBUYXNrVG9BcHByb3ZlTGluZSwNCiAgICB0YXNrVG9TaWduU2VxdWVuY2UsDQogICAgdGFza1RvU2lnbkxpbmUsDQogICAgdGFza1RvQ29tcGxldGUsDQogICAgdGFza1RvU2F2ZSwNCiAgICB0YXNrVG9SZWFkLA0KICAgIHRhc2tUb0ZlZUJhY2ssDQogICAgdGFza1RvSW5xdVJlcGx5LA0KICAgIHVzZXJBZGRTaWduUmVwbHksDQogICAgdGFza1RvUmV2b2tlDQogIH0sDQogIHByb3BzOiBbDQogICAgJ3Rhc2tzJywgLy/ku7vliqHor6bmg4UNCiAgICAndGFza19zdGF0ZScsDQogICAgJ2luc3RJZCcsDQogICAgJ3R5cGUnLA0KICAgICd0YXNrSWQnLA0KICAgICdleGVjSWQnLA0KICAgICdkZWZJZCcsDQogICAgJ3N0YXR1cycsDQogICAgJ2Nob2ljZUV4Y3V0b3InLA0KICAgICdqdW1wVHlwZScsDQogICAgJ2luc3RTdGF0dXMnLA0KICAgICdsZWFkZXJJZCcsDQogICAgJ215UmVhZFR5cGUnLA0KICAgICdyZWFkSWQnLCAvL+efpeS8muS7u+WKoeW+heWKnuS8oOmYheS7u+WKoeeahOS4u+mUrklEDQogICAgJ3JlYWREb25lSWQnLCAvL+efpeS8muS7u+WKoeW3suWKnuS8oOmYheS7u+WKoeeahOS4u+mUrklEDQogICAgJ2FwcHJvdmFsQXJlYScsIC8v5a6h5om55Yy65Z+f5pi+56S655qE5YaF5a65DQogICAgJ3JlZmVyT3BpbmlvbicsIC8v5YWB6K645Y+C6ICD5oSP6KeBICjpgInmi6nlkKbvvIzliJnlrqHmibnml7bkuI3lhYHorrjlj4LogIPlkIznjq/oioLlhbbku5bkvJrnrb7kurrlkZjnmoTmhI/op4EpDQogICAgJ25vZGVUeXBlJywgLy/lvZPliY3ku7vliqHnsbvlnosNCiAgICAnbm9kZUlkJywgLy/lvZPliY3ku7vliqHoioLngrkNCiAgICAnaXNMb29rJywNCiAgICAnc3BvbnNvclJldm9rZScsIC8v5YWB6K645Y+R6LW35Lq65pKk5Zue77yI6buY6K6k5LiN5Yu+6YCJ77yJDQogICAgJ29waW5pb25GaWVsZCcsIC8v5b2T5YmN6IqC54K55a6h5om55oSP6KeB5Zue5aGr5a2X5q61DQogICAgJ2FwcGVuZE9waW5pb24nLCAvL+aYr+WQpuimhuebluWuoeaJueaEj+ingQ0KICAgICdzaWduYXR1cmVGaWVsZCcsIC8v6Ieq5Yqo562+56ug5a2X5q61DQogICAgJ3NpZ25hdHVyZUNvdmVyJywgLy/oh6rliqjnrb7nq6DmmK/lkKbopobnm5YNCiAgICAnc2VjcmV0RnJlZScsIC8v6Ieq5Yqo562+56ug5pe25piv5ZCm5YWN5a+GLA0KICAgICdkZWZLZXknDQogIF0sDQogIGRhdGEoKSB7DQogICAgcmV0dXJuIHsNCiAgICAgIGlzTWs6IGZhbHNlLCAvL+aYr+WQpuaYr+aooeWdl+WMluW8gOWPkei/m+adpQ0KICAgICAgaXNEZDogZmFsc2UsIC8vIOaYr+WQpuaYr+WPquaYvuekuuWuoeaJuemhtemdog0KICAgICAgaXNHZHQ6IGZhbHNlLCAvL+aYr+WQpuaciea7muWKqOadoQ0KICAgICAgZGlhbG9nRm9ybVZpc2libGU6IGZhbHNlLA0KICAgICAgZGFpbG9nVGl0bGU6ICcnLA0KICAgICAgb3BpbmlvbjogJycsDQogICAgICBpc0hhbmQ6ICcnLA0KICAgICAgc3RhdGU6ICcnLA0KICAgICAgY2FuTG9jazogJycsDQogICAgICBmb3JtRGF0YTogJycsDQogICAgICBhY3Rpb25OYW1lOiAnJywNCiAgICAgIHRleHQ6ICcnLA0KICAgICAgZGlzYWJsZWQ6IHRydWUsDQogICAgICBidG5BbGlhczogJycsIC8v6YCJ5oup55qE5oyJ6ZKuDQogICAgICB0b2tlbjogdXRpbHMuZ2V0VXJsS2V5KCd0b2tlbicpLA0KICAgICAgaXNBcHByb3ZhbE9waW5pb246IHRydWUsIC8v5piv5ZCm5pi+56S65a6h5om55oSP6KeBDQogICAgICBpc3pGaWxlOiB0cnVlLCAvL+aYr+WQpuaYvuekuuato+aWhw0KICAgICAgaXNGaWxlOiB0cnVlLCAvL+aYr+WQpuaYvuekuumZhOS7tg0KICAgICAgaXNQcm9jZXNzUmVjb3JkOiB0cnVlLCAvL+aYr+WQpuaYvuekuuWkhOeQhuiusOW9lQ0KICAgICAgaXNJbWFnZUJwbTogdHJ1ZSwgLy/mmK/lkKbmmL7npLrmtYHnqIvlm74NCiAgICAgIHRhc2tTdGF0dXNBcnJheTogWw0KICAgICAgICAnQVBQUk9WRUxJTkVJTkcnLA0KICAgICAgICAnQVBQUk9WRUxJTkVFRCcsDQogICAgICAgICdTSUdOU0VRVUVOQ0VJTkcnLA0KICAgICAgICAnU0lHTlNFUVVFTkNFRUQnLA0KICAgICAgICAnU0lHTkxJTkVJTkcnLA0KICAgICAgICAnU0lHTkxJTkVFRCcNCiAgICAgIF0sDQogICAgICBpc0hhbmc6IGZhbHNlLA0KICAgICAgb3BpbmlvbkZpbGVzOiAnJywNCiAgICAgIGFwcGVuZFN0cjogdHJ1ZSwNCiAgICAgIGluaXRCb0F0dHI6ICcnDQogICAgfQ0KICB9LA0KICB3YXRjaDogew0KICAgIHN0YXR1czogZnVuY3Rpb24obmV3VmFsLCBvbGRWYWwpIHsNCiAgICAgIHRoaXMuc3RhdGUgPSBuZXdWYWwgLy9uZXdWYWzljbPmmK9zdGF0dXMNCiAgICAgIGlmICgNCiAgICAgICAgdGhpcy5zdGF0ZSAhPSAnQ09QWVRPJyAmJg0KICAgICAgICB0aGlzLnN0YXRlICE9ICdGT0xMT1cnICYmDQogICAgICAgIHRoaXMuc3RhdGUgIT0gJ0NPTU1VJw0KICAgICAgKSB7DQogICAgICAgIGxldCBwYXJhbXMgPSB7DQogICAgICAgICAgdGFza0lkOiB0aGlzLnRhc2tJZCwNCiAgICAgICAgICBsZWFkZXJJZDogdGhpcy5sZWFkZXJJZCwNCiAgICAgICAgICBub2RlVHlwZTogdGhpcy5ub2RlVHlwZQ0KICAgICAgICB9DQogICAgICAgIC8v5Yik5pat5piv5ZCm5piv5pmu6YCa55So5oi35Lu75Yqh5Yqg562+5ZCO55qE5b6F5Yqe5Lu75YqhDQogICAgICAgIGlmICh0aGlzLnRhc2tzLmJwbVRhc2sucGFyZW50SWQgIT0gJzAnKSB7DQogICAgICAgICAgcGFyYW1zLmlzQWRkU2lnbiA9IHRydWUNCiAgICAgICAgfQ0KICAgICAgICAvL+mAmui/h+a1geeoi+WunuS+i0lE5ZKM5Lu75YqhSUTojrflj5blrqHmibnmhI/op4ENCiAgICAgICAgaWYgKHRoaXMudGFza0lkICYmIHRoaXMuaW5zdElkKSB7DQogICAgICAgICAgbGV0IGJwbVNhdmVPcGluaW9uID0gew0KICAgICAgICAgICAgaW5zdElkOiB0aGlzLmluc3RJZCwNCiAgICAgICAgICAgIHRhc2tJZDogdGhpcy50YXNrSWQNCiAgICAgICAgICB9DQogICAgICAgICAgZmxvdy5nZXRCcG1TYXZlT3BpbmlvbkJ5VGVhbShicG1TYXZlT3BpbmlvbikudGhlbihkYXRhID0+IHsNCiAgICAgICAgICAgIGlmIChkYXRhLnN0YXRlKSB7DQogICAgICAgICAgICAgIGlmIChkYXRhLnZhbHVlICE9ICcnKSB7DQogICAgICAgICAgICAgICAgdGhpcy50ZXh0ID0gZGF0YS52YWx1ZQ0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgfSkNCiAgICAgICAgfQ0KICAgICAgICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgnc3RvcmVQcm9jZXNzL3Rhc2tEZXRhaWwnLCBwYXJhbXMpIC8v6I635Y+W5pON5L2c5oyJ6ZKuDQogICAgICAgIHRoaXMuJHN0b3JlDQogICAgICAgICAgLmRpc3BhdGNoKCdzdG9yZVByb2Nlc3MvY2FuTG9jaycsIHsNCiAgICAgICAgICAgIHRhc2tJZDogdGhpcy50YXNrSWQsDQogICAgICAgICAgICBsZWFkZXJJZDogdGhpcy5sZWFkZXJJZA0KICAgICAgICAgIH0pDQogICAgICAgICAgLnRoZW4oY2FuTG9jayA9PiB7DQogICAgICAgICAgICAvL+iOt+WPluS7u+WKoeaYr+WQpuiDvemUgeWumg0KICAgICAgICAgICAgaWYgKA0KICAgICAgICAgICAgICBjYW5Mb2NrID09IDQgJiYNCiAgICAgICAgICAgICAgdGhpcy4kcm91dGVyLmhpc3RvcnkuY3VycmVudC5mdWxsUGF0aC5pbmRleE9mKCd0b2tlbicpID4gLTENCiAgICAgICAgICAgICkgew0KICAgICAgICAgICAgICBjYW5Mb2NrID0gJzUnDQogICAgICAgICAgICB9DQogICAgICAgICAgICB0aGlzLmNhbkxvY2sgPSBjYW5Mb2NrDQogICAgICAgICAgfSkNCiAgICAgIH0NCiAgICB9LA0KICAgIGFwcHJvdmFsQXJlYTogZnVuY3Rpb24obmV3VmFsLCBvbGRWYWwpIHsNCiAgICAgIC8v5a6h5om55Yy65Z+f5pi+56S655qE5YaF5a65DQogICAgICBpZiAobmV3VmFsKSB7DQogICAgICAgIHRoaXMuYXBwcm92YWxBcmVhID0gbmV3VmFsDQogICAgICAgIGlmICh0aGlzLmFwcHJvdmFsQXJlYSkgew0KICAgICAgICAgIGlmICh0aGlzLmFwcHJvdmFsQXJlYS5pbmRleE9mKCdhcHByb3ZhbE9waW5pb24nKSA9PSAtMSkgew0KICAgICAgICAgICAgdGhpcy5pc0FwcHJvdmFsT3BpbmlvbiA9IGZhbHNlDQogICAgICAgICAgfQ0KICAgICAgICAgIGlmICh0aGlzLmFwcHJvdmFsQXJlYS5pbmRleE9mKCd6RmlsZScpID09IC0xKSB7DQogICAgICAgICAgICB0aGlzLmlzekZpbGUgPSBmYWxzZQ0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAodGhpcy5hcHByb3ZhbEFyZWEuaW5kZXhPZignZmlsZScpID09IC0xKSB7DQogICAgICAgICAgICB0aGlzLmlzRmlsZSA9IGZhbHNlDQogICAgICAgICAgfQ0KICAgICAgICAgIGlmICh0aGlzLmFwcHJvdmFsQXJlYS5pbmRleE9mKCdwcm9jZXNzUmVjb3JkJykgPT0gLTEpIHsNCiAgICAgICAgICAgIHRoaXMuaXNQcm9jZXNzUmVjb3JkID0gZmFsc2UNCiAgICAgICAgICB9DQogICAgICAgICAgaWYgKHRoaXMuYXBwcm92YWxBcmVhLmluZGV4T2YoJ2ltYWdlQnBtJykgPT0gLTEpIHsNCiAgICAgICAgICAgIHRoaXMuaXNJbWFnZUJwbSA9IGZhbHNlDQogICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICB9DQogICAgfQ0KICB9LA0KICBjb21wdXRlZDogbWFwU3RhdGUoew0KICAgIHJvd3NCdG46IHN0YXRlID0+IHN0YXRlLnN0b3JlUHJvY2Vzcy5yb3dzQnRuLA0KICAgIGZvcmNlTG9jazogc3RhdGUgPT4gc3RhdGUuc3RvcmVQcm9jZXNzLmZvcmNlTG9jaywNCiAgICBpc1Nob3dBcHByb3ZhbEFyZWE6IGZ1bmN0aW9uKCkgew0KICAgICAgaWYgKA0KICAgICAgICAodGhpcy5zdGF0dXMgIT0gJ0NPUFlUTycgJiYNCiAgICAgICAgICB0aGlzLnN0YXR1cyAhPSAnRk9MTE9XJyAmJg0KICAgICAgICAgICh0aGlzLnR5cGUgIT0gdW5kZWZpbmVkIHx8IHRoaXMudGFza0lkICE9IHVuZGVmaW5lZCkgJiYNCiAgICAgICAgICB0aGlzLmluc3RTdGF0dXMgIT0gJ2VuZCcgJiYNCiAgICAgICAgICB0aGlzLmluc3RTdGF0dXMgIT0gJ21hbnVhbGVuZCcpIHx8DQogICAgICAgIHRoaXMuc3RhdHVzID09ICdDT01NVScNCiAgICAgICkgew0KICAgICAgICByZXR1cm4gdHJ1ZQ0KICAgICAgfQ0KICAgICAgcmV0dXJuIGZhbHNlDQogICAgfQ0KICB9KSwNCg0KICBiZWZvcmVEZXN0cm95KCkgew0KICAgIC8v57uE5Lu25rOo6ZSA56e76Zmk5LqL5Lu255uR5ZCs5Zmo77yM5Lul6Ziy5aSa5qyh6LCD55SoDQogICAgdGhpcy4kcm9vdC4kb2ZmKCdmb3JtTG9hZGluZycpDQogIH0sDQogIG1vdW50ZWQoKSB7DQogICAgY29uc3QgdGhpc18gPSB0aGlzDQogICAgLy/nm5HlkKzooajljZXliqDovb3lrozmiJDlj5HluIPkuovku7YNCiAgICB0aGlzXy4kcm9vdC4kb24oJ2Zvcm1Mb2FkaW5nJywgZnVuY3Rpb24odmFsdWUpIHsNCiAgICAgIHRoaXNfLmRpc2FibGVkID0gdmFsdWUNCiAgICAgIC8v5qOA5p+l5b2T5YmN5oyC6LW354q25oCB77yM5Yik5pat5piv5ZCm56aB55So5oyJ6ZKuDQogICAgICB0aGlzXy5jaGVja0luc3RTdGF0dXMoKQ0KICAgIH0pDQogIH0sDQogIG1ldGhvZHM6IHsNCiAgICAvLyDpgJrov4fmjInpkq7liKvlkI3ojrflj5bmjInpkq7kuLvpopjnsbvlnosNCiAgICBnZXRUeXBlKGFsaWFzKSB7DQogICAgICBsZXQgdHlwZSA9ICdkZWZhdWx0Jw0KICAgICAgc3dpdGNoIChhbGlhcykgew0KICAgICAgICBjYXNlICdhZ3JlZSc6DQogICAgICAgIGNhc2UgJ2FncmVlVHJhbnMnOg0KICAgICAgICAgIHR5cGUgPSAncHJpbWFyeScNCiAgICAgICAgICBicmVhaw0KICAgICAgICBjYXNlICdvcHBvc2UnOg0KICAgICAgICBjYXNlICdvcHBvc2VUcmFucyc6DQogICAgICAgIGNhc2UgJ3JlamVjdCc6DQogICAgICAgIGNhc2UgJ2VuZFByb2Nlc3MnOg0KICAgICAgICAgIHR5cGUgPSAnZGFuZ2VyJw0KICAgICAgICAgIGJyZWFrDQogICAgICB9DQogICAgICByZXR1cm4gdHlwZQ0KICAgIH0sDQogICAgLy8gLy/mmoLlrZjlrqHmibnmhI/op4ENCiAgICAvLyBjcmVhdGVCcG1TYXZlT3BpbmlvbihmbGFnKSB7DQogICAgLy8gICAvL+eCueWHu+S/neWtmOaaguWtmOWuoeaJueaEj+ingeaXtu+8jOayoeacieWhq+WGmeWuoeaJueaEj+ingeS4jeWkhOeQhg0KICAgIC8vICAgaWYgKHRoaXMuJHJlZnMub3BpbmlvblRleHQuZ2V0T3BpbmlvbigpID09ICIiICYmIGZsYWcpIHsNCiAgICAvLyAgICAgcmV0dXJuOw0KICAgIC8vICAgfQ0KICAgIC8vICAgaWYgKHRoaXMuJHJlZnMub3BpbmlvblRleHQuZ2V0T3BpbmlvbigpID09ICIiKSB7DQogICAgLy8gICAgIE1lc3NhZ2Uud2FybmluZygi6K+36L6T5YWl5a6h5om55oSP6KeB5YaF5a65Iik7DQogICAgLy8gICB9IGVsc2Ugew0KICAgIC8vICAgICBsZXQgYnBtU2F2ZU9waW5pb24gPSB7IHByb2NJbnN0SWQ6IHRoaXMuaW5zdElkLCB0YXNrSWQ6IHRoaXMudGFza0lkLCBvcGluaW9uOiB0aGlzLiRyZWZzLm9waW5pb25UZXh0LmdldE9waW5pb24oKSB9Ow0KICAgIC8vICAgICBmbG93LmNyZWF0ZUJwbVNhdmVPcGluaW9uKGJwbVNhdmVPcGluaW9uKS50aGVuKGRhdGEgPT4gew0KICAgIC8vICAgICAgIGlmIChkYXRhLnN0YXRlKSB7DQogICAgLy8gICAgICAgICBpZiAoIWZsYWcpIHsNCiAgICAvLyAgICAgICAgICAgdGhpcy4kbWVzc2FnZSh7IHR5cGU6ICJzdWNjZXNzIiwgbWVzc2FnZTogZGF0YS5tZXNzYWdlIH0pOw0KICAgIC8vICAgICAgICAgfQ0KICAgIC8vICAgICAgIH0NCiAgICAvLyAgICAgfSk7DQogICAgLy8gICB9DQogICAgLy8gfSwNCiAgICAvL+iOt+WPluaEj+ingQ0KICAgIC8vIGdldE9waW5pb24ob3Bpbmlvbikgew0KICAgIC8vICAgdGhpcy50ZXh0ID0gb3BpbmlvbjsNCiAgICAvLyAgIGxldCBvcGluaW9WYWx1ZSA9IHRoaXMuJHJlZnMub3BpbmlvblRleHQuZ2V0T3BpbmlvbigpOw0KICAgIC8vICAgaWYgKHRoaXMub3BpbmlvbkZpZWxkKSB7DQogICAgLy8gICAgIGxldCBjdXJyZW50VXNlciA9IHRoaXMuJHN0b3JlLnN0YXRlLnVzZXIuY3VycmVudFVzZXJEZXRhaWwudXNlcjsNCiAgICAvLyAgICAgbGV0IG1vbWVudCA9IHJlcXVpcmUoIm1vbWVudCIpOw0KDQogICAgLy8gICAgIGxldCBib0RhdGEgPSB0aGlzLiRyZWZzLmZvcm1Db250ZW50LmRhdGE7DQogICAgLy8gICAgIGxldCBmaWxlZCA9IHRoaXMub3BpbmlvbkZpZWxkLnNwbGl0KCIuIik7DQogICAgLy8gICAgIGlmIChib0RhdGFbZmlsZWRbMF1dW2ZpbGVkWzFdXSA9PSAnPHA+PGJyLz48L3A+Jykgew0KICAgIC8vICAgICAgIGJvRGF0YVtmaWxlZFswXV1bZmlsZWRbMV1dID0gIiI7DQogICAgLy8gICAgIH0NCiAgICAvLyAgICAgLy/mmK/lkKbopobnm5blrqHmibnmhI/op4ENCiAgICAvLyAgICAgaWYgKHRoaXMuYXBwZW5kT3Bpbmlvbikgew0KICAgIC8vICAgICAgIGlmIChvcGluaW9WYWx1ZSkgew0KICAgIC8vICAgICAgICAgYm9EYXRhW2ZpbGVkWzBdXVtmaWxlZFsxXV0gPSBvcGluaW9WYWx1ZSArICJcbiIgKyBjdXJyZW50VXNlci5mdWxsbmFtZSArICIgIiArIG1vbWVudCgpLmZvcm1hdCgiWVlZWS1NTS1ERCBISDptbTpzcyIpOw0KICAgIC8vICAgICAgIH0NCiAgICAvLyAgICAgfSBlbHNlIHsNCiAgICAvLyAgICAgICBpZiAob3BpbmlvVmFsdWUpIHsNCiAgICAvLyAgICAgICAgIG9waW5pb1ZhbHVlICs9ICJcbiIgKyBjdXJyZW50VXNlci5mdWxsbmFtZSArICIgIiArIG1vbWVudCgpLmZvcm1hdCgiWVlZWS1NTS1ERCBISDptbTpzcyIpOw0KICAgIC8vICAgICAgIH0NCiAgICAvLyAgICAgICBpZiAodGhpcy5hcHBlbmRTdHIpIHsNCiAgICAvLyAgICAgICAgIHRoaXMuaW5pdEJvQXR0ciA9IGJvRGF0YVtmaWxlZFswXV1bZmlsZWRbMV1dOw0KICAgIC8vICAgICAgIH0NCiAgICAvLyAgICAgICBpZiAoZmlsZWQubGVuZ3RoID09IDIpIHsNCiAgICAvLyAgICAgICAgIGlmICh0aGlzLmluaXRCb0F0dHIpIHsNCiAgICAvLyAgICAgICAgICAgaWYgKG9waW5pb24pIHsNCiAgICAvLyAgICAgICAgICAgICBib0RhdGFbZmlsZWRbMF1dW2ZpbGVkWzFdXSA9IHRoaXMuaW5pdEJvQXR0ciArICJcblxuIiArIG9waW5pb1ZhbHVlOw0KICAgIC8vICAgICAgICAgICB9IGVsc2Ugew0KICAgIC8vICAgICAgICAgICAgIGJvRGF0YVtmaWxlZFswXV1bZmlsZWRbMV1dID0gdGhpcy5pbml0Qm9BdHRyDQogICAgLy8gICAgICAgICAgIH0NCiAgICAvLyAgICAgICAgIH0gZWxzZSB7DQogICAgLy8gICAgICAgICAgIGJvRGF0YVtmaWxlZFswXV1bZmlsZWRbMV1dID0gb3BpbmlvVmFsdWU7DQogICAgLy8gICAgICAgICB9DQogICAgLy8gICAgICAgfQ0KICAgIC8vICAgICAgIHRoaXMuYXBwZW5kU3RyID0gZmFsc2U7DQogICAgLy8gICAgIH0NCiAgICAvLyAgIH0NCiAgICAvLyB9LA0KICAgIC8v5L+d5a2Y5oyJ6ZKuDQogICAgc2F2ZURyYWZ0QnRuKCkgew0KICAgICAgLy90aGlzLiRyZWZzLnRhc2tUb1NhdmUuc2hvd0RpYWxvZygpOw0KICAgICAgdGhpcy4kc3RvcmUNCiAgICAgICAgLmRpc3BhdGNoKCdzdG9yZVByb2Nlc3MvY2FuTG9jaycsIHsNCiAgICAgICAgICB0YXNrSWQ6IHRoaXMudGFza0lkLA0KICAgICAgICAgIGxlYWRlcklkOiB0aGlzLmxlYWRlcklkDQogICAgICAgIH0pDQogICAgICAgIC50aGVuKGNhbkxvY2sgPT4gew0KICAgICAgICAgIC8v6I635Y+W5Lu75Yqh5piv5ZCm6IO96ZSB5a6aDQogICAgICAgICAgaWYgKA0KICAgICAgICAgICAgY2FuTG9jayA9PSA0ICYmDQogICAgICAgICAgICB0aGlzLiRyb3V0ZXIuaGlzdG9yeS5jdXJyZW50LmZ1bGxQYXRoLmluZGV4T2YoJ3Rva2VuJykgPiAtMQ0KICAgICAgICAgICkgew0KICAgICAgICAgICAgY2FuTG9jayA9ICc1Jw0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAoY2FuTG9jayA9PSA0KSB7DQogICAgICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+S7u+WKoeW3suiiq+WFtuS7luS6uuetvuaUtuS6hicpDQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHRoaXMudGFza1NhdmVEcmFmdCgpIC8v5L+d5a2Y6KGo5Y2V5YaF5a65DQogICAgICAgICAgICAvL3RoaXMuY3JlYXRlQnBtU2F2ZU9waW5pb24odHJ1ZSk7Ly/mmoLlrZjlrqHmibnmhI/op4ENCiAgICAgICAgICB9DQogICAgICAgIH0pDQogICAgfSwNCiAgICAvL+WQjOaEj+aMiemSrg0KICAgIGFncmVlQnRuKCkgew0KICAgICAgdGhpcy4kc3RvcmUNCiAgICAgICAgLmRpc3BhdGNoKCdzdG9yZVByb2Nlc3MvY2FuTG9jaycsIHsNCiAgICAgICAgICB0YXNrSWQ6IHRoaXMudGFza0lkLA0KICAgICAgICAgIGxlYWRlcklkOiB0aGlzLmxlYWRlcklkDQogICAgICAgIH0pDQogICAgICAgIC50aGVuKGNhbkxvY2sgPT4gew0KICAgICAgICAgIC8v6I635Y+W5Lu75Yqh5piv5ZCm6IO96ZSB5a6aDQogICAgICAgICAgaWYgKA0KICAgICAgICAgICAgY2FuTG9jayA9PSA0ICYmDQogICAgICAgICAgICB0aGlzLiRyb3V0ZXIuaGlzdG9yeS5jdXJyZW50LmZ1bGxQYXRoLmluZGV4T2YoJ3Rva2VuJykgPiAtMQ0KICAgICAgICAgICkgew0KICAgICAgICAgICAgY2FuTG9jayA9ICc1Jw0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAoY2FuTG9jayA9PSA0KSB7DQogICAgICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+S7u+WKoeW3suiiq+WFtuS7luS6uuetvuaUtuS6hicpDQogICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHRoaXMudGFza0FncmVlKCkNCiAgICAgICAgICB9DQogICAgICAgIH0pDQogICAgfSwNCiAgICBjaGVja0luc3RTdGF0dXMoY2FsbGJhY2spIHsNCiAgICAgIGxldCB0aGlzXyA9IHRoaXMNCiAgICAgIHRoaXMuJGh0dHANCiAgICAgICAgLmdldCgNCiAgICAgICAgICAnJHticG1SdW5UaW1lfS9ydW50aW1lL2luc3RhbmNlL3YxL2dldERlZlN0YXR1cz9pbnN0SWQ9JyArDQogICAgICAgICAgICAodGhpcy5pbnN0SWQgfHwgJycpICsNCiAgICAgICAgICAgICcmdGFza0lkPScgKw0KICAgICAgICAgICAgKHRoaXMudGFza0lkIHx8ICcnKQ0KICAgICAgICApDQogICAgICAgIC50aGVuKGZ1bmN0aW9uKHJlc3ApIHsNCiAgICAgICAgICBpZiAocmVzcC5kYXRhKSB7DQogICAgICAgICAgICByZXNwLmRhdGEgKz0gJycNCiAgICAgICAgICAgIGlmIChyZXNwLmRhdGEuaW5kZXhPZignMScpID4gLTEpIHsNCiAgICAgICAgICAgICAgdGhpc18uZGlzYWJsZWQgPSB0cnVlDQogICAgICAgICAgICAgIHRoaXNfLmlzSGFuZyA9IHRydWUNCiAgICAgICAgICAgICAgdGhpc18uJG1lc3NhZ2Uud2FybmluZygn5b2T5YmN5rWB56iL5a6e5L6L5bey6KKr5oyC6LW377yM5peg5rOV5a6h5om5JykNCiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzcC5kYXRhLmluZGV4T2YoJzMnKSA+IC0xKSB7DQogICAgICAgICAgICAgIHRoaXNfLmRpc2FibGVkID0gdHJ1ZQ0KICAgICAgICAgICAgICB0aGlzXy4kbWVzc2FnZS53YXJuaW5nKCflvZPliY3mtYHnqIvlrprkuYnlt7LooqvnpoHmraLlrp7kvovvvIzml6Dms5XlrqHmibknKQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0gZWxzZSBpZiAoY2FsbGJhY2spIHsNCiAgICAgICAgICAgIGNhbGxiYWNrKCkNCiAgICAgICAgICB9DQogICAgICAgIH0pDQogICAgfSwNCiAgICAvL+aPkOS6pOS6i+S7tg0KICAgIHN1Ym1pdFJldm9rZShhbGlhcykgew0KICAgICAgbGV0IF90aGlzID0gdGhpcw0KICAgICAgLy/ojrflj5ZWVUXooajljZXlrp7kvoso5Yik5pat5piv5ZCm5piv5Zyo57q/6KGo5Y2VKQ0KICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCdvbmxpbmUtZm9ybScpWzBdKSB7DQogICAgICAgIGxldCB0YWJsZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSgnb25saW5lLWZvcm0nKVswXS5fX3Z1ZV9fDQogICAgICAgICAgLnBlcm1pc3Npb24udGFibGUgLy/ojrflj5blrZDooajmnYPpmZANCiAgICAgICAgbGV0IGJvRGF0YSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCdvbmxpbmUtZm9ybScpWzBdLl9fdnVlX18uZGF0YSAvL+iOt+WPluihqOWNlWJv5a+56LGhDQogICAgICAgIGxldCB6RGF0YSA9IHt9DQogICAgICAgIGZvciAobGV0IGsgaW4gYm9EYXRhKSB7DQogICAgICAgICAgekRhdGEgPSBib0RhdGFba10NCiAgICAgICAgfQ0KICAgICAgICBmb3IgKGxldCBrZXkgaW4gdGFibGVzKSB7DQogICAgICAgICAgLy/lpoLmnpzmnInlr7zlhaXlsZ7mgKfvvIzliJnooajmmI7kuI3mmK/lrZDooajogIzmmK/mlbDmja7miqXooajvvIzkuI3lgZrlv4XloavmoKHpqowNCiAgICAgICAgICBpZiAodGFibGVzW2tleV0gJiYgdGFibGVzW2tleV0uaGFzT3duUHJvcGVydHkoJ2V4cG9ydCcpKSB7DQogICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAoDQogICAgICAgICAgICAodGFibGVzW2tleV0ucmVxdWlyZWQgPT0gdHJ1ZSB8fCB0YWJsZXNba2V5XS5yZXF1aXJlZCA9PSAndHJ1ZScpICYmDQogICAgICAgICAgICB6RGF0YVsnc3ViXycgKyBrZXldICYmDQogICAgICAgICAgICB6RGF0YVsnc3ViXycgKyBrZXldLmxlbmd0aCA9PSAwDQogICAgICAgICAgKSB7DQogICAgICAgICAgICB0aGlzLiRtZXNzYWdlKHsNCiAgICAgICAgICAgICAgbWVzc2FnZTogJ+WtkOihqOW/heWhq+S4gOadoeiusOW9lScsDQogICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJw0KICAgICAgICAgICAgfSkNCiAgICAgICAgICAgIHJldHVybg0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgfQ0KICAgICAgdGhpcy5wcmVzc0FjdGlvbiA9IHRydWUNCiAgICAgIHRoaXMuYnRuQWxpYXMgPSBhbGlhcw0KICAgICAgLy/lhbPpl60NCiAgICAgIGlmICh0aGlzLmJ0bkFsaWFzID09ICd0YXNrQ2xvc2UnKSB7DQogICAgICAgIHV0aWxzLmNsb3NlQWxsTm90aWZpY2F0aW9uKCkNCiAgICAgICAgLy/liKTmlq3oj5zljZXmmK/lkKbmmK/mqKHlnZflvIDlj5HphY3nva7lh7rmnaXnmoQNCiAgICAgICAgdGhpcy4kcm91dGVyLmdvKC0xKQ0KICAgICAgICAvL3RvZG8NCiAgICAgICAgLy8gaWYgKHRoaXMuJHJvdXRlLm5hbWUuaW5kZXhPZigncmVwb3J0TW9kdWxlSW5zdCcpICE9IC0xKSB7DQogICAgICAgIC8vICAgICB0aGlzLiRyb3V0ZXIucHVzaCgNCiAgICAgICAgLy8gICAgICAgICAnL3N0YXRlbWVudC90ZW1wbGF0ZS9wcmV2aWV3LycgKw0KICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLiRyb3V0ZS5wYXJhbXMudGVtcGxhdGVLZXkgKw0KICAgICAgICAvLyAgICAgICAgICAgICAnL3RvZG8vJyArDQogICAgICAgIC8vICAgICAgICAgICAgIHRoaXMuJHJvdXRlLnBhcmFtcy5kZWZLZXkgKw0KICAgICAgICAvLyAgICAgICAgICAgICAnL3RydWUnDQogICAgICAgIC8vICAgICApDQogICAgICAgIC8vIH0gZWxzZSBpZiAodGhpcy4kcm91dGUubmFtZS5pbmRleE9mKCdzeXNNb2R1bGVJbnN0JykgIT0gLTEpIHsNCiAgICAgICAgLy8gICAgIHRoaXMuJHJvdXRlci5wdXNoKA0KICAgICAgICAvLyAgICAgICAgICcvdi1mbG93L3YtdG9kby8nICsgdGhpcy4kcm91dGUucGFyYW1zLmRlZktleQ0KICAgICAgICAvLyAgICAgKQ0KICAgICAgICAvLyB9IGVsc2UgaWYgKA0KICAgICAgICAvLyAgICAgdGhpcy50eXBlID09ICdkb25lJyB8fA0KICAgICAgICAvLyAgICAgdGhpcy50eXBlID09ICdyZXF1ZXN0JyB8fA0KICAgICAgICAvLyAgICAgdGhpcy5teVJlYWRUeXBlID09ICdteVJlcXVlc3QnDQogICAgICAgIC8vICkgew0KICAgICAgICAvLyAgICAgdGhpcy4kcm91dGVyLnB1c2goJy92LWZsb3cvdi1yZXF1ZXN0JykNCiAgICAgICAgLy8gfSBlbHNlIGlmICgNCiAgICAgICAgLy8gICAgIHRoaXMuc3RhdGUgPT0gJ0NPTU1VJyB8fA0KICAgICAgICAvLyAgICAgdGhpcy5zdGF0ZSA9PSAnRk9MTE9XJyB8fA0KICAgICAgICAvLyAgICAgdGhpcy4kcm91dGUubmFtZSA9PSAnaW5zdFJlYWQtcmVhZCcNCiAgICAgICAgLy8gKSB7DQogICAgICAgIC8vICAgICB0aGlzLiRyb3V0ZXIucHVzaCgnL3YtZmxvdy92LXRvZG9SZWFkJykgLy/lvoXpmIUNCiAgICAgICAgLy8gfSBlbHNlIGlmICh0aGlzLiRyb3V0ZS5uYW1lID09ICdpbnN0UmVhZC1kb25lJykgew0KICAgICAgICAvLyAgICAgdGhpcy4kcm91dGVyLnB1c2goJy92LWZsb3cvdi1kb25lUmVhZCcpIC8v5bey6ZiFDQogICAgICAgIC8vIH0gZWxzZSBpZiAodGhpcy4kcm91dGUubmFtZSA9PSAnbXlSZWFkLXR5cGUnKSB7DQogICAgICAgIC8vICAgICB0aGlzLiRyb3V0ZXIucHVzaCgnL3YtZmxvdy92LW15UmVhZCcpIC8v5oiR5Lyg6ZiF55qEDQogICAgICAgIC8vIH0gZWxzZSBpZiAoDQogICAgICAgIC8vICAgICB0aGlzLiRyb3V0ZS5uYW1lID09ICdpbnN0UmVhZCcgJiYNCiAgICAgICAgLy8gICAgIHRoaXMuJHJvdXRlLnBhcmFtcy5teVJlYWRUeXBlID09ICdkZWxlZ2F0ZScNCiAgICAgICAgLy8gKSB7DQogICAgICAgIC8vICAgICB0aGlzLiRyb3V0ZXIucHVzaCgnL3YtZmxvdy92LW15RGVsZWdhdGUnKQ0KICAgICAgICAvLyB9IGVsc2Ugew0KICAgICAgICAvLyAgICAgaWYgKEpTT04uc3RyaW5naWZ5KHRoaXMuJHJvdXRlLnF1ZXJ5KSA9PSAne30nKSB7DQogICAgICAgIC8vICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goJy92LWZsb3cvdi10b2RvJykNCiAgICAgICAgLy8gICAgIH0gZWxzZSB7DQogICAgICAgIC8vICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goJy9ob21lJykNCiAgICAgICAgLy8gICAgIH0NCiAgICAgICAgLy8gfQ0KICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICdzYXZlRHJhZnQnKSB7DQogICAgICAgIC8vIHRvZG8g5L+d5a2YDQogICAgICAgIC8vIHRoaXMuc2F2ZURyYWZ0QnRuKCkNCiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAnYWdyZWUnKSB7DQogICAgICAgIC8vIHRvZG8g5ZCM5oSPDQogICAgICAgIHRoaXMuYWdyZWVCdG4oKQ0KICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICdoYW5kbGVSZWFkJykgew0KICAgICAgICAvL+S8oOmYheWbnuWkjQ0KICAgICAgICB0aGlzLmhhbmRsZVJlYWQoKQ0KICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICdoYW5kbGVSZXZva2UnKSB7DQogICAgICAgIC8v5pKk5ZueDQogICAgICAgIHRoaXMuaGFuZGxlUmV2b2tlKCkNCiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAnY29tbXVGZWVkQmFjaycpIHsNCiAgICAgICAgLy/msp/pgJrlj43ppogNCiAgICAgICAgdGhpcy5jb21tdUZlZWRCYWNrKCkNCiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAndGFza1RvSW5xdVJlcGx5Jykgew0KICAgICAgICAvL+W+geivouWbnuWkjQ0KICAgICAgICB0aGlzLnRhc2tUb0lucXVSZXBseSgpDQogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gJ3VzZXJBZGRTaWduJykgew0KICAgICAgICAvL+aZrumAmuiKgueCueWKoOetvuWPjemmiA0KICAgICAgICB0aGlzLnVzZXJBZGRTaWduKCkNCiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAncmVqZWN0Jykgew0KICAgICAgICAvL3RvZG8g6amz5ZueDQogICAgICAgIHRoaXMudGFza1RvUmVqZWN0KCkNCiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAnZGVsZWdhdGUnKSB7DQogICAgICAgIC8v6L2s5YqeDQogICAgICAgIHRoaXMudGFza1RvRGVsZWdhdGUoKQ0KICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICdpbnF1Jykgew0KICAgICAgICAvL+W+geivog0KICAgICAgICB0aGlzLnRhc2tUb0lucXUoKQ0KICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICdlbmRQcm9jZXNzJykgew0KICAgICAgICAvLyB0b2RvIOa1geeoi+e7iOatog0KICAgICAgICB0aGlzLnRhc2tUb0VuZFByb2Nlc3MoKQ0KICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICdzdGFydFRyYW5zJykgew0KICAgICAgICAvL3RvZG8g5rWB6L2sDQogICAgICAgIHRoaXMudGFza1RvVHJhbnMoKQ0KICAgICAgfSBlbHNlIGlmICh0aGlzLmJ0bkFsaWFzID09ICdhZGRTaWduJykgew0KICAgICAgICAvL3RvZG8g5Yqg562+DQogICAgICAgIHRoaXMudGFza1RvQWRkU2lnbigpDQogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gJ3Rhc2tEZWxheScpIHsNCiAgICAgICAgLy90b2RvIOS7u+WKoeW7tuacnw0KICAgICAgICAvLyB0aGlzLnRhc2tUb0RlbGF5KCk7DQogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gJ2FncmVlVHJhbnMnKSB7DQogICAgICAgIC8vdG9kbyDlkIzmhI/vvIjmtYHovazvvIkNCiAgICAgICAgdGhpcy50YXNrQWdyZWVUcmFucygpDQogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gJ29wcG9zZVRyYW5zJykgew0KICAgICAgICAvL3RvZG8g5Y+N5a+577yI5rWB6L2s77yJDQogICAgICAgIHRoaXMudGFza09wcG9zZVRyYW5zKCkNCiAgICAgIH0gZWxzZSBpZiAodGhpcy5idG5BbGlhcyA9PSAnb3Bwb3NlJykgew0KICAgICAgICAvL3RvZG8g5Y+N5a+5DQogICAgICAgIHRoaXMudGFza09wcG9zZSgpDQogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gJ2xvY2tVbmxvY2snKSB7DQogICAgICAgIC8v562+5pS2DQogICAgICAgIHRoaXMuJHN0b3JlDQogICAgICAgICAgLmRpc3BhdGNoKCdzdG9yZVByb2Nlc3MvY2FuTG9jaycsIHRoaXMudGFza0lkKQ0KICAgICAgICAgIC50aGVuKGNhbkxvY2sgPT4gew0KICAgICAgICAgICAgLy/ojrflj5bku7vliqHmmK/lkKbog73plIHlrpoNCiAgICAgICAgICAgIGlmICgNCiAgICAgICAgICAgICAgY2FuTG9jayA9PSA0ICYmDQogICAgICAgICAgICAgIHRoaXMuJHJvdXRlci5oaXN0b3J5LmN1cnJlbnQuZnVsbFBhdGguaW5kZXhPZigndG9rZW4nKSA+IC0xDQogICAgICAgICAgICApIHsNCiAgICAgICAgICAgICAgY2FuTG9jayA9ICc1Jw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKGNhbkxvY2sgPT0gNCkgew0KICAgICAgICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+S7u+WKoeW3suiiq+WFtuS7luS6uuetvuaUtuS6hicpDQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICB0aGlzLmxvY2tVbmxvY2soKQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pDQogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gJ2FwcHJvdmVMaW5lJykgew0KICAgICAgICAvL+W5tuihjOWuoeaJuQ0KICAgICAgICB0aGlzLnRhc2tBcHByb3ZlTGluZSgpDQogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gJ3NpZ25TZXF1ZW5jZScpIHsNCiAgICAgICAgLy8g6aG65bqP562+572yDQogICAgICAgIHRoaXMudGFza1NpZ25TZXF1ZW5jZSgpDQogICAgICB9IGVsc2UgaWYgKHRoaXMuYnRuQWxpYXMgPT0gJ3NpZ25MaW5lJykgew0KICAgICAgICAvLyDlubbooYznrb7nvbINCiAgICAgICAgdGhpcy50YXNrU2lnbkxpbmUoKQ0KICAgICAgfQ0KICAgIH0sDQogICAgLy/miafooYzliY3nva7ohJrmnKwNCiAgICBydW5CZWZvcmVTY3JpcHQoKSB7DQogICAgICBsZXQgX3RoaXMgPSB0aGlzDQogICAgICBsZXQgaXRlbSA9IHV0aWxzLmluZGV4T2ZMaXN0KF90aGlzLnJvd3NCdG4sICdhbGlhcycsIF90aGlzLmJ0bkFsaWFzKQ0KICAgICAgcmV0dXJuIF90aGlzLnRlbXBTY3JpcHQoaXRlbS5iZWZvcmVTY3JpcHQpDQogICAgfSwNCiAgICAvL+aJp+ihjOWJjee9ruiEmuacrA0KICAgIHRlbXBTY3JpcHQoc2NyaXB0KSB7DQogICAgICBsZXQgX3RoaXMgPSB0aGlzDQogICAgICBsZXQgX3JlcSA9IHJlcQ0KICAgICAgbGV0IGJvRGF0YSA9IF90aGlzLiRyZWZzLmZvcm1Db250ZW50LmRhdGENCiAgICAgIGxldCB0ZW1wU2NyaXB0ID0NCiAgICAgICAgJ3ZhciB0ZW1wRnVuY3Rpb24gPSBmdW5jdGlvbihfcmVxLGRhdGEsX3RoaXMpeyAnICsgc2NyaXB0ICsgJ307Jw0KICAgICAgbGV0IHJlc3VsdCA9IGV2YWwodGVtcFNjcmlwdCArICd0ZW1wRnVuY3Rpb24oX3JlcSxib0RhdGEsX3RoaXMpOycpDQogICAgICBpZiAocmVzdWx0ICYmIHJlc3VsdC50aGVuICYmIHR5cGVvZiByZXN1bHQudGhlbiA9PSAnZnVuY3Rpb24nKSB7DQogICAgICAgIHJldHVybiByZXN1bHQNCiAgICAgIH0NCiAgICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKSByZXR1cm4gZmFsc2UNCiAgICAgIHJldHVybiB0cnVlDQogICAgfSwNCiAgICAvL+S/neWtmA0KICAgIHRhc2tTYXZlRHJhZnQoKSB7DQogICAgICBjb25zdCB0aGlzXyA9IHRoaXMNCiAgICAgIHV0aWxzDQogICAgICAgIC5nZXRPbmxpbmVGb3JtRGF0YShmYWxzZSkNCiAgICAgICAgLnRoZW4oZm9ybURhdGFTdHIgPT4gdGhpc18uc2F2ZURyYWZ0U3VibWl0KGZvcm1EYXRhU3RyKSkNCiAgICAgICAgLmNhdGNoKHJlYXNvbiA9Pg0KICAgICAgICAgIHV0aWxzDQogICAgICAgICAgICAuaGFuZGxlR2V0Rm9ybURhdGFSZWplY3QocmVhc29uKQ0KICAgICAgICAgICAgLnRoZW4oKCkgPT4gdGhpcy5zYXZlRHJhZnRTdWJtaXQoKSkNCiAgICAgICAgKQ0KICAgIH0sDQogICAgc2F2ZURyYWZ0U3VibWl0KGZvcm1EYXRhU3RyKSB7DQogICAgICBsZXQgX3RoaXMgPSB0aGlzDQogICAgICBsZXQgc2NyaXB0UmVzdWx0ID0gdGhpcy5ydW5CZWZvcmVTY3JpcHQoKQ0KICAgICAgLy/miafooYzliY3nva7ohJrmnKzov5Tlm55mYWxzZeaXtue7iOatouaMiemSruaTjeS9nA0KICAgICAgaWYgKHNjcmlwdFJlc3VsdCA9PT0gZmFsc2UpIHJldHVybg0KICAgICAgLy/miafooYzliY3nva7ohJrmnKzov5Tlm57nmoTmjqXlj6Pml7blhYjmiafooYzliY3nva7kuovku7bmjqXlj6MNCiAgICAgIGlmIChzY3JpcHRSZXN1bHQudGhlbiAmJiB0eXBlb2Ygc2NyaXB0UmVzdWx0LnRoZW4gPT0gJ2Z1bmN0aW9uJykgew0KICAgICAgICBzY3JpcHRSZXN1bHQudGhlbigNCiAgICAgICAgICAoKSA9PiB7DQogICAgICAgICAgICAvL+aOpeWPo+i/lOWbnuaIkOWKn+WImeato+W4uOaJp+ihjOaMiemSruaTjeS9nA0KICAgICAgICAgICAgX3RoaXMuZnVuY1NhdmVEcmFmdChmb3JtRGF0YVN0cikNCiAgICAgICAgICB9LA0KICAgICAgICAgIGZhaWwgPT4gew0KICAgICAgICAgICAgLy/mjqXlj6Pov5Tlm57lpLHotKXliJnnu4jmraLmjInpkq7mk43kvZzvvIzlubbnu5nkuI7mj5DnpLoNCiAgICAgICAgICAgIF90aGlzLiRtZXNzYWdlLndhcm5pbmcoZmFpbCkNCiAgICAgICAgICAgIHJldHVybg0KICAgICAgICAgIH0NCiAgICAgICAgKQ0KICAgICAgfSBlbHNlIHsNCiAgICAgICAgLy/miafooYzliY3nva7ohJrmnKzov5Tlm550cnVl5pe25q2j5bi45omn6KGM5oyJ6ZKu5pON5L2cDQogICAgICAgIF90aGlzLmZ1bmNTYXZlRHJhZnQoZm9ybURhdGFTdHIpDQogICAgICB9DQogICAgfSwNCiAgICAvL+S/neWtmOiNieeovw0KICAgIGZ1bmNTYXZlRHJhZnQoZm9ybURhdGFTdHIpIHsNCiAgICAgIHV0aWxzLmNsb3NlQWxsTm90aWZpY2F0aW9uKCkNCiAgICAgIGxldCBkYXRhID0gdGhpcy5oYW5kbGVGb3JtRGF0YShmb3JtRGF0YVN0cikNCiAgICAgIGRhdGEuZGVmSWQgPSB0aGlzLmRlZklkDQogICAgICBkYXRhLmFwcHJvdmFsID0gdHJ1ZQ0KICAgICAgZGF0YS5mb3JtS2V5ID0gdGhpcy4kcmVmcy5mb3JtQ29udGVudC5mb3JtS2V5DQogICAgICB0aGlzLiRyZWZzLnRhc2tUb1NhdmUuc2hvd0RpYWxvZyhkYXRhKQ0KICAgICAgLy8gdGhpcy4kc3RvcmUuZGlzcGF0Y2goInN0b3JlUHJvY2Vzcy9zYXZlVGFza0RyYWZ0IiwgZGF0YSkudGhlbigoKSA9PiB7DQogICAgICAvLyAgIHV0aWxzLnJlbG9hZCgpOw0KICAgICAgLy8gfSk7DQogICAgfSwNCiAgICAvL+S8oOmYheWbnuWkjQ0KICAgIGhhbmRsZVJlYWQoKSB7DQogICAgICB0aGlzLiRyZWZzLnRhc2tUb1JlYWQuc2hvd0RpYWxvZygpDQogICAgfSwNCiAgICAvLyDlh4blpIfopoHmj5DkuqTnmoTmlbDmja4NCiAgICBoYW5kbGVGb3JtRGF0YShmb3JtRGF0YVN0cikgew0KICAgICAgLy9sZXQgZmlsZXMgPSAiIjsNCiAgICAgIGxldCB6ZmlsZXMgPSAnJw0KICAgICAgLy8gdGhpcy4kcmVmcy5maWxlVXBsb2FkLmlzRmluaXNoVXBsb2FkKCk7DQogICAgICAvLyBpZiAodGhpcy4kcmVmcy5maWxlVXBsb2FkICYmIHRoaXMuJHJlZnMuZmlsZVVwbG9hZC5nZXRGaWxlcygpICE9ICIiKSB7DQogICAgICAvLyAgIGZpbGVzID0gSlNPTi5zdHJpbmdpZnkodGhpcy4kcmVmcy5maWxlVXBsb2FkLmdldEZpbGVzKCkpOw0KICAgICAgLy8gfQ0KICAgICAgLy9sZXQgb3BpbmlvbiA9ICIiOw0KICAgICAgLy8gaWYgKHRoaXMuJHJlZnMub3BpbmlvblRleHQgJiYgdGhpcy4kcmVmcy5vcGluaW9uVGV4dC5nZXRPcGluaW9uKCkgIT0gIiIpIHsNCiAgICAgIC8vICAgb3BpbmlvbiA9IHRoaXMuJHJlZnMub3BpbmlvblRleHQuZ2V0T3BpbmlvbigpOw0KICAgICAgLy8gfQ0KDQogICAgICBsZXQgZGF0YSA9IHsNCiAgICAgICAgdGFza0lkOiB0aGlzLnRhc2tJZCwNCiAgICAgICAgYWN0aW9uTmFtZTogdGhpcy5hY3Rpb25OYW1lLA0KICAgICAgICBkZXN0aW5hdGlvbjogJycsDQogICAgICAgIC8vZmlsZXM6IGZpbGVzLA0KICAgICAgICB6ZmlsZXM6IHpmaWxlcywNCiAgICAgICAgLy9vcGluaW9uOiBvcGluaW9uLA0KICAgICAgICBqdW1wVHlwZTogJycsDQogICAgICAgIGFnZW50TGVhZGVySWQ6IHRoaXMubGVhZGVySWQsDQogICAgICAgIG5vZGVVc2VyczogJ1tdJw0KICAgICAgfQ0KICAgICAgaWYgKGZvcm1EYXRhU3RyKSB7DQogICAgICAgIC8vIFVSTOihqOWNlQ0KICAgICAgICBpZiAoZm9ybURhdGFTdHIuY29uc3RydWN0b3IgPT0gT2JqZWN0KSB7DQogICAgICAgICAgZGF0YS5mb3JtVHlwZSA9ICdmcmFtZScNCiAgICAgICAgICBpZiAoZm9ybURhdGFTdHIuYnVzaW5lc3NLZXkpIHsNCiAgICAgICAgICAgIGRhdGEuYnVzaW5lc3NLZXkgPSBmb3JtRGF0YVN0ci5idXNpbmVzc0tleQ0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAoZm9ybURhdGFTdHIuc3lzQ29kZSkgew0KICAgICAgICAgICAgZGF0YS5zeXNDb2RlID0gZm9ybURhdGFTdHIuc3lzQ29kZQ0KICAgICAgICAgIH0NCiAgICAgICAgICBpZiAoZm9ybURhdGFTdHIudmFycykgew0KICAgICAgICAgICAgZGF0YS52YXJzID0gZm9ybURhdGFTdHIudmFycw0KICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlIGlmIChmb3JtRGF0YVN0ci5jb25zdHJ1Y3RvciA9PSBTdHJpbmcpIHsNCiAgICAgICAgICBkYXRhLmRhdGEgPSBCYXNlNjQuZW5jb2RlKGZvcm1EYXRhU3RyKQ0KICAgICAgICAgIGRhdGEuZm9ybVR5cGUgPSAnaW5uZXInDQogICAgICAgIH0NCiAgICAgIH0NCg0KICAgICAgaWYgKHdpbmRvdy51cmdlbnRTdGF0ZVZhbHVlKSB7DQogICAgICAgIGRhdGEudXJnZW50U3RhdGVWYWx1ZSA9IHdpbmRvdy51cmdlbnRTdGF0ZVZhbHVlDQogICAgICB9DQoNCiAgICAgIHJldHVybiBkYXRhDQogICAgfSwNCiAgICBoYW5kbGVDbG9zZSgpIHsNCiAgICAgIHRoaXMuZGlhbG9nRm9ybVZpc2libGUgPSB0cnVlDQogICAgfSwNCiAgICAvL+iOt+WPluS7u+WKoemUgeWumueKtuaAgQ0KICAgIGxvY2tVbmxvY2soKSB7DQogICAgICB0aGlzLiRzdG9yZQ0KICAgICAgICAuZGlzcGF0Y2goDQogICAgICAgICAgJ3N0b3JlUHJvY2Vzcy9sb2NrVW5sb2NrJywNCiAgICAgICAgICB0aGlzLnRhc2tJZCArICcmbGVhZGVySWQ9JyArIHRoaXMubGVhZGVySWQNCiAgICAgICAgKQ0KICAgICAgICAudGhlbigoKSA9PiB7DQogICAgICAgICAgLy8gdGhpcy4kcm91dGVyLmdvKHRoaXMuJHJvdXRlci5jdXJyZW50Um91dGUpOw0KICAgICAgICAgIHV0aWxzLnJlbG9hZCgpDQogICAgICAgIH0pDQogICAgfSwNCiAgICAvL+aSpOWbng0KICAgIGhhbmRsZVJldm9rZShpZCwgc3RhdHVzKSB7DQogICAgICBpZiAoc3RhdHVzID09ICdyZXZva2VUb1N0YXJ0Jykgew0KICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+W3suaSpOWbnu+8jOS4jeiDveWGjeaSpOWbnicpDQogICAgICAgIHJldHVybiBmYWxzZQ0KICAgICAgfQ0KICAgICAgLy8gaWYgKHRoaXMuJHJlZnMub3BpbmlvblRleHQuZ2V0T3BpbmlvbigpID09ICIiKSB7DQogICAgICAvLyAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygi6K+35aGr5YaZ5pKk5Zue5oSP6KeBIik7DQogICAgICAvLyAgIHJldHVybiBmYWxzZTsNCiAgICAgIC8vIH0NCiAgICAgIGxldCBkYXRhID0gew0KICAgICAgICBpbnN0YW5jZUlkOiB0aGlzLmluc3RJZCwNCiAgICAgICAgaXNIYW5kUmV2b2tlOiB0aGlzLmlzSGFuZA0KICAgICAgICAvL2NhdXNlOiB0aGlzLiRyZWZzLm9waW5pb25UZXh0LmdldE9waW5pb24oKQ0KICAgICAgfQ0KICAgICAgbGV0IHJldm9rZVVybCA9ICdzdG9yZVByb2Nlc3MvcmV2b2tlSW5zdGFuY2VCdG4nDQogICAgICB0aGlzLiRyZWZzLnRhc2tUb1Jldm9rZS5zaG93RGlhbG9nKHJldm9rZVVybCwgZGF0YSkNCiAgICAgIC8vIHRoaXMuJGNvbmZpcm0oIuehruiupCIgKyB0aGlzLmRhaWxvZ1RpdGxlICsgIj8iLCAi5o+Q56S6Iiwgew0KICAgICAgLy8gICBjYW5jZWxCdXR0b25UZXh0OiAi5Y+W5raIIiwNCiAgICAgIC8vICAgY29uZmlybUJ1dHRvblRleHQ6ICLnoa7lrpoiLA0KICAgICAgLy8gICB0eXBlOiAid2FybmluZyIsDQogICAgICAvLyAgIGNsb3NlT25DbGlja01vZGFsOiBmYWxzZQ0KICAgICAgLy8gfSkudGhlbigoKSA9PiB7DQogICAgICAvLyAgIHRoaXMuJHN0b3JlDQogICAgICAvLyAgICAgLmRpc3BhdGNoKCJzdG9yZVByb2Nlc3MvcmV2b2tlSW5zdGFuY2VCdG4iLCBkYXRhKQ0KICAgICAgLy8gICAgIC50aGVuKGlzSGFuZFJldm9rZSA9PiB7DQogICAgICAvLyAgICAgICBpZiAodGhpcy50b2tlbiAhPSBudWxsKSB7DQogICAgICAvLyAgICAgICAgIHdpbmRvdy5jbG9zZSgpOw0KICAgICAgLy8gICAgICAgfSBlbHNlIHsNCiAgICAgIC8vICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goIi92LWZsb3cvdi10b2RvIik7DQogICAgICAvLyAgICAgICB9DQogICAgICAvLyAgICAgfSk7DQogICAgICAvLyB9KTsNCiAgICB9LA0KICAgIHNhdmVSZXZva2UoKSB7DQogICAgICBpZiAodGhpcy5vcGluaW9uID09ICcnKSB7DQogICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZygn6K+35aGr5YaZ5pKk5Zue5oSP6KeBJykNCiAgICAgICAgcmV0dXJuIGZhbHNlDQogICAgICB9DQogICAgICBsZXQgZGF0YSA9IHsNCiAgICAgICAgaW5zdGFuY2VJZDogdGhpcy5pbnN0SWQsDQogICAgICAgIGlzSGFuZFJldm9rZTogdGhpcy5pc0hhbmQsDQogICAgICAgIGNhdXNlOiB0aGlzLm9waW5pb24NCiAgICAgIH0NCiAgICAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCdzdG9yZVByb2Nlc3MvcmV2b2tlSW5zdGFuY2VCdG4nLCBkYXRhKS50aGVuKCgpID0+IHsNCiAgICAgICAgaWYgKHRoaXMudG9rZW4gIT0gbnVsbCkgew0KICAgICAgICAgIHdpbmRvdy5jbG9zZSgpDQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgdGhpcy4kcm91dGVyLmdvKC0xKQ0KICAgICAgICB9DQogICAgICB9KQ0KICAgICAgdGhpcy5kaWFsb2dGb3JtVmlzaWJsZSA9IGZhbHNlDQogICAgICB0aGlzLm9waW5pb24gPSAnJw0KICAgIH0sDQogICAgZXhpdFJldm9rZSgpIHsNCiAgICAgIHRoaXMuZGlhbG9nRm9ybVZpc2libGUgPSBmYWxzZQ0KICAgICAgdGhpcy5vcGluaW9uID0gJycNCiAgICB9LA0KICAgIC8v5rKf6YCa5Y+N6aaIDQogICAgY29tbXVGZWVkQmFjaygpIHsNCiAgICAgIHRoaXMuJHJlZnMudGFza1RvRmVlQmFjay5zaG93RGlhbG9nKCkNCiAgICB9LA0KICAgIHVzZXJBZGRTaWduKCkgew0KICAgICAgdGhpcy4kcmVmcy51c2VyQWRkU2lnblJlcGx5LnNob3dEaWFsb2coKQ0KICAgICAgLy8gaWYgKHRoaXMuJHJlZnMub3BpbmlvblRleHQuZ2V0T3BpbmlvbigpID09ICIiKSB7DQogICAgICAvLyAgIE1lc3NhZ2Uud2FybmluZygi6K+36L6T5YWl5oSP6KeB5YaF5a65Iik7DQogICAgICAvLyB9IGVsc2Ugew0KICAgICAgLy8gICBsZXQgZmlsZXMgPSAiIjsNCiAgICAgIC8vICAgbGV0IHpmaWxlcyA9ICIiOw0KICAgICAgLy8gICB0aGlzLiRyZWZzLmZpbGVVcGxvYWQuaXNGaW5pc2hVcGxvYWQoKTsNCiAgICAgIC8vICAgaWYgKHRoaXMuJHJlZnMuZmlsZVVwbG9hZCAmJiB0aGlzLiRyZWZzLmZpbGVVcGxvYWQuZ2V0RmlsZXMoKSAhPSAiIikgew0KICAgICAgLy8gICAgIGZpbGVzID0gSlNPTi5zdHJpbmdpZnkodGhpcy4kcmVmcy5maWxlVXBsb2FkLmdldEZpbGVzKCkpOw0KICAgICAgLy8gICB9DQogICAgICAvLyAgIGxldCBkYXRhID0gew0KICAgICAgLy8gICAgIHByb2NEZWZJZDogdGhpcy5kZWZJZCwNCiAgICAgIC8vICAgICBwcm9jSW5zdElkOiB0aGlzLmluc3RJZCwNCiAgICAgIC8vICAgICBzdGF0dXM6ICJpbnF1X3JlcGx5IiwNCiAgICAgIC8vICAgICB0YXNrSWQ6IHRoaXMudGFza0lkLA0KICAgICAgLy8gICAgIG9waW5pb246IHRoaXMuJHJlZnMub3BpbmlvblRleHQuZ2V0T3BpbmlvbigpLA0KICAgICAgLy8gICAgIGZpbGVzOiBmaWxlcywNCiAgICAgIC8vICAgICB6ZmlsZXM6IHpmaWxlcw0KICAgICAgLy8gICB9Ow0KICAgICAgLy8gICB0aGlzLiRzdG9yZS5kaXNwYXRjaCgic3RvcmVQcm9jZXNzL3VzZXJBZGRTaWduIiwgZGF0YSkudGhlbigoKSA9PiB7DQogICAgICAvLyAgICAgaWYgKHRoaXMudG9rZW4gIT0gbnVsbCkgew0KICAgICAgLy8gICAgICAgd2luZG93LmNsb3NlKCk7DQogICAgICAvLyAgICAgfSBlbHNlIHsNCiAgICAgIC8vICAgICAgIHRoaXMuJHJvdXRlci5nbygtMSk7DQogICAgICAvLyAgICAgfQ0KICAgICAgLy8gICB9KTsNCiAgICAgIC8vIH0NCiAgICB9LA0KICAgIC8v5b6B6K+i5Zue5aSNDQogICAgdGFza1RvSW5xdVJlcGx5KCkgew0KICAgICAgdGhpcy4kcmVmcy50YXNrVG9JbnF1UmVwbHkuc2hvd0RpYWxvZygpDQogICAgICAvLyBpZiAodGhpcy4kcmVmcy5vcGluaW9uVGV4dC5nZXRPcGluaW9uKCkgPT0gIiIpIHsNCiAgICAgIC8vICAgTWVzc2FnZS53YXJuaW5nKCLor7fovpPlhaXmhI/op4HlhoXlrrkiKTsNCiAgICAgIC8vIH0gZWxzZSB7DQogICAgICAvLyAgIGxldCBmaWxlcyA9ICIiOw0KICAgICAgLy8gICBsZXQgemZpbGVzID0gIiI7DQogICAgICAvLyAgIHRoaXMuJHJlZnMuZmlsZVVwbG9hZC5pc0ZpbmlzaFVwbG9hZCgpOw0KICAgICAgLy8gICBpZiAodGhpcy4kcmVmcy5maWxlVXBsb2FkICYmIHRoaXMuJHJlZnMuZmlsZVVwbG9hZC5nZXRGaWxlcygpICE9ICIiKSB7DQogICAgICAvLyAgICAgZmlsZXMgPSBKU09OLnN0cmluZ2lmeSh0aGlzLiRyZWZzLmZpbGVVcGxvYWQuZ2V0RmlsZXMoKSk7DQogICAgICAvLyAgIH0NCiAgICAgIC8vICAgbGV0IGRhdGEgPSB7DQogICAgICAvLyAgICAgcHJvY0RlZklkOiB0aGlzLmRlZklkLA0KICAgICAgLy8gICAgIHByb2NJbnN0SWQ6IHRoaXMuaW5zdElkLA0KICAgICAgLy8gICAgIHN0YXR1czogImlucXVfcmVwbHkiLA0KICAgICAgLy8gICAgIHRhc2tJZDogdGhpcy50YXNrSWQsDQogICAgICAvLyAgICAgb3BpbmlvbjogdGhpcy4kcmVmcy5vcGluaW9uVGV4dC5nZXRPcGluaW9uKCksDQogICAgICAvLyAgICAgZmlsZXM6IGZpbGVzLA0KICAgICAgLy8gICAgIHpmaWxlczogemZpbGVzLA0KICAgICAgLy8gICAgIGZvcm1EYXRhOiBKU09OLnN0cmluZ2lmeSh0aGlzLiRyZWZzLmZvcm1Db250ZW50LmRhdGEpDQogICAgICAvLyAgIH07DQogICAgICAvLyAgIHRoaXMuJHN0b3JlLmRpc3BhdGNoKCJzdG9yZVByb2Nlc3MvdGFza1RvSW5xdVJlcGx5IiwgZGF0YSkudGhlbigoKSA9PiB7DQogICAgICAvLyAgICAgaWYgKHRoaXMudG9rZW4gIT0gbnVsbCkgew0KICAgICAgLy8gICAgICAgd2luZG93LmNsb3NlKCk7DQogICAgICAvLyAgICAgfSBlbHNlIHsNCiAgICAgIC8vICAgICAgIHRoaXMuJHJvdXRlci5nbygtMSk7DQogICAgICAvLyAgICAgfQ0KICAgICAgLy8gICB9KTsNCiAgICAgIC8vIH0NCiAgICB9LA0KICAgIC8v6amz5Zue6K6+572uDQogICAgdGFza1RvUmVqZWN0KCkgew0KICAgICAgLy8g5a6h5om56ZmE5Lu25pWw5o2uDQogICAgICAvLyBpZiAodGhpcy4kcmVmcy5maWxlVXBsb2FkICYmIHRoaXMuJHJlZnMuZmlsZVVwbG9hZC5nZXRGaWxlcygpICE9ICIiKSB7DQogICAgICAvLyAgIHRoaXMub3BpbmlvbkZpbGVzID0gSlNPTi5zdHJpbmdpZnkodGhpcy4kcmVmcy5maWxlVXBsb2FkLmdldEZpbGVzKCkpOw0KICAgICAgLy8gfQ0KICAgICAgbGV0IHBhcmVudFRhc2tJZCA9ICcnIC8v55So5oi35Lu75Yqh5Yqg562+5ZCO55qE54i25Lu75YqhSUQNCiAgICAgIGlmICh0aGlzLm5vZGVUeXBlID09ICdVU0VSVEFTSycgJiYgdGhpcy50YXNrcy5icG1UYXNrLnBhcmVudElkICE9ICcwJykgew0KICAgICAgICAvL+eUqOaIt+S7u+WKoeWKoOetvg0KICAgICAgICBwYXJlbnRUYXNrSWQgPSB0aGlzLnRhc2tzLmJwbVRhc2sucGFyZW50SWQNCiAgICAgIH0NCg0KICAgICAgdXRpbHMNCiAgICAgICAgLmdldE9ubGluZUZvcm1EYXRhKHRydWUpDQogICAgICAgIC50aGVuKCgpID0+IHRoaXMuJHJlZnMudGFza1RvUmVqZWN0LmhhbmRsZU9wZW4ocGFyZW50VGFza0lkLCB0aGlzKSkgLy/niLbnu4Tku7bosIPnlKjlrZDnu4Tku7bmlrnms5UNCiAgICAgICAgLmNhdGNoKHJlYXNvbiA9Pg0KICAgICAgICAgIHV0aWxzLmhhbmRsZUdldEZvcm1EYXRhUmVqZWN0KHJlYXNvbikudGhlbigoKSA9PiB0aGlzLnN1Ym1pdENvbmZpcm0oKSkNCiAgICAgICAgKQ0KICAgIH0sDQogICAgLy/ovazlip7orr7nva4NCiAgICB0YXNrVG9EZWxlZ2F0ZSgpIHsNCiAgICAgIHRoaXMuJHJlZnMudGFza1RvRGVsZWdhdGUuaGFuZGxlQ2xvc2UoDQogICAgICAgIHRoaXMub3BpbmlvbkZpZWxkLA0KICAgICAgICB0aGlzLiRyZWZzLmZvcm1Db250ZW50LmRhdGEsDQogICAgICAgIHRoaXMuYXBwZW5kT3BpbmlvbiwNCiAgICAgICAgdGhpcw0KICAgICAgKSAvL+eItue7hOS7tuiwg+eUqOWtkOe7hOS7tuaWueazlQ0KICAgIH0sDQogICAgLy/lvoHor6Lorr7nva4NCiAgICB0YXNrVG9JbnF1KCkgew0KICAgICAgaWYgKHRoaXMuc3RhdHVzICE9ICdUUkFOU0ZPUk1FRElOUVUnKSB7DQogICAgICAgIHRoaXMuJHJlZnMudGFza1RvSW5xdS5zaG93VHlwZSgpDQogICAgICB9DQogICAgICB0aGlzLiRyZWZzLnRhc2tUb0lucXUuaGFuZGxlQ2xvc2UoDQogICAgICAgIHRoaXMub3BpbmlvbkZpZWxkLA0KICAgICAgICB0aGlzLiRyZWZzLmZvcm1Db250ZW50LmRhdGEsDQogICAgICAgIHRoaXMuYXBwZW5kT3Bpbmlvbg0KICAgICAgKSAvL+eItue7hOS7tuiwg+eUqOWtkOe7hOS7tuaWueazlQ0KICAgIH0sDQogICAgLy/mtYHnqIvnu4jmraINCiAgICB0YXNrVG9FbmRQcm9jZXNzKCkgew0KICAgICAgdGhpcy4kcmVmcy50YXNrVG9FbmRQcm9jZXNzLmhhbmRsZUNsb3NlKHRoaXMpIC8v54i257uE5Lu26LCD55So5a2Q57uE5Lu25pa55rOVDQogICAgfSwNCiAgICAvL+a1gei9rOiuvue9rg0KICAgIHRhc2tUb1RyYW5zKCkgew0KICAgICAgLy8gaWYgKHRoaXMuJHJlZnMuZmlsZVVwbG9hZCAmJiB0aGlzLiRyZWZzLmZpbGVVcGxvYWQuZ2V0RmlsZXMoKSAhPSAiIikgew0KICAgICAgLy8gICB0aGlzLm9waW5pb25GaWxlcyA9IEpTT04uc3RyaW5naWZ5KHRoaXMuJHJlZnMuZmlsZVVwbG9hZC5nZXRGaWxlcygpKTsNCiAgICAgIC8vIH0NCiAgICAgIHRoaXMuJHJlZnMudGFza1RvVHJhbnMuaGFuZGxlQ2xvc2UoDQogICAgICAgIHRoaXMsDQogICAgICAgIHRoaXMub3BpbmlvbkZpZWxkLA0KICAgICAgICB0aGlzLiRyZWZzLmZvcm1Db250ZW50LmRhdGEsDQogICAgICAgIHRoaXMuYXBwZW5kT3Bpbmlvbg0KICAgICAgKSAvL+eItue7hOS7tuiwg+eUqOWtkOe7hOS7tuaWueazlQ0KICAgIH0sDQogICAgLy/liqDnrb7orr7nva4NCiAgICB0YXNrVG9BZGRTaWduKCkgew0KICAgICAgdGhpcy4kcmVmcy50YXNrVG9BZGRTaWduLmhhbmRsZUNsb3NlKHRoaXMubm9kZVR5cGUsIHRoaXMuaW5zdElkLCB0aGlzKSAvL+eItue7hOS7tuiwg+eUqOWtkOe7hOS7tuaWueazlQ0KICAgIH0sDQogICAgLy/ku7vliqHlu7bmnJ8NCiAgICB0YXNrVG9EZWxheSgpIHsNCiAgICAgIHRoaXMuJHJlZnMudGFza1RvRGVsYXkuaGFuZGxlQ2xvc2UoKSAvL+eItue7hOS7tuiwg+eUqOWtkOe7hOS7tuaWueazlQ0KICAgIH0sDQogICAgLy/lubbooYzlrqHmibkNCiAgICB0YXNrQXBwcm92ZUxpbmUoKSB7DQogICAgICB0aGlzLiRyZWZzLnRhc2tUb0FwcHJvdmVMaW5lLmhhbmRsZUNsb3NlKCkgLy/niLbnu4Tku7bosIPnlKjlrZDnu4Tku7bmlrnms5UNCiAgICB9LA0KICAgIC8vIOmhuuW6j+etvue9sg0KICAgIHRhc2tTaWduU2VxdWVuY2UoKSB7DQogICAgICB0aGlzLiRyZWZzLnRhc2tUb1NpZ25TZXF1ZW5jZS5oYW5kbGVDbG9zZSgpIC8v54i257uE5Lu26LCD55So5a2Q57uE5Lu25pa55rOVDQogICAgfSwNCiAgICAvLyDlubbooYznrb7nvbINCiAgICB0YXNrU2lnbkxpbmUoKSB7DQogICAgICB0aGlzLiRyZWZzLnRhc2tUb1NpZ25MaW5lLmhhbmRsZUNsb3NlKCkgLy/niLbnu4Tku7bosIPnlKjlrZDnu4Tku7bmlrnms5UNCiAgICB9LA0KICAgIGRvTmV4dCgpIHsNCiAgICAgIGlmICghdGhpcy50ZXh0KSB7DQogICAgICAgIGlmICh0aGlzLmFjdGlvbk5hbWUgPT0gJ29wcG9zZVRyYW5zJyB8fCB0aGlzLmFjdGlvbk5hbWUgPT0gJ29wcG9zZScpIHsNCiAgICAgICAgICB0aGlzLnRleHQgPSAn5Y+N5a+5Jw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgIHRoaXMudGV4dCA9ICflkIzmhI8nDQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIGNvbnN0IHRoaXNfID0gdGhpcw0KICAgICAgdXRpbHMNCiAgICAgICAgLmdldE9ubGluZUZvcm1EYXRhKHRydWUpDQogICAgICAgIC50aGVuKGZvcm1EYXRhU3RyID0+IHRoaXNfLmRvTmV4dFN1Ym1pdChmb3JtRGF0YVN0cikpDQogICAgICAgIC5jYXRjaChyZWFzb24gPT4NCiAgICAgICAgICB1dGlscy5oYW5kbGVHZXRGb3JtRGF0YVJlamVjdChyZWFzb24pLnRoZW4oKCkgPT4gdGhpcy5kb05leHRTdWJtaXQoKSkNCiAgICAgICAgKQ0KICAgIH0sDQogICAgLy8gZG9OZXh05omn6KGM44CCZm9ybURhdGFTdHLvvJrlrZfnrKbkuLLmoLzlvI/nmoTooajljZXmlbDmja7jgIINCiAgICBkb05leHRTdWJtaXQoZm9ybURhdGFTdHIpIHsNCiAgICAgIGxldCBfdGhpcyA9IHRoaXMNCiAgICAgIGxldCBzY3JpcHRSZXN1bHQgPSB0aGlzLnJ1bkJlZm9yZVNjcmlwdCgpDQogICAgICAvL+aJp+ihjOWJjee9ruiEmuacrOi/lOWbnmZhbHNl5pe257uI5q2i5oyJ6ZKu5pON5L2cDQogICAgICBpZiAoc2NyaXB0UmVzdWx0ID09PSBmYWxzZSkgcmV0dXJuDQogICAgICAvL+aJp+ihjOWJjee9ruiEmuacrOi/lOWbnueahOaOpeWPo+aXtuWFiOaJp+ihjOWJjee9ruS6i+S7tuaOpeWPow0KICAgICAgaWYgKHNjcmlwdFJlc3VsdC50aGVuICYmIHR5cGVvZiBzY3JpcHRSZXN1bHQudGhlbiA9PSAnZnVuY3Rpb24nKSB7DQogICAgICAgIHNjcmlwdFJlc3VsdC50aGVuKA0KICAgICAgICAgICgpID0+IHsNCiAgICAgICAgICAgIC8v5o6l5Y+j6L+U5Zue5oiQ5Yqf5YiZ5q2j5bi45omn6KGM5oyJ6ZKu5pON5L2cDQogICAgICAgICAgICBfdGhpcy5mdW5jRG9OZXh0KGZvcm1EYXRhU3RyKQ0KICAgICAgICAgIH0sDQogICAgICAgICAgZmFpbCA9PiB7DQogICAgICAgICAgICAvL+aOpeWPo+i/lOWbnuWksei0peWImee7iOatouaMiemSruaTjeS9nO+8jOW5tue7meS4juaPkOekug0KICAgICAgICAgICAgX3RoaXMuJG1lc3NhZ2Uud2FybmluZyhmYWlsKQ0KICAgICAgICAgICAgcmV0dXJuDQogICAgICAgICAgfQ0KICAgICAgICApDQogICAgICB9IGVsc2Ugew0KICAgICAgICAvL+aJp+ihjOWJjee9ruiEmuacrOi/lOWbnnRydWXml7bmraPluLjmiafooYzmjInpkq7mk43kvZwNCiAgICAgICAgX3RoaXMuZnVuY0RvTmV4dChmb3JtRGF0YVN0cikNCiAgICAgIH0NCiAgICB9LA0KICAgIGZ1bmNEb05leHQoZm9ybURhdGFTdHIpIHsNCiAgICAgIHV0aWxzLmNsb3NlQWxsTm90aWZpY2F0aW9uKCkNCiAgICAgIGxldCBkYXRhID0gdGhpcy5oYW5kbGVGb3JtRGF0YShmb3JtRGF0YVN0cikNCiAgICAgIGRhdGEuZm9ybUtleSA9IHRoaXMuJHJlZnMuZm9ybUNvbnRlbnQuZm9ybUtleQ0KICAgICAgZGF0YS5vcGluaW9uID0gdGhpcy50ZXh0DQogICAgICBpZiAodGhpcy5ub2RlVHlwZSA9PSAnVVNFUlRBU0snICYmIHRoaXMudGFza3MuYnBtVGFzay5wYXJlbnRJZCAhPSAnMCcpIHsNCiAgICAgICAgLy/nlKjmiLfku7vliqHliqDnrb4NCiAgICAgICAgaWYgKHRoaXMuYWN0aW9uTmFtZSA9PSAnb3Bwb3NlJykgew0KICAgICAgICAgIGRhdGEuYWRkU2lnbkFjdGlvbiA9ICdvcHBvc2VUcmFucycNCiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmFjdGlvbk5hbWUgPT0gJ2FncmVlJykgew0KICAgICAgICAgIGRhdGEuYWRkU2lnbkFjdGlvbiA9ICdhZ3JlZVRyYW5zJw0KICAgICAgICB9DQogICAgICB9DQogICAgICBpZiAoDQogICAgICAgICh0aGlzLmNob2ljZUV4Y3V0b3IgfHwNCiAgICAgICAgICB0aGlzLmp1bXBUeXBlIHx8DQogICAgICAgICAgdGhpcy4kcm91dGUucXVlcnkudHlwZSA9PT0gJ2ZyZWUnKSAmJg0KICAgICAgICAhdGhpcy50YXNrU3RhdHVzQXJyYXkuaW5jbHVkZXModGhpcy5zdGF0dXMpDQogICAgICApIHsNCiAgICAgICAgdGhpcy4kc3RvcmUNCiAgICAgICAgICAuZGlzcGF0Y2goJ3N0b3JlUHJvY2Vzcy9nZXRBZnRlckp1bXBOb2RlcycsIHsNCiAgICAgICAgICAgIHRhc2tJZDogdGhpcy50YXNrSWQsDQogICAgICAgICAgICBkYXRhOiBkYXRhLmRhdGEsDQogICAgICAgICAgICBkZWZJZDogJycsDQogICAgICAgICAgICBpbnN0SWQ6ICcnLA0KICAgICAgICAgICAgdHlwZTogdGhpcy4kcm91dGUucXVlcnkudHlwZSB8fCB0aGlzLmp1bXBUeXBlDQogICAgICAgICAgfSkNCiAgICAgICAgICAudGhlbihyZXMgPT4gew0KICAgICAgICAgICAgaWYgKA0KICAgICAgICAgICAgICByZXMuYWZ0ZXJOb2Rlcy5sZW5ndGggPT0gMCB8fA0KICAgICAgICAgICAgICAocmVzLmFmdGVyTm9kZXMubGVuZ3RoID09IDEgJiYNCiAgICAgICAgICAgICAgICByZXMuYWZ0ZXJOb2Rlc1swXS5leGN1dG9yTGlzdCAhPSB1bmRlZmluZWQgJiYNCiAgICAgICAgICAgICAgICByZXMuYWZ0ZXJOb2Rlc1swXS5leGN1dG9yTGlzdC5sZW5ndGggPT0gMSkNCiAgICAgICAgICAgICkgew0KICAgICAgICAgICAgICB0aGlzLiRyZWZzLnRhc2tUb0NvbXBsZXRlLnNob3dEaWFsb2coDQogICAgICAgICAgICAgICAgdGhpcy5vcGluaW9uRmllbGQsDQogICAgICAgICAgICAgICAgdGhpcy4kcmVmcy5mb3JtQ29udGVudC5kYXRhLA0KICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kT3BpbmlvbiwNCiAgICAgICAgICAgICAgICBkYXRhDQogICAgICAgICAgICAgICkNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgIHRoaXMuJHJlZnMudGFza1NlbGVjdERlc3RpbmF0aW9uLnNob3dEaWFsb2coDQogICAgICAgICAgICAgICAgZGF0YS5kYXRhLA0KICAgICAgICAgICAgICAgIGRhdGEuZmlsZXMsDQogICAgICAgICAgICAgICAgZGF0YS56ZmlsZXMsDQogICAgICAgICAgICAgICAgZGF0YS5vcGluaW9uLA0KICAgICAgICAgICAgICAgIHRoaXMuaW5zdElkLA0KICAgICAgICAgICAgICAgIHRoaXMuanVtcFR5cGUNCiAgICAgICAgICAgICAgKQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pDQogICAgICB9IGVsc2Ugew0KICAgICAgICAvL3RoaXMuZGlzYWJsZWQgPSB0cnVlOw0KICAgICAgICBsZXQgdGlwTXNnID0gJ+ehruiupOWKnueQhuatpOS7u+WKoT8nDQogICAgICAgIGlmICh0aGlzLmFjdGlvbk5hbWUgPT0gJ2FncmVlJyAmJiB0aGlzLnN0YXR1cyA9PSAnU0lHTlNFUVVFTkNFRUQnKSB7DQogICAgICAgICAgdGhpcy4kaHR0cA0KICAgICAgICAgICAgLmdldCgNCiAgICAgICAgICAgICAgJyR7YnBtUnVuVGltZX0vcnVudGltZS90YXNrL3YxL25leHRFeGVjdXRvcj90YXNrSWQ9JyArIHRoaXMudGFza0lkDQogICAgICAgICAgICApDQogICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7DQogICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN0YXRlICYmIHJlc3BvbnNlLmRhdGEudmFsdWUpIHsNCiAgICAgICAgICAgICAgICB0aXBNc2cgPSBg5LiL5LiA5q2l55qE5omn6KGM5Lq65Li677yaJHtyZXNwb25zZS5kYXRhLnZhbHVlLm5hbWV944CCPGJyLz4g5oKo56Gu5a6a6KaB5o+Q5Lqk5ZCX77yfYA0KICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIHRoaXMuJHJlZnMudGFza1RvQ29tcGxldGUuc2hvd0RpYWxvZygNCiAgICAgICAgICAgICAgICB0aGlzLm9waW5pb25GaWVsZCwNCiAgICAgICAgICAgICAgICB0aGlzLiRyZWZzLmZvcm1Db250ZW50LmRhdGEsDQogICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRPcGluaW9uLA0KICAgICAgICAgICAgICAgIGRhdGENCiAgICAgICAgICAgICAgKQ0KICAgICAgICAgICAgfSkNCiAgICAgICAgICByZXR1cm4NCiAgICAgICAgfQ0KICAgICAgICB0aGlzLiRyZWZzLnRhc2tUb0NvbXBsZXRlLnNob3dEaWFsb2coDQogICAgICAgICAgdGhpcy5vcGluaW9uRmllbGQsDQogICAgICAgICAgdGhpcy4kcmVmcy5mb3JtQ29udGVudC5kYXRhLA0KICAgICAgICAgIHRoaXMuYXBwZW5kT3BpbmlvbiwNCiAgICAgICAgICBkYXRhDQogICAgICAgICkNCiAgICAgIH0NCiAgICB9LA0KICAgIC8v5ZCM5oSPDQogICAgdGFza0FncmVlKCkgew0KICAgICAgdGhpcy5hY3Rpb25OYW1lID0gJ2FncmVlJw0KICAgICAgdGhpcy5kb05leHQoKQ0KICAgIH0sDQogICAgLy/lkIzmhI/vvIjmtYHovazvvIkNCiAgICB0YXNrQWdyZWVUcmFucygpIHsNCiAgICAgIHRoaXMuYWN0aW9uTmFtZSA9ICdhZ3JlZVRyYW5zJw0KICAgICAgdGhpcy5kb05leHQoKQ0KICAgIH0sDQogICAgLy/lj43lr7kNCiAgICB0YXNrT3Bwb3NlKCkgew0KICAgICAgdGhpcy5hY3Rpb25OYW1lID0gJ29wcG9zZScNCiAgICAgIHRoaXMuZG9OZXh0KCkNCiAgICB9LA0KICAgIC8v5Y+N5a+577yI5rWB6L2s77yJDQogICAgdGFza09wcG9zZVRyYW5zKCkgew0KICAgICAgdGhpcy5hY3Rpb25OYW1lID0gJ29wcG9zZVRyYW5zJw0KICAgICAgdGhpcy5kb05leHQoKQ0KICAgIH0sDQogICAgaGlkZGVuT3BlcnRpb24oKSB7DQogICAgICBpZiAodGhpcy4kcmVmcy5idG5SZWdpb24pIHsNCiAgICAgICAgdGhpcy4kcmVmcy5idG5SZWdpb24uc3R5bGUuZGlzcGxheSA9ICdub25lJw0KICAgICAgfQ0KICAgICAgdGhpcy4kcmVmcy5mb3JtQ29udGVudC5oaWRkZW5Db250ZW50KCkNCiAgICB9LA0KICAgIC8v5piv5ZCm5pi+56S65rua5Yqo5p2hDQogICAgaXNTY3JvbGwoKSB7DQogICAgICAvL+Wxj+W5leWuveW6pg0KICAgICAgbGV0IHdpbmRvd193aWR0aCA9ICQod2luZG93KS53aWR0aCgpDQogICAgICAvL+WuoeaJuemhtemdouWuveW6pg0KICAgICAgbGV0IGZyb21fdyA9ICQoJ21haW4nKVswXS5jbGllbnRXaWR0aA0KICAgICAgLy/mnInmu5rliqjmnaENCiAgICAgIGlmICh3aW5kb3dfd2lkdGggPiBmcm9tX3cpIHsNCiAgICAgICAgcmV0dXJuIHRydWUNCiAgICAgIH0NCiAgICAgIHJldHVybiBmYWxzZQ0KICAgIH0sDQogICAgLy/mjILotbcNCiAgICBoYW5nVXAoKSB7DQogICAgICBmbG93LmZvcmJpZGRlbkluc3RhbmNlKHRoaXMuaW5zdElkKS50aGVuKGRhdGEgPT4gew0KICAgICAgICBpZiAoZGF0YS5zdGF0ZSkgew0KICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoe3R5cGU6ICdzdWNjZXNzJywgbWVzc2FnZTogZGF0YS5tZXNzYWdlfSkNCiAgICAgICAgICB0aGlzLmNoZWNrSW5zdFN0YXR1cygpDQogICAgICAgIH0NCiAgICAgIH0pDQogICAgfSwNCiAgICAvL+WPlua2iOaMgui1tw0KICAgIGNhbmNlbEhhbmdVcCgpIHsNCiAgICAgIGZsb3cudW5Gb3JiaWRkZW5JbnN0YW5jZSh0aGlzLmluc3RJZCkudGhlbihkYXRhID0+IHsNCiAgICAgICAgaWYgKGRhdGEuc3RhdGUpIHsNCiAgICAgICAgICB0aGlzLiRtZXNzYWdlKHt0eXBlOiAnc3VjY2VzcycsIG1lc3NhZ2U6IGRhdGEubWVzc2FnZX0pDQogICAgICAgICAgdGhpcy5jaGVja0luc3RTdGF0dXMoKCkgPT4gew0KICAgICAgICAgICAgdGhpcy5pc0hhbmcgPSBmYWxzZQ0KICAgICAgICAgICAgdGhpcy5kaXNhYmxlZCA9IGZhbHNlDQogICAgICAgICAgfSkNCiAgICAgICAgfQ0KICAgICAgfSkNCiAgICB9LA0KICAgIC8v6Lez6L2s5Yiw5LiL5LiA5Liq5Lu75YqhDQogICAgbmV4dFRhc2soKSB7DQogICAgICBsZXQgX3RoaXMgPSB0aGlzDQogICAgICBpZiAoX3RoaXMuJHJvdXRlLm5hbWUuaW5kZXhPZigncmVwb3J0TW9kdWxlSW5zdCcpICE9IC0xKSB7DQogICAgICAgIF90aGlzLiRyb3V0ZXIucHVzaCgNCiAgICAgICAgICAnL3N0YXRlbWVudC90ZW1wbGF0ZS9wcmV2aWV3LycgKw0KICAgICAgICAgICAgX3RoaXMuJHJvdXRlLnBhcmFtcy50ZW1wbGF0ZUtleSArDQogICAgICAgICAgICAnL3RvZG8vJyArDQogICAgICAgICAgICBfdGhpcy4kcm91dGUucGFyYW1zLmRlZktleSArDQogICAgICAgICAgICAnL3RydWUnDQogICAgICAgICkNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHRoaXMuJHN0b3JlDQogICAgICAgICAgLmRpc3BhdGNoKCdzdG9yZVByb2Nlc3MvZ2V0TmV4dFRhc2tCeURlZklkJywgew0KICAgICAgICAgICAgZGVmSWQ6IHRoaXMuZGVmSWQsDQogICAgICAgICAgICBkZWZLZXk6IHRoaXMuZGVmS2V5DQogICAgICAgICAgfSkNCiAgICAgICAgICAudGhlbihyZXNwID0+IHsNCiAgICAgICAgICAgIGlmIChyZXNwLnN0YXRlKSB7DQogICAgICAgICAgICAgIC8v6Lez6L2s5Yiw5paw55qE5b6F5Yqe6aG16Z2iDQogICAgICAgICAgICAgIGlmIChyZXNwLnZhbHVlKSB7DQogICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVPcGVuVGFzayhyZXNwLnZhbHVlKQ0KICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoew0KICAgICAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLA0KICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ+ivpea1geeoi+aJgOWxnuS7u+WKoeW3suWkhOeQhuWujOaIkCcNCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gew0KICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJvdXRlLm5hbWUuaW5kZXhPZignc3lzTW9kdWxlSW5zdCcpICE9IC0xKSB7DQogICAgICAgICAgICAgICAgICAgIF90aGlzLiRyb3V0ZXIucHVzaCgNCiAgICAgICAgICAgICAgICAgICAgICAnL3YtZmxvdy92LXRvZG8vJyArIF90aGlzLiRyb3V0ZS5wYXJhbXMuZGVmS2V5DQogICAgICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIF90aGlzLiRyb3V0ZXIucHVzaCgnL3YtZmxvdy92LXRvZG8vJykNCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9LCAxMCkNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pDQogICAgICB9DQogICAgfSwNCiAgICBoYW5kbGVPcGVuVGFzayhyb3cpIHsNCiAgICAgIGlmIChyb3cuc3RhdHVzID09ICdTSEFSRScgfHwgcm93LnN0YXR1cyA9PSAnQkFDS1NIQVJFJykgew0KICAgICAgICBpZiAocm93LmlkZW50aXR5TGlzdCAmJiByb3cuaWRlbnRpdHlMaXN0Lmxlbmd0aCA9PSAxKSB7DQogICAgICAgICAgbGV0IHVybCA9ICcvdGFzay8nICsgcm93LmlkICsgJy8nICsgcm93LmlkZW50aXR5TGlzdFswXS5pZA0KICAgICAgICAgIHRoaXMub3BlbkFuZFJlbG9hZCh1cmwpDQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgbGV0IGh0bWwgPQ0KICAgICAgICAgICAgJzxzZWxlY3QgcmVmPScgKw0KICAgICAgICAgICAgTWF0aC5yYW5kb20oKSArDQogICAgICAgICAgICAnIGlkPSJhcHByb3ZhbExlYWRlclNlbGVjdCIgc3R5bGU9IndpZHRoOiAyMDBweDtoZWlnaHQ6IDMwcHg7Ym9yZGVyLXJhZGl1czogNHB4O21hcmdpbjogMjBweCA3MHB4OyIgPjxvcHRpb24gdmFsdWU9IiI+6K+36YCJ5oupPC9vcHRpb24+Jw0KICAgICAgICAgIHJvdy5pZGVudGl0eUxpc3QuZm9yRWFjaChpZGVudGl0eSA9PiB7DQogICAgICAgICAgICBodG1sICs9DQogICAgICAgICAgICAgICc8b3B0aW9uIHZhbHVlPSInICsNCiAgICAgICAgICAgICAgaWRlbnRpdHkuaWQgKw0KICAgICAgICAgICAgICAnIj4nICsNCiAgICAgICAgICAgICAgaWRlbnRpdHkubmFtZSArDQogICAgICAgICAgICAgICc8L29wdGlvbj4nDQogICAgICAgICAgfSkNCiAgICAgICAgICBodG1sICs9ICc8L3NlbGVjdD4nDQogICAgICAgICAgbGV0IHRoaXNfID0gdGhpcw0KICAgICAgICAgIHRoaXMuJGFsZXJ0KGh0bWwsICfor7fpgInmi6nkuIDkuKrpooblr7zku6PkuLrlrqHmibknLCB7DQogICAgICAgICAgICBkYW5nZXJvdXNseVVzZUhUTUxTdHJpbmc6IHRydWUsDQogICAgICAgICAgICBiZWZvcmVDbG9zZTogZnVuY3Rpb24oYWN0aW9uLCBpbnN0YW5jZSwgZG9uZSkgew0KICAgICAgICAgICAgICBpZiAoYWN0aW9uID09ICdjb25maXJtJykgew0KICAgICAgICAgICAgICAgIGxldCBzZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhcHByb3ZhbExlYWRlclNlbGVjdCcpDQogICAgICAgICAgICAgICAgaWYgKHNlLnNlbGVjdGVkSW5kZXggPT0gMCkgew0KICAgICAgICAgICAgICAgICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKCfor7fpgInmi6nku6PkuLrlrqHmibnnmoTpooblr7wnKQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICBpbnN0YW5jZS5jbG9zZSgpDQogICAgICAgICAgICAgICAgICB0aGlzXy5vcGVuQW5kUmVsb2FkKA0KICAgICAgICAgICAgICAgICAgICAnL3Rhc2svJyArIHJvdy5pZCArICcvJyArIHNlW3NlLnNlbGVjdGVkSW5kZXhdLnZhbHVlDQogICAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGluc3RhbmNlLmNsb3NlKCkNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pDQogICAgICAgIH0NCiAgICAgIH0gZWxzZSBpZiAoDQogICAgICAgIHJvdy5zdGF0dXMgPT0gJ0FHRU5UJyAmJg0KICAgICAgICByb3cub3duZXJJZCAhPSByb3cuYXNzaWduZWVJZCAmJg0KICAgICAgICByb3cub3duZXJJZCA9PSB0aGlzLiRzdG9yZS5zdGF0ZS5sb2dpbi5jdXJyZW50VXNlci51c2VySWQNCiAgICAgICkgew0KICAgICAgICAvL+WnlOaJmOS7u+WKoQ0KICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCgnL2luc3RSZWFkLycgKyByb3cucHJvY0luc3RJZCArICcvYWdlbnQnKQ0KICAgICAgfSBlbHNlIGlmIChyb3cuc3RhdHVzID09ICdGT0xMT1cnKSB7DQogICAgICAgIC8v6Lef6Liq5Lu75YqhDQogICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKCcvdGFza1JlYWQvJyArIHJvdy5pZCArICcvRk9MTE9XJykNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIGxldCB1cmwgPSAnL3Rhc2svJyArIHJvdy5pZCArICcvMCcNCiAgICAgICAgaWYgKHRoaXMuJHJvdXRlLm5hbWUuaW5kZXhPZigncmVwb3J0TW9kdWxlSW5zdCcpICE9IC0xKSB7DQogICAgICAgICAgdXJsID0NCiAgICAgICAgICAgICcvcmVwb3J0TW9kdWxlSW5zdC8nICsNCiAgICAgICAgICAgIHJvdy5pZCArDQogICAgICAgICAgICAnLzAnICsNCiAgICAgICAgICAgICcvJyArDQogICAgICAgICAgICB0aGlzLiRyb3V0ZS5wYXJhbXMuZGVmS2V5ICsNCiAgICAgICAgICAgICcvdHJ1ZS8nICsNCiAgICAgICAgICAgIHRoaXMuJHJvdXRlLnRlbXBsYXRlS2V5DQogICAgICAgIH0gZWxzZSBpZiAodGhpcy4kcm91dGUubmFtZS5pbmRleE9mKCdzeXNNb2R1bGVJbnN0JykgIT0gLTEpIHsNCiAgICAgICAgICB1cmwgPQ0KICAgICAgICAgICAgJy9zeXNNb2R1bGVJbnN0LycgKw0KICAgICAgICAgICAgcm93LmlkICsNCiAgICAgICAgICAgICcvMCcgKw0KICAgICAgICAgICAgJy8nICsNCiAgICAgICAgICAgIHRoaXMuJHJvdXRlLnBhcmFtcy5kZWZLZXkgKw0KICAgICAgICAgICAgJy90cnVlJw0KICAgICAgICB9DQogICAgICAgIHRoaXMub3BlbkFuZFJlbG9hZCh1cmwpDQogICAgICB9DQogICAgfSwNCiAgICBvcGVuQW5kUmVsb2FkKHVybCkgew0KICAgICAgdGhpcy4kcm91dGVyLnB1c2godXJsKQ0KICAgICAgc2V0VGltZW91dCgoKSA9PiB7DQogICAgICAgIHRoaXMuJHJvb3QuJGNoaWxkcmVuWzBdLnJlbG9hZCgpDQogICAgICB9LCAxMCkNCiAgICB9DQogIH0sDQogIGNyZWF0ZWQoKSB7DQogICAgLy/lhbzlrrnlj6rmmL7npLrlrqHmibnpobXpnaLml7YNCiAgICBpZiAodGhpcy4kcm91dGUubWV0YS5zaW5nbGUpIHsNCiAgICAgIHRoaXMuaXNEZCA9IHRydWUNCiAgICB9DQoNCiAgICBpZiAodGhpcy50eXBlID09ICdkb25lJykgew0KICAgICAgdGhpcy5kYWlsb2dUaXRsZSA9ICfmkqTlm54nDQogICAgICB0aGlzLmlzSGFuZCA9IHRydWUNCiAgICB9IGVsc2UgaWYgKHRoaXMudHlwZSA9PSAncmVxdWVzdCcpIHsNCiAgICAgIHRoaXMuZGFpbG9nVGl0bGUgPSAn5pKk5Zue5Yiw5Y+R6LW35Lq6Jw0KICAgICAgdGhpcy5pc0hhbmQgPSBmYWxzZQ0KICAgIH0NCiAgfQ0KfQ0K"},null]}