vc-create-dashboard 2.5.8 → 2.5.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/create-dashboard.mjs +5 -0
- package/{esm2015/lib/configurations.js → esm2020/lib/configurations.mjs} +0 -0
- package/{esm2015/lib/create-dashboard-container/categories/categories-config.js → esm2020/lib/create-dashboard-container/categories/categories-config.mjs} +0 -0
- package/esm2020/lib/create-dashboard-container/categories/categories.component.mjs +209 -0
- package/esm2020/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.mjs +537 -0
- package/{esm2015/lib/create-dashboard-container/configure-widgets/configure-widgets/widget.interface.js → esm2020/lib/create-dashboard-container/configure-widgets/configure-widgets/widget.interface.mjs} +0 -0
- package/esm2020/lib/create-dashboard-container/configure-widgets/configure-widgets.module.mjs +45 -0
- package/{esm2015/lib/create-dashboard-container/create-dashboard-config.js → esm2020/lib/create-dashboard-container/create-dashboard-config.mjs} +0 -0
- package/esm2020/lib/create-dashboard-container/create-dashboard.component.mjs +884 -0
- package/esm2020/lib/create-dashboard-container/create-dashboard.module.mjs +125 -0
- package/esm2020/lib/create-dashboard-container/directives/directives.module.mjs +24 -0
- package/esm2020/lib/create-dashboard-container/directives/scroll-in-view.directive.mjs +35 -0
- package/esm2020/lib/create-dashboard-container/form-group/form-group.component.mjs +137 -0
- package/esm2020/lib/create-dashboard-container/frequency/frequency.component.mjs +300 -0
- package/{esm2015/lib/create-dashboard-container/interfaces/widget-data-model.js → esm2020/lib/create-dashboard-container/interfaces/widget-data-model.mjs} +0 -0
- package/esm2020/lib/create-dashboard-container/pipes/filter.pipe.mjs +30 -0
- package/esm2020/lib/create-dashboard-container/pipes/search.pipe.mjs +25 -0
- package/esm2020/lib/create-dashboard-container/pipes/text-count.pipe.mjs +19 -0
- package/esm2020/lib/create-dashboard-container/responsibility-center/responsibility-center.component.mjs +146 -0
- package/{esm2015/lib/create-dashboard-container/risk-categories/risk-categories-config.js → esm2020/lib/create-dashboard-container/risk-categories/risk-categories-config.mjs} +0 -0
- package/esm2020/lib/create-dashboard-container/risk-categories/risk-categories.component.mjs +194 -0
- package/esm2020/lib/create-dashboard-container/services/auth.service.mjs +29 -0
- package/{esm2015/lib/create-dashboard-container/services/configure-widgets.service.js → esm2020/lib/create-dashboard-container/services/configure-widgets.service.mjs} +12 -15
- package/{esm2015/lib/create-dashboard-container/services/create-dashboard.service.js → esm2020/lib/create-dashboard-container/services/create-dashboard.service.mjs} +14 -17
- package/esm2020/lib/create-dashboard-container/services/pagination.service.mjs +29 -0
- package/esm2020/lib/create-dashboard-container/user-list/user-list.component.mjs +238 -0
- package/{esm2015/lib/create-dashboard-container/user-list/user-list.config.js → esm2020/lib/create-dashboard-container/user-list/user-list.config.mjs} +0 -0
- package/esm2020/lib/create-dashboard.service.mjs +14 -0
- package/esm2020/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.mjs +49 -0
- package/{esm2015/lib/ui-kit/dashboard-footer/dashboard-footer-config.js → esm2020/lib/ui-kit/dashboard-footer/dashboard-footer-config.mjs} +0 -0
- package/esm2020/lib/ui-kit/dashboard-footer/dashboard-footer.module.mjs +28 -0
- package/{esm2015/lib/ui-kit/dialog/dialog-config.js → esm2020/lib/ui-kit/dialog/dialog-config.mjs} +0 -0
- package/{esm2015/lib/ui-kit/dialog/dialog-injector.js → esm2020/lib/ui-kit/dialog/dialog-injector.mjs} +0 -0
- package/{esm2015/lib/ui-kit/dialog/dialog-ref.js → esm2020/lib/ui-kit/dialog/dialog-ref.mjs} +0 -0
- package/esm2020/lib/ui-kit/dialog/dialog.component.mjs +85 -0
- package/esm2020/lib/ui-kit/dialog/dialog.module.mjs +20 -0
- package/esm2020/lib/ui-kit/dialog/dialog.service.mjs +52 -0
- package/esm2020/lib/ui-kit/dialog/insertion.directive.mjs +16 -0
- package/esm2020/lib/ui-kit/floating-bar/floating-bar.component.mjs +51 -0
- package/esm2020/lib/ui-kit/floating-bar/floating-bar.module.mjs +28 -0
- package/esm2020/lib/ui-kit/formgroup/click-outside.directive.mjs +29 -0
- package/esm2020/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.mjs +27 -0
- package/esm2020/lib/ui-kit/formgroup/cs-radio/cs-radio.component.mjs +30 -0
- package/esm2020/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.mjs +14 -0
- package/esm2020/lib/ui-kit/formgroup/cs-select/cs-select.component.mjs +100 -0
- package/esm2020/lib/ui-kit/formgroup/cs-switch/cs-switch.component.mjs +35 -0
- package/esm2020/lib/ui-kit/formgroup/formgroup.module.mjs +55 -0
- package/esm2020/lib/ui-kit/formgroup/pipes/pascal.pipe.mjs +19 -0
- package/esm2020/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.mjs +24 -0
- package/esm2020/lib/ui-kit/no-data/no-data.component.mjs +40 -0
- package/esm2020/lib/ui-kit/no-data/no-data.module.mjs +18 -0
- package/esm2020/lib/ui-kit/pagination/pagination.component.mjs +127 -0
- package/esm2020/lib/ui-kit/pagination/pagination.module.mjs +18 -0
- package/esm2020/lib/ui-kit/popover/popover.component.mjs +133 -0
- package/esm2020/lib/ui-kit/popover/popover.directive.mjs +86 -0
- package/esm2020/lib/ui-kit/popover/popover.module.mjs +21 -0
- package/esm2020/lib/ui-kit/popover/popover.service.mjs +17 -0
- package/esm2020/lib/ui-kit/select/cs-option/cs-option.component.mjs +36 -0
- package/esm2020/lib/ui-kit/select/cs-select/cs-select.component.mjs +89 -0
- package/esm2020/lib/ui-kit/select/safe-html.pipe.mjs +20 -0
- package/esm2020/lib/ui-kit/select/select.module.mjs +21 -0
- package/esm2020/lib/ui-kit/services/cs-select.service.mjs +15 -0
- package/esm2020/lib/ui-kit/smiley-dialog/smiley-dialog.component.mjs +50 -0
- package/esm2020/lib/ui-kit/smiley-dialog/smiley-dialog.module.mjs +18 -0
- package/esm2020/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.mjs +39 -0
- package/esm2020/lib/ui-kit/snack-bar/snack-bar.module.mjs +18 -0
- package/esm2020/lib/ui-kit/snack-bar/snack-bar.service.mjs +24 -0
- package/esm2020/lib/ui-kit/tooltip/tooltip.directive.mjs +153 -0
- package/esm2020/lib/ui-kit/tooltip/tooltip.module.mjs +18 -0
- package/esm2020/lib/ui-kit/v-loader/loader/loader.component.mjs +13 -0
- package/esm2020/lib/ui-kit/v-loader/loader-inline/loader-inline.component.mjs +13 -0
- package/esm2020/lib/ui-kit/v-loader/v-loader.module.mjs +19 -0
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +0 -0
- package/fesm2015/create-dashboard.mjs +4766 -0
- package/fesm2015/create-dashboard.mjs.map +1 -0
- package/fesm2020/create-dashboard.mjs +4746 -0
- package/fesm2020/create-dashboard.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/create-dashboard-container/categories/categories.component.d.ts +3 -0
- package/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.d.ts +3 -0
- package/lib/create-dashboard-container/configure-widgets/configure-widgets.module.d.ts +12 -0
- package/lib/create-dashboard-container/create-dashboard.component.d.ts +3 -0
- package/lib/create-dashboard-container/create-dashboard.module.d.ts +31 -0
- package/lib/create-dashboard-container/directives/directives.module.d.ts +6 -0
- package/lib/create-dashboard-container/directives/scroll-in-view.directive.d.ts +3 -0
- package/lib/create-dashboard-container/form-group/form-group.component.d.ts +3 -0
- package/lib/create-dashboard-container/frequency/frequency.component.d.ts +3 -0
- package/lib/create-dashboard-container/pipes/filter.pipe.d.ts +3 -0
- package/lib/create-dashboard-container/pipes/search.pipe.d.ts +3 -0
- package/lib/create-dashboard-container/pipes/text-count.pipe.d.ts +3 -0
- package/lib/create-dashboard-container/responsibility-center/responsibility-center.component.d.ts +3 -0
- package/lib/create-dashboard-container/risk-categories/risk-categories.component.d.ts +3 -0
- package/lib/create-dashboard-container/services/auth.service.d.ts +3 -0
- package/lib/create-dashboard-container/services/configure-widgets.service.d.ts +3 -0
- package/lib/create-dashboard-container/services/create-dashboard.service.d.ts +3 -0
- package/lib/create-dashboard-container/services/pagination.service.d.ts +3 -0
- package/lib/create-dashboard-container/user-list/user-list.component.d.ts +3 -0
- package/lib/create-dashboard.service.d.ts +3 -0
- package/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.d.ts +3 -0
- package/lib/ui-kit/dashboard-footer/dashboard-footer.module.d.ts +7 -0
- package/lib/ui-kit/dialog/dialog.component.d.ts +3 -0
- package/lib/ui-kit/dialog/dialog.module.d.ts +7 -0
- package/lib/ui-kit/dialog/dialog.service.d.ts +3 -0
- package/lib/ui-kit/dialog/insertion.directive.d.ts +3 -0
- package/lib/ui-kit/floating-bar/floating-bar.component.d.ts +3 -0
- package/lib/ui-kit/floating-bar/floating-bar.module.d.ts +7 -0
- package/lib/ui-kit/formgroup/click-outside.directive.d.ts +3 -0
- package/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.d.ts +3 -0
- package/lib/ui-kit/formgroup/cs-radio/cs-radio.component.d.ts +3 -0
- package/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.d.ts +3 -0
- package/lib/ui-kit/formgroup/cs-select/cs-select.component.d.ts +3 -0
- package/lib/ui-kit/formgroup/cs-switch/cs-switch.component.d.ts +3 -0
- package/lib/ui-kit/formgroup/formgroup.module.d.ts +15 -0
- package/lib/ui-kit/formgroup/pipes/pascal.pipe.d.ts +3 -0
- package/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.d.ts +3 -0
- package/lib/ui-kit/no-data/no-data.component.d.ts +3 -0
- package/lib/ui-kit/no-data/no-data.module.d.ts +6 -0
- package/lib/ui-kit/pagination/pagination.component.d.ts +3 -0
- package/lib/ui-kit/pagination/pagination.module.d.ts +6 -0
- package/lib/ui-kit/popover/popover.component.d.ts +3 -0
- package/lib/ui-kit/popover/popover.directive.d.ts +3 -0
- package/lib/ui-kit/popover/popover.module.d.ts +7 -0
- package/lib/ui-kit/popover/popover.service.d.ts +3 -0
- package/lib/ui-kit/select/cs-option/cs-option.component.d.ts +3 -0
- package/lib/ui-kit/select/cs-select/cs-select.component.d.ts +3 -0
- package/lib/ui-kit/select/safe-html.pipe.d.ts +3 -0
- package/lib/ui-kit/select/select.module.d.ts +9 -0
- package/lib/ui-kit/services/cs-select.service.d.ts +3 -0
- package/lib/ui-kit/smiley-dialog/smiley-dialog.component.d.ts +3 -0
- package/lib/ui-kit/smiley-dialog/smiley-dialog.module.d.ts +6 -0
- package/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.d.ts +3 -0
- package/lib/ui-kit/snack-bar/snack-bar.module.d.ts +6 -0
- package/lib/ui-kit/snack-bar/snack-bar.service.d.ts +3 -0
- package/lib/ui-kit/tooltip/tooltip.directive.d.ts +3 -0
- package/lib/ui-kit/tooltip/tooltip.module.d.ts +6 -0
- package/lib/ui-kit/v-loader/loader/loader.component.d.ts +3 -0
- package/lib/ui-kit/v-loader/loader-inline/loader-inline.component.d.ts +3 -0
- package/lib/ui-kit/v-loader/v-loader.module.d.ts +7 -0
- package/package.json +21 -9
- package/bundles/create-dashboard.umd.js +0 -5174
- package/bundles/create-dashboard.umd.js.map +0 -1
- package/create-dashboard.d.ts +0 -64
- package/create-dashboard.metadata.json +0 -1
- package/esm2015/create-dashboard.js +0 -65
- package/esm2015/create-dashboard.ngsummary.json +0 -1
- package/esm2015/lib/configurations.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/categories/categories-config.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/categories/categories.component.js +0 -199
- package/esm2015/lib/create-dashboard-container/categories/categories.component.ngfactory.js +0 -94
- package/esm2015/lib/create-dashboard-container/categories/categories.component.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.js +0 -531
- package/esm2015/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.ngfactory.js +0 -86
- package/esm2015/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/configure-widgets/configure-widgets/widget.interface.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/configure-widgets/configure-widgets.module.js +0 -30
- package/esm2015/lib/create-dashboard-container/configure-widgets/configure-widgets.module.ngfactory.js +0 -20
- package/esm2015/lib/create-dashboard-container/configure-widgets/configure-widgets.module.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/create-dashboard-config.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/create-dashboard.component.js +0 -872
- package/esm2015/lib/create-dashboard-container/create-dashboard.component.ngfactory.js +0 -357
- package/esm2015/lib/create-dashboard-container/create-dashboard.component.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/create-dashboard.module.js +0 -78
- package/esm2015/lib/create-dashboard-container/create-dashboard.module.ngfactory.js +0 -35
- package/esm2015/lib/create-dashboard-container/create-dashboard.module.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/directives/directives.module.js +0 -19
- package/esm2015/lib/create-dashboard-container/directives/directives.module.ngfactory.js +0 -12
- package/esm2015/lib/create-dashboard-container/directives/directives.module.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/directives/scroll-in-view.directive.js +0 -36
- package/esm2015/lib/create-dashboard-container/directives/scroll-in-view.directive.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/form-group/form-group.component.js +0 -126
- package/esm2015/lib/create-dashboard-container/form-group/form-group.component.ngfactory.js +0 -129
- package/esm2015/lib/create-dashboard-container/form-group/form-group.component.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/frequency/frequency.component.js +0 -295
- package/esm2015/lib/create-dashboard-container/frequency/frequency.component.ngfactory.js +0 -105
- package/esm2015/lib/create-dashboard-container/frequency/frequency.component.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/interfaces/widget-data-model.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/pipes/filter.pipe.js +0 -26
- package/esm2015/lib/create-dashboard-container/pipes/filter.pipe.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/pipes/search.pipe.js +0 -21
- package/esm2015/lib/create-dashboard-container/pipes/search.pipe.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/pipes/text-count.pipe.js +0 -16
- package/esm2015/lib/create-dashboard-container/pipes/text-count.pipe.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/responsibility-center/responsibility-center.component.js +0 -137
- package/esm2015/lib/create-dashboard-container/responsibility-center/responsibility-center.component.ngfactory.js +0 -79
- package/esm2015/lib/create-dashboard-container/responsibility-center/responsibility-center.component.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/risk-categories/risk-categories-config.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/risk-categories/risk-categories.component.js +0 -183
- package/esm2015/lib/create-dashboard-container/risk-categories/risk-categories.component.ngfactory.js +0 -93
- package/esm2015/lib/create-dashboard-container/risk-categories/risk-categories.component.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/services/auth.service.js +0 -31
- package/esm2015/lib/create-dashboard-container/services/auth.service.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/services/configure-widgets.service.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/services/create-dashboard.service.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/services/pagination.service.js +0 -28
- package/esm2015/lib/create-dashboard-container/services/pagination.service.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/user-list/user-list.component.js +0 -229
- package/esm2015/lib/create-dashboard-container/user-list/user-list.component.ngfactory.js +0 -96
- package/esm2015/lib/create-dashboard-container/user-list/user-list.component.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard-container/user-list/user-list.config.ngsummary.json +0 -1
- package/esm2015/lib/create-dashboard.service.js +0 -13
- package/esm2015/lib/create-dashboard.service.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.js +0 -45
- package/esm2015/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.ngfactory.js +0 -49
- package/esm2015/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/dashboard-footer/dashboard-footer-config.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/dashboard-footer/dashboard-footer.module.js +0 -21
- package/esm2015/lib/ui-kit/dashboard-footer/dashboard-footer.module.ngfactory.js +0 -14
- package/esm2015/lib/ui-kit/dashboard-footer/dashboard-footer.module.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/dialog/dialog-config.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/dialog/dialog-injector.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/dialog/dialog-ref.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/dialog/dialog.component.js +0 -89
- package/esm2015/lib/ui-kit/dialog/dialog.component.ngfactory.js +0 -29
- package/esm2015/lib/ui-kit/dialog/dialog.component.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/dialog/dialog.module.js +0 -16
- package/esm2015/lib/ui-kit/dialog/dialog.module.ngfactory.js +0 -14
- package/esm2015/lib/ui-kit/dialog/dialog.module.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/dialog/dialog.service.js +0 -56
- package/esm2015/lib/ui-kit/dialog/dialog.service.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/dialog/insertion.directive.js +0 -15
- package/esm2015/lib/ui-kit/dialog/insertion.directive.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/floating-bar/floating-bar.component.js +0 -46
- package/esm2015/lib/ui-kit/floating-bar/floating-bar.component.ngfactory.js +0 -50
- package/esm2015/lib/ui-kit/floating-bar/floating-bar.component.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/floating-bar/floating-bar.module.js +0 -21
- package/esm2015/lib/ui-kit/floating-bar/floating-bar.module.ngfactory.js +0 -14
- package/esm2015/lib/ui-kit/floating-bar/floating-bar.module.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/formgroup/click-outside.directive.js +0 -26
- package/esm2015/lib/ui-kit/formgroup/click-outside.directive.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.js +0 -25
- package/esm2015/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.ngfactory.js +0 -30
- package/esm2015/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/formgroup/cs-radio/cs-radio.component.js +0 -27
- package/esm2015/lib/ui-kit/formgroup/cs-radio/cs-radio.component.ngfactory.js +0 -20
- package/esm2015/lib/ui-kit/formgroup/cs-radio/cs-radio.component.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.js +0 -14
- package/esm2015/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.ngfactory.js +0 -19
- package/esm2015/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/formgroup/cs-select/cs-select.component.js +0 -80
- package/esm2015/lib/ui-kit/formgroup/cs-select/cs-select.component.ngfactory.js +0 -89
- package/esm2015/lib/ui-kit/formgroup/cs-select/cs-select.component.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/formgroup/cs-switch/cs-switch.component.js +0 -29
- package/esm2015/lib/ui-kit/formgroup/cs-switch/cs-switch.component.ngfactory.js +0 -62
- package/esm2015/lib/ui-kit/formgroup/cs-switch/cs-switch.component.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/formgroup/formgroup.module.js +0 -38
- package/esm2015/lib/ui-kit/formgroup/formgroup.module.ngfactory.js +0 -14
- package/esm2015/lib/ui-kit/formgroup/formgroup.module.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/formgroup/pipes/pascal.pipe.js +0 -15
- package/esm2015/lib/ui-kit/formgroup/pipes/pascal.pipe.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.js +0 -20
- package/esm2015/lib/ui-kit/formgroup/pipes/searchMultiSelect.pipe.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/no-data/no-data.component.js +0 -32
- package/esm2015/lib/ui-kit/no-data/no-data.component.ngfactory.js +0 -28
- package/esm2015/lib/ui-kit/no-data/no-data.component.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/no-data/no-data.module.js +0 -13
- package/esm2015/lib/ui-kit/no-data/no-data.module.ngfactory.js +0 -12
- package/esm2015/lib/ui-kit/no-data/no-data.module.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/pagination/pagination.component.js +0 -127
- package/esm2015/lib/ui-kit/pagination/pagination.component.ngfactory.js +0 -30
- package/esm2015/lib/ui-kit/pagination/pagination.component.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/pagination/pagination.module.js +0 -13
- package/esm2015/lib/ui-kit/pagination/pagination.module.ngfactory.js +0 -12
- package/esm2015/lib/ui-kit/pagination/pagination.module.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/popover/popover.component.js +0 -131
- package/esm2015/lib/ui-kit/popover/popover.component.ngfactory.js +0 -29
- package/esm2015/lib/ui-kit/popover/popover.component.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/popover/popover.directive.js +0 -84
- package/esm2015/lib/ui-kit/popover/popover.directive.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/popover/popover.module.js +0 -16
- package/esm2015/lib/ui-kit/popover/popover.module.ngfactory.js +0 -13
- package/esm2015/lib/ui-kit/popover/popover.module.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/popover/popover.service.js +0 -16
- package/esm2015/lib/ui-kit/popover/popover.service.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/select/cs-option/cs-option.component.js +0 -39
- package/esm2015/lib/ui-kit/select/cs-option/cs-option.component.ngfactory.js +0 -22
- package/esm2015/lib/ui-kit/select/cs-option/cs-option.component.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/select/cs-select/cs-select.component.js +0 -80
- package/esm2015/lib/ui-kit/select/cs-select/cs-select.component.ngfactory.js +0 -43
- package/esm2015/lib/ui-kit/select/cs-select/cs-select.component.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/select/safe-html.pipe.js +0 -19
- package/esm2015/lib/ui-kit/select/safe-html.pipe.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/select/select.module.js +0 -16
- package/esm2015/lib/ui-kit/select/select.module.ngfactory.js +0 -13
- package/esm2015/lib/ui-kit/select/select.module.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/services/cs-select.service.js +0 -14
- package/esm2015/lib/ui-kit/services/cs-select.service.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/smiley-dialog/smiley-dialog.component.js +0 -45
- package/esm2015/lib/ui-kit/smiley-dialog/smiley-dialog.component.ngfactory.js +0 -28
- package/esm2015/lib/ui-kit/smiley-dialog/smiley-dialog.component.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/smiley-dialog/smiley-dialog.module.js +0 -13
- package/esm2015/lib/ui-kit/smiley-dialog/smiley-dialog.module.ngfactory.js +0 -12
- package/esm2015/lib/ui-kit/smiley-dialog/smiley-dialog.module.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.js +0 -41
- package/esm2015/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.ngfactory.js +0 -23
- package/esm2015/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/snack-bar/snack-bar.module.js +0 -13
- package/esm2015/lib/ui-kit/snack-bar/snack-bar.module.ngfactory.js +0 -12
- package/esm2015/lib/ui-kit/snack-bar/snack-bar.module.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/snack-bar/snack-bar.service.js +0 -23
- package/esm2015/lib/ui-kit/snack-bar/snack-bar.service.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/tooltip/tooltip.directive.js +0 -138
- package/esm2015/lib/ui-kit/tooltip/tooltip.directive.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/tooltip/tooltip.module.js +0 -13
- package/esm2015/lib/ui-kit/tooltip/tooltip.module.ngfactory.js +0 -12
- package/esm2015/lib/ui-kit/tooltip/tooltip.module.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/v-loader/loader/loader.component.js +0 -14
- package/esm2015/lib/ui-kit/v-loader/loader/loader.component.ngfactory.js +0 -17
- package/esm2015/lib/ui-kit/v-loader/loader/loader.component.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/v-loader/loader-inline/loader-inline.component.js +0 -14
- package/esm2015/lib/ui-kit/v-loader/loader-inline/loader-inline.component.ngfactory.js +0 -17
- package/esm2015/lib/ui-kit/v-loader/loader-inline/loader-inline.component.ngsummary.json +0 -1
- package/esm2015/lib/ui-kit/v-loader/v-loader.module.js +0 -14
- package/esm2015/lib/ui-kit/v-loader/v-loader.module.ngfactory.js +0 -12
- package/esm2015/lib/ui-kit/v-loader/v-loader.module.ngsummary.json +0 -1
- package/esm2015/public-api.ngsummary.json +0 -1
- package/fesm2015/create-dashboard.js +0 -4573
- package/fesm2015/create-dashboard.js.map +0 -1
- package/lib/create-dashboard-container/categories/categories.component.ngfactory.d.ts +0 -1
- package/lib/create-dashboard-container/configure-widgets/configure-widgets/configure-widgets.component.ngfactory.d.ts +0 -1
- package/lib/create-dashboard-container/configure-widgets/configure-widgets.module.ngfactory.d.ts +0 -3
- package/lib/create-dashboard-container/create-dashboard.component.ngfactory.d.ts +0 -1
- package/lib/create-dashboard-container/create-dashboard.module.ngfactory.d.ts +0 -3
- package/lib/create-dashboard-container/directives/directives.module.ngfactory.d.ts +0 -3
- package/lib/create-dashboard-container/form-group/form-group.component.ngfactory.d.ts +0 -1
- package/lib/create-dashboard-container/frequency/frequency.component.ngfactory.d.ts +0 -1
- package/lib/create-dashboard-container/responsibility-center/responsibility-center.component.ngfactory.d.ts +0 -1
- package/lib/create-dashboard-container/risk-categories/risk-categories.component.ngfactory.d.ts +0 -1
- package/lib/create-dashboard-container/user-list/user-list.component.ngfactory.d.ts +0 -1
- package/lib/ui-kit/dashboard-footer/dashboard-footer/dashboard-footer.component.ngfactory.d.ts +0 -1
- package/lib/ui-kit/dashboard-footer/dashboard-footer.module.ngfactory.d.ts +0 -3
- package/lib/ui-kit/dialog/dialog.component.ngfactory.d.ts +0 -1
- package/lib/ui-kit/dialog/dialog.module.ngfactory.d.ts +0 -3
- package/lib/ui-kit/floating-bar/floating-bar.component.ngfactory.d.ts +0 -1
- package/lib/ui-kit/floating-bar/floating-bar.module.ngfactory.d.ts +0 -3
- package/lib/ui-kit/formgroup/cs-checkbox/cs-checkbox.component.ngfactory.d.ts +0 -1
- package/lib/ui-kit/formgroup/cs-radio/cs-radio.component.ngfactory.d.ts +0 -1
- package/lib/ui-kit/formgroup/cs-radio-group/cs-radio-group.component.ngfactory.d.ts +0 -1
- package/lib/ui-kit/formgroup/cs-select/cs-select.component.ngfactory.d.ts +0 -1
- package/lib/ui-kit/formgroup/cs-switch/cs-switch.component.ngfactory.d.ts +0 -1
- package/lib/ui-kit/formgroup/formgroup.module.ngfactory.d.ts +0 -3
- package/lib/ui-kit/no-data/no-data.component.ngfactory.d.ts +0 -1
- package/lib/ui-kit/no-data/no-data.module.ngfactory.d.ts +0 -3
- package/lib/ui-kit/pagination/pagination.component.ngfactory.d.ts +0 -1
- package/lib/ui-kit/pagination/pagination.module.ngfactory.d.ts +0 -3
- package/lib/ui-kit/popover/popover.component.ngfactory.d.ts +0 -1
- package/lib/ui-kit/popover/popover.module.ngfactory.d.ts +0 -3
- package/lib/ui-kit/select/cs-option/cs-option.component.ngfactory.d.ts +0 -1
- package/lib/ui-kit/select/cs-select/cs-select.component.ngfactory.d.ts +0 -1
- package/lib/ui-kit/select/select.module.ngfactory.d.ts +0 -3
- package/lib/ui-kit/smiley-dialog/smiley-dialog.component.ngfactory.d.ts +0 -1
- package/lib/ui-kit/smiley-dialog/smiley-dialog.module.ngfactory.d.ts +0 -3
- package/lib/ui-kit/snack-bar/snack-bar/snack-bar.component.ngfactory.d.ts +0 -1
- package/lib/ui-kit/snack-bar/snack-bar.module.ngfactory.d.ts +0 -3
- package/lib/ui-kit/tooltip/tooltip.module.ngfactory.d.ts +0 -3
- package/lib/ui-kit/v-loader/loader/loader.component.ngfactory.d.ts +0 -1
- package/lib/ui-kit/v-loader/loader-inline/loader-inline.component.ngfactory.d.ts +0 -1
- package/lib/ui-kit/v-loader/v-loader.module.ngfactory.d.ts +0 -3
|
@@ -1,872 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectorRef, Component, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import { CreateDashboardService } from './services/create-dashboard.service';
|
|
3
|
-
import { PaginationService } from './services/pagination.service';
|
|
4
|
-
import { SnackBarService } from '../ui-kit/snack-bar/snack-bar.service';
|
|
5
|
-
import { ConfigureWidgetsService } from './services/configure-widgets.service';
|
|
6
|
-
import * as dayjs from 'dayjs';
|
|
7
|
-
import * as customParseFormat from 'dayjs/plugin/customParseFormat';
|
|
8
|
-
import { PopoverService } from '../ui-kit/popover/popover.service';
|
|
9
|
-
import { TextCountPipe } from './pipes/text-count.pipe';
|
|
10
|
-
dayjs.extend(customParseFormat);
|
|
11
|
-
export class CreateDashboardComponent {
|
|
12
|
-
constructor(createDashboardService, paginationService, cdr, snackBar, popoverService, configureWidgetsService, textCount) {
|
|
13
|
-
this.createDashboardService = createDashboardService;
|
|
14
|
-
this.paginationService = paginationService;
|
|
15
|
-
this.cdr = cdr;
|
|
16
|
-
this.snackBar = snackBar;
|
|
17
|
-
this.popoverService = popoverService;
|
|
18
|
-
this.configureWidgetsService = configureWidgetsService;
|
|
19
|
-
this.textCount = textCount;
|
|
20
|
-
this.activeSelector = '';
|
|
21
|
-
this.disabled = false;
|
|
22
|
-
this.mode = 'CREATE';
|
|
23
|
-
this.dashboardId = '';
|
|
24
|
-
this.close = new EventEmitter();
|
|
25
|
-
this.createdBy = 0;
|
|
26
|
-
this.animation = true;
|
|
27
|
-
this.configureWidget = false;
|
|
28
|
-
this.totalPages = 1;
|
|
29
|
-
this.totalList = 1;
|
|
30
|
-
this.usersList = [];
|
|
31
|
-
this.vLoader = true;
|
|
32
|
-
this.userListLoaded = false;
|
|
33
|
-
this.rcListLoaded = false;
|
|
34
|
-
this.complianceCategoriesListLoaded = false;
|
|
35
|
-
this.riskCategoryListLoaded = false;
|
|
36
|
-
this.hideToDate = false;
|
|
37
|
-
this.listDetails = {
|
|
38
|
-
selectedUsersList: [],
|
|
39
|
-
nonRemovableUsersList: [],
|
|
40
|
-
displayElementKey: 'member_name',
|
|
41
|
-
elementIdKey: 'member_id',
|
|
42
|
-
tooltipKey: 'member_email',
|
|
43
|
-
};
|
|
44
|
-
this.dashboardDescription = {
|
|
45
|
-
placeholder: 'Description (Max limit: 250 characters)',
|
|
46
|
-
mode: 'prime',
|
|
47
|
-
id: 'description'
|
|
48
|
-
};
|
|
49
|
-
this.responsibilityCategoriesTree = {
|
|
50
|
-
regulations: {
|
|
51
|
-
list: [],
|
|
52
|
-
selectedList: []
|
|
53
|
-
},
|
|
54
|
-
standards: {
|
|
55
|
-
list: [],
|
|
56
|
-
selectedList: []
|
|
57
|
-
},
|
|
58
|
-
internalControls: {
|
|
59
|
-
list: [],
|
|
60
|
-
selectedList: []
|
|
61
|
-
},
|
|
62
|
-
others: {
|
|
63
|
-
list: [],
|
|
64
|
-
selectedList: []
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
this.allComplianceCategories = [];
|
|
68
|
-
this.allRiskCategories = [];
|
|
69
|
-
this.showRiskCategory = false;
|
|
70
|
-
this.showCriteria = true;
|
|
71
|
-
this.dashboardForm = {
|
|
72
|
-
dashboardName: '',
|
|
73
|
-
dashboardDescriptionText: '',
|
|
74
|
-
selectedViewers: [],
|
|
75
|
-
selectedFromDate: undefined,
|
|
76
|
-
selectedToDate: undefined,
|
|
77
|
-
selectedResponsibilityCenters: [],
|
|
78
|
-
selectedResponsibilityCategories: [],
|
|
79
|
-
selectedRiskCategories: [],
|
|
80
|
-
displayCriteria: 'or',
|
|
81
|
-
configureWidget: [],
|
|
82
|
-
frequencyDetails: '',
|
|
83
|
-
selectedFrequencyType: '',
|
|
84
|
-
selectedFrequencies: [0],
|
|
85
|
-
frequencyMessage: '',
|
|
86
|
-
frequencyDate: 1
|
|
87
|
-
};
|
|
88
|
-
this.openConfigureWidgets = false;
|
|
89
|
-
this.selectedWidgets = [];
|
|
90
|
-
this.displayedWidgets = [];
|
|
91
|
-
this.responsibilityCentersList = [];
|
|
92
|
-
this.datePickerOverlay = false;
|
|
93
|
-
this.dayNames = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
|
|
94
|
-
this.monthNames = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
|
|
95
|
-
this.quarters = ['January, April, July, October', 'February, May, August, November', 'March, June, September, December'];
|
|
96
|
-
this.categoryListLoaded = false;
|
|
97
|
-
this.showRiskWidgets = false;
|
|
98
|
-
this.showComplianceWidgets = false;
|
|
99
|
-
this.isManageRisk = false;
|
|
100
|
-
this.riskCategoryList = {
|
|
101
|
-
strategic: {
|
|
102
|
-
list: [],
|
|
103
|
-
selectedList: []
|
|
104
|
-
},
|
|
105
|
-
operational: {
|
|
106
|
-
list: [],
|
|
107
|
-
selectedList: []
|
|
108
|
-
},
|
|
109
|
-
compliance: {
|
|
110
|
-
list: [],
|
|
111
|
-
selectedList: []
|
|
112
|
-
},
|
|
113
|
-
others: {
|
|
114
|
-
list: [],
|
|
115
|
-
selectedList: []
|
|
116
|
-
},
|
|
117
|
-
};
|
|
118
|
-
this.fromDatePickerConfig = {
|
|
119
|
-
min: this.getCurrentDate()
|
|
120
|
-
};
|
|
121
|
-
this.toDatePickerConfig = {};
|
|
122
|
-
this.smileyMessage = '';
|
|
123
|
-
this.submitted = false;
|
|
124
|
-
}
|
|
125
|
-
ngOnChanges() {
|
|
126
|
-
if (this.createdBy) {
|
|
127
|
-
this.listDetails.nonRemovableUsersList.push(this.createdBy);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
onKeydownHandler(event) {
|
|
131
|
-
this.close.emit({ mode: 'discard' });
|
|
132
|
-
this.isSmiley = false;
|
|
133
|
-
}
|
|
134
|
-
ngOnInit() {
|
|
135
|
-
this.animation = true;
|
|
136
|
-
setTimeout(() => {
|
|
137
|
-
this.animation = false;
|
|
138
|
-
}, 300);
|
|
139
|
-
this.getOrganizationUsersCount('');
|
|
140
|
-
this.getCategoryList();
|
|
141
|
-
this.getRCList();
|
|
142
|
-
this.getComplianceCategoryList();
|
|
143
|
-
this.setFrequency("2~1~0~0", 'import');
|
|
144
|
-
this.checkWhetherAllListsLoaded();
|
|
145
|
-
this.getUsersList('');
|
|
146
|
-
this.createDashboardService.getUserInformation().subscribe((res) => {
|
|
147
|
-
this.setPermission(res === null || res === void 0 ? void 0 : res.roleActions);
|
|
148
|
-
const quickLink = res.quick_link;
|
|
149
|
-
if (quickLink.risk) {
|
|
150
|
-
this.showRiskCategory = true;
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
this.showRiskCategory = false;
|
|
154
|
-
}
|
|
155
|
-
}, error => { console.log(error); });
|
|
156
|
-
}
|
|
157
|
-
/**
|
|
158
|
-
* Displays the listing pages the left side of policy form to set and edit the dropdown fields values
|
|
159
|
-
* @param type holds name of particular list is to be displayed
|
|
160
|
-
* @param event contains boolean value to display the list or not
|
|
161
|
-
*/
|
|
162
|
-
activateSelector(type, event) {
|
|
163
|
-
if (type == 'frequency' || this.activeSelector == 'frequency') {
|
|
164
|
-
this.showCriteria = false;
|
|
165
|
-
setTimeout(() => {
|
|
166
|
-
this.showCriteria = true;
|
|
167
|
-
}, 1);
|
|
168
|
-
}
|
|
169
|
-
this.activeSelector = event ? type : '';
|
|
170
|
-
}
|
|
171
|
-
openFromDatePicker() {
|
|
172
|
-
this.fromDatePicker.api.open();
|
|
173
|
-
this.datePickerOverlay = true;
|
|
174
|
-
}
|
|
175
|
-
openToDatePicker() {
|
|
176
|
-
this.toDatePicker.api.open();
|
|
177
|
-
this.datePickerOverlay = true;
|
|
178
|
-
}
|
|
179
|
-
closeFromDatePicker() {
|
|
180
|
-
if (!this.dashboardForm.selectedFromDate) {
|
|
181
|
-
this.dashboardForm.selectedToDate = undefined;
|
|
182
|
-
this.hideToDate = true;
|
|
183
|
-
setTimeout(() => {
|
|
184
|
-
this.hideToDate = false;
|
|
185
|
-
}, 20);
|
|
186
|
-
this.fromDatePicker.api.close();
|
|
187
|
-
this.datePickerOverlay = false;
|
|
188
|
-
return;
|
|
189
|
-
}
|
|
190
|
-
let minToDate = this.setToDate(this.dashboardForm.selectedFromDate);
|
|
191
|
-
this.toDatePickerConfig = { min: minToDate };
|
|
192
|
-
const fromDate = new Date(minToDate.split('-').reverse().join('-'));
|
|
193
|
-
const toDate = new Date(this.dashboardForm.selectedToDate);
|
|
194
|
-
const inValidDate = (fromDate >= toDate) ? true : false;
|
|
195
|
-
if (inValidDate) {
|
|
196
|
-
this.dashboardForm.selectedToDate = undefined;
|
|
197
|
-
this.hideToDate = true;
|
|
198
|
-
setTimeout(() => {
|
|
199
|
-
this.hideToDate = false;
|
|
200
|
-
}, 20);
|
|
201
|
-
}
|
|
202
|
-
this.fromDatePicker.api.close();
|
|
203
|
-
this.datePickerOverlay = false;
|
|
204
|
-
}
|
|
205
|
-
closeToDatePicker() {
|
|
206
|
-
this.toDatePicker.api.close();
|
|
207
|
-
this.datePickerOverlay = false;
|
|
208
|
-
}
|
|
209
|
-
animateImage() {
|
|
210
|
-
const circleImage = document.getElementsByClassName('image');
|
|
211
|
-
}
|
|
212
|
-
saveFrequency(eventValues) {
|
|
213
|
-
this.dashboardForm.selectedFrequencyType = eventValues.frequencyType;
|
|
214
|
-
this.dashboardForm.selectedFrequencies = eventValues.frequencies;
|
|
215
|
-
this.dashboardForm.frequencyMessage = eventValues.frequencyString;
|
|
216
|
-
this.dashboardForm.frequencyDate = eventValues.selectedDate;
|
|
217
|
-
this.activateSelector('', false);
|
|
218
|
-
}
|
|
219
|
-
getCurrentDate() {
|
|
220
|
-
let today = new Date();
|
|
221
|
-
return today.getDate() + '-' + (today.getMonth() + 1) + '-' + today.getFullYear();
|
|
222
|
-
}
|
|
223
|
-
setToDate(data) {
|
|
224
|
-
let today = new Date(data);
|
|
225
|
-
return today.getDate() + 1 + '-' + (today.getMonth() + 1) + '-' + today.getFullYear();
|
|
226
|
-
}
|
|
227
|
-
getFromDate(data) {
|
|
228
|
-
let today = new Date(data);
|
|
229
|
-
return today.getDate() + '-' + (today.getMonth() + 1) + '-' + today.getFullYear();
|
|
230
|
-
}
|
|
231
|
-
configureDashboard() {
|
|
232
|
-
let fieldsStatus = this.validateDashboard();
|
|
233
|
-
if (fieldsStatus) {
|
|
234
|
-
if (this.mode == 'CREATE') {
|
|
235
|
-
this.vLoader = true;
|
|
236
|
-
const payload = {
|
|
237
|
-
dashboard_name: this.dashboardForm.dashboardName,
|
|
238
|
-
dashboard_id: ''
|
|
239
|
-
};
|
|
240
|
-
this.createDashboardService.checkDuplicateDashboardName(payload).subscribe(res => {
|
|
241
|
-
if (!res) {
|
|
242
|
-
this.vLoader = false;
|
|
243
|
-
this.showRiskWidgets = (this.isManageRisk && this.showRiskCategory && (this.dashboardForm.selectedRiskCategories.length > 0 || this.dashboardForm.selectedResponsibilityCenters.length > 0)) ? true : false;
|
|
244
|
-
this.showComplianceWidgets = (this.dashboardForm.selectedResponsibilityCategories.length > 0 || this.dashboardForm.selectedResponsibilityCenters.length > 0) ? true : false;
|
|
245
|
-
this.openConfigureWidgets = true;
|
|
246
|
-
}
|
|
247
|
-
else {
|
|
248
|
-
this.vLoader = false;
|
|
249
|
-
this.snackBar.show('A dashboard with this name already exists. Specify a different name for the dashboard.');
|
|
250
|
-
return;
|
|
251
|
-
}
|
|
252
|
-
}, error => {
|
|
253
|
-
console.error(error);
|
|
254
|
-
this.vLoader = false;
|
|
255
|
-
});
|
|
256
|
-
}
|
|
257
|
-
else if (this.mode == 'EDIT') {
|
|
258
|
-
this.vLoader = true;
|
|
259
|
-
const payload = {
|
|
260
|
-
dashboard_name: this.dashboardForm.dashboardName,
|
|
261
|
-
dashboard_id: this.dashboardId
|
|
262
|
-
};
|
|
263
|
-
this.createDashboardService.checkDuplicateDashboardName(payload).subscribe(res => {
|
|
264
|
-
if (!res) {
|
|
265
|
-
this.vLoader = false;
|
|
266
|
-
this.showRiskWidgets = (this.isManageRisk && this.showRiskCategory && (this.dashboardForm.selectedRiskCategories.length > 0 || this.dashboardForm.selectedResponsibilityCenters.length > 0)) ? true : false;
|
|
267
|
-
this.showComplianceWidgets = (this.dashboardForm.selectedResponsibilityCategories.length > 0 || this.dashboardForm.selectedResponsibilityCenters.length > 0) ? true : false;
|
|
268
|
-
this.openConfigureWidgets = true;
|
|
269
|
-
}
|
|
270
|
-
else {
|
|
271
|
-
this.vLoader = false;
|
|
272
|
-
this.snackBar.show('A dashboard with this name already exists. Specify a different name for the dashboard.');
|
|
273
|
-
return;
|
|
274
|
-
}
|
|
275
|
-
}, error => {
|
|
276
|
-
this.vLoader = false;
|
|
277
|
-
console.error(error);
|
|
278
|
-
});
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
/**
|
|
283
|
-
* Fetches organization users count api to get total number of pages
|
|
284
|
-
* @param Url contains prams
|
|
285
|
-
*/
|
|
286
|
-
getOrganizationUsersCount(Url) {
|
|
287
|
-
this.createDashboardService.getOrganizationUsersCount(Url).subscribe(res => {
|
|
288
|
-
this.totalList = res.total_members;
|
|
289
|
-
if (res.total_members && res.limit_per_page > 1) {
|
|
290
|
-
this.totalPages = res.create_page;
|
|
291
|
-
}
|
|
292
|
-
else {
|
|
293
|
-
this.totalPages = 1;
|
|
294
|
-
}
|
|
295
|
-
});
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* Get users list by making api call and pre selects all admins by adding to viewers
|
|
299
|
-
* @param url contains query params for organization users api
|
|
300
|
-
*/
|
|
301
|
-
getUsersList(url) {
|
|
302
|
-
this.createDashboardService.getAllUsers().subscribe((res) => {
|
|
303
|
-
this.usersList = res;
|
|
304
|
-
this.userListLoaded = true;
|
|
305
|
-
if (this.mode === 'EDIT') {
|
|
306
|
-
this.vLoader = true;
|
|
307
|
-
}
|
|
308
|
-
else {
|
|
309
|
-
this.dashboardForm.selectedViewers = this.setList(this.usersList, [this.createdBy], 'member_id');
|
|
310
|
-
this.listDetails.selectedUsersList = this.dashboardForm.selectedViewers;
|
|
311
|
-
this.vLoader = false;
|
|
312
|
-
}
|
|
313
|
-
});
|
|
314
|
-
}
|
|
315
|
-
getComplianceCategoryList() {
|
|
316
|
-
this.createDashboardService.getComplianceCategoriesListFromGlobal().subscribe((res) => {
|
|
317
|
-
const data = res;
|
|
318
|
-
this.allComplianceCategories = Object.assign(res);
|
|
319
|
-
// cloneDeep(res);
|
|
320
|
-
data.forEach((element) => {
|
|
321
|
-
if (element && element.compliance_type == 0) {
|
|
322
|
-
this.responsibilityCategoriesTree.others.list.push(element);
|
|
323
|
-
}
|
|
324
|
-
if (element && element.compliance_type == 1) {
|
|
325
|
-
this.responsibilityCategoriesTree.regulations.list.push(element);
|
|
326
|
-
}
|
|
327
|
-
if (element && element.compliance_type == 2) {
|
|
328
|
-
this.responsibilityCategoriesTree.standards.list.push(element);
|
|
329
|
-
}
|
|
330
|
-
if (element && element.compliance_type == 3) {
|
|
331
|
-
this.responsibilityCategoriesTree.internalControls.list.push(element);
|
|
332
|
-
}
|
|
333
|
-
});
|
|
334
|
-
this.complianceCategoriesListLoaded = true;
|
|
335
|
-
}, (err) => {
|
|
336
|
-
console.error(err);
|
|
337
|
-
this.complianceCategoriesListLoaded = true;
|
|
338
|
-
});
|
|
339
|
-
}
|
|
340
|
-
saveSelectedCategory(event) {
|
|
341
|
-
console.log("event==>>>", event);
|
|
342
|
-
}
|
|
343
|
-
getCategoryList() {
|
|
344
|
-
this.createDashboardService.getCategoryList().subscribe((res) => {
|
|
345
|
-
this.riskCategoryList.strategic.list = res.strategic_arr;
|
|
346
|
-
this.riskCategoryList.operational.list = res.operational_arr;
|
|
347
|
-
this.riskCategoryList.compliance.list = res.compliance_arr;
|
|
348
|
-
this.riskCategoryList.others.list = res.others_arr;
|
|
349
|
-
this.riskCategoryListLoaded = true;
|
|
350
|
-
this.allRiskCategories = [...new Set(this.allRiskCategories.concat(res.strategic_arr, res.operational_arr, res.compliance_arr, res.others_arr))];
|
|
351
|
-
}, err => {
|
|
352
|
-
console.error(err);
|
|
353
|
-
this.riskCategoryListLoaded = true;
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
|
-
/**
|
|
357
|
-
* It is to ensure whether all required lists on Policy from is loaded from the api call or not
|
|
358
|
-
*/
|
|
359
|
-
checkWhetherAllListsLoaded() {
|
|
360
|
-
if (this.rcListLoaded && this.complianceCategoriesListLoaded && this.riskCategoryListLoaded && this.userListLoaded) {
|
|
361
|
-
if (this.mode === 'EDIT') {
|
|
362
|
-
this.editDashboard();
|
|
363
|
-
}
|
|
364
|
-
else {
|
|
365
|
-
this.vLoader = false;
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
else {
|
|
369
|
-
setTimeout(() => {
|
|
370
|
-
this.checkWhetherAllListsLoaded();
|
|
371
|
-
}, 300);
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
setSelectedWidgets(data) {
|
|
375
|
-
if (this.mode === 'CREATE') {
|
|
376
|
-
const widgetsArray = [];
|
|
377
|
-
data.forEach((element) => {
|
|
378
|
-
let obj = {};
|
|
379
|
-
obj.module_name = element.module;
|
|
380
|
-
obj._id = '';
|
|
381
|
-
obj.widget_name = element.title;
|
|
382
|
-
obj.widget_code = element.id;
|
|
383
|
-
obj.sub_widgets = [];
|
|
384
|
-
obj.state = 'ACTIVE';
|
|
385
|
-
if (element.subWidgets.length > 0) {
|
|
386
|
-
element.subWidgets.forEach((subWidget) => {
|
|
387
|
-
let subWidgetObject = {};
|
|
388
|
-
subWidgetObject._id = '';
|
|
389
|
-
subWidgetObject.widget_name = subWidget.title;
|
|
390
|
-
subWidgetObject.widget_code = subWidget.id;
|
|
391
|
-
subWidgetObject.state = (subWidget.value) ? 'ACTIVE' : 'INACTIVE';
|
|
392
|
-
obj.sub_widgets.push(Object.assign(subWidgetObject));
|
|
393
|
-
});
|
|
394
|
-
}
|
|
395
|
-
widgetsArray.push(obj);
|
|
396
|
-
});
|
|
397
|
-
this.dashboardForm.configureWidget = widgetsArray;
|
|
398
|
-
}
|
|
399
|
-
else if (this.mode === 'EDIT') {
|
|
400
|
-
const widgetsArray = [];
|
|
401
|
-
data.forEach((element) => {
|
|
402
|
-
if (!JSON.stringify(this.dashboardForm.configureWidget).includes(element.id)) {
|
|
403
|
-
let obj = {};
|
|
404
|
-
obj.module_name = element.module;
|
|
405
|
-
obj._id = '';
|
|
406
|
-
obj.widget_name = element.title;
|
|
407
|
-
obj.widget_code = element.id;
|
|
408
|
-
obj.sub_widgets = [];
|
|
409
|
-
obj.state = 'ACTIVE';
|
|
410
|
-
if (element.subWidgets.length > 0) {
|
|
411
|
-
element.subWidgets.forEach((subWidget) => {
|
|
412
|
-
let subWidgetObject = {};
|
|
413
|
-
subWidgetObject._id = '';
|
|
414
|
-
subWidgetObject.widget_name = subWidget.title;
|
|
415
|
-
subWidgetObject.widget_code = subWidget.id;
|
|
416
|
-
subWidgetObject.state = (subWidget.value) ? 'ACTIVE' : 'INACTIVE';
|
|
417
|
-
obj.sub_widgets.push(subWidgetObject);
|
|
418
|
-
});
|
|
419
|
-
}
|
|
420
|
-
this.dashboardForm.configureWidget.push(obj);
|
|
421
|
-
}
|
|
422
|
-
else {
|
|
423
|
-
const index = this.selectedWidgets.findIndex((ele) => ele.widget_code == element.id);
|
|
424
|
-
if (index != -1) {
|
|
425
|
-
this.selectedWidgets[index].state = 'ACTIVE';
|
|
426
|
-
if (this.selectedWidgets[index].sub_widgets.length > 0) {
|
|
427
|
-
this.selectedWidgets[index].sub_widgets.forEach((subWidgetData) => {
|
|
428
|
-
const elementIndex = element.subWidgets.findIndex((ele) => ele.id == subWidgetData.widget_code);
|
|
429
|
-
if (elementIndex != -1) {
|
|
430
|
-
subWidgetData.state = (element.subWidgets[elementIndex].value) ? 'ACTIVE' : 'INACTIVE';
|
|
431
|
-
}
|
|
432
|
-
});
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
});
|
|
437
|
-
this.dashboardForm.configureWidget.forEach((savedWidget) => {
|
|
438
|
-
const index = data.findIndex((dataElement) => dataElement.id == savedWidget.widget_code);
|
|
439
|
-
if (index == -1) {
|
|
440
|
-
savedWidget.state = 'INACTIVE';
|
|
441
|
-
if (savedWidget.sub_widgets.length > 0) {
|
|
442
|
-
savedWidget.sub_widgets.forEach((saveSubWidget) => {
|
|
443
|
-
saveSubWidget.state = 'INACTIVE';
|
|
444
|
-
});
|
|
445
|
-
}
|
|
446
|
-
}
|
|
447
|
-
});
|
|
448
|
-
}
|
|
449
|
-
this.selectedWidgets = data;
|
|
450
|
-
this.openConfigureWidgets = false;
|
|
451
|
-
this.submitDashboard();
|
|
452
|
-
}
|
|
453
|
-
closeConfigureWidgets(event) {
|
|
454
|
-
this.openConfigureWidgets = event;
|
|
455
|
-
}
|
|
456
|
-
/**
|
|
457
|
-
* Filter list user's list based on pagination by making api call
|
|
458
|
-
* @param event specifies a boolean value to call api
|
|
459
|
-
*/
|
|
460
|
-
paginationFilter(event) {
|
|
461
|
-
if (event) {
|
|
462
|
-
this.getUsersList({
|
|
463
|
-
p: this.paginationService.currentPage === 1 ? '' : this.paginationService.currentPage,
|
|
464
|
-
type: 'all_except_executive',
|
|
465
|
-
q: (!this.paginationService.searchValue) ? '' : this.paginationService.searchValue,
|
|
466
|
-
});
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
getRCList() {
|
|
470
|
-
this.createDashboardService.getResponsibilityCenterList().subscribe((res) => {
|
|
471
|
-
this.responsibilityCentersList = res;
|
|
472
|
-
this.rcListLoaded = true;
|
|
473
|
-
}, (err) => {
|
|
474
|
-
console.error(err);
|
|
475
|
-
this.rcListLoaded = true;
|
|
476
|
-
});
|
|
477
|
-
}
|
|
478
|
-
saveSelectedList(type, selectedItems) {
|
|
479
|
-
switch (type) {
|
|
480
|
-
case 'rc':
|
|
481
|
-
this.dashboardForm.selectedResponsibilityCenters = this.setList(this.responsibilityCentersList, selectedItems, 'item_id');
|
|
482
|
-
if (this.dashboardForm.selectedResponsibilityCenters.length == 0) {
|
|
483
|
-
if (this.dashboardForm.selectedResponsibilityCategories.length == 0) {
|
|
484
|
-
this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'COMPLIANCE');
|
|
485
|
-
}
|
|
486
|
-
else if (this.dashboardForm.selectedRiskCategories.length == 0) {
|
|
487
|
-
this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'RISK');
|
|
488
|
-
}
|
|
489
|
-
}
|
|
490
|
-
break;
|
|
491
|
-
case 'whoCanView':
|
|
492
|
-
this.dashboardForm.selectedViewers = selectedItems;
|
|
493
|
-
this.listDetails.selectedUsersList = this.dashboardForm.selectedViewers;
|
|
494
|
-
break;
|
|
495
|
-
case 'responsibilityCategories':
|
|
496
|
-
this.dashboardForm.selectedResponsibilityCategories = selectedItems;
|
|
497
|
-
if (this.dashboardForm.selectedResponsibilityCenters.length == 0) {
|
|
498
|
-
if (this.dashboardForm.selectedResponsibilityCategories.length == 0) {
|
|
499
|
-
this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'COMPLIANCE');
|
|
500
|
-
}
|
|
501
|
-
else if (this.dashboardForm.selectedRiskCategories.length == 0) {
|
|
502
|
-
this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'RISK');
|
|
503
|
-
}
|
|
504
|
-
}
|
|
505
|
-
break;
|
|
506
|
-
case 'riskCategory':
|
|
507
|
-
this.dashboardForm.selectedRiskCategories = selectedItems;
|
|
508
|
-
if (this.dashboardForm.selectedResponsibilityCenters.length == 0) {
|
|
509
|
-
if (this.dashboardForm.selectedResponsibilityCategories.length == 0) {
|
|
510
|
-
this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'COMPLIANCE');
|
|
511
|
-
}
|
|
512
|
-
else if (this.dashboardForm.selectedRiskCategories.length == 0) {
|
|
513
|
-
this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'RISK');
|
|
514
|
-
}
|
|
515
|
-
}
|
|
516
|
-
break;
|
|
517
|
-
}
|
|
518
|
-
this.activateSelector('', false);
|
|
519
|
-
}
|
|
520
|
-
remove(type, event, removeIndex) {
|
|
521
|
-
var _a, _b;
|
|
522
|
-
switch (type) {
|
|
523
|
-
case 'rc':
|
|
524
|
-
const rcIndex = this.dashboardForm.selectedResponsibilityCenters.findIndex((rc) => rc.rc_id == event.rc_id);
|
|
525
|
-
if (rcIndex !== -1) {
|
|
526
|
-
const parentRc = this.dashboardForm.selectedResponsibilityCenters[rcIndex];
|
|
527
|
-
this.dashboardForm.selectedResponsibilityCenters.splice(rcIndex, 1);
|
|
528
|
-
if (((_a = parentRc === null || parentRc === void 0 ? void 0 : parentRc.item_child_ids) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
529
|
-
parentRc.item_child_ids.forEach((childElement) => {
|
|
530
|
-
const removeIndex = this.dashboardForm.selectedResponsibilityCenters.findIndex((removeElement) => removeElement.rc_id == childElement);
|
|
531
|
-
this.dashboardForm.selectedResponsibilityCenters.splice(removeIndex, 1);
|
|
532
|
-
});
|
|
533
|
-
}
|
|
534
|
-
}
|
|
535
|
-
if (this.dashboardForm.selectedResponsibilityCenters.length == 0) {
|
|
536
|
-
if (this.dashboardForm.selectedResponsibilityCategories.length == 0) {
|
|
537
|
-
this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'COMPLIANCE');
|
|
538
|
-
}
|
|
539
|
-
else if (this.dashboardForm.selectedRiskCategories.length == 0) {
|
|
540
|
-
this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'RISK');
|
|
541
|
-
}
|
|
542
|
-
}
|
|
543
|
-
break;
|
|
544
|
-
case 'whoCanView':
|
|
545
|
-
const reviewerIndex = this.dashboardForm.selectedViewers.findIndex((viewer) => viewer.member_id == event.member_id);
|
|
546
|
-
this.dashboardForm.selectedViewers.splice(reviewerIndex, 1);
|
|
547
|
-
break;
|
|
548
|
-
case 'responsibilityCategories':
|
|
549
|
-
const CCcategoryIndex = this.dashboardForm.selectedResponsibilityCategories.findIndex((CCcategory) => CCcategory.category_id == event.category_id);
|
|
550
|
-
this.dashboardForm.selectedResponsibilityCategories.splice(CCcategoryIndex, 1);
|
|
551
|
-
if (this.dashboardForm.selectedResponsibilityCenters.length == 0) {
|
|
552
|
-
if (this.dashboardForm.selectedResponsibilityCategories.length == 0) {
|
|
553
|
-
this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'COMPLIANCE');
|
|
554
|
-
}
|
|
555
|
-
else if (this.dashboardForm.selectedRiskCategories.length == 0) {
|
|
556
|
-
this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'RISK');
|
|
557
|
-
}
|
|
558
|
-
}
|
|
559
|
-
break;
|
|
560
|
-
case 'riskCategory':
|
|
561
|
-
const riskCategoryIndex = this.dashboardForm.selectedRiskCategories.findIndex((riskCategory) => riskCategory.category_id == event.category_id);
|
|
562
|
-
if (riskCategoryIndex !== -1) {
|
|
563
|
-
const parent = this.dashboardForm.selectedRiskCategories[riskCategoryIndex];
|
|
564
|
-
this.dashboardForm.selectedRiskCategories.splice(riskCategoryIndex, 1);
|
|
565
|
-
if (((_b = parent === null || parent === void 0 ? void 0 : parent.child_cat_ids) === null || _b === void 0 ? void 0 : _b.length) > 0) {
|
|
566
|
-
parent.child_cat_ids.forEach((childElement) => {
|
|
567
|
-
const removeIndex = this.dashboardForm.selectedRiskCategories.findIndex((removeElement) => removeElement.category_id == childElement);
|
|
568
|
-
this.dashboardForm.selectedRiskCategories.splice(removeIndex, 1);
|
|
569
|
-
});
|
|
570
|
-
}
|
|
571
|
-
}
|
|
572
|
-
this.dashboardForm.selectedRiskCategories.splice(riskCategoryIndex, 1);
|
|
573
|
-
if (this.dashboardForm.selectedResponsibilityCenters.length == 0) {
|
|
574
|
-
if (this.dashboardForm.selectedResponsibilityCategories.length == 0) {
|
|
575
|
-
this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'COMPLIANCE');
|
|
576
|
-
}
|
|
577
|
-
else if (this.dashboardForm.selectedRiskCategories.length == 0) {
|
|
578
|
-
this.selectedWidgets = this.selectedWidgets.filter((element) => element.module_name != 'RISK');
|
|
579
|
-
}
|
|
580
|
-
}
|
|
581
|
-
break;
|
|
582
|
-
}
|
|
583
|
-
}
|
|
584
|
-
setList(list, ids, key) {
|
|
585
|
-
const data = [];
|
|
586
|
-
ids.forEach((element) => {
|
|
587
|
-
const index = list.findIndex((listElement) => listElement[key] == element);
|
|
588
|
-
if (index !== -1) {
|
|
589
|
-
data.push(list[index]);
|
|
590
|
-
}
|
|
591
|
-
});
|
|
592
|
-
return data;
|
|
593
|
-
}
|
|
594
|
-
/**
|
|
595
|
-
* Returns id's from a particular list elements
|
|
596
|
-
* @param list actual selected list
|
|
597
|
-
* @param key contains key to extract id from the list
|
|
598
|
-
*/
|
|
599
|
-
returnIds(list, key) {
|
|
600
|
-
return list === null || list === void 0 ? void 0 : list.map(ele => { if (ele[key]) {
|
|
601
|
-
return ele[key];
|
|
602
|
-
} });
|
|
603
|
-
}
|
|
604
|
-
/**
|
|
605
|
-
* Validates the data submitted on create dashboard form
|
|
606
|
-
*/
|
|
607
|
-
validateDashboard() {
|
|
608
|
-
var _a;
|
|
609
|
-
setTimeout(() => {
|
|
610
|
-
this.submitted = true;
|
|
611
|
-
}, 100);
|
|
612
|
-
const event = this.dashboardForm.dashboardName;
|
|
613
|
-
const re = / |<br>/g;
|
|
614
|
-
this.dashboardForm.dashboardName = event.replace(re, '').trim();
|
|
615
|
-
const description = this.dashboardForm.dashboardDescriptionText;
|
|
616
|
-
this.dashboardForm.dashboardDescriptionText = description.replace(re, '').trim();
|
|
617
|
-
if (!this.dashboardForm.dashboardName || this.dashboardForm.dashboardName.trim() == ''
|
|
618
|
-
|| (this.dashboardForm.dashboardName.length > 30)
|
|
619
|
-
|| (this.textCount.transform((_a = this.dashboardForm) === null || _a === void 0 ? void 0 : _a.dashboardDescriptionText) > 250)
|
|
620
|
-
|| (this.dashboardForm.selectedFromDate && (!this.dashboardForm.selectedToDate))
|
|
621
|
-
|| (this.dashboardForm.selectedResponsibilityCenters.length == 0 &&
|
|
622
|
-
this.dashboardForm.selectedResponsibilityCategories.length == 0 &&
|
|
623
|
-
this.dashboardForm.selectedRiskCategories.length == 0)) {
|
|
624
|
-
return false;
|
|
625
|
-
}
|
|
626
|
-
else {
|
|
627
|
-
return true;
|
|
628
|
-
}
|
|
629
|
-
}
|
|
630
|
-
/**
|
|
631
|
-
* Makes an api call to create a policy
|
|
632
|
-
* @param dashboard contains dashboardForm data
|
|
633
|
-
*/
|
|
634
|
-
submitDashboard() {
|
|
635
|
-
this.submitted = false;
|
|
636
|
-
const valid = this.validateDashboard();
|
|
637
|
-
if (!valid) {
|
|
638
|
-
return false;
|
|
639
|
-
}
|
|
640
|
-
this.vLoader = true;
|
|
641
|
-
const dashboard = this.dashboardForm;
|
|
642
|
-
const payload = {
|
|
643
|
-
dashboard_name: dashboard.dashboardName,
|
|
644
|
-
description: [
|
|
645
|
-
{
|
|
646
|
-
content: dashboard.dashboardDescriptionText,
|
|
647
|
-
attachments: []
|
|
648
|
-
}
|
|
649
|
-
],
|
|
650
|
-
visible_to_users: this.returnIds(dashboard.selectedViewers, 'member_id'),
|
|
651
|
-
responsibility_center: this.returnIds(dashboard.selectedResponsibilityCenters, 'item_id'),
|
|
652
|
-
responsibility_category: this.returnIds(dashboard.selectedResponsibilityCategories, 'category_id'),
|
|
653
|
-
risk_category: this.returnIds(dashboard.selectedRiskCategories, 'category_id'),
|
|
654
|
-
display_criteria: (dashboard.displayCriteria === 'and') ? 'BOTH_RC_AND_CATEGORY' : 'RC_OR_CATEGORY',
|
|
655
|
-
timeframe: {
|
|
656
|
-
start_date: (dashboard.selectedFromDate) ? dayjs(dashboard.selectedFromDate).format('YYYY-MM-DD') : '',
|
|
657
|
-
end_date: (dashboard.selectedToDate) ? dayjs(dashboard.selectedToDate).format('YYYY-MM-DD') : '',
|
|
658
|
-
},
|
|
659
|
-
email_summary: this.setFrequency('', 'export'),
|
|
660
|
-
widget_details: dashboard.configureWidget
|
|
661
|
-
};
|
|
662
|
-
if (this.mode == 'CREATE') {
|
|
663
|
-
this.createDashboardService.submitDashboard(payload).subscribe((res) => {
|
|
664
|
-
this.vLoader = false;
|
|
665
|
-
// this.snackBar.show('The dashboard has been created.');
|
|
666
|
-
this.isSmiley = true;
|
|
667
|
-
this.smileyMessage = 'The dashboard has been created.';
|
|
668
|
-
setTimeout(() => {
|
|
669
|
-
this.isSmiley = false;
|
|
670
|
-
this.close.emit({ mode: 'created', id: res._id });
|
|
671
|
-
}, 3000);
|
|
672
|
-
}, err => {
|
|
673
|
-
if (err.status === 409) {
|
|
674
|
-
this.snackBar.show('A dashboard with this name already exists. Specify a different name for the dashboard.');
|
|
675
|
-
this.vLoader = false;
|
|
676
|
-
}
|
|
677
|
-
else {
|
|
678
|
-
console.error(err);
|
|
679
|
-
this.vLoader = false;
|
|
680
|
-
this.snackBar.show('OOPS! Something went wrong and the page could not be loaded. Could you please try one more time?');
|
|
681
|
-
}
|
|
682
|
-
});
|
|
683
|
-
}
|
|
684
|
-
if (this.mode === 'EDIT') {
|
|
685
|
-
payload.widget_update_flag = true;
|
|
686
|
-
this.createDashboardService.updateDashboard(this.dashboardId, payload).subscribe({
|
|
687
|
-
next: (res) => {
|
|
688
|
-
this.vLoader = false;
|
|
689
|
-
// this.snackBar.show('The dashboard has been updated');
|
|
690
|
-
this.isSmiley = true;
|
|
691
|
-
this.smileyMessage = 'The dashboard has been updated';
|
|
692
|
-
setTimeout(() => {
|
|
693
|
-
this.isSmiley = false;
|
|
694
|
-
this.close.emit({ mode: 'updated' });
|
|
695
|
-
}, 3000);
|
|
696
|
-
},
|
|
697
|
-
error: (error) => {
|
|
698
|
-
console.error(error);
|
|
699
|
-
this.vLoader = false;
|
|
700
|
-
this.snackBar.show('OOPS! Something went wrong and the page could not be loaded. Could you please try one more time?');
|
|
701
|
-
}
|
|
702
|
-
});
|
|
703
|
-
}
|
|
704
|
-
}
|
|
705
|
-
editDashboard() {
|
|
706
|
-
if (this.dashboardId) {
|
|
707
|
-
this.createDashboardService.fetchDashboard(this.dashboardId).subscribe((res) => {
|
|
708
|
-
const data = res;
|
|
709
|
-
this.listDetails.nonRemovableUsersList = [res.created_by];
|
|
710
|
-
this.populateDashboardForm(data);
|
|
711
|
-
}, error => {
|
|
712
|
-
console.error(error);
|
|
713
|
-
});
|
|
714
|
-
}
|
|
715
|
-
}
|
|
716
|
-
populateDashboardForm(data) {
|
|
717
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
718
|
-
this.dashboardForm.dashboardName = data.dashboard_name,
|
|
719
|
-
this.dashboardForm.dashboardDescriptionText = data.description[0].content,
|
|
720
|
-
this.dashboardForm.selectedViewers = this.setList(this.usersList, data.visible_to_users, 'member_id');
|
|
721
|
-
this.listDetails.selectedUsersList = this.dashboardForm.selectedViewers;
|
|
722
|
-
this.dashboardForm.selectedResponsibilityCenters = this.setList(this.responsibilityCentersList, data.responsibility_center, 'item_id');
|
|
723
|
-
this.dashboardForm.selectedResponsibilityCategories = this.setList(this.allComplianceCategories, data.responsibility_category, 'category_id');
|
|
724
|
-
this.dashboardForm.selectedRiskCategories = this.setList(this.allRiskCategories, data.risk_category, 'category_id');
|
|
725
|
-
this.dashboardForm.displayCriteria = (data.display_criteria === "BOTH_RC_AND_CATEGORY") ? 'and' : 'or';
|
|
726
|
-
this.dashboardForm.selectedFromDate = ((_a = data === null || data === void 0 ? void 0 : data.timeframe) === null || _a === void 0 ? void 0 : _a.start_date) ? (_c = dayjs((_b = data === null || data === void 0 ? void 0 : data.timeframe) === null || _b === void 0 ? void 0 : _b.start_date)) === null || _c === void 0 ? void 0 : _c.toDate() : undefined;
|
|
727
|
-
this.dashboardForm.selectedToDate = ((_d = data === null || data === void 0 ? void 0 : data.timeframe) === null || _d === void 0 ? void 0 : _d.end_date) ? (_f = dayjs((_e = data === null || data === void 0 ? void 0 : data.timeframe) === null || _e === void 0 ? void 0 : _e.end_date)) === null || _f === void 0 ? void 0 : _f.toDate() : undefined;
|
|
728
|
-
this.vLoader = false;
|
|
729
|
-
this.dashboardForm.configureWidget = data.widget_details;
|
|
730
|
-
this.selectedWidgets = data.widget_details.length > 0 ? [...new Set(data.widget_details)] : [];
|
|
731
|
-
this.displayedWidgets = data.all_widgets.length > 0 ? [...new Set(data.all_widgets)] : [];
|
|
732
|
-
this.setFrequency(data === null || data === void 0 ? void 0 : data.email_summary, 'import');
|
|
733
|
-
let minToDate = this.setToDate((_g = data === null || data === void 0 ? void 0 : data.timeframe) === null || _g === void 0 ? void 0 : _g.start_date);
|
|
734
|
-
this.toDatePickerConfig = { min: minToDate };
|
|
735
|
-
this.hideToDate = true;
|
|
736
|
-
setTimeout(() => {
|
|
737
|
-
this.hideToDate = false;
|
|
738
|
-
}, 20);
|
|
739
|
-
}
|
|
740
|
-
setFrequency(event, mode) {
|
|
741
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
742
|
-
if (mode === 'export') {
|
|
743
|
-
switch (this.dashboardForm.selectedFrequencyType) {
|
|
744
|
-
case 'weekly':
|
|
745
|
-
const weeklyValueData = (_b = (_a = this.dashboardForm) === null || _a === void 0 ? void 0 : _a.selectedFrequencies) === null || _b === void 0 ? void 0 : _b.map((ele) => Number(ele) + 1);
|
|
746
|
-
const weeklyValue = weeklyValueData === null || weeklyValueData === void 0 ? void 0 : weeklyValueData.join();
|
|
747
|
-
return '2~' + weeklyValue + '~0~0';
|
|
748
|
-
case 'monthly':
|
|
749
|
-
const monthlyValueData = (_d = (_c = this.dashboardForm) === null || _c === void 0 ? void 0 : _c.selectedFrequencies) === null || _d === void 0 ? void 0 : _d.map((ele) => Number(ele) + 1);
|
|
750
|
-
const monthlyValue = monthlyValueData === null || monthlyValueData === void 0 ? void 0 : monthlyValueData.join();
|
|
751
|
-
return '3~' + ((_e = this.dashboardForm) === null || _e === void 0 ? void 0 : _e.frequencyDate) + '~' + monthlyValue + '~0';
|
|
752
|
-
case 'quarterly':
|
|
753
|
-
const quarterlyValueData = Number(this.dashboardForm.selectedFrequencies) + 1;
|
|
754
|
-
return '7~' + this.dashboardForm.frequencyDate + '~' + quarterlyValueData + '~0';
|
|
755
|
-
}
|
|
756
|
-
}
|
|
757
|
-
if (mode === 'import') {
|
|
758
|
-
const val = event.split('~');
|
|
759
|
-
switch (val[0]) {
|
|
760
|
-
case '2':
|
|
761
|
-
{
|
|
762
|
-
let stringVal = "Every ";
|
|
763
|
-
this.dashboardForm.selectedFrequencyType = 'weekly';
|
|
764
|
-
this.dashboardForm.selectedFrequencies = (_g = (_f = val[1]) === null || _f === void 0 ? void 0 : _f.split(',')) === null || _g === void 0 ? void 0 : _g.map((element) => Number(element) - 1);
|
|
765
|
-
(_h = this.dashboardForm.selectedFrequencies) === null || _h === void 0 ? void 0 : _h.forEach((dayIndex, index) => {
|
|
766
|
-
stringVal += index === 0 ? this.dayNames[dayIndex] : ', ' + this.dayNames[dayIndex];
|
|
767
|
-
});
|
|
768
|
-
this.dashboardForm.frequencyMessage = stringVal;
|
|
769
|
-
}
|
|
770
|
-
break;
|
|
771
|
-
case '3':
|
|
772
|
-
{
|
|
773
|
-
let stringVal = "every ";
|
|
774
|
-
this.dashboardForm.selectedFrequencyType = 'monthly';
|
|
775
|
-
this.dashboardForm.frequencyDate = val[1];
|
|
776
|
-
this.dashboardForm.selectedFrequencies = (_k = (_j = val[2]) === null || _j === void 0 ? void 0 : _j.split(',')) === null || _k === void 0 ? void 0 : _k.map((element) => Number(element) - 1);
|
|
777
|
-
this.dashboardForm.selectedFrequencies.forEach((monthIndex, index) => {
|
|
778
|
-
stringVal += index === 0 ? this.monthNames[monthIndex] : ', ' + this.monthNames[monthIndex];
|
|
779
|
-
});
|
|
780
|
-
let monthDateName;
|
|
781
|
-
if (this.dashboardForm.frequencyDate == "1") {
|
|
782
|
-
monthDateName = '1st';
|
|
783
|
-
}
|
|
784
|
-
else if (this.dashboardForm.frequencyDate == "2") {
|
|
785
|
-
monthDateName = '2nd';
|
|
786
|
-
}
|
|
787
|
-
else if (this.dashboardForm.frequencyDate == "3") {
|
|
788
|
-
monthDateName = '3rd';
|
|
789
|
-
}
|
|
790
|
-
else {
|
|
791
|
-
monthDateName = this.dashboardForm.frequencyDate + 'th';
|
|
792
|
-
}
|
|
793
|
-
this.dashboardForm.frequencyMessage = monthDateName + ' of ' + stringVal;
|
|
794
|
-
}
|
|
795
|
-
break;
|
|
796
|
-
case '7':
|
|
797
|
-
{
|
|
798
|
-
let stringVal = "every ";
|
|
799
|
-
this.dashboardForm.selectedFrequencyType = 'quarterly';
|
|
800
|
-
this.dashboardForm.frequencyDate = val[1];
|
|
801
|
-
this.dashboardForm.selectedFrequencies = Number(val[2].split(',')[0]) - 1;
|
|
802
|
-
stringVal += this.quarters[this.dashboardForm.selectedFrequencies];
|
|
803
|
-
let monthDateName;
|
|
804
|
-
if (this.dashboardForm.frequencyDate == "1") {
|
|
805
|
-
monthDateName = '1st';
|
|
806
|
-
}
|
|
807
|
-
else if (this.dashboardForm.frequencyDate == "2") {
|
|
808
|
-
monthDateName = '2nd';
|
|
809
|
-
}
|
|
810
|
-
else if (this.dashboardForm.frequencyDate == "3") {
|
|
811
|
-
monthDateName = '3rd';
|
|
812
|
-
}
|
|
813
|
-
else {
|
|
814
|
-
monthDateName = this.dashboardForm.frequencyDate + 'th';
|
|
815
|
-
}
|
|
816
|
-
this.dashboardForm.frequencyMessage = monthDateName + ' of ' + stringVal;
|
|
817
|
-
}
|
|
818
|
-
break;
|
|
819
|
-
}
|
|
820
|
-
}
|
|
821
|
-
}
|
|
822
|
-
ngAfterViewChecked() {
|
|
823
|
-
//your code to update the model
|
|
824
|
-
this.cdr.detectChanges();
|
|
825
|
-
}
|
|
826
|
-
setPermission(roleActions) {
|
|
827
|
-
var _a;
|
|
828
|
-
let ifExistRisk = roleActions === null || roleActions === void 0 ? void 0 : roleActions.find((el) => el.moduleName == "risk");
|
|
829
|
-
(_a = ifExistRisk === null || ifExistRisk === void 0 ? void 0 : ifExistRisk.subModule) === null || _a === void 0 ? void 0 : _a.forEach((module) => {
|
|
830
|
-
var _a;
|
|
831
|
-
(_a = module === null || module === void 0 ? void 0 : module.permissions) === null || _a === void 0 ? void 0 : _a.forEach((permission) => {
|
|
832
|
-
switch (permission === null || permission === void 0 ? void 0 : permission.code) {
|
|
833
|
-
case 'RRMR': {
|
|
834
|
-
if ((permission === null || permission === void 0 ? void 0 : permission.defaultPermission) == 1 || (permission === null || permission === void 0 ? void 0 : permission.enable) == 1) {
|
|
835
|
-
this.isManageRisk = true;
|
|
836
|
-
}
|
|
837
|
-
;
|
|
838
|
-
break;
|
|
839
|
-
}
|
|
840
|
-
}
|
|
841
|
-
});
|
|
842
|
-
});
|
|
843
|
-
}
|
|
844
|
-
}
|
|
845
|
-
CreateDashboardComponent.decorators = [
|
|
846
|
-
{ type: Component, args: [{
|
|
847
|
-
selector: 'app-create-dashboard',
|
|
848
|
-
template: "<app-snack-bar></app-snack-bar>\r\n<div class=\"create-dashboard\" *ngIf=\"!openConfigureWidgets\">\r\n <div class=\"create-dashboard-container vx-d-flex vx-justify-end\" [class.animate-slideInRight]=\"animation\">\r\n <div class=\"more-option\" *ngIf=\"activeSelector && activeSelector!=='name'\">\r\n <app-user-list *ngIf=\"activeSelector==='whoCanView'\"\r\n (saveSelectedUsers)=\"saveSelectedList('whoCanView',$event)\"\r\n (closeUserList)=\"activateSelector('', false)\" [totalPages]=\"totalPages\" [totalList]=\"totalList\"\r\n [listDetails]=\"listDetails\"></app-user-list>\r\n <app-responsibility-center *ngIf=\"activeSelector==='rcList'\"\r\n [responsibilityCentersList]=\"responsibilityCentersList\" [radioSelection]=\"false\"\r\n [selectedResponsibilityCenters]=\"dashboardForm.selectedResponsibilityCenters\" [rcIdKey]=\"'item_id'\"\r\n (saveSelectedList)=\"saveSelectedList('rc',$event)\" (closeRcList)=\"activateSelector('', false)\">\r\n </app-responsibility-center>\r\n <app-categories *ngIf=\"activeSelector==='responsibilityCategories'\"\r\n [categoryList]=\"responsibilityCategoriesTree\" [allCategories]=\"allComplianceCategories\"\r\n [categoryIdKey]=\"'category_id'\" [selectedCategories]=\"dashboardForm.selectedResponsibilityCategories\"\r\n (saveSelectedCategory)=\"saveSelectedList('responsibilityCategories',$event)\"\r\n (closeCategoriesList)=\"activateSelector('', false)\"></app-categories>\r\n <app-risk-categories *ngIf=\"activeSelector==='riskCategories'\" [categoryList]=\"riskCategoryList\"\r\n [allCategories]=\"allRiskCategories\" [categoryIdKey]=\"'category_id'\"\r\n [selectedCategories]=\"dashboardForm.selectedRiskCategories\"\r\n (saveSelectedCategory)=\"saveSelectedList('riskCategory',$event)\"\r\n (closeCategoriesList)=\"activateSelector('', false)\"></app-risk-categories>\r\n\r\n <app-frequency *ngIf=\"activeSelector==='frequency'\" (closeFrequencyPopup)=\"activateSelector('', false)\"\r\n (saveFrequency)=\"saveFrequency($event)\" [savedFrequencyTab]=\"dashboardForm.selectedFrequencyType\"\r\n [selectedDate]=\"dashboardForm.frequencyDate\" [savedFrequencies]=\"dashboardForm.selectedFrequencies\">\r\n </app-frequency>\r\n </div>\r\n <div class=\"vx-dialog-container side-dialog\">\r\n\r\n <app-loader-inline *ngIf=\"vLoader\"></app-loader-inline>\r\n <div class=\"form-group\" [class.disabled]=\"disabled\">\r\n <div class=\"vx-dialog-body-container\" (scroll)=\"animateImage()\" [class.hidden-scroll]=\"popoverService.stopScroll\">\r\n <div class=\"form-group-row\" [class.disabled]=\"activeSelector && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img src=\"./assets/images/what.svg\"\r\n *ngIf=\"!dashboardForm.dashboardName || activeSelector === 'name'\" alt=\"\">\r\n <svg class=\"checkIcon\" *ngIf=\"dashboardForm.dashboardName && activeSelector !== 'name'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-16 vx-d-block vx-tt-uppercase vx-mt-1 vx-mb-1 vx-w-100 vx-text-left\">Dashboard Name<span class=\"require vx-txt-red vx-fs-16 vx-fw-400\">*</span></label>\r\n <div class=\"vx-input-group vx-mt-2\">\r\n <input class=\"vx-fs-13 vx-fw-400 vx-lh-20 vx-pt-1 vx-pb-1 vx-pl-3 vx-pr-3 vx-bg-white vx-w-100 vx-paragraph-txt\" type=\"text\" placeholder=\"Add dashboard name (Max limit: 30 characters).\"\r\n [(ngModel)]=\"dashboardForm.dashboardName\" (keydown)=\"activeSelector = 'name'\"\r\n (focusin)=\"activateSelector('name',true)\"\r\n (focusout)=\"activateSelector('name',false)\">\r\n <span class=\"counter\" *ngIf=\"dashboardForm?.dashboardName?.length > 0\">{{30 -\r\n dashboardForm.dashboardName.length}}</span>\r\n </div>\r\n <p class=\"vx-txt-error\" [appScrollInView]=\"true\"\r\n *ngIf=\"submitted &&( dashboardForm?.dashboardName?.length>30 || !dashboardForm?.dashboardName)\">\r\n {{(dashboardForm.dashboardName.length>30)?'You have exceeded the maximum character\r\n limit of 30 characters.':'Please enter a name for this Dashboard.'}} </p>\r\n <div class=\"vx-input-group vx-mt-2\">\r\n <marx-editor [editorConfig]=\"dashboardDescription\"\r\n [(ngModel)]=\"dashboardForm.dashboardDescriptionText\"></marx-editor>\r\n <span class=\"counter\"\r\n *ngIf=\"dashboardForm?.dashboardDescriptionText?.length > 0\">{{250 -\r\n (dashboardForm?.dashboardDescriptionText | textCount)}}</span>\r\n </div>\r\n <p class=\"vx-txt-error\" [appScrollInView]=\"true\"\r\n *ngIf=\"submitted && (dashboardForm?.dashboardDescriptionText | textCount) > 250\">\r\n You have exceeded the maximum character limit of 250 characters.\r\n </p>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'whoCanView'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'whoCanView' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img src=\"./assets/images/who.svg\"\r\n *ngIf=\"dashboardForm?.selectedViewers?.length==0 || activeSelector === 'whoCanView'\"\r\n alt=\"\">\r\n <svg class=\"checkIcon\"\r\n *ngIf=\"dashboardForm?.selectedViewers?.length>0 && activeSelector !== 'whoCanView'\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">Who can view this dashboard?<span class=\"require vx-txt-red vx-fs-16 vx-fw-400\">*</span></label>\r\n <div class=\"selectbox vx-fs-13 vx-fw-400 vx-paragraph-txt\" *ngIf=\"dashboardForm?.selectedViewers?.length==0\">\r\n <input class=\"vx-fs-13 vx-fw-400 vx-lh-20 vx-pt-1 vx-pb-1 vx-pl-3 vx-pr-3 vx-bg-white vx-w-100 vx-paragraph-txt\" type=\"text\" placeholder=\"Who can view this dashboard?\" readonly\r\n (click)=\"activateSelector('whoCanView', true)\">\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-13 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5\" *ngIf=\"dashboardForm?.selectedViewers?.length>0\"> \r\n <div class=\"left\">\r\n <div class=\"chip-container vx-d-flex vx-align-center\">\r\n <span class=\"chip vx-txt-blue vx-fs-12 vx-fw-400 vx-w-100 vx-pl-2 vx-pr-2 vx-bg-white vx-d-flex\"\r\n *ngFor=\"let user of dashboardForm?.selectedViewers?.slice(0,2)\"><i\r\n *ngIf=\"!listDetails.nonRemovableUsersList.includes(user.member_id)\"\r\n class=\"icons vx-fs-10 vx-fw-400 vx-mr-2\" (click)=\"remove('whoCanView',user)\"></i>\r\n <span class=\"value \">{{user.member_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count vx-txt-white vx-fw-500 vx-ml-1 vx-lh-5 vx-bg-blue\" *ngIf=\"dashboardForm?.selectedViewers?.length > 2\"\r\n type=\"button\" appPopover (click)=\"userList.popover()\" placement=\"right\">+\r\n {{dashboardForm?.selectedViewers?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'whoCanView'\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\" type=\"button\"\r\n (click)=\"activateSelector('whoCanView',true)\"><i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\"></i>\r\n Edit</button>\r\n\r\n </div> \r\n <app-popover #userList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li *ngFor=\"let user of dashboardForm?.selectedViewers | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"\r\n *ngIf=\"!listDetails.nonRemovableUsersList.includes(user.member_id)\"\r\n (click)=\"remove('whoCanView',user)\"></i>\r\n {{ user?.member_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'rcList'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'rcList' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length==0 || activeSelector === 'rcList'\"\r\n src=\"./assets/images/responsibility-center.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length>0 && activeSelector !== 'rcList'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">RESPONSIBILITY CENTER(S)</label>\r\n <div class=\"selectbox\" *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length==0\">\r\n <div class=\"custom-input vx-bg-white vx-fs-13 vx-fw-400 vx-paragraph-txt\"\r\n aria-placeholder=\"Select the Responsibility Center(s) that you would like displayed in the Dashboard, if any.\"\r\n (click)=\"activateSelector('rcList', true)\" [class.error]=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\">\r\n </div>\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-13 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5\" *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length>0\">\r\n <div class=\"left\">\r\n <div class=\"chip-container vx-d-flex vx-align-center\">\r\n <span class=\"chip vx-txt-blue vx-fs-12 vx-fw-400 vx-w-100 vx-pl-2 vx-pr-2 vx-bg-white vx-d-flex\"\r\n *ngFor=\"let rc of dashboardForm?.selectedResponsibilityCenters?.slice(0,2)\"><i\r\n class=\"icons vx-fs-10 vx-fw-400 vx-mr-2\" (click)=\"remove('rc',rc)\"></i>\r\n <span class=\"value\">{{rc.item_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count vx-txt-white vx-fw-500 vx-ml-1 vx-lh-5 vx-bg-blue\"\r\n *ngIf=\"dashboardForm?.selectedResponsibilityCenters?.length > 2\"\r\n type=\"button\" appPopover (click)=\"rcList.popover()\" placement=\"right\">+\r\n {{dashboardForm?.selectedResponsibilityCenters?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'rcList'\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\" type=\"button\"\r\n (click)=\"activateSelector('rcList',true)\"><i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\"></i>\r\n Edit</button>\r\n\r\n </div>\r\n <app-popover #rcList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let rc of dashboardForm?.selectedResponsibilityCenters | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\" (click)=\"remove('rc',rc)\"></i>\r\n {{ rc?.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'responsibilityCategories'\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'responsibilityCategories' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length==0 || activeSelector === 'responsibilityCategories'\"\r\n src=\"./assets/images/category.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length>0 && activeSelector !== 'responsibilityCategories'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">PROGRAM</label>\r\n <div class=\"selectbox\" *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length==0\">\r\n <div class=\"custom-input vx-bg-white vx-fs-13 vx-fw-400 vx-paragraph-txtnput vx-d-flex vx-align-center\"\r\n aria-placeholder=\"Select the Program(s) that you would like displayed in the Dashboard, if any.\"\r\n (click)=\"activateSelector('responsibilityCategories', true)\" [class.error]=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\"></div>\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-13 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5\" *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length>0\">\r\n <div class=\"left\">\r\n <div class=\"chip-container vx-d-flex vx-align-center\">\r\n <span class=\"chip vx-txt-blue vx-fs-12 vx-fw-400 vx-w-100 vx-pl-2 vx-pr-2 vx-bg-white vx-d-flex\"\r\n *ngFor=\"let rCategory of dashboardForm?.selectedResponsibilityCategories?.slice(0,2)\"><i\r\n class=\"icons vx-fs-10 vx-fw-400 vx-mr-2\"\r\n (click)=\"remove('responsibilityCategories',rCategory)\"></i>\r\n <span class=\"value\">{{rCategory.item_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count vx-txt-white vx-fw-500 vx-ml-1 vx-lh-5 vx-bg-blue\"\r\n *ngIf=\"dashboardForm?.selectedResponsibilityCategories?.length > 2\"\r\n type=\"button\" appPopover (click)=\"rCategoryList.popover()\"\r\n placement=\"right\">+\r\n {{dashboardForm?.selectedResponsibilityCategories?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'responsibilityCategories'\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\"\r\n type=\"button\" (click)=\"activateSelector('responsibilityCategories',true)\">\r\n <i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\"></i>\r\n Edit</button>\r\n\r\n </div>\r\n <app-popover #rCategoryList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let rCategory of dashboardForm?.selectedResponsibilityCategories | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"\r\n (click)=\"remove('responsibilityCategories',rCategory)\"></i>\r\n {{ rCategory?.item_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'riskCategories'\"\r\n *ngIf=\"showRiskCategory && isManageRisk\"\r\n [class.disabled]=\" activeSelector && activeSelector !== 'riskCategories' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.selectedRiskCategories?.length==0 || activeSelector === 'riskCategories'\"\r\n src=\"./assets/images/category.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedRiskCategories?.length>0 && activeSelector !== 'riskCategories'\"\r\n class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\" *ngIf=\"isManageRisk\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">RISK CATEGORIES</label>\r\n <div class=\"selectbox\" *ngIf=\"dashboardForm?.selectedRiskCategories?.length==0\">\r\n <div class=\"custom-input vx-bg-white vx-fs-13 vx-fw-400 vx-paragraph-txt\"\r\n aria-placeholder=\"Select the Risk Categories that you would like displayed in the Dashboard, if any.\"\r\n (click)=\"activateSelector('riskCategories', true)\" [class.error]=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\"></div>\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-13 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5 \" *ngIf=\"dashboardForm?.selectedRiskCategories?.length>0\">\r\n <div class=\"left\">\r\n <div class=\"chip-container vx-d-flex vx-align-center\">\r\n <span class=\"chip vx-txt-blue vx-fs-12 vx-fw-400 vx-w-100 vx-pl-2 vx-pr-2 vx-bg-white vx-d-flex\"\r\n *ngFor=\"let riskCategory of dashboardForm?.selectedRiskCategories?.slice(0,2)\"><i\r\n class=\"icons vx-fs-10 vx-fw-400 vx-mr-2\"\r\n (click)=\"remove('riskCategory',riskCategory)\"></i>\r\n <span class=\"value\">{{riskCategory.category_name}}</span></span>\r\n\r\n </div>\r\n <button class=\"count vx-txt-white vx-fw-500 vx-ml-1 vx-lh-5 vx-bg-blue\" *ngIf=\"dashboardForm?.selectedRiskCategories?.length > 2\"\r\n type=\"button\" appPopover (click)=\"riskList.popover()\" placement=\"right\">+\r\n {{dashboardForm?.selectedRiskCategories?.slice(2).length}}</button>\r\n </div>\r\n <button *ngIf=\"activeSelector !== 'riskCategories'\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\" type=\"button\"\r\n (click)=\"activateSelector('riskCategories',true)\"><i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\"></i>\r\n Edit</button>\r\n\r\n </div>\r\n <app-popover #riskList [dontCloseonClick]=\"true\">\r\n <div class=\"action-list\">\r\n <ul class=\"action-item\">\r\n <li\r\n *ngFor=\"let riskCategory of dashboardForm?.selectedRiskCategories | slice: 2; let j = index\">\r\n <div class=\"avatar-card\">\r\n <span class=\"value\">\r\n <i class=\"icons\"\r\n (click)=\"remove('riskCategory',riskCategory)\"></i>\r\n {{ riskCategory?.category_name }}\r\n </span>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </app-popover>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.disabled]=\" activeSelector && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"dashboardForm?.displayCriteria?.length==0\" src=\"./assets/images/who.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.displayCriteria?.length>0 \" class=\"checkIcon\"\r\n xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">DISPLAY CRITERIA</label>\r\n <div class=\"radio-group\" *ngIf=\"showCriteria\" >\r\n <app-cs-radio [checked]=\"dashboardForm.displayCriteria=='or'\"\r\n (checkedEvent)=\"dashboardForm.displayCriteria='or'\">\r\n Those Items that have been assigned to either the selected Responsibility Center(s) or the selected Categories.</app-cs-radio>\r\n\r\n <app-cs-radio [checked]=\"dashboardForm.displayCriteria=='and'\"\r\n (checkedEvent)=\"dashboardForm.displayCriteria='and'\">\r\n Those Items that have been assigned to both the selected Responsibility Center(s) and the selected Categories.</app-cs-radio>\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" \r\n [class.disabled]=\" activeSelector && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"!dashboardForm?.selectedFromDate || !dashboardForm?.selectedToDate\" src=\"./assets/images/when.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm?.selectedFromDate && dashboardForm?.selectedToDate\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">TIMEFRAME</label>\r\n <label class=\"vx-control-panel-sub-label\">Select how long you would like the information\r\n selected to be displayed for. If no timeframe is selected, the information will be\r\n displayed permanently.</label>\r\n <div class=\"input-group vx-d-flex vx-justify-between\">\r\n <div class=\"date-select\">\r\n <i class=\"icons\"></i>\r\n <input type=\"text\"\r\n [value]=\"dashboardForm?.selectedFromDate | date: 'dd MMM yyyy'\"\r\n [placeholder]=\"'From'\" (click)=\"openFromDatePicker()\" readonly>\r\n <dp-date-picker #fromDatePicker [(ngModel)]=\"dashboardForm.selectedFromDate\"\r\n placeholder=\"Select Date\"\r\n (onSelect)=\"closeFromDatePicker(); datePickerOverlay = false\"\r\n [config]=\"fromDatePickerConfig\"></dp-date-picker>\r\n <div class=\"overlay\" (click)=\"closeFromDatePicker()\" *ngIf=\"datePickerOverlay\">\r\n </div>\r\n </div>\r\n <div class=\"date-select\" *ngIf=\"!hideToDate\" [class.disabled]=\"!dashboardForm?.selectedFromDate \">\r\n <i class=\"icons\"></i>\r\n <input type=\"text\" [value]=\"dashboardForm?.selectedToDate | date: 'dd MMM yyyy'\"\r\n [placeholder]=\"'To'\" (click)=\"openToDatePicker()\" readonly>\r\n <dp-date-picker #toDatePicker [(ngModel)]=\"dashboardForm.selectedToDate\"\r\n placeholder=\"Select Date\"\r\n (onSelect)=\"closeToDatePicker(); datePickerOverlay = false\"\r\n [config]=\"toDatePickerConfig\"></dp-date-picker>\r\n <div class=\"overlay\" (click)=\"closeToDatePicker()\" *ngIf=\"datePickerOverlay\">\r\n </div>\r\n </div>\r\n </div>\r\n <p class=\"vx-txt-error\" [appScrollInView]=\"true\"\r\n *ngIf=\"submitted && (dashboardForm.selectedFromDate && (!dashboardForm.selectedToDate))\">\r\n Select a time-frame.</p>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"form-group-row\" [class.active]=\"activeSelector === 'frequency'\" \r\n [class.disabled]=\" activeSelector && activeSelector !== 'frequency' && activeSelector !== 'name'\">\r\n <div class=\"image\">\r\n <img *ngIf=\"!dashboardForm.frequencyMessage\" src=\"./assets/images/send-resolution.svg\" alt=\"\">\r\n <svg *ngIf=\"dashboardForm.frequencyMessage\" class=\"checkIcon\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 52 52\">\r\n <circle class=\"checkIcon__circle\" cx=\"26\" cy=\"26\" r=\"25\" fill=\"none\" />\r\n <path class=\"checkIcon__check\" fill=\"none\" d=\"M14.1 27.2l7.1 7.2 16.7-16.8\" />\r\n </svg>\r\n </div>\r\n <div class=\"form\">\r\n <div class=\"vx-form-group vx-d-block vx-mb-4\">\r\n <label class=\"vx-control-panel vx-fs-11 vx-fw-500 vx-lh-4 vx-d-block vx-mb-2 vx-tt-uppercase vx-w-100 vx-text-left vx-label-txt vx-mt-1\">\r\n Email Summaries </label>\r\n <label class=\"vx-control-panel-sub-label\">\r\n If you would like to send a summary of this Dashboard,\r\n please select a frequency(By default VComply sends a weekly Summary).\r\n </label>\r\n <div class=\"selectbox\" *ngIf=\"!dashboardForm.frequencyMessage\">\r\n <input type=\"text\" placeholder=\"Email Summaries\" readonly\r\n (click)=\"activateSelector('frequency', true)\">\r\n </div>\r\n <div class=\"selected vx-p-2 vx-fs-14 vx-fw-400 vx-w-100 vx-d-flex vx-text-center vx-justify-between vx-paragraph-txt vx-lh-5\" *ngIf=\"dashboardForm.frequencyMessage\">\r\n <div class=\"left frequency-left vx-text-left \" [innerHTML]=\"dashboardForm.frequencyMessage\" [arTooltip]=\"dashboardForm.frequencyMessage\" placement=\"bottom-left\" type=\"black\" delay=\"0\" [tooltipMandatory] =\"true\">\r\n </div>\r\n\r\n <button *ngIf=\"dashboardForm.frequencyMessage\" class=\"edit vx-tt-uppercase vx-fs-11 vx-fw-500 vx-pt-0 vx-pb-0 vx-pl-1 vx-pr-1 vx-d-block vx-txt-blue vx-d-block\" type=\"button\"\r\n (click)=\"activateSelector('frequency',true)\"><i class=\"icons vx-fs-8 vx-fw-400 vx-mr-1\"></i>\r\n Edit</button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"button-block\">\r\n <button class=\"vx-btn block primary\" [disabled]=\"activeSelector && activeSelector !== 'name'\" (click)=\"configureDashboard()\">Next:\r\n Configure\r\n Widgets</button>\r\n </div>\r\n </div>\r\n\r\n\r\n <button class=\"close-dialog\" type=\"button\" [disabled]=\"activeSelector && activeSelector !== 'name'\" (click)=\"close.emit({mode:'discard'})\" [arTooltip]=\"'[Esc] to close'\" placement=\"left\" type=\"black\" delay=\"0\" [tooltipMandatory] =\"true\">\r\n <i class=\"icons\"></i>\r\n </button>\r\n <div class=\"global-confirmation-alert\" *ngIf=\"submitted && dashboardForm?.selectedResponsibilityCenters?.length==0 && \r\n dashboardForm?.selectedResponsibilityCategories?.length==0 &&\r\n dashboardForm?.selectedRiskCategories?.length==0\">\r\n <div class=\"global-confirmation-alert-top\">\r\n <span class=\"icon-block\">\r\n <i class=\"icons\"></i>\r\n </span>\r\n <p class=\"text\" *ngIf=\"showRiskCategory\">Select a Responsibility Center, Program or Risk Category.</p>\r\n <p class=\"text\" *ngIf=\"!showRiskCategory\">Select a Responsibility Center or Program.</p>\r\n\r\n </div>\r\n <div class=\"global-confirmation-alert-bottom\">\r\n <p class=\"message\"></p>\r\n <div class=\"button-group\">\r\n <button class=\"fill\" type=\"button\" (click)=\"submitted=false\">OKAY</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<app-smiley-dialog \r\n *ngIf=\"isSmiley\"\r\n [message]=\"smileyMessage\">\r\n</app-smiley-dialog>\r\n\r\n<app-configure-widgets *ngIf=\"openConfigureWidgets\" [mode]=\"mode\" [displayedWidgets]=\"displayedWidgets\"\r\n [showRisk]=\"showRiskWidgets\" [showCompliance]=\"showComplianceWidgets\" [selectedWidgetsData]=\"selectedWidgets\"\r\n (widgetsDataModified)=\"setSelectedWidgets($event)\" (closeConfigureWidgets)=\"closeConfigureWidgets($event)\">\r\n</app-configure-widgets>",
|
|
849
|
-
providers: [TextCountPipe],
|
|
850
|
-
styles: ["@import\"https://cdn.v-comply.com/design-system/css/mixin/mixin.css\";@import\"https://cdn.v-comply.com/design-system/css/color/color.css\";@import\"https://cdn.v-comply.com/design-system/css/icons/icons.css\";@import\"https://cdn.v-comply.com/design-system/css/display/display.css\";@import\"https://cdn.v-comply.com/design-system/css/dialog/dialog.css\";@import\"https://cdn.v-comply.com/design-system/css/button/button.css\";@import\"https://cdn.v-comply.com/design-system/css/text/text.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-top.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-right.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/margin/margin-left.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-top.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-right.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-bottom.css\";@import\"https://cdn.v-comply.com/design-system/css/padding/padding-left.css\";@import\"https://cdn.v-comply.com/design-system/css/alignment/alignment.css\";@import\"https://cdn.v-comply.com/design-system/css/width/width.css\";@import\"https://cdn.v-comply.com/design-system/css/animate/animation.css\";@import\"https://cdn.v-comply.com/design-system/css/animate/animate-slide-right.css\";::ng-deep .create-dashboard-container{width:100vw;background:#161B2FCC}::ng-deep .create-dashboard .more-option{width:calc(100% - 500px);border-right:1px solid #F1F1F1;float:left}::ng-deep .create-dashboard .vx-dialog-container{background-color:#fff;border:none;position:relative}::ng-deep .create-dashboard .vx-dialog-container button.close-dialog{display:flex;position:absolute;top:0px;right:0px;height:36px;width:36px;font-size:18px;color:#161b2f;cursor:pointer;background:transparent;border:none;border-radius:4px;z-index:2;align-items:center;justify-content:center}::ng-deep .create-dashboard .vx-dialog-container button.close-dialog:hover{background:#F1F1F1}::ng-deep .create-dashboard .vx-dialog-container button.close-dialog:disabled{pointer-events:none;filter:grayscale(1);opacity:.3}::ng-deep .form-group{position:relative}::ng-deep .form-group .vx-dialog-body-container{padding:36px 28px 0 40px!important;height:calc(100vh - 50px);overflow:auto;margin-left:-22px;background-color:transparent;position:relative;border-radius:0 0 0 30px;background:transparent}@-moz-document url-prefix(){::ng-deep .form-group .vx-dialog-body-container.hidden-scroll{overflow:hidden}}::ng-deep .form-group .vx-dialog-body-container .form-group-row{display:flex}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image{width:36px;min-width:36px;height:36px;margin-left:-36px;margin-right:20px;margin-top:28px;display:flex;align-items:center;justify-content:center}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image img{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .checkIcon{width:32px;height:32px;background:#ffffff;border-radius:50%;stroke-width:4;stroke:#34aa44;stroke-miterlimit:10;box-shadow:inset 0 0 #34aa44;animation:fillCheck .4s ease-in-out .4s forwards,scale .3s ease-in-out .9s both;margin-top:0}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .checkIcon__circle{stroke-dasharray:166;stroke-dashoffset:166;stroke-width:2;stroke-miterlimit:10;stroke:#34aa44;fill:none;animation:strokeCheck .6s cubic-bezier(.65,0,.45,1) forwards}::ng-deep .form-group .vx-dialog-body-container .form-group-row .image .checkIcon__check{transform-origin:50% 50%;stroke-dasharray:48;stroke-dashoffset:48;animation:strokeCheck .3s cubic-bezier(.65,0,.45,1) .8s forwards}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group{position:relative}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input{height:40px;border-radius:4px;border:1px solid #dbdbdb;outline:none;transition:all .2s ease-in-out}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input::placeholder{color:#747576}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input+marx-editor{margin-top:8px;display:block}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group input:focus{border-color:#1e5dd3;box-shadow:0 0 5px #1e5dd345}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selectbox:after{border-left:none;border-bottom:1px solid #707070;border-right:1px solid #707070;border-top:none;content:\"\";display:inline-block;right:15px;position:absolute;top:calc(50% + 8px);width:5px;height:5px;transform:rotate(45deg)}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selectbox:hover{border-color:#1e5dd3;box-shadow:0 0 5px #1e5d08}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected{height:40px;border-radius:4px;border:1px solid #f1f1f1;background:#fbfbfb;outline:none;position:relative;transition:all .2s ease-in-out}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .edit{border:1px solid #F1F1F1;border-radius:2px;background:#FFFFFF;outline:none;cursor:pointer;height:24px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .left{width:auto;display:flex}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .left.frequency-left{text-overflow:ellipsis;white-space:nowrap;overflow:hidden;display:block;width:calc(100% - 70px)}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container{width:auto}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container .chip{border-radius:2px;box-shadow:0 0 3px #1e5dd31a;height:24px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:24px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container .chip i{cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container .chip .value{max-width:100px;display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .chip-container span.chip+span.chip{margin-left:4px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .selected .count{border-radius:2px;height:24px;padding:2px 8px;border:1px solid #1E5DD3;cursor:pointer;outline:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group{display:flex;position:relative}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group input::placeholder{color:#747576}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group span.counter{background:transparent;color:#161b2f;font-size:9px;font-weight:500;position:absolute;top:0px;right:0px;border-radius:3px;height:16px;text-align:center;line-height:16px;padding:0 2px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group marx-editor{width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group marx-editor .editor-container .editable-block.bottom:before{opacity:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-form-group .vx-input-group.vx-input-group{margin-top:8px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor{display:block}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container{border-radius:4px;border-color:#dbdbdb}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:focus-within,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:hover{border-color:#1e5dd3}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:focus-within .editor-tools,::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container:hover .editor-tools{border-top-color:#1e5dd3!important;transition:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editable-block{min-height:60px;padding:11px 15px;line-height:20px;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;max-height:90px}@media not all and (min-resolution: .001dpcm){@supports (-webkit-appearance: none){::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editable-block:before{opacity:.72}}}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools{border-color:#dbdbdb;border-radius:0 0 2px 2px;transition:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button{height:22px!important;width:22px!important;padding:0 5px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button svg{height:22px;width:12px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col button.submit{width:80px!important;line-height:22px;justify-content:center}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form marx-editor .editor-container .editor-tools app-editor-menu .editor-menu .col .popover.small ul.option-list li button{width:100%!important;height:auto!important}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .custom-input{height:2.5rem;border-radius:.25rem;border:1px solid #DBDBDB;background:#FFFFFF;outline:none;padding:.1875rem .75rem;line-height:1.25rem;font-size:13px;color:#747576;font-weight:400;transition:all .2s ease-in-out;width:100%;cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .custom-input:empty:not(:focus):before{content:attr(aria-placeholder);line-height:16px;font-size:12px;width:94%;display:block;pointer-events:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .custom-input.error{border:1px solid #d93b41}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel i{font-size:12px;color:#1e5dd3;margin-left:7px;cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-control-panel-sub-label{color:#747576;font-size:.6875rem;font-weight:400;line-height:1rem;margin-bottom:.5rem;display:block;text-transform:none;width:100%;margin-top:0}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .vx-control-panel-sub-label span.required{color:#eb2424}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel+.vx-control-panel-sub-label{margin-top:-.5rem}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio{margin-top:4px;display:block;width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item{width:100%;position:relative}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item span.radio{position:absolute;top:17px;left:12px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item span.value{font-size:11px;text-transform:uppercase;border:1px solid #DBDBDB;border-radius:4px;padding:8px 8px 8px 36px;width:100%;display:flex;justify-content:space-between;margin:0;max-width:100%;font-weight:500;color:#707070}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item span.value i{font-size:12px;color:#1e5dd3}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item svg{position:absolute;top:17px;left:12px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio label.radio-item input:checked~span.value{background:#EEFCF0;border-color:#34aa44}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .radio-group app-cs-radio+app-cs-radio{margin-top:.5rem}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select{position:relative;width:calc(50% - .25rem);overflow:hidden;height:40px}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select input{padding-left:36px!important;padding:8px 12px;line-height:20px;font-size:13px;color:#747576;font-weight:400;width:100%;cursor:pointer}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select i{display:flex;justify-content:center;align-items:center;height:39px;width:14px;position:absolute;left:12px;top:0;color:#bcbcbc;font-size:14px;pointer-events:none;z-index:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form .date-select.disabled{pointer-events:none;filter:grayscale(1);opacity:.3}::ng-deep .form-group .vx-dialog-body-container .form-group-row .form label.vx-control-panel span.sub-label{color:#747576;font-size:.6875rem;font-weight:400;line-height:1rem;text-transform:none;width:100%}::ng-deep .form-group .vx-dialog-body-container .form-group-row.disabled{pointer-events:none;filter:grayscale(1);opacity:.3}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active{pointer-events:unset;filter:grayscale(0);opacity:1}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .image{filter:grayscale(0)}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .image:before{display:none}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form{opacity:1;filter:grayscale(0)}::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form .custom-input,::ng-deep .form-group .vx-dialog-body-container .form-group-row.active .form input[type=text]{border-color:#1e5dd3;box-shadow:0 0 5px #1e5d08}::ng-deep .form-group .vx-dialog-body-container:after{content:\"\";width:100%;display:block;height:30px;position:sticky;right:0;bottom:0px;left:0;z-index:6;background:linear-gradient(to bottom,rgba(255,255,255,0) 0%,rgba(255,255,255,.75) 22%,#ffffff 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=\"#00ffffff\",endColorstr=\"#ffffff\",GradientType=0)}::ng-deep .form-group .button-block{position:relative;z-index:2}::ng-deep .form-group .button-block button{height:50px;line-height:48px!important}::ng-deep .form-group .button-block button:disabled{opacity:.3}::ng-deep .form-group.disabled{pointer-events:none;z-index:2}::ng-deep .form-group.disabled .image{position:relative;filter:grayscale(1)}::ng-deep .form-group.disabled .image:before{content:\"\";position:absolute;top:0;right:0;bottom:0;left:0;background:#FFFFFF;opacity:.7}::ng-deep .form-group.disabled .form{opacity:.3;filter:grayscale(1)}@keyframes strokeCheck{to{stroke-dashoffset:0}}@keyframes fillCheck{to{box-shadow:inset 0 0 0 2px #34aa44}}.action-list{width:220px}.action-list ul{padding:0;margin:0;animation:scale-up-center .2s cubic-bezier(.39,.575,.565,1) both;background:#ffffff;box-shadow:0 3px 6px #1c5bd140;border-radius:4px;max-height:220px;overflow:auto}.action-list ul.action-item{display:block}.action-list ul.action-item li{list-style:none;border:none;border-bottom:1px solid #f1f1f1;display:block;width:100%;padding:0;background:transparent;border-radius:0;margin:0;height:auto;justify-content:flex-start;box-shadow:none}.action-list ul.action-item li button{color:#6e717e;text-align:left;text-decoration:none;cursor:pointer;background:transparent;font-size:12px;text-transform:capitalize;display:flex;width:100%;padding:7.5px 11px;border:none}.action-list ul.action-item li button i{font-size:17px;margin-right:10px;color:#1c5bd1}.action-list ul.action-item li button:hover{background:#f3f3f3}.action-list ul.action-item li .avatar-card{display:flex;align-items:center;width:100%;padding:7.5px}.action-list ul.action-item li .avatar-card.within-con{display:block}.action-list ul.action-item li .avatar-card .avatar{height:24px;width:24px!important;overflow:hidden;background:#4681ef;color:#fff;font-size:10px;display:inline-flex;margin-right:5px;border-radius:50%;align-items:center;justify-content:center;text-transform:uppercase}.action-list ul.action-item li .avatar-card .avatar img{width:100%}.action-list ul.action-item li .avatar-card .avatar+span.value{width:calc(100% - 29px)}.action-list ul.action-item li .avatar-card span.value{width:100%;color:#6e717e;text-decoration:none;background:transparent;font-size:12px;text-transform:capitalize;display:block;font-weight:400;text-align-last:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:20px}.action-list ul.action-item li .avatar-card span.value i{font-size:8px;color:#1c5bd1;cursor:pointer;margin-right:5px}.action-list ul.action-item li .avatar-card.no-image{display:block}.action-list ul.action-item li .avatar-card.no-image span.value{width:100%;display:block}.action-list ul.action-item li .chip-item{color:#1e5dd3;padding:10px;display:flex;align-items:center}.action-list ul.action-item li .chip-item i{margin-right:7px;font-size:10px;cursor:pointer;display:inline-flex}.action-list ul.action-item li .chip-item span{display:block;width:auto;max-width:calc(100% - 17px);font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.action-list ul.action-item li .chip-item span.chip-block{display:block;width:100%}.action-list ul.action-item li .chip-item span.id{font-size:9px}.action-list ul.action-item li .within{display:flex;align-items:center;justify-content:flex-start}.action-list ul.action-item li .within .block{background:#f1f1f1;border-radius:2px;padding:0 2px;line-height:14px;font-size:9px;font-weight:500;color:#042e7d;margin-right:6px;display:block;text-transform:uppercase}.action-list ul.action-item li .within .data{width:100%;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#747576;font-size:11px;font-weight:400;line-height:17px}.action-list ul.action-item li:first-child{animation:action-list-open .25s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(2){animation:action-list-open .35s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(3){animation:action-list-open .45s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(4){animation:action-list-open .55s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(5){animation:action-list-open .65s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(6){animation:action-list-open .75s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(7){animation:action-list-open .85s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(8){animation:action-list-open .95s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(9){animation:action-list-open 1.05s cubic-bezier(.25,.46,.45,.94) both}.action-list ul.action-item li:nth-child(10){animation:action-list-open 1.15s cubic-bezier(.25,.46,.45,.94) both}.global-confirmation-alert{display:block;position:absolute;z-index:9;right:0;bottom:0;left:0;background:#d93b41}.global-confirmation-alert-top{display:flex;align-items:center;justify-content:flex-start;padding:20px 20px 12px}.global-confirmation-alert span.icon-block{height:36px;width:36px;border-radius:50%;background:#FFFFFF;border:1px solid #DCDCDC;display:flex;justify-content:center;align-items:center;margin-right:16px}.global-confirmation-alert span.icon-block i{color:#d93b41;font-size:12px}.global-confirmation-alert p.text{color:#fff;font-size:14px;font-weight:300;margin:0;width:calc(100% - 52px)}.global-confirmation-alert-bottom{display:flex;align-items:center;padding:0 12px 12px 72px;background:#d93b41}.global-confirmation-alert-bottom .button-group{display:flex}.global-confirmation-alert-bottom p.message{font-size:14px;font-weight:500;margin:0;line-height:20px;color:#fff}.global-confirmation-alert button{height:24px;width:64px;border:1px solid #000;border-radius:2px;display:flex;align-items:center;justify-content:center;line-height:22px;cursor:pointer;font-size:11px;text-transform:uppercase;font-weight:500;padding:0}.global-confirmation-alert button+button{margin-left:4px}.global-confirmation-alert button.fill{background:#ffffff;color:#1e5dd3;border-color:#fff}.global-confirmation-alert button.outline{background:transparent;color:#fff;border-color:#fff}::ng-deep marx-modal .popup-modal-background{background-color:#161b2fcc!important}\n"]
|
|
851
|
-
},] }
|
|
852
|
-
];
|
|
853
|
-
CreateDashboardComponent.ctorParameters = () => [
|
|
854
|
-
{ type: CreateDashboardService },
|
|
855
|
-
{ type: PaginationService },
|
|
856
|
-
{ type: ChangeDetectorRef },
|
|
857
|
-
{ type: SnackBarService },
|
|
858
|
-
{ type: PopoverService },
|
|
859
|
-
{ type: ConfigureWidgetsService },
|
|
860
|
-
{ type: TextCountPipe }
|
|
861
|
-
];
|
|
862
|
-
CreateDashboardComponent.propDecorators = {
|
|
863
|
-
mode: [{ type: Input }],
|
|
864
|
-
dashboardId: [{ type: Input }],
|
|
865
|
-
close: [{ type: Output }],
|
|
866
|
-
createdBy: [{ type: Input }],
|
|
867
|
-
fromDatePicker: [{ type: ViewChild, args: ['fromDatePicker',] }],
|
|
868
|
-
toDatePicker: [{ type: ViewChild, args: ['toDatePicker',] }],
|
|
869
|
-
configureWidget: [{ type: Input }],
|
|
870
|
-
onKeydownHandler: [{ type: HostListener, args: ['document:keydown.escape', ['$event'],] }]
|
|
871
|
-
};
|
|
872
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWRhc2hib2FyZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jcmVhdGUtZGFzaGJvYXJkL3NyYy9saWIvY3JlYXRlLWRhc2hib2FyZC1jb250YWluZXIvY3JlYXRlLWRhc2hib2FyZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd0SSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUdsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFJL0UsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFDL0IsT0FBTyxLQUFLLGlCQUFpQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0FBUWhDLE1BQU0sT0FBTyx3QkFBd0I7SUEwSG5DLFlBQ1Usc0JBQThDLEVBQzlDLGlCQUFvQyxFQUNwQyxHQUFzQixFQUN0QixRQUF5QixFQUMxQixjQUE4QixFQUM3Qix1QkFBZ0QsRUFDaEQsU0FBd0I7UUFOeEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUM5QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLFFBQUcsR0FBSCxHQUFHLENB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VSxDQUFFLGlCQUFpQixLQUFFLENBQUMsSUFBSSxDQUFBLFVBQVUsYUFBVixVQUFVLHVCQUFWLFVBQVUsQ0FBRSxNQUFNLEtBQUUsQ0FBQyxFQUFFOzRCQUM1RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQzt5QkFDMUI7d0JBQUEsQ0FBQzt3QkFDRixNQUFNO3FCQUNQO2lCQUNGO1lBQ0gsQ0FBQyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUM7OztZQWw0QkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxzQkFBc0I7Z0JBQ2hDLGs0dUNBQWdEO2dCQUVoRCxTQUFTLEVBQUUsQ0FBQyxhQUFhLENBQUM7O2FBQzNCOzs7WUFwQlEsc0JBQXNCO1lBQ3RCLGlCQUFpQjtZQUpqQixpQkFBaUI7WUFPakIsZUFBZTtZQU9mLGNBQWM7WUFOZCx1QkFBdUI7WUFPdkIsYUFBYTs7O21CQWFuQixLQUFLOzBCQUNMLEtBQUs7b0JBQ0wsTUFBTTt3QkFDTixLQUFLOzZCQUVMLFNBQVMsU0FBQyxnQkFBZ0I7MkJBQzFCLFNBQVMsU0FBQyxjQUFjOzhCQUV4QixLQUFLOytCQThITCxZQUFZLFNBQUMseUJBQXlCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBFZGl0b3JDb25maWcgfSBmcm9tICd2Y29tcGx5LWVkaXRvcic7XHJcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQsIElEYXRlUGlja2VyQ29uZmlnIH0gZnJvbSAnbmcyLWRhdGUtcGlja2VyJztcclxuaW1wb3J0IHsgQ3JlYXRlRGFzaGJvYXJkU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY3JlYXRlLWRhc2hib2FyZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGFnaW5hdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3BhZ2luYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJMaXN0Q29uZmlndXJhdGlvbiB9IGZyb20gJy4vdXNlci1saXN0L3VzZXItbGlzdC5jb25maWcnO1xyXG5pbXBvcnQgeyBDcmVhdGVEYXNoYm9hcmRGb3JtIH0gZnJvbSAnLi9jcmVhdGUtZGFzaGJvYXJkLWNvbmZpZyc7XHJcbmltcG9ydCB7IFNuYWNrQmFyU2VydmljZSB9IGZyb20gJy4uL3VpLWtpdC9zbmFjay1iYXIvc25hY2stYmFyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maWd1cmVXaWRnZXRzU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY29uZmlndXJlLXdpZGdldHMuc2VydmljZSc7XHJcbmltcG9ydCB7IGZpbmRJbmRleCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcblxyXG5pbXBvcnQgKiBhcyBkYXlqcyBmcm9tICdkYXlqcyc7XHJcbmltcG9ydCAqIGFzIGN1c3RvbVBhcnNlRm9ybWF0IGZyb20gJ2RheWpzL3BsdWdpbi9jdXN0b21QYXJzZUZvcm1hdCc7XHJcbmltcG9ydCB7IFBvcG92ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vdWkta2l0L3BvcG92ZXIvcG9wb3Zlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGV4dENvdW50UGlwZSB9IGZyb20gJy4vcGlwZXMvdGV4dC1jb3VudC5waXBlJztcclxuZGF5anMuZXh0ZW5kKGN1c3RvbVBhcnNlRm9ybWF0KTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLWNyZWF0ZS1kYXNoYm9hcmQnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUtZGFzaGJvYXJkLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jcmVhdGUtZGFzaGJvYXJkLmNvbXBvbmVudC5sZXNzJ10sXHJcbiAgcHJvdmlkZXJzOiBbVGV4dENvdW50UGlwZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIENyZWF0ZURhc2hib2FyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuXHJcbiAgYWN0aXZlU2VsZWN0b3IgPSAnJztcclxuICBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIG1vZGUgPSAnQ1JFQVRFJztcclxuICBASW5wdXQoKSBkYXNoYm9hcmRJZCA9ICcnO1xyXG4gIEBPdXRwdXQoKSBjbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBASW5wdXQoKSBjcmVhdGVkQnkgPSAwO1xyXG5cclxuICBAVmlld0NoaWxkKCdmcm9tRGF0ZVBpY2tlcicpIGZyb21EYXRlUGlja2VyITogRGF0ZVBpY2tlckNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKCd0b0RhdGVQaWNrZXInKSB0b0RhdGVQaWNrZXIhOiBEYXRlUGlja2VyQ29tcG9uZW50O1xyXG4gIGFuaW1hdGlvbiA9IHRydWU7XHJcbiAgQElucHV0KCkgY29uZmlndXJlV2lkZ2V0ID0gZmFsc2VcclxuXHJcbiAgdG90YWxQYWdlcyA9IDE7XHJcbiAgdG90YWxMaXN0ID0gMTtcclxuICB1c2Vyc0xpc3Q6IGFueVtdID0gW107XHJcbiAgdkxvYWRlciA9IHRydWU7XHJcbiAgdXNlckxpc3RMb2FkZWQgPSBmYWxzZTtcclxuICByY0xpc3RMb2FkZWQgPSBmYWxzZTtcclxuICBjb21wbGlhbmNlQ2F0ZWdvcmllc0xpc3RMb2FkZWQgPSBmYWxzZTtcclxuICByaXNrQ2F0ZWdvcnlMaXN0TG9hZGVkID0gZmFsc2U7XHJcbiAgaGlkZVRvRGF0ZSA9IGZhbHNlO1xyXG4gIGxpc3REZXRhaWxzOiBVc2VyTGlzdENvbmZpZ3VyYXRpb24gPSB7XHJcbiAgICBzZWxlY3RlZFVzZXJzTGlzdDogW10sXHJcbiAgICBub25SZW1vdmFibGVVc2Vyc0xpc3Q6IFtdLFxyXG4gICAgZGlzcGxheUVsZW1lbnRLZXk6ICdtZW1iZXJfbmFtZScsXHJcbiAgICBlbGVtZW50SWRLZXk6ICdtZW1iZXJfaWQnLFxyXG4gICAgdG9vbHRpcEtleTogJ21lbWJlcl9lbWFpbCcsXHJcbiAgfTtcclxuICBkYXNoYm9hcmREZXNjcmlwdGlvbjogRWRpdG9yQ29uZmlnID0ge1xyXG4gICAgcGxhY2Vob2xkZXI6ICdEZXNjcmlwdGlvbiAoTWF4IGxpbWl0OiAyNTAgY2hhcmFjdGVycyknLFxyXG4gICAgbW9kZTogJ3ByaW1lJyxcclxuICAgIGlkOiAnZGVzY3JpcHRpb24nXHJcbiAgfVxyXG4gIHJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllc1RyZWU6IGFueSA9IHtcclxuICAgIHJlZ3VsYXRpb25zOiB7XHJcbiAgICAgIGxpc3Q6IFtdLFxyXG4gICAgICBzZWxlY3RlZExpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgc3RhbmRhcmRzOiB7XHJcbiAgICAgIGxpc3Q6IFtdLFxyXG4gICAgICBzZWxlY3RlZExpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgaW50ZXJuYWxDb250cm9sczoge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfSxcclxuICAgIG90aGVyczoge1xyXG4gICAgICBsaXN0OiBbXSxcclxuICAgICAgc2VsZWN0ZWRMaXN0OiBbXVxyXG4gICAgfVxyXG4gIH07XHJcbiAgYWxsQ29tcGxpYW5jZUNhdGVnb3JpZXM6IGFueVtdID0gW107XHJcbiAgYWxsUmlza0NhdGVnb3JpZXM6IGFueVtdID0gW107XHJcbiAgc2hvd1Jpc2tDYXRlZ29yeSA9IGZhbHNlO1xyXG4gIHNob3dDcml0ZXJpYSA9IHRydWU7XHJcblxyXG4gIGRhc2hib2FyZEZvcm06IENyZWF0ZURhc2hib2FyZEZvcm0gPSB7XHJcbiAgICBkYXNoYm9hcmROYW1lOiAnJyxcclxuICAgIGRhc2hib2FyZERlc2NyaXB0aW9uVGV4dDogJycsXHJcbiAgICBzZWxlY3RlZFZpZXdlcnM6IFtdLFxyXG4gICAgc2VsZWN0ZWRGcm9tRGF0ZTogdW5kZWZpbmVkLFxyXG4gICAgc2VsZWN0ZWRUb0RhdGU6IHVuZGVmaW5lZCxcclxuICAgIHNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzOiBbXSxcclxuICAgIHNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzOiBbXSxcclxuICAgIHNlbGVjdGVkUmlza0NhdGVnb3JpZXM6IFtdLFxyXG4gICAgZGlzcGxheUNyaXRlcmlhOiAnb3InLFxyXG4gICAgY29uZmlndXJlV2lkZ2V0OiBbXSxcclxuICAgIGZyZXF1ZW5jeURldGFpbHM6ICcnLFxyXG4gICAgc2VsZWN0ZWRGcmVxdWVuY3lUeXBlOiAnJyxcclxuICAgIHNlbGVjdGVkRnJlcXVlbmNpZXM6IFswXSxcclxuICAgIGZyZXF1ZW5jeU1lc3NhZ2U6ICcnLFxyXG4gICAgZnJlcXVlbmN5RGF0ZTogMVxyXG4gIH1cclxuXHJcblxyXG4gIG9wZW5Db25maWd1cmVXaWRnZXRzID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRXaWRnZXRzOiBhbnkgPSBbXTtcclxuICBkaXNwbGF5ZWRXaWRnZXRzOiBhbnkgPSBbXVxyXG5cclxuXHJcbiAgcmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdCA9IFtdO1xyXG4gIGRhdGVQaWNrZXJPdmVybGF5ID0gZmFsc2U7XHJcbiAgZGF5TmFtZXMgPSBbJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknLCAnU3VuZGF5J107XHJcbiAgbW9udGhOYW1lcyA9IFsnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlciddO1xyXG4gIHF1YXJ0ZXJzID0gWydKYW51YXJ5LCBBcHJpbCwgSnVseSwgT2N0b2JlcicsICdGZWJydWFyeSwgTWF5LCBBdWd1c3QsIE5vdmVtYmVyJywgJ01hcmNoLCBKdW5lLCBTZXB0ZW1iZXIsIERlY2VtYmVyJ107XHJcblxyXG4gIGNhdGVnb3J5TGlzdExvYWRlZCA9IGZhbHNlO1xyXG4gIHNob3dSaXNrV2lkZ2V0cyA9IGZhbHNlO1xyXG4gIHNob3dDb21wbGlhbmNlV2lkZ2V0cyA9IGZhbHNlO1xyXG4gIGlzTWFuYWdlUmlzazogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICByaXNrQ2F0ZWdvcnlMaXN0ID0ge1xyXG4gICAgc3RyYXRlZ2ljOiB7XHJcbiAgICAgIGxpc3Q6IFtdLFxyXG4gICAgICBzZWxlY3RlZExpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgb3BlcmF0aW9uYWw6IHtcclxuICAgICAgbGlzdDogW10sXHJcbiAgICAgIHNlbGVjdGVkTGlzdDogW11cclxuICAgIH0sXHJcbiAgICBjb21wbGlhbmNlOiB7XHJcbiAgICAgIGxpc3Q6IFtdLFxyXG4gICAgICBzZWxlY3RlZExpc3Q6IFtdXHJcbiAgICB9LFxyXG4gICAgb3RoZXJzOiB7XHJcbiAgICAgIGxpc3Q6IFtdLFxyXG4gICAgICBzZWxlY3RlZExpc3Q6IFtdXHJcbiAgICB9LFxyXG4gIH07XHJcblxyXG4gIGZyb21EYXRlUGlja2VyQ29uZmlnOiBJRGF0ZVBpY2tlckNvbmZpZyA9IHtcclxuICAgIG1pbjogdGhpcy5nZXRDdXJyZW50RGF0ZSgpXHJcbiAgfVxyXG5cclxuICB0b0RhdGVQaWNrZXJDb25maWc6IElEYXRlUGlja2VyQ29uZmlnID0ge1xyXG4gIH1cclxuXHJcbiAgaXNTbWlsZXkhOiBib29sZWFuO1xyXG4gIHNtaWxleU1lc3NhZ2U6IHN0cmluZyA9ICcnO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY3JlYXRlRGFzaGJvYXJkU2VydmljZTogQ3JlYXRlRGFzaGJvYXJkU2VydmljZSxcclxuICAgIHByaXZhdGUgcGFnaW5hdGlvblNlcnZpY2U6IFBhZ2luYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBzbmFja0JhcjogU25hY2tCYXJTZXJ2aWNlLFxyXG4gICAgcHVibGljIHBvcG92ZXJTZXJ2aWNlOiBQb3BvdmVyU2VydmljZSxcclxuICAgIHByaXZhdGUgY29uZmlndXJlV2lkZ2V0c1NlcnZpY2U6IENvbmZpZ3VyZVdpZGdldHNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0ZXh0Q291bnQ6IFRleHRDb3VudFBpcGVcclxuICApIHsgfVxyXG5cclxuICBuZ09uQ2hhbmdlcygpIHtcclxuICAgIGlmICh0aGlzLmNyZWF0ZWRCeSkge1xyXG4gICAgICB0aGlzLmxpc3REZXRhaWxzLm5vblJlbW92YWJsZVVzZXJzTGlzdC5wdXNoKHRoaXMuY3JlYXRlZEJ5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmtleWRvd24uZXNjYXBlJywgWyckZXZlbnQnXSkgb25LZXlkb3duSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCkge1xyXG4gICAgdGhpcy5jbG9zZS5lbWl0KHsgbW9kZTogJ2Rpc2NhcmQnIH0pO1xyXG4gICAgdGhpcy5pc1NtaWxleSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmFuaW1hdGlvbiA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5hbmltYXRpb24gPSBmYWxzZTtcclxuICAgIH0sIDMwMCk7XHJcbiAgICB0aGlzLmdldE9yZ2FuaXphdGlvblVzZXJzQ291bnQoJycpO1xyXG4gICAgdGhpcy5nZXRDYXRlZ29yeUxpc3QoKTtcclxuICAgIHRoaXMuZ2V0UkNMaXN0KCk7XHJcbiAgICB0aGlzLmdldENvbXBsaWFuY2VDYXRlZ29yeUxpc3QoKTtcclxuICAgIHRoaXMuc2V0RnJlcXVlbmN5KFwiMn4xfjB+MFwiLCAnaW1wb3J0Jyk7XHJcbiAgICB0aGlzLmNoZWNrV2hldGhlckFsbExpc3RzTG9hZGVkKCk7XHJcbiAgICB0aGlzLmdldFVzZXJzTGlzdCgnJyk7XHJcbiAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2UuZ2V0VXNlckluZm9ybWF0aW9uKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnNldFBlcm1pc3Npb24ocmVzPy5yb2xlQWN0aW9ucyk7XHJcbiAgICAgIGNvbnN0IHF1aWNrTGluayA9IHJlcy5xdWlja19saW5rO1xyXG4gICAgICBpZiAocXVpY2tMaW5rLnJpc2spIHtcclxuICAgICAgICB0aGlzLnNob3dSaXNrQ2F0ZWdvcnkgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2hvd1Jpc2tDYXRlZ29yeSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9LCBlcnJvciA9PiB7IGNvbnNvbGUubG9nKGVycm9yKSB9KTtcclxuXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEaXNwbGF5cyB0aGUgbGlzdGluZyBwYWdlcyB0aGUgbGVmdCBzaWRlIG9mIHBvbGljeSBmb3JtIHRvIHNldCBhbmQgZWRpdCB0aGUgZHJvcGRvd24gZmllbGRzIHZhbHVlc1xyXG4gICAqIEBwYXJhbSB0eXBlIGhvbGRzIG5hbWUgb2YgcGFydGljdWxhciBsaXN0IGlzIHRvIGJlIGRpc3BsYXllZFxyXG4gICAqIEBwYXJhbSBldmVudCBjb250YWlucyBib29sZWFuIHZhbHVlIHRvIGRpc3BsYXkgdGhlIGxpc3Qgb3Igbm90XHJcbiAgICovXHJcbiAgYWN0aXZhdGVTZWxlY3Rvcih0eXBlOiBhbnksIGV2ZW50OiBib29sZWFuKSB7XHJcbiAgICBpZiAodHlwZSA9PSAnZnJlcXVlbmN5JyB8fCB0aGlzLmFjdGl2ZVNlbGVjdG9yID09ICdmcmVxdWVuY3knKSB7XHJcbiAgICAgIHRoaXMuc2hvd0NyaXRlcmlhID0gZmFsc2U7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd0NyaXRlcmlhID0gdHJ1ZTtcclxuICAgICAgfSwgMSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFjdGl2ZVNlbGVjdG9yID0gZXZlbnQgPyB0eXBlIDogJyc7XHJcbiAgfVxyXG5cclxuICBvcGVuRnJvbURhdGVQaWNrZXIoKSB7XHJcbiAgICB0aGlzLmZyb21EYXRlUGlja2VyLmFwaS5vcGVuKCk7XHJcbiAgICB0aGlzLmRhdGVQaWNrZXJPdmVybGF5ID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG9wZW5Ub0RhdGVQaWNrZXIoKSB7XHJcbiAgICB0aGlzLnRvRGF0ZVBpY2tlci5hcGkub3BlbigpO1xyXG4gICAgdGhpcy5kYXRlUGlja2VyT3ZlcmxheSA9IHRydWU7XHJcbiAgfVxyXG4gIGNsb3NlRnJvbURhdGVQaWNrZXIoKSB7XHJcbiAgICBpZiAoIXRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyb21EYXRlKSB7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFRvRGF0ZSA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5oaWRlVG9EYXRlID0gdHJ1ZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5oaWRlVG9EYXRlID0gZmFsc2U7XHJcbiAgICAgIH0sIDIwKTtcclxuICAgICAgdGhpcy5mcm9tRGF0ZVBpY2tlci5hcGkuY2xvc2UoKTtcclxuICAgICAgdGhpcy5kYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO1xyXG4gICAgICByZXR1cm5cclxuICAgIH1cclxuICAgIGxldCBtaW5Ub0RhdGUgPSB0aGlzLnNldFRvRGF0ZSh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcm9tRGF0ZSlcclxuICAgIHRoaXMudG9EYXRlUGlja2VyQ29uZmlnID0geyBtaW46IG1pblRvRGF0ZSB9O1xyXG5cclxuICAgIGNvbnN0IGZyb21EYXRlID0gbmV3IERhdGUobWluVG9EYXRlLnNwbGl0KCctJykucmV2ZXJzZSgpLmpvaW4oJy0nKSk7XHJcbiAgICBjb25zdCB0b0RhdGUgPSBuZXcgRGF0ZSh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRUb0RhdGUpXHJcbiAgICBjb25zdCBpblZhbGlkRGF0ZSA9IChmcm9tRGF0ZSA+PSB0b0RhdGUpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgaWYgKGluVmFsaWREYXRlKSB7XHJcbiAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFRvRGF0ZSA9IHVuZGVmaW5lZDtcclxuICAgICAgdGhpcy5oaWRlVG9EYXRlID0gdHJ1ZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5oaWRlVG9EYXRlID0gZmFsc2U7XHJcbiAgICAgIH0sIDIwKTtcclxuICAgIH1cclxuICAgIHRoaXMuZnJvbURhdGVQaWNrZXIuYXBpLmNsb3NlKCk7XHJcbiAgICB0aGlzLmRhdGVQaWNrZXJPdmVybGF5ID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBjbG9zZVRvRGF0ZVBpY2tlcigpIHtcclxuICAgIHRoaXMudG9EYXRlUGlja2VyLmFwaS5jbG9zZSgpO1xyXG4gICAgdGhpcy5kYXRlUGlja2VyT3ZlcmxheSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgYW5pbWF0ZUltYWdlKCkge1xyXG4gICAgY29uc3QgY2lyY2xlSW1hZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdpbWFnZScpXHJcbiAgfVxyXG5cclxuICBzYXZlRnJlcXVlbmN5KGV2ZW50VmFsdWVzOiBhbnkpIHtcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jeVR5cGUgPSBldmVudFZhbHVlcy5mcmVxdWVuY3lUeXBlO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmNpZXMgPSBldmVudFZhbHVlcy5mcmVxdWVuY2llcztcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lNZXNzYWdlID0gZXZlbnRWYWx1ZXMuZnJlcXVlbmN5U3RyaW5nO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeURhdGUgPSBldmVudFZhbHVlcy5zZWxlY3RlZERhdGU7XHJcbiAgICB0aGlzLmFjdGl2YXRlU2VsZWN0b3IoJycsIGZhbHNlKVxyXG4gIH1cclxuXHJcbiAgZ2V0Q3VycmVudERhdGUoKSB7XHJcbiAgICBsZXQgdG9kYXkgPSBuZXcgRGF0ZSgpO1xyXG4gICAgcmV0dXJuIHRvZGF5LmdldERhdGUoKSArICctJyArICh0b2RheS5nZXRNb250aCgpICsgMSkgKyAnLScgKyB0b2RheS5nZXRGdWxsWWVhcigpO1xyXG4gIH1cclxuICBzZXRUb0RhdGUoZGF0YTogc3RyaW5nKSB7XHJcbiAgICBsZXQgdG9kYXkgPSBuZXcgRGF0ZShkYXRhKTtcclxuICAgIHJldHVybiB0b2RheS5nZXREYXRlKCkgKyAxICsgJy0nICsgKHRvZGF5LmdldE1vbnRoKCkgKyAxKSArICctJyArIHRvZGF5LmdldEZ1bGxZZWFyKCk7XHJcbiAgfVxyXG4gIGdldEZyb21EYXRlKGRhdGE6IHN0cmluZykge1xyXG4gICAgbGV0IHRvZGF5ID0gbmV3IERhdGUoZGF0YSk7XHJcbiAgICByZXR1cm4gdG9kYXkuZ2V0RGF0ZSgpICsgJy0nICsgKHRvZGF5LmdldE1vbnRoKCkgKyAxKSArICctJyArIHRvZGF5LmdldEZ1bGxZZWFyKCk7XHJcbiAgfVxyXG4gIGNvbmZpZ3VyZURhc2hib2FyZCgpIHtcclxuICAgIGxldCBmaWVsZHNTdGF0dXMgPSB0aGlzLnZhbGlkYXRlRGFzaGJvYXJkKCk7XHJcbiAgICBpZiAoZmllbGRzU3RhdHVzKSB7XHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT0gJ0NSRUFURScpIHtcclxuICAgICAgICB0aGlzLnZMb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgICBkYXNoYm9hcmRfbmFtZTogdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWUsXHJcbiAgICAgICAgICBkYXNoYm9hcmRfaWQ6ICcnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY3JlYXRlRGFzaGJvYXJkU2VydmljZS5jaGVja0R1cGxpY2F0ZURhc2hib2FyZE5hbWUocGF5bG9hZCkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgICBpZiAoIXJlcykge1xyXG4gICAgICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93Umlza1dpZGdldHMgPSAodGhpcy5pc01hbmFnZVJpc2sgJiYgdGhpcy5zaG93Umlza0NhdGVnb3J5ICYmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcy5sZW5ndGggPiAwIHx8IHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGggPiAwKSkgPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0NvbXBsaWFuY2VXaWRnZXRzID0gKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcy5sZW5ndGggPiAwIHx8IHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGggPiAwKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5vcGVuQ29uZmlndXJlV2lkZ2V0cyA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KCdBIGRhc2hib2FyZCB3aXRoIHRoaXMgbmFtZSBhbHJlYWR5IGV4aXN0cy4gU3BlY2lmeSBhIGRpZmZlcmVudCBuYW1lIGZvciB0aGUgZGFzaGJvYXJkLicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcclxuICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMubW9kZSA9PSAnRURJVCcpIHtcclxuICAgICAgICB0aGlzLnZMb2FkZXIgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgICAgICBkYXNoYm9hcmRfbmFtZTogdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWUsXHJcbiAgICAgICAgICBkYXNoYm9hcmRfaWQ6IHRoaXMuZGFzaGJvYXJkSWRcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jcmVhdGVEYXNoYm9hcmRTZXJ2aWNlLmNoZWNrRHVwbGljYXRlRGFzaGJvYXJkTmFtZShwYXlsb2FkKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgIGlmICghcmVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNob3dSaXNrV2lkZ2V0cyA9ICh0aGlzLmlzTWFuYWdlUmlzayAmJiB0aGlzLnNob3dSaXNrQ2F0ZWdvcnkgJiYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmxlbmd0aCA+IDAgfHwgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aCA+IDApKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zaG93Q29tcGxpYW5jZVdpZGdldHMgPSAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLmxlbmd0aCA+IDAgfHwgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aCA+IDApID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5Db25maWd1cmVXaWRnZXRzID0gdHJ1ZTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coJ0EgZGFzaGJvYXJkIHdpdGggdGhpcyBuYW1lIGFscmVhZHkgZXhpc3RzLiBTcGVjaWZ5IGEgZGlmZmVyZW50IG5hbWUgZm9yIHRoZSBkYXNoYm9hcmQuJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKipcclxuICAgICogRmV0Y2hlcyBvcmdhbml6YXRpb24gdXNlcnMgY291bnQgYXBpIHRvIGdldCB0b3RhbCBudW1iZXIgb2YgcGFnZXNcclxuICAgICogQHBhcmFtIFVybCBjb250YWlucyBwcmFtc1xyXG4gICAgKi9cclxuICBnZXRPcmdhbml6YXRpb25Vc2Vyc0NvdW50KFVybDogYW55KSB7XHJcbiAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2UuZ2V0T3JnYW5pemF0aW9uVXNlcnNDb3VudChVcmwpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICB0aGlzLnRvdGFsTGlzdCA9IHJlcy50b3RhbF9tZW1iZXJzO1xyXG4gICAgICBpZiAocmVzLnRvdGFsX21lbWJlcnMgJiYgcmVzLmxpbWl0X3Blcl9wYWdlID4gMSkge1xyXG4gICAgICAgIHRoaXMudG90YWxQYWdlcyA9IHJlcy5jcmVhdGVfcGFnZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSAxO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gKiBHZXQgdXNlcnMgbGlzdCBieSBtYWtpbmcgYXBpIGNhbGwgYW5kIHByZSBzZWxlY3RzIGFsbCBhZG1pbnMgYnkgYWRkaW5nIHRvIHZpZXdlcnNcclxuICogQHBhcmFtIHVybCBjb250YWlucyBxdWVyeSBwYXJhbXMgZm9yIG9yZ2FuaXphdGlvbiB1c2VycyBhcGlcclxuICovXHJcbiAgZ2V0VXNlcnNMaXN0KHVybDogYW55KSB7XHJcbiAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2UuZ2V0QWxsVXNlcnMoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcblxyXG4gICAgICB0aGlzLnVzZXJzTGlzdCA9IHJlcztcclxuICAgICAgdGhpcy51c2VyTGlzdExvYWRlZCA9IHRydWU7XHJcblxyXG4gICAgICBpZiAodGhpcy5tb2RlID09PSAnRURJVCcpIHtcclxuICAgICAgICB0aGlzLnZMb2FkZXIgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFZpZXdlcnMgPSB0aGlzLnNldExpc3QodGhpcy51c2Vyc0xpc3QsIFt0aGlzLmNyZWF0ZWRCeV0sICdtZW1iZXJfaWQnKTtcclxuICAgICAgICB0aGlzLmxpc3REZXRhaWxzLnNlbGVjdGVkVXNlcnNMaXN0ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVmlld2VycztcclxuICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIGdldENvbXBsaWFuY2VDYXRlZ29yeUxpc3QoKSB7XHJcbiAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2UuZ2V0Q29tcGxpYW5jZUNhdGVnb3JpZXNMaXN0RnJvbUdsb2JhbCgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgZGF0YSA9IHJlcztcclxuICAgICAgdGhpcy5hbGxDb21wbGlhbmNlQ2F0ZWdvcmllcyA9IE9iamVjdC5hc3NpZ24ocmVzKVxyXG4gICAgICAvLyBjbG9uZURlZXAocmVzKTtcclxuICAgICAgZGF0YS5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoZWxlbWVudCAmJiBlbGVtZW50LmNvbXBsaWFuY2VfdHlwZSA9PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllc1RyZWUub3RoZXJzLmxpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5jb21wbGlhbmNlX3R5cGUgPT0gMSkge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUNhdGVnb3JpZXNUcmVlLnJlZ3VsYXRpb25zLmxpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGVsZW1lbnQgJiYgZWxlbWVudC5jb21wbGlhbmNlX3R5cGUgPT0gMikge1xyXG4gICAgICAgICAgdGhpcy5yZXNwb25zaWJpbGl0eUNhdGVnb3JpZXNUcmVlLnN0YW5kYXJkcy5saXN0LnB1c2goZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuY29tcGxpYW5jZV90eXBlID09IDMpIHtcclxuICAgICAgICAgIHRoaXMucmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzVHJlZS5pbnRlcm5hbENvbnRyb2xzLmxpc3QucHVzaChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmNvbXBsaWFuY2VDYXRlZ29yaWVzTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICB9LCAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB0aGlzLmNvbXBsaWFuY2VDYXRlZ29yaWVzTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBzYXZlU2VsZWN0ZWRDYXRlZ29yeShldmVudDogYW55KSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImV2ZW50PT0+Pj5cIiwgZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2F0ZWdvcnlMaXN0KCkge1xyXG4gICAgdGhpcy5jcmVhdGVEYXNoYm9hcmRTZXJ2aWNlLmdldENhdGVnb3J5TGlzdCgpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5yaXNrQ2F0ZWdvcnlMaXN0LnN0cmF0ZWdpYy5saXN0ID0gcmVzLnN0cmF0ZWdpY19hcnI7XHJcbiAgICAgIHRoaXMucmlza0NhdGVnb3J5TGlzdC5vcGVyYXRpb25hbC5saXN0ID0gcmVzLm9wZXJhdGlvbmFsX2FycjtcclxuICAgICAgdGhpcy5yaXNrQ2F0ZWdvcnlMaXN0LmNvbXBsaWFuY2UubGlzdCA9IHJlcy5jb21wbGlhbmNlX2FycjtcclxuICAgICAgdGhpcy5yaXNrQ2F0ZWdvcnlMaXN0Lm90aGVycy5saXN0ID0gcmVzLm90aGVyc19hcnI7XHJcbiAgICAgIHRoaXMucmlza0NhdGVnb3J5TGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMuYWxsUmlza0NhdGVnb3JpZXMgPSBbLi4ubmV3IFNldCh0aGlzLmFsbFJpc2tDYXRlZ29yaWVzLmNvbmNhdChyZXMuc3RyYXRlZ2ljX2FyciwgcmVzLm9wZXJhdGlvbmFsX2FyciwgcmVzLmNvbXBsaWFuY2VfYXJyLCByZXMub3RoZXJzX2FycikpXVxyXG5cclxuICAgIH0sIGVyciA9PiB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcclxuICAgICAgdGhpcy5yaXNrQ2F0ZWdvcnlMaXN0TG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogSXQgaXMgdG8gZW5zdXJlIHdoZXRoZXIgYWxsIHJlcXVpcmVkIGxpc3RzIG9uIFBvbGljeSBmcm9tIGlzIGxvYWRlZCBmcm9tIHRoZSBhcGkgY2FsbCBvciBub3RcclxuICAqL1xyXG4gIGNoZWNrV2hldGhlckFsbExpc3RzTG9hZGVkKCkge1xyXG4gICAgaWYgKHRoaXMucmNMaXN0TG9hZGVkICYmIHRoaXMuY29tcGxpYW5jZUNhdGVnb3JpZXNMaXN0TG9hZGVkICYmIHRoaXMucmlza0NhdGVnb3J5TGlzdExvYWRlZCAmJiB0aGlzLnVzZXJMaXN0TG9hZGVkKSB7XHJcbiAgICAgIGlmICh0aGlzLm1vZGUgPT09ICdFRElUJykge1xyXG4gICAgICAgIHRoaXMuZWRpdERhc2hib2FyZCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmNoZWNrV2hldGhlckFsbExpc3RzTG9hZGVkKCk7XHJcbiAgICAgIH0sIDMwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3RlZFdpZGdldHMoZGF0YTogYW55KSB7XHJcbiAgICBpZiAodGhpcy5tb2RlID09PSAnQ1JFQVRFJykge1xyXG4gICAgICBjb25zdCB3aWRnZXRzQXJyYXk6IGFueSA9IFtdXHJcbiAgICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgbGV0IG9iajogYW55ID0ge31cclxuICAgICAgICBvYmoubW9kdWxlX25hbWUgPSBlbGVtZW50Lm1vZHVsZTtcclxuICAgICAgICBvYmouX2lkID0gJyc7XHJcbiAgICAgICAgb2JqLndpZGdldF9uYW1lID0gZWxlbWVudC50aXRsZVxyXG4gICAgICAgIG9iai53aWRnZXRfY29kZSA9IGVsZW1lbnQuaWQ7XHJcbiAgICAgICAgb2JqLnN1Yl93aWRnZXRzID0gW107XHJcbiAgICAgICAgb2JqLnN0YXRlID0gJ0FDVElWRSdcclxuICAgICAgICBpZiAoZWxlbWVudC5zdWJXaWRnZXRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGVsZW1lbnQuc3ViV2lkZ2V0cy5mb3JFYWNoKChzdWJXaWRnZXQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgc3ViV2lkZ2V0T2JqZWN0OiBhbnkgPSB7fVxyXG4gICAgICAgICAgICBzdWJXaWRnZXRPYmplY3QuX2lkID0gJyc7XHJcbiAgICAgICAgICAgIHN1YldpZGdldE9iamVjdC53aWRnZXRfbmFtZSA9IHN1YldpZGdldC50aXRsZVxyXG4gICAgICAgICAgICBzdWJXaWRnZXRPYmplY3Qud2lkZ2V0X2NvZGUgPSBzdWJXaWRnZXQuaWQ7XHJcbiAgICAgICAgICAgIHN1YldpZGdldE9iamVjdC5zdGF0ZSA9IChzdWJXaWRnZXQudmFsdWUpID8gJ0FDVElWRScgOiAnSU5BQ1RJVkUnXHJcbiAgICAgICAgICAgIG9iai5zdWJfd2lkZ2V0cy5wdXNoKE9iamVjdC5hc3NpZ24oc3ViV2lkZ2V0T2JqZWN0KSlcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB3aWRnZXRzQXJyYXkucHVzaChvYmopXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLmNvbmZpZ3VyZVdpZGdldCA9IHdpZGdldHNBcnJheTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5tb2RlID09PSAnRURJVCcpIHtcclxuICAgICAgY29uc3Qgd2lkZ2V0c0FycmF5OiBhbnkgPSBbXVxyXG5cclxuICAgICAgZGF0YS5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoIUpTT04uc3RyaW5naWZ5KHRoaXMuZGFzaGJvYXJkRm9ybS5jb25maWd1cmVXaWRnZXQpLmluY2x1ZGVzKGVsZW1lbnQuaWQpKSB7XHJcbiAgICAgICAgICBsZXQgb2JqOiBhbnkgPSB7fVxyXG4gICAgICAgICAgb2JqLm1vZHVsZV9uYW1lID0gZWxlbWVudC5tb2R1bGU7XHJcbiAgICAgICAgICBvYmouX2lkID0gJyc7XHJcbiAgICAgICAgICBvYmoud2lkZ2V0X25hbWUgPSBlbGVtZW50LnRpdGxlXHJcbiAgICAgICAgICBvYmoud2lkZ2V0X2NvZGUgPSBlbGVtZW50LmlkO1xyXG4gICAgICAgICAgb2JqLnN1Yl93aWRnZXRzID0gW107XHJcbiAgICAgICAgICBvYmouc3RhdGUgPSAnQUNUSVZFJ1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuc3ViV2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuc3ViV2lkZ2V0cy5mb3JFYWNoKChzdWJXaWRnZXQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGxldCBzdWJXaWRnZXRPYmplY3Q6IGFueSA9IHt9XHJcbiAgICAgICAgICAgICAgc3ViV2lkZ2V0T2JqZWN0Ll9pZCA9ICcnO1xyXG4gICAgICAgICAgICAgIHN1YldpZGdldE9iamVjdC53aWRnZXRfbmFtZSA9IHN1YldpZGdldC50aXRsZVxyXG4gICAgICAgICAgICAgIHN1YldpZGdldE9iamVjdC53aWRnZXRfY29kZSA9IHN1YldpZGdldC5pZDtcclxuICAgICAgICAgICAgICBzdWJXaWRnZXRPYmplY3Quc3RhdGUgPSAoc3ViV2lkZ2V0LnZhbHVlKSA/ICdBQ1RJVkUnIDogJ0lOQUNUSVZFJ1xyXG4gICAgICAgICAgICAgIG9iai5zdWJfd2lkZ2V0cy5wdXNoKHN1YldpZGdldE9iamVjdClcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uY29uZmlndXJlV2lkZ2V0LnB1c2gob2JqKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbmRJbmRleCgoZWxlOiBhbnkpID0+IGVsZS53aWRnZXRfY29kZSA9PSBlbGVtZW50LmlkKVxyXG4gICAgICAgICAgaWYgKGluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzW2luZGV4XS5zdGF0ZSA9ICdBQ1RJVkUnXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkV2lkZ2V0c1tpbmRleF0uc3ViX3dpZGdldHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzW2luZGV4XS5zdWJfd2lkZ2V0cy5mb3JFYWNoKChzdWJXaWRnZXREYXRhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRJbmRleCA9IGVsZW1lbnQuc3ViV2lkZ2V0cy5maW5kSW5kZXgoKGVsZTogYW55KSA9PiBlbGUuaWQgPT0gc3ViV2lkZ2V0RGF0YS53aWRnZXRfY29kZSlcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50SW5kZXggIT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgc3ViV2lkZ2V0RGF0YS5zdGF0ZSA9IChlbGVtZW50LnN1YldpZGdldHNbZWxlbWVudEluZGV4XS52YWx1ZSkgPyAnQUNUSVZFJyA6ICdJTkFDVElWRSdcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmRhc2hib2FyZEZvcm0uY29uZmlndXJlV2lkZ2V0LmZvckVhY2goKHNhdmVkV2lkZ2V0OiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBpbmRleCA9IGRhdGEuZmluZEluZGV4KChkYXRhRWxlbWVudDogYW55KSA9PiBkYXRhRWxlbWVudC5pZCA9PSBzYXZlZFdpZGdldC53aWRnZXRfY29kZSlcclxuICAgICAgICBpZiAoaW5kZXggPT0gLTEpIHtcclxuICAgICAgICAgIHNhdmVkV2lkZ2V0LnN0YXRlID0gJ0lOQUNUSVZFJztcclxuICAgICAgICAgIGlmIChzYXZlZFdpZGdldC5zdWJfd2lkZ2V0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHNhdmVkV2lkZ2V0LnN1Yl93aWRnZXRzLmZvckVhY2goKHNhdmVTdWJXaWRnZXQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHNhdmVTdWJXaWRnZXQuc3RhdGUgPSAnSU5BQ1RJVkUnXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG4gICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSBkYXRhXHJcbiAgICB0aGlzLm9wZW5Db25maWd1cmVXaWRnZXRzID0gZmFsc2U7XHJcbiAgICB0aGlzLnN1Ym1pdERhc2hib2FyZCgpO1xyXG5cclxuICB9XHJcblxyXG4gIGNsb3NlQ29uZmlndXJlV2lkZ2V0cyhldmVudDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5vcGVuQ29uZmlndXJlV2lkZ2V0cyA9IGV2ZW50O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmlsdGVyIGxpc3QgdXNlcidzIGxpc3QgYmFzZWQgb24gcGFnaW5hdGlvbiBieSBtYWtpbmcgYXBpIGNhbGxcclxuICAgKiBAcGFyYW0gZXZlbnQgc3BlY2lmaWVzIGEgYm9vbGVhbiB2YWx1ZSB0byBjYWxsIGFwaVxyXG4gICAqL1xyXG4gIHBhZ2luYXRpb25GaWx0ZXIoZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgIHRoaXMuZ2V0VXNlcnNMaXN0KHtcclxuICAgICAgICBwOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlID09PSAxID8gJycgOiB0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLmN1cnJlbnRQYWdlLFxyXG4gICAgICAgIHR5cGU6ICdhbGxfZXhjZXB0X2V4ZWN1dGl2ZScsXHJcbiAgICAgICAgcTogKCF0aGlzLnBhZ2luYXRpb25TZXJ2aWNlLnNlYXJjaFZhbHVlKSA/ICcnIDogdGhpcy5wYWdpbmF0aW9uU2VydmljZS5zZWFyY2hWYWx1ZSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG5cclxuICBnZXRSQ0xpc3QoKSB7XHJcbiAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2UuZ2V0UmVzcG9uc2liaWxpdHlDZW50ZXJMaXN0KCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLnJlc3BvbnNpYmlsaXR5Q2VudGVyc0xpc3QgPSByZXM7XHJcbiAgICAgIHRoaXMucmNMaXN0TG9hZGVkID0gdHJ1ZTtcclxuXHJcbiAgICB9LCAoZXJyOiBhbnkpID0+IHtcclxuICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xyXG4gICAgICB0aGlzLnJjTGlzdExvYWRlZCA9IHRydWU7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNhdmVTZWxlY3RlZExpc3QodHlwZTogc3RyaW5nLCBzZWxlY3RlZEl0ZW1zOiBhbnkpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdyYyc6XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzID0gdGhpcy5zZXRMaXN0KHRoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdCwgc2VsZWN0ZWRJdGVtcywgJ2l0ZW1faWQnKTtcclxuICAgICAgICBpZih0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbHRlcigoZWxlbWVudDphbnkpPT5lbGVtZW50Lm1vZHVsZV9uYW1lIT0nQ09NUExJQU5DRScpXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKChlbGVtZW50OmFueSk9PmVsZW1lbnQubW9kdWxlX25hbWUhPSdSSVNLJylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3dob0NhblZpZXcnOlxyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFZpZXdlcnMgPSBzZWxlY3RlZEl0ZW1zXHJcbiAgICAgICAgdGhpcy5saXN0RGV0YWlscy5zZWxlY3RlZFVzZXJzTGlzdCA9IHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFZpZXdlcnM7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Jlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcyc6XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzID0gc2VsZWN0ZWRJdGVtcztcclxuICAgICAgICBpZih0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbHRlcigoZWxlbWVudDphbnkpPT5lbGVtZW50Lm1vZHVsZV9uYW1lIT0nQ09NUExJQU5DRScpXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKChlbGVtZW50OmFueSk9PmVsZW1lbnQubW9kdWxlX25hbWUhPSdSSVNLJylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Jpc2tDYXRlZ29yeSc6XHJcbiAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMgPSBzZWxlY3RlZEl0ZW1zO1xyXG4gICAgICAgIGlmKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKChlbGVtZW50OmFueSk9PmVsZW1lbnQubW9kdWxlX25hbWUhPSdDT01QTElBTkNFJylcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maWx0ZXIoKGVsZW1lbnQ6YW55KT0+ZWxlbWVudC5tb2R1bGVfbmFtZSE9J1JJU0snKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIHRoaXMuYWN0aXZhdGVTZWxlY3RvcignJywgZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlKHR5cGU6IGFueSwgZXZlbnQ6IGFueSwgcmVtb3ZlSW5kZXg/OiBhbnkpIHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdyYyc6XHJcbiAgICAgICAgY29uc3QgcmNJbmRleCA9IHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5maW5kSW5kZXgoKHJjOiBhbnkpID0+IHJjLnJjX2lkID09IGV2ZW50LnJjX2lkKTtcclxuICAgICAgICBpZiAocmNJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgIGNvbnN0IHBhcmVudFJjOiBhbnkgPSB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnNbcmNJbmRleF07XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMuc3BsaWNlKHJjSW5kZXgsIDEpO1xyXG5cclxuICAgICAgICAgIGlmIChwYXJlbnRSYz8uaXRlbV9jaGlsZF9pZHM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgcGFyZW50UmMuaXRlbV9jaGlsZF9pZHMuZm9yRWFjaCgoY2hpbGRFbGVtZW50OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCByZW1vdmVJbmRleCA9IHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5maW5kSW5kZXgoKHJlbW92ZUVsZW1lbnQ6IGFueSkgPT4gcmVtb3ZlRWxlbWVudC5yY19pZCA9PSBjaGlsZEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5zcGxpY2UocmVtb3ZlSW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maWx0ZXIoKGVsZW1lbnQ6YW55KT0+ZWxlbWVudC5tb2R1bGVfbmFtZSE9J0NPTVBMSUFOQ0UnKVxyXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbHRlcigoZWxlbWVudDphbnkpPT5lbGVtZW50Lm1vZHVsZV9uYW1lIT0nUklTSycpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAnd2hvQ2FuVmlldyc6XHJcbiAgICAgICAgY29uc3QgcmV2aWV3ZXJJbmRleCA9IHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFZpZXdlcnMuZmluZEluZGV4KCh2aWV3ZXI6IGFueSkgPT4gdmlld2VyLm1lbWJlcl9pZCA9PSBldmVudC5tZW1iZXJfaWQpO1xyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFZpZXdlcnMuc3BsaWNlKHJldmlld2VySW5kZXgsIDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgY2FzZSAncmVzcG9uc2liaWxpdHlDYXRlZ29yaWVzJzpcclxuICAgICAgICBjb25zdCBDQ2NhdGVnb3J5SW5kZXggPSB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMuZmluZEluZGV4KChDQ2NhdGVnb3J5OiBhbnkpID0+IENDY2F0ZWdvcnkuY2F0ZWdvcnlfaWQgPT0gZXZlbnQuY2F0ZWdvcnlfaWQpO1xyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcy5zcGxpY2UoQ0NjYXRlZ29yeUluZGV4LCAxKTtcclxuICAgICAgICBpZih0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IHRoaXMuc2VsZWN0ZWRXaWRnZXRzLmZpbHRlcigoZWxlbWVudDphbnkpPT5lbGVtZW50Lm1vZHVsZV9uYW1lIT0nQ09NUExJQU5DRScpXHJcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmxlbmd0aD09MCl7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKChlbGVtZW50OmFueSk9PmVsZW1lbnQubW9kdWxlX25hbWUhPSdSSVNLJylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlICdyaXNrQ2F0ZWdvcnknOlxyXG4gICAgICAgIGNvbnN0IHJpc2tDYXRlZ29yeUluZGV4ID0gdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMuZmluZEluZGV4KChyaXNrQ2F0ZWdvcnk6IGFueSkgPT4gcmlza0NhdGVnb3J5LmNhdGVnb3J5X2lkID09IGV2ZW50LmNhdGVnb3J5X2lkKTtcclxuICAgICAgICBpZiAocmlza0NhdGVnb3J5SW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICBjb25zdCBwYXJlbnQ6IGFueSA9IHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzW3Jpc2tDYXRlZ29yeUluZGV4XTtcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLnNwbGljZShyaXNrQ2F0ZWdvcnlJbmRleCwgMSk7XHJcbiAgICAgICAgICBpZiAocGFyZW50Py5jaGlsZF9jYXRfaWRzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHBhcmVudC5jaGlsZF9jYXRfaWRzLmZvckVhY2goKGNoaWxkRWxlbWVudDogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlSW5kZXggPSB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcy5maW5kSW5kZXgoKHJlbW92ZUVsZW1lbnQ6IGFueSkgPT4gcmVtb3ZlRWxlbWVudC5jYXRlZ29yeV9pZCA9PSBjaGlsZEVsZW1lbnQpO1xyXG4gICAgICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLnNwbGljZShyZW1vdmVJbmRleCwgMSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcy5zcGxpY2Uocmlza0NhdGVnb3J5SW5kZXgsIDEpO1xyXG4gICAgICAgIGlmKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgIHRoaXMuc2VsZWN0ZWRXaWRnZXRzID0gdGhpcy5zZWxlY3RlZFdpZGdldHMuZmlsdGVyKChlbGVtZW50OmFueSk9PmVsZW1lbnQubW9kdWxlX25hbWUhPSdDT01QTElBTkNFJylcclxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmlza0NhdGVnb3JpZXMubGVuZ3RoPT0wKXtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFdpZGdldHMgPSB0aGlzLnNlbGVjdGVkV2lkZ2V0cy5maWx0ZXIoKGVsZW1lbnQ6YW55KT0+ZWxlbWVudC5tb2R1bGVfbmFtZSE9J1JJU0snKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRMaXN0KGxpc3Q6IGFueVtdLCBpZHM6IGFueVtdLCBrZXk6IHN0cmluZykge1xyXG4gICAgY29uc3QgZGF0YTogYW55ID0gW107XHJcblxyXG4gICAgaWRzLmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBpbmRleCA9IGxpc3QuZmluZEluZGV4KChsaXN0RWxlbWVudDogYW55KSA9PiBsaXN0RWxlbWVudFtrZXldID09IGVsZW1lbnQpO1xyXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgZGF0YS5wdXNoKGxpc3RbaW5kZXhdKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcbiAgc3VibWl0dGVkID0gZmFsc2VcclxuXHJcbiAgLyoqXHJcbiAgKiBSZXR1cm5zIGlkJ3MgZnJvbSBhIHBhcnRpY3VsYXIgbGlzdCBlbGVtZW50c1xyXG4gICogQHBhcmFtIGxpc3QgYWN0dWFsIHNlbGVjdGVkIGxpc3RcclxuICAqIEBwYXJhbSBrZXkgY29udGFpbnMga2V5IHRvIGV4dHJhY3QgaWQgZnJvbSB0aGUgbGlzdFxyXG4gICovXHJcbiAgcmV0dXJuSWRzKGxpc3Q6IGFueVtdLCBrZXk6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGxpc3Q/Lm1hcChlbGUgPT4geyBpZiAoZWxlW2tleV0pIHsgcmV0dXJuIGVsZVtrZXldOyB9IH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgKiBWYWxpZGF0ZXMgdGhlIGRhdGEgc3VibWl0dGVkIG9uIGNyZWF0ZSBkYXNoYm9hcmQgZm9ybVxyXG4gICovXHJcbiAgdmFsaWRhdGVEYXNoYm9hcmQoKSB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zdWJtaXR0ZWQgPSB0cnVlO1xyXG5cclxuICAgIH0sIDEwMCk7XHJcbiAgICBjb25zdCBldmVudCA9IHRoaXMuZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lO1xyXG4gICAgY29uc3QgcmUgPSAvJm5ic3A7fDxicj4vZztcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lID0gZXZlbnQucmVwbGFjZShyZSwgJycpLnRyaW0oKTtcclxuICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZERlc2NyaXB0aW9uVGV4dDtcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmREZXNjcmlwdGlvblRleHQgPSBkZXNjcmlwdGlvbi5yZXBsYWNlKHJlLCAnJykudHJpbSgpO1xyXG4gICAgaWYgKCF0aGlzLmRhc2hib2FyZEZvcm0uZGFzaGJvYXJkTmFtZSB8fCB0aGlzLmRhc2hib2FyZEZvcm0uZGFzaGJvYXJkTmFtZS50cmltKCkgPT0gJydcclxuICAgICAgfHwgKHRoaXMuZGFzaGJvYXJkRm9ybS5kYXNoYm9hcmROYW1lLmxlbmd0aCA+IDMwKVxyXG4gICAgICB8fCAodGhpcy50ZXh0Q291bnQudHJhbnNmb3JtKHRoaXMuZGFzaGJvYXJkRm9ybT8uZGFzaGJvYXJkRGVzY3JpcHRpb25UZXh0KSA+IDI1MClcclxuICAgICAgfHwgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyb21EYXRlICYmICghdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkVG9EYXRlKSlcclxuICAgICAgfHwgKHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2VudGVycy5sZW5ndGggPT0gMCAmJlxyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJlc3BvbnNpYmlsaXR5Q2F0ZWdvcmllcy5sZW5ndGggPT0gMCAmJlxyXG4gICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZFJpc2tDYXRlZ29yaWVzLmxlbmd0aCA9PSAwKSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICogTWFrZXMgYW4gYXBpIGNhbGwgdG8gY3JlYXRlIGEgcG9saWN5XHJcbiAgKiBAcGFyYW0gZGFzaGJvYXJkIGNvbnRhaW5zIGRhc2hib2FyZEZvcm0gZGF0YVxyXG4gICovXHJcbiAgc3VibWl0RGFzaGJvYXJkKCkge1xyXG5cclxuICAgIHRoaXMuc3VibWl0dGVkID0gZmFsc2U7XHJcbiAgICBjb25zdCB2YWxpZCA9IHRoaXMudmFsaWRhdGVEYXNoYm9hcmQoKTtcclxuICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy52TG9hZGVyID0gdHJ1ZTtcclxuICAgIGNvbnN0IGRhc2hib2FyZCA9IHRoaXMuZGFzaGJvYXJkRm9ybTtcclxuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcclxuICAgICAgZGFzaGJvYXJkX25hbWU6IGRhc2hib2FyZC5kYXNoYm9hcmROYW1lLFxyXG4gICAgICBkZXNjcmlwdGlvbjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbnRlbnQ6IGRhc2hib2FyZC5kYXNoYm9hcmREZXNjcmlwdGlvblRleHQsXHJcbiAgICAgICAgICBhdHRhY2htZW50czogW11cclxuICAgICAgICB9XHJcbiAgICAgIF0sXHJcbiAgICAgIHZpc2libGVfdG9fdXNlcnM6IHRoaXMucmV0dXJuSWRzKGRhc2hib2FyZC5zZWxlY3RlZFZpZXdlcnMsICdtZW1iZXJfaWQnKSxcclxuICAgICAgcmVzcG9uc2liaWxpdHlfY2VudGVyOiB0aGlzLnJldHVybklkcyhkYXNoYm9hcmQuc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNlbnRlcnMsICdpdGVtX2lkJyksXHJcbiAgICAgIHJlc3BvbnNpYmlsaXR5X2NhdGVnb3J5OiB0aGlzLnJldHVybklkcyhkYXNoYm9hcmQuc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMsICdjYXRlZ29yeV9pZCcpLFxyXG4gICAgICByaXNrX2NhdGVnb3J5OiB0aGlzLnJldHVybklkcyhkYXNoYm9hcmQuc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcywgJ2NhdGVnb3J5X2lkJyksXHJcbiAgICAgIGRpc3BsYXlfY3JpdGVyaWE6IChkYXNoYm9hcmQuZGlzcGxheUNyaXRlcmlhID09PSAnYW5kJykgPyAnQk9USF9SQ19BTkRfQ0FURUdPUlknIDogJ1JDX09SX0NBVEVHT1JZJyxcclxuICAgICAgdGltZWZyYW1lOiB7XHJcbiAgICAgICAgc3RhcnRfZGF0ZTogKGRhc2hib2FyZC5zZWxlY3RlZEZyb21EYXRlKSA/IGRheWpzKGRhc2hib2FyZC5zZWxlY3RlZEZyb21EYXRlKS5mb3JtYXQoJ1lZWVktTU0tREQnKSA6ICcnLFxyXG4gICAgICAgIGVuZF9kYXRlOiAoZGFzaGJvYXJkLnNlbGVjdGVkVG9EYXRlKSA/IGRheWpzKGRhc2hib2FyZC5zZWxlY3RlZFRvRGF0ZSkuZm9ybWF0KCdZWVlZLU1NLUREJykgOiAnJyxcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIGVtYWlsX3N1bW1hcnk6IHRoaXMuc2V0RnJlcXVlbmN5KCcnLCAnZXhwb3J0JyksIC8vc2V0Rm9ybWF0XHJcbiAgICAgIHdpZGdldF9kZXRhaWxzOiBkYXNoYm9hcmQuY29uZmlndXJlV2lkZ2V0XHJcblxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubW9kZSA9PSAnQ1JFQVRFJykge1xyXG4gICAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2Uuc3VibWl0RGFzaGJvYXJkKHBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAvLyB0aGlzLnNuYWNrQmFyLnNob3coJ1RoZSBkYXNoYm9hcmQgaGFzIGJlZW4gY3JlYXRlZC4nKTtcclxuICAgICAgICB0aGlzLmlzU21pbGV5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNtaWxleU1lc3NhZ2UgPSAnVGhlIGRhc2hib2FyZCBoYXMgYmVlbiBjcmVhdGVkLidcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuaXNTbWlsZXkgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuY2xvc2UuZW1pdCh7IG1vZGU6ICdjcmVhdGVkJywgaWQ6IHJlcy5faWQgfSk7XHJcbiAgICAgICAgfSwgMzAwMCk7XHJcblxyXG4gICAgICB9LFxyXG4gICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICBpZiAoZXJyLnN0YXR1cyA9PT0gNDA5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIuc2hvdygnQSBkYXNoYm9hcmQgd2l0aCB0aGlzIG5hbWUgYWxyZWFkeSBleGlzdHMuIFNwZWNpZnkgYSBkaWZmZXJlbnQgbmFtZSBmb3IgdGhlIGRhc2hib2FyZC4nKTtcclxuICAgICAgICAgICAgdGhpcy52TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLnNob3coJ09PUFMhIFNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCB0aGUgcGFnZSBjb3VsZCBub3QgYmUgbG9hZGVkLiBDb3VsZCB5b3UgcGxlYXNlIHRyeSBvbmUgbW9yZSB0aW1lPycpO1xyXG4gICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ0VESVQnKSB7XHJcbiAgICAgIHBheWxvYWQud2lkZ2V0X3VwZGF0ZV9mbGFnID0gdHJ1ZVxyXG4gICAgICB0aGlzLmNyZWF0ZURhc2hib2FyZFNlcnZpY2UudXBkYXRlRGFzaGJvYXJkKHRoaXMuZGFzaGJvYXJkSWQsIHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICAgIC8vIHRoaXMuc25hY2tCYXIuc2hvdygnVGhlIGRhc2hib2FyZCBoYXMgYmVlbiB1cGRhdGVkJyk7XHJcbiAgICAgICAgICB0aGlzLmlzU21pbGV5ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuc21pbGV5TWVzc2FnZSA9ICdUaGUgZGFzaGJvYXJkIGhhcyBiZWVuIHVwZGF0ZWQnO1xyXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNTbWlsZXkgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5jbG9zZS5lbWl0KHsgbW9kZTogJ3VwZGF0ZWQnIH0pO1xyXG4gICAgICAgICAgfSwgMzAwMCk7XHJcblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgIHRoaXMudkxvYWRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5zaG93KCdPT1BTISBTb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgdGhlIHBhZ2UgY291bGQgbm90IGJlIGxvYWRlZC4gQ291bGQgeW91IHBsZWFzZSB0cnkgb25lIG1vcmUgdGltZT8nKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlZGl0RGFzaGJvYXJkKCkge1xyXG4gICAgaWYgKHRoaXMuZGFzaGJvYXJkSWQpIHtcclxuICAgICAgdGhpcy5jcmVhdGVEYXNoYm9hcmRTZXJ2aWNlLmZldGNoRGFzaGJvYXJkKHRoaXMuZGFzaGJvYXJkSWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBkYXRhID0gcmVzO1xyXG4gICAgICAgIHRoaXMubGlzdERldGFpbHMubm9uUmVtb3ZhYmxlVXNlcnNMaXN0ID0gW3Jlcy5jcmVhdGVkX2J5XVxyXG4gICAgICAgIHRoaXMucG9wdWxhdGVEYXNoYm9hcmRGb3JtKGRhdGEpO1xyXG4gICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcG9wdWxhdGVEYXNoYm9hcmRGb3JtKGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLmRhc2hib2FyZE5hbWUgPSBkYXRhLmRhc2hib2FyZF9uYW1lLFxyXG4gICAgICB0aGlzLmRhc2hib2FyZEZvcm0uZGFzaGJvYXJkRGVzY3JpcHRpb25UZXh0ID0gZGF0YS5kZXNjcmlwdGlvblswXS5jb250ZW50LFxyXG4gICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRWaWV3ZXJzID0gdGhpcy5zZXRMaXN0KHRoaXMudXNlcnNMaXN0LCBkYXRhLnZpc2libGVfdG9fdXNlcnMsICdtZW1iZXJfaWQnKTtcclxuICAgIHRoaXMubGlzdERldGFpbHMuc2VsZWN0ZWRVc2Vyc0xpc3QgPSB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRWaWV3ZXJzO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkUmVzcG9uc2liaWxpdHlDZW50ZXJzID0gdGhpcy5zZXRMaXN0KHRoaXMucmVzcG9uc2liaWxpdHlDZW50ZXJzTGlzdCwgZGF0YS5yZXNwb25zaWJpbGl0eV9jZW50ZXIsICdpdGVtX2lkJyk7XHJcbiAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSZXNwb25zaWJpbGl0eUNhdGVnb3JpZXMgPSB0aGlzLnNldExpc3QodGhpcy5hbGxDb21wbGlhbmNlQ2F0ZWdvcmllcywgZGF0YS5yZXNwb25zaWJpbGl0eV9jYXRlZ29yeSwgJ2NhdGVnb3J5X2lkJyk7XHJcbiAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRSaXNrQ2F0ZWdvcmllcyA9IHRoaXMuc2V0TGlzdCh0aGlzLmFsbFJpc2tDYXRlZ29yaWVzLCBkYXRhLnJpc2tfY2F0ZWdvcnksICdjYXRlZ29yeV9pZCcpO1xyXG4gICAgdGhpcy5kYXNoYm9hcmRGb3JtLmRpc3BsYXlDcml0ZXJpYSA9IChkYXRhLmRpc3BsYXlfY3JpdGVyaWEgPT09IFwiQk9USF9SQ19BTkRfQ0FURUdPUllcIikgPyAnYW5kJyA6ICdvcic7XHJcbiAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcm9tRGF0ZSA9IChkYXRhPy50aW1lZnJhbWU/LnN0YXJ0X2RhdGUpID8gZGF5anMoZGF0YT8udGltZWZyYW1lPy5zdGFydF9kYXRlKT8udG9EYXRlKCkgOiB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRUb0RhdGUgPSAoZGF0YT8udGltZWZyYW1lPy5lbmRfZGF0ZSkgPyBkYXlqcyhkYXRhPy50aW1lZnJhbWU/LmVuZF9kYXRlKT8udG9EYXRlKCkgOiB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLnZMb2FkZXIgPSBmYWxzZTtcclxuICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5jb25maWd1cmVXaWRnZXQgPSBkYXRhLndpZGdldF9kZXRhaWxzXHJcbiAgICB0aGlzLnNlbGVjdGVkV2lkZ2V0cyA9IGRhdGEud2lkZ2V0X2RldGFpbHMubGVuZ3RoID4gMCA/IFsuLi5uZXcgU2V0KGRhdGEud2lkZ2V0X2RldGFpbHMpXSA6IFtdO1xyXG4gICAgdGhpcy5kaXNwbGF5ZWRXaWRnZXRzID0gZGF0YS5hbGxfd2lkZ2V0cy5sZW5ndGggPiAwID8gWy4uLm5ldyBTZXQoZGF0YS5hbGxfd2lkZ2V0cyldIDogW107XHJcbiAgICB0aGlzLnNldEZyZXF1ZW5jeShkYXRhPy5lbWFpbF9zdW1tYXJ5LCAnaW1wb3J0Jyk7XHJcbiAgICBsZXQgbWluVG9EYXRlID0gdGhpcy5zZXRUb0RhdGUoZGF0YT8udGltZWZyYW1lPy5zdGFydF9kYXRlKTtcclxuICAgIHRoaXMudG9EYXRlUGlja2VyQ29uZmlnID0geyBtaW46IG1pblRvRGF0ZSB9O1xyXG4gICAgdGhpcy5oaWRlVG9EYXRlID0gdHJ1ZTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLmhpZGVUb0RhdGUgPSBmYWxzZTtcclxuICAgIH0sIDIwKTtcclxuXHJcbiAgfVxyXG5cclxuICBzZXRGcmVxdWVuY3koZXZlbnQ6IGFueSwgbW9kZTogYW55KSB7XHJcbiAgICBpZiAobW9kZSA9PT0gJ2V4cG9ydCcpIHtcclxuICAgICAgc3dpdGNoICh0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY3lUeXBlKSB7XHJcbiAgICAgICAgY2FzZSAnd2Vla2x5JzpcclxuICAgICAgICAgIGNvbnN0IHdlZWtseVZhbHVlRGF0YSA9IHRoaXMuZGFzaGJvYXJkRm9ybT8uc2VsZWN0ZWRGcmVxdWVuY2llcz8ubWFwKChlbGU6IGFueSkgPT4gTnVtYmVyKGVsZSkgKyAxKTtcclxuICAgICAgICAgIGNvbnN0IHdlZWtseVZhbHVlID0gd2Vla2x5VmFsdWVEYXRhPy5qb2luKCk7XHJcbiAgICAgICAgICByZXR1cm4gJzJ+JyArIHdlZWtseVZhbHVlICsgJ34wfjAnXHJcbiAgICAgICAgY2FzZSAnbW9udGhseSc6XHJcbiAgICAgICAgICBjb25zdCBtb250aGx5VmFsdWVEYXRhID0gdGhpcy5kYXNoYm9hcmRGb3JtPy5zZWxlY3RlZEZyZXF1ZW5jaWVzPy5tYXAoKGVsZTogYW55KSA9PiBOdW1iZXIoZWxlKSArIDEpO1xyXG4gICAgICAgICAgY29uc3QgbW9udGhseVZhbHVlID0gbW9udGhseVZhbHVlRGF0YT8uam9pbigpO1xyXG4gICAgICAgICAgcmV0dXJuICczficgKyB0aGlzLmRhc2hib2FyZEZvcm0/LmZyZXF1ZW5jeURhdGUgKyAnficgKyBtb250aGx5VmFsdWUgKyAnfjAnXHJcbiAgICAgICAgY2FzZSAncXVhcnRlcmx5JzpcclxuICAgICAgICAgIGNvbnN0IHF1YXJ0ZXJseVZhbHVlRGF0YSA9IE51bWJlcih0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY2llcykgKyAxO1xyXG4gICAgICAgICAgcmV0dXJuICc3ficgKyB0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSArICd+JyArIHF1YXJ0ZXJseVZhbHVlRGF0YSArICd+MCdcclxuXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChtb2RlID09PSAnaW1wb3J0Jykge1xyXG4gICAgICBjb25zdCB2YWwgPSBldmVudC5zcGxpdCgnficpXHJcbiAgICAgIHN3aXRjaCAodmFsWzBdKSB7XHJcbiAgICAgICAgY2FzZSAnMic6IHtcclxuICAgICAgICAgIGxldCBzdHJpbmdWYWwgPSBcIkV2ZXJ5IFwiO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmN5VHlwZSA9ICd3ZWVrbHknXHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY2llcyA9IHZhbFsxXT8uc3BsaXQoJywnKT8ubWFwKChlbGVtZW50OiBhbnkpID0+IE51bWJlcihlbGVtZW50KSAtIDEpO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmNpZXM/LmZvckVhY2goKGRheUluZGV4OiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgc3RyaW5nVmFsICs9IGluZGV4ID09PSAwID8gdGhpcy5kYXlOYW1lc1tkYXlJbmRleF0gOiAnLCAnICsgdGhpcy5kYXlOYW1lc1tkYXlJbmRleF07XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeU1lc3NhZ2UgPSBzdHJpbmdWYWw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnMyc6IHtcclxuICAgICAgICAgIGxldCBzdHJpbmdWYWwgPSBcImV2ZXJ5IFwiO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmN5VHlwZSA9ICdtb250aGx5J1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeURhdGUgPSB2YWxbMV1cclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jaWVzID0gdmFsWzJdPy5zcGxpdCgnLCcpPy5tYXAoKGVsZW1lbnQ6IGFueSkgPT4gTnVtYmVyKGVsZW1lbnQpIC0gMSk7XHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY2llcy5mb3JFYWNoKChtb250aEluZGV4OiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgc3RyaW5nVmFsICs9IGluZGV4ID09PSAwID8gdGhpcy5tb250aE5hbWVzW21vbnRoSW5kZXhdIDogJywgJyArIHRoaXMubW9udGhOYW1lc1ttb250aEluZGV4XTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICBsZXQgbW9udGhEYXRlTmFtZTtcclxuICAgICAgICAgIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSA9PSBcIjFcIikge1xyXG4gICAgICAgICAgICBtb250aERhdGVOYW1lID0gJzFzdCdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlID09IFwiMlwiKSB7XHJcbiAgICAgICAgICAgIG1vbnRoRGF0ZU5hbWUgPSAnMm5kJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeURhdGUgPT0gXCIzXCIpIHtcclxuICAgICAgICAgICAgbW9udGhEYXRlTmFtZSA9ICczcmQnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbW9udGhEYXRlTmFtZSA9IHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlICsgJ3RoJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeU1lc3NhZ2UgPSBtb250aERhdGVOYW1lICsgJyBvZiAnICsgc3RyaW5nVmFsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrXHJcbiAgICAgICAgY2FzZSAnNyc6IHtcclxuICAgICAgICAgIGxldCBzdHJpbmdWYWwgPSBcImV2ZXJ5IFwiO1xyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLnNlbGVjdGVkRnJlcXVlbmN5VHlwZSA9ICdxdWFydGVybHknXHJcbiAgICAgICAgICB0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSA9IHZhbFsxXTtcclxuICAgICAgICAgIHRoaXMuZGFzaGJvYXJkRm9ybS5zZWxlY3RlZEZyZXF1ZW5jaWVzID0gTnVtYmVyKHZhbFsyXS5zcGxpdCgnLCcpWzBdKSAtIDE7XHJcbiAgICAgICAgICBzdHJpbmdWYWwgKz0gdGhpcy5xdWFydGVyc1t0aGlzLmRhc2hib2FyZEZvcm0uc2VsZWN0ZWRGcmVxdWVuY2llc107XHJcbiAgICAgICAgICBsZXQgbW9udGhEYXRlTmFtZTtcclxuICAgICAgICAgIGlmICh0aGlzLmRhc2hib2FyZEZvcm0uZnJlcXVlbmN5RGF0ZSA9PSBcIjFcIikge1xyXG4gICAgICAgICAgICBtb250aERhdGVOYW1lID0gJzFzdCdcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2UgaWYgKHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlID09IFwiMlwiKSB7XHJcbiAgICAgICAgICAgIG1vbnRoRGF0ZU5hbWUgPSAnMm5kJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSBpZiAodGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeURhdGUgPT0gXCIzXCIpIHtcclxuICAgICAgICAgICAgbW9udGhEYXRlTmFtZSA9ICczcmQnXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbW9udGhEYXRlTmFtZSA9IHRoaXMuZGFzaGJvYXJkRm9ybS5mcmVxdWVuY3lEYXRlICsgJ3RoJ1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5kYXNoYm9hcmRGb3JtLmZyZXF1ZW5jeU1lc3NhZ2UgPSBtb250aERhdGVOYW1lICsgJyBvZiAnICsgc3RyaW5nVmFsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAgIGJyZWFrXHJcblxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XHJcbiAgICAvL3lvdXIgY29kZSB0byB1cGRhdGUgdGhlIG1vZGVsXHJcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBzZXRQZXJtaXNzaW9uKHJvbGVBY3Rpb25zOiBhbnkpe1xyXG4gICAgbGV0IGlmRXhpc3RSaXNrID0gcm9sZUFjdGlvbnM/LmZpbmQoKGVsOmFueSk9PiBlbC5tb2R1bGVOYW1lID09IFwicmlza1wiKTtcclxuICAgIGlmRXhpc3RSaXNrPy5zdWJNb2R1bGU/LmZvckVhY2goIChtb2R1bGU6IGFueSkgPT4ge1xyXG4gICAgICBtb2R1bGU/LnBlcm1pc3Npb25zPy5mb3JFYWNoKCAocGVybWlzc2lvbjogYW55KSA9PiB7XHJcbiAgICAgICAgc3dpdGNoKHBlcm1pc3Npb24/LmNvZGUpIHtcclxuICAgICAgICAgIGNhc2UgJ1JSTVInOiB7XHJcbiAgICAgICAgICAgIGlmKHBlcm1pc3Npb24/LmRlZmF1bHRQZXJtaXNzaW9uPT0xIHx8IHBlcm1pc3Npb24/LmVuYWJsZT09MSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNNYW5hZ2VSaXNrID0gdHJ1ZTtcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfSlcclxuICB9XHJcbn1cclxuIl19
|