@wavemaker/app-ng-runtime 12.0.0-next.45002 → 12.0.0-next.45005
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.
- app-ng-runtime/build-task/.npmignore +2 -0
- app-ng-runtime/build-task/bundles/index.umd.js +341 -344
- app-ng-runtime/build-task/esm2022/advanced/carousel/carousel-template/carousel-template.build.mjs +5 -3
- app-ng-runtime/build-task/esm2022/advanced/carousel/carousel.build.mjs +1 -1
- app-ng-runtime/build-task/esm2022/basic/default/label/label.build.mjs +1 -1
- app-ng-runtime/build-task/esm2022/basic/progress/progress-bar/progress-bar.build.mjs +1 -1
- app-ng-runtime/build-task/esm2022/containers/accordion/accordion.build.mjs +1 -1
- app-ng-runtime/build-task/esm2022/containers/repeat-template.build.mjs +5 -3
- app-ng-runtime/build-task/esm2022/containers/tabs/tabs.build.mjs +1 -1
- app-ng-runtime/build-task/esm2022/data/form/form-field/form-field.build.mjs +1 -1
- app-ng-runtime/build-task/esm2022/data/form/form.build.mjs +5 -2
- app-ng-runtime/build-task/esm2022/data/list/list.build.mjs +1 -1
- app-ng-runtime/build-task/esm2022/data/media-list/media-list.build.mjs +1 -1
- app-ng-runtime/build-task/esm2022/data/table/table-column/table-column.build.mjs +1 -1
- app-ng-runtime/build-task/esm2022/data/table/table.build.mjs +1 -1
- app-ng-runtime/build-task/esm2022/dialogs/partial-dialog/partial-dialog.build.mjs +1 -1
- app-ng-runtime/build-task/esm2022/input/file-upload/file-upload.build.mjs +1 -1
- app-ng-runtime/build-task/esm2022/navigation/menu/menu.build.mjs +8 -3
- app-ng-runtime/build-task/esm2022/navigation/popover/popover.build.mjs +1 -1
- app-ng-runtime/build-task/esm2022/page/page-content/page-content.build.mjs +1 -1
- app-ng-runtime/build-task/esm2022/page/page.build.mjs +3 -2
- app-ng-runtime/build-task/esm2022/public_api.mjs +1 -2
- app-ng-runtime/build-task/esm2022/utils/utils.mjs +1 -1
- app-ng-runtime/build-task/fesm2022/index.mjs +340 -341
- app-ng-runtime/build-task/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/build-task/public_api.d.ts +0 -1
- app-ng-runtime/components/advanced/carousel/.npmignore +2 -0
- app-ng-runtime/components/advanced/carousel/bundles/index.umd.js +29 -18
- app-ng-runtime/components/advanced/carousel/carousel-template/carousel-template.directive.d.ts +3 -3
- app-ng-runtime/components/advanced/carousel/carousel.directive.d.ts +2 -2
- app-ng-runtime/components/advanced/carousel/esm2022/carousel-template/carousel-template.directive.mjs +15 -9
- app-ng-runtime/components/advanced/carousel/esm2022/carousel.animator.mjs +3 -2
- app-ng-runtime/components/advanced/carousel/esm2022/carousel.directive.mjs +12 -7
- app-ng-runtime/components/advanced/carousel/esm2022/carousel.module.mjs +2 -2
- app-ng-runtime/components/advanced/carousel/fesm2022/index.mjs +28 -16
- app-ng-runtime/components/advanced/carousel/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/advanced/custom/.npmignore +2 -0
- app-ng-runtime/components/advanced/custom/bundles/index.umd.js +31 -94
- app-ng-runtime/components/advanced/custom/custom-widget-container/custom-widget-container.directive.d.ts +2 -0
- app-ng-runtime/components/advanced/custom/custom-widget-container/custom-widget.props.d.ts +1 -0
- app-ng-runtime/components/advanced/custom/custom-widget.module.d.ts +4 -5
- app-ng-runtime/components/advanced/custom/esm2022/custom-widget-container/custom-widget-container.directive.mjs +21 -13
- app-ng-runtime/components/advanced/custom/esm2022/custom-widget-container/custom-widget.props.mjs +5 -2
- app-ng-runtime/components/advanced/custom/esm2022/custom-widget.directive.mjs +5 -5
- app-ng-runtime/components/advanced/custom/esm2022/custom-widget.module.mjs +2 -9
- app-ng-runtime/components/advanced/custom/esm2022/public_api.mjs +1 -2
- app-ng-runtime/components/advanced/custom/fesm2022/index.mjs +31 -93
- app-ng-runtime/components/advanced/custom/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/advanced/custom/public_api.d.ts +0 -1
- app-ng-runtime/components/advanced/login/.npmignore +2 -0
- app-ng-runtime/components/advanced/login/bundles/index.umd.js +19 -13
- app-ng-runtime/components/advanced/login/esm2022/login.component.mjs +17 -10
- app-ng-runtime/components/advanced/login/esm2022/login.module.mjs +2 -2
- app-ng-runtime/components/advanced/login/fesm2022/index.mjs +18 -11
- app-ng-runtime/components/advanced/login/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/advanced/login/login.component.d.ts +2 -2
- app-ng-runtime/components/advanced/marquee/.npmignore +2 -0
- app-ng-runtime/components/advanced/marquee/bundles/index.umd.js +11 -6
- app-ng-runtime/components/advanced/marquee/esm2022/marquee.directive.mjs +12 -7
- app-ng-runtime/components/advanced/marquee/esm2022/marquee.module.mjs +2 -2
- app-ng-runtime/components/advanced/marquee/fesm2022/index.mjs +13 -8
- app-ng-runtime/components/advanced/marquee/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/advanced/marquee/marquee.directive.d.ts +2 -2
- app-ng-runtime/components/base/.npmignore +2 -0
- app-ng-runtime/components/base/bundles/index.umd.js +400 -312
- app-ng-runtime/components/base/directives/show-in-device.directive.d.ts +3 -6
- app-ng-runtime/components/base/esm2022/components.module.mjs +2 -2
- app-ng-runtime/components/base/esm2022/directives/show-in-device.directive.mjs +13 -15
- app-ng-runtime/components/base/esm2022/pipes/custom-pipes.mjs +35 -34
- app-ng-runtime/components/base/esm2022/pipes/image.pipe.mjs +2 -2
- app-ng-runtime/components/base/esm2022/pipes/sanitize.pipe.mjs +3 -3
- app-ng-runtime/components/base/esm2022/pipes/trust-as.pipe.mjs +3 -3
- app-ng-runtime/components/base/esm2022/pipes/wm-pipe.mjs +3 -2
- app-ng-runtime/components/base/esm2022/public_api.mjs +2 -1
- app-ng-runtime/components/base/esm2022/utils/data-utils.mjs +30 -29
- app-ng-runtime/components/base/esm2022/utils/form-utils.mjs +48 -42
- app-ng-runtime/components/base/esm2022/utils/live-utils.mjs +8 -7
- app-ng-runtime/components/base/esm2022/utils/widget-utils.mjs +28 -27
- app-ng-runtime/components/base/esm2022/widgets/common/base/base-container.component.mjs +8 -7
- app-ng-runtime/components/base/esm2022/widgets/common/base/base-field-validations.mjs +23 -22
- app-ng-runtime/components/base/esm2022/widgets/common/base/base.component.mjs +63 -42
- app-ng-runtime/components/base/esm2022/widgets/common/base/custom-widget-container.directive.mjs +4 -4
- app-ng-runtime/components/base/esm2022/widgets/common/base/dataset-aware-nav.component.mjs +52 -18
- app-ng-runtime/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +6 -5
- app-ng-runtime/components/base/esm2022/widgets/common/base/stylable.component.mjs +3 -3
- app-ng-runtime/components/base/esm2022/widgets/common/base/text-content.directive.mjs +3 -3
- app-ng-runtime/components/base/esm2022/widgets/common/container/container.directive.mjs +12 -7
- app-ng-runtime/components/base/esm2022/widgets/common/dialog/dialog.service.mjs +5 -4
- app-ng-runtime/components/base/esm2022/widgets/common/item-template/item-template.directive.mjs +12 -7
- app-ng-runtime/components/base/esm2022/widgets/common/lazy-load/lazy-load.directive.mjs +14 -7
- app-ng-runtime/components/base/esm2022/widgets/common/message/message.component.mjs +16 -10
- app-ng-runtime/components/base/esm2022/widgets/common/partial/partial.directive.mjs +14 -8
- app-ng-runtime/components/base/esm2022/widgets/common/partial-param/partial-param.directive.mjs +9 -8
- app-ng-runtime/components/base/esm2022/widgets/common/pull-to-refresh/pull-to-refresh.mjs +1 -1
- app-ng-runtime/components/base/esm2022/widgets/common/redraw/redrawable.directive.mjs +4 -4
- app-ng-runtime/components/base/esm2022/widgets/common/repeat-template/repeat-template.directive.mjs +15 -9
- app-ng-runtime/components/base/esm2022/widgets/common/smooth-scroll/smooth-scroll.directive.mjs +11 -10
- app-ng-runtime/components/base/esm2022/widgets/framework/deviceview.mjs +1 -1
- app-ng-runtime/components/base/esm2022/widgets/framework/property-change-handler.mjs +3 -2
- app-ng-runtime/components/base/esm2022/widgets/framework/styler.mjs +1 -1
- app-ng-runtime/components/base/esm2022/widgets/framework/widget-props.mjs +1 -1
- app-ng-runtime/components/base/esm2022/widgets/framework/widget-proxy-provider.mjs +4 -3
- app-ng-runtime/components/base/esm2022/widgets/framework/widget-registry.mjs +1 -1
- app-ng-runtime/components/base/fesm2022/index.mjs +405 -315
- app-ng-runtime/components/base/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/base/pipes/custom-pipes.d.ts +1 -1
- app-ng-runtime/components/base/public_api.d.ts +1 -0
- app-ng-runtime/components/base/utils/data-utils.d.ts +1 -0
- app-ng-runtime/components/base/utils/widget-utils.d.ts +2 -2
- app-ng-runtime/components/base/widgets/common/base/base-container.component.d.ts +1 -1
- app-ng-runtime/components/base/widgets/common/base/base-field-validations.d.ts +1 -1
- app-ng-runtime/components/base/widgets/common/base/base.component.d.ts +22 -4
- app-ng-runtime/components/base/widgets/common/base/dataset-aware-nav.component.d.ts +1 -1
- app-ng-runtime/components/base/widgets/common/base/partial-container.directive.d.ts +1 -1
- app-ng-runtime/components/base/widgets/common/container/container.directive.d.ts +2 -2
- app-ng-runtime/components/base/widgets/common/item-template/item-template.directive.d.ts +2 -2
- app-ng-runtime/components/base/widgets/common/lazy-load/lazy-load.directive.d.ts +2 -2
- app-ng-runtime/components/base/widgets/common/message/message.component.d.ts +2 -2
- app-ng-runtime/components/base/widgets/common/partial/partial.directive.d.ts +2 -2
- app-ng-runtime/components/base/widgets/common/repeat-template/repeat-template.directive.d.ts +3 -3
- app-ng-runtime/components/basic/default/.npmignore +2 -0
- app-ng-runtime/components/basic/default/anchor/anchor.component.d.ts +2 -2
- app-ng-runtime/components/basic/default/audio/audio.component.d.ts +2 -2
- app-ng-runtime/components/basic/default/bundles/index.umd.js +158 -115
- app-ng-runtime/components/basic/default/esm2022/anchor/anchor.component.mjs +31 -27
- app-ng-runtime/components/basic/default/esm2022/audio/audio.component.mjs +13 -7
- app-ng-runtime/components/basic/default/esm2022/basic.module.mjs +2 -2
- app-ng-runtime/components/basic/default/esm2022/html/html.directive.mjs +13 -8
- app-ng-runtime/components/basic/default/esm2022/icon/icon.component.mjs +19 -14
- app-ng-runtime/components/basic/default/esm2022/iframe/iframe.component.mjs +15 -9
- app-ng-runtime/components/basic/default/esm2022/label/label.directive.mjs +15 -9
- app-ng-runtime/components/basic/default/esm2022/picture/picture.directive.mjs +12 -7
- app-ng-runtime/components/basic/default/esm2022/picture/picture.props.mjs +1 -1
- app-ng-runtime/components/basic/default/esm2022/spinner/spinner.component.mjs +34 -30
- app-ng-runtime/components/basic/default/esm2022/video/video.component.mjs +21 -17
- app-ng-runtime/components/basic/default/fesm2022/index.mjs +157 -113
- app-ng-runtime/components/basic/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/basic/default/html/html.directive.d.ts +2 -2
- app-ng-runtime/components/basic/default/icon/icon.component.d.ts +2 -2
- app-ng-runtime/components/basic/default/iframe/iframe.component.d.ts +2 -2
- app-ng-runtime/components/basic/default/label/label.directive.d.ts +2 -2
- app-ng-runtime/components/basic/default/picture/picture.directive.d.ts +2 -2
- app-ng-runtime/components/basic/default/spinner/spinner.component.d.ts +2 -2
- app-ng-runtime/components/basic/default/video/video.component.d.ts +2 -2
- app-ng-runtime/components/basic/progress/.npmignore +2 -0
- app-ng-runtime/components/basic/progress/bundles/index.umd.js +40 -28
- app-ng-runtime/components/basic/progress/esm2022/progress-bar/progress-bar.component.mjs +22 -15
- app-ng-runtime/components/basic/progress/esm2022/progress-circle/progress-circle.component.mjs +17 -10
- app-ng-runtime/components/basic/progress/esm2022/progress.module.mjs +2 -2
- app-ng-runtime/components/basic/progress/esm2022/utils.mjs +3 -3
- app-ng-runtime/components/basic/progress/fesm2022/index.mjs +39 -26
- app-ng-runtime/components/basic/progress/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/basic/progress/progress-bar/progress-bar.component.d.ts +2 -2
- app-ng-runtime/components/basic/progress/progress-circle/progress-circle.component.d.ts +2 -2
- app-ng-runtime/components/basic/rich-text-editor/.npmignore +2 -0
- app-ng-runtime/components/basic/rich-text-editor/bundles/index.umd.js +19 -13
- app-ng-runtime/components/basic/rich-text-editor/esm2022/rich-text-editor.component.mjs +17 -10
- app-ng-runtime/components/basic/rich-text-editor/esm2022/rich-text-editor.module.mjs +2 -2
- app-ng-runtime/components/basic/rich-text-editor/fesm2022/index.mjs +18 -11
- app-ng-runtime/components/basic/rich-text-editor/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/basic/rich-text-editor/rich-text-editor.component.d.ts +2 -2
- app-ng-runtime/components/basic/search/.npmignore +2 -0
- app-ng-runtime/components/basic/search/bundles/index.umd.js +186 -175
- app-ng-runtime/components/basic/search/esm2022/data-provider/data-provider.mjs +1 -1
- app-ng-runtime/components/basic/search/esm2022/data-provider/local-data-provider.mjs +26 -23
- app-ng-runtime/components/basic/search/esm2022/data-provider/remote-data-provider.mjs +12 -11
- app-ng-runtime/components/basic/search/esm2022/scrollable.directive.mjs +3 -3
- app-ng-runtime/components/basic/search/esm2022/search.component.mjs +148 -138
- app-ng-runtime/components/basic/search/esm2022/search.module.mjs +2 -2
- app-ng-runtime/components/basic/search/fesm2022/index.mjs +186 -174
- app-ng-runtime/components/basic/search/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/basic/search/search.component.d.ts +2 -2
- app-ng-runtime/components/basic/tree/.npmignore +2 -0
- app-ng-runtime/components/basic/tree/bundles/index.umd.js +23 -17
- app-ng-runtime/components/basic/tree/esm2022/tree.component.mjs +21 -14
- app-ng-runtime/components/basic/tree/esm2022/tree.module.mjs +2 -2
- app-ng-runtime/components/basic/tree/fesm2022/index.mjs +22 -15
- app-ng-runtime/components/basic/tree/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/basic/tree/tree.component.d.ts +2 -2
- app-ng-runtime/components/chart/.npmignore +2 -0
- app-ng-runtime/components/chart/bundles/index.umd.js +97 -84
- app-ng-runtime/components/chart/chart.component.d.ts +3 -3
- app-ng-runtime/components/chart/chart.utils.d.ts +3 -3
- app-ng-runtime/components/chart/esm2022/chart.component.mjs +82 -68
- app-ng-runtime/components/chart/esm2022/chart.module.mjs +2 -2
- app-ng-runtime/components/chart/esm2022/chart.utils.mjs +14 -13
- app-ng-runtime/components/chart/fesm2022/index.mjs +95 -81
- app-ng-runtime/components/chart/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/containers/accordion/.npmignore +2 -0
- app-ng-runtime/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +2 -2
- app-ng-runtime/components/containers/accordion/accordion.directive.d.ts +2 -2
- app-ng-runtime/components/containers/accordion/bundles/index.umd.js +51 -40
- app-ng-runtime/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +23 -17
- app-ng-runtime/components/containers/accordion/esm2022/accordion-pane/accordion-pane.props.mjs +4 -4
- app-ng-runtime/components/containers/accordion/esm2022/accordion.directive.mjs +25 -19
- app-ng-runtime/components/containers/accordion/esm2022/accordion.module.mjs +2 -2
- app-ng-runtime/components/containers/accordion/fesm2022/index.mjs +50 -38
- app-ng-runtime/components/containers/accordion/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/containers/layout-grid/.npmignore +2 -0
- app-ng-runtime/components/containers/layout-grid/bundles/index.umd.js +32 -17
- app-ng-runtime/components/containers/layout-grid/esm2022/layout-grid-column/layout-grid-column.directive.mjs +13 -8
- app-ng-runtime/components/containers/layout-grid/esm2022/layout-grid-row/layout-grid-row.directive.mjs +12 -7
- app-ng-runtime/components/containers/layout-grid/esm2022/layout-grid.directive.mjs +12 -7
- app-ng-runtime/components/containers/layout-grid/esm2022/layout-grid.module.mjs +2 -2
- app-ng-runtime/components/containers/layout-grid/fesm2022/index.mjs +34 -19
- app-ng-runtime/components/containers/layout-grid/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/containers/layout-grid/layout-grid-column/layout-grid-column.directive.d.ts +2 -2
- app-ng-runtime/components/containers/layout-grid/layout-grid-row/layout-grid-row.directive.d.ts +2 -2
- app-ng-runtime/components/containers/layout-grid/layout-grid.directive.d.ts +2 -2
- app-ng-runtime/components/containers/linear-layout/.npmignore +2 -0
- app-ng-runtime/components/containers/linear-layout/bundles/index.umd.js +21 -11
- app-ng-runtime/components/containers/linear-layout/esm2022/linear-layout-item/linear-layout-item.directive.mjs +12 -7
- app-ng-runtime/components/containers/linear-layout/esm2022/linear-layout.directive.mjs +12 -7
- app-ng-runtime/components/containers/linear-layout/esm2022/linear-layout.module.mjs +2 -2
- app-ng-runtime/components/containers/linear-layout/fesm2022/index.mjs +23 -13
- app-ng-runtime/components/containers/linear-layout/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/containers/linear-layout/linear-layout-item/linear-layout-item.directive.d.ts +2 -2
- app-ng-runtime/components/containers/linear-layout/linear-layout.directive.d.ts +2 -2
- app-ng-runtime/components/containers/panel/.npmignore +2 -0
- app-ng-runtime/components/containers/panel/bundles/index.umd.js +85 -85
- app-ng-runtime/components/containers/panel/esm2022/panel.component.mjs +83 -82
- app-ng-runtime/components/containers/panel/esm2022/panel.module.mjs +2 -2
- app-ng-runtime/components/containers/panel/fesm2022/index.mjs +84 -83
- app-ng-runtime/components/containers/panel/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/containers/panel/panel.component.d.ts +3 -3
- app-ng-runtime/components/containers/tabs/.npmignore +2 -0
- app-ng-runtime/components/containers/tabs/bundles/index.umd.js +74 -63
- app-ng-runtime/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +14 -8
- app-ng-runtime/components/containers/tabs/esm2022/tab-pane/tab-pane.props.mjs +4 -4
- app-ng-runtime/components/containers/tabs/esm2022/tabs.animator.mjs +1 -1
- app-ng-runtime/components/containers/tabs/esm2022/tabs.component.mjs +57 -51
- app-ng-runtime/components/containers/tabs/esm2022/tabs.module.mjs +2 -2
- app-ng-runtime/components/containers/tabs/esm2022/tabs.props.mjs +1 -1
- app-ng-runtime/components/containers/tabs/fesm2022/index.mjs +73 -61
- app-ng-runtime/components/containers/tabs/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/containers/tabs/tab-pane/tab-pane.component.d.ts +2 -2
- app-ng-runtime/components/containers/tabs/tabs.component.d.ts +2 -2
- app-ng-runtime/components/containers/tile/.npmignore +2 -0
- app-ng-runtime/components/containers/tile/bundles/index.umd.js +11 -6
- app-ng-runtime/components/containers/tile/esm2022/tile.directive.mjs +12 -7
- app-ng-runtime/components/containers/tile/esm2022/tile.module.mjs +2 -2
- app-ng-runtime/components/containers/tile/fesm2022/index.mjs +13 -8
- app-ng-runtime/components/containers/tile/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/containers/tile/tile.directive.d.ts +2 -2
- app-ng-runtime/components/containers/wizard/.npmignore +2 -0
- app-ng-runtime/components/containers/wizard/bundles/index.umd.js +102 -98
- app-ng-runtime/components/containers/wizard/esm2022/wizard-step/wizard-step.directive.mjs +13 -8
- app-ng-runtime/components/containers/wizard/esm2022/wizard.component.mjs +92 -93
- app-ng-runtime/components/containers/wizard/esm2022/wizard.module.mjs +2 -2
- app-ng-runtime/components/containers/wizard/fesm2022/index.mjs +104 -100
- app-ng-runtime/components/containers/wizard/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/containers/wizard/wizard-step/wizard-step.directive.d.ts +2 -2
- app-ng-runtime/components/containers/wizard/wizard.component.d.ts +2 -2
- app-ng-runtime/components/data/card/.npmignore +2 -0
- app-ng-runtime/components/data/card/bundles/index.umd.js +70 -50
- app-ng-runtime/components/data/card/card-actions/card-actions.directive.d.ts +2 -2
- app-ng-runtime/components/data/card/card-content/card-content.component.d.ts +2 -2
- app-ng-runtime/components/data/card/card-footer/card-footer.directive.d.ts +2 -2
- app-ng-runtime/components/data/card/card.component.d.ts +2 -2
- app-ng-runtime/components/data/card/esm2022/card-actions/card-actions.directive.mjs +12 -7
- app-ng-runtime/components/data/card/esm2022/card-content/card-content.component.mjs +15 -9
- app-ng-runtime/components/data/card/esm2022/card-footer/card-footer.directive.mjs +12 -7
- app-ng-runtime/components/data/card/esm2022/card.component.mjs +38 -34
- app-ng-runtime/components/data/card/esm2022/card.module.mjs +2 -2
- app-ng-runtime/components/data/card/fesm2022/index.mjs +72 -52
- app-ng-runtime/components/data/card/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/form/.npmignore +2 -0
- app-ng-runtime/components/data/form/bundles/index.umd.js +197 -184
- app-ng-runtime/components/data/form/esm2022/form-action/form-action.directive.mjs +15 -9
- app-ng-runtime/components/data/form/esm2022/form-field/form-field.directive.mjs +21 -15
- app-ng-runtime/components/data/form/esm2022/form-field/form-field.props.mjs +1 -1
- app-ng-runtime/components/data/form/esm2022/form-widget.directive.mjs +4 -4
- app-ng-runtime/components/data/form/esm2022/form.component.mjs +138 -134
- app-ng-runtime/components/data/form/esm2022/form.module.mjs +2 -2
- app-ng-runtime/components/data/form/esm2022/form.props.mjs +1 -1
- app-ng-runtime/components/data/form/esm2022/live-actions/dependson.directive.mjs +4 -4
- app-ng-runtime/components/data/form/esm2022/live-actions/live-actions.directive.mjs +4 -4
- app-ng-runtime/components/data/form/esm2022/live-filter/live-filter.directive.mjs +7 -6
- app-ng-runtime/components/data/form/esm2022/live-form/live-form.directive.mjs +14 -13
- app-ng-runtime/components/data/form/fesm2022/index.mjs +201 -187
- app-ng-runtime/components/data/form/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/form/form-action/form-action.directive.d.ts +2 -2
- app-ng-runtime/components/data/form/form-field/form-field.directive.d.ts +2 -2
- app-ng-runtime/components/data/form/form.component.d.ts +4 -4
- app-ng-runtime/components/data/form/live-form/live-form.directive.d.ts +1 -1
- app-ng-runtime/components/data/list/.npmignore +2 -0
- app-ng-runtime/components/data/list/bundles/index.umd.js +829 -818
- app-ng-runtime/components/data/list/esm2022/list-item.directive.mjs +9 -4
- app-ng-runtime/components/data/list/esm2022/list.animator.mjs +5 -3
- app-ng-runtime/components/data/list/esm2022/list.component.mjs +817 -810
- app-ng-runtime/components/data/list/esm2022/list.module.mjs +2 -2
- app-ng-runtime/components/data/list/fesm2022/index.mjs +828 -816
- app-ng-runtime/components/data/list/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/list/list-item.directive.d.ts +4 -0
- app-ng-runtime/components/data/list/list.component.d.ts +55 -54
- app-ng-runtime/components/data/live-table/.npmignore +2 -0
- app-ng-runtime/components/data/live-table/bundles/index.umd.js +13 -7
- app-ng-runtime/components/data/live-table/esm2022/live-table.component.mjs +14 -8
- app-ng-runtime/components/data/live-table/esm2022/live-table.module.mjs +2 -2
- app-ng-runtime/components/data/live-table/fesm2022/index.mjs +15 -9
- app-ng-runtime/components/data/live-table/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/live-table/live-table.component.d.ts +2 -2
- app-ng-runtime/components/data/pagination/.npmignore +2 -0
- app-ng-runtime/components/data/pagination/bundles/index.umd.js +113 -110
- app-ng-runtime/components/data/pagination/esm2022/pagination.component.mjs +111 -107
- app-ng-runtime/components/data/pagination/esm2022/pagination.module.mjs +2 -2
- app-ng-runtime/components/data/pagination/fesm2022/index.mjs +112 -108
- app-ng-runtime/components/data/pagination/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/pagination/pagination.component.d.ts +2 -2
- app-ng-runtime/components/data/table/.npmignore +2 -0
- app-ng-runtime/components/data/table/bundles/index.umd.js +314 -269
- app-ng-runtime/components/data/table/esm2022/table-action/table-action.directive.mjs +15 -9
- app-ng-runtime/components/data/table/esm2022/table-column/table-column.directive.mjs +40 -25
- app-ng-runtime/components/data/table/esm2022/table-column/table-column.props.mjs +2 -2
- app-ng-runtime/components/data/table/esm2022/table-column-group/table-column-group.directive.mjs +13 -8
- app-ng-runtime/components/data/table/esm2022/table-cud.directive.mjs +10 -9
- app-ng-runtime/components/data/table/esm2022/table-filter.directive.mjs +56 -58
- app-ng-runtime/components/data/table/esm2022/table-row/table-row.directive.mjs +13 -8
- app-ng-runtime/components/data/table/esm2022/table-row-action/table-row-action.directive.mjs +14 -8
- app-ng-runtime/components/data/table/esm2022/table.component.mjs +165 -150
- app-ng-runtime/components/data/table/esm2022/table.module.mjs +2 -2
- app-ng-runtime/components/data/table/esm2022/table.props.mjs +2 -2
- app-ng-runtime/components/data/table/fesm2022/index.mjs +313 -267
- app-ng-runtime/components/data/table/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/data/table/table-action/table-action.directive.d.ts +2 -2
- app-ng-runtime/components/data/table/table-column/table-column.directive.d.ts +8 -8
- app-ng-runtime/components/data/table/table-column-group/table-column-group.directive.d.ts +2 -2
- app-ng-runtime/components/data/table/table-row/table-row.directive.d.ts +2 -2
- app-ng-runtime/components/data/table/table-row-action/table-row-action.directive.d.ts +2 -2
- app-ng-runtime/components/data/table/table.component.d.ts +4 -4
- app-ng-runtime/components/dialogs/alert-dialog/.npmignore +2 -0
- app-ng-runtime/components/dialogs/alert-dialog/alert-dialog.component.d.ts +2 -2
- app-ng-runtime/components/dialogs/alert-dialog/bundles/index.umd.js +15 -9
- app-ng-runtime/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +16 -10
- app-ng-runtime/components/dialogs/alert-dialog/esm2022/alert-dialog.module.mjs +2 -2
- app-ng-runtime/components/dialogs/alert-dialog/fesm2022/index.mjs +17 -11
- app-ng-runtime/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/dialogs/confirm-dialog/.npmignore +2 -0
- app-ng-runtime/components/dialogs/confirm-dialog/bundles/index.umd.js +17 -11
- app-ng-runtime/components/dialogs/confirm-dialog/confirm-dialog.component.d.ts +2 -2
- app-ng-runtime/components/dialogs/confirm-dialog/esm2022/confirm-dialog.component.mjs +18 -12
- app-ng-runtime/components/dialogs/confirm-dialog/esm2022/confirm-dialog.module.mjs +2 -2
- app-ng-runtime/components/dialogs/confirm-dialog/fesm2022/index.mjs +19 -13
- app-ng-runtime/components/dialogs/confirm-dialog/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/dialogs/default/.npmignore +2 -0
- app-ng-runtime/components/dialogs/default/base-dialog.d.ts +2 -2
- app-ng-runtime/components/dialogs/default/bundles/index.umd.js +75 -71
- app-ng-runtime/components/dialogs/default/dialog-footer/dialog-footer.directive.d.ts +2 -2
- app-ng-runtime/components/dialogs/default/esm2022/base-dialog.mjs +14 -9
- app-ng-runtime/components/dialogs/default/esm2022/dialog-body/dialog-body.directive.mjs +4 -4
- app-ng-runtime/components/dialogs/default/esm2022/dialog-footer/dialog-footer.directive.mjs +12 -7
- app-ng-runtime/components/dialogs/default/esm2022/dialog-header/dialog-header.component.mjs +49 -55
- app-ng-runtime/components/dialogs/default/esm2022/dialog.module.mjs +2 -2
- app-ng-runtime/components/dialogs/default/fesm2022/index.mjs +76 -72
- app-ng-runtime/components/dialogs/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/dialogs/design-dialog/.npmignore +2 -0
- app-ng-runtime/components/dialogs/design-dialog/bundles/index.umd.js +20 -14
- app-ng-runtime/components/dialogs/design-dialog/dialog.component.d.ts +2 -2
- app-ng-runtime/components/dialogs/design-dialog/esm2022/design-dialog.module.mjs +2 -2
- app-ng-runtime/components/dialogs/design-dialog/esm2022/dialog.component.mjs +21 -15
- app-ng-runtime/components/dialogs/design-dialog/fesm2022/index.mjs +22 -16
- app-ng-runtime/components/dialogs/design-dialog/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/dialogs/iframe-dialog/.npmignore +2 -0
- app-ng-runtime/components/dialogs/iframe-dialog/bundles/index.umd.js +20 -14
- app-ng-runtime/components/dialogs/iframe-dialog/esm2022/iframe-dialog.component.mjs +21 -15
- app-ng-runtime/components/dialogs/iframe-dialog/esm2022/iframe-dialog.module.mjs +2 -2
- app-ng-runtime/components/dialogs/iframe-dialog/fesm2022/index.mjs +22 -16
- app-ng-runtime/components/dialogs/iframe-dialog/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/dialogs/iframe-dialog/iframe-dialog.component.d.ts +2 -2
- app-ng-runtime/components/dialogs/login-dialog/.npmignore +2 -0
- app-ng-runtime/components/dialogs/login-dialog/bundles/index.umd.js +4 -4
- app-ng-runtime/components/dialogs/login-dialog/esm2022/login-dialog.directive.mjs +4 -4
- app-ng-runtime/components/dialogs/login-dialog/esm2022/login-dialog.module.mjs +2 -2
- app-ng-runtime/components/dialogs/login-dialog/fesm2022/index.mjs +4 -4
- app-ng-runtime/components/dialogs/login-dialog/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/dialogs/partial-dialog/.npmignore +2 -0
- app-ng-runtime/components/dialogs/partial-dialog/bundles/index.umd.js +16 -10
- app-ng-runtime/components/dialogs/partial-dialog/esm2022/partial-dialog.component.mjs +17 -11
- app-ng-runtime/components/dialogs/partial-dialog/esm2022/partial-dialog.module.mjs +2 -2
- app-ng-runtime/components/dialogs/partial-dialog/fesm2022/index.mjs +18 -12
- app-ng-runtime/components/dialogs/partial-dialog/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/dialogs/partial-dialog/partial-dialog.component.d.ts +2 -2
- app-ng-runtime/components/input/calendar/.npmignore +2 -0
- app-ng-runtime/components/input/calendar/bundles/index.umd.js +46 -38
- app-ng-runtime/components/input/calendar/calendar.component.d.ts +2 -2
- app-ng-runtime/components/input/calendar/esm2022/calendar.component.mjs +44 -35
- app-ng-runtime/components/input/calendar/esm2022/calendar.module.mjs +2 -2
- app-ng-runtime/components/input/calendar/fesm2022/index.mjs +45 -36
- app-ng-runtime/components/input/calendar/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/chips/.npmignore +2 -0
- app-ng-runtime/components/input/chips/bundles/index.umd.js +69 -61
- app-ng-runtime/components/input/chips/chips.component.d.ts +3 -3
- app-ng-runtime/components/input/chips/esm2022/chips.component.mjs +67 -58
- app-ng-runtime/components/input/chips/esm2022/chips.module.mjs +2 -2
- app-ng-runtime/components/input/chips/fesm2022/index.mjs +67 -58
- app-ng-runtime/components/input/chips/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/color-picker/.npmignore +2 -0
- app-ng-runtime/components/input/color-picker/bundles/index.umd.js +25 -12
- app-ng-runtime/components/input/color-picker/color-picker.component.d.ts +2 -2
- app-ng-runtime/components/input/color-picker/esm2022/color-picker.component.mjs +26 -13
- app-ng-runtime/components/input/color-picker/esm2022/color-picker.module.mjs +2 -2
- app-ng-runtime/components/input/color-picker/fesm2022/index.mjs +26 -13
- app-ng-runtime/components/input/color-picker/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/currency/.npmignore +2 -0
- app-ng-runtime/components/input/currency/bundles/index.umd.js +18 -11
- app-ng-runtime/components/input/currency/currency.component.d.ts +2 -2
- app-ng-runtime/components/input/currency/esm2022/currency.component.mjs +19 -12
- app-ng-runtime/components/input/currency/esm2022/currency.module.mjs +2 -2
- app-ng-runtime/components/input/currency/fesm2022/index.mjs +19 -12
- app-ng-runtime/components/input/currency/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/default/.npmignore +2 -0
- app-ng-runtime/components/input/default/base-form.component.d.ts +3 -3
- app-ng-runtime/components/input/default/bundles/index.umd.js +583 -450
- app-ng-runtime/components/input/default/button/button.component.d.ts +2 -2
- app-ng-runtime/components/input/default/button-group/button-group.directive.d.ts +2 -2
- app-ng-runtime/components/input/default/checkbox/checkbox.component.d.ts +3 -2
- app-ng-runtime/components/input/default/checkboxset/checkboxset.component.d.ts +2 -2
- app-ng-runtime/components/input/default/composite/composite.directive.d.ts +2 -2
- app-ng-runtime/components/input/default/dataset-aware-form.component.d.ts +4 -4
- app-ng-runtime/components/input/default/esm2022/base-form-custom.component.mjs +3 -3
- app-ng-runtime/components/input/default/esm2022/base-form.component.mjs +17 -11
- app-ng-runtime/components/input/default/esm2022/button/button.component.mjs +32 -28
- app-ng-runtime/components/input/default/esm2022/button-group/button-group.directive.mjs +12 -7
- app-ng-runtime/components/input/default/esm2022/caption-position.directive.mjs +5 -4
- app-ng-runtime/components/input/default/esm2022/checkbox/checkbox.component.mjs +27 -17
- app-ng-runtime/components/input/default/esm2022/checkboxset/checkboxset.component.mjs +107 -103
- app-ng-runtime/components/input/default/esm2022/composite/composite.directive.mjs +12 -7
- app-ng-runtime/components/input/default/esm2022/dataset-aware-form.component.mjs +32 -26
- app-ng-runtime/components/input/default/esm2022/input.module.mjs +2 -2
- app-ng-runtime/components/input/default/esm2022/number/number.component.mjs +17 -10
- app-ng-runtime/components/input/default/esm2022/radioset/radioset.component.mjs +105 -102
- app-ng-runtime/components/input/default/esm2022/select/select.component.mjs +43 -32
- app-ng-runtime/components/input/default/esm2022/switch/switch.component.mjs +38 -31
- app-ng-runtime/components/input/default/esm2022/text/base/base-input.mjs +18 -11
- app-ng-runtime/components/input/default/esm2022/text/calendar/input-calendar.component.mjs +23 -12
- app-ng-runtime/components/input/default/esm2022/text/color/input-color.component.mjs +23 -12
- app-ng-runtime/components/input/default/esm2022/text/email/input-email.component.mjs +20 -11
- app-ng-runtime/components/input/default/esm2022/text/locale/number-locale.mjs +35 -24
- app-ng-runtime/components/input/default/esm2022/text/number/input-number.component.mjs +21 -12
- app-ng-runtime/components/input/default/esm2022/text/text/input-text.component.mjs +20 -11
- app-ng-runtime/components/input/default/esm2022/textarea/textarea.component.mjs +21 -12
- app-ng-runtime/components/input/default/fesm2022/index.mjs +586 -451
- app-ng-runtime/components/input/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/default/number/number.component.d.ts +2 -2
- app-ng-runtime/components/input/default/radioset/radioset.component.d.ts +2 -2
- app-ng-runtime/components/input/default/select/select.component.d.ts +2 -2
- app-ng-runtime/components/input/default/switch/switch.component.d.ts +2 -2
- app-ng-runtime/components/input/default/text/base/base-input.d.ts +3 -2
- app-ng-runtime/components/input/default/text/calendar/input-calendar.component.d.ts +2 -2
- app-ng-runtime/components/input/default/text/color/input-color.component.d.ts +2 -2
- app-ng-runtime/components/input/default/text/email/input-email.component.d.ts +2 -2
- app-ng-runtime/components/input/default/text/locale/number-locale.d.ts +1 -1
- app-ng-runtime/components/input/default/text/number/input-number.component.d.ts +2 -2
- app-ng-runtime/components/input/default/text/text/input-text.component.d.ts +2 -2
- app-ng-runtime/components/input/default/textarea/textarea.component.d.ts +2 -2
- app-ng-runtime/components/input/epoch/.npmignore +2 -0
- app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +2 -2
- app-ng-runtime/components/input/epoch/bundles/index.umd.js +200 -163
- app-ng-runtime/components/input/epoch/date/date.component.d.ts +2 -2
- app-ng-runtime/components/input/epoch/date-time/date-time.component.d.ts +2 -2
- app-ng-runtime/components/input/epoch/esm2022/base-date-time.component.mjs +44 -36
- app-ng-runtime/components/input/epoch/esm2022/date/date.component.mjs +29 -21
- app-ng-runtime/components/input/epoch/esm2022/date/date.props.mjs +2 -2
- app-ng-runtime/components/input/epoch/esm2022/date/imaskUtil.mjs +1 -1
- app-ng-runtime/components/input/epoch/esm2022/date-time/date-time-picker.component.mjs +42 -41
- app-ng-runtime/components/input/epoch/esm2022/date-time/date-time.component.mjs +49 -37
- app-ng-runtime/components/input/epoch/esm2022/epoch.module.mjs +2 -2
- app-ng-runtime/components/input/epoch/esm2022/picker/picker.component.mjs +7 -5
- app-ng-runtime/components/input/epoch/esm2022/time/time.component.mjs +35 -24
- app-ng-runtime/components/input/epoch/fesm2022/index.mjs +197 -159
- app-ng-runtime/components/input/epoch/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/epoch/time/time.component.d.ts +2 -2
- app-ng-runtime/components/input/file-upload/.npmignore +2 -0
- app-ng-runtime/components/input/file-upload/bundles/index.umd.js +133 -135
- app-ng-runtime/components/input/file-upload/esm2022/file-upload.component.mjs +131 -132
- app-ng-runtime/components/input/file-upload/esm2022/file-upload.module.mjs +2 -2
- app-ng-runtime/components/input/file-upload/fesm2022/index.mjs +132 -133
- app-ng-runtime/components/input/file-upload/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/file-upload/file-upload.component.d.ts +2 -2
- app-ng-runtime/components/input/rating/.npmignore +2 -0
- app-ng-runtime/components/input/rating/bundles/index.umd.js +60 -51
- app-ng-runtime/components/input/rating/esm2022/rating.component.mjs +58 -48
- app-ng-runtime/components/input/rating/esm2022/rating.module.mjs +2 -2
- app-ng-runtime/components/input/rating/fesm2022/index.mjs +58 -48
- app-ng-runtime/components/input/rating/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/rating/rating.component.d.ts +2 -2
- app-ng-runtime/components/input/slider/.npmignore +2 -0
- app-ng-runtime/components/input/slider/bundles/index.umd.js +23 -13
- app-ng-runtime/components/input/slider/esm2022/slider.component.mjs +24 -14
- app-ng-runtime/components/input/slider/esm2022/slider.module.mjs +2 -2
- app-ng-runtime/components/input/slider/fesm2022/index.mjs +24 -14
- app-ng-runtime/components/input/slider/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/input/slider/slider.component.d.ts +2 -2
- app-ng-runtime/components/navigation/breadcrumb/.npmignore +2 -0
- app-ng-runtime/components/navigation/breadcrumb/breadcrumb.component.d.ts +2 -2
- app-ng-runtime/components/navigation/breadcrumb/bundles/index.umd.js +33 -28
- app-ng-runtime/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +34 -29
- app-ng-runtime/components/navigation/breadcrumb/esm2022/breadcrumb.module.mjs +2 -2
- app-ng-runtime/components/navigation/breadcrumb/fesm2022/index.mjs +35 -30
- app-ng-runtime/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/menu/.npmignore +2 -0
- app-ng-runtime/components/navigation/menu/bundles/index.umd.js +160 -145
- app-ng-runtime/components/navigation/menu/esm2022/menu-adapator.component.mjs +13 -7
- app-ng-runtime/components/navigation/menu/esm2022/menu-dropdown/menu-dropdown.component.mjs +5 -4
- app-ng-runtime/components/navigation/menu/esm2022/menu-dropdown-item/menu-dropdown-item.component.mjs +27 -26
- app-ng-runtime/components/navigation/menu/esm2022/menu.component.mjs +44 -40
- app-ng-runtime/components/navigation/menu/esm2022/menu.module.mjs +4 -3
- app-ng-runtime/components/navigation/menu/esm2022/nav/nav-item/nav-item.directive.mjs +14 -8
- app-ng-runtime/components/navigation/menu/esm2022/nav/nav.component.mjs +63 -63
- app-ng-runtime/components/navigation/menu/esm2022/nav/navigation-control.directive.mjs +3 -3
- app-ng-runtime/components/navigation/menu/fesm2022/index.mjs +160 -144
- app-ng-runtime/components/navigation/menu/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/menu/menu-adapator.component.d.ts +1 -1
- app-ng-runtime/components/navigation/menu/menu-dropdown-item/menu-dropdown-item.component.d.ts +12 -1
- app-ng-runtime/components/navigation/menu/menu.component.d.ts +2 -2
- app-ng-runtime/components/navigation/menu/nav/nav-item/nav-item.directive.d.ts +3 -3
- app-ng-runtime/components/navigation/menu/nav/nav.component.d.ts +3 -4
- app-ng-runtime/components/navigation/navbar/.npmignore +2 -0
- app-ng-runtime/components/navigation/navbar/bundles/index.umd.js +29 -22
- app-ng-runtime/components/navigation/navbar/esm2022/navbar.component.mjs +30 -23
- app-ng-runtime/components/navigation/navbar/esm2022/navbar.module.mjs +2 -2
- app-ng-runtime/components/navigation/navbar/fesm2022/index.mjs +31 -24
- app-ng-runtime/components/navigation/navbar/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/navbar/navbar.component.d.ts +2 -2
- app-ng-runtime/components/navigation/popover/.npmignore +2 -0
- app-ng-runtime/components/navigation/popover/bundles/index.umd.js +18 -11
- app-ng-runtime/components/navigation/popover/esm2022/popover.component.mjs +19 -12
- app-ng-runtime/components/navigation/popover/esm2022/popover.module.mjs +2 -2
- app-ng-runtime/components/navigation/popover/fesm2022/index.mjs +20 -13
- app-ng-runtime/components/navigation/popover/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/navigation/popover/popover.component.d.ts +2 -2
- app-ng-runtime/components/page/default/.npmignore +2 -0
- app-ng-runtime/components/page/default/bundles/index.umd.js +63 -31
- app-ng-runtime/components/page/default/content/content.component.d.ts +2 -2
- app-ng-runtime/components/page/default/esm2022/content/content.component.mjs +13 -7
- app-ng-runtime/components/page/default/esm2022/layout.directive.mjs +12 -7
- app-ng-runtime/components/page/default/esm2022/page-content/page-content.component.mjs +13 -7
- app-ng-runtime/components/page/default/esm2022/page.directive.mjs +12 -7
- app-ng-runtime/components/page/default/esm2022/page.module.mjs +2 -2
- app-ng-runtime/components/page/default/esm2022/router-outlet.directive.mjs +12 -7
- app-ng-runtime/components/page/default/esm2022/spa-page.directive.mjs +12 -7
- app-ng-runtime/components/page/default/fesm2022/index.mjs +65 -33
- app-ng-runtime/components/page/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/page/default/layout.directive.d.ts +2 -2
- app-ng-runtime/components/page/default/page-content/page-content.component.d.ts +2 -2
- app-ng-runtime/components/page/default/page.directive.d.ts +2 -2
- app-ng-runtime/components/page/default/router-outlet.directive.d.ts +2 -2
- app-ng-runtime/components/page/default/spa-page.directive.d.ts +2 -2
- app-ng-runtime/components/page/footer/.npmignore +2 -0
- app-ng-runtime/components/page/footer/bundles/index.umd.js +11 -6
- app-ng-runtime/components/page/footer/esm2022/footer.directive.mjs +12 -7
- app-ng-runtime/components/page/footer/esm2022/footer.module.mjs +2 -2
- app-ng-runtime/components/page/footer/fesm2022/index.mjs +13 -8
- app-ng-runtime/components/page/footer/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/page/footer/footer.directive.d.ts +2 -2
- app-ng-runtime/components/page/header/.npmignore +2 -0
- app-ng-runtime/components/page/header/bundles/index.umd.js +12 -6
- app-ng-runtime/components/page/header/esm2022/header.component.mjs +13 -7
- app-ng-runtime/components/page/header/esm2022/header.module.mjs +2 -2
- app-ng-runtime/components/page/header/fesm2022/index.mjs +14 -8
- app-ng-runtime/components/page/header/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/page/header/header.component.d.ts +2 -2
- app-ng-runtime/components/page/left-panel/.npmignore +2 -0
- app-ng-runtime/components/page/left-panel/bundles/index.umd.js +12 -7
- app-ng-runtime/components/page/left-panel/esm2022/left-panel.animator.mjs +1 -1
- app-ng-runtime/components/page/left-panel/esm2022/left-panel.directive.mjs +13 -8
- app-ng-runtime/components/page/left-panel/esm2022/left-panel.module.mjs +2 -2
- app-ng-runtime/components/page/left-panel/fesm2022/index.mjs +14 -9
- app-ng-runtime/components/page/left-panel/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/page/left-panel/left-panel.directive.d.ts +2 -2
- app-ng-runtime/components/page/right-panel/.npmignore +2 -0
- app-ng-runtime/components/page/right-panel/bundles/index.umd.js +11 -6
- app-ng-runtime/components/page/right-panel/esm2022/right-panel.directive.mjs +12 -7
- app-ng-runtime/components/page/right-panel/esm2022/right-panel.module.mjs +2 -2
- app-ng-runtime/components/page/right-panel/fesm2022/index.mjs +13 -8
- app-ng-runtime/components/page/right-panel/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/page/right-panel/right-panel.directive.d.ts +2 -2
- app-ng-runtime/components/page/top-nav/.npmignore +2 -0
- app-ng-runtime/components/page/top-nav/bundles/index.umd.js +11 -6
- app-ng-runtime/components/page/top-nav/esm2022/top-nav.directive.mjs +12 -7
- app-ng-runtime/components/page/top-nav/esm2022/top-nav.module.mjs +2 -2
- app-ng-runtime/components/page/top-nav/fesm2022/index.mjs +13 -8
- app-ng-runtime/components/page/top-nav/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/page/top-nav/top-nav.directive.d.ts +2 -2
- app-ng-runtime/components/prefab/.npmignore +2 -0
- app-ng-runtime/components/prefab/bundles/index.umd.js +28 -18
- app-ng-runtime/components/prefab/esm2022/prefab-container/prefab-container.directive.mjs +14 -8
- app-ng-runtime/components/prefab/esm2022/prefab.directive.mjs +15 -9
- app-ng-runtime/components/prefab/esm2022/prefab.module.mjs +2 -2
- app-ng-runtime/components/prefab/fesm2022/index.mjs +26 -15
- app-ng-runtime/components/prefab/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/components/prefab/prefab-container/prefab-container.directive.d.ts +2 -2
- app-ng-runtime/components/prefab/prefab.directive.d.ts +2 -2
- app-ng-runtime/core/.npmignore +2 -0
- app-ng-runtime/core/bundles/index.umd.js +158 -146
- app-ng-runtime/core/esm2022/core.module.mjs +2 -2
- app-ng-runtime/core/esm2022/public_api.mjs +3 -2
- app-ng-runtime/core/esm2022/services/constant.service.mjs +2 -2
- app-ng-runtime/core/esm2022/services/custom-icons-loader.service.mjs +26 -0
- app-ng-runtime/core/esm2022/services/field-type.service.mjs +5 -4
- app-ng-runtime/core/esm2022/services/field-widget.service.mjs +5 -4
- app-ng-runtime/core/esm2022/services/pagination.service.mjs +8 -7
- app-ng-runtime/core/esm2022/services/script-loader.service.mjs +3 -3
- app-ng-runtime/core/esm2022/services/state-persistence.service.mjs +18 -17
- app-ng-runtime/core/esm2022/services/user-custom-pipe-manager.service.mjs +2 -2
- app-ng-runtime/core/esm2022/services/utils.service.mjs +5 -4
- app-ng-runtime/core/esm2022/services/viewport.service.mjs +5 -4
- app-ng-runtime/core/esm2022/utils/build-utils.mjs +5 -4
- app-ng-runtime/core/esm2022/utils/dom.mjs +1 -1
- app-ng-runtime/core/esm2022/utils/event-notifier.mjs +1 -1
- app-ng-runtime/core/esm2022/utils/expression-parser.mjs +6 -5
- app-ng-runtime/core/esm2022/utils/id-generator.mjs +1 -1
- app-ng-runtime/core/esm2022/utils/lru-cache.mjs +3 -2
- app-ng-runtime/core/esm2022/utils/utils.mjs +79 -82
- app-ng-runtime/core/esm2022/utils/watcher.mjs +9 -7
- app-ng-runtime/core/esm2022/utils/wm-project-properties.mjs +1 -1
- app-ng-runtime/core/fesm2022/index.mjs +158 -142
- app-ng-runtime/core/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/core/public_api.d.ts +2 -1
- app-ng-runtime/core/services/custom-icons-loader.service.d.ts +7 -0
- app-ng-runtime/core/services/pagination.service.d.ts +1 -1
- app-ng-runtime/core/utils/utils.d.ts +5 -9
- app-ng-runtime/http/.npmignore +2 -0
- app-ng-runtime/http/bundles/index.umd.js +10 -10
- app-ng-runtime/http/esm2022/http-service.module.mjs +2 -2
- app-ng-runtime/http/esm2022/http.service.mjs +7 -6
- app-ng-runtime/http/esm2022/wm-http-request.mjs +1 -1
- app-ng-runtime/http/esm2022/wm-http-response.mjs +1 -1
- app-ng-runtime/http/fesm2022/index.mjs +7 -6
- app-ng-runtime/http/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/locales/angular/global/af-na.js +4 -4
- app-ng-runtime/locales/angular/global/af.js +4 -4
- app-ng-runtime/locales/angular/global/agq.js +4 -4
- app-ng-runtime/locales/angular/global/ak.js +4 -4
- app-ng-runtime/locales/angular/global/am.js +4 -4
- app-ng-runtime/locales/angular/global/ar-ae.js +4 -4
- app-ng-runtime/locales/angular/global/ar-bh.js +4 -4
- app-ng-runtime/locales/angular/global/ar-dj.js +4 -4
- app-ng-runtime/locales/angular/global/ar-dz.js +4 -4
- app-ng-runtime/locales/angular/global/ar-eg.js +4 -4
- app-ng-runtime/locales/angular/global/ar-eh.js +4 -4
- app-ng-runtime/locales/angular/global/ar-er.js +4 -4
- app-ng-runtime/locales/angular/global/ar-il.js +4 -4
- app-ng-runtime/locales/angular/global/ar-iq.js +4 -4
- app-ng-runtime/locales/angular/global/ar-jo.js +4 -4
- app-ng-runtime/locales/angular/global/ar-km.js +4 -4
- app-ng-runtime/locales/angular/global/ar-kw.js +4 -4
- app-ng-runtime/locales/angular/global/ar-lb.js +4 -4
- app-ng-runtime/locales/angular/global/ar-ly.js +4 -4
- app-ng-runtime/locales/angular/global/ar-ma.js +4 -4
- app-ng-runtime/locales/angular/global/ar-mr.js +4 -4
- app-ng-runtime/locales/angular/global/ar-om.js +4 -4
- app-ng-runtime/locales/angular/global/ar-ps.js +4 -4
- app-ng-runtime/locales/angular/global/ar-qa.js +4 -4
- app-ng-runtime/locales/angular/global/ar-sa.js +4 -4
- app-ng-runtime/locales/angular/global/ar-sd.js +4 -4
- app-ng-runtime/locales/angular/global/ar-so.js +4 -4
- app-ng-runtime/locales/angular/global/ar-ss.js +4 -4
- app-ng-runtime/locales/angular/global/ar-sy.js +4 -4
- app-ng-runtime/locales/angular/global/ar-td.js +4 -4
- app-ng-runtime/locales/angular/global/ar-tn.js +4 -4
- app-ng-runtime/locales/angular/global/ar-ye.js +4 -4
- app-ng-runtime/locales/angular/global/ar.js +4 -4
- app-ng-runtime/locales/angular/global/as.js +4 -4
- app-ng-runtime/locales/angular/global/asa.js +4 -4
- app-ng-runtime/locales/angular/global/ast.js +4 -4
- app-ng-runtime/locales/angular/global/az-cyrl.js +4 -4
- app-ng-runtime/locales/angular/global/az-latn.js +4 -4
- app-ng-runtime/locales/angular/global/az.js +4 -4
- app-ng-runtime/locales/angular/global/bas.js +4 -4
- app-ng-runtime/locales/angular/global/be-tarask.js +4 -4
- app-ng-runtime/locales/angular/global/be.js +4 -4
- app-ng-runtime/locales/angular/global/bem.js +4 -4
- app-ng-runtime/locales/angular/global/bez.js +4 -4
- app-ng-runtime/locales/angular/global/bg.js +4 -4
- app-ng-runtime/locales/angular/global/bm.js +4 -4
- app-ng-runtime/locales/angular/global/bn-in.js +4 -4
- app-ng-runtime/locales/angular/global/bn.js +4 -4
- app-ng-runtime/locales/angular/global/bo-in.js +4 -4
- app-ng-runtime/locales/angular/global/bo.js +4 -4
- app-ng-runtime/locales/angular/global/br.js +4 -4
- app-ng-runtime/locales/angular/global/brx.js +4 -4
- app-ng-runtime/locales/angular/global/bs-cyrl.js +4 -4
- app-ng-runtime/locales/angular/global/bs-latn.js +4 -4
- app-ng-runtime/locales/angular/global/bs.js +4 -4
- app-ng-runtime/locales/angular/global/ca-ad.js +4 -4
- app-ng-runtime/locales/angular/global/ca-es-valencia.js +4 -4
- app-ng-runtime/locales/angular/global/ca-fr.js +4 -4
- app-ng-runtime/locales/angular/global/ca-it.js +4 -4
- app-ng-runtime/locales/angular/global/ca.js +4 -4
- app-ng-runtime/locales/angular/global/ccp-in.js +4 -4
- app-ng-runtime/locales/angular/global/ccp.js +4 -4
- app-ng-runtime/locales/angular/global/ce.js +4 -4
- app-ng-runtime/locales/angular/global/ceb.js +4 -4
- app-ng-runtime/locales/angular/global/cgg.js +4 -4
- app-ng-runtime/locales/angular/global/chr.js +4 -4
- app-ng-runtime/locales/angular/global/ckb-ir.js +4 -4
- app-ng-runtime/locales/angular/global/ckb.js +4 -4
- app-ng-runtime/locales/angular/global/cs.js +4 -4
- app-ng-runtime/locales/angular/global/cy.js +4 -4
- app-ng-runtime/locales/angular/global/da-gl.js +4 -4
- app-ng-runtime/locales/angular/global/da.js +4 -4
- app-ng-runtime/locales/angular/global/dav.js +4 -4
- app-ng-runtime/locales/angular/global/de-at.js +4 -4
- app-ng-runtime/locales/angular/global/de-be.js +4 -4
- app-ng-runtime/locales/angular/global/de-ch.js +4 -4
- app-ng-runtime/locales/angular/global/de-it.js +4 -4
- app-ng-runtime/locales/angular/global/de-li.js +4 -4
- app-ng-runtime/locales/angular/global/de-lu.js +4 -4
- app-ng-runtime/locales/angular/global/de.js +4 -4
- app-ng-runtime/locales/angular/global/dje.js +4 -4
- app-ng-runtime/locales/angular/global/doi.js +4 -4
- app-ng-runtime/locales/angular/global/dsb.js +4 -4
- app-ng-runtime/locales/angular/global/dua.js +4 -4
- app-ng-runtime/locales/angular/global/dyo.js +4 -4
- app-ng-runtime/locales/angular/global/dz.js +4 -4
- app-ng-runtime/locales/angular/global/ebu.js +4 -4
- app-ng-runtime/locales/angular/global/ee-tg.js +4 -4
- app-ng-runtime/locales/angular/global/ee.js +4 -4
- app-ng-runtime/locales/angular/global/el-cy.js +4 -4
- app-ng-runtime/locales/angular/global/el.js +4 -4
- app-ng-runtime/locales/angular/global/en-001.js +4 -4
- app-ng-runtime/locales/angular/global/en-150.js +4 -4
- app-ng-runtime/locales/angular/global/en-ae.js +4 -4
- app-ng-runtime/locales/angular/global/en-ag.js +4 -4
- app-ng-runtime/locales/angular/global/en-ai.js +4 -4
- app-ng-runtime/locales/angular/global/en-as.js +4 -4
- app-ng-runtime/locales/angular/global/en-at.js +4 -4
- app-ng-runtime/locales/angular/global/en-au.js +4 -4
- app-ng-runtime/locales/angular/global/en-bb.js +4 -4
- app-ng-runtime/locales/angular/global/en-be.js +4 -4
- app-ng-runtime/locales/angular/global/en-bi.js +4 -4
- app-ng-runtime/locales/angular/global/en-bm.js +4 -4
- app-ng-runtime/locales/angular/global/en-bs.js +4 -4
- app-ng-runtime/locales/angular/global/en-bw.js +4 -4
- app-ng-runtime/locales/angular/global/en-bz.js +4 -4
- app-ng-runtime/locales/angular/global/en-ca.js +4 -4
- app-ng-runtime/locales/angular/global/en-cc.js +4 -4
- app-ng-runtime/locales/angular/global/en-ch.js +4 -4
- app-ng-runtime/locales/angular/global/en-ck.js +4 -4
- app-ng-runtime/locales/angular/global/en-cm.js +4 -4
- app-ng-runtime/locales/angular/global/en-cx.js +4 -4
- app-ng-runtime/locales/angular/global/en-cy.js +4 -4
- app-ng-runtime/locales/angular/global/en-de.js +4 -4
- app-ng-runtime/locales/angular/global/en-dg.js +4 -4
- app-ng-runtime/locales/angular/global/en-dk.js +4 -4
- app-ng-runtime/locales/angular/global/en-dm.js +4 -4
- app-ng-runtime/locales/angular/global/en-er.js +4 -4
- app-ng-runtime/locales/angular/global/en-fi.js +4 -4
- app-ng-runtime/locales/angular/global/en-fj.js +4 -4
- app-ng-runtime/locales/angular/global/en-fk.js +4 -4
- app-ng-runtime/locales/angular/global/en-fm.js +4 -4
- app-ng-runtime/locales/angular/global/en-gb.js +4 -4
- app-ng-runtime/locales/angular/global/en-gd.js +4 -4
- app-ng-runtime/locales/angular/global/en-gg.js +4 -4
- app-ng-runtime/locales/angular/global/en-gh.js +4 -4
- app-ng-runtime/locales/angular/global/en-gi.js +4 -4
- app-ng-runtime/locales/angular/global/en-gm.js +4 -4
- app-ng-runtime/locales/angular/global/en-gu.js +4 -4
- app-ng-runtime/locales/angular/global/en-gy.js +4 -4
- app-ng-runtime/locales/angular/global/en-hk.js +4 -4
- app-ng-runtime/locales/angular/global/en-ie.js +4 -4
- app-ng-runtime/locales/angular/global/en-il.js +4 -4
- app-ng-runtime/locales/angular/global/en-im.js +4 -4
- app-ng-runtime/locales/angular/global/en-in.js +4 -4
- app-ng-runtime/locales/angular/global/en-io.js +4 -4
- app-ng-runtime/locales/angular/global/en-je.js +4 -4
- app-ng-runtime/locales/angular/global/en-jm.js +4 -4
- app-ng-runtime/locales/angular/global/en-ke.js +4 -4
- app-ng-runtime/locales/angular/global/en-ki.js +4 -4
- app-ng-runtime/locales/angular/global/en-kn.js +4 -4
- app-ng-runtime/locales/angular/global/en-ky.js +4 -4
- app-ng-runtime/locales/angular/global/en-lc.js +4 -4
- app-ng-runtime/locales/angular/global/en-lr.js +4 -4
- app-ng-runtime/locales/angular/global/en-ls.js +4 -4
- app-ng-runtime/locales/angular/global/en-mg.js +4 -4
- app-ng-runtime/locales/angular/global/en-mh.js +4 -4
- app-ng-runtime/locales/angular/global/en-mo.js +4 -4
- app-ng-runtime/locales/angular/global/en-mp.js +4 -4
- app-ng-runtime/locales/angular/global/en-ms.js +4 -4
- app-ng-runtime/locales/angular/global/en-mt.js +4 -4
- app-ng-runtime/locales/angular/global/en-mu.js +4 -4
- app-ng-runtime/locales/angular/global/en-mv.js +4 -4
- app-ng-runtime/locales/angular/global/en-mw.js +4 -4
- app-ng-runtime/locales/angular/global/en-my.js +4 -4
- app-ng-runtime/locales/angular/global/en-na.js +4 -4
- app-ng-runtime/locales/angular/global/en-nf.js +4 -4
- app-ng-runtime/locales/angular/global/en-ng.js +4 -4
- app-ng-runtime/locales/angular/global/en-nl.js +4 -4
- app-ng-runtime/locales/angular/global/en-nr.js +4 -4
- app-ng-runtime/locales/angular/global/en-nu.js +4 -4
- app-ng-runtime/locales/angular/global/en-nz.js +4 -4
- app-ng-runtime/locales/angular/global/en-pg.js +4 -4
- app-ng-runtime/locales/angular/global/en-ph.js +4 -4
- app-ng-runtime/locales/angular/global/en-pk.js +4 -4
- app-ng-runtime/locales/angular/global/en-pn.js +4 -4
- app-ng-runtime/locales/angular/global/en-pr.js +4 -4
- app-ng-runtime/locales/angular/global/en-pw.js +4 -4
- app-ng-runtime/locales/angular/global/en-rw.js +4 -4
- app-ng-runtime/locales/angular/global/en-sb.js +4 -4
- app-ng-runtime/locales/angular/global/en-sc.js +4 -4
- app-ng-runtime/locales/angular/global/en-sd.js +4 -4
- app-ng-runtime/locales/angular/global/en-se.js +4 -4
- app-ng-runtime/locales/angular/global/en-sg.js +4 -4
- app-ng-runtime/locales/angular/global/en-sh.js +4 -4
- app-ng-runtime/locales/angular/global/en-si.js +4 -4
- app-ng-runtime/locales/angular/global/en-sl.js +4 -4
- app-ng-runtime/locales/angular/global/en-ss.js +4 -4
- app-ng-runtime/locales/angular/global/en-sx.js +4 -4
- app-ng-runtime/locales/angular/global/en-sz.js +4 -4
- app-ng-runtime/locales/angular/global/en-tc.js +4 -4
- app-ng-runtime/locales/angular/global/en-tk.js +4 -4
- app-ng-runtime/locales/angular/global/en-to.js +4 -4
- app-ng-runtime/locales/angular/global/en-tt.js +4 -4
- app-ng-runtime/locales/angular/global/en-tv.js +4 -4
- app-ng-runtime/locales/angular/global/en-tz.js +4 -4
- app-ng-runtime/locales/angular/global/en-ug.js +4 -4
- app-ng-runtime/locales/angular/global/en-um.js +4 -4
- app-ng-runtime/locales/angular/global/en-vc.js +4 -4
- app-ng-runtime/locales/angular/global/en-vg.js +4 -4
- app-ng-runtime/locales/angular/global/en-vi.js +4 -4
- app-ng-runtime/locales/angular/global/en-vu.js +4 -4
- app-ng-runtime/locales/angular/global/en-ws.js +4 -4
- app-ng-runtime/locales/angular/global/en-za.js +4 -4
- app-ng-runtime/locales/angular/global/en-zm.js +4 -4
- app-ng-runtime/locales/angular/global/en-zw.js +4 -4
- app-ng-runtime/locales/angular/global/en.js +4 -4
- app-ng-runtime/locales/angular/global/eo.js +4 -4
- app-ng-runtime/locales/angular/global/es-419.js +4 -4
- app-ng-runtime/locales/angular/global/es-ar.js +4 -4
- app-ng-runtime/locales/angular/global/es-bo.js +4 -4
- app-ng-runtime/locales/angular/global/es-br.js +4 -4
- app-ng-runtime/locales/angular/global/es-bz.js +4 -4
- app-ng-runtime/locales/angular/global/es-cl.js +4 -4
- app-ng-runtime/locales/angular/global/es-co.js +4 -4
- app-ng-runtime/locales/angular/global/es-cr.js +4 -4
- app-ng-runtime/locales/angular/global/es-cu.js +4 -4
- app-ng-runtime/locales/angular/global/es-do.js +4 -4
- app-ng-runtime/locales/angular/global/es-ea.js +4 -4
- app-ng-runtime/locales/angular/global/es-ec.js +4 -4
- app-ng-runtime/locales/angular/global/es-gq.js +4 -4
- app-ng-runtime/locales/angular/global/es-gt.js +4 -4
- app-ng-runtime/locales/angular/global/es-hn.js +4 -4
- app-ng-runtime/locales/angular/global/es-ic.js +4 -4
- app-ng-runtime/locales/angular/global/es-mx.js +4 -4
- app-ng-runtime/locales/angular/global/es-ni.js +4 -4
- app-ng-runtime/locales/angular/global/es-pa.js +4 -4
- app-ng-runtime/locales/angular/global/es-pe.js +4 -4
- app-ng-runtime/locales/angular/global/es-ph.js +4 -4
- app-ng-runtime/locales/angular/global/es-pr.js +4 -4
- app-ng-runtime/locales/angular/global/es-py.js +4 -4
- app-ng-runtime/locales/angular/global/es-sv.js +4 -4
- app-ng-runtime/locales/angular/global/es-us.js +4 -4
- app-ng-runtime/locales/angular/global/es-uy.js +4 -4
- app-ng-runtime/locales/angular/global/es-ve.js +4 -4
- app-ng-runtime/locales/angular/global/es.js +4 -4
- app-ng-runtime/locales/angular/global/et.js +4 -4
- app-ng-runtime/locales/angular/global/eu.js +4 -4
- app-ng-runtime/locales/angular/global/ewo.js +4 -4
- app-ng-runtime/locales/angular/global/fa-af.js +4 -4
- app-ng-runtime/locales/angular/global/fa.js +4 -4
- app-ng-runtime/locales/angular/global/ff-adlm-bf.js +4 -4
- app-ng-runtime/locales/angular/global/ff-adlm-cm.js +4 -4
- app-ng-runtime/locales/angular/global/ff-adlm-gh.js +4 -4
- app-ng-runtime/locales/angular/global/ff-adlm-gm.js +4 -4
- app-ng-runtime/locales/angular/global/ff-adlm-gw.js +4 -4
- app-ng-runtime/locales/angular/global/ff-adlm-lr.js +4 -4
- app-ng-runtime/locales/angular/global/ff-adlm-mr.js +4 -4
- app-ng-runtime/locales/angular/global/ff-adlm-ne.js +4 -4
- app-ng-runtime/locales/angular/global/ff-adlm-ng.js +4 -4
- app-ng-runtime/locales/angular/global/ff-adlm-sl.js +4 -4
- app-ng-runtime/locales/angular/global/ff-adlm-sn.js +4 -4
- app-ng-runtime/locales/angular/global/ff-adlm.js +4 -4
- app-ng-runtime/locales/angular/global/ff-cm.js +58 -44
- app-ng-runtime/locales/angular/global/ff-gn.js +58 -44
- app-ng-runtime/locales/angular/global/ff-latn-bf.js +4 -4
- app-ng-runtime/locales/angular/global/ff-latn-cm.js +4 -4
- app-ng-runtime/locales/angular/global/ff-latn-gh.js +4 -4
- app-ng-runtime/locales/angular/global/ff-latn-gm.js +4 -4
- app-ng-runtime/locales/angular/global/ff-latn-gn.js +4 -4
- app-ng-runtime/locales/angular/global/ff-latn-gw.js +4 -4
- app-ng-runtime/locales/angular/global/ff-latn-lr.js +4 -4
- app-ng-runtime/locales/angular/global/ff-latn-mr.js +4 -4
- app-ng-runtime/locales/angular/global/ff-latn-ne.js +4 -4
- app-ng-runtime/locales/angular/global/ff-latn-ng.js +4 -4
- app-ng-runtime/locales/angular/global/ff-latn-sl.js +4 -4
- app-ng-runtime/locales/angular/global/ff-latn.js +4 -4
- app-ng-runtime/locales/angular/global/ff-mr.js +58 -44
- app-ng-runtime/locales/angular/global/ff.js +4 -4
- app-ng-runtime/locales/angular/global/fi.js +4 -4
- app-ng-runtime/locales/angular/global/fil.js +4 -4
- app-ng-runtime/locales/angular/global/fo-dk.js +4 -4
- app-ng-runtime/locales/angular/global/fo.js +4 -4
- app-ng-runtime/locales/angular/global/fr-be.js +4 -4
- app-ng-runtime/locales/angular/global/fr-bf.js +4 -4
- app-ng-runtime/locales/angular/global/fr-bi.js +4 -4
- app-ng-runtime/locales/angular/global/fr-bj.js +4 -4
- app-ng-runtime/locales/angular/global/fr-bl.js +4 -4
- app-ng-runtime/locales/angular/global/fr-ca.js +4 -4
- app-ng-runtime/locales/angular/global/fr-cd.js +4 -4
- app-ng-runtime/locales/angular/global/fr-cf.js +4 -4
- app-ng-runtime/locales/angular/global/fr-cg.js +4 -4
- app-ng-runtime/locales/angular/global/fr-ch.js +4 -4
- app-ng-runtime/locales/angular/global/fr-ci.js +4 -4
- app-ng-runtime/locales/angular/global/fr-cm.js +4 -4
- app-ng-runtime/locales/angular/global/fr-dj.js +4 -4
- app-ng-runtime/locales/angular/global/fr-dz.js +4 -4
- app-ng-runtime/locales/angular/global/fr-ga.js +4 -4
- app-ng-runtime/locales/angular/global/fr-gf.js +4 -4
- app-ng-runtime/locales/angular/global/fr-gn.js +4 -4
- app-ng-runtime/locales/angular/global/fr-gp.js +4 -4
- app-ng-runtime/locales/angular/global/fr-gq.js +4 -4
- app-ng-runtime/locales/angular/global/fr-ht.js +4 -4
- app-ng-runtime/locales/angular/global/fr-km.js +4 -4
- app-ng-runtime/locales/angular/global/fr-lu.js +4 -4
- app-ng-runtime/locales/angular/global/fr-ma.js +4 -4
- app-ng-runtime/locales/angular/global/fr-mc.js +4 -4
- app-ng-runtime/locales/angular/global/fr-mf.js +4 -4
- app-ng-runtime/locales/angular/global/fr-mg.js +4 -4
- app-ng-runtime/locales/angular/global/fr-ml.js +4 -4
- app-ng-runtime/locales/angular/global/fr-mq.js +4 -4
- app-ng-runtime/locales/angular/global/fr-mr.js +4 -4
- app-ng-runtime/locales/angular/global/fr-mu.js +4 -4
- app-ng-runtime/locales/angular/global/fr-nc.js +4 -4
- app-ng-runtime/locales/angular/global/fr-ne.js +4 -4
- app-ng-runtime/locales/angular/global/fr-pf.js +4 -4
- app-ng-runtime/locales/angular/global/fr-pm.js +4 -4
- app-ng-runtime/locales/angular/global/fr-re.js +4 -4
- app-ng-runtime/locales/angular/global/fr-rw.js +4 -4
- app-ng-runtime/locales/angular/global/fr-sc.js +4 -4
- app-ng-runtime/locales/angular/global/fr-sn.js +4 -4
- app-ng-runtime/locales/angular/global/fr-sy.js +4 -4
- app-ng-runtime/locales/angular/global/fr-td.js +4 -4
- app-ng-runtime/locales/angular/global/fr-tg.js +4 -4
- app-ng-runtime/locales/angular/global/fr-tn.js +4 -4
- app-ng-runtime/locales/angular/global/fr-vu.js +4 -4
- app-ng-runtime/locales/angular/global/fr-wf.js +4 -4
- app-ng-runtime/locales/angular/global/fr-yt.js +4 -4
- app-ng-runtime/locales/angular/global/fr.js +4 -4
- app-ng-runtime/locales/angular/global/fur.js +4 -4
- app-ng-runtime/locales/angular/global/fy.js +4 -4
- app-ng-runtime/locales/angular/global/ga-gb.js +4 -4
- app-ng-runtime/locales/angular/global/ga.js +4 -4
- app-ng-runtime/locales/angular/global/gd.js +4 -4
- app-ng-runtime/locales/angular/global/gl.js +4 -4
- app-ng-runtime/locales/angular/global/gsw-fr.js +4 -4
- app-ng-runtime/locales/angular/global/gsw-li.js +4 -4
- app-ng-runtime/locales/angular/global/gsw.js +4 -4
- app-ng-runtime/locales/angular/global/gu.js +4 -4
- app-ng-runtime/locales/angular/global/guz.js +4 -4
- app-ng-runtime/locales/angular/global/gv.js +4 -4
- app-ng-runtime/locales/angular/global/ha-gh.js +4 -4
- app-ng-runtime/locales/angular/global/ha-ne.js +4 -4
- app-ng-runtime/locales/angular/global/ha.js +4 -4
- app-ng-runtime/locales/angular/global/haw.js +4 -4
- app-ng-runtime/locales/angular/global/he.js +4 -4
- app-ng-runtime/locales/angular/global/hi-latn.js +4 -4
- app-ng-runtime/locales/angular/global/hi.js +4 -4
- app-ng-runtime/locales/angular/global/hr-ba.js +4 -4
- app-ng-runtime/locales/angular/global/hr.js +4 -4
- app-ng-runtime/locales/angular/global/hsb.js +4 -4
- app-ng-runtime/locales/angular/global/hu.js +4 -4
- app-ng-runtime/locales/angular/global/hy.js +4 -4
- app-ng-runtime/locales/angular/global/ia.js +4 -4
- app-ng-runtime/locales/angular/global/id.js +4 -4
- app-ng-runtime/locales/angular/global/ig.js +4 -4
- app-ng-runtime/locales/angular/global/ii.js +4 -4
- app-ng-runtime/locales/angular/global/is.js +4 -4
- app-ng-runtime/locales/angular/global/it-ch.js +4 -4
- app-ng-runtime/locales/angular/global/it-sm.js +4 -4
- app-ng-runtime/locales/angular/global/it-va.js +4 -4
- app-ng-runtime/locales/angular/global/it.js +4 -4
- app-ng-runtime/locales/angular/global/ja.js +4 -4
- app-ng-runtime/locales/angular/global/jgo.js +4 -4
- app-ng-runtime/locales/angular/global/jmc.js +4 -4
- app-ng-runtime/locales/angular/global/jv.js +4 -4
- app-ng-runtime/locales/angular/global/ka.js +4 -4
- app-ng-runtime/locales/angular/global/kab.js +4 -4
- app-ng-runtime/locales/angular/global/kam.js +4 -4
- app-ng-runtime/locales/angular/global/kde.js +4 -4
- app-ng-runtime/locales/angular/global/kea.js +4 -4
- app-ng-runtime/locales/angular/global/kgp.js +4 -4
- app-ng-runtime/locales/angular/global/khq.js +4 -4
- app-ng-runtime/locales/angular/global/ki.js +4 -4
- app-ng-runtime/locales/angular/global/kk.js +4 -4
- app-ng-runtime/locales/angular/global/kkj.js +4 -4
- app-ng-runtime/locales/angular/global/kl.js +4 -4
- app-ng-runtime/locales/angular/global/kln.js +4 -4
- app-ng-runtime/locales/angular/global/km.js +4 -4
- app-ng-runtime/locales/angular/global/kn.js +4 -4
- app-ng-runtime/locales/angular/global/ko-kp.js +4 -4
- app-ng-runtime/locales/angular/global/ko.js +4 -4
- app-ng-runtime/locales/angular/global/kok.js +4 -4
- app-ng-runtime/locales/angular/global/ks-arab.js +4 -4
- app-ng-runtime/locales/angular/global/ks-deva.js +4 -4
- app-ng-runtime/locales/angular/global/ks.js +4 -4
- app-ng-runtime/locales/angular/global/ksb.js +4 -4
- app-ng-runtime/locales/angular/global/ksf.js +4 -4
- app-ng-runtime/locales/angular/global/ksh.js +4 -4
- app-ng-runtime/locales/angular/global/ku.js +4 -4
- app-ng-runtime/locales/angular/global/kw.js +4 -4
- app-ng-runtime/locales/angular/global/ky.js +4 -4
- app-ng-runtime/locales/angular/global/lag.js +4 -4
- app-ng-runtime/locales/angular/global/lb.js +4 -4
- app-ng-runtime/locales/angular/global/lg.js +4 -4
- app-ng-runtime/locales/angular/global/lkt.js +4 -4
- app-ng-runtime/locales/angular/global/ln-ao.js +4 -4
- app-ng-runtime/locales/angular/global/ln-cf.js +4 -4
- app-ng-runtime/locales/angular/global/ln-cg.js +4 -4
- app-ng-runtime/locales/angular/global/ln.js +4 -4
- app-ng-runtime/locales/angular/global/lo.js +4 -4
- app-ng-runtime/locales/angular/global/lrc-iq.js +4 -4
- app-ng-runtime/locales/angular/global/lrc.js +4 -4
- app-ng-runtime/locales/angular/global/lt.js +4 -4
- app-ng-runtime/locales/angular/global/lu.js +4 -4
- app-ng-runtime/locales/angular/global/luo.js +4 -4
- app-ng-runtime/locales/angular/global/luy.js +4 -4
- app-ng-runtime/locales/angular/global/lv.js +4 -4
- app-ng-runtime/locales/angular/global/mai.js +4 -4
- app-ng-runtime/locales/angular/global/mas-tz.js +4 -4
- app-ng-runtime/locales/angular/global/mas.js +4 -4
- app-ng-runtime/locales/angular/global/mer.js +4 -4
- app-ng-runtime/locales/angular/global/mfe.js +4 -4
- app-ng-runtime/locales/angular/global/mg.js +4 -4
- app-ng-runtime/locales/angular/global/mgh.js +4 -4
- app-ng-runtime/locales/angular/global/mgo.js +4 -4
- app-ng-runtime/locales/angular/global/mi.js +4 -4
- app-ng-runtime/locales/angular/global/mk.js +4 -4
- app-ng-runtime/locales/angular/global/ml.js +4 -4
- app-ng-runtime/locales/angular/global/mn.js +4 -4
- app-ng-runtime/locales/angular/global/mni-beng.js +4 -4
- app-ng-runtime/locales/angular/global/mni.js +4 -4
- app-ng-runtime/locales/angular/global/mr.js +4 -4
- app-ng-runtime/locales/angular/global/ms-bn.js +4 -4
- app-ng-runtime/locales/angular/global/ms-id.js +4 -4
- app-ng-runtime/locales/angular/global/ms-sg.js +4 -4
- app-ng-runtime/locales/angular/global/ms.js +4 -4
- app-ng-runtime/locales/angular/global/mt.js +4 -4
- app-ng-runtime/locales/angular/global/mua.js +4 -4
- app-ng-runtime/locales/angular/global/my.js +4 -4
- app-ng-runtime/locales/angular/global/mzn.js +4 -4
- app-ng-runtime/locales/angular/global/naq.js +4 -4
- app-ng-runtime/locales/angular/global/nb-sj.js +4 -4
- app-ng-runtime/locales/angular/global/nb.js +4 -4
- app-ng-runtime/locales/angular/global/nd.js +4 -4
- app-ng-runtime/locales/angular/global/nds-nl.js +4 -4
- app-ng-runtime/locales/angular/global/nds.js +4 -4
- app-ng-runtime/locales/angular/global/ne-in.js +4 -4
- app-ng-runtime/locales/angular/global/ne.js +4 -4
- app-ng-runtime/locales/angular/global/nl-aw.js +4 -4
- app-ng-runtime/locales/angular/global/nl-be.js +4 -4
- app-ng-runtime/locales/angular/global/nl-bq.js +4 -4
- app-ng-runtime/locales/angular/global/nl-cw.js +4 -4
- app-ng-runtime/locales/angular/global/nl-sr.js +4 -4
- app-ng-runtime/locales/angular/global/nl-sx.js +4 -4
- app-ng-runtime/locales/angular/global/nl.js +4 -4
- app-ng-runtime/locales/angular/global/nmg.js +4 -4
- app-ng-runtime/locales/angular/global/nn.js +4 -4
- app-ng-runtime/locales/angular/global/nnh.js +4 -4
- app-ng-runtime/locales/angular/global/no.js +4 -4
- app-ng-runtime/locales/angular/global/nus.js +4 -4
- app-ng-runtime/locales/angular/global/nyn.js +4 -4
- app-ng-runtime/locales/angular/global/om-ke.js +4 -4
- app-ng-runtime/locales/angular/global/om.js +4 -4
- app-ng-runtime/locales/angular/global/or.js +4 -4
- app-ng-runtime/locales/angular/global/os-ru.js +4 -4
- app-ng-runtime/locales/angular/global/os.js +4 -4
- app-ng-runtime/locales/angular/global/pa-arab.js +4 -4
- app-ng-runtime/locales/angular/global/pa-guru.js +4 -4
- app-ng-runtime/locales/angular/global/pa.js +4 -4
- app-ng-runtime/locales/angular/global/pcm.js +4 -4
- app-ng-runtime/locales/angular/global/pl.js +4 -4
- app-ng-runtime/locales/angular/global/ps-pk.js +4 -4
- app-ng-runtime/locales/angular/global/ps.js +4 -4
- app-ng-runtime/locales/angular/global/pt-ao.js +4 -4
- app-ng-runtime/locales/angular/global/pt-ch.js +4 -4
- app-ng-runtime/locales/angular/global/pt-cv.js +4 -4
- app-ng-runtime/locales/angular/global/pt-gq.js +4 -4
- app-ng-runtime/locales/angular/global/pt-gw.js +4 -4
- app-ng-runtime/locales/angular/global/pt-lu.js +4 -4
- app-ng-runtime/locales/angular/global/pt-mo.js +4 -4
- app-ng-runtime/locales/angular/global/pt-mz.js +4 -4
- app-ng-runtime/locales/angular/global/pt-pt.js +4 -4
- app-ng-runtime/locales/angular/global/pt-st.js +4 -4
- app-ng-runtime/locales/angular/global/pt-tl.js +4 -4
- app-ng-runtime/locales/angular/global/pt.js +4 -4
- app-ng-runtime/locales/angular/global/qu-bo.js +4 -4
- app-ng-runtime/locales/angular/global/qu-ec.js +4 -4
- app-ng-runtime/locales/angular/global/qu.js +4 -4
- app-ng-runtime/locales/angular/global/rm.js +4 -4
- app-ng-runtime/locales/angular/global/rn.js +4 -4
- app-ng-runtime/locales/angular/global/ro-md.js +4 -4
- app-ng-runtime/locales/angular/global/ro.js +4 -4
- app-ng-runtime/locales/angular/global/rof.js +4 -4
- app-ng-runtime/locales/angular/global/ru-by.js +4 -4
- app-ng-runtime/locales/angular/global/ru-kg.js +4 -4
- app-ng-runtime/locales/angular/global/ru-kz.js +4 -4
- app-ng-runtime/locales/angular/global/ru-md.js +4 -4
- app-ng-runtime/locales/angular/global/ru-ua.js +4 -4
- app-ng-runtime/locales/angular/global/ru.js +4 -4
- app-ng-runtime/locales/angular/global/rw.js +4 -4
- app-ng-runtime/locales/angular/global/rwk.js +4 -4
- app-ng-runtime/locales/angular/global/sa.js +4 -4
- app-ng-runtime/locales/angular/global/sah.js +4 -4
- app-ng-runtime/locales/angular/global/saq.js +4 -4
- app-ng-runtime/locales/angular/global/sat-olck.js +4 -4
- app-ng-runtime/locales/angular/global/sat.js +4 -4
- app-ng-runtime/locales/angular/global/sbp.js +4 -4
- app-ng-runtime/locales/angular/global/sc.js +4 -4
- app-ng-runtime/locales/angular/global/sd-arab.js +4 -4
- app-ng-runtime/locales/angular/global/sd-deva.js +4 -4
- app-ng-runtime/locales/angular/global/sd.js +4 -4
- app-ng-runtime/locales/angular/global/se-fi.js +4 -4
- app-ng-runtime/locales/angular/global/se-se.js +4 -4
- app-ng-runtime/locales/angular/global/se.js +4 -4
- app-ng-runtime/locales/angular/global/seh.js +4 -4
- app-ng-runtime/locales/angular/global/ses.js +4 -4
- app-ng-runtime/locales/angular/global/sg.js +4 -4
- app-ng-runtime/locales/angular/global/shi-latn.js +4 -4
- app-ng-runtime/locales/angular/global/shi-tfng.js +4 -4
- app-ng-runtime/locales/angular/global/shi.js +4 -4
- app-ng-runtime/locales/angular/global/si.js +4 -4
- app-ng-runtime/locales/angular/global/sk.js +4 -4
- app-ng-runtime/locales/angular/global/sl.js +4 -4
- app-ng-runtime/locales/angular/global/smn.js +4 -4
- app-ng-runtime/locales/angular/global/sn.js +4 -4
- app-ng-runtime/locales/angular/global/so-dj.js +4 -4
- app-ng-runtime/locales/angular/global/so-et.js +4 -4
- app-ng-runtime/locales/angular/global/so-ke.js +4 -4
- app-ng-runtime/locales/angular/global/so.js +4 -4
- app-ng-runtime/locales/angular/global/sq-mk.js +4 -4
- app-ng-runtime/locales/angular/global/sq-xk.js +4 -4
- app-ng-runtime/locales/angular/global/sq.js +4 -4
- app-ng-runtime/locales/angular/global/sr-cyrl-ba.js +4 -4
- app-ng-runtime/locales/angular/global/sr-cyrl-me.js +4 -4
- app-ng-runtime/locales/angular/global/sr-cyrl-xk.js +4 -4
- app-ng-runtime/locales/angular/global/sr-cyrl.js +4 -4
- app-ng-runtime/locales/angular/global/sr-latn-ba.js +4 -4
- app-ng-runtime/locales/angular/global/sr-latn-me.js +4 -4
- app-ng-runtime/locales/angular/global/sr-latn-xk.js +4 -4
- app-ng-runtime/locales/angular/global/sr-latn.js +4 -4
- app-ng-runtime/locales/angular/global/sr.js +4 -4
- app-ng-runtime/locales/angular/global/su-latn.js +4 -4
- app-ng-runtime/locales/angular/global/su.js +4 -4
- app-ng-runtime/locales/angular/global/sv-ax.js +4 -4
- app-ng-runtime/locales/angular/global/sv-fi.js +4 -4
- app-ng-runtime/locales/angular/global/sv.js +4 -4
- app-ng-runtime/locales/angular/global/sw-cd.js +4 -4
- app-ng-runtime/locales/angular/global/sw-ke.js +4 -4
- app-ng-runtime/locales/angular/global/sw-ug.js +4 -4
- app-ng-runtime/locales/angular/global/sw.js +4 -4
- app-ng-runtime/locales/angular/global/ta-lk.js +4 -4
- app-ng-runtime/locales/angular/global/ta-my.js +4 -4
- app-ng-runtime/locales/angular/global/ta-sg.js +4 -4
- app-ng-runtime/locales/angular/global/ta.js +4 -4
- app-ng-runtime/locales/angular/global/te.js +4 -4
- app-ng-runtime/locales/angular/global/teo-ke.js +4 -4
- app-ng-runtime/locales/angular/global/teo.js +4 -4
- app-ng-runtime/locales/angular/global/tg.js +4 -4
- app-ng-runtime/locales/angular/global/th.js +4 -4
- app-ng-runtime/locales/angular/global/ti-er.js +4 -4
- app-ng-runtime/locales/angular/global/ti.js +4 -4
- app-ng-runtime/locales/angular/global/tk.js +4 -4
- app-ng-runtime/locales/angular/global/to.js +4 -4
- app-ng-runtime/locales/angular/global/tr-cy.js +4 -4
- app-ng-runtime/locales/angular/global/tr.js +4 -4
- app-ng-runtime/locales/angular/global/tt.js +4 -4
- app-ng-runtime/locales/angular/global/twq.js +4 -4
- app-ng-runtime/locales/angular/global/tzm.js +4 -4
- app-ng-runtime/locales/angular/global/ug.js +4 -4
- app-ng-runtime/locales/angular/global/uk.js +4 -4
- app-ng-runtime/locales/angular/global/und.js +4 -4
- app-ng-runtime/locales/angular/global/ur-in.js +4 -4
- app-ng-runtime/locales/angular/global/ur.js +4 -4
- app-ng-runtime/locales/angular/global/uz-arab.js +4 -4
- app-ng-runtime/locales/angular/global/uz-cyrl.js +4 -4
- app-ng-runtime/locales/angular/global/uz-latn.js +4 -4
- app-ng-runtime/locales/angular/global/uz.js +4 -4
- app-ng-runtime/locales/angular/global/vai-latn.js +4 -4
- app-ng-runtime/locales/angular/global/vai-vaii.js +4 -4
- app-ng-runtime/locales/angular/global/vai.js +4 -4
- app-ng-runtime/locales/angular/global/vi.js +4 -4
- app-ng-runtime/locales/angular/global/vun.js +4 -4
- app-ng-runtime/locales/angular/global/wae.js +4 -4
- app-ng-runtime/locales/angular/global/wo.js +4 -4
- app-ng-runtime/locales/angular/global/xh.js +4 -4
- app-ng-runtime/locales/angular/global/xog.js +4 -4
- app-ng-runtime/locales/angular/global/yav.js +4 -4
- app-ng-runtime/locales/angular/global/yi.js +4 -4
- app-ng-runtime/locales/angular/global/yo-bj.js +4 -4
- app-ng-runtime/locales/angular/global/yo.js +4 -4
- app-ng-runtime/locales/angular/global/yrl-co.js +4 -4
- app-ng-runtime/locales/angular/global/yrl-ve.js +4 -4
- app-ng-runtime/locales/angular/global/yrl.js +4 -4
- app-ng-runtime/locales/angular/global/yue-hans.js +4 -4
- app-ng-runtime/locales/angular/global/yue-hant.js +4 -4
- app-ng-runtime/locales/angular/global/yue.js +4 -4
- app-ng-runtime/locales/angular/global/zgh.js +4 -4
- app-ng-runtime/locales/angular/global/zh-hans-hk.js +4 -4
- app-ng-runtime/locales/angular/global/zh-hans-mo.js +4 -4
- app-ng-runtime/locales/angular/global/zh-hans-sg.js +4 -4
- app-ng-runtime/locales/angular/global/zh-hans.js +4 -4
- app-ng-runtime/locales/angular/global/zh-hant-hk.js +4 -4
- app-ng-runtime/locales/angular/global/zh-hant-mo.js +4 -4
- app-ng-runtime/locales/angular/global/zh-hant.js +4 -4
- app-ng-runtime/locales/angular/global/zh.js +4 -4
- app-ng-runtime/locales/angular/global/zu.js +4 -4
- app-ng-runtime/mobile/components/basic/default/.npmignore +2 -0
- app-ng-runtime/mobile/components/basic/default/bundles/index.umd.js +148 -143
- app-ng-runtime/mobile/components/basic/default/esm2022/anchor/anchor.directive.mjs +8 -7
- app-ng-runtime/mobile/components/basic/default/esm2022/app-update/app-update.component.mjs +7 -6
- app-ng-runtime/mobile/components/basic/default/esm2022/basic.module.mjs +2 -2
- app-ng-runtime/mobile/components/basic/default/esm2022/file-browser/file-browser.component.mjs +47 -43
- app-ng-runtime/mobile/components/basic/default/esm2022/file-browser/file-selector.service.mjs +7 -5
- app-ng-runtime/mobile/components/basic/default/esm2022/image-cache/image-cache.directive.mjs +6 -5
- app-ng-runtime/mobile/components/basic/default/esm2022/network-info-toaster/network-info-toaster.component.mjs +49 -47
- app-ng-runtime/mobile/components/basic/default/esm2022/process-manager/process-management.service.mjs +2 -2
- app-ng-runtime/mobile/components/basic/default/esm2022/process-manager/process-manager.component.mjs +31 -32
- app-ng-runtime/mobile/components/basic/default/fesm2022/index.mjs +146 -140
- app-ng-runtime/mobile/components/basic/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/basic/default/network-info-toaster/network-info-toaster.component.d.ts +2 -2
- app-ng-runtime/mobile/components/basic/search/.npmignore +2 -0
- app-ng-runtime/mobile/components/basic/search/bundles/index.umd.js +3 -3
- app-ng-runtime/mobile/components/basic/search/esm2022/search.directive.mjs +3 -3
- app-ng-runtime/mobile/components/basic/search/esm2022/search.module.mjs +2 -2
- app-ng-runtime/mobile/components/basic/search/fesm2022/index.mjs +3 -3
- app-ng-runtime/mobile/components/basic/search/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/containers/segmented-control/.npmignore +2 -0
- app-ng-runtime/mobile/components/containers/segmented-control/bundles/index.umd.js +42 -30
- app-ng-runtime/mobile/components/containers/segmented-control/esm2022/segment-content/segment-content.component.mjs +14 -8
- app-ng-runtime/mobile/components/containers/segmented-control/esm2022/segmented-control.component.mjs +28 -21
- app-ng-runtime/mobile/components/containers/segmented-control/esm2022/segmented-control.module.mjs +2 -2
- app-ng-runtime/mobile/components/containers/segmented-control/fesm2022/index.mjs +41 -28
- app-ng-runtime/mobile/components/containers/segmented-control/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/containers/segmented-control/segment-content/segment-content.component.d.ts +2 -2
- app-ng-runtime/mobile/components/containers/segmented-control/segmented-control.component.d.ts +2 -2
- app-ng-runtime/mobile/components/data/media-list/.npmignore +2 -0
- app-ng-runtime/mobile/components/data/media-list/bundles/index.umd.js +53 -48
- app-ng-runtime/mobile/components/data/media-list/esm2022/media-list-item/media-list-item.directive.mjs +2 -2
- app-ng-runtime/mobile/components/data/media-list/esm2022/media-list.component.mjs +48 -42
- app-ng-runtime/mobile/components/data/media-list/esm2022/media-list.module.mjs +2 -2
- app-ng-runtime/mobile/components/data/media-list/fesm2022/index.mjs +50 -44
- app-ng-runtime/mobile/components/data/media-list/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/data/media-list/media-list.component.d.ts +2 -2
- app-ng-runtime/mobile/components/device/barcode-scanner/.npmignore +2 -0
- app-ng-runtime/mobile/components/device/barcode-scanner/barcode-scanner.component.d.ts +2 -2
- app-ng-runtime/mobile/components/device/barcode-scanner/bundles/index.umd.js +14 -8
- app-ng-runtime/mobile/components/device/barcode-scanner/esm2022/barcode-scanner.component.mjs +15 -9
- app-ng-runtime/mobile/components/device/barcode-scanner/esm2022/barcode-scanner.module.mjs +2 -2
- app-ng-runtime/mobile/components/device/barcode-scanner/fesm2022/index.mjs +16 -10
- app-ng-runtime/mobile/components/device/barcode-scanner/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/device/camera/.npmignore +2 -0
- app-ng-runtime/mobile/components/device/camera/bundles/index.umd.js +15 -9
- app-ng-runtime/mobile/components/device/camera/camera.component.d.ts +2 -2
- app-ng-runtime/mobile/components/device/camera/esm2022/camera.component.mjs +16 -10
- app-ng-runtime/mobile/components/device/camera/esm2022/camera.module.mjs +2 -2
- app-ng-runtime/mobile/components/device/camera/fesm2022/index.mjs +17 -11
- app-ng-runtime/mobile/components/device/camera/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/input/file-upload/.npmignore +2 -0
- app-ng-runtime/mobile/components/input/file-upload/bundles/index.umd.js +3 -3
- app-ng-runtime/mobile/components/input/file-upload/esm2022/file-upload.directive.mjs +3 -3
- app-ng-runtime/mobile/components/input/file-upload/esm2022/file-upload.module.mjs +2 -2
- app-ng-runtime/mobile/components/input/file-upload/fesm2022/index.mjs +3 -3
- app-ng-runtime/mobile/components/input/file-upload/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/page/default/.npmignore +2 -0
- app-ng-runtime/mobile/components/page/default/bundles/index.umd.js +11 -10
- app-ng-runtime/mobile/components/page/default/esm2022/page-content-loader/page-content-loader.component.mjs +4 -3
- app-ng-runtime/mobile/components/page/default/esm2022/page.directive.mjs +5 -4
- app-ng-runtime/mobile/components/page/default/esm2022/page.module.mjs +2 -2
- app-ng-runtime/mobile/components/page/default/fesm2022/index.mjs +8 -6
- app-ng-runtime/mobile/components/page/default/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/page/left-panel/.npmignore +2 -0
- app-ng-runtime/mobile/components/page/left-panel/bundles/index.umd.js +3 -3
- app-ng-runtime/mobile/components/page/left-panel/esm2022/left-panel.directive.mjs +3 -3
- app-ng-runtime/mobile/components/page/left-panel/esm2022/left-panel.module.mjs +2 -2
- app-ng-runtime/mobile/components/page/left-panel/fesm2022/index.mjs +3 -3
- app-ng-runtime/mobile/components/page/left-panel/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/page/mobile-navbar/.npmignore +2 -0
- app-ng-runtime/mobile/components/page/mobile-navbar/bundles/index.umd.js +40 -35
- app-ng-runtime/mobile/components/page/mobile-navbar/esm2022/mobile-navbar.component.mjs +41 -36
- app-ng-runtime/mobile/components/page/mobile-navbar/esm2022/mobile-navbar.module.mjs +2 -2
- app-ng-runtime/mobile/components/page/mobile-navbar/fesm2022/index.mjs +41 -36
- app-ng-runtime/mobile/components/page/mobile-navbar/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/page/mobile-navbar/mobile-navbar.component.d.ts +2 -2
- app-ng-runtime/mobile/components/page/tab-bar/.npmignore +2 -0
- app-ng-runtime/mobile/components/page/tab-bar/bundles/index.umd.js +52 -46
- app-ng-runtime/mobile/components/page/tab-bar/esm2022/tab-bar.module.mjs +2 -2
- app-ng-runtime/mobile/components/page/tab-bar/esm2022/tabbar.component.mjs +50 -43
- app-ng-runtime/mobile/components/page/tab-bar/fesm2022/index.mjs +51 -44
- app-ng-runtime/mobile/components/page/tab-bar/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/components/page/tab-bar/tabbar.component.d.ts +2 -2
- app-ng-runtime/mobile/core/.npmignore +2 -0
- app-ng-runtime/mobile/core/bundles/index.umd.js +43 -43
- app-ng-runtime/mobile/core/esm2022/core.module.mjs +3 -3
- app-ng-runtime/mobile/core/esm2022/native.xhr.mjs +1 -1
- app-ng-runtime/mobile/core/esm2022/services/device-file-cache.service.mjs +3 -3
- app-ng-runtime/mobile/core/esm2022/services/device-file-download.service.mjs +7 -6
- app-ng-runtime/mobile/core/esm2022/services/device-file-opener.service.mjs +5 -4
- app-ng-runtime/mobile/core/esm2022/services/device-file-upload.service.mjs +6 -5
- app-ng-runtime/mobile/core/esm2022/services/device-file.service.mjs +8 -7
- app-ng-runtime/mobile/core/esm2022/services/device.service.mjs +5 -4
- app-ng-runtime/mobile/core/esm2022/services/ext-app-message.service.mjs +7 -6
- app-ng-runtime/mobile/core/esm2022/services/network.service.mjs +11 -10
- app-ng-runtime/mobile/core/fesm2022/index.mjs +40 -39
- app-ng-runtime/mobile/core/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/core/services/ext-app-message.service.d.ts +1 -1
- app-ng-runtime/mobile/core/services/network.service.d.ts +7 -1
- app-ng-runtime/mobile/offline/.npmignore +2 -0
- app-ng-runtime/mobile/offline/bundles/index.umd.js +176 -159
- app-ng-runtime/mobile/offline/esm2022/models/local-db-store.mjs +23 -21
- app-ng-runtime/mobile/offline/esm2022/offline.module.mjs +3 -3
- app-ng-runtime/mobile/offline/esm2022/services/change-log.service.mjs +9 -8
- app-ng-runtime/mobile/offline/esm2022/services/local-db-data-pull.service.mjs +39 -37
- app-ng-runtime/mobile/offline/esm2022/services/local-db-management.service.mjs +56 -47
- app-ng-runtime/mobile/offline/esm2022/services/local-db.service.mjs +7 -6
- app-ng-runtime/mobile/offline/esm2022/services/local-key-value.service.mjs +2 -2
- app-ng-runtime/mobile/offline/esm2022/services/push.service.mjs +3 -3
- app-ng-runtime/mobile/offline/esm2022/services/workers/error-blocker.mjs +4 -3
- app-ng-runtime/mobile/offline/esm2022/services/workers/file-handler.mjs +18 -13
- app-ng-runtime/mobile/offline/esm2022/services/workers/id-resolver.mjs +3 -3
- app-ng-runtime/mobile/offline/esm2022/services/workers/multi-part-param-transformer.mjs +9 -5
- app-ng-runtime/mobile/offline/esm2022/utils/file-upload.utils.mjs +1 -1
- app-ng-runtime/mobile/offline/esm2022/utils/live-variable.utils.mjs +12 -11
- app-ng-runtime/mobile/offline/esm2022/utils/query-executor.utils.mjs +5 -4
- app-ng-runtime/mobile/offline/esm2022/utils/security.utils.mjs +3 -2
- app-ng-runtime/mobile/offline/esm2022/utils/utils.mjs +1 -1
- app-ng-runtime/mobile/offline/fesm2022/index.mjs +171 -153
- app-ng-runtime/mobile/offline/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/placeholder/runtime/.npmignore +2 -0
- app-ng-runtime/mobile/placeholder/runtime/bundles/index.umd.js +3 -2
- app-ng-runtime/mobile/placeholder/runtime/esm2022/components/app-ext.component.mjs +3 -2
- app-ng-runtime/mobile/placeholder/runtime/esm2022/mobile-runtime.module.mjs +2 -2
- app-ng-runtime/mobile/placeholder/runtime/fesm2022/index.mjs +3 -2
- app-ng-runtime/mobile/placeholder/runtime/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/placeholder/runtime-dynamic/.npmignore +2 -0
- app-ng-runtime/mobile/placeholder/runtime-dynamic/bundles/index.umd.js +1 -1
- app-ng-runtime/mobile/placeholder/runtime-dynamic/esm2022/mobile-runtime-dynamic.module.mjs +2 -2
- app-ng-runtime/mobile/placeholder/runtime-dynamic/fesm2022/index.mjs +1 -1
- app-ng-runtime/mobile/placeholder/runtime-dynamic/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/runtime/.npmignore +2 -0
- app-ng-runtime/mobile/runtime/bundles/index.umd.js +21 -17
- app-ng-runtime/mobile/runtime/esm2022/components/app-ext.component.mjs +4 -3
- app-ng-runtime/mobile/runtime/esm2022/mobile-runtime.module.mjs +5 -4
- app-ng-runtime/mobile/runtime/esm2022/services/cookie.service.mjs +7 -3
- app-ng-runtime/mobile/runtime/esm2022/services/http-interceptor.service.mjs +6 -5
- app-ng-runtime/mobile/runtime/esm2022/services/webprocess.service.mjs +3 -3
- app-ng-runtime/mobile/runtime/fesm2022/index.mjs +18 -13
- app-ng-runtime/mobile/runtime/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/runtime-dynamic/.npmignore +2 -0
- app-ng-runtime/mobile/runtime-dynamic/bundles/index.umd.js +5 -5
- app-ng-runtime/mobile/runtime-dynamic/esm2022/mobile-runtime-dynamic.module.mjs +2 -2
- app-ng-runtime/mobile/runtime-dynamic/esm2022/services/live-sync.service.mjs +5 -5
- app-ng-runtime/mobile/runtime-dynamic/fesm2022/index.mjs +5 -5
- app-ng-runtime/mobile/runtime-dynamic/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/mobile/variables/.npmignore +2 -0
- app-ng-runtime/mobile/variables/bundles/index.umd.js +28 -21
- app-ng-runtime/mobile/variables/esm2022/services/camera-service.mjs +5 -5
- app-ng-runtime/mobile/variables/esm2022/services/contacts-service.mjs +1 -1
- app-ng-runtime/mobile/variables/esm2022/services/datasync-service.mjs +10 -9
- app-ng-runtime/mobile/variables/esm2022/services/device-service/device-service.mjs +1 -1
- app-ng-runtime/mobile/variables/esm2022/services/device-service/location-service.mjs +1 -1
- app-ng-runtime/mobile/variables/esm2022/services/file-service.mjs +11 -3
- app-ng-runtime/mobile/variables/esm2022/services/scan-service.mjs +1 -1
- app-ng-runtime/mobile/variables/esm2022/variables.module.mjs +3 -3
- app-ng-runtime/mobile/variables/fesm2022/index.mjs +24 -16
- app-ng-runtime/mobile/variables/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/oAuth/.npmignore +2 -0
- app-ng-runtime/oAuth/bundles/index.umd.js +15 -15
- app-ng-runtime/oAuth/esm2022/oAuth.module.mjs +2 -2
- app-ng-runtime/oAuth/esm2022/oAuth.service.mjs +6 -5
- app-ng-runtime/oAuth/esm2022/oAuth.utils.mjs +8 -7
- app-ng-runtime/oAuth/fesm2022/index.mjs +12 -11
- app-ng-runtime/oAuth/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/package.json +1 -1
- app-ng-runtime/runtime/base/.npmignore +2 -0
- app-ng-runtime/runtime/base/bundles/index.umd.js +263 -247
- app-ng-runtime/runtime/base/components/app-component/app.component.d.ts +3 -1
- app-ng-runtime/runtime/base/components/base-custom-widget.component.d.ts +1 -1
- app-ng-runtime/runtime/base/directives/accessroles.directive.d.ts +4 -3
- app-ng-runtime/runtime/base/esm2022/components/app-component/app.component.mjs +34 -30
- app-ng-runtime/runtime/base/esm2022/components/app-spinner.component.mjs +9 -8
- app-ng-runtime/runtime/base/esm2022/components/base-custom-widget.component.mjs +5 -5
- app-ng-runtime/runtime/base/esm2022/components/base-layout.component.mjs +5 -4
- app-ng-runtime/runtime/base/esm2022/components/base-page.component.mjs +16 -15
- app-ng-runtime/runtime/base/esm2022/components/base-partial.component.mjs +15 -14
- app-ng-runtime/runtime/base/esm2022/components/base-prefab.component.mjs +17 -16
- app-ng-runtime/runtime/base/esm2022/components/base-spa-page.component.mjs +16 -15
- app-ng-runtime/runtime/base/esm2022/components/custom-toaster.component.mjs +17 -15
- app-ng-runtime/runtime/base/esm2022/components/empty-component/empty-page.component.mjs +4 -3
- app-ng-runtime/runtime/base/esm2022/components/prefab-preview.component.mjs +4 -3
- app-ng-runtime/runtime/base/esm2022/directives/accessroles.directive.mjs +24 -16
- app-ng-runtime/runtime/base/esm2022/directives/prefab.directive.mjs +4 -4
- app-ng-runtime/runtime/base/esm2022/guards/auth.guard.mjs +3 -3
- app-ng-runtime/runtime/base/esm2022/guards/can-deactivate-page.guard.mjs +3 -3
- app-ng-runtime/runtime/base/esm2022/guards/page-not-found.guard.mjs +3 -3
- app-ng-runtime/runtime/base/esm2022/guards/role.guard.mjs +5 -4
- app-ng-runtime/runtime/base/esm2022/overrides/wm_dom_renderer.mjs +4 -4
- app-ng-runtime/runtime/base/esm2022/overrides/wm_shared_styles_host.mjs +5 -5
- app-ng-runtime/runtime/base/esm2022/resolves/app-extension.resolve.mjs +3 -3
- app-ng-runtime/runtime/base/esm2022/resolves/app-js.resolve.mjs +3 -3
- app-ng-runtime/runtime/base/esm2022/resolves/app-variables.resolve.mjs +3 -3
- app-ng-runtime/runtime/base/esm2022/resolves/i18n.resolve.mjs +3 -3
- app-ng-runtime/runtime/base/esm2022/resolves/metadata.resolve.mjs +3 -3
- app-ng-runtime/runtime/base/esm2022/resolves/security-config.resolve.mjs +3 -3
- app-ng-runtime/runtime/base/esm2022/runtime-base.module.mjs +3 -3
- app-ng-runtime/runtime/base/esm2022/services/app-defaults.service.mjs +3 -3
- app-ng-runtime/runtime/base/esm2022/services/app.manager.service.mjs +19 -16
- app-ng-runtime/runtime/base/esm2022/services/app.service.mjs +9 -8
- app-ng-runtime/runtime/base/esm2022/services/dynamic-component-ref-provider.service.mjs +5 -4
- app-ng-runtime/runtime/base/esm2022/services/http-interceptor.services.mjs +6 -5
- app-ng-runtime/runtime/base/esm2022/services/i18n.service.mjs +15 -13
- app-ng-runtime/runtime/base/esm2022/services/navigation.service.mjs +10 -9
- app-ng-runtime/runtime/base/esm2022/services/pipe-provider.service.mjs +3 -3
- app-ng-runtime/runtime/base/esm2022/services/pipe.service.mjs +3 -3
- app-ng-runtime/runtime/base/esm2022/services/prefab-manager.service.mjs +5 -4
- app-ng-runtime/runtime/base/esm2022/services/spinner.service.mjs +9 -8
- app-ng-runtime/runtime/base/esm2022/services/toaster.service.mjs +8 -7
- app-ng-runtime/runtime/base/esm2022/util/fragment-monitor.mjs +3 -3
- app-ng-runtime/runtime/base/esm2022/util/wm-route-reuse-strategy.mjs +7 -8
- app-ng-runtime/runtime/base/fesm2022/index.mjs +273 -256
- app-ng-runtime/runtime/base/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/runtime/base/overrides/wm_dom_renderer.d.ts +2 -2
- app-ng-runtime/runtime/base/services/i18n.service.d.ts +1 -1
- app-ng-runtime/runtime/dynamic/.npmignore +2 -0
- app-ng-runtime/runtime/dynamic/bundles/index.umd.js +22 -21
- app-ng-runtime/runtime/dynamic/esm2022/app/app.module.mjs +1 -1
- app-ng-runtime/runtime/dynamic/esm2022/app/components/page-wrapper.component.mjs +4 -3
- app-ng-runtime/runtime/dynamic/esm2022/app/services/app-extension.service.mjs +3 -3
- app-ng-runtime/runtime/dynamic/esm2022/app/services/app-js-provider.service.mjs +3 -3
- app-ng-runtime/runtime/dynamic/esm2022/app/services/app-resource-manager.service.mjs +3 -3
- app-ng-runtime/runtime/dynamic/esm2022/app/services/app-variables-provider.service.mjs +3 -3
- app-ng-runtime/runtime/dynamic/esm2022/app/services/component-ref-provider.service.mjs +6 -5
- app-ng-runtime/runtime/dynamic/esm2022/app/services/prefab-config-provider.service.mjs +3 -3
- app-ng-runtime/runtime/dynamic/esm2022/main.mjs +3 -2
- app-ng-runtime/runtime/dynamic/fesm2022/index.mjs +21 -19
- app-ng-runtime/runtime/dynamic/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/scripts/datatable/datatable.js +2 -2
- app-ng-runtime/scripts/jquery-ui/ui/widgets/droppable.js +7 -7
- app-ng-runtime/scripts/jquery-ui/ui/widgets/resizable.js +13 -10
- app-ng-runtime/scripts/jquery-ui/ui/widgets/sortable.js +7 -7
- app-ng-runtime/security/.npmignore +2 -0
- app-ng-runtime/security/bundles/index.umd.js +17 -17
- app-ng-runtime/security/esm2022/security.module.mjs +2 -2
- app-ng-runtime/security/esm2022/security.service.mjs +14 -13
- app-ng-runtime/security/fesm2022/index.mjs +14 -13
- app-ng-runtime/security/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/security/security.service.d.ts +1 -1
- app-ng-runtime/swipey/.npmignore +2 -0
- app-ng-runtime/swipey/esm2022/swipe.animation.mjs +1 -1
- app-ng-runtime/swipey/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/transpiler/.npmignore +2 -0
- app-ng-runtime/transpiler/bundles/index.umd.js +10 -9
- app-ng-runtime/transpiler/esm2022/build.mjs +8 -6
- app-ng-runtime/transpiler/fesm2022/index.mjs +7 -5
- app-ng-runtime/transpiler/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/variables/.npmignore +2 -0
- app-ng-runtime/variables/bundles/index.umd.js +160 -150
- app-ng-runtime/variables/esm2022/factory/variable.factory.mjs +1 -1
- app-ng-runtime/variables/esm2022/manager/action/login-action.manager.mjs +15 -14
- app-ng-runtime/variables/esm2022/manager/action/logout-action.manager.mjs +1 -1
- app-ng-runtime/variables/esm2022/manager/action/notification-action.manager.mjs +9 -8
- app-ng-runtime/variables/esm2022/manager/variable/base-variable.manager.mjs +3 -2
- app-ng-runtime/variables/esm2022/manager/variable/device-variable-manager.mjs +1 -1
- app-ng-runtime/variables/esm2022/manager/variable/device-variable-service.mjs +1 -1
- app-ng-runtime/variables/esm2022/manager/variable/web-socket-variable.manager.mjs +11 -10
- app-ng-runtime/variables/esm2022/model/action/notification-action.mjs +1 -1
- app-ng-runtime/variables/esm2022/service/metadata-service/metadata.service.mjs +3 -3
- app-ng-runtime/variables/esm2022/service/variables.service.mjs +9 -8
- app-ng-runtime/variables/esm2022/util/action/navigation-action.utils.mjs +4 -4
- app-ng-runtime/variables/esm2022/util/variable/pagination.utils.mjs +30 -23
- app-ng-runtime/variables/esm2022/util/variable/service-variable.utils.mjs +29 -28
- app-ng-runtime/variables/esm2022/util/variable/variables.utils.mjs +75 -70
- app-ng-runtime/variables/esm2022/variables.module.mjs +2 -2
- app-ng-runtime/variables/fesm2022/index.mjs +174 -163
- app-ng-runtime/variables/fesm2022/index.mjs.map +1 -1
- app-ng-runtime/variables/util/variable/service-variable.utils.d.ts +1 -1
- app-ng-runtime/build-task/advanced/custom-widget-prop/custom-widget-prop.build.d.ts +0 -2
- app-ng-runtime/build-task/esm2022/advanced/custom-widget-prop/custom-widget-prop.build.mjs +0 -10
- app-ng-runtime/components/advanced/custom/custom-widget-container-prop/custom-widget-container-prop.directive.d.ts +0 -20
- app-ng-runtime/components/advanced/custom/esm2022/custom-widget-container-prop/custom-widget-container-prop.directive.mjs +0 -70
|
@@ -5,6 +5,7 @@ import { DataType } from '../enums/enums';
|
|
|
5
5
|
import { DataSource } from '../types/types';
|
|
6
6
|
import { setAttr } from './dom';
|
|
7
7
|
import { $parseEvent } from './expression-parser';
|
|
8
|
+
import { attempt, camelCase, cloneDeep, every, filter, forEach, get, identity, includes, indexOf, intersection, isArray, isDate, isEqual, isEqualWith, isError, isFunction, isNull, isNumber, isString, isUndefined, keys, map, noop as _noop, omit, replace as _replace, split, startsWith, toLower, toUpper, trim } from "lodash-es";
|
|
8
9
|
const userAgent = window.navigator.userAgent;
|
|
9
10
|
const REGEX = {
|
|
10
11
|
SNAKE_CASE: /[A-Z]/g,
|
|
@@ -111,9 +112,9 @@ export const encodeUrlParams = (url) => {
|
|
|
111
112
|
queryParams = queryParamsString.split('&');
|
|
112
113
|
queryParams.forEach(function (param) {
|
|
113
114
|
let decodedParamValue;
|
|
114
|
-
const i =
|
|
115
|
+
const i = includes(param, '=') ? param.indexOf('=') : (param && param.length), paramName = param.substr(0, i), paramValue = param.substr(i + 1);
|
|
115
116
|
// add the = for param name only when the param value exists in the given param or empty value is assigned
|
|
116
|
-
if (paramValue ||
|
|
117
|
+
if (paramValue || includes(param, '=')) {
|
|
117
118
|
try {
|
|
118
119
|
decodedParamValue = decodeURIComponent(paramValue);
|
|
119
120
|
}
|
|
@@ -161,7 +162,7 @@ export const periodSeparate = name => {
|
|
|
161
162
|
return name;
|
|
162
163
|
};
|
|
163
164
|
export const prettifyLabel = label => {
|
|
164
|
-
label =
|
|
165
|
+
label = camelCase(label);
|
|
165
166
|
/*capitalize the initial Letter*/
|
|
166
167
|
label = initCaps(label);
|
|
167
168
|
/*Convert camel case words to separated words*/
|
|
@@ -176,11 +177,11 @@ export const deHyphenate = (name) => {
|
|
|
176
177
|
/*Accepts an array or a string separated with symbol and returns prettified result*/
|
|
177
178
|
export const prettifyLabels = (names, separator = ',') => {
|
|
178
179
|
let modifiedNames, namesArray = [];
|
|
179
|
-
if (!
|
|
180
|
-
namesArray =
|
|
180
|
+
if (!isArray(names)) {
|
|
181
|
+
namesArray = split(names, separator);
|
|
181
182
|
}
|
|
182
|
-
modifiedNames =
|
|
183
|
-
if (
|
|
183
|
+
modifiedNames = map(namesArray, prettifyLabel);
|
|
184
|
+
if (isArray(names)) {
|
|
184
185
|
return modifiedNames;
|
|
185
186
|
}
|
|
186
187
|
return modifiedNames.join(separator);
|
|
@@ -221,7 +222,7 @@ export const getEvaluatedExprValue = (object, expression) => {
|
|
|
221
222
|
* $eval is used, as expression can be in format of field1 + ' ' + field2
|
|
222
223
|
* $eval can fail, if expression is not in correct format, so attempt the eval function
|
|
223
224
|
*/
|
|
224
|
-
val =
|
|
225
|
+
val = attempt(function () {
|
|
225
226
|
const argsExpr = Object.keys(object).map((fieldName) => {
|
|
226
227
|
return `var ${fieldName} = data['${fieldName}'];`;
|
|
227
228
|
}).join(' ');
|
|
@@ -232,8 +233,8 @@ export const getEvaluatedExprValue = (object, expression) => {
|
|
|
232
233
|
* $eval fails if field expression has spaces. Ex: 'field name' or 'field@name'
|
|
233
234
|
* As a fallback, get value directly from object or scope
|
|
234
235
|
*/
|
|
235
|
-
if (
|
|
236
|
-
val =
|
|
236
|
+
if (isError(val)) {
|
|
237
|
+
val = get(object, expression);
|
|
237
238
|
}
|
|
238
239
|
return val;
|
|
239
240
|
};
|
|
@@ -268,7 +269,7 @@ export function triggerFn(fn, ...argmnts) {
|
|
|
268
269
|
for (start; start < len; start++) {
|
|
269
270
|
args[start - 1] = arguments[start];
|
|
270
271
|
}
|
|
271
|
-
if (
|
|
272
|
+
if (isFunction(fn)) {
|
|
272
273
|
return fn.apply(null, args);
|
|
273
274
|
}
|
|
274
275
|
}
|
|
@@ -315,12 +316,12 @@ export const getDateObj = (value, options, timezone) => {
|
|
|
315
316
|
// Handling localization
|
|
316
317
|
if (options && options.pattern && options.pattern !== 'timestamp') {
|
|
317
318
|
// Fix for WMS-19601, invalid date is returned on date selection.
|
|
318
|
-
const isNativePicker = (options && options.hasOwnProperty('isNativePicker')) ?
|
|
319
|
+
const isNativePicker = (options && options.hasOwnProperty('isNativePicker')) ? get(options, 'isNativePicker') : isMobile();
|
|
319
320
|
const pattern = isNativePicker ? 'YYYY/MM/DD HH:mm:ss' : momentPattern(options.pattern);
|
|
320
321
|
value = moment(value, pattern).toDate();
|
|
321
322
|
}
|
|
322
323
|
/*if the value is a date object, no need to covert it*/
|
|
323
|
-
if (
|
|
324
|
+
if (isDate(value)) {
|
|
324
325
|
return value;
|
|
325
326
|
}
|
|
326
327
|
/*if the value is a timestamp string, convert it to a number*/
|
|
@@ -337,7 +338,7 @@ export const getDateObj = (value, options, timezone) => {
|
|
|
337
338
|
* This is because it returns UTC time i.e. Coordinated Universal Time (UTC).
|
|
338
339
|
* To create date in local time use moment
|
|
339
340
|
*/
|
|
340
|
-
if (
|
|
341
|
+
if (isString(value)) {
|
|
341
342
|
/*
|
|
342
343
|
* If selected locale is Arabic, moment(value).format() is giving date in Arabic language
|
|
343
344
|
* (Ex: If date value is "1990-11-23" and moment(value).format() is "١٩٩٠-١١-٢٣T٠٠:٠٠:٠٠+٠٥:٣٠")
|
|
@@ -381,11 +382,11 @@ export const addEventListenerOnElement = (_element, excludeElement, nativeElemen
|
|
|
381
382
|
* @returns a clone of the passed object
|
|
382
383
|
*/
|
|
383
384
|
export const getClonedObject = (object) => {
|
|
384
|
-
return
|
|
385
|
+
return cloneDeep(object);
|
|
385
386
|
};
|
|
386
387
|
export const getFiles = (formName, fieldName, isList) => {
|
|
387
|
-
const files =
|
|
388
|
-
return isList ?
|
|
388
|
+
const files = get(document.forms, [formName, fieldName, 'files']);
|
|
389
|
+
return isList ? map(files, identity) : files && files[0];
|
|
389
390
|
};
|
|
390
391
|
/*Function to generate a random number*/
|
|
391
392
|
function random() {
|
|
@@ -402,7 +403,7 @@ export const validateAccessRoles = (roleExp, loggedInUser) => {
|
|
|
402
403
|
let roles;
|
|
403
404
|
if (roleExp && loggedInUser) {
|
|
404
405
|
roles = roleExp && roleExp.split(',').map(Function.prototype.call, String.prototype.trim);
|
|
405
|
-
return
|
|
406
|
+
return intersection(roles, loggedInUser.userRoles).length;
|
|
406
407
|
}
|
|
407
408
|
return true;
|
|
408
409
|
};
|
|
@@ -424,7 +425,7 @@ export const xmlToJson = (xmlString) => {
|
|
|
424
425
|
const x2jsObj = new X2JS({ 'emptyNodeForm': 'content', 'attributePrefix': '', 'enableToStringFunc': false });
|
|
425
426
|
let json = x2jsObj.xml2js(xmlString);
|
|
426
427
|
if (json) {
|
|
427
|
-
json =
|
|
428
|
+
json = get(json, Object.keys(json)[0]);
|
|
428
429
|
}
|
|
429
430
|
return json;
|
|
430
431
|
};
|
|
@@ -458,7 +459,7 @@ export const findValueOf = (obj, key, create) => {
|
|
|
458
459
|
return;
|
|
459
460
|
}
|
|
460
461
|
if (!create) {
|
|
461
|
-
return
|
|
462
|
+
return get(obj, key);
|
|
462
463
|
}
|
|
463
464
|
const parts = key.split('.'), keys = [];
|
|
464
465
|
let skipProcessing;
|
|
@@ -511,7 +512,7 @@ export const isNumberType = (type) => {
|
|
|
511
512
|
};
|
|
512
513
|
/* function to check if provided object is empty*/
|
|
513
514
|
export const isEmptyObject = (obj) => {
|
|
514
|
-
if (isObject(obj) && !
|
|
515
|
+
if (isObject(obj) && !isArray(obj)) {
|
|
515
516
|
return Object.keys(obj).length === 0;
|
|
516
517
|
}
|
|
517
518
|
return false;
|
|
@@ -522,7 +523,7 @@ export const scrollToElement = (element) => {
|
|
|
522
523
|
const formPosition = $element.offset().top;
|
|
523
524
|
const $scrollParent = $element.closest('[wmsmoothscroll="true"]');
|
|
524
525
|
if (isMobileApp() && $scrollParent.length) {
|
|
525
|
-
const iScroll =
|
|
526
|
+
const iScroll = get($scrollParent[0], 'iscroll');
|
|
526
527
|
let to = -(formPosition - iScroll.y);
|
|
527
528
|
to = (iScroll.maxScrollY > to) ? iScroll.maxScrollY : to;
|
|
528
529
|
iScroll.scrollTo(0, to);
|
|
@@ -557,8 +558,8 @@ export const isPageable = (obj) => {
|
|
|
557
558
|
'totalPages': 1
|
|
558
559
|
};
|
|
559
560
|
// paginated object may or may not contain 'empty' property. In either case, Pageable should return as true.
|
|
560
|
-
const paginatedObj =
|
|
561
|
-
return (
|
|
561
|
+
const paginatedObj = omit(obj, 'empty');
|
|
562
|
+
return (isEqual(keys(pageable), keys(paginatedObj).sort()));
|
|
562
563
|
};
|
|
563
564
|
/*
|
|
564
565
|
* Util method to replace patterns in string with object keys or array values
|
|
@@ -577,36 +578,36 @@ export const replace = (template, map, parseError) => {
|
|
|
577
578
|
regEx = /\{([^\}]+)\}/g;
|
|
578
579
|
}
|
|
579
580
|
return template.replace(regEx, function (match, key) {
|
|
580
|
-
return
|
|
581
|
+
return get(map, key);
|
|
581
582
|
});
|
|
582
583
|
};
|
|
583
584
|
/*Function to check if date time type*/
|
|
584
585
|
export const isDateTimeType = type => {
|
|
585
|
-
if (
|
|
586
|
-
type =
|
|
586
|
+
if (includes(type, '.')) {
|
|
587
|
+
type = toLower(extractType(type));
|
|
587
588
|
}
|
|
588
|
-
return
|
|
589
|
+
return includes([DataType.DATE, DataType.TIME, DataType.TIMESTAMP, DataType.DATETIME, DataType.LOCALDATETIME], type);
|
|
589
590
|
};
|
|
590
591
|
const momentPattern = (pattern) => {
|
|
591
|
-
if (
|
|
592
|
-
pattern =
|
|
592
|
+
if (includes(pattern, 'E')) {
|
|
593
|
+
pattern = _replace(pattern, /E[,]?/g, '');
|
|
593
594
|
}
|
|
594
|
-
return
|
|
595
|
+
return _replace(pattern, /y*d*/g, (val) => val.toUpperCase());
|
|
595
596
|
};
|
|
596
597
|
/* This function returns date object. If val is undefined it returns invalid date */
|
|
597
598
|
export const getValidDateObject = (val, options) => {
|
|
598
599
|
const defaultMeridian = ['AM', 'PM'];
|
|
599
600
|
const momentMeridian = moment()._locale.meridiem();
|
|
600
601
|
// Updating localized meridians with default meridians when moment meridian is not defined
|
|
601
|
-
if (options && options.meridians &&
|
|
602
|
-
|
|
603
|
-
if (
|
|
602
|
+
if (options && options.meridians && includes(defaultMeridian, momentMeridian)) {
|
|
603
|
+
forEach(options.meridians, (meridian, index) => {
|
|
604
|
+
if (includes(val, meridian)) {
|
|
604
605
|
val = val.replace(meridian, defaultMeridian[index]);
|
|
605
606
|
}
|
|
606
607
|
});
|
|
607
608
|
}
|
|
608
|
-
const isNativePicker = (options && options.hasOwnProperty('isNativePicker')) ?
|
|
609
|
-
const pattern = isNativePicker ? (
|
|
609
|
+
const isNativePicker = (options && options.hasOwnProperty('isNativePicker')) ? get(options, 'isNativePicker') : isMobile();
|
|
610
|
+
const pattern = isNativePicker ? (get(options, 'pattern') || 'YYYY/MM/DD HH:mm:ss') : (momentPattern(get(options, 'pattern')) || '');
|
|
610
611
|
// Handling localization
|
|
611
612
|
if (options && options.pattern && options.pattern !== 'timestamp') {
|
|
612
613
|
if (!isNaN((new Date(val)).getTime())) {
|
|
@@ -677,21 +678,21 @@ export const getBlob = (val, valContentType) => {
|
|
|
677
678
|
export const isEqualWithFields = (obj1, obj2, compareBy) => {
|
|
678
679
|
// compareBy can be 'id' or 'id1, id2' or 'id1, id2:id3'
|
|
679
680
|
// Split the compareby comma separated values
|
|
680
|
-
let _compareBy =
|
|
681
|
-
_compareBy =
|
|
682
|
-
return
|
|
683
|
-
return
|
|
681
|
+
let _compareBy = isArray(compareBy) ? compareBy : split(compareBy, ',');
|
|
682
|
+
_compareBy = map(_compareBy, trim);
|
|
683
|
+
return isEqualWith(obj1, obj2, function (o1, o2) {
|
|
684
|
+
return every(_compareBy, function (cb) {
|
|
684
685
|
let cb1, cb2, _cb;
|
|
685
686
|
// If compareby contains : , compare the values by the keys on either side of :
|
|
686
|
-
if (
|
|
687
|
-
cb1 = cb2 =
|
|
687
|
+
if (indexOf(cb, compareBySeparator) === -1) {
|
|
688
|
+
cb1 = cb2 = trim(cb);
|
|
688
689
|
}
|
|
689
690
|
else {
|
|
690
|
-
_cb =
|
|
691
|
-
cb1 =
|
|
692
|
-
cb2 =
|
|
691
|
+
_cb = split(cb, compareBySeparator);
|
|
692
|
+
cb1 = trim(_cb[0]);
|
|
693
|
+
cb2 = trim(_cb[1]);
|
|
693
694
|
}
|
|
694
|
-
return
|
|
695
|
+
return get(o1, cb1) === get(o2, cb2);
|
|
695
696
|
});
|
|
696
697
|
});
|
|
697
698
|
};
|
|
@@ -817,10 +818,6 @@ export const getSessionStorageItem = key => {
|
|
|
817
818
|
}
|
|
818
819
|
};
|
|
819
820
|
export const noop = (...args) => { };
|
|
820
|
-
export const isArray = v => _.isArray(v);
|
|
821
|
-
export const isString = v => typeof v === 'string';
|
|
822
|
-
export const isNumber = v => typeof v === 'number';
|
|
823
|
-
export const isBoolean = v => typeof v === 'boolean';
|
|
824
821
|
/**
|
|
825
822
|
* This function returns a blob object from the given file path
|
|
826
823
|
* @param filepath
|
|
@@ -852,7 +849,7 @@ export const AppConstants = {
|
|
|
852
849
|
INT_MAX_VALUE: 2147483647
|
|
853
850
|
};
|
|
854
851
|
export const openLink = (link, target = '_self') => {
|
|
855
|
-
if (hasCordova() &&
|
|
852
|
+
if (hasCordova() && startsWith(link, '#')) {
|
|
856
853
|
location.hash = link;
|
|
857
854
|
}
|
|
858
855
|
else {
|
|
@@ -895,12 +892,12 @@ export const retryIfFails = (fn, interval, maxRetries, onBeforeRetry = () => Pro
|
|
|
895
892
|
let retryCount = 0;
|
|
896
893
|
const tryFn = () => {
|
|
897
894
|
retryCount++;
|
|
898
|
-
if (
|
|
895
|
+
if (isFunction(fn)) {
|
|
899
896
|
return fn();
|
|
900
897
|
}
|
|
901
898
|
};
|
|
902
|
-
maxRetries = (
|
|
903
|
-
interval = (
|
|
899
|
+
maxRetries = (isNumber(maxRetries) && maxRetries > 0 ? maxRetries : 0);
|
|
900
|
+
interval = (isNumber(interval) && interval > 0 ? interval : 0);
|
|
904
901
|
return new Promise((resolve, reject) => {
|
|
905
902
|
const errorFn = function () {
|
|
906
903
|
const errArgs = arguments;
|
|
@@ -950,10 +947,10 @@ export const getUrlParams = (link) => {
|
|
|
950
947
|
// If url params are present, construct params object and pass it to search
|
|
951
948
|
const index = link.indexOf('?');
|
|
952
949
|
if (index !== -1) {
|
|
953
|
-
const queryParams =
|
|
950
|
+
const queryParams = split(link.substring(index + 1, link.length), '&');
|
|
954
951
|
queryParams.forEach((param) => {
|
|
955
|
-
|
|
956
|
-
params[
|
|
952
|
+
let paramArray = split(param, '=');
|
|
953
|
+
params[paramArray[0]] = paramArray[1];
|
|
957
954
|
});
|
|
958
955
|
}
|
|
959
956
|
return params;
|
|
@@ -987,8 +984,8 @@ export const executePromiseChain = (fns, args, d, i) => {
|
|
|
987
984
|
d = d || defer();
|
|
988
985
|
i = i || 0;
|
|
989
986
|
if (i === 0) {
|
|
990
|
-
fns =
|
|
991
|
-
return !(
|
|
987
|
+
fns = filter(fns, function (fn) {
|
|
988
|
+
return !(isUndefined(fn) || isNull(fn));
|
|
992
989
|
});
|
|
993
990
|
}
|
|
994
991
|
if (fns && i < fns.length) {
|
|
@@ -1012,7 +1009,7 @@ export const executePromiseChain = (fns, args, d, i) => {
|
|
|
1012
1009
|
*/
|
|
1013
1010
|
export const isDataSourceEqual = (d1, d2) => {
|
|
1014
1011
|
return d1.execute(DataSource.Operation.GET_UNIQUE_IDENTIFIER) === d2.execute(DataSource.Operation.GET_UNIQUE_IDENTIFIER) &&
|
|
1015
|
-
|
|
1012
|
+
isEqual(d1.execute(DataSource.Operation.GET_CONTEXT_IDENTIFIER), d2.execute(DataSource.Operation.GET_CONTEXT_IDENTIFIER));
|
|
1016
1013
|
};
|
|
1017
1014
|
/**
|
|
1018
1015
|
* checks if the passed datasource context matches with passed context
|
|
@@ -1030,15 +1027,15 @@ export const validateDataSourceCtx = (ds, ctx) => {
|
|
|
1030
1027
|
* @param context scope of the variable
|
|
1031
1028
|
*/
|
|
1032
1029
|
export const processFilterExpBindNode = (context, filterExpressions, variable) => {
|
|
1033
|
-
const destroyFn = context.registerDestroyListener ? context.registerDestroyListener.bind(context) :
|
|
1030
|
+
const destroyFn = context.registerDestroyListener ? context.registerDestroyListener.bind(context) : _noop;
|
|
1034
1031
|
const filter$ = new Subject();
|
|
1035
1032
|
const bindFilExpObj = (obj, targetNodeKey) => {
|
|
1036
1033
|
const listener = (newVal, oldVal) => {
|
|
1037
|
-
if ((newVal === oldVal &&
|
|
1034
|
+
if ((newVal === oldVal && isUndefined(newVal)) || (isUndefined(newVal) && !isUndefined(oldVal))) {
|
|
1038
1035
|
return;
|
|
1039
1036
|
}
|
|
1040
1037
|
// Skip cloning for blob column
|
|
1041
|
-
if (!
|
|
1038
|
+
if (!includes(['blob', 'file'], obj.type)) {
|
|
1042
1039
|
newVal = getClonedObject(newVal);
|
|
1043
1040
|
}
|
|
1044
1041
|
// backward compatibility: where we are allowing the user to bind complete object
|
|
@@ -1046,7 +1043,7 @@ export const processFilterExpBindNode = (context, filterExpressions, variable) =
|
|
|
1046
1043
|
// remove the existing databinding element
|
|
1047
1044
|
filterExpressions.rules = [];
|
|
1048
1045
|
// now add all the returned values
|
|
1049
|
-
|
|
1046
|
+
forEach(newVal, function (value, target) {
|
|
1050
1047
|
filterExpressions.rules.push({
|
|
1051
1048
|
'target': target,
|
|
1052
1049
|
'value': value,
|
|
@@ -1064,12 +1061,12 @@ export const processFilterExpBindNode = (context, filterExpressions, variable) =
|
|
|
1064
1061
|
};
|
|
1065
1062
|
if (stringStartsWith(obj[targetNodeKey], 'bind:')) {
|
|
1066
1063
|
// [Todo-CSP]: needs a check, where is this used
|
|
1067
|
-
destroyFn($watch(obj[targetNodeKey].replace('bind:', ''), context, {}, variable ? variable.invokeOnFiltertExpressionChange.bind(variable, obj, targetNodeKey) : listener, undefined, false, { arrayType:
|
|
1064
|
+
destroyFn($watch(obj[targetNodeKey].replace('bind:', ''), context, {}, variable ? variable.invokeOnFiltertExpressionChange.bind(variable, obj, targetNodeKey) : listener, undefined, false, { arrayType: includes(['in', 'notin'], obj.matchMode) }));
|
|
1068
1065
|
}
|
|
1069
1066
|
};
|
|
1070
1067
|
const traverseFilterExpressions = expressions => {
|
|
1071
1068
|
if (expressions.rules) {
|
|
1072
|
-
|
|
1069
|
+
forEach(expressions.rules, (filExpObj, i) => {
|
|
1073
1070
|
if (filExpObj.rules) {
|
|
1074
1071
|
traverseFilterExpressions(filExpObj);
|
|
1075
1072
|
}
|
|
@@ -1099,12 +1096,12 @@ export const extendProto = (target, proto) => {
|
|
|
1099
1096
|
};
|
|
1100
1097
|
export const removeExtraSlashes = function (url) {
|
|
1101
1098
|
const base64regex = /^data:image\/([a-z]{2,});base64,/;
|
|
1102
|
-
if (
|
|
1099
|
+
if (isString(url)) {
|
|
1103
1100
|
/*
|
|
1104
1101
|
* support for mobile apps having local file path url starting with file:/// and
|
|
1105
1102
|
* support for base64 format
|
|
1106
1103
|
* */
|
|
1107
|
-
if (
|
|
1104
|
+
if (startsWith(url, 'file:///') || base64regex.test(url)) {
|
|
1108
1105
|
return url;
|
|
1109
1106
|
}
|
|
1110
1107
|
return url.replace(new RegExp('([^:]\/)(\/)+', 'g'), '$1');
|
|
@@ -1156,7 +1153,7 @@ const DEFAULT_DISPLAY_FORMATS = {
|
|
|
1156
1153
|
};
|
|
1157
1154
|
// This method returns the display date format for given type
|
|
1158
1155
|
export const getDisplayDateTimeFormat = type => {
|
|
1159
|
-
return DEFAULT_DISPLAY_FORMATS[
|
|
1156
|
+
return DEFAULT_DISPLAY_FORMATS[toUpper(type)];
|
|
1160
1157
|
};
|
|
1161
1158
|
// Generate for attribute on label and ID on input element, so that label elements are associated to form controls
|
|
1162
1159
|
export const addForIdAttributes = (element) => {
|
|
@@ -1212,7 +1209,7 @@ export const adjustContainerPosition = (containerElem, parentElem, ref, ele) =>
|
|
|
1212
1209
|
* @param ele Child element(jquery). For some of the widgets(time, search) containerElem doesn't have height. The inner element(dropdown-menu) has height so passing it as optional.
|
|
1213
1210
|
*/
|
|
1214
1211
|
export const adjustContainerRightEdges = (containerElem, parentElem, ref, ele) => {
|
|
1215
|
-
const containerWidth = ele ?
|
|
1212
|
+
const containerWidth = ele ? parseInt(ele.css('width')) : parseInt(containerElem.css('width'));
|
|
1216
1213
|
const viewPortWidth = $(window).width() + window.scrollX;
|
|
1217
1214
|
const parentDimesion = parentElem.getBoundingClientRect();
|
|
1218
1215
|
const parentRight = parentDimesion.right + window.scrollX;
|
|
@@ -1261,7 +1258,7 @@ export const getWebkitTraslationMatrix = (containerElem) => {
|
|
|
1261
1258
|
export const closePopover = (element) => {
|
|
1262
1259
|
if (!element.closest('.app-popover').length) {
|
|
1263
1260
|
const popoverElements = document.querySelectorAll('.app-popover-wrapper');
|
|
1264
|
-
|
|
1261
|
+
forEach(popoverElements, (ele) => {
|
|
1265
1262
|
if (ele.widget.isOpen) {
|
|
1266
1263
|
ele.widget.isOpen = false;
|
|
1267
1264
|
}
|
|
@@ -1295,7 +1292,7 @@ export const triggerItemAction = (scope, item) => {
|
|
|
1295
1292
|
if (itemLink.startsWith('#/') && (!linkTarget || linkTarget === '_self')) {
|
|
1296
1293
|
const queryParams = getUrlParams(itemLink);
|
|
1297
1294
|
itemLink = getRouteNameFromLink(itemLink);
|
|
1298
|
-
const router =
|
|
1295
|
+
const router = get(scope, 'route') || get(scope, 'menuRef.route');
|
|
1299
1296
|
router.navigate([itemLink], { queryParams });
|
|
1300
1297
|
}
|
|
1301
1298
|
else {
|
|
@@ -1311,14 +1308,14 @@ export const triggerItemAction = (scope, item) => {
|
|
|
1311
1308
|
* Example2: expr - "Widgets.list1.currentItem.addresses" and list1 is bound to "Variables.staticVar1.dataSet.details" then the method will return datasource as Variables.staticVar1
|
|
1312
1309
|
*/
|
|
1313
1310
|
export const getDatasourceFromExpr = (expr, scope) => {
|
|
1314
|
-
const isBoundToVariable =
|
|
1315
|
-
const isBoundToWidget =
|
|
1311
|
+
const isBoundToVariable = startsWith(expr, 'Variables.');
|
|
1312
|
+
const isBoundToWidget = startsWith(expr, 'Widgets.');
|
|
1316
1313
|
const parts = expr.split('.');
|
|
1317
1314
|
if (isBoundToVariable) {
|
|
1318
|
-
return
|
|
1315
|
+
return get(scope.viewParent.Variables, parts[1]);
|
|
1319
1316
|
}
|
|
1320
1317
|
if (isBoundToWidget) {
|
|
1321
|
-
const widgetScope =
|
|
1318
|
+
const widgetScope = get(scope.viewParent.Widgets, parts[1]);
|
|
1322
1319
|
const widgetDatasetBoundExpr = widgetScope.$attrs.get('datasetboundexpr');
|
|
1323
1320
|
let widgetBoundExpression;
|
|
1324
1321
|
widgetBoundExpression = (!widgetScope.datasource && widgetDatasetBoundExpr) ? widgetDatasetBoundExpr : widgetScope.binddataset;
|
|
@@ -1335,7 +1332,7 @@ export const extractCurrentItemExpr = (expr, scope) => {
|
|
|
1335
1332
|
const currentItemRegEx = /^Widgets\..*\.currentItem/g;
|
|
1336
1333
|
if (currentItemRegEx.test(expr)) {
|
|
1337
1334
|
const parts = expr.split('.');
|
|
1338
|
-
const widgetScope =
|
|
1335
|
+
const widgetScope = get(scope.viewParent.Widgets, parts[1]);
|
|
1339
1336
|
const widgetDatasetBoundExpr = widgetScope.$attrs.get('datasetboundexpr');
|
|
1340
1337
|
if (!widgetScope.datasource && widgetDatasetBoundExpr) {
|
|
1341
1338
|
expr = expr.replace(/^Widgets\..*\.currentItem/g, `${widgetDatasetBoundExpr}[$i]`);
|
|
@@ -1375,7 +1372,7 @@ export const VALIDATOR = {
|
|
|
1375
1372
|
EXCLUDEDAYS: 'excludedays'
|
|
1376
1373
|
};
|
|
1377
1374
|
export const transformFileURI = (url) => {
|
|
1378
|
-
if (
|
|
1375
|
+
if (isString(url) && hasCordova() && url.startsWith('file://')) {
|
|
1379
1376
|
if (isIos()) {
|
|
1380
1377
|
return url.replace('file://', '/_app_file_');
|
|
1381
1378
|
}
|
|
@@ -1403,7 +1400,7 @@ export const appendScriptToHead = (callback) => {
|
|
|
1403
1400
|
document.head.appendChild(scriptele);
|
|
1404
1401
|
};
|
|
1405
1402
|
export const getAppSetting = (key, defaultValue) => {
|
|
1406
|
-
return (_WM_APP_PROPERTIES.extra_settings &&
|
|
1403
|
+
return (_WM_APP_PROPERTIES.extra_settings && get(_WM_APP_PROPERTIES.extra_settings, key)) || defaultValue;
|
|
1407
1404
|
};
|
|
1408
1405
|
/* this function sets the itemclass depending on itemsperrow.
|
|
1409
1406
|
* if itemsperrow is 2 for large device, then itemclass is 'col-xs-1 col-sm-1 col-lg-2'
|
|
@@ -1414,8 +1411,8 @@ export const setListClass = (scope) => {
|
|
|
1414
1411
|
if (scope.itemsperrow) {
|
|
1415
1412
|
if (isNaN(parseInt(scope.itemsperrow, 10))) {
|
|
1416
1413
|
// handling itemsperrow containing string of classes
|
|
1417
|
-
|
|
1418
|
-
const keys =
|
|
1414
|
+
split(scope.itemsperrow, ' ').forEach((cls) => {
|
|
1415
|
+
const keys = split(cls, '-');
|
|
1419
1416
|
cls = `${keys[0]}-${(12 / parseInt(keys[1], 10))}`;
|
|
1420
1417
|
temp += ` col-${cls}`;
|
|
1421
1418
|
});
|
|
@@ -1464,4 +1461,4 @@ export const findViewParent = (lView) => {
|
|
|
1464
1461
|
}
|
|
1465
1462
|
|
|
1466
1463
|
}*/
|
|
1467
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy91dGlscy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRS9ELE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzdDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUM5QixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFZaEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUM7QUFDN0MsTUFBTSxLQUFLLEdBQUc7SUFDVixVQUFVLEVBQUUsUUFBUTtJQUNwQixPQUFPLEVBQUUsVUFBVTtJQUNuQixNQUFNLEVBQUUsU0FBUztJQUNqQixJQUFJLEVBQUUsT0FBTztJQUNiLElBQUksRUFBRSxPQUFPO0lBQ2IsR0FBRyxFQUFFLE1BQU07SUFDUCxRQUFRLEVBQUUsV0FBVztJQUN6QixjQUFjLEVBQUUsMkRBQTJEO0lBQzNFLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLE9BQU8sRUFBRSxnQkFBZ0I7SUFDekIsc0JBQXNCLEVBQUUsaURBQWlEO0lBQ3pFLHFCQUFxQixFQUFFLDhHQUE4RztJQUNySSxzQkFBc0IsRUFBRSxvQ0FBb0M7SUFDNUQsc0JBQXNCLEVBQUUseUNBQXlDO0lBQ2pFLGtCQUFrQixFQUFFLG1DQUFtQztJQUN2RCxzQkFBc0IsRUFBRSxvQkFBb0I7SUFDNUMsV0FBVyxFQUFFLHVEQUF1RDtJQUNwRSxhQUFh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LGNBQWMsR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFO0lBQ3pDLE9BQU8sS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7O09Ba0JHO0FBQ1AsQ0FBQyxDQUFBO0FBRUQ7Ozs7Ozs7R0FPRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7Z2V0V21Qcm9qZWN0UHJvcGVydGllc30gZnJvbSAnLi93bS1wcm9qZWN0LXByb3BlcnRpZXMnO1xuXG5pbXBvcnQgeyRhcHBEaWdlc3QsICR3YXRjaH0gZnJvbSAnLi93YXRjaGVyJztcbmltcG9ydCB7RGF0YVR5cGV9IGZyb20gJy4uL2VudW1zL2VudW1zJztcbmltcG9ydCB7RGF0YVNvdXJjZX0gZnJvbSAnLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHtzZXRBdHRyfSBmcm9tICcuL2RvbSc7XG5pbXBvcnQgeyRwYXJzZUV2ZW50fSBmcm9tICcuL2V4cHJlc3Npb24tcGFyc2VyJztcblxuZGVjbGFyZSBjb25zdCBfLCBYMkpTO1xuZGVjbGFyZSBjb25zdCBtb21lbnQ7XG5kZWNsYXJlIGNvbnN0IGRvY3VtZW50O1xuZGVjbGFyZSBjb25zdCByZXNvbHZlTG9jYWxGaWxlU3lzdGVtVVJMO1xuZGVjbGFyZSBjb25zdCAkO1xuZGVjbGFyZSBjb25zdCBXTV9DVVNUT01fRk9STUFUVEVSUztcbmRlY2xhcmUgY29uc3QgTVNDU1NNYXRyaXg7XG5kZWNsYXJlIGNvbnN0IF9XTV9BUFBfUFJPUEVSVElFUztcbmRlY2xhcmUgY29uc3QgY29yZG92YTtcblxuY29uc3QgdXNlckFnZW50ID0gd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQ7XG5jb25zdCBSRUdFWCA9IHtcbiAgICBTTkFLRV9DQVNFOiAvW0EtWl0vZyxcbiAgICBBTkRST0lEOiAvQW5kcm9pZC9pLFxuICAgIElQSE9ORTogL2lQaG9uZS9pLFxuICAgIElQT0Q6IC9pUG9kL2ksXG4gICAgSVBBRDogL2lQYWQvaSxcbiAgICBNQUM6IC9NYWMvaSxcbiAgICAgICAgTUFDSU5URUw6IC9NYWNJbnRlbC9pLFxuICAgIEFORFJPSURfVEFCTEVUOiAvYW5kcm9pZHxhbmRyb2lkIDMuMHx4b29tfHNjaC1pODAwfHBsYXlib29rfHRhYmxldHxraW5kbGUvaSxcbiAgICBNT0JJTEU6IC9Nb2JpbGUvaSxcbiAgICBXSU5ET1dTOiAvV2luZG93cyBQaG9uZS9pLFxuICAgIFNVUFBPUlRFRF9JTUFHRV9GT1JNQVQ6IC9cXC4oYm1wfGdpZnxqcGV8anBnfGpwZWd8dGlmfHRpZmZ8cGJtfHBuZ3xpY28pJC9pLFxuICAgIFNVUFBPUlRFRF9GSUxFX0ZPUk1BVDogL1xcLih0eHR8anN8Y3NzfGh0bWx8c2NyaXB0fHByb3BlcnRpZXN8anNvbnxqYXZhfHhtbHxzbWR8eG1pfHNxbHxsb2d8d3NkbHx2bXxmdGx8anJ4bWx8eW1sfHlhbWx8bWR8bGVzc3xqc3ApJC9pLFxuICAgIFNVUFBPUlRFRF9BVURJT19GT1JNQVQ6IC9cXC4obXAzfG9nZ3x3ZWJtfHdtYXwzZ3B8d2F2fG00YSkkL2ksXG4gICAgU1VQUE9SVEVEX1ZJREVPX0ZPUk1BVDogL1xcLihtcDR8b2dnfHdlYm18d212fG1wZWd8bXBnfGF2aXxtb3YpJC9pLFxuICAgIFBBR0VfUkVTT1VSQ0VfUEFUSDogL15cXC9wYWdlc1xcLy4qXFwuKGpzfGNzc3xodG1sfGpzb24pJC8sXG4gICAgTUlOX1BBR0VfUkVTT1VSQ0VfUEFUSDogLy4qKHBhZ2UubWluLmh0bWwpJC8sXG4gICAgVkFMSURfRU1BSUw6IC9eW2EtekEtWl1bXFx3LitdK0BbYS16QS1aX10rP1xcLlthLXpBLVouXXsxLDR9W2EtekEtWl0kLyxcbiAgICBWQUxJRF9XRUJfVVJMOiAvXihodHRwW3NdPzpcXC9cXC8pKHd3d1xcLil7MCwxfVthLXpBLVowLTk9Oj9cXC9cXC5cXC1dKyhcXC5bYS16QS1aXXsyLDV9W1xcLl17MCwxfSk/LyxcbiAgICBWQUxJRF9XRUJTT0NLRVRfVVJMOiAvXih3c1tzXT86XFwvXFwvKSh3d3dcXC4pezAsMX1bYS16QS1aMC05PTo/XFwvXFwuXFwtXSsoXFwuW2EtekEtWl17Miw1fVtcXC5dezAsMX0pPy8sXG4gICAgVkFMSURfUkVMQVRJVkVfVVJMOiAvXig/IXd3d1xcLnwoPzpodHRwfGZ0cClzPzpcXC9cXC98W0EtWmEtel06XFxcXHxcXC9cXC8pLiovLFxuICAgIFJFUExBQ0VfUEFUVEVSTjogL1xcJFxceyhbXlxcfV0rKVxcfS9nLFxuICAgIFpJUF9GSUxFOiAvXFwuemlwJC9pLFxuICAgIEVYRV9GSUxFOiAvXFwuZXhlJC9pLFxuICAgIE5PX1FVT1RFU19BTExPV0VEOiAvXlteJ3xcIl0qJC8sXG4gICAgTk9fRE9VQkxFX1FVT1RFU19BTExPV0VEOiAvXlteXCJdKiQvLFxuICAgIFZBTElEX0hUTUw6IC88W2Etel1bXFxzXFxTXSo+L2ksXG4gICAgVkFMSURfUEFTU1dPUkQ6IC9eWzAtOWEtekEtWi1fLkAmKiEjJCVdKyQvLFxuICAgIFNQRUNJQUxfQ0hBUkFDVEVSUzogL1teQS1aMC05YS16X10rL2ksXG4gICAgQVBQX1NFUlZFUl9VUkxfRk9STUFUOiAvXihodHRwW3NdPzpcXC9cXC8pKHd3d1xcLil7MCwxfVthLXpBLVowLTlcXC5cXC1dKyhbOl0/WzAtOV17Miw1fXxcXC5bYS16QS1aXXsyLDV9W1xcLl17MCwxfSlcXC8rW14/IyY9XSskLyxcbiAgICBKU09OX0RBVEVfRk9STUFUOiAvXFxkezR9LVswLTFdXFxkLVswLTNdXFxkKFRbMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZC5cXGR7MSwzfVokKT8vLFxuICAgIERBVEFfVVJMOiAvXlxccypkYXRhOihbYS16XStcXC9bYS16MC05LSsuXSsoO1thLXotXSs9W2EtejAtOS1dKyk/KT8oO2Jhc2U2NCk/LChbYS16MC05ISQmJywoKSorOz1cXC0uX346QFxcLz8lXFxzXSopXFxzKiQvaSxcbiAgICBJU09fREFURV9GT1JNQVQ6IC8oXFxkezR9LVxcZHsyfS1cXGR7Mn0pVChcXGR7Mn06XFxkezJ9OlxcZHsyfSkoXFwuXFxkKyk/KFsrLV1cXGR7Mn06P1xcZHsyfXxaKSQvXG59LFxuICAgIGNvbXBhcmVCeVNlcGFyYXRvciA9ICc6JztcblxuY29uc3QgTlVNQkVSX1RZUEVTID0gWydpbnQnLCBEYXRhVHlwZS5JTlRFR0VSLCBEYXRhVHlwZS5GTE9BVCwgRGF0YVR5cGUuRE9VQkxFLCBEYXRhVHlwZS5MT05HLCBEYXRhVHlwZS5TSE9SVCwgRGF0YVR5cGUuQllURSwgRGF0YVR5cGUuQklHX0lOVEVHRVIsIERhdGFUeXBlLkJJR19ERUNJTUFMXTtcbmNvbnN0IG5vdzogRGF0ZSA9IG5ldyBEYXRlKCk7XG5jb25zdCBDVVJSRU5UX0RBVEUgPSAnQ1VSUkVOVF9EQVRFJztcblxuZXhwb3J0IGNvbnN0IGVudW0gRVZFTlRfTElGRSB7IE9OQ0UsIFdJTkRPVyB9XG5cbmV4cG9ydCBjb25zdCBpc0RlZmluZWQgPSB2ID0+ICd1bmRlZmluZWQnICE9PSB0eXBlb2YgdjtcblxuZXhwb3J0IGNvbnN0IGlzT2JqZWN0ID0gdiA9PiBudWxsICE9PSB2ICYmICdvYmplY3QnID09PSB0eXBlb2YgdjtcblxuZXhwb3J0IGNvbnN0IHRvQm9vbGVhbiA9ICh2YWwsIGlkZW50aXR5PykgPT4gKCh2YWwgJiYgdmFsICE9PSAnZmFsc2UnKSA/IHRydWUgOiAoaWRlbnRpdHkgPyB2YWwgPT09IGlkZW50aXR5IDogZmFsc2UpKTtcblxuZnVuY3Rpb24gaXNJRTExKCkge1xuICAgIHJldHVybiB3aW5kb3cubmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZignVHJpZGVudC8nKSA+IC0xO1xufVxuXG5leHBvcnQgY29uc3QgaXNJRSA9ICgpID0+IHtcbiAgICByZXR1cm4gaXNJRTExKCkgfHwgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignTVNJRScpID4gLTE7XG59O1xuXG5cbmV4cG9ydCBjb25zdCBpc0FuZHJvaWQgPSAoKSA9PiBSRUdFWC5BTkRST0lELnRlc3QodXNlckFnZW50KTtcblxuZXhwb3J0IGNvbnN0IGlzQW5kcm9pZFRhYmxldCA9ICgpID0+IFJFR0VYLkFORFJPSURfVEFCTEVULnRlc3QodXNlckFnZW50KSAmJiAhKCgvVGFibGV0IFBDIDIuMC9pKS50ZXN0KHVzZXJBZ2VudCkpO1xuXG5leHBvcnQgY29uc3QgaXNJcGhvbmUgPSAoKSA9PiBSRUdFWC5JUEhPTkUudGVzdCh1c2VyQWdlbnQpO1xuZXhwb3J0IGNvbnN0IGlzSXBvZCA9ICgpID0+IFJFR0VYLklQT0QudGVzdCh1c2VyQWdlbnQpO1xuZXhwb3J0IGNvbnN0IGlzSXBhZCA9ICgpID0+IHtcbiAgICByZXR1cm4gUkVHRVguSVBBRC50ZXN0KHVzZXJBZ2VudCkgfHwgKHdpbmRvdy5uYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgJiYgd2luZG93Lm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDIgJiYgKFJFR0VYLk1BQy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0pIHx8IFJFR0VYLk1BQ0lOVEVMLnRlc3Qod2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybSkpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0lvcyA9ICgpID0+IGlzSXBob25lKCkgfHwgaXNJcG9kKCkgfHwgaXNJcGFkKCk7XG5cbmV4cG9ydCBjb25zdCBpc0xhcmdlVGFibGV0TGFuZHNjYXBlID0gKGxhbmRTY2FwZVdpZHRoLCBsYW5kU2NhcGVIZWlnaHQpID0+IHtcbiAgICBjb25zdCB3aWR0aCA9IGxhbmRTY2FwZVdpZHRoIHx8ICcxMzY2cHgnO1xuICAgIGNvbnN0IGhlaWdodCA9IGxhbmRTY2FwZUhlaWdodCB8fCAnMTAyNHB4JztcbiAgICByZXR1cm4gd2luZG93Lm1hdGNoTWVkaWEoXCJvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGggOiBcIit3aWR0aCtcIikgYW5kIChtYXgtZGV2aWNlLXdpZHRoIDogXCIrd2lkdGgrXCIpIGFuZCAobWluLWRldmljZS1oZWlnaHQgOiBcIitoZWlnaHQrXCIpIGFuZCAobWF4LWRldmljZS1oZWlnaHQgOiBcIitoZWlnaHQrXCIpIGFuZCAobWluLXdpZHRoOiBcIit3aWR0aCtcIikgYW5kIChtYXgtd2lkdGg6IFwiK3dpZHRoK1wiKVwiKS5tYXRjaGVzO1xufVxuXG5leHBvcnQgY29uc3QgaXNMYXJnZVRhYmxldFBvcnRyYWl0ID0gKGxhbmRTY2FwZVdpZHRoLCBsYW5kU2NhcGVIZWlnaHQpID0+ICB7XG4gICAgY29uc3QgaGVpZ2h0ID0gbGFuZFNjYXBlV2lkdGggfHwgJzEzNjZweCc7XG4gICAgY29uc3Qgd2lkdGggPSBsYW5kU2NhcGVIZWlnaHQgfHwgJzEwMjRweCc7XG4gICAgcmV0dXJuIHdpbmRvdy5tYXRjaE1lZGlhKFwib25seSBzY3JlZW4gYW5kIChtaW4tZGV2aWNlLXdpZHRoIDogXCIrd2lkdGgrXCIpIGFuZCAobWF4LWRldmljZS13aWR0aCA6IFwiK3dpZHRoK1wiKSBhbmQgKG1pbi1kZXZpY2UtaGVpZ2h0IDogXCIraGVpZ2h0K1wiKSBhbmQgKG1heC1kZXZpY2UtaGVpZ2h0IDogXCIraGVpZ2h0K1wiKSBhbmQgKG1pbi13aWR0aDogXCIrd2lkdGgrXCIpIGFuZCAobWF4LXdpZHRoOiBcIit3aWR0aCtcIilcIikubWF0Y2hlcztcbn1cblxuZXhwb3J0IGNvbnN0IGlzTW9iaWxlID0gKCkgPT4gaXNBbmRyb2lkKCkgfHwgaXNJb3MoKSB8fCBpc0FuZHJvaWRUYWJsZXQoKSB8fCAkKCcjd20tbW9iaWxlLWRpc3BsYXk6dmlzaWJsZScpLmxlbmd0aCA+IDA7XG5cbmV4cG9ydCBjb25zdCBpc1RhYmxldCA9ICgpID0+IHtcbiAgICBjb25zdCBzY29wZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hcHAtcGFnZScpLndpZGdldDtcbiAgICByZXR1cm4gc2NvcGUgJiYgc2NvcGUudmlld1BhcmVudC5WaWV3cG9ydC5pc1RhYmxldFR5cGU7XG59O1xuXG5leHBvcnQgY29uc3QgaXNNb2JpbGVBcHAgPSAoKSA9PiBnZXRXbVByb2plY3RQcm9wZXJ0aWVzKCkucGxhdGZvcm1UeXBlID09PSAnTU9CSUxFJyAmJiBnZXRXbVByb2plY3RQcm9wZXJ0aWVzKCkudHlwZSA9PT0gJ0FQUExJQ0FUSU9OJztcblxuZXhwb3J0IGNvbnN0IGdldEFuZHJvaWRWZXJzaW9uID0gKCkgPT4ge1xuICAgIGNvbnN0IG1hdGNoID0gKHdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkpLm1hdGNoKC9hbmRyb2lkXFxzKFswLTlcXC5dKikvKTtcbiAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFsxXSA6ICcnO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzS2l0a2F0RGV2aWNlID0gKCkgPT4gaXNBbmRyb2lkKCkgJiYgcGFyc2VJbnQoZ2V0QW5kcm9pZFZlcnNpb24oKSwgMTApID09PSA0O1xuXG4vKipcbiAqIHRoaXMgbWV0aG9kIGVuY29kZXMgdGhlIHVybCBhbmQgcmV0dXJucyB0aGUgZW5jb2RlZCBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IGVuY29kZVVybCA9ICh1cmw6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgY29uc3QgaW5kZXggPSB1cmwuaW5kZXhPZignPycpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIC8vIGVuY29kZSB0aGUgcmVsYXRpdmUgcGF0aFxuICAgICAgICB1cmwgPSBlbmNvZGVVUkkodXJsLnN1YnN0cmluZygwLCBpbmRleCkpICsgdXJsLnN1YnN0cmluZyhpbmRleCk7XG4gICAgICAgIC8vIGVuY29kZSB1cmwgcGFyYW1zLCBub3QgZW5jb2RlZCB0aHJvdWdoIGVuY29kZVVSSVxuICAgICAgICB1cmwgPSBlbmNvZGVVcmxQYXJhbXModXJsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB1cmwgPSBlbmNvZGVVUkkodXJsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsO1xufTtcblxuLyoqXG4gKiB0aGlzIG1ldGhvZCBlbmNvZGVzIHRoZSB1cmwgcGFyYW1zIGFuZCBpcyBwcml2YXRlIHRvIHRoZSBjbGFzcyBvbmx5XG4gKi9cbmV4cG9ydCBjb25zdCBlbmNvZGVVcmxQYXJhbXMgPSAodXJsOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgIGxldCBxdWVyeVBhcmFtcywgZW5jb2RlZFBhcmFtcyA9ICcnLCBxdWVyeVBhcmFtc1N0cmluZywgaW5kZXg7XG4gICAgaW5kZXggPSB1cmwuaW5kZXhPZignPycpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgIGluZGV4ICs9IDE7XG4gICAgICAgIHF1ZXJ5UGFyYW1zU3RyaW5nID0gdXJsLnN1YnN0cmluZyhpbmRleCk7XG4gICAgICAgIC8vIEVuY29kaW5nIHRoZSBxdWVyeSBwYXJhbXMgaWYgZXhpc3RcbiAgICAgICAgaWYgKHF1ZXJ5UGFyYW1zU3RyaW5nKSB7XG4gICAgICAgICAgICBxdWVyeVBhcmFtcyA9IHF1ZXJ5UGFyYW1zU3RyaW5nLnNwbGl0KCcmJyk7XG4gICAgICAgICAgICBxdWVyeVBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgICAgICAgICAgIGxldCBkZWNvZGVkUGFyYW1WYWx1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBpID0gXy5pbmNsdWRlcyhwYXJhbSwgJz0nKSA/IHBhcmFtLmluZGV4T2YoJz0nKSA6IChwYXJhbSAmJiBwYXJhbS5sZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWUgPSBwYXJhbS5zdWJzdHIoMCwgaSksXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtVmFsdWUgPSBwYXJhbS5zdWJzdHIoaSArIDEpO1xuXG4gICAgICAgICAgICAgICAgLy8gYWRkIHRoZSA9IGZvciBwYXJhbSBuYW1lIG9ubHkgd2hlbiB0aGUgcGFyYW0gdmFsdWUgZXhpc3RzIGluIHRoZSBnaXZlbiBwYXJhbSBvciBlbXB0eSB2YWx1ZSBpcyBhc3NpZ25lZFxuICAgICAgICAgICAgICAgIGlmIChwYXJhbVZhbHVlIHx8IF8uaW5jbHVkZXMocGFyYW0sICc9JykpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlY29kZWRQYXJhbVZhbHVlID0gZGVjb2RlVVJJQ29tcG9uZW50KHBhcmFtVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkUGFyYW1WYWx1ZSA9IHBhcmFtVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZFBhcmFtcyArPSBwYXJhbU5hbWUgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQoZGVjb2RlZFBhcmFtVmFsdWUpICsgJyYnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRQYXJhbXMgKz0gcGFyYW1OYW1lICsgJyYnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZW5jb2RlZFBhcmFtcyA9IGVuY29kZWRQYXJhbXMuc2xpY2UoMCwgLTEpO1xuICAgICAgICAgICAgdXJsID0gdXJsLnJlcGxhY2UocXVlcnlQYXJhbXNTdHJpbmcsIGVuY29kZWRQYXJhbXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB1cmw7XG59O1xuXG4vKiBjYXBpdGFsaXplIHRoZSBmaXJzdC1sZXR0ZXIgb2YgdGhlIHN0cmluZyBwYXNzZWQgKi9cbmV4cG9ydCBjb25zdCBpbml0Q2FwcyA9IG5hbWUgPT4ge1xuICAgIGlmICghbmFtZSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zdWJzdHJpbmcoMSk7XG59O1xuXG4vKiBjb252ZXJ0IGNhbWVsQ2FzZSBzdHJpbmcgdG8gYSBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nICovXG5leHBvcnQgY29uc3Qgc3BhY2VTZXBhcmF0ZSA9IG5hbWUgPT4ge1xuICAgIGlmIChuYW1lID09PSBuYW1lLnRvVXBwZXJDYXNlKCkpIHtcbiAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuICAgIHJldHVybiBuYW1lLnJlcGxhY2UoUkVHRVguU05BS0VfQ0FTRSwgZnVuY3Rpb24gKGxldHRlciwgcG9zKSB7XG4gICAgICAgIHJldHVybiAocG9zID8gJyAnIDogJycpICsgbGV0dGVyO1xuICAgIH0pO1xufTtcblxuLypSZXBsYWNlIHRoZSBjaGFyYWN0ZXIgYXQgYSBwYXJ0aWN1bGFyIGluZGV4Ki9cbmV4cG9ydCBjb25zdCByZXBsYWNlQXQgPSAoc3RyaW5nLCBpbmRleCwgY2hhcmFjdGVyKSA9PiBzdHJpbmcuc3Vic3RyKDAsIGluZGV4KSArIGNoYXJhY3RlciArIHN0cmluZy5zdWJzdHIoaW5kZXggKyBjaGFyYWN0ZXIubGVuZ3RoKTtcblxuLypSZXBsYWNlICcuJyB3aXRoIHNwYWNlIGFuZCBjYXBpdGFsaXplIHRoZSBuZXh0IGxldHRlciovXG5leHBvcnQgY29uc3QgcGVyaW9kU2VwYXJhdGUgPSBuYW1lID0+IHtcbiAgICBsZXQgZG90SW5kZXg7XG4gICAgZG90SW5kZXggPSBuYW1lLmluZGV4T2YoJy4nKTtcbiAgICBpZiAoZG90SW5kZXggIT09IC0xKSB7XG4gICAgICAgIG5hbWUgPSByZXBsYWNlQXQobmFtZSwgZG90SW5kZXggKyAxLCBuYW1lLmNoYXJBdChkb3RJbmRleCArIDEpLnRvVXBwZXJDYXNlKCkpO1xuICAgICAgICBuYW1lID0gcmVwbGFjZUF0KG5hbWUsIGRvdEluZGV4LCAnICcpO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZTtcbn07XG5cbmV4cG9ydCBjb25zdCBwcmV0dGlmeUxhYmVsID0gbGFiZWwgPT4ge1xuICAgIGxhYmVsID0gXy5jYW1lbENhc2UobGFiZWwpO1xuICAgIC8qY2FwaXRhbGl6ZSB0aGUgaW5pdGlhbCBMZXR0ZXIqL1xuICAgIGxhYmVsID0gaW5pdENhcHMobGFiZWwpO1xuICAgIC8qQ29udmVydCBjYW1lbCBjYXNlIHdvcmRzIHRvIHNlcGFyYXRlZCB3b3JkcyovXG4gICAgbGFiZWwgPSBzcGFjZVNlcGFyYXRlKGxhYmVsKTtcbiAgICAvKlJlcGxhY2UgJy4nIHdpdGggc3BhY2UgYW5kIGNhcGl0YWxpemUgdGhlIG5leHQgbGV0dGVyKi9cbiAgICBsYWJlbCA9IHBlcmlvZFNlcGFyYXRlKGxhYmVsKTtcbiAgICByZXR1cm4gbGFiZWw7XG59O1xuXG5leHBvcnQgY29uc3QgZGVIeXBoZW5hdGUgPSAobmFtZSkgPT4ge1xuICAgIHJldHVybiBuYW1lLnNwbGl0KCctJykuam9pbignICcpO1xufTtcblxuLypBY2NlcHRzIGFuIGFycmF5IG9yIGEgc3RyaW5nIHNlcGFyYXRlZCB3aXRoIHN5bWJvbCBhbmQgcmV0dXJucyBwcmV0dGlmaWVkIHJlc3VsdCovXG5leHBvcnQgY29uc3QgcHJldHRpZnlMYWJlbHMgPSAobmFtZXMsIHNlcGFyYXRvciA9ICcsJykgPT4ge1xuICAgIGxldCBtb2RpZmllZE5hbWVzLCBuYW1lc0FycmF5ID0gW107XG5cbiAgICBpZiAoIV8uaXNBcnJheShuYW1lcykpIHtcbiAgICAgICAgbmFtZXNBcnJheSA9IF8uc3BsaXQobmFtZXMsIHNlcGFyYXRvcik7XG4gICAgfVxuXG4gICAgbW9kaWZpZWROYW1lcyA9IF8ubWFwKG5hbWVzQXJyYXksIHByZXR0aWZ5TGFiZWwpO1xuICAgIGlmIChfLmlzQXJyYXkobmFtZXMpKSB7XG4gICAgICAgIHJldHVybiBtb2RpZmllZE5hbWVzO1xuICAgIH1cbiAgICByZXR1cm4gbW9kaWZpZWROYW1lcy5qb2luKHNlcGFyYXRvcik7XG59O1xuXG4vKipcbiAqIHRoaXMgbWV0aG9kIGNoZWNrcyBpZiBhIGluc2VjdXJlIGNvbnRlbnQgcmVxdWVzdCBpcyBiZWluZyBtYWRlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0luc2VjdXJlQ29udGVudFJlcXVlc3QgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+IHtcblxuICAgIGNvbnN0IHBhcnNlcjogSFRNTEFuY2hvckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgcGFyc2VyLmhyZWYgPSB1cmw7XG5cbiAgICAvLyBmb3IgcmVsYXRpdmUgdXJscyBJRSByZXR1cm5zIHRoZSBwcm90b2NvbCBhcyBlbXB0eSBzdHJpbmdcbiAgICBpZiAocGFyc2VyLnByb3RvY29sID09PSAnJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGlucHV0dGVkIHNvdXJjZSBpcyBhIGJhc2U2NCB1cmwsIGRvIG5vdCB0aHJvdyBpbnNlY3VyZSBjb250ZW50IGVycm9yXG4gICAgaWYgKFJFR0VYLkRBVEFfVVJMLnRlc3QodXJsKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHN0cmluZ1N0YXJ0c1dpdGgobG9jYXRpb24uaHJlZiwgJ2h0dHBzOi8vJykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5wcm90b2NvbCAhPT0gJ2h0dHBzOicgJiYgcGFyc2VyLnByb3RvY29sICE9PSAnd3NzOic7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiB0aGlzIG1ldGhvZCBjaGVja3MgaWYgYSBnaXZlbiBzdHJpbmcgc3RhcnRzIHdpdGggdGhlIGdpdmVuIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3Qgc3RyaW5nU3RhcnRzV2l0aCA9IChzdHI6IHN0cmluZywgc3RhcnRzV2l0aDogc3RyaW5nLCBpZ25vcmVDYXNlPyk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICghc3RyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCByZWdFeCA9IG5ldyBSZWdFeHAoJ14nICsgc3RhcnRzV2l0aCwgaWdub3JlQ2FzZSA/ICdpJyA6ICcnKTtcblxuICAgIHJldHVybiByZWdFeC50ZXN0KHN0cik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXZhbHVhdGVkRXhwclZhbHVlID0gKG9iamVjdCwgZXhwcmVzc2lvbikgPT4ge1xuICAgIGxldCB2YWw7XG4gICAgLyoqXG4gICAgICogRXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gd2l0aCB0aGUgc2NvcGUgYW5kIG9iamVjdC5cbiAgICAgKiAkZXZhbCBpcyB1c2VkLCBhcyBleHByZXNzaW9uIGNhbiBiZSBpbiBmb3JtYXQgb2YgZmllbGQxICsgJyAnICsgZmllbGQyXG4gICAgICogJGV2YWwgY2FuIGZhaWwsIGlmIGV4cHJlc3Npb24gaXMgbm90IGluIGNvcnJlY3QgZm9ybWF0LCBzbyBhdHRlbXB0IHRoZSBldmFsIGZ1bmN0aW9uXG4gICAgICovXG4gICAgdmFsID0gXy5hdHRlbXB0KGZ1bmN0aW9uICgpIHtcblxuICAgICAgICBjb25zdCBhcmdzRXhwciA9IE9iamVjdC5rZXlzKG9iamVjdCkubWFwKChmaWVsZE5hbWUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBgdmFyICR7ZmllbGROYW1lfSA9IGRhdGFbJyR7ZmllbGROYW1lfSddO2A7XG4gICAgICAgIH0pLmpvaW4oJyAnKTtcbiAgICAgICAgY29uc3QgZiA9IG5ldyBGdW5jdGlvbignZGF0YScsIGAke2FyZ3NFeHByfSByZXR1cm4gICR7ZXhwcmVzc2lvbn1gKTtcbiAgICAgICAgcmV0dXJuIGYob2JqZWN0KTtcbiAgICB9KTtcbiAgICAvKipcbiAgICAgKiAkZXZhbCBmYWlscyBpZiBmaWVsZCBleHByZXNzaW9uIGhhcyBzcGFjZXMuIEV4OiAnZmllbGQgbmFtZScgb3IgJ2ZpZWxkQG5hbWUnXG4gICAgICogQXMgYSBmYWxsYmFjaywgZ2V0IHZhbHVlIGRpcmVjdGx5IGZyb20gb2JqZWN0IG9yIHNjb3BlXG4gICAgICovXG4gICAgaWYgKF8uaXNFcnJvcih2YWwpKSB7XG4gICAgICAgIHZhbCA9IF8uZ2V0KG9iamVjdCwgZXhwcmVzc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59O1xuXG4vKiBmdW5jdGlvbnMgZm9yIHJlc291cmNlIFRhYiovXG5leHBvcnQgY29uc3QgaXNJbWFnZUZpbGUgPSAoZmlsZU5hbWUpID0+IHtcbiAgICByZXR1cm4gKFJFR0VYLlNVUFBPUlRFRF9JTUFHRV9GT1JNQVQpLnRlc3QoZmlsZU5hbWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQXVkaW9GaWxlID0gKGZpbGVOYW1lKSA9PiB7XG4gICAgcmV0dXJuIChSRUdFWC5TVVBQT1JURURfQVVESU9fRk9STUFUKS50ZXN0KGZpbGVOYW1lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1ZpZGVvRmlsZSA9IChmaWxlTmFtZSkgPT4ge1xuICAgIHJldHVybiAoUkVHRVguU1VQUE9SVEVEX1ZJREVPX0ZPUk1BVCkudGVzdChmaWxlTmFtZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNWYWxpZFdlYlVSTCA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiAoUkVHRVguVkFMSURfV0VCX1VSTCkudGVzdCh1cmwpO1xufTtcblxuLypUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHVybCB0byB0aGUgcmVzb3VyY2UgYWZ0ZXIgY2hlY2tpbmcgdGhlIHZhbGlkaXR5IG9mIHVybCovXG5leHBvcnQgY29uc3QgZ2V0UmVzb3VyY2VVUkwgPSAodXJsU3RyaW5nKSA9PiB7XG4gICAgaWYgKGlzVmFsaWRXZWJVUkwodXJsU3RyaW5nKSkge1xuICAgICAgICAvKlRPRE86IFVzZSBEb21TYW5pdGl6ZXIqL1xuICAgICAgICAvLyByZXR1cm4gc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh1cmxTdHJpbmcpO1xuICAgIH1cbiAgICByZXR1cm4gdXJsU3RyaW5nO1xufTtcblxuLypmdW5jdGlvbiB0byBjaGVjayBpZiBmbiBpcyBhIGZ1bmN0aW9uIGFuZCB0aGVuIGV4ZWN1dGUqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaWdnZXJGbihmbiwgLi4uYXJnbW50cykge1xuICAgIC8qIFVzZSBvZiBzbGljZSBvbiBhcmd1bWVudHMgd2lsbCBtYWtlIHRoaXMgZnVuY3Rpb24gbm90IG9wdGltaXphYmxlXG4gICAgKiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMzItbGVha2luZy1hcmd1bWVudHNcbiAgICAqICovXG5cbiAgICBsZXQgc3RhcnQgPSAxO1xuICAgIGNvbnN0IGxlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gc3RhcnQpO1xuICAgIGZvciAoc3RhcnQ7IHN0YXJ0IDwgbGVuOyBzdGFydCsrKSB7XG4gICAgICAgIGFyZ3Nbc3RhcnQgLSAxXSA9IGFyZ3VtZW50c1tzdGFydF07XG4gICAgfVxuXG4gICAgaWYgKF8uaXNGdW5jdGlvbihmbikpIHtcbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGdldCB0aGUgZm9ybWF0dGVkIGRhdGVcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEZvcm1hdHRlZERhdGUgPSAoZGF0ZVBpcGUsIGRhdGVPYmosIGZvcm1hdCwgdGltZVpvbmU/LCBpc1RpbWVTdGFtcFR5cGU/LCBpc0ludGVydmFsRGF0ZVRpbWU/LCBjb21wSW5zdGFuY2U/KTogYW55ID0+IHtcbiAgICBpZiAoIWRhdGVPYmopIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKGZvcm1hdCA9PT0gJ3RpbWVzdGFtcCcpIHtcbiAgICAgICAgcmV0dXJuIG1vbWVudChkYXRlT2JqKS52YWx1ZU9mKCk7XG4gICAgfVxuXG4gICAgaWYgKGZvcm1hdCA9PT0gJ1VUQycpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGVPYmopLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKHRpbWVab25lKSB7XG4gICAgICAgIGNvbnN0IG1vbWVudEZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlQWxsKCd5JywgJ1knKS5yZXBsYWNlQWxsKCdkJywgJ0QnKS5yZXBsYWNlKCdhJywgJ0EnKTtcbiAgICAgICAgaWYgKGlzSW50ZXJ2YWxEYXRlVGltZSApIHsgLy8gZGF0ZXMgd2hpY2ggYXJlIG9mIHR5cGUgdGltZSB3aWRnZXQgKHZhbHVlIGlzIGhoOm1tOnNzKSBidXQgcmV0dXJuZWQgYXMgZGF0ZSBzdHJpbmcgZnJvbSB0aW1lIGNvbXBcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQoZGF0ZU9iaikuZm9ybWF0KG1vbWVudEZvcm1hdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzVGltZVN0YW1wVHlwZSA9PT0gJ2RhdGV0aW1lc3RhbXAnKSB7XG4gICAgICAgICAgICBkYXRlT2JqID0gZ2V0TW9tZW50TG9jYWxlT2JqZWN0KHRpbWVab25lLCBkYXRlT2JqKTtcbiAgICAgICAgICAgIHJldHVybiBtb21lbnQoZGF0ZU9iaikuZm9ybWF0KG1vbWVudEZvcm1hdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGVPYmosIGZvcm1hdCwgdGltZVpvbmUsIGNvbXBJbnN0YW5jZSk7XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gY2hlY2sgaWYgdGhlIGRhdGUgaGFzIHRpbWV6b25lIGluZm9ybWF0aW9uIG9yIG5vdFxuICovXG5leHBvcnQgY29uc3QgaGFzT2Zmc2V0U3RyID0gKGRhdGVTdHIpID0+IHtcbiAgICBpZiAodHlwZW9mIGRhdGVTdHIgIT09ICdzdHJpbmcnKSByZXR1cm47XG4gICAgY29uc3QgbWF0Y2hlcyA9IGRhdGVTdHIubWF0Y2goUkVHRVguSVNPX0RBVEVfRk9STUFUKTtcbiAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzWzRdKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuLyoqXG4gKiBtZXRob2QgdG8gZ2V0IHRoZSBkYXRlIG9iamVjdCBmcm9tIHRoZSBpbnB1dCByZWNlaXZlZFxuICovXG5leHBvcnQgY29uc3QgZ2V0RGF0ZU9iaiA9ICh2YWx1ZSwgb3B0aW9ucz8sIHRpbWV6b25lPyk6IERhdGUgPT4ge1xuICAgIC8vIEhhbmRsaW5nIGxvY2FsaXphdGlvblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucGF0dGVybiAmJiBvcHRpb25zLnBhdHRlcm4gIT09ICd0aW1lc3RhbXAnKSB7XG4gICAgICAgIC8vIEZpeCBmb3IgV01TLTE5NjAxLCBpbnZhbGlkIGRhdGUgaXMgcmV0dXJuZWQgb24gZGF0ZSBzZWxlY3Rpb24uXG4gICAgICAgIGNvbnN0IGlzTmF0aXZlUGlja2VyID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnaXNOYXRpdmVQaWNrZXInKSkgPyBfLmdldChvcHRpb25zLCAnaXNOYXRpdmVQaWNrZXInKSA6IGlzTW9iaWxlKCk7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSAgaXNOYXRpdmVQaWNrZXIgPyAnWVlZWS9NTS9ERCBISDptbTpzcycgOiBtb21lbnRQYXR0ZXJuKG9wdGlvbnMucGF0dGVybik7XG4gICAgICAgIHZhbHVlID0gbW9tZW50KHZhbHVlLCBwYXR0ZXJuKS50b0RhdGUoKTtcbiAgICB9XG5cbiAgICAvKmlmIHRoZSB2YWx1ZSBpcyBhIGRhdGUgb2JqZWN0LCBubyBuZWVkIHRvIGNvdmVydCBpdCovXG4gICAgaWYgKF8uaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyppZiB0aGUgdmFsdWUgaXMgYSB0aW1lc3RhbXAgc3RyaW5nLCBjb252ZXJ0IGl0IHRvIGEgbnVtYmVyKi9cbiAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgfVxuXG4gICAgaWYgKCFtb21lbnQodmFsdWUpLmlzVmFsaWQoKSB8fCB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBsZXQgZGF0ZU9iaiA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAvKipcbiAgICAgKiBpZiBkYXRlIHZhbHVlIGlzIHN0cmluZyBcIjIwLTA1LTIwMTlcIiB0aGVuIG5ldyBEYXRlKHZhbHVlKSByZXR1cm4gMjBNYXkyMDE5IHdpdGggY3VycmVudCB0aW1lIGluIEluZGlhLFxuICAgICAqIHdoZXJlYXMgdGhpcyB3aWxsIHJldHVybiAxOU1heTIwMTkgd2l0aCB0aW1lIGxhZ2dpbmcgZm9yIGZldyBob3Vycy5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaXQgcmV0dXJucyBVVEMgdGltZSBpLmUuIENvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lIChVVEMpLlxuICAgICAqIFRvIGNyZWF0ZSBkYXRlIGluIGxvY2FsIHRpbWUgdXNlIG1vbWVudFxuICAgICAqL1xuICAgIGlmIChfLmlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgICAvKlxuICAgICAgICAgKiBJZiBzZWxlY3RlZCBsb2NhbGUgaXMgQXJhYmljLCBtb21lbnQodmFsdWUpLmZvcm1hdCgpIGlzIGdpdmluZyBkYXRlIGluIEFyYWJpYyBsYW5ndWFnZVxuICAgICAgICAgKiAoRXg6IElmIGRhdGUgdmFsdWUgaXMgXCIxOTkwLTExLTIzXCIgYW5kIG1vbWVudCh2YWx1ZSkuZm9ybWF0KCkgaXMgXCLZodmp2anZoC3ZodmhLdmi2aNU2aDZoDrZoNmgOtmg2aAr2aDZpTrZo9mgXCIpXG4gICAgICAgICAqIGFuZCBuZXcgRGF0ZShtb21lbnQodmFsdWUpLmZvcm1hdCgpKSBpcyBnaXZpbmcgSW52YWxpZCBEYXRlLiBTbyBmcnN0IGNvbnZlcnRpbmcgaXQgdG8gdGltZXN0YW1wIHZhbHVlLlxuICAgICAgICAqL1xuXG4gICAgICAgIGRhdGVPYmogPSAhdGltZXpvbmUgPyBuZXcgRGF0ZShtb21lbnQobW9tZW50KHZhbHVlKS5mb3JtYXQoKSkudmFsdWVPZigpKSA6IGdldE1vbWVudExvY2FsZU9iamVjdCh0aW1lem9uZSwgdmFsdWUpOztcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPT09IENVUlJFTlRfREFURSB8fCBpc05hTihkYXRlT2JqLmdldERheSgpKSkge1xuICAgICAgICByZXR1cm4gbm93O1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZU9iajtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRFdmVudExpc3RlbmVyT25FbGVtZW50ID0gKF9lbGVtZW50OiBFbGVtZW50LCBleGNsdWRlRWxlbWVudDogRWxlbWVudCwgbmF0aXZlRWxlbWVudDogRWxlbWVudCwgZXZlbnRUeXBlLCBpc0Ryb3BEb3duRGlzcGxheUVuYWJsZWRPbklucHV0LCBzdWNjZXNzQ0IsIGxpZmU6IEVWRU5UX0xJRkUsIGlzQ2FwdHVyZSA9IGZhbHNlKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudDogRWxlbWVudCA9IF9lbGVtZW50O1xuICAgIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV4Y2x1ZGVFbGVtZW50ICYmIChleGNsdWRlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpIHx8IGV4Y2x1ZGVFbGVtZW50ID09PSBldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgaWYgKCQoZXZlbnQudGFyZ2V0KS5pcygnaW5wdXQnKSAmJiAhaXNEcm9wRG93bkRpc3BsYXlFbmFibGVkT25JbnB1dCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGV2ZW50TGlzdGVuZXIsIGlzQ2FwdHVyZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpZmUgPT09IEVWRU5UX0xJRkUuT05DRSkge1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lciwgaXNDYXB0dXJlKTtcbiAgICAgICAgfVxuICAgICAgICBzdWNjZXNzQ0IoKTtcbiAgICB9O1xuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGV2ZW50TGlzdGVuZXIsIGlzQ2FwdHVyZSk7XG4gICAgY29uc3QgcmVtb3ZlRXZlbnRMaXN0ZW5lciA9ICgpID0+IHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZXZlbnRMaXN0ZW5lciwgaXNDYXB0dXJlKTtcbiAgICB9O1xuICAgIHJldHVybiByZW1vdmVFdmVudExpc3RlbmVyO1xufTtcblxuLyoqXG4gKiBSZXR1cm5zIGEgZGVlcCBjbG9uZWQgcmVwbGljYSBvZiB0aGUgcGFzc2VkIG9iamVjdC9hcnJheVxuICogQHBhcmFtIG9iamVjdCBvYmplY3QvYXJyYXkgdG8gY2xvbmVcbiAqIEByZXR1cm5zIGEgY2xvbmUgb2YgdGhlIHBhc3NlZCBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldENsb25lZE9iamVjdCA9IChvYmplY3QpID0+IHtcbiAgICByZXR1cm4gXy5jbG9uZURlZXAob2JqZWN0KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGaWxlcyA9IChmb3JtTmFtZSwgZmllbGROYW1lLCBpc0xpc3QpID0+IHtcbiAgICBjb25zdCBmaWxlcyA9IF8uZ2V0KGRvY3VtZW50LmZvcm1zLCBbZm9ybU5hbWUsIGZpZWxkTmFtZSwgJ2ZpbGVzJ10pO1xuICAgIHJldHVybiBpc0xpc3QgPyBfLm1hcChmaWxlcywgXy5pZGVudGl0eSkgOiBmaWxlcyAmJiBmaWxlc1swXTtcbn07XG5cbi8qRnVuY3Rpb24gdG8gZ2VuZXJhdGUgYSByYW5kb20gbnVtYmVyKi9cbmZ1bmN0aW9uIHJhbmRvbSgpIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcigoMSArIE1hdGgucmFuZG9tKCkpICogMHgxMDAwMCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKTtcbn1cblxuLypGdW5jdGlvbiB0byBnZW5lcmF0ZSBhIGd1aWQgYmFzZWQgb24gcmFuZG9tIG51bWJlcnMuKi9cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUdVSWQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHJhbmRvbSgpICsgJy0nICsgcmFuZG9tKCkgKyAnLScgKyByYW5kb20oKTtcbn07XG5cbi8qKlxuICogVmFsaWRhdGUgaWYgZ2l2ZW4gYWNjZXNzIHJvbGUgaXMgaW4gY3VycmVudCBsb2dnZWRpbiB1c2VyIGFjY2VzcyByb2xlc1xuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVBY2Nlc3NSb2xlcyA9IChyb2xlRXhwLCBsb2dnZWRJblVzZXIpID0+IHtcbiAgICBsZXQgcm9sZXM7XG5cbiAgICBpZiAocm9sZUV4cCAmJiBsb2dnZWRJblVzZXIpIHtcblxuICAgICAgICByb2xlcyA9IHJvbGVFeHAgJiYgcm9sZUV4cC5zcGxpdCgnLCcpLm1hcChGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCwgU3RyaW5nLnByb3RvdHlwZS50cmltKTtcblxuICAgICAgICByZXR1cm4gXy5pbnRlcnNlY3Rpb24ocm9sZXMsIGxvZ2dlZEluVXNlci51c2VyUm9sZXMpLmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWYWxpZEpTT04gPSAoY29udGVudCkgPT4ge1xuICAgIGlmICghY29udGVudCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXJzZWRJbnRWYWx1ZSA9IHBhcnNlSW50KGNvbnRlbnQsIDEwKTtcbiAgICAgICAgLypvYnRhaW5pbmcganNvbiBmcm9tIGVkaXRvciBjb250ZW50IHN0cmluZyovXG4gICAgICAgIHJldHVybiBpc09iamVjdChjb250ZW50KSB8fCAhaXNOYU4ocGFyc2VkSW50VmFsdWUpID8gY29udGVudCA6IEpTT04ucGFyc2UoY29udGVudCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKnRlcm1pbmF0aW5nIGV4ZWN1dGlvbiBpZiBuZXcgdmFyaWFibGUgb2JqZWN0IGlzIG5vdCB2YWxpZCBqc29uLiovXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHhtbFRvSnNvbiA9ICh4bWxTdHJpbmcpID0+IHtcbiAgICBjb25zdCB4MmpzT2JqID0gbmV3IFgySlMoeyAnZW1wdHlOb2RlRm9ybSc6ICdjb250ZW50JywgJ2F0dHJpYnV0ZVByZWZpeCc6ICcnLCAnZW5hYmxlVG9TdHJpbmdGdW5jJzogZmFsc2UgfSk7XG4gICAgbGV0IGpzb24gPSB4MmpzT2JqLnhtbDJqcyh4bWxTdHJpbmcpO1xuICAgIGlmIChqc29uKSB7XG4gICAgICAgIGpzb24gPSBfLmdldChqc29uLCBPYmplY3Qua2V5cyhqc29uKVswXSk7XG4gICAgfVxuICAgIHJldHVybiBqc29uO1xufTtcblxuLypcbiAqIFV0aWwgbWV0aG9kIHRvIGZpbmQgdGhlIHZhbHVlIG9mIGEga2V5IGluIHRoZSBvYmplY3RcbiAqIGlmIGtleSBub3QgZm91bmQgYW5kIGNyZWF0ZSBpcyB0cnVlLCBhbiBvYmplY3QgaXMgY3JlYXRlZCBhZ2FpbnN0IHRoYXQgbm9kZVxuICogRXhhbXBsZXM6XG4gKiB2YXIgYSA9IHtcbiAqICBiOiB7XG4gKiAgICAgIGMgOiB7XG4gKiAgICAgICAgICBkOiAndGVzdCdcbiAqICAgICAgfVxuICogIH1cbiAqIH1cbiAqIFV0aWxzLmZpbmRWYWx1ZShhLCAnYi5jLmQnKSAtLT4gJ3Rlc3QnXG4gKiBVdGlscy5maW5kVmFsdWUoYSwgJ2IuYycpIC0tPiB7ZDogJ3Rlc3QnfVxuICogVXRpbHMuZmluZFZhbHVlKGEsICdlJykgLS0+IHVuZGVmaW5lZFxuICogVXRpbHMuZmluZFZhbHVlKGEsICdlJywgdHJ1ZSkgLS0+IHt9IGFuZCBhIHdpbGwgYmVjb21lOlxuICoge1xuICogICBiOiB7XG4gKiAgICAgIGMgOiB7XG4gKiAgICAgICAgICBkOiAndGVzdCdcbiAqICAgICAgfVxuICogIH0sXG4gKiAgZToge1xuICogIH1cbiAqIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGZpbmRWYWx1ZU9mID0gKG9iaiwga2V5LCBjcmVhdGU/KSA9PiB7XG5cbiAgICBpZiAoIW9iaiB8fCAha2V5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWNyZWF0ZSkge1xuICAgICAgICByZXR1cm4gXy5nZXQob2JqLCBrZXkpO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnRzID0ga2V5LnNwbGl0KCcuJyksXG4gICAgICAgIGtleXMgPSBbXTtcblxuICAgIGxldCBza2lwUHJvY2Vzc2luZztcblxuICAgIHBhcnRzLmZvckVhY2goKHBhcnQpID0+IHtcbiAgICAgICAgaWYgKCFwYXJ0cy5sZW5ndGgpIHsgLy8gaWYgdGhlIHBhcnQgb2YgYSBrZXkgaXMgbm90IHZhbGlkLCBza2lwIHRoZSBwcm9jZXNzaW5nLlxuICAgICAgICAgICAgc2tpcFByb2Nlc3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3ViUGFydHMgPSBwYXJ0Lm1hdGNoKC9cXHcrL2cpO1xuICAgICAgICBsZXQgc3ViUGFydDtcblxuICAgICAgICB3aGlsZSAoc3ViUGFydHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzdWJQYXJ0ID0gc3ViUGFydHMuc2hpZnQoKTtcbiAgICAgICAgICAgIGtleXMucHVzaCh7ICdrZXknOiBzdWJQYXJ0LCAndmFsdWUnOiBzdWJQYXJ0cy5sZW5ndGggPyBbXSA6IHt9IH0pOyAvLyBkZXRlcm1pbmUgd2hldGhlciB0byBjcmVhdGUgYW4gYXJyYXkgb3IgYW4gb2JqZWN0XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChza2lwUHJvY2Vzc2luZykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGtleXMuZm9yRWFjaCgoX2tleSkgPT4ge1xuICAgICAgICBsZXQgdGVtcE9iaiA9IG9ialtfa2V5LmtleV07XG4gICAgICAgIGlmICghaXNPYmplY3QodGVtcE9iaikpIHtcbiAgICAgICAgICAgIHRlbXBPYmogPSBnZXRWYWxpZEpTT04odGVtcE9iaik7XG4gICAgICAgICAgICBpZiAoIXRlbXBPYmopIHtcbiAgICAgICAgICAgICAgICB0ZW1wT2JqID0gX2tleS52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvYmpbX2tleS5rZXldID0gdGVtcE9iajtcbiAgICAgICAgb2JqID0gdGVtcE9iajtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG59O1xuXG4vKlxuKiBleHRyYWN0cyBhbmQgcmV0dXJucyB0aGUgbGFzdCBiaXQgZnJvbSBmdWxsIHR5cGVSZWYgb2YgYSBmaWVsZFxuKiBlLmcuIHJldHVybnMgJ1N0cmluZycgZm9yIHR5cGVSZWYgPSAnamF2YS5sYW5nLlN0cmluZydcbiogQHBhcmFtczoge3R5cGVSZWZ9IHR5cGUgcmVmZXJlbmNlXG4qL1xuZXhwb3J0IGNvbnN0IGV4dHJhY3RUeXBlID0gKHR5cGVSZWY6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgbGV0IHR5cGU7XG4gICAgaWYgKCF0eXBlUmVmKSB7XG4gICAgICAgIHJldHVybiBEYXRhVHlwZS5TVFJJTkc7XG4gICAgfVxuICAgIHR5cGUgPSB0eXBlUmVmICYmIHR5cGVSZWYuc3Vic3RyaW5nKHR5cGVSZWYubGFzdEluZGV4T2YoJy4nKSArIDEpO1xuICAgIHR5cGUgPSB0eXBlICYmIHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICB0eXBlID0gdHlwZSA9PT0gRGF0YVR5cGUuTE9DQUxEQVRFVElNRSA/IERhdGFUeXBlLkRBVEVUSU1FIDogdHlwZTtcbiAgICByZXR1cm4gdHlwZTtcbn07XG5cbi8qIHJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvdmlkZWQgZGF0YSB0eXBlIG1hdGNoZXMgbnVtYmVyIHR5cGUgKi9cbmV4cG9ydCBjb25zdCBpc051bWJlclR5cGUgPSAodHlwZTogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgcmV0dXJuIChOVU1CRVJfVFlQRVMuaW5kZXhPZihleHRyYWN0VHlwZSh0eXBlKS50b0xvd2VyQ2FzZSgpKSAhPT0gLTEpO1xufTtcblxuLyogZnVuY3Rpb24gdG8gY2hlY2sgaWYgcHJvdmlkZWQgb2JqZWN0IGlzIGVtcHR5Ki9cbmV4cG9ydCBjb25zdCBpc0VtcHR5T2JqZWN0ID0gKG9iajogYW55KTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKGlzT2JqZWN0KG9iaikgJiYgIV8uaXNBcnJheShvYmopKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLy8gRnVuY3Rpb24gZXhwZWN0cyBhbiBlbGVtZW50IG9uIHdoaWNoIHRoZSBzY3JvbGxpbmcgc2hvdWxkIGJlIGFwcGxpZWQsIERlcGVuZGluZyBvbiB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50IHNjcm9sbGJhciB3aWxsIGJlIGFkanVzdGVkXG5leHBvcnQgY29uc3Qgc2Nyb2xsVG9FbGVtZW50ID0gKGVsZW1lbnQpID0+IHtcbiAgICBjb25zdCAkZWxlbWVudCA9ICQoZWxlbWVudCk7XG4gICAgY29uc3QgZm9ybVBvc2l0aW9uID0gJGVsZW1lbnQub2Zmc2V0KCkudG9wO1xuICAgIGNvbnN0ICRzY3JvbGxQYXJlbnQgPSAkZWxlbWVudC5jbG9zZXN0KCdbd21zbW9vdGhzY3JvbGw9XCJ0cnVlXCJdJyk7XG4gICAgaWYgKGlzTW9iaWxlQXBwKCkgJiYgJHNjcm9sbFBhcmVudC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgaVNjcm9sbCA9IF8uZ2V0KCRzY3JvbGxQYXJlbnRbMF0sICdpc2Nyb2xsJyk7XG4gICAgICAgIGxldCB0byA9IC0oZm9ybVBvc2l0aW9uIC0gaVNjcm9sbC55KTtcbiAgICAgICAgdG8gPSAoaVNjcm9sbC5tYXhTY3JvbGxZID4gdG8pID8gaVNjcm9sbC5tYXhTY3JvbGxZIDogdG87XG4gICAgICAgIGlTY3JvbGwuc2Nyb2xsVG8oMCwgdG8pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5zY3JvbGwoe1xuICAgICAgICAgICAgdG9wOiBmb3JtUG9zaXRpb24sXG4gICAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuLy8gRnVuY3Rpb24gd2lsbCByZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gZWxlbWVudCBpcyBpbiB2aWV3cG9ydCBvciBub3RcbmV4cG9ydCBjb25zdCBpc0VsZW1lbnRJblZpZXdwb3J0ID0gKGVsZW1lbnQpID0+IHtcbiAgICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIChcbiAgICAgICAgcmVjdC50b3AgPj0gMCAmJlxuICAgICAgICByZWN0LmxlZnQgPj0gMCAmJlxuICAgICAgICByZWN0LmJvdHRvbSA8PSAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpICYmXG4gICAgICAgIHJlY3QucmlnaHQgPD0gKHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aClcbiAgICApO1xufVxuXG4vKkZ1bmN0aW9uIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBvYmplY3QgaXMgYSBwYWdlYWJsZSBvYmplY3Qgb3Igbm90LiovXG5leHBvcnQgY29uc3QgaXNQYWdlYWJsZSA9IChvYmo6IGFueSk6IGJvb2xlYW4gPT4ge1xuICAgIGNvbnN0IHBhZ2VhYmxlID0ge1xuICAgICAgICAnY29udGVudCc6IFtdLFxuICAgICAgICAnZmlyc3QnOiB0cnVlLFxuICAgICAgICAnbGFzdCc6IHRydWUsXG4gICAgICAgICdudW1iZXInOiAwLFxuICAgICAgICAnbnVtYmVyT2ZFbGVtZW50cyc6IDEwLFxuICAgICAgICAnc2l6ZSc6IDIwLFxuICAgICAgICAnc29ydCc6IG51bGwsXG4gICAgICAgICd0b3RhbEVsZW1lbnRzJzogMTAsXG4gICAgICAgICd0b3RhbFBhZ2VzJzogMVxuICAgIH07XG4gICAgLy8gcGFnaW5hdGVkIG9iamVjdCBtYXkgb3IgbWF5IG5vdCBjb250YWluICdlbXB0eScgcHJvcGVydHkuIEluIGVpdGhlciBjYXNlLCBQYWdlYWJsZSBzaG91bGQgcmV0dXJuIGFzIHRydWUuXG4gICAgY29uc3QgcGFnaW5hdGVkT2JqID0gXy5vbWl0KG9iaiwgJ2VtcHR5Jyk7XG4gICAgcmV0dXJuIChfLmlzRXF1YWwoXy5rZXlzKHBhZ2VhYmxlKSwgXy5rZXlzKHBhZ2luYXRlZE9iaikuc29ydCgpKSk7XG59O1xuXG4vKlxuICogVXRpbCBtZXRob2QgdG8gcmVwbGFjZSBwYXR0ZXJucyBpbiBzdHJpbmcgd2l0aCBvYmplY3Qga2V5cyBvciBhcnJheSB2YWx1ZXNcbiAqIEV4YW1wbGVzOlxuICogVXRpbHMucmVwbGFjZSgnSGVsbG8sICR7Zmlyc3R9ICR7bGFzdH0gIScsIHtmaXJzdDogJ3dhdmVtYWtlcicsIGxhc3Q6ICduZyd9KSAtLT4gSGVsbG8sIHdhdmVtYWtlciBuZ1xuICogVXRpbHMucmVwbGFjZSgnSGVsbG8sICR7MH0gJHsxfSAhJywgWyd3YXZlbWFrZXInLCduZyddKSAtLT4gSGVsbG8sIHdhdmVtYWtlciBuZ1xuICogRXhhbXBsZXMgaWYgcGFyc2VFcnJvciBpcyB0cnVlOlxuICogVXRpbHMucmVwbGFjZSgnSGVsbG8sIHswfSB7MX0gIScsIFsnd2F2ZW1ha2VyJywnbmcnXSkgLS0+IEhlbGxvLCB3YXZlbWFrZXIgbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHJlcGxhY2UgPSAodGVtcGxhdGUsIG1hcCwgcGFyc2VFcnJvcj86IGJvb2xlYW4pID0+IHtcbiAgICBsZXQgcmVnRXggPSBSRUdFWC5SRVBMQUNFX1BBVFRFUk47XG4gICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwYXJzZUVycm9yKSB7XG4gICAgICAgIHJlZ0V4ID0gL1xceyhbXlxcfV0rKVxcfS9nO1xuICAgIH1cblxuICAgIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKHJlZ0V4LCBmdW5jdGlvbiAobWF0Y2gsIGtleSkge1xuICAgICAgICByZXR1cm4gXy5nZXQobWFwLCBrZXkpO1xuICAgIH0pO1xufTtcblxuLypGdW5jdGlvbiB0byBjaGVjayBpZiBkYXRlIHRpbWUgdHlwZSovXG5leHBvcnQgY29uc3QgaXNEYXRlVGltZVR5cGUgPSB0eXBlID0+IHtcbiAgICBpZiAoXy5pbmNsdWRlcyh0eXBlLCAnLicpKSB7XG4gICAgICAgIHR5cGUgPSBfLnRvTG93ZXIoZXh0cmFjdFR5cGUodHlwZSkpO1xuICAgIH1cbiAgICByZXR1cm4gXy5pbmNsdWRlcyhbRGF0YVR5cGUuREFURSwgRGF0YVR5cGUuVElNRSwgRGF0YVR5cGUuVElNRVNUQU1QLCBEYXRhVHlwZS5EQVRFVElNRSwgRGF0YVR5cGUuTE9DQUxEQVRFVElNRV0sIHR5cGUpO1xufTtcblxuY29uc3QgbW9tZW50UGF0dGVybiA9IChwYXR0ZXJuKSA9PiB7XG4gICAgaWYgKF8uaW5jbHVkZXMocGF0dGVybiwgJ0UnKSkge1xuICAgICAgIHBhdHRlcm4gPSAgXy5yZXBsYWNlKHBhdHRlcm4sIC9FWyxdPy9nLCAnJyk7XG4gICAgfVxuICAgIHJldHVybiBfLnJlcGxhY2UocGF0dGVybiwgL3kqZCovZywgKHZhbCkgPT4gdmFsLnRvVXBwZXJDYXNlKCkpO1xufTtcblxuLyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBkYXRlIG9iamVjdC4gSWYgdmFsIGlzIHVuZGVmaW5lZCBpdCByZXR1cm5zIGludmFsaWQgZGF0ZSAqL1xuZXhwb3J0IGNvbnN0IGdldFZhbGlkRGF0ZU9iamVjdCA9ICh2YWwsIG9wdGlvbnM/KSA9PiB7XG4gICBjb25zdCBkZWZhdWx0TWVyaWRpYW4gPSBbJ0FNJywgJ1BNJ107XG4gICBjb25zdCBtb21lbnRNZXJpZGlhbiA9IG1vbWVudCgpLl9sb2NhbGUubWVyaWRpZW0oKTtcbiAgICAvLyBVcGRhdGluZyBsb2NhbGl6ZWQgbWVyaWRpYW5zIHdpdGggZGVmYXVsdCBtZXJpZGlhbnMgd2hlbiBtb21lbnQgbWVyaWRpYW4gaXMgbm90IGRlZmluZWRcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm1lcmlkaWFucyAmJiBfLmluY2x1ZGVzKGRlZmF1bHRNZXJpZGlhbiwgbW9tZW50TWVyaWRpYW4pKSB7XG4gICAgICAgIF8uZm9yRWFjaChvcHRpb25zLm1lcmlkaWFucywgKG1lcmlkaWFuLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgaWYgKF8uaW5jbHVkZXModmFsLCBtZXJpZGlhbikpIHtcbiAgICAgICAgICAgICAgICB2YWwgPSB2YWwucmVwbGFjZShtZXJpZGlhbiwgZGVmYXVsdE1lcmlkaWFuW2luZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBpc05hdGl2ZVBpY2tlciA9IChvcHRpb25zICYmIG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2lzTmF0aXZlUGlja2VyJykpID8gXy5nZXQob3B0aW9ucywgJ2lzTmF0aXZlUGlja2VyJykgOiBpc01vYmlsZSgpO1xuICAgIGNvbnN0IHBhdHRlcm4gPSBpc05hdGl2ZVBpY2tlciA/IChfLmdldChvcHRpb25zLCAncGF0dGVybicpIHx8ICAnWVlZWS9NTS9ERCBISDptbTpzcycpIDogKG1vbWVudFBhdHRlcm4oXy5nZXQob3B0aW9ucywgJ3BhdHRlcm4nKSkgfHwgJycpO1xuICAgIC8vIEhhbmRsaW5nIGxvY2FsaXphdGlvblxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMucGF0dGVybiAmJiBvcHRpb25zLnBhdHRlcm4gIT09ICd0aW1lc3RhbXAnKSB7XG4gICAgICAgIGlmICghaXNOYU4oKG5ldyBEYXRlKHZhbCkpLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIHdoZXRoZXIgdmFsIGlzIGEgdmFsaWQgZGF0ZSBvciBub3RcbiAgICAgICAgICAgIGlmIChpc0lvcygpKSB7XG4gICAgICAgICAgICAgICAgLy8gRm9yIGlPUywgZXhwbGljaXRseSBzZXR0aW5nIHRoZSBmb3JtYXQgdG8gY29uc2lkZXIgZXZlbiB0aGUgc2Vjb25kcy5cbiAgICAgICAgICAgICAgICB2YWwgPSBtb21lbnQodmFsKS5mb3JtYXQoJ1lZWVkvTU0vREQgSEg6bW06c3MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbCA9IG1vbWVudChuZXcgRGF0ZSh2YWwpLCBwYXR0ZXJuKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbCA9IG1vbWVudCh2YWwsIHBhdHRlcm4pO1xuICAgICAgICB9XG4gICAgICAgIHZhbCA9IHZhbC50b0RhdGUoKTtcbiAgICB9XG5cbiAgICBpZiAobW9tZW50KHZhbCwgcGF0dGVybikuaXNWYWxpZCgpKSB7XG4gICAgICAgIC8vIGRhdGUgd2l0aCArNSBob3VycyBpcyByZXR1cm5lZCBpbiBzYWZhcmkgYnJvd3NlciB3aGljaCBpcyBub3QgYSB2YWxpZCBkYXRlLlxuICAgICAgICAvLyBIZW5jZSBjb252ZXJ0aW5nIHRoZSBkYXRlIHRvIHRoZSBzdXBwb3J0ZWQgZm9ybWF0IFwiWVlZWS9NTS9ERCBISDptbTpzc1wiIGluIElPU1xuICAgICAgICBpZiAoaXNJb3MoKSkge1xuICAgICAgICAgICAgdmFsID0gbW9tZW50KG1vbWVudCh2YWwpLnZhbHVlT2YoKSkuZm9ybWF0KCdZWVlZL01NL0REIEhIOm1tOnNzJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgLyppZiB0aGUgdmFsdWUgaXMgYSB0aW1lc3RhbXAgc3RyaW5nLCBjb252ZXJ0IGl0IHRvIGEgbnVtYmVyKi9cbiAgICBpZiAoIWlzTmFOKHZhbCkpIHtcbiAgICAgICAgdmFsID0gcGFyc2VJbnQodmFsLCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLyppZiB0aGUgdmFsdWUgaXMgaW4gSEg6bW06c3MgZm9ybWF0LCBpdCByZXR1cm5zIGEgd3JvbmcgZGF0ZS4gU28gYXBwZW5kIHRoZSBkYXRlIHRvIHRoZSBnaXZlbiB2YWx1ZSB0byBnZXQgZGF0ZSovXG4gICAgICAgIGlmICghKG5ldyBEYXRlKHZhbCkuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgdmFsID0gbW9tZW50KChtb21lbnQoKS5mb3JtYXQoJ1lZWVktTU0tREQnKSArICcgJyArIHZhbCksICdZWVlZLU1NLUREIEhIOm1tOnNzIEEnKTtcblxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXcgRGF0ZShtb21lbnQodmFsKS52YWx1ZU9mKCkpO1xufTtcblxuLyogIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBqYXZhc2NyaXB0IGRhdGUgb2JqZWN0Ki9cbmV4cG9ydCBjb25zdCBnZXROYXRpdmVEYXRlT2JqZWN0ID0gKHZhbCwgb3B0aW9ucz8pID0+IHtcbiAgICB2YWwgPSBnZXRWYWxpZERhdGVPYmplY3QodmFsLCBvcHRpb25zKTtcbiAgICByZXR1cm4gbmV3IERhdGUodmFsKTtcbn07XG5cblxuLyoqXG4gKiBwcmVwYXJlIGEgYmxvYiBvYmplY3QgYmFzZWQgb24gdGhlIGNvbnRlbnQgYW5kIGNvbnRlbnQgdHlwZSBwcm92aWRlZFxuICogaWYgY29udGVudCBpcyBibG9iIGl0c2VsZiwgc2ltcGx5IHJldHVybnMgaXQgYmFja1xuICogQHBhcmFtIHZhbFxuICogQHBhcmFtIHZhbENvbnRlbnRUeXBlXG4gKiBAcmV0dXJucyB7Kn1cbiAqL1xuZXhwb3J0IGNvbnN0IGdldEJsb2IgPSAodmFsLCB2YWxDb250ZW50VHlwZT8pID0+IHtcbiAgICBpZiAodmFsIGluc3RhbmNlb2YgQmxvYikge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgICBjb25zdCBqc29uVmFsID0gZ2V0VmFsaWRKU09OKHZhbCk7XG4gICAgaWYgKGpzb25WYWwgJiYganNvblZhbCBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgICAgICB2YWwgPSBuZXcgQmxvYihbSlNPTi5zdHJpbmdpZnkoanNvblZhbCldLCB7IHR5cGU6IHZhbENvbnRlbnRUeXBlIHx8ICdhcHBsaWNhdGlvbi9qc29uJyB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YWwgPSBuZXcgQmxvYihbdmFsXSwgeyB0eXBlOiB2YWxDb250ZW50VHlwZSB8fCAndGV4dC9wbGFpbicgfSk7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0cnVlIGJ5IGNvbXBhcmluZyB0d28gb2JqZWN0cyBiYXNlZCBvbiB0aGUgZmllbGRzXG4gKiBAcGFyYW0gb2JqMSBvYmplY3RcbiAqIEBwYXJhbSBvYmoyIG9iamVjdFxuICogQHBhcmFtIGNvbXBhcmVCeSBzdHJpbmcgZmllbGQgdmFsdWVzIHRvIGNvbXBhcmVcbiAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIG9iamVjdCBlcXVhbGl0eSByZXR1cm5zIHRydWUgYmFzZWQgb24gZmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBpc0VxdWFsV2l0aEZpZWxkcyA9IChvYmoxLCBvYmoyLCBjb21wYXJlQnkpID0+IHtcbiAgICAvLyBjb21wYXJlQnkgY2FuIGJlICdpZCcgb3IgJ2lkMSwgaWQyJyBvciAnaWQxLCBpZDI6aWQzJ1xuICAgIC8vIFNwbGl0IHRoZSBjb21wYXJlYnkgY29tbWEgc2VwYXJhdGVkIHZhbHVlc1xuICAgIGxldCBfY29tcGFyZUJ5ID0gXy5pc0FycmF5KGNvbXBhcmVCeSkgPyBjb21wYXJlQnkgOiBfLnNwbGl0KGNvbXBhcmVCeSwgJywnKTtcblxuICAgIF9jb21wYXJlQnkgPSBfLm1hcChfY29tcGFyZUJ5LCBfLnRyaW0pO1xuXG4gICAgcmV0dXJuIF8uaXNFcXVhbFdpdGgob2JqMSwgb2JqMiwgZnVuY3Rpb24gKG8xLCBvMikge1xuICAgICAgICByZXR1cm4gXy5ldmVyeShfY29tcGFyZUJ5LCBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgICAgIGxldCBjYjEsIGNiMiwgX2NiO1xuXG4gICAgICAgICAgICAvLyBJZiBjb21wYXJlYnkgY29udGFpbnMgOiAsIGNvbXBhcmUgdGhlIHZhbHVlcyBieSB0aGUga2V5cyBvbiBlaXRoZXIgc2lkZSBvZiA6XG4gICAgICAgICAgICBpZiAoXy5pbmRleE9mKGNiLCBjb21wYXJlQnlTZXBhcmF0b3IpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGNiMSA9IGNiMiA9IF8udHJpbShjYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF9jYiA9IF8uc3BsaXQoY2IsIGNvbXBhcmVCeVNlcGFyYXRvcik7XG4gICAgICAgICAgICAgICAgY2IxID0gXy50cmltKF9jYlswXSk7XG4gICAgICAgICAgICAgICAgY2IyID0gXy50cmltKF9jYlsxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBfLmdldChvMSwgY2IxKSA9PT0gXy5nZXQobzIsIGNiMik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufTtcblxuY29uc3QgZ2V0Tm9kZSA9IHNlbGVjdG9yID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpO1xuXG4vLyBmdW5jdGlvbiB0byBjaGVjayBpZiB0aGUgc3R5bGVzaGVldCBpcyBhbHJlYWR5IGxvYWRlZFxuY29uc3QgaXNTdHlsZVNoZWV0TG9hZGVkID0gaHJlZiA9PiAhIWdldE5vZGUoYGxpbmtbaHJlZj1cIiR7aHJlZn1cIl1gKTtcblxuLy8gZnVuY3Rpb24gdG8gcmVtb3ZlIHN0eWxlc2hlZXQgaWYgdGhlIHN0eWxlc2hlZXQgaXMgYWxyZWFkeSBsb2FkZWRcbmNvbnN0IHJlbW92ZVN0eWxlU2hlZXQgPSBocmVmID0+IHtcbiAgICBjb25zdCBub2RlID0gZ2V0Tm9kZShgbGlua1tocmVmPVwiJHtocmVmfVwiXWApO1xuICAgIGlmIChub2RlKSB7XG4gICAgICAgIG5vZGUucmVtb3ZlKCk7XG4gICAgfVxufTtcblxuLy8gZnVuY3Rpb24gdG8gbG9hZCBhIHN0eWxlc2hlZXRcbmV4cG9ydCBjb25zdCBsb2FkU3R5bGVTaGVldCA9ICh1cmwsIGF0dHIpID0+IHtcbiAgICBpZiAoaXNTdHlsZVNoZWV0TG9hZGVkKHVybCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgIGxpbmsuaHJlZiA9IHVybDtcbiAgICAvLyBUbyBhZGQgYXR0cmlidXRlcyB0byBsaW5rIHRhZ1xuICAgIGlmIChhdHRyICYmIGF0dHIubmFtZSkge1xuICAgICAgICBsaW5rLnNldEF0dHJpYnV0ZShhdHRyLm5hbWUsIGF0dHIudmFsdWUpO1xuICAgIH1cbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgncmVsJywgJ3N0eWxlc2hlZXQnKTtcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgndHlwZScsICd0ZXh0L2NzcycpO1xuICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgcmV0dXJuIGxpbms7XG59O1xuXG4vLyBmdW5jdGlvbiB0byBsb2FkIHN0eWxlc2hlZXRzXG5leHBvcnQgY29uc3QgbG9hZFN0eWxlU2hlZXRzID0gKHVybHMgPSBbXSkgPT4ge1xuICAgIC8vIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBub3QgYW4gYXJyYXksIGNvbnZlcnQgaXQgdG8gYW4gYXJyYXlcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodXJscykpIHtcbiAgICAgICAgdXJscyA9IFt1cmxzXTtcbiAgICB9XG4gICAgdXJscy5mb3JFYWNoKGxvYWRTdHlsZVNoZWV0KTtcbn07XG5cbi8vIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBzY3JpcHQgaXMgYWxyZWFkeSBsb2FkZWRcbmNvbnN0IGlzU2NyaXB0TG9hZGVkID0gc3JjID0+ICEhZ2V0Tm9kZShgc2NyaXB0W3NyYz1cIiR7c3JjfVwiXSwgc2NyaXB0W2RhdGEtc3JjPVwiJHtzcmN9XCJdYCk7XG5cbmV4cG9ydCBjb25zdCBnZXRNb21lbnRMb2NhbGVPYmplY3QgPSAodGltZVpvbmUsIGRhdGVPYmo/KSA9PiB7XG4gICAgaWYgKGRhdGVPYmopIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKG5ldyBEYXRlKG1vbWVudChkYXRlT2JqKS50eih0aW1lWm9uZSkuZm9ybWF0KCkpLnRvTG9jYWxlU3RyaW5nKFwiZW4tVVNcIiwge3RpbWVab25lOiB0aW1lWm9uZX0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUobmV3IERhdGUobW9tZW50KCkudHoodGltZVpvbmUpLmZvcm1hdCgpKS50b0xvY2FsZVN0cmluZyhcImVuLVVTXCIsIHt0aW1lWm9uZTogdGltZVpvbmV9KSk7XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgbG9hZFNjcmlwdCA9IGFzeW5jICh1cmwsIGxvYWRWaWFTY3JpcHRUYWcsIGNhY2hlYWJsZSA9IGZhbHNlKSA9PiB7XG4gICAgY29uc3QgX3VybCA9IHVybC50cmltKCk7XG4gICAgaWYgKCFfdXJsLmxlbmd0aCB8fCBpc1NjcmlwdExvYWRlZChfdXJsKSkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgaWYgKGxvYWRWaWFTY3JpcHRUYWcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCk9PntcbiAgICAgICAgICAgIGxldCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgICAgIHNjcmlwdC50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgICAgICAgICBzY3JpcHQuc3JjID0gX3VybDtcbiAgICAgICAgICAgIHNjcmlwdC5hc3luYyA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRlKSB7ICAvL0lFXG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjcmlwdC5yZWFkeVN0YXRlID09PSBcImxvYWRlZFwiIHx8IHNjcmlwdC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjcmlwdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9IGVsc2UgeyAgLy9PdGhlciBicm93c2Vyc1xuICAgICAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjcmlwdC5vbmVycm9yID0gKGVycm9yOiBhbnkpID0+IHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdLmFwcGVuZENoaWxkKHNjcmlwdCk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSBpZihjYWNoZWFibGUpIHtcbiAgICAgICAgcmV0dXJuICQuYWpheCh7XG4gICAgICAgICAgICBkYXRhVHlwZTogJ3NjcmlwdCcsXG4gICAgICAgICAgICBjYWNoZTogdHJ1ZSxcbiAgICAgICAgICAgIHVybDogdXJsXG4gICAgICAgIH0pLmRvbmUocmVzcG9uc2UgPT4gcmVzcG9uc2UpXG4gICAgICAgICAgICAuZmFpbChyZWFzb24gPT4gcmVhc29uKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gJC5nZXRTY3JpcHQodXJsKVxuICAgICAgICAgICAgLmRvbmUocmVzcG9uc2UgPT4gcmVzcG9uc2UpXG4gICAgICAgICAgICAuZmFpbChyZWFzb24gPT4gcmVhc29uKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgbG9hZFNjcmlwdHMgPSBhc3luYyAodXJscyA9IFtdLCBsb2FkVmlhU2NyaXB0VGFnID0gdHJ1ZSkgPT4ge1xuICAgIGZvciAoY29uc3QgdXJsIG9mIHVybHMpIHtcbiAgICAgICAgYXdhaXQgbG9hZFNjcmlwdCh1cmwsIGxvYWRWaWFTY3JpcHRUYWcpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG59O1xuXG5leHBvcnQgbGV0IF9XTV9BUFBfUFJPSkVDVDogYW55ID0ge307XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBzZXRzIHNlc3Npb24gc3RvcmFnZSBpdGVtIGJhc2VkIG9uIHRoZSBwcm9qZWN0IElEXG4gKiBAcGFyYW0ga2V5IHN0cmluZ1xuICogQHBhcmFtIHZhbHVlIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvblN0b3JhZ2VJdGVtID0gKGtleSwgdmFsdWUpID0+IHtcbiAgICBsZXQgaXRlbTogYW55ID0gd2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oX1dNX0FQUF9QUk9KRUNULmlkKTtcblxuICAgIGlmIChpdGVtKSB7XG4gICAgICAgIGl0ZW0gPSBKU09OLnBhcnNlKGl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW0gPSB7fTtcbiAgICB9XG4gICAgaXRlbVtrZXldID0gdmFsdWU7XG5cbiAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShfV01fQVBQX1BST0pFQ1QuaWQsIEpTT04uc3RyaW5naWZ5KGl0ZW0pKTtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBnZXRzIHNlc3Npb24gc3RvcmFnZSBpdGVtIGJhc2VkIG9uIHRoZSBwcm9qZWN0IElEXG4gKiBAcGFyYW0ga2V5IHN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgZ2V0U2Vzc2lvblN0b3JhZ2VJdGVtID0ga2V5ID0+IHtcbiAgICAvLyBzYW5pdHkgY2hlY2sgZm9yIHRoaXMgdG8gd29yayB3aXRoIG5nLWNvZGVnZW5cbiAgICBsZXQgaXRlbSA9IHdpbmRvdyAmJiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UgJiYgd2luZG93LnNlc3Npb25TdG9yYWdlLmdldEl0ZW0oX1dNX0FQUF9QUk9KRUNULmlkKTtcblxuICAgIGlmIChpdGVtKSB7XG4gICAgICAgIGl0ZW0gPSBKU09OLnBhcnNlKGl0ZW0pO1xuICAgICAgICByZXR1cm4gaXRlbVtrZXldO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBub29wID0gKC4uLmFyZ3MpID0+IHsgfTtcblxuZXhwb3J0IGNvbnN0IGlzQXJyYXkgPSB2ID0+IF8uaXNBcnJheSh2KTtcblxuZXhwb3J0IGNvbnN0IGlzU3RyaW5nID0gdiA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZyc7XG5cbmV4cG9ydCBjb25zdCBpc051bWJlciA9IHYgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInO1xuXG5leHBvcnQgY29uc3QgaXNCb29sZWFuID0gdiA9PiB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGJsb2Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIGZpbGUgcGF0aFxuICogQHBhcmFtIGZpbGVwYXRoXG4gKiBAcmV0dXJucyBwcm9taXNlIGhhdmluZyBibG9iIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgY29udmVydFRvQmxvYiA9IChmaWxlcGF0aCk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAvLyBSZWFkIHRoZSBmaWxlIGVudHJ5IGZyb20gdGhlIGZpbGUgVVJMXG4gICAgICAgIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkwoZmlsZXBhdGgsIGZ1bmN0aW9uIChmaWxlRW50cnkpIHtcbiAgICAgICAgICAgIGZpbGVFbnRyeS5maWxlKGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgICAgICAgICAgLy8gZmlsZSBoYXMgdGhlIGNvcmRvdmEgZmlsZSBzdHJ1Y3R1cmUuIFRvIHN1Ym1pdCB0byB0aGUgYmFja2VuZCwgY29udmVydCB0aGlzIGZpbGUgdG8gamF2YXNjcmlwdCBmaWxlXG4gICAgICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWdCbG9iID0gbmV3IEJsb2IoW3JlYWRlci5yZXN1bHRdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAndHlwZSc6IGZpbGUudHlwZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7ICdibG9iJzogaW1nQmxvYiwgJ2ZpbGVwYXRoJzogZmlsZXBhdGggfSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZWFkZXIub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNDb3Jkb3ZhID0gKCkgPT4ge1xuICAgIHJldHVybiAhIXdpbmRvd1snY29yZG92YSddO1xufTtcblxuZXhwb3J0IGNvbnN0IEFwcENvbnN0YW50cyA9IHtcbiAgICBJTlRfTUFYX1ZBTFVFOiAyMTQ3NDgzNjQ3XG59O1xuXG5leHBvcnQgY29uc3Qgb3BlbkxpbmsgPSAobGluazogc3RyaW5nLCB0YXJnZXQ6IHN0cmluZyA9ICdfc2VsZicpID0+IHtcbiAgICBpZiAoaGFzQ29yZG92YSgpICYmIF8uc3RhcnRzV2l0aChsaW5rLCAnIycpKSB7XG4gICAgICAgIGxvY2F0aW9uLmhhc2ggPSBsaW5rO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHdpbmRvdy5vcGVuKGxpbmssIHRhcmdldCk7XG4gICAgfVxufTtcblxuLyogdXRpbCBmdW5jdGlvbiB0byBsb2FkIHRoZSBjb250ZW50IGZyb20gYSB1cmwgKi9cbmV4cG9ydCBjb25zdCBmZXRjaENvbnRlbnQgPSAoZGF0YVR5cGUsIHVybDogc3RyaW5nLCBpblN5bmM6IGJvb2xlYW4gPSBmYWxzZSwgc3VjY2Vzcz8sIGVycm9yPyk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgcmV0dXJuICQuYWpheCh7IHR5cGU6ICdnZXQnLCBkYXRhVHlwZTogZGF0YVR5cGUsIHVybDogdXJsLCBhc3luYzogIWluU3luYyB9KVxuICAgICAgICAuZG9uZShyZXNwb25zZSA9PiBzdWNjZXNzICYmIHN1Y2Nlc3MocmVzcG9uc2UpKVxuICAgICAgICAuZmFpbChyZWFzb24gPT4gZXJyb3IgJiYgZXJyb3IocmVhc29uKSk7XG59O1xuXG4vKipcbiAqIElmIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBwcm9taXNlLCB0aGVuIG9iamVjdCBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlLCBhIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgZ2l2ZW4gb2JqZWN0LlxuICogQHBhcmFtIHtQcm9taXNlPFQ+IHwgVH0gYVxuICogQHJldHVybnMge1Byb21pc2U8VD59XG4gKi9cbmV4cG9ydCBjb25zdCB0b1Byb21pc2UgPSA8VD4oYTogVCB8IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgICBpZiAoYSBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShhIGFzIFQpO1xuICAgIH1cbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBpbnZva2VzIHRoZSBnaXZlbiB0aGUgZnVuY3Rpb24gKGZuKSB1bnRpbCB0aGUgZnVuY3Rpb24gc3VjY2Vzc2Z1bGx5IGV4ZWN1dGVzIG9yIHRoZSBtYXhpbXVtIG51bWJlclxuICogb2YgcmV0cmllcyBpcyByZWFjaGVkIG9yIG9uQmVmb3JlUmV0cnkgcmV0dXJucyBmYWxzZS5cbiAqXG4gKiBAcGFyYW0gZm4gLSBhIGZ1bmN0aW9uIHRoYXQgaXMgbmVlZHMgdG8gYmUgaW52b2tlZC4gVGhlIGZ1bmN0aW9uIGNhbiBhbHNvIHJldHVybiBhIHByb21pc2UgYXMgd2VsbC5cbiAqIEBwYXJhbSBpbnRlcnZhbCAtIG1pbmltdW0gdGltZSBnYXAgYmV0d2VlbiBzdWNjZXNzaXZlIHJldHJpZXMuIFRoaXMgYXJndW1lbnQgc2hvdWxkIGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMC5cbiAqIEBwYXJhbSBtYXhSZXRyaWVzIC0gbWF4aW11bSBudW1iZXIgb2YgcmV0cmllcy4gVGhpcyBhcmd1bWVudCBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIDAuIEZvciBhbGwgb3RoZXIgdmFsdWVzLFxuICogbWF4UmV0cmllcyBpcyBpbmZpbml0eS5cbiAqIEBwYXJhbSBvbkJlZm9yZVJldHJ5IC0gYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgaW52b2tlZCBiZWZvcmUgcmUtaW52b2tpbmcgYWdhaW4uIFRoaXMgZnVuY3Rpb24gY2FuXG4gKiByZXR1cm4gZmFsc2Ugb3IgYSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgdG8gZmFsc2UgdG8gc3RvcCBmdXJ0aGVyIHJldHJ5IGF0dGVtcHRzLlxuICogQHJldHVybnMgeyp9IGEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gZm4gaXMgc3VjY2VzcyAob3IpIG1heGltdW0gcmV0cnkgYXR0ZW1wdHMgcmVhY2hlZFxuICogKG9yKSBvbkJlZm9yZVJldHJ5IHJldHVybmVkIGZhbHNlLlxuICovXG5leHBvcnQgY29uc3QgcmV0cnlJZkZhaWxzID0gKGZuOiAoKSA9PiBhbnksIGludGVydmFsOiBudW1iZXIsIG1heFJldHJpZXM6IG51bWJlciwgb25CZWZvcmVSZXRyeSA9ICgpID0+IFByb21pc2UucmVzb2x2ZShmYWxzZSkpID0+IHtcbiAgICBsZXQgcmV0cnlDb3VudCA9IDA7XG4gICAgY29uc3QgdHJ5Rm4gPSAoKSA9PiB7XG4gICAgICAgIHJldHJ5Q291bnQrKztcbiAgICAgICAgaWYgKF8uaXNGdW5jdGlvbihmbikpIHtcbiAgICAgICAgICAgIHJldHVybiBmbigpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBtYXhSZXRyaWVzID0gKF8uaXNOdW1iZXIobWF4UmV0cmllcykgJiYgbWF4UmV0cmllcyA+IDAgPyBtYXhSZXRyaWVzIDogMCk7XG4gICAgaW50ZXJ2YWwgPSAoXy5pc051bWJlcihpbnRlcnZhbCkgJiYgaW50ZXJ2YWwgPiAwID8gaW50ZXJ2YWwgOiAwKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBlcnJvckZuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY29uc3QgZXJyQXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRvUHJvbWlzZTxib29sZWFuPihvbkJlZm9yZVJldHJ5KCkpLnRoZW4oZnVuY3Rpb24gKHJldHJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXRyeSAhPT0gZmFsc2UgJiYgKCFtYXhSZXRyaWVzIHx8IHJldHJ5Q291bnQgPD0gbWF4UmV0cmllcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvUHJvbWlzZSh0cnlGbigpKS50aGVuKHJlc29sdmUsIGVycm9yRm4pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVyckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgKCkgPT4gcmVqZWN0KGVyckFyZ3MpKTtcbiAgICAgICAgICAgIH0sIGludGVydmFsKTtcbiAgICAgICAgfTtcbiAgICAgICAgdG9Qcm9taXNlKHRyeUZuKCkpLnRoZW4ocmVzb2x2ZSwgZXJyb3JGbik7XG4gICAgfSk7XG59O1xuXG4vKipcbiAqIFByb21pc2Ugb2YgYSBkZWZlciBjcmVhdGVkIHVzaW5nIHRoaXMgZnVuY3Rpb24sIGhhcyBhYm9ydCBmdW5jdGlvbiB0aGF0IHdpbGwgcmVqZWN0IHRoZSBkZWZlciB3aGVuIGNhbGxlZC5cbiAqIEByZXR1cm5zIHsqfSBhbmd1bGFyIGRlZmVyIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0QWJvcnRhYmxlRGVmZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgX2RlZmVyOiBhbnkgPSB7XG4gICAgICAgIHByb21pc2U6IG51bGwsXG4gICAgICAgIHJlamVjdDogbnVsbCxcbiAgICAgICAgcmVzb2x2ZTogbnVsbCxcbiAgICAgICAgb25BYm9ydDogKCkgPT4geyB9LFxuICAgICAgICBpc0Fib3J0ZWQ6IGZhbHNlXG4gICAgfTtcbiAgICBfZGVmZXIucHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgX2RlZmVyLnJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICBfZGVmZXIucmVqZWN0ID0gcmVqZWN0O1xuICAgIH0pO1xuICAgIF9kZWZlci5wcm9taXNlLmFib3J0ID0gKCkgPT4ge1xuICAgICAgICB0cmlnZ2VyRm4oX2RlZmVyLm9uQWJvcnQpO1xuICAgICAgICBfZGVmZXIucmVqZWN0KCdhYm9ydGVkJyk7XG4gICAgICAgIF9kZWZlci5pc0Fib3J0ZWQgPSB0cnVlO1xuICAgIH07XG4gICAgcmV0dXJuIF9kZWZlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVDU1NSdWxlID0gKHJ1bGVTZWxlY3Rvcjogc3RyaW5nLCBydWxlczogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgc3R5bGVzaGVldCA9IGRvY3VtZW50LnN0eWxlU2hlZXRzWzBdO1xuICAgIHN0eWxlc2hlZXQuaW5zZXJ0UnVsZShgJHtydWxlU2VsZWN0b3J9IHsgJHtydWxlc30gfWApO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVybFBhcmFtcyA9IChsaW5rKSA9PiB7XG4gICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgLy8gSWYgdXJsIHBhcmFtcyBhcmUgcHJlc2VudCwgY29uc3RydWN0IHBhcmFtcyBvYmplY3QgYW5kIHBhc3MgaXQgdG8gc2VhcmNoXG4gICAgY29uc3QgaW5kZXggPSBsaW5rLmluZGV4T2YoJz8nKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gXy5zcGxpdChsaW5rLnN1YnN0cmluZyhpbmRleCArIDEsIGxpbmsubGVuZ3RoKSwgJyYnKTtcbiAgICAgICAgcXVlcnlQYXJhbXMuZm9yRWFjaCgocGFyYW0pID0+IHtcbiAgICAgICAgICAgIHBhcmFtID0gXy5zcGxpdChwYXJhbSwgJz0nKTtcbiAgICAgICAgICAgIHBhcmFtc1twYXJhbVswXV0gPSBwYXJhbVsxXTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBwYXJhbXM7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Um91dGVOYW1lRnJvbUxpbmsgPSAobGluaykgPT4ge1xuICAgIGxpbmsgPSBsaW5rLnJlcGxhY2UoJyMvJywgJy8nKTtcbiAgICBjb25zdCBpbmRleCA9IGxpbmsuaW5kZXhPZignPycpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgbGluayA9IGxpbmsuc3Vic3RyaW5nKDAsIGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIGxpbms7XG59O1xuXG5leHBvcnQgY29uc3QgaXNBcHBsZVByb2R1Y3QgPSAvTWFjfGlQb2R8aVBob25lfGlQYWQvLnRlc3Qod2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybSk7XG5cbmV4cG9ydCBjb25zdCBkZWZlciA9ICgpID0+IHtcbiAgICBjb25zdCBkID0ge1xuICAgICAgICBwcm9taXNlOiBudWxsLFxuICAgICAgICByZXNvbHZlOiBub29wLFxuICAgICAgICByZWplY3Q6IG5vb3BcbiAgICB9O1xuICAgIGQucHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgZC5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgZC5yZWplY3QgPSByZWplY3Q7XG4gICAgfSk7XG4gICAgcmV0dXJuIGQ7XG59O1xuXG4vKlxuICogSW52b2tlcyB0aGUgZ2l2ZW4gbGlzdCBvZiBmdW5jdGlvbnMgc2VxdWVudGlhbGx5IHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4gSWYgYSBmdW5jdGlvbiByZXR1cm5zIGEgcHJvbWlzZSxcbiAqIHRoZW4gbmV4dCBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgb25seSBpZiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IGV4ZWN1dGVQcm9taXNlQ2hhaW4gPSAoZm5zLCBhcmdzLCBkPywgaT8pID0+IHtcbiAgICBkID0gZCB8fCBkZWZlcigpO1xuICAgIGkgPSBpIHx8IDA7XG4gICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgZm5zID0gXy5maWx0ZXIoZm5zLCBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgIHJldHVybiAhKF8uaXNVbmRlZmluZWQoZm4pIHx8IF8uaXNOdWxsKGZuKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZm5zICYmIGkgPCBmbnMubGVuZ3RoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0b1Byb21pc2UoZm5zW2ldLmFwcGx5KHVuZGVmaW5lZCwgYXJncykpXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4gZXhlY3V0ZVByb21pc2VDaGFpbihmbnMsIGFyZ3MsIGQsIGkgKyAxKSwgZC5yZWplY3QpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBkLnJlamVjdChlKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGQucmVzb2x2ZSgpO1xuICAgIH1cbiAgICByZXR1cm4gZC5wcm9taXNlO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgdHdvIGRhdGEgc291cmNlcyBhbmQgd2lsbCBjaGVjayBpZiBib3RoIGFyZSBzYW1lIGJ5IGNvbXBhcmluZyB0aGUgdW5pcXVlIGlkIGFuZFxuICogY29udGV4dCBpbiB3aGljaCBkYXRhc291cmNlcyBhcmUgcHJlc2VudFxuICogQHJldHVybnMgeyp9IGJvb2xlYW4gdHJ1ZS8gZmFsc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzRGF0YVNvdXJjZUVxdWFsID0gKGQxLCBkMikgPT4ge1xuICAgIHJldHVybiBkMS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9VTklRVUVfSURFTlRJRklFUikgPT09IGQyLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX1VOSVFVRV9JREVOVElGSUVSKSAmJlxuICAgICAgICBfLmlzRXF1YWwoZDEuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfQ09OVEVYVF9JREVOVElGSUVSKSwgZDIuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfQ09OVEVYVF9JREVOVElGSUVSKSk7XG59O1xuXG4vKipcbiAqIGNoZWNrcyBpZiB0aGUgcGFzc2VkIGRhdGFzb3VyY2UgY29udGV4dCBtYXRjaGVzIHdpdGggcGFzc2VkIGNvbnRleHRcbiAqIEBwYXJhbSBkcywgZGF0YXNvdXJjZSBoYXZpbmcgYSBjb250ZXh0XG4gKiBAcGFyYW0gY3R4LCBjb250ZXh0IHRvIGNvbXBhcmUgd2l0aFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZURhdGFTb3VyY2VDdHggPSAoZHMsIGN0eCkgPT4ge1xuICAgIHJldHVybiBkcy5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9DT05URVhUX0lERU5USUZJRVIpID09PSBjdHg7XG59O1xuXG4vKipcbiAqIFRoaXMgdHJhdmVyc2VzIHRoZSBmaWx0ZXJleHByZXNzaW9ucyBvYmplY3QgcmVjdXJzaXZlbHkgYW5kIHByb2Nlc3MgdGhlIGJpbmQgc3RyaW5nIGlmIGFueSBpbiB0aGUgb2JqZWN0XG4gKiBAcGFyYW0gdmFyaWFibGUgdmFyaWFibGUgb2JqZWN0XG4gKiBAcGFyYW0gbmFtZSBuYW1lIG9mIHRoZSB2YXJpYWJsZVxuICogQHBhcmFtIGNvbnRleHQgc2NvcGUgb2YgdGhlIHZhcmlhYmxlXG4gKi9cbmV4cG9ydCBjb25zdCBwcm9jZXNzRmlsdGVyRXhwQmluZE5vZGUgPSAoY29udGV4dCwgZmlsdGVyRXhwcmVzc2lvbnMsIHZhcmlhYmxlPykgPT4ge1xuICAgIGNvbnN0IGRlc3Ryb3lGbiA9IGNvbnRleHQucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIgPyBjb250ZXh0LnJlZ2lzdGVyRGVzdHJveUxpc3RlbmVyLmJpbmQoY29udGV4dCkgOiBfLm5vb3A7XG4gICAgY29uc3QgZmlsdGVyJCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgICBjb25zdCBiaW5kRmlsRXhwT2JqID0gKG9iaiwgdGFyZ2V0Tm9kZUtleSkgPT4ge1xuICAgICAgIGNvbnN0IGxpc3RlbmVyID0gKG5ld1ZhbCwgb2xkVmFsKSA9PiB7XG4gICAgICAgICAgICBpZiAoKG5ld1ZhbCA9PT0gb2xkVmFsICYmIF8uaXNVbmRlZmluZWQobmV3VmFsKSkgfHwgKF8uaXNVbmRlZmluZWQobmV3VmFsKSAmJiAhXy5pc1VuZGVmaW5lZChvbGRWYWwpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNraXAgY2xvbmluZyBmb3IgYmxvYiBjb2x1bW5cbiAgICAgICAgICAgIGlmICghXy5pbmNsdWRlcyhbJ2Jsb2InLCAnZmlsZSddLCBvYmoudHlwZSkpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWwgPSBnZXRDbG9uZWRPYmplY3QobmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IHdoZXJlIHdlIGFyZSBhbGxvd2luZyB0aGUgdXNlciB0byBiaW5kIGNvbXBsZXRlIG9iamVjdFxuICAgICAgICAgICAgaWYgKG9iai50YXJnZXQgPT09ICdkYXRhQmluZGluZycpIHtcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIGV4aXN0aW5nIGRhdGFiaW5kaW5nIGVsZW1lbnRcbiAgICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9ucy5ydWxlcyA9IFtdO1xuICAgICAgICAgICAgICAgIC8vIG5vdyBhZGQgYWxsIHRoZSByZXR1cm5lZCB2YWx1ZXNcbiAgICAgICAgICAgICAgICBfLmZvckVhY2gobmV3VmFsLCBmdW5jdGlvbiAodmFsdWUsIHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9ucy5ydWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICd0YXJnZXQnOiB0YXJnZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAndmFsdWUnOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdtYXRjaE1vZGUnOiBvYmoubWF0Y2hNb2RlIHx8ICdzdGFydGlnbm9yZWNhc2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVpcmVkJzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAndHlwZSc6ICcnXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBzZXR0aW5nIHZhbHVlIHRvIHRoZSByb290IG5vZGVcbiAgICAgICAgICAgICAgICBvYmpbdGFyZ2V0Tm9kZUtleV0gPSBuZXdWYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaWx0ZXIkLm5leHQoeyBmaWx0ZXJFeHByZXNzaW9ucywgbmV3VmFsIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmluZ1N0YXJ0c1dpdGgob2JqW3RhcmdldE5vZGVLZXldLCAnYmluZDonKSkge1xuICAgICAgICAgICAgLy8gW1RvZG8tQ1NQXTogbmVlZHMgYSBjaGVjaywgd2hlcmUgaXMgdGhpcyB1c2VkXG4gICAgICAgICAgICBkZXN0cm95Rm4oXG4gICAgICAgICAgICAgICAgJHdhdGNoKG9ialt0YXJnZXROb2RlS2V5XS5yZXBsYWNlKCdiaW5kOicsICcnKSwgY29udGV4dCwge30sIHZhcmlhYmxlID8gdmFyaWFibGUuaW52b2tlT25GaWx0ZXJ0RXhwcmVzc2lvbkNoYW5nZS5iaW5kKHZhcmlhYmxlLCBvYmosIHRhcmdldE5vZGVLZXkpIDogbGlzdGVuZXIsIHVuZGVmaW5lZCwgZmFsc2UsIHsgYXJyYXlUeXBlOiBfLmluY2x1ZGVzKFsnaW4nLCAnbm90aW4nXSwgb2JqLm1hdGNoTW9kZSkgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdHJhdmVyc2VGaWx0ZXJFeHByZXNzaW9ucyA9IGV4cHJlc3Npb25zID0+IHtcbiAgICAgICAgaWYgKGV4cHJlc3Npb25zLnJ1bGVzKSB7XG4gICAgICAgICAgICBfLmZvckVhY2goZXhwcmVzc2lvbnMucnVsZXMsIChmaWxFeHBPYmosIGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsRXhwT2JqLnJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYXZlcnNlRmlsdGVyRXhwcmVzc2lvbnMoZmlsRXhwT2JqKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsRXhwT2JqLm1hdGNoTW9kZSA9PT0gJ2JldHdlZW4nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiaW5kRmlsRXhwT2JqKGZpbEV4cE9iaiwgJ3NlY29uZHZhbHVlJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYmluZEZpbEV4cE9iaihmaWxFeHBPYmosICd2YWx1ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0cmF2ZXJzZUZpbHRlckV4cHJlc3Npb25zKGZpbHRlckV4cHJlc3Npb25zKTtcblxuICAgIHJldHVybiBmaWx0ZXIkO1xufTtcblxuLy8gVGhpcyBtZXRob2Qgd2lsbCBzZXQgdGhlIGdpdmVuIHByb3RvIG9uIHRoZSB0YXJnZXRcbmV4cG9ydCBjb25zdCBleHRlbmRQcm90byA9ICh0YXJnZXQsIHByb3RvKSA9PiB7XG4gICAgbGV0IF9wcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpO1xuICAgIHdoaWxlIChPYmplY3QuZ2V0UHJvdG90eXBlT2YoX3Byb3RvKS5jb25zdHJ1Y3RvciAhPT0gT2JqZWN0KSB7XG4gICAgICAgIF9wcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihfcHJvdG8pO1xuICAgICAgICAvLyByZXR1cm4gaWYgdGhlIHByb3RvdHlwZSBvZiBjcmVhdGVkIGNvbXBvbmVudCBhbmQgcHJvdG90eXBlIG9mIGNvbnRleHQgYXJlIHNhbWVcbiAgICAgICAgaWYgKHByb3RvID09PSBfcHJvdG8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoX3Byb3RvLCBwcm90byk7XG59O1xuXG5leHBvcnQgY29uc3QgcmVtb3ZlRXh0cmFTbGFzaGVzID0gZnVuY3Rpb24gKHVybCkge1xuICAgIGNvbnN0IGJhc2U2NHJlZ2V4ID0gL15kYXRhOmltYWdlXFwvKFthLXpdezIsfSk7YmFzZTY0LC87XG4gICAgaWYgKF8uaXNTdHJpbmcodXJsKSkge1xuICAgICAgICAvKlxuICAgICAgICAqIHN1cHBvcnQgZm9yIG1vYmlsZSBhcHBzIGhhdmluZyBsb2NhbCBmaWxlIHBhdGggdXJsIHN0YXJ0aW5nIHdpdGggZmlsZTovLy8gYW5kXG4gICAgICAgICogc3VwcG9ydCBmb3IgYmFzZTY0IGZvcm1hdFxuICAgICAgICAqICovXG4gICAgICAgIGlmIChfLnN0YXJ0c1dpdGgodXJsLCAnZmlsZTovLy8nKSB8fCBiYXNlNjRyZWdleC50ZXN0KHVybCkpIHtcbiAgICAgICAgICAgIHJldHVybiB1cmw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKG5ldyBSZWdFeHAoJyhbXjpdXFwvKShcXC8pKycsICdnJyksICckMScpO1xuICAgIH1cbn07XG5cbiQuY2FjaGVkU2NyaXB0ID0gKCgpID0+IHtcbiAgICBjb25zdCBpblByb2dyZXNzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IHJlc29sdmVkID0gbmV3IFNldCgpO1xuXG4gICAgY29uc3QgaXNJblByb2dyZXNzID0gdXJsID0+IGluUHJvZ3Jlc3MuaGFzKHVybCk7XG4gICAgY29uc3QgaXNSZXNvbHZlZCA9IHVybCA9PiByZXNvbHZlZC5oYXModXJsKTtcbiAgICBjb25zdCBvbkxvYWQgPSB1cmwgPT4ge1xuICAgICAgICByZXNvbHZlZC5hZGQodXJsKTtcbiAgICAgICAgaW5Qcm9ncmVzcy5nZXQodXJsKS5yZXNvbHZlKCk7XG4gICAgICAgIGluUHJvZ3Jlc3MuZGVsZXRlKHVybCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNldEluUHJvZ3Jlc3MgPSB1cmwgPT4ge1xuICAgICAgICBsZXQgcmVzRm47XG4gICAgICAgIGxldCByZWpGbjtcbiAgICAgICAgY29uc3QgcHJvbWlzZTogYW55ID0gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICAgICAgICByZXNGbiA9IHJlcztcbiAgICAgICAgICAgIHJlakZuID0gcmVqO1xuICAgICAgICB9KTtcblxuICAgICAgICBwcm9taXNlLnJlc29sdmUgPSByZXNGbjtcbiAgICAgICAgcHJvbWlzZS5yZWplY3QgPSByZWpGbjtcblxuICAgICAgICBpblByb2dyZXNzLnNldCh1cmwsIHByb21pc2UpO1xuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKHVybCkge1xuICAgICAgICBpZiAoaXNSZXNvbHZlZCh1cmwpKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNJblByb2dyZXNzKHVybCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpblByb2dyZXNzLmdldCh1cmwpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0SW5Qcm9ncmVzcyh1cmwpO1xuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBkYXRhVHlwZTogJ3NjcmlwdCcsXG4gICAgICAgICAgICBjYWNoZTogdHJ1ZSxcbiAgICAgICAgICAgIHVybFxuICAgICAgICB9O1xuXG4gICAgICAgICQuYWpheChvcHRpb25zKS5kb25lKCgpID0+IG9uTG9hZCh1cmwpKTtcblxuICAgICAgICByZXR1cm4gaW5Qcm9ncmVzcy5nZXQodXJsKTtcbiAgICB9O1xufSkoKTtcblxuY29uc3QgREVGQVVMVF9ESVNQTEFZX0ZPUk1BVFMgPSB7XG4gICAgREFURTogJ3l5eXktTU0tZGQnLFxuICAgIFRJTUU6ICdoaDptbSBhJyxcbiAgICBUSU1FU1RBTVA6ICd5eXl5LU1NLWRkIGhoOm1tOnNzIGEnLFxuICAgIERBVEVUSU1FOiAneXl5eS1NTS1kZCBoaDptbTpzcyBhJyxcbn07XG4vLyBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBkaXNwbGF5IGRhdGUgZm9ybWF0IGZvciBnaXZlbiB0eXBlXG5leHBvcnQgY29uc3QgZ2V0RGlzcGxheURhdGVUaW1lRm9ybWF0ID0gdHlwZSA9PiB7XG4gICAgcmV0dXJuIERFRkFVTFRfRElTUExBWV9GT1JNQVRTW18udG9VcHBlcih0eXBlKV07XG59O1xuXG4vLyBHZW5lcmF0ZSBmb3IgYXR0cmlidXRlIG9uIGxhYmVsIGFuZCBJRCBvbiBpbnB1dCBlbGVtZW50LCBzbyB0aGF0IGxhYmVsIGVsZW1lbnRzIGFyZSBhc3NvY2lhdGVkIHRvIGZvcm0gY29udHJvbHNcbmV4cG9ydCBjb25zdCBhZGRGb3JJZEF0dHJpYnV0ZXMgPSAoZWxlbWVudDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBsYWJlbEVsID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdsYWJlbC5jb250cm9sLWxhYmVsJyk7XG4gICAgbGV0IGlucHV0RWwgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tmb2N1cy10YXJnZXRdJyk7XG4gICAgaWYgKCFpbnB1dEVsLmxlbmd0aCkge1xuICAgICAgICBpbnB1dEVsID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYScpO1xuICAgIH1cbiAgICAvKmlmIHRoZXJlIGFyZSBvbmx5IG9uZSBpbnB1dCBlbCBhbmQgbGFiZWwgRWwgYWRkIGlkIGFuZCBmb3IgYXR0cmlidXRlKi9cbiAgICBpZiAobGFiZWxFbC5sZW5ndGggJiYgaW5wdXRFbC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0SWQgPSAkKGlucHV0RWxbMF0gYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoJ1t3aWRnZXQtaWRdJykuYXR0cignd2lkZ2V0LWlkJyk7XG4gICAgICAgIGlmICh3aWRnZXRJZCkge1xuICAgICAgICAgICAgc2V0QXR0cihpbnB1dEVsWzBdIGFzIEhUTUxFbGVtZW50LCAnaWQnLCB3aWRnZXRJZCk7XG4gICAgICAgICAgICBzZXRBdHRyKGxhYmVsRWxbMF0gYXMgSFRNTEVsZW1lbnQsICdmb3InLCB3aWRnZXRJZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLypBZGRpbmcgYXJpYS1sYWJlbGxlZGJ5IHRvIHJhZGlvc2V0LCBjaGVja2JveHNldCB3aWRnZXRzKi9cbiAgICBjb25zdCB1bEVsID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCd1bCcpO1xuICAgIGlmIChsYWJlbEVsLmxlbmd0aCAmJiB1bEVsLmxlbmd0aCAmJiAodWxFbFswXS5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSA9PT0gJ3JhZGlvZ3JvdXAnIHx8IHVsRWxbMF0uZ2V0QXR0cmlidXRlKCdyb2xlJykgPT09ICdncm91cCcpKSB7XG4gICAgICAgIGNvbnN0IHdpZGdldElkID0gJ3dtLWdyb3VwLWxhYmVsLScgKyBnZW5lcmF0ZUdVSWQoKTtcbiAgICAgICAgc2V0QXR0cih1bEVsWzBdIGFzIEhUTUxFbGVtZW50LCAnYXJpYS1sYWJlbGxlZGJ5Jywgd2lkZ2V0SWQpO1xuICAgICAgICBzZXRBdHRyKGxhYmVsRWxbMF0gYXMgSFRNTEVsZW1lbnQsICdpZCcsIHdpZGdldElkKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gYWRqdXN0IHRoZSBjb250YWluZXIgcG9zaXRpb25cbiAqIEZvciBleGFtcGxlOiAxLiBXaGVuIGRhdGVwaWNrZXIgY29udHJvbCBwbGFjZWQgY2xvc2VkIHRvIHRoZSBzY3JlZW4gbGVmdCBlZGdlcywgaXQgaXMgZ29pbmcgdG8gbmVnYXRpdmUgdmFsdWVzIHdoaWNoIGlzICBjdXR0aW5nIHRoZSBjb250YWluZXIuXG4gKiBUbyBGaXggdGhlIGNvbnRhaW5lciBvdmVybGFwcGluZyBpc3N1ZSBjaGFuZ2luZyB0aGUgY29udHJhaW5lciBsZWZ0IHRyYW5zbGF0aW9uIHRvIDBcbiAqIEBwYXJhbSBjb250YWluZXJFbGVtIC0gcGlja2VyL2Ryb3Bkb3duIGNvbnRhaW5lciBlbGVtZW50KGpxdWVyeSlcbiAqIEBwYXJhbSBwYXJlbnRFbGVtIC0gd2lkZ2V0IG5hdGl2ZSBlbGVtZW50XG4gKiBAcGFyYW0gcmVmIC0gc2NvcGUgb2YgcGFydGljdWxhciBsaWJyYXJ5IGRpcmVjdGl2ZVxuICogQHBhcmFtIGVsZSAtIENoaWxkIGVsZW1lbnQoanF1ZXJ5KS4gRm9yIHNvbWUgb2YgdGhlIHdpZGdldHModGltZSwgc2VhcmNoKSBjb250YWluZXJFbGVtIGRvZXNuJ3QgaGF2ZSBoZWlnaHQuIFRoZSBpbm5lciBlbGVtZW50KGRyb3Bkb3duLW1lbnUpIGhhcyBoZWlnaHQgc28gcGFzc2luZyBpdCBhcyBvcHRpb25hbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFkanVzdENvbnRhaW5lclBvc2l0aW9uID0gKGNvbnRhaW5lckVsZW0sIHBhcmVudEVsZW0sIHJlZiwgZWxlPykgPT4ge1xuICAgIGNvbnN0IHpvbmVSZWYgPSByZWYuX25nWm9uZSB8fCByZWYubmdab25lO1xuICAgIHpvbmVSZWYub25TdGFibGUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zID0gZ2V0V2Via2l0VHJhc2xhdGlvbk1hdHJpeChjb250YWluZXJFbGVtKTtcbiAgICAgICAgaWYgKGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucy5tNDEgPCAwKSB7XG4gICAgICAgICAgICAgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zLm00MSA9IDA7XG4gICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgIH1cbiAgICAgICAgIHNldFRyYW5zbGF0aW9uM2RQb3NpdGlvbihjb250YWluZXJFbGVtLCBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMpO1xuICAgICB9KTtcbiAgIH07XG5cblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGFkanVzdCB0aGUgY29udGFpbmVyIHBvc2l0aW9uXG4gKiBGb3IgZXhhbXBsZTogMS4gV2hlbiBkYXRlcGlja2VyIGNvbnRyb2wgcGxhY2VkIGNsb3NlZCB0byB0aGUgc2NyZWVuIHJpZ2h0IGVkZ2VzLCBpdCBpcyBnb2luZyB0byBvdXQgb2YgdGhlIHZpZXdwb3J0IHZhbHVlcyB3aGljaCBpcyAgY3V0dGluZyB0aGUgY29udGFpbmVyLlxuICogQHBhcmFtIGNvbnRhaW5lckVsZW0gIHBpY2tlci9kcm9wZG93biBjb250YWluZXIgZWxlbWVudChqcXVlcnkpXG4gKiBAcGFyYW0gcGFyZW50RWxlbSB3aWRnZXQgbmF0aXZlIGVsZW1lbnRcbiAqIEBwYXJhbSByZWYgIHNjb3BlIG9mIHBhcnRpY3VsYXIgbGlicmFyeSBkaXJlY3RpdmVcbiAqIEBwYXJhbSBlbGUgQ2hpbGQgZWxlbWVudChqcXVlcnkpLiBGb3Igc29tZSBvZiB0aGUgd2lkZ2V0cyh0aW1lLCBzZWFyY2gpIGNvbnRhaW5lckVsZW0gZG9lc24ndCBoYXZlIGhlaWdodC4gVGhlIGlubmVyIGVsZW1lbnQoZHJvcGRvd24tbWVudSkgaGFzIGhlaWdodCBzbyBwYXNzaW5nIGl0IGFzIG9wdGlvbmFsLlxuICovXG4gICBleHBvcnQgY29uc3QgYWRqdXN0Q29udGFpbmVyUmlnaHRFZGdlcyA9IChjb250YWluZXJFbGVtLCBwYXJlbnRFbGVtLCByZWYsIGVsZT8pID0+IHtcbiAgICAgICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBlbGUgPyBfLnBhcnNlSW50KGVsZS5jc3MoJ3dpZHRoJykpIDogXy5wYXJzZUludChjb250YWluZXJFbGVtLmNzcygnd2lkdGgnKSk7XG4gICAgICAgIGNvbnN0IHZpZXdQb3J0V2lkdGggPSAkKHdpbmRvdykud2lkdGgoKSArIHdpbmRvdy5zY3JvbGxYO1xuICAgICAgICBjb25zdCBwYXJlbnREaW1lc2lvbiA9IHBhcmVudEVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHBhcmVudFJpZ2h0ID0gcGFyZW50RGltZXNpb24ucmlnaHQgKyB3aW5kb3cuc2Nyb2xsWDtcbiAgICAgICAgbGV0IG5ld0xlZnQ7XG4gICAgICAgIGNvbnN0IHpvbmVSZWYgPSByZWYuX25nWm9uZSB8fCByZWYubmdab25lO1xuICAgICAgICB6b25lUmVmLm9uU3RhYmxlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMgPSBnZXRXZWJraXRUcmFzbGF0aW9uTWF0cml4KGNvbnRhaW5lckVsZW0pO1xuXG4gICAgICAgICAgICBpZiAodmlld1BvcnRXaWR0aCAtIChwYXJlbnRSaWdodCArIHBhcmVudERpbWVzaW9uLndpZHRoKSA8IGNvbnRhaW5lcldpZHRoKSB7XG4gICAgICAgICAgICAgICAgbmV3TGVmdCA9IHBhcmVudFJpZ2h0IC0gY29udGFpbmVyV2lkdGg7XG4gICAgICAgICAgICAgICAgaWYgKG5ld0xlZnQgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0xlZnQgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMubTQxID0gbmV3TGVmdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2V0VHJhbnNsYXRpb24zZFBvc2l0aW9uKGNvbnRhaW5lckVsZW0sIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgfTtcblxuICAvKipcbiAgICogRm9yIGdpdmVuIGVsZW1lbnQgc2V0IHRoZSB0cmFzbGF0aW9uXG4gICAqIEBwYXJhbSBjb250YWluZXJFbGVtIHRhbnNsYXRlZCBlbGVtZW50XG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMgdHJhbnNsYXRlIG1hdHJpeCBwb3NpdGlvbnNcbiAgICovXG4gICBleHBvcnQgY29uc3Qgc2V0VHJhbnNsYXRpb24zZFBvc2l0aW9uID0gKGNvbnRhaW5lckVsZW0sIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucykgPT4ge1xuICAgICAgICBjb25zdCB0cmFuc2xhdGVQb3NpdGlvbiA9ICd0cmFuc2xhdGUzZCgnICsgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zLm00MSArICdweCwgJyArIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucy5tNDIgKyAncHgsIDBweCknO1xuICAgICAgICBjb250YWluZXJFbGVtWzBdLnN0eWxlLndlYmtpdFRyYW5zZm9ybSA9IHRyYW5zbGF0ZVBvc2l0aW9uO1xuICAgICAgICBjb250YWluZXJFbGVtWzBdLnN0eWxlLk1velRyYW5zZm9ybSA9IHRyYW5zbGF0ZVBvc2l0aW9uO1xuICAgICAgICBjb250YWluZXJFbGVtWzBdLnN0eWxlLm1zVHJhbnNmb3JtID0gdHJhbnNsYXRlUG9zaXRpb247XG4gICAgICAgIGNvbnRhaW5lckVsZW1bMF0uc3R5bGUuT1RyYW5zZm9ybSA9IHRyYW5zbGF0ZVBvc2l0aW9uO1xuICAgICAgICBjb250YWluZXJFbGVtWzBdLnN0eWxlLnRyYW5zZm9ybSA9IHRyYW5zbGF0ZVBvc2l0aW9uO1xuICAgfTtcblxuICAgLyoqXG4gICAgKlxuICAgICogQHBhcmFtIGNvbnRhaW5lckVsZW0gZWxlbWV0IGZvciB0aGUgV2ViS2l0Q1NTTWF0cml4XG4gICAgKi9cbiAgICBleHBvcnQgY29uc3QgZ2V0V2Via2l0VHJhc2xhdGlvbk1hdHJpeCA9IChjb250YWluZXJFbGVtKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgV2ViS2l0Q1NTTWF0cml4ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNU0NTU01hdHJpeCh3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjb250YWluZXJFbGVtWzBdKS50cmFuc2Zvcm0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgV2ViS2l0Q1NTTWF0cml4KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNvbnRhaW5lckVsZW1bMF0pLndlYmtpdFRyYW5zZm9ybSk7XG4gICAgfVxuXG4vLyBjbG9zZSBhbGwgdGhlIHBvcG92ZXJzLlxuZXhwb3J0IGNvbnN0IGNsb3NlUG9wb3ZlciA9IChlbGVtZW50KSA9PiB7XG4gICAgaWYgKCFlbGVtZW50LmNsb3Nlc3QoJy5hcHAtcG9wb3ZlcicpLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBwb3BvdmVyRWxlbWVudHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuYXBwLXBvcG92ZXItd3JhcHBlcicpO1xuICAgICAgICBfLmZvckVhY2gocG9wb3ZlckVsZW1lbnRzLCAoZWxlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZWxlLndpZGdldC5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICBlbGUud2lkZ2V0LmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHRvIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBpbiB0aGUgYXBwXG4gKiBUaGlzIGlzIGV4cG9zZWQgZm9yIHRoZSBlbmQgdXNlciBkZXZlbG9wZXIgb2YgV00gYXBwXG4gKiBUaGlzIGlzIHRoZSBhbHRlcm5hdGl2ZSBmb3IgJHJzLiRzYWZlQXBwbHkoKSBpbiBBbmd1bGFySlNcbiAqIFNlZSAkYXBwRGlnZXN0IGluIHV0aWxzIGZvciBtb3JlIGluZm9cbiAqL1xuZXhwb3J0IGNvbnN0IGRldGVjdENoYW5nZXMgPSAkYXBwRGlnZXN0O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHRvIHRyaWdnZXIgdGhlIGFjdGlvbi9saW5rIG9mIG1lbnUvbmF2IGl0ZW1cbiAqIEBwYXJhbSBzY29wZSAtIHNjb3BlIG9mIHRoZSB3aWRnZXRcbiAqIEBwYXJhbSBpdGVtIC0gaXRlbSBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IHRyaWdnZXJJdGVtQWN0aW9uID0gKHNjb3BlLCBpdGVtKSA9PiB7XG4gICAgbGV0IGl0ZW1MaW5rID0gaXRlbS5saW5rO1xuICAgIGNvbnN0IGl0ZW1BY3Rpb24gPSBpdGVtLmFjdGlvbjtcbiAgICBjb25zdCBsaW5rVGFyZ2V0ID0gaXRlbS50YXJnZXQ7XG4gICAgaWYgKGl0ZW1BY3Rpb24pIHtcbiAgICAgICAgaWYgKCFzY29wZS5pdGVtQWN0aW9uRm4pIHtcbiAgICAgICAgICAgIC8vW1RvZG8tQ1NQXTogVGhpcyB3aWxsIG5vdCB3b3JrIGFzIGZ1bmN0aW9uIHdpbGwgYmUgZHluYW1pY1xuICAgICAgICAgICAgc2NvcGUuaXRlbUFjdGlvbkZuID0gJHBhcnNlRXZlbnQoaXRlbUFjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBzY29wZS5pdGVtQWN0aW9uRm4oc2NvcGUudXNlckRlZmluZWRFeGVjdXRpb25Db250ZXh0LCBPYmplY3QuY3JlYXRlKGl0ZW0pKTtcbiAgICB9XG4gICAgaWYgKGl0ZW1MaW5rKSB7XG4gICAgICAgIGlmIChpdGVtTGluay5zdGFydHNXaXRoKCcjLycpICYmICghbGlua1RhcmdldCB8fCBsaW5rVGFyZ2V0ID09PSAnX3NlbGYnKSkge1xuICAgICAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBnZXRVcmxQYXJhbXMoaXRlbUxpbmspO1xuICAgICAgICAgICAgaXRlbUxpbmsgPSBnZXRSb3V0ZU5hbWVGcm9tTGluayhpdGVtTGluayk7XG4gICAgICAgICAgICBjb25zdCByb3V0ZXIgPSBfLmdldChzY29wZSwgJ3JvdXRlJykgfHwgXy5nZXQoc2NvcGUsICdtZW51UmVmLnJvdXRlJyk7XG4gICAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoW2l0ZW1MaW5rXSwgeyBxdWVyeVBhcmFtcyB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9wZW5MaW5rKGl0ZW1MaW5rLCBsaW5rVGFyZ2V0KTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdG8gZ2V0IGRhdHNvdXJjZSBmcm9tIHRoZSBleHByZXNzaW9uXG4gKiBAcGFyYW0gZXhwciAtIGV4cHJlc3Npb24gb2YgdGhlIGRhdGFzZXRcbiAqIEBwYXJhbSBzY29wZSAtIHNjb3BlIG9mIHRoZSB3aWRnZXRcbiAqIEV4YW1wbGUxOiBleHByIC0gXCJWYXJpYWJsZXMuc3RhdGljVmFyMS5kYXRhU2V0LmRldGFpbHNbJGldLmFkZHJlc3Nlc1wiIHRoZW4gdGhlIG1ldGhvZCB3aWxsIHJldHVybiBkYXRhc291cmNlIGFzIFZhcmlhYmxlcy5zdGF0aWNWYXIxXG4gKiBFeGFtcGxlMjogZXhwciAtIFwiV2lkZ2V0cy5saXN0MS5jdXJyZW50SXRlbS5hZGRyZXNzZXNcIiBhbmQgbGlzdDEgaXMgYm91bmQgdG8gXCJWYXJpYWJsZXMuc3RhdGljVmFyMS5kYXRhU2V0LmRldGFpbHNcIiB0aGVuIHRoZSBtZXRob2Qgd2lsbCByZXR1cm4gZGF0YXNvdXJjZSBhcyBWYXJpYWJsZXMuc3RhdGljVmFyMVxuICovXG5leHBvcnQgY29uc3QgZ2V0RGF0YXNvdXJjZUZyb21FeHByID0gKGV4cHIsIHNjb3BlKSA9PiB7XG4gICAgY29uc3QgaXNCb3VuZFRvVmFyaWFibGUgPSBfLnN0YXJ0c1dpdGgoZXhwciwgJ1ZhcmlhYmxlcy4nKTtcbiAgICBjb25zdCBpc0JvdW5kVG9XaWRnZXQgPSBfLnN0YXJ0c1dpdGgoZXhwciwgJ1dpZGdldHMuJyk7XG4gICAgY29uc3QgcGFydHMgPSBleHByLnNwbGl0KCcuJyk7XG4gICAgaWYgKGlzQm91bmRUb1ZhcmlhYmxlKSB7XG4gICAgICAgIHJldHVybiBfLmdldChzY29wZS52aWV3UGFyZW50LlZhcmlhYmxlcywgcGFydHNbMV0pO1xuICAgIH1cbiAgICBpZiAoaXNCb3VuZFRvV2lkZ2V0KSB7XG4gICAgICAgIGNvbnN0IHdpZGdldFNjb3BlID0gXy5nZXQoc2NvcGUudmlld1BhcmVudC5XaWRnZXRzLCBwYXJ0c1sxXSk7XG4gICAgICAgIGNvbnN0IHdpZGdldERhdGFzZXRCb3VuZEV4cHIgPSB3aWRnZXRTY29wZS4kYXR0cnMuZ2V0KCdkYXRhc2V0Ym91bmRleHByJyk7XG4gICAgICAgIGxldCB3aWRnZXRCb3VuZEV4cHJlc3Npb247XG4gICAgICAgIHdpZGdldEJvdW5kRXhwcmVzc2lvbiA9ICghd2lkZ2V0U2NvcGUuZGF0YXNvdXJjZSAmJiB3aWRnZXREYXRhc2V0Qm91bmRFeHByKSA/IHdpZGdldERhdGFzZXRCb3VuZEV4cHIgOiB3aWRnZXRTY29wZS5iaW5kZGF0YXNldDtcbiAgICAgICAgcmV0dXJuIGdldERhdGFzb3VyY2VGcm9tRXhwcih3aWRnZXRCb3VuZEV4cHJlc3Npb24sIHdpZGdldFNjb3BlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHRvIGdldCBkYXRhc2V0IGJvdW5kIGV4cHJlc3Npb24gZnJvbSBsaXN0IGN1cnJlbnRpdGVtIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBleHByIC0gYm91bmQgZGF0YXNldCBleHByZXNzaW9uXG4gKiBAcGFyYW0gc2NvcGUgLSBzY29wZSBvZiB0aGUgd2lkZ2V0XG4gKiBFeGFtcGxlMTogZXhwciAtIFwiV2lkZ2V0cy5saXN0MS5jdXJyZW50SXRlbS5kZXRhaWxzXCIgYW5kIGxpc3QxIGlzIGJvdW5kIHRvIFwiVmFyaWFibGVzLnN0YXRpY1ZhcjEuZGF0YVNldFwiIHRoZW4gaXQgcmV0dXJucyBleHByZXNzaW9uIGFzIFwiVmFyaWFibGVzLnN0YXRpY1ZhcjEuZGF0YVNldFskaV0uZGV0YWlsc1wiXG4gKi9cbmV4cG9ydCBjb25zdCBleHRyYWN0Q3VycmVudEl0ZW1FeHByID0gKGV4cHIsIHNjb3BlKSA9PiB7XG4gICAgY29uc3QgY3VycmVudEl0ZW1SZWdFeCA9IC9eV2lkZ2V0c1xcLi4qXFwuY3VycmVudEl0ZW0vZztcbiAgICBpZiAoY3VycmVudEl0ZW1SZWdFeC50ZXN0KGV4cHIpKSB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gZXhwci5zcGxpdCgnLicpO1xuICAgICAgICBjb25zdCB3aWRnZXRTY29wZSA9IF8uZ2V0KHNjb3BlLnZpZXdQYXJlbnQuV2lkZ2V0cywgcGFydHNbMV0pO1xuICAgICAgICBjb25zdCB3aWRnZXREYXRhc2V0Qm91bmRFeHByID0gd2lkZ2V0U2NvcGUuJGF0dHJzLmdldCgnZGF0YXNldGJvdW5kZXhwcicpO1xuICAgICAgICBpZiAoIXdpZGdldFNjb3BlLmRhdGFzb3VyY2UgJiYgd2lkZ2V0RGF0YXNldEJvdW5kRXhwcikge1xuICAgICAgICAgICAgZXhwciA9IGV4cHIucmVwbGFjZSgvXldpZGdldHNcXC4uKlxcLmN1cnJlbnRJdGVtL2csIGAke3dpZGdldERhdGFzZXRCb3VuZEV4cHJ9WyRpXWApO1xuICAgICAgICAgICAgcmV0dXJuIGV4dHJhY3RDdXJyZW50SXRlbUV4cHIoZXhwciwgc2NvcGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXhwciA9IGV4cHIucmVwbGFjZSgvXldpZGdldHNcXC4uKlxcLmN1cnJlbnRJdGVtL2csIGAke3dpZGdldFNjb3BlLmJpbmRkYXRhc2V0fVskaV1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXhwcjtcbn07XG5cbi8vIHRoaXMgd2lsbCBhZGQgdGhlIGh0bWwgdGFnIHRvIHRoZSB3aWRnZXQgdG8gc2NvcGUgdGhlIGNzcyB0byB0aGUgcGFnZS5cbmV4cG9ydCBjb25zdCBmaW5kUm9vdENvbnRhaW5lciA9ICgkZWwpID0+IHtcbiAgICBsZXQgcm9vdCA9ICRlbC5jbG9zZXN0KCcuYXBwLXByZWZhYicpO1xuICAgIGlmICghcm9vdC5sZW5ndGgpIHtcbiAgICAgICAgcm9vdCA9ICRlbC5jbG9zZXN0KCcuYXBwLXBhcnRpYWwnKTtcbiAgICB9XG4gICAgaWYoIXJvb3QubGVuZ3RoKSB7XG4gICAgICAgIHJvb3QgPSAkZWwuY2xvc2VzdCgnLmFwcC1zcGEtcGFnZScpO1xuICAgIH1cbiAgICBpZiAoIXJvb3QubGVuZ3RoKSB7XG4gICAgICAgIHJvb3QgPSAkZWwuY2xvc2VzdCgnLmFwcC1wYWdlJyk7XG4gICAgfVxuICAgIHJldHVybiByb290Lmxlbmd0aCAmJiByb290LnBhcmVudCgpWzBdLnRhZ05hbWU7XG59O1xuXG5leHBvcnQgY29uc3QgVkFMSURBVE9SID0ge1xuICAgIFJFUVVJUkVEOiAncmVxdWlyZWQnLFxuICAgIE1BWENIQVJTOiAnbWF4Y2hhcnMnLFxuICAgIE1JTlZBTFVFOiAnbWludmFsdWUnLFxuICAgIE1BWFZBTFVFOiAnbWF4dmFsdWUnLFxuICAgIFJFR0VYUDogJ3JlZ2V4cCcsXG4gICAgTUlOREFURTogJ21pbmRhdGUnLFxuICAgIE1BWERBVEU6ICdtYXhkYXRlJyxcbiAgICBNSU5USU1FOiAnbWludGltZScsXG4gICAgTUFYVElNRTogJ21heHRpbWUnLFxuICAgIEVYQ0xVREVEQVRFUzogJ2V4Y2x1ZGVkYXRlcycsXG4gICAgRVhDTFVERURBWVM6ICdleGNsdWRlZGF5cydcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1GaWxlVVJJID0gKHVybCkgPT4ge1xuICAgIGlmIChfLmlzU3RyaW5nKHVybCkgJiYgaGFzQ29yZG92YSgpICYmIHVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykpIHtcbiAgICAgICAgaWYgKGlzSW9zKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB1cmwucmVwbGFjZSgnZmlsZTovLycsICcvX2FwcF9maWxlXycpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQW5kcm9pZCgpICYmIGxvY2F0aW9uLmhyZWYuc3RhcnRzV2l0aCgnaHR0cCcpKSB7XG4gICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoY29yZG92YS5maWxlLmFwcGxpY2F0aW9uRGlyZWN0b3J5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1cmwucmVwbGFjZShjb3Jkb3ZhLmZpbGUuYXBwbGljYXRpb25EaXJlY3RvcnkgKyAnd3d3JywgJycpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh1cmwuc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKCdmaWxlOi8vJywgJy9fYXBwX2ZpbGVfJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVybDtcbn07XG5cbmV4cG9ydCBjb25zdCBhcHBlbmRTY3JpcHRUb0hlYWQgPSAoY2FsbGJhY2spID0+e1xuXG4gICAgY29uc3Qgc2NyaXB0ZWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgc2NyaXB0ZWxlLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgY2FsbGJhY2soV01fQ1VTVE9NX0ZPUk1BVFRFUlMpO1xuICAgIH07XG4gICAgc2NyaXB0ZWxlLm9uZXJyb3IgPSBlcnIgPT4ge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0Vycm9yIHdoaWxlIGxvYWRpbmcgdGhlIGZpbGUgJyArIHNjcmlwdGVsZS5zcmMgKyAnXFxuJyArIGVycik7XG4gICAgfTtcbiAgICBzY3JpcHRlbGUudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgIHNjcmlwdGVsZS5zcmMgPSAnLi9leHRlbnNpb25zL2Zvcm1hdHRlcnMuanMnO1xuICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0ZWxlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBcHBTZXR0aW5nID0gKGtleSwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gICAgcmV0dXJuIChfV01fQVBQX1BST1BFUlRJRVMuZXh0cmFfc2V0dGluZ3MgJiYgXy5nZXQoX1dNX0FQUF9QUk9QRVJUSUVTLmV4dHJhX3NldHRpbmdzLCBrZXkpKSB8fCBkZWZhdWx0VmFsdWU7XG59O1xuXG4vKiB0aGlzIGZ1bmN0aW9uIHNldHMgdGhlIGl0ZW1jbGFzcyBkZXBlbmRpbmcgb24gaXRlbXNwZXJyb3cuXG4gICAqIGlmIGl0ZW1zcGVycm93IGlzIDIgZm9yIGxhcmdlIGRldmljZSwgdGhlbiBpdGVtY2xhc3MgaXMgJ2NvbC14cy0xIGNvbC1zbS0xIGNvbC1sZy0yJ1xuICAgKiBpZiBpdGVtc3BlcnJvdyBpcyAnbGctMycgdGhlbiBpdGVtY2xhc3MgaXMgJ2NvbC1sZy0zJ1xuKi9cbmV4cG9ydCBjb25zdCBzZXRMaXN0Q2xhc3MgPSAoc2NvcGUpID0+IHtcbiAgICBsZXQgdGVtcCA9ICcnO1xuICAgIGlmIChzY29wZS5pdGVtc3BlcnJvdykge1xuICAgICAgICBpZiAoaXNOYU4ocGFyc2VJbnQoc2NvcGUuaXRlbXNwZXJyb3csIDEwKSkpIHtcbiAgICAgICAgICAgIC8vIGhhbmRsaW5nIGl0ZW1zcGVycm93IGNvbnRhaW5pbmcgc3RyaW5nIG9mIGNsYXNzZXNcbiAgICAgICAgICAgIF8uc3BsaXQoc2NvcGUuaXRlbXNwZXJyb3csICcgJykuZm9yRWFjaCgoY2xzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gXy5zcGxpdChjbHMsICctJyk7XG4gICAgICAgICAgICAgICAgY2xzID0gYCR7a2V5c1swXX0tJHsoMTIgLyBwYXJzZUludChrZXlzWzFdLCAxMCkpfWA7XG4gICAgICAgICAgICAgICAgdGVtcCArPSBgIGNvbC0ke2Nsc31gO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzY29wZS5pdGVtc1BlclJvd0NsYXNzID0gdGVtcC50cmltKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBoYW5kbGluZyBpdGVtc3BlcnJvdyBoYXZpbmcgaW50ZWdlciB2YWx1ZS5cbiAgICAgICAgICAgIHNjb3BlLml0ZW1zUGVyUm93Q2xhc3MgPSBgY29sLXhzLSR7KDEyIC8gcGFyc2VJbnQoc2NvcGUuaXRlbXNwZXJyb3csIDEwKSl9YDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIElmIGl0ZW1zcGVycm93IGlzIG5vdCBzcGVjaWZpZWQgbWFrZSBpdCBmdWxsIHdpZHRoXG4gICAgICAgIHNjb3BlLml0ZW1zUGVyUm93Q2xhc3MgPSAnY29sLXhzLTEyJztcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZmluZFBhcmVudCA9IChsVmlldzogYW55LCB2aWV3UGFyZW50QXBwPzogYW55KSA9PiB7XG4gICAgbGV0IHBhcmVudCA9IGZpbmRWaWV3UGFyZW50KGxWaWV3KTtcbiAgICByZXR1cm4gcGFyZW50ID8gcGFyZW50IDogdmlld1BhcmVudEFwcDtcbn1cblxuZXhwb3J0IGNvbnN0IGZpbmRWaWV3UGFyZW50ID0gKGxWaWV3OiBhbnkpID0+IHtcbiAgICByZXR1cm4gbFZpZXdbMTVdID8gbFZpZXdbMTVdWzhdIDogbFZpZXdbMTVdO1xuICAgIC8qaWYobFZpZXdbM10gPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGxWaWV3WzhdO1xuICAgIH1cbiAgICBsZXQgcGFyZW50bFZpZXcgPSBsVmlld1szXTtcbiAgICBpZih0eXBlb2YgbFZpZXdbMV0gPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgIHJldHVybiBmaW5kVmlld1BhcmVudChwYXJlbnRsVmlldyk7XG4gICAgfVxuICAgIGxldCBjb21wb25lbnRUeXBlID0gbFZpZXdbMV1bXCJ0eXBlXCJdO1xuICAgIGlmKGNvbXBvbmVudFR5cGUgPT09IDAgfHwgY29tcG9uZW50VHlwZSA9PT0gMSkge1xuICAgICAgICBsZXQgcCA9IGxWaWV3WzhdO1xuICAgICAgICAvLyB0cy1pZ25vcmVcbiAgICAgICAgaWYocC5oYXNPd25Qcm9wZXJ0eShcImlzRGlhbG9nQ29tcG9uZW50XCIpIHx8IHAuaGFzT3duUHJvcGVydHkoXCJpc0NvbnRhaW5lckRpcmVjdGl2ZVwiKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbmRWaWV3UGFyZW50KHBhcmVudGxWaWV3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBwO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZpbmRWaWV3UGFyZW50KHBhcmVudGxWaWV3KTtcbiAgICB9Ki9cbn1cblxuLypleHBvcnQgY29uc3QgZ2V0UGFyZW50ID0gKHBhcmVudDogYW55KSA9PiB7XG4gICAgaWYocGFyZW50Lmhhc093blByb3BlcnR5KFwiaXNEeW5hbWljQ29tcG9uZW50XCIpIHx8IHBhcmVudC5oYXNPd25Qcm9wZXJ0eShcImlzUGFnZUNvbXBvbmVudFwiKSkge1xuICAgICAgICByZXR1cm4gcGFyZW50XG4gICAgfSBlbHNle1xuICAgICAgICByZXR1cm4gcGFyZW50LnZpZXdQYXJlbnQgPyBnZXRQYXJlbnQocGFyZW50LnZpZXdQYXJlbnQpIDogcGFyZW50O1xuICAgIH1cblxufSovXG4iXX0=
|
|
1464
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL3NyYy91dGlscy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTdCLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBRS9ELE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzdDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQztBQUM5QixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUNILE9BQU8sRUFDUCxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFDM0IsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUM5QixRQUFRLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUNoRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFDN0IsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLEVBQUUsUUFBUSxFQUNsQixXQUFXLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLElBQUksRUFBRSxPQUFPLElBQUksUUFBUSxFQUNoRSxLQUFLLEVBQ0wsVUFBVSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUNyQyxNQUFNLFdBQVcsQ0FBQztBQVluQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQztBQUM3QyxNQUFNLEtBQUssR0FBRztJQUNWLFVBQVUsRUFBRSxRQUFRO0lBQ3BCLE9BQU8sRUFBRSxVQUFVO0lBQ25CLE1BQU0sRUFBRSxTQUFTO0lBQ2pCLElBQUksRUFBRSxPQUFPO0lBQ2IsSUFBSSxFQUFFLE9BQU87SUFDYixHQUFHLEVBQUUsTUFBTTtJQUNQLFFBQVEsRUFBRSxXQUFXO0lBQ3pCLGNBQWMsRUFBRSwyREFBMkQ7SUFDM0UsTUFBTSxFQUFFLFNBQVM7SUFDakIsT0FBTyxFQUFFLGdCQUFnQjtJQUN6QixzQkFBc0IsRUFBRSxpREFBaUQ7SUFDekUscUJBQXFCLEVBQUUsOEdBQThHO0lBQ3JJLHNCQUFzQixFQUFFLG9DQUFvQztJQUM1RCxzQkFBc0IsRUFBRSx5Q0FBeUM7SUFDakUsa0JBQWtCLEVBQUUsbUNBQW1DO0lBQ3ZELHNCQUFzQixFQUFFLG9CQUFvQjtJQUM1QyxXQUFXLEVBQUUsdURBQXVEO0lBQ3BFLGFBQWEsRUFBRSw4RUFBOEU7SUFDN0YsbUJBQW1CLEVBQUUsNEVBQTRFO0lBQ2pHLGtCQUFrQixFQUFFLG1EQUFtRDtJQUN2RSxlQUFlLEVBQUUsaUJBQWlCO0lBQ2xDLFFBQVEsRUFBRSxTQUFTO0lBQ25CLFFBQVEsRUFBRSxTQUFTO0lBQ25CLGlCQUFpQixFQUFFLFdBQVc7SUFDOUIsd0JBQXdCLEVBQUUsU0FBUztJQUNuQyxVQUFVLEVBQUUsaUJBQWlCO0lBQzdCLGNBQWMsRUFBRSwwQkFBMEI7SUFDMUMsa0JBQWtCLEVBQUUsaUJBQWlCO0lBQ3JDLHFCQUFxQixFQUFFLG1HQUFtRztJQUMxSCxnQkFBZ0IsRUFBRSw0REFBNEQ7SUFDOUUsUUFBUSxFQUFFLDJHQUEyRztJQUNySCxlQUFlLEVBQUUsc0VBQXNFO0NBQzFGLEVBQ0csa0JBQWtCLEdBQUcsR0FBRyxDQUFDO0FBRTdCLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQzFLLE1BQU0sR0FBRyxHQUFTLElBQUksSUFBSSxFQUFFLENBQUM7QUFDN0IsTUFBTSxZQUFZLEdBQUcsY0FBYyxDQUFDO0FBSXBDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLFdBQVcsS0FBSyxPQUFPLENBQUMsQ0FBQztBQUV2RCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQztBQUVqRSxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxHQUFHLEVBQUUsUUFBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUV2SCxTQUFTLE1BQU07SUFDWCxPQUFPLE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRTtJQUNyQixPQUFPLE1BQU0sRUFBRSxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN2RSxDQUFDLENBQUM7QUFHRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFFN0QsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFFbkgsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzNELE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN2RCxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsR0FBRyxFQUFFO0lBQ3ZCLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25OLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxNQUFNLEVBQUUsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUU5RCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLGNBQWMsRUFBRSxlQUFlLEVBQUUsRUFBRTtJQUN0RSxNQUFNLEtBQUssR0FBRyxjQUFjLElBQUksUUFBUSxDQUFDO0lBQ3pDLE1BQU0sTUFBTSxHQUFHLGVBQWUsSUFBSSxRQUFRLENBQUM7SUFDM0MsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLHNDQUFzQyxHQUFDLEtBQUssR0FBQyw0QkFBNEIsR0FBQyxLQUFLLEdBQUMsNkJBQTZCLEdBQUMsTUFBTSxHQUFDLDZCQUE2QixHQUFDLE1BQU0sR0FBQyxvQkFBb0IsR0FBQyxLQUFLLEdBQUMsb0JBQW9CLEdBQUMsS0FBSyxHQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUMxUCxDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxDQUFDLGNBQWMsRUFBRSxlQUFlLEVBQUUsRUFBRTtJQUNyRSxNQUFNLE1BQU0sR0FBRyxjQUFjLElBQUksUUFBUSxDQUFDO0lBQzFDLE1BQU0sS0FBSyxHQUFHLGVBQWUsSUFBSSxRQUFRLENBQUM7SUFDMUMsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLHNDQUFzQyxHQUFDLEtBQUssR0FBQyw0QkFBNEIsR0FBQyxLQUFLLEdBQUMsNkJBQTZCLEdBQUMsTUFBTSxHQUFDLDZCQUE2QixHQUFDLE1BQU0sR0FBQyxvQkFBb0IsR0FBQyxLQUFLLEdBQUMsb0JBQW9CLEdBQUMsS0FBSyxHQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUMxUCxDQUFDLENBQUE7QUFFRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLElBQUksS0FBSyxFQUFFLElBQUksZUFBZSxFQUFFLElBQUksQ0FBQyxDQUFDLDRCQUE0QixDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUV4SCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFO0lBQ3pCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBQ3pELE9BQU8sS0FBSyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQztBQUMzRCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsR0FBRyxFQUFFLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxZQUFZLEtBQUssUUFBUSxJQUFJLHNCQUFzQixFQUFFLENBQUMsSUFBSSxLQUFLLGFBQWEsQ0FBQztBQUV2SSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLEVBQUU7SUFDbEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO0lBQ3RGLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNqQyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLElBQUksUUFBUSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBRTNGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsR0FBVyxFQUFVLEVBQUU7SUFDN0MsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2IsMkJBQTJCO1FBQzNCLEdBQUcsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLG1EQUFtRDtRQUNuRCxHQUFHLEdBQUcsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7U0FBTSxDQUFDO1FBQ0osR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDLENBQUM7QUFFRjs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLEdBQVcsRUFBVSxFQUFFO0lBQ25ELElBQUksV0FBVyxFQUFFLGFBQWEsR0FBRyxFQUFFLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxDQUFDO0lBQzlELEtBQUssR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pCLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDYixLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ1gsaUJBQWlCLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6QyxxQ0FBcUM7UUFDckMsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1lBQ3BCLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDM0MsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEtBQUs7Z0JBQy9CLElBQUksaUJBQWlCLENBQUM7Z0JBQ3RCLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFDekUsU0FBUyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUM5QixVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBRXJDLDBHQUEwRztnQkFDMUcsSUFBSSxVQUFVLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNyQyxJQUFJLENBQUM7d0JBQ0QsaUJBQWlCLEdBQUcsa0JBQWtCLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ3ZELENBQUM7b0JBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQzt3QkFDVCxpQkFBaUIsR0FBRyxVQUFVLENBQUM7b0JBQ25DLENBQUM7b0JBQ0QsYUFBYSxJQUFJLFNBQVMsR0FBRyxHQUFHLEdBQUcsa0JBQWtCLENBQUMsaUJBQWlCLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBQ25GLENBQUM7cUJBQU0sQ0FBQztvQkFDSixhQUFhLElBQUksU0FBUyxHQUFHLEdBQUcsQ0FBQztnQkFDckMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ0gsYUFBYSxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0MsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDeEQsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUMsQ0FBQztBQUVGLHNEQUFzRDtBQUN0RCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEVBQUU7SUFDM0IsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1IsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQyxDQUFDO0FBRUYsMERBQTBEO0FBQzFELE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsRUFBRTtJQUNoQyxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztRQUM5QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsVUFBVSxNQUFNLEVBQUUsR0FBRztRQUN2RCxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUNyQyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQztBQUVGLCtDQUErQztBQUMvQyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUVySSx5REFBeUQ7QUFDekQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxFQUFFO0lBQ2pDLElBQUksUUFBUSxDQUFDO0lBQ2IsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsSUFBSSxRQUFRLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNsQixJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksRUFBRSxRQUFRLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDOUUsSUFBSSxHQUFHLFNBQVMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLEVBQUU7SUFDakMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QixpQ0FBaUM7SUFDakMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QiwrQ0FBK0M7SUFDL0MsS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3Qix5REFBeUQ7SUFDekQsS0FBSyxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixPQUFPLEtBQUssQ0FBQztBQUNqQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxJQUFJLEVBQUUsRUFBRTtJQUNoQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JDLENBQUMsQ0FBQztBQUVGLG9GQUFvRjtBQUNwRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxLQUFLLEVBQUUsU0FBUyxHQUFHLEdBQUcsRUFBRSxFQUFFO0lBQ3JELElBQUksYUFBYSxFQUFFLFVBQVUsR0FBRyxFQUFFLENBQUM7SUFFbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2xCLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxhQUFhLEdBQUcsR0FBRyxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUMvQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDekMsQ0FBQyxDQUFDO0FBRUY7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLEdBQVcsRUFBVyxFQUFFO0lBRTdELE1BQU0sTUFBTSxHQUFzQixRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzlELE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBRWxCLDREQUE0RDtJQUM1RCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDekIsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELDhFQUE4RTtJQUM5RSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDM0IsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDO1FBQzlDLE9BQU8sTUFBTSxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUM7SUFDdEUsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFDO0FBQ2pCLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxHQUFXLEVBQUUsVUFBa0IsRUFBRSxVQUFXLEVBQVcsRUFBRTtJQUN0RixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDUCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxHQUFHLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFFbEUsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxFQUFFO0lBQ3hELElBQUksR0FBRyxDQUFDO0lBQ1I7Ozs7T0FJRztJQUNILEdBQUcsR0FBRyxPQUFPLENBQUM7UUFFVixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ25ELE9BQU8sT0FBTyxTQUFTLFlBQVksU0FBUyxLQUFLLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2IsTUFBTSxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLEdBQUcsUUFBUSxZQUFZLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDcEUsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckIsQ0FBQyxDQUFDLENBQUM7SUFDSDs7O09BR0c7SUFDSCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2YsR0FBRyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUYsK0JBQStCO0FBQy9CLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLFFBQVEsRUFBRSxFQUFFO0lBQ3BDLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDekQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUU7SUFDcEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN6RCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRTtJQUNwQyxPQUFPLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3pELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQVcsRUFBVyxFQUFFO0lBQ2xELE9BQU8sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNDLENBQUMsQ0FBQztBQUVGLG9GQUFvRjtBQUNwRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRTtJQUN4QyxJQUFJLGFBQWEsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQzNCLDBCQUEwQjtRQUMxQiw4REFBOEQ7SUFDbEUsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUVGLDBEQUEwRDtBQUMxRCxNQUFNLFVBQVUsU0FBUyxDQUFDLEVBQUUsRUFBRSxHQUFHLE9BQU87SUFDcEM7O1FBRUk7SUFFSixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDZCxNQUFNLEdBQUcsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDNUQsS0FBSyxLQUFLLEVBQUUsS0FBSyxHQUFHLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztBQUNMLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUyxFQUFFLGVBQWdCLEVBQUUsa0JBQW1CLEVBQUUsWUFBYSxFQUFPLEVBQUU7SUFDaEksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ1gsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUNELElBQUksTUFBTSxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJLE1BQU0sS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUNuQixPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzNDLENBQUM7SUFFRCxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ1gsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3hGLElBQUksa0JBQWtCLEVBQUcsQ0FBQyxDQUFDLHFHQUFxRztZQUM1SCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUNELElBQUksZUFBZSxLQUFLLGVBQWUsRUFBRSxDQUFDO1lBQ3RDLE9BQU8sR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDbkQsT0FBTyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hELENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFlBQVksQ0FBQyxDQUFDO0FBQ3ZFLENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsT0FBTyxFQUFFLEVBQUU7SUFDcEMsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRO1FBQUUsT0FBTztJQUN4QyxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNyRCxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0FBQ0wsQ0FBQyxDQUFBO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFLLEVBQUUsT0FBUSxFQUFFLFFBQVMsRUFBUSxFQUFFO0lBQzNELHdCQUF3QjtJQUN4QixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDaEUsaUVBQWlFO1FBQ2pFLE1BQU0sY0FBYyxHQUFHLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzNILE1BQU0sT0FBTyxHQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDekYsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVELHVEQUF1RDtJQUN2RCxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCw4REFBOEQ7SUFDOUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2hCLEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLEtBQUssS0FBSyxFQUFFLElBQUksS0FBSyxLQUFLLElBQUksSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDcEYsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUNELElBQUksT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCOzs7OztPQUtHO0lBQ0gsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNsQjs7OztVQUlFO1FBRUYsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQUEsQ0FBQztJQUN2SCxDQUFDO0lBRUQsSUFBSSxLQUFLLEtBQUssWUFBWSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3BELE9BQU8sR0FBRyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDO0FBQ25CLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQUMsUUFBaUIsRUFBRSxjQUF1QixFQUFFLGFBQXNCLEVBQUUsU0FBUyxFQUFFLCtCQUErQixFQUFFLFNBQVMsRUFBRSxJQUFnQixFQUFFLFNBQVMsR0FBRyxLQUFLLEVBQUUsRUFBRTtJQUN4TSxNQUFNLE9BQU8sR0FBWSxRQUFRLENBQUM7SUFDbEMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUM1QixJQUFJLGNBQWMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLGNBQWMsS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUMvRixPQUFPO1FBQ1gsQ0FBQztRQUNELElBQUksYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUUsQ0FBQztnQkFDbEUsT0FBTztZQUNYLENBQUM7WUFDRCxPQUFPLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUNqRSxPQUFPO1FBQ1gsQ0FBQztRQUNELElBQUksSUFBSSw0QkFBb0IsRUFBRSxDQUFDO1lBQzNCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3JFLENBQUM7UUFDRCxTQUFTLEVBQUUsQ0FBQztJQUNoQixDQUFDLENBQUM7SUFDRixPQUFPLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM5RCxNQUFNLG1CQUFtQixHQUFHLEdBQUcsRUFBRTtRQUM3QixPQUFPLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNyRSxDQUFDLENBQUM7SUFDRixPQUFPLG1CQUFtQixDQUFDO0FBQy9CLENBQUMsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRTtJQUN0QyxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM3QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxFQUFFO0lBQ3BELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2xFLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELENBQUMsQ0FBQztBQUVGLHdDQUF3QztBQUN4QyxTQUFTLE1BQU07SUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvRSxDQUFDO0FBRUQsd0RBQXdEO0FBQ3hELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxHQUFHLEVBQUU7SUFDN0IsT0FBTyxNQUFNLEVBQUUsR0FBRyxHQUFHLEdBQUcsTUFBTSxFQUFFLEdBQUcsR0FBRyxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQ3RELENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUU7SUFDekQsSUFBSSxLQUFLLENBQUM7SUFFVixJQUFJLE9BQU8sSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUxQixLQUFLLEdBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFMUYsT0FBTyxZQUFZLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDOUQsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFO0lBQ3BDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNYLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFDRCxJQUFJLENBQUM7UUFDRCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLDZDQUE2QztRQUM3QyxPQUFPLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1QsbUVBQW1FO1FBQ25FLE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxTQUFTLEVBQUUsRUFBRTtJQUNuQyxNQUFNLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDN0csSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNyQyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1AsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBd0JHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFPLEVBQUUsRUFBRTtJQUU3QyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDZixPQUFPO0lBQ1gsQ0FBQztJQUVELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNWLE9BQU8sR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDO0lBRUQsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFDeEIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUVkLElBQUksY0FBYyxDQUFDO0lBRW5CLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtRQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsMERBQTBEO1lBQzNFLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDdEIsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsSUFBSSxPQUFPLENBQUM7UUFFWixPQUFPLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNyQixPQUFPLEdBQUcsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxvREFBb0Q7UUFDM0gsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUNqQixPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ2xCLElBQUksT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDNUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNYLE9BQU8sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3pCLENBQUM7UUFDTCxDQUFDO1FBQ0QsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUM7UUFDeEIsR0FBRyxHQUFHLE9BQU8sQ0FBQztJQUNsQixDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUY7Ozs7RUFJRTtBQUNGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxDQUFDLE9BQWUsRUFBVSxFQUFFO0lBQ25ELElBQUksSUFBSSxDQUFDO0lBQ1QsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ1gsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDO0lBQzNCLENBQUM7SUFDRCxJQUFJLEdBQUcsT0FBTyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNsRSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNsQyxJQUFJLEdBQUcsSUFBSSxLQUFLLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNsRSxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRixnRUFBZ0U7QUFDaEUsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsSUFBUyxFQUFXLEVBQUU7SUFDL0MsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRSxDQUFDLENBQUM7QUFFRixrREFBa0Q7QUFDbEQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBUSxFQUFXLEVBQUU7SUFDL0MsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNqQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDO0FBRUYsMElBQTBJO0FBQzFJLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFO0lBQ3ZDLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QixNQUFNLFlBQVksR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxDQUFDO0lBQzNDLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUNsRSxJQUFJLFdBQVcsRUFBRSxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN4QyxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2pELElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN6RCxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO1NBQU0sQ0FBQztRQUNKLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDVixHQUFHLEVBQUUsWUFBWTtZQUNqQixJQUFJLEVBQUUsQ0FBQztZQUNQLFFBQVEsRUFBRSxRQUFRO1NBQ3JCLENBQUMsQ0FBQztJQUNQLENBQUM7QUFDTCxDQUFDLENBQUE7QUFFRCx1RUFBdUU7QUFDdkUsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRTtJQUMzQyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMzQyxPQUFPLENBQ0gsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ2IsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ2QsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUM7UUFDNUUsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsQ0FDNUUsQ0FBQztBQUNOLENBQUMsQ0FBQTtBQUVELCtFQUErRTtBQUMvRSxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxHQUFRLEVBQVcsRUFBRTtJQUM1QyxNQUFNLFFBQVEsR0FBRztRQUNiLFNBQVMsRUFBRSxFQUFFO1FBQ2IsT0FBTyxFQUFFLElBQUk7UUFDYixNQUFNLEVBQUUsSUFBSTtRQUNaLFFBQVEsRUFBRSxDQUFDO1FBQ1gsa0JBQWtCLEVBQUUsRUFBRTtRQUN0QixNQUFNLEVBQUUsRUFBRTtRQUNWLE1BQU0sRUFBRSxJQUFJO1FBQ1osZUFBZSxFQUFFLEVBQUU7UUFDbkIsWUFBWSxFQUFFLENBQUM7S0FDbEIsQ0FBQztJQUNGLDRHQUE0RztJQUM1RyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEUsQ0FBQyxDQUFDO0FBRUY7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsVUFBb0IsRUFBRSxFQUFFO0lBQzNELElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQyxlQUFlLENBQUM7SUFDbEMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ1osT0FBTztJQUNYLENBQUM7SUFDRCxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2IsS0FBSyxHQUFHLGVBQWUsQ0FBQztJQUM1QixDQUFDO0lBRUQsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxVQUFVLEtBQUssRUFBRSxHQUFHO1FBQy9DLE9BQU8sR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN6QixDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQztBQUVGLHVDQUF1QztBQUN2QyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEVBQUU7SUFDakMsSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDdEIsSUFBSSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6SCxDQUFDLENBQUM7QUFFRixNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFO0lBQzlCLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBQ0QsT0FBTyxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7QUFDbEUsQ0FBQyxDQUFDO0FBRUYscUZBQXFGO0FBQ3JGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsR0FBRyxFQUFFLE9BQVEsRUFBRSxFQUFFO0lBQ2pELE1BQU0sZUFBZSxHQUFHLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sY0FBYyxHQUFHLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsRCwwRkFBMEY7SUFDMUYsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLFNBQVMsSUFBSSxRQUFRLENBQUMsZUFBZSxFQUFFLGNBQWMsQ0FBQyxFQUFFLENBQUM7UUFDNUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDM0MsSUFBSSxRQUFRLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQzFCLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUN4RCxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0QsTUFBTSxjQUFjLEdBQUcsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0gsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLElBQUkscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3JJLHdCQUF3QjtJQUN4QixJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEtBQUssV0FBVyxFQUFFLENBQUM7UUFDaEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQ3BDLDJDQUEyQztZQUMzQyxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUM7Z0JBQ1YsdUVBQXVFO2dCQUN2RSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3BELENBQUM7WUFDRCxHQUFHLEdBQUcsTUFBTSxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLENBQUM7YUFBTSxDQUFDO1lBQ0osR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDL0IsQ0FBQztRQUNELEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ2pDLDhFQUE4RTtRQUM5RSxpRkFBaUY7UUFDakYsSUFBSSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ1YsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN0RSxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBQ0QsOERBQThEO0lBQzlELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNkLEdBQUcsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzVCLENBQUM7U0FBTSxDQUFDO1FBQ0osa0hBQWtIO1FBQ2xILElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUM3QixHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO1FBRXZGLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUMzQyxDQUFDLENBQUM7QUFFRixrREFBa0Q7QUFDbEQsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxHQUFHLEVBQUUsT0FBUSxFQUFFLEVBQUU7SUFDakQsR0FBRyxHQUFHLGtCQUFrQixDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN2QyxPQUFPLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLENBQUMsQ0FBQztBQUdGOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsRUFBRSxjQUFlLEVBQUUsRUFBRTtJQUM1QyxJQUFJLEdBQUcsWUFBWSxJQUFJLEVBQUUsQ0FBQztRQUN0QixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFDRCxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEMsSUFBSSxPQUFPLElBQUksT0FBTyxZQUFZLE1BQU0sRUFBRSxDQUFDO1FBQ3ZDLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxjQUFjLElBQUksa0JBQWtCLEVBQUUsQ0FBQyxDQUFDO0lBQzlGLENBQUM7U0FBTSxDQUFDO1FBQ0osR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsY0FBYyxJQUFJLFlBQVksRUFBRSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxFQUFFO0lBQ3ZELHdEQUF3RDtJQUN4RCw2Q0FBNkM7SUFDN0MsSUFBSSxVQUFVLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFFeEUsVUFBVSxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFbkMsT0FBTyxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxFQUFFO1FBQzNDLE9BQU8sS0FBSyxDQUFDLFVBQVUsRUFBRSxVQUFVLEVBQUU7WUFDakMsSUFBSSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztZQUVsQiwrRUFBK0U7WUFDL0UsSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDekMsR0FBRyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekIsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLEdBQUcsR0FBRyxLQUFLLENBQUMsRUFBRSxFQUFFLGtCQUFrQixDQUFDLENBQUM7Z0JBQ3BDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25CLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdkIsQ0FBQztZQUVELE9BQU8sR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUM7QUFFRixNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7QUFFN0Qsd0RBQXdEO0FBQ3hELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUVyRSxvRUFBb0U7QUFDcEUsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsRUFBRTtJQUM1QixNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxDQUFDO0lBQzdDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDUCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEIsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLGdDQUFnQztBQUNoQyxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7SUFDeEMsSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzFCLE9BQU87SUFDWCxDQUFDO0lBQ0QsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUM1QyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztJQUNoQixnQ0FBZ0M7SUFDaEMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUNELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3ZDLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQ3RDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGLCtCQUErQjtBQUMvQixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxJQUFJLEdBQUcsRUFBRSxFQUFFLEVBQUU7SUFDekMsZ0VBQWdFO0lBQ2hFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdkIsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEIsQ0FBQztJQUNELElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDO0FBRUYsb0RBQW9EO0FBQ3BELE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsd0JBQXdCLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFFM0YsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsT0FBUSxFQUFFLEVBQUU7SUFDeEQsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNWLE9BQU8sSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxPQUFPLEVBQUUsRUFBQyxRQUFRLEVBQUUsUUFBUSxFQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ25ILENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsT0FBTyxFQUFFLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUMsQ0FBQztJQUM1RyxDQUFDO0FBQ0wsQ0FBQyxDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLEtBQUssRUFBRSxHQUFHLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxHQUFHLEtBQUssRUFBRSxFQUFFO0lBQ3pFLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN2QyxPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ25CLE9BQU8sSUFBSSxPQUFPLENBQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFDLEVBQUU7WUFDdkMsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM5QyxNQUFNLENBQUMsSUFBSSxHQUFHLGlCQUFpQixDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1lBQ2xCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUUsSUFBSTtnQkFDMUIsTUFBTSxDQUFDLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtvQkFDN0IsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRSxDQUFDO3dCQUNyRSxNQUFNLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDO3dCQUNqQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2xCLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDO1lBQ04sQ0FBQztpQkFBTSxDQUFDLENBQUUsZ0JBQWdCO2dCQUN0QixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtvQkFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNsQixDQUFDLENBQUM7WUFDTixDQUFDO1lBQ0QsTUFBTSxDQUFDLE9BQU8sR0FBRyxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9DLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDakUsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO1NBQU0sSUFBRyxTQUFTLEVBQUUsQ0FBQztRQUNsQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDVixRQUFRLEVBQUUsUUFBUTtZQUNsQixLQUFLLEVBQUUsSUFBSTtZQUNYLEdBQUcsRUFBRSxHQUFHO1NBQ1gsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQzthQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQyxDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7YUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDO2FBQzFCLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsS0FBSyxFQUFFLElBQUksR0FBRyxFQUFFLEVBQUUsZ0JBQWdCLEdBQUcsSUFBSSxFQUFFLEVBQUU7SUFDcEUsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNyQixNQUFNLFVBQVUsQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDN0IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLElBQUksZUFBZSxHQUFRLEVBQUUsQ0FBQztBQUVyQzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUU7SUFDaEQsSUFBSSxJQUFJLEdBQVEsTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRWxFLElBQUksSUFBSSxFQUFFLENBQUM7UUFDUCxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO1NBQU0sQ0FBQztRQUNKLElBQUksR0FBRyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztJQUVsQixNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM1RSxDQUFDLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBRyxHQUFHLENBQUMsRUFBRTtJQUN2QyxnREFBZ0Q7SUFDaEQsSUFBSSxJQUFJLEdBQUcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxjQUFjLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRWhHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDUCxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyQixDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUVyQzs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsUUFBUSxFQUFnQixFQUFFO0lBQ3BELE9BQU8sSUFBSSxPQUFPLENBQU0sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDeEMsd0NBQXdDO1FBQ3hDLHlCQUF5QixDQUFDLFFBQVEsRUFBRSxVQUFVLFNBQVM7WUFDbkQsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUk7Z0JBQ3pCLHNHQUFzRztnQkFDdEcsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUU7b0JBQ3BCLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFO3dCQUN0QyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUk7cUJBQ3BCLENBQUMsQ0FBQztvQkFDSCxPQUFPLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RCxDQUFDLENBQUM7Z0JBQ0YsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7Z0JBQ3hCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQyxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNmLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLEdBQUcsRUFBRTtJQUMzQixPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHO0lBQ3hCLGFBQWEsRUFBRSxVQUFVO0NBQzVCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsQ0FBQyxJQUFZLEVBQUUsU0FBaUIsT0FBTyxFQUFFLEVBQUU7SUFDL0QsSUFBSSxVQUFVLEVBQUUsSUFBSSxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDeEMsUUFBUSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDekIsQ0FBQztTQUFNLENBQUM7UUFDSixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM5QixDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsa0RBQWtEO0FBQ2xELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLFFBQVEsRUFBRSxHQUFXLEVBQUUsU0FBa0IsS0FBSyxFQUFFLE9BQVEsRUFBRSxLQUFNLEVBQWdCLEVBQUU7SUFDM0csT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDdkUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDaEQsQ0FBQyxDQUFDO0FBRUY7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFJLENBQWlCLEVBQWMsRUFBRTtJQUMxRCxJQUFJLENBQUMsWUFBWSxPQUFPLEVBQUUsQ0FBQztRQUN2QixPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQU0sQ0FBQyxDQUFDO0lBQ25DLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxFQUFhLEVBQUUsUUFBZ0IsRUFBRSxVQUFrQixFQUFFLGFBQWEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUU7SUFDOUgsSUFBSSxVQUFVLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLE1BQU0sS0FBSyxHQUFHLEdBQUcsRUFBRTtRQUNmLFVBQVUsRUFBRSxDQUFDO1FBQ2IsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUNqQixPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ2hCLENBQUM7SUFDTCxDQUFDLENBQUM7SUFDRixVQUFVLEdBQUcsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2RSxRQUFRLEdBQUcsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMvRCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ25DLE1BQU0sT0FBTyxHQUFHO1lBQ1osTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDO1lBQzFCLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osU0FBUyxDQUFVLGFBQWEsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsS0FBSztvQkFDcEQsSUFBSSxLQUFLLEtBQUssS0FBSyxJQUFJLENBQUMsQ0FBQyxVQUFVLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUM7d0JBQy9ELFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7b0JBQzlDLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7b0JBQ3BCLENBQUM7Z0JBQ0wsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzlCLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztRQUNqQixDQUFDLENBQUM7UUFDRixTQUFTLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxFQUFFO0lBQ2xDLE1BQU0sTUFBTSxHQUFRO1FBQ2hCLE9BQU8sRUFBRSxJQUFJO1FBQ2IsTUFBTSxFQUFFLElBQUk7UUFDWixPQUFPLEVBQUUsSUFBSTtRQUNiLE9BQU8sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO1FBQ2xCLFNBQVMsRUFBRSxLQUFLO0tBQ25CLENBQUM7SUFDRixNQUFNLENBQUMsT0FBTyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQzdDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO0lBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ0gsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsR0FBRyxFQUFFO1FBQ3hCLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QixNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUM1QixDQUFDLENBQUM7SUFDRixPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxZQUFvQixFQUFFLEtBQWEsRUFBRSxFQUFFO0lBQ2pFLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0MsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFlBQVksTUFBTSxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFO0lBQ2pDLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztJQUNsQiwyRUFBMkU7SUFDM0UsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2YsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQzFCLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDbkMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQztBQUNsQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFO0lBQ3pDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDZixJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUVyRixNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFO0lBQ3RCLE1BQU0sQ0FBQyxHQUFHO1FBQ04sT0FBTyxFQUFFLElBQUk7UUFDYixPQUFPLEVBQUUsSUFBSTtRQUNiLE1BQU0sRUFBRSxJQUFJO0tBQ2YsQ0FBQztJQUNGLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDeEMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDcEIsQ0FBQyxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLENBQUMsQ0FBQztBQUNiLENBQUMsQ0FBQztBQUVGOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFFLEVBQUUsQ0FBRSxFQUFFLEVBQUU7SUFDckQsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztJQUNqQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNYLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ1YsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsVUFBVSxFQUFFO1lBQzFCLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1QyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQztZQUNELFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDbkMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEUsQ0FBQztRQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDVCxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hCLENBQUM7SUFDTCxDQUFDO1NBQU0sQ0FBQztRQUNKLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNoQixDQUFDO0lBQ0QsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQ3JCLENBQUMsQ0FBQztBQUVGOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRTtJQUN4QyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsQ0FBQztRQUNwSCxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztBQUNsSSxDQUFDLENBQUM7QUFFRjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFO0lBQzdDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLHNCQUFzQixDQUFDLEtBQUssR0FBRyxDQUFDO0FBQzNFLENBQUMsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUyxFQUFFLEVBQUU7SUFDOUUsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDMUcsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUU5QixNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsRUFBRSxhQUFhLEVBQUUsRUFBRTtRQUMxQyxNQUFNLFFBQVEsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNoQyxJQUFJLENBQUMsTUFBTSxLQUFLLE1BQU0sSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzdGLE9BQU87WUFDWCxDQUFDO1lBQ0QsK0JBQStCO1lBQ2hDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDckMsQ0FBQztZQUNELGlGQUFpRjtZQUNqRixJQUFJLEdBQUcsQ0FBQyxNQUFNLEtBQUssYUFBYSxFQUFFLENBQUM7Z0JBQy9CLDBDQUEwQztnQkFDMUMsaUJBQWlCLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDN0Isa0NBQWtDO2dCQUNsQyxPQUFPLENBQUMsTUFBTSxFQUFFLFVBQVUsS0FBSyxFQUFFLE1BQU07b0JBQ25DLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7d0JBQ3pCLFFBQVEsRUFBRSxNQUFNO3dCQUNoQixPQUFPLEVBQUUsS0FBSzt3QkFDZCxXQUFXLEVBQUUsR0FBRyxDQUFDLFNBQVMsSUFBSSxpQkFBaUI7d0JBQy9DLFVBQVUsRUFBRSxLQUFLO3dCQUNqQixNQUFNLEVBQUUsRUFBRTtxQkFDYixDQUFDLENBQUM7Z0JBQ1AsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osaUNBQWlDO2dCQUNqQyxHQUFHLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDO1lBQ2hDLENBQUM7WUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUNoRCxDQUFDLENBQUE7UUFFRCxJQUFJLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ2hELGdEQUFnRDtZQUNoRCxTQUFTLENBQ0wsTUFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsK0JBQStCLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLEVBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsRUFBRSxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUMsQ0FBQyxDQUMzTyxDQUFDO1FBQ04sQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGLE1BQU0seUJBQXlCLEdBQUcsV0FBVyxDQUFDLEVBQUU7UUFDNUMsSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hDLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNsQix5QkFBeUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDekMsQ0FBQztxQkFBTSxDQUFDO29CQUNKLElBQUksU0FBUyxDQUFDLFNBQVMsS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDcEMsYUFBYSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztvQkFDNUMsQ0FBQztvQkFDRCxhQUFhLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUN0QyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBQ0YseUJBQXlCLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUU3QyxPQUFPLE9BQU8sQ0FBQztBQUNuQixDQUFDLENBQUM7QUFFRixxREFBcUQ7QUFDckQsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFO0lBQ3pDLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0MsT0FBTyxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFdBQVcsS0FBSyxNQUFNLEVBQUUsQ0FBQztRQUMxRCxNQUFNLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxpRkFBaUY7UUFDakYsSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDbkIsT0FBTztRQUNYLENBQUM7SUFDTCxDQUFDO0lBQ0QsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDekMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxHQUFHO0lBQzNDLE1BQU0sV0FBVyxHQUFHLGtDQUFrQyxDQUFDO0lBQ3ZELElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDaEI7OztZQUdJO1FBQ0osSUFBSSxVQUFVLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN2RCxPQUFPLEdBQUcsQ0FBQztRQUNmLENBQUM7UUFDRCxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxNQUFNLENBQUMsZUFBZSxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQy9ELENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixDQUFDLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxFQUFFO0lBQ25CLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7SUFDN0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUUzQixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaEQsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFO1FBQ2pCLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEIsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM5QixVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQztJQUVGLE1BQU0sYUFBYSxHQUFHLEdBQUcsQ0FBQyxFQUFFO1FBQ3hCLElBQUksS0FBSyxDQUFDO1FBQ1YsSUFBSSxLQUFLLENBQUM7UUFDVixNQUFNLE9BQU8sR0FBUSxJQUFJLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRTtZQUMxQyxLQUFLLEdBQUcsR0FBRyxDQUFDO1lBQ1osS0FBSyxHQUFHLEdBQUcsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBRXZCLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pDLENBQUMsQ0FBQztJQUVGLE9BQU8sVUFBVSxHQUFHO1FBQ2hCLElBQUksVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEIsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDN0IsQ0FBQztRQUVELElBQUksWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDcEIsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENBQUM7UUFFRCxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFbkIsTUFBTSxPQUFPLEdBQUc7WUFDWixRQUFRLEVBQUUsUUFBUTtZQUNsQixLQUFLLEVBQUUsSUFBSTtZQUNYLEdBQUc7U0FDTixDQUFDO1FBRUYsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFeEMsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFFTCxNQUFNLHVCQUF1QixHQUFHO0lBQzVCLElBQUksRUFBRSxZQUFZO0lBQ2xCLElBQUksRUFBRSxTQUFTO0lBQ2YsU0FBUyxFQUFFLHVCQUF1QjtJQUNsQyxRQUFRLEVBQUUsdUJBQXVCO0NBQ3BDLENBQUM7QUFDRiw2REFBNkQ7QUFDN0QsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFDLEVBQUU7SUFDM0MsT0FBTyx1QkFBdUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsRCxDQUFDLENBQUM7QUFFRixrSEFBa0g7QUFDbEgsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxPQUFvQixFQUFFLEVBQUU7SUFDdkQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDaEUsSUFBSSxPQUFPLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDekQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNsQixPQUFPLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUNELHdFQUF3RTtJQUN4RSxJQUFJLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ25DLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN2RixJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ1gsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQWdCLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ25ELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFnQixFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUN4RCxDQUFDO0lBQ0wsQ0FBQztJQUNELDJEQUEyRDtJQUMzRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUMsSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLFlBQVksSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxLQUFLLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDL0gsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFDcEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQWdCLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDN0QsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQWdCLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRjs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBSSxFQUFFLEVBQUU7SUFDNUUsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDO0lBQzFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtRQUM1QixNQUFNLDJCQUEyQixHQUFHLHlCQUF5QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdFLElBQUksMkJBQTJCLENBQUMsR0FBRyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3JDLDJCQUEyQixDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFDeEMsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPO1FBQ1gsQ0FBQztRQUNELHdCQUF3QixDQUFDLGFBQWEsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO0lBQ3pFLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBR0w7Ozs7Ozs7R0FPRztBQUNBLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQUMsYUFBYSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsR0FBSSxFQUFFLEVBQUU7SUFDakYsTUFBTSxjQUFjLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzNGLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDO0lBQ3pELE1BQU0sY0FBYyxHQUFHLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0lBQzFELE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUMxRCxJQUFJLE9BQU8sQ0FBQztJQUNaLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUMxQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDNUIsTUFBTSwyQkFBMkIsR0FBRyx5QkFBeUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUU3RSxJQUFJLGFBQWEsR0FBRyxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsY0FBYyxFQUFFLENBQUM7WUFDeEUsT0FBTyxHQUFHLFdBQVcsR0FBRyxjQUFjLENBQUM7WUFDdkMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxHQUFHLENBQUMsQ0FBQztZQUNoQixDQUFDO1lBQ0QsMkJBQTJCLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQztRQUM5QyxDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU87UUFDWCxDQUFDO1FBQ0Qsd0JBQXdCLENBQUMsYUFBYSxFQUFFLDJCQUEyQixDQUFDLENBQUM7SUFDekUsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDLENBQUM7QUFFSDs7Ozs7R0FLRztBQUNGLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLENBQUMsYUFBYSxFQUFFLDJCQUEyQixFQUFFLEVBQUU7SUFDbEYsTUFBTSxpQkFBaUIsR0FBRyxjQUFjLEdBQUcsMkJBQTJCLENBQUMsR0FBRyxHQUFHLE1BQU0sR0FBRywyQkFBMkIsQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDO0lBQ25JLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsZUFBZSxHQUFHLGlCQUFpQixDQUFDO0lBQzNELGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLGlCQUFpQixDQUFDO0lBQ3hELGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsV0FBVyxHQUFHLGlCQUFpQixDQUFDO0lBQ3ZELGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLGlCQUFpQixDQUFDO0lBQ3RELGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLGlCQUFpQixDQUFDO0FBQzFELENBQUMsQ0FBQztBQUVGOzs7R0FHRztBQUNGLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQUMsYUFBYSxFQUFFLEVBQUU7SUFDdkQsSUFBSSxPQUFPLGVBQWUsS0FBSyxXQUFXLEVBQUUsQ0FBQztRQUN6QyxPQUFPLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoRixDQUFDO0lBQ0QsT0FBTyxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDMUYsQ0FBQyxDQUFBO0FBRUwsMEJBQTBCO0FBQzFCLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFO0lBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzFDLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQzFFLE9BQU8sQ0FBQyxlQUFlLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUM3QixJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3BCLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUM5QixDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDO0FBRXhDOzs7O0dBSUc7QUFDSCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtJQUM3QyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ3pCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDL0IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUMvQixJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN0Qiw0REFBNEQ7WUFDNUQsS0FBSyxDQUFDLFlBQVksR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLDJCQUEyQixFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMvRSxDQUFDO0lBQ0QsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUNYLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxJQUFJLFVBQVUsS0FBSyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3ZFLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMzQyxRQUFRLEdBQUcsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1lBQ2xFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDakQsQ0FBQzthQUFNLENBQUM7WUFDSixRQUFRLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ25DLENBQUM7SUFDTCxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7SUFDakQsTUFBTSxpQkFBaUIsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ3pELE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDckQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM5QixJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDcEIsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUNELElBQUksZUFBZSxFQUFFLENBQUM7UUFDbEIsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELE1BQU0sc0JBQXNCLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMxRSxJQUFJLHFCQUFxQixDQUFDO1FBQzFCLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsVUFBVSxJQUFJLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO1FBQy9ILE9BQU8scUJBQXFCLENBQUMscUJBQXFCLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckUsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7SUFDbEQsTUFBTSxnQkFBZ0IsR0FBRyw0QkFBNEIsQ0FBQztJQUN0RCxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQzlCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUIsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELE1BQU0sc0JBQXNCLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMxRSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsSUFBSSxzQkFBc0IsRUFBRSxDQUFDO1lBQ3BELElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLDRCQUE0QixFQUFFLEdBQUcsc0JBQXNCLE1BQU0sQ0FBQyxDQUFDO1lBQ25GLE9BQU8sc0JBQXNCLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQy9DLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsNEJBQTRCLEVBQUUsR0FBRyxXQUFXLENBQUMsV0FBVyxNQUFNLENBQUMsQ0FBQztRQUN4RixDQUFDO0lBQ0wsQ0FBQztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUMsQ0FBQztBQUVGLHlFQUF5RTtBQUN6RSxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFO0lBQ3JDLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNmLElBQUksR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFDRCxJQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2QsSUFBSSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUNELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDZixJQUFJLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDbkQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHO0lBQ3JCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLFFBQVEsRUFBRSxVQUFVO0lBQ3BCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFlBQVksRUFBRSxjQUFjO0lBQzVCLFdBQVcsRUFBRSxhQUFhO0NBQzdCLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEdBQUcsRUFBRSxFQUFFO0lBQ3BDLElBQUksUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFVBQVUsRUFBRSxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUM3RCxJQUFJLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDVixPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2pELENBQUM7YUFBTSxJQUFJLFNBQVMsRUFBRSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDekQsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsRUFBRSxDQUFDO2dCQUNwRCxPQUFPLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDdEUsQ0FBQztpQkFBTSxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztnQkFDbkMsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUNqRCxDQUFDO1FBQ0wsQ0FBQztJQUNMLENBQUM7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsUUFBUSxFQUFFLEVBQUU7SUFFM0MsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuRCxTQUFTLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRTtRQUN2QixRQUFRLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNoQyxDQUFDLENBQUM7SUFDRixTQUFTLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxFQUFFO1FBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0JBQStCLEdBQUcsU0FBUyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDL0UsQ0FBQyxDQUFDO0lBQ0YsU0FBUyxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztJQUNuQyxTQUFTLENBQUMsR0FBRyxHQUFHLDRCQUE0QixDQUFDO0lBQzdDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3pDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLEdBQUcsRUFBRSxZQUFZLEVBQUUsRUFBRTtJQUMvQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsY0FBYyxJQUFJLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxZQUFZLENBQUM7QUFDOUcsQ0FBQyxDQUFDO0FBRUY7OztFQUdFO0FBQ0YsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7SUFDbEMsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ2QsSUFBSSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3pDLG9EQUFvRDtZQUNwRCxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFXLEVBQUUsRUFBRTtnQkFDbEQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDN0IsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUNuRCxJQUFJLElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUMxQixDQUFDLENBQUMsQ0FBQztZQUNILEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekMsQ0FBQzthQUFNLENBQUM7WUFDSiw2Q0FBNkM7WUFDN0MsS0FBSyxDQUFDLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxFQUFFLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2hGLENBQUM7SUFDTCxDQUFDO1NBQU0sQ0FBQyxDQUFDLHFEQUFxRDtRQUMxRCxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsV0FBVyxDQUFDO0lBQ3pDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsQ0FBQyxLQUFVLEVBQUUsYUFBbUIsRUFBRSxFQUFFO0lBQzFELElBQUksTUFBTSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuQyxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7QUFDM0MsQ0FBQyxDQUFBO0FBRUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBVSxFQUFFLEVBQUU7SUFDekMsT0FBTyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzVDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7T0FrQkc7QUFDUCxDQUFDLENBQUE7QUFFRDs7Ozs7OztHQU9HIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtnZXRXbVByb2plY3RQcm9wZXJ0aWVzfSBmcm9tICcuL3dtLXByb2plY3QtcHJvcGVydGllcyc7XG5cbmltcG9ydCB7JGFwcERpZ2VzdCwgJHdhdGNofSBmcm9tICcuL3dhdGNoZXInO1xuaW1wb3J0IHtEYXRhVHlwZX0gZnJvbSAnLi4vZW51bXMvZW51bXMnO1xuaW1wb3J0IHtEYXRhU291cmNlfSBmcm9tICcuLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge3NldEF0dHJ9IGZyb20gJy4vZG9tJztcbmltcG9ydCB7JHBhcnNlRXZlbnR9IGZyb20gJy4vZXhwcmVzc2lvbi1wYXJzZXInO1xuaW1wb3J0IHtcbiAgICBhdHRlbXB0LFxuICAgIGNhbWVsQ2FzZSwgY2xvbmVEZWVwLCBldmVyeSxcbiAgICBmaWx0ZXIsIGZvckVhY2gsIGdldCwgaWRlbnRpdHksXG4gICAgaW5jbHVkZXMsIGluZGV4T2YsIGludGVyc2VjdGlvbiwgaXNBcnJheSwgaXNEYXRlLFxuICAgIGlzRXF1YWwsIGlzRXF1YWxXaXRoLCBpc0Vycm9yLFxuICAgIGlzRnVuY3Rpb24sXG4gICAgaXNOdWxsLFxuICAgIGlzTnVtYmVyLCBpc1N0cmluZyxcbiAgICBpc1VuZGVmaW5lZCwga2V5cywgbWFwLCBub29wIGFzIF9ub29wLCBvbWl0LCByZXBsYWNlIGFzIF9yZXBsYWNlLFxuICAgIHNwbGl0LFxuICAgIHN0YXJ0c1dpdGgsIHRvTG93ZXIsIHRvVXBwZXIsIHRyaW1cbn0gZnJvbSBcImxvZGFzaC1lc1wiO1xuXG5kZWNsYXJlIGNvbnN0ICQ7XG5kZWNsYXJlIGNvbnN0IFgySlM7XG5kZWNsYXJlIGNvbnN0IG1vbWVudDtcbmRlY2xhcmUgY29uc3QgZG9jdW1lbnQ7XG5kZWNsYXJlIGNvbnN0IHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkw7XG5kZWNsYXJlIGNvbnN0IFdNX0NVU1RPTV9GT1JNQVRURVJTO1xuZGVjbGFyZSBjb25zdCBNU0NTU01hdHJpeDtcbmRlY2xhcmUgY29uc3QgX1dNX0FQUF9QUk9QRVJUSUVTO1xuZGVjbGFyZSBjb25zdCBjb3Jkb3ZhO1xuXG5jb25zdCB1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDtcbmNvbnN0IFJFR0VYID0ge1xuICAgIFNOQUtFX0NBU0U6IC9bQS1aXS9nLFxuICAgIEFORFJPSUQ6IC9BbmRyb2lkL2ksXG4gICAgSVBIT05FOiAvaVBob25lL2ksXG4gICAgSVBPRDogL2lQb2QvaSxcbiAgICBJUEFEOiAvaVBhZC9pLFxuICAgIE1BQzogL01hYy9pLFxuICAgICAgICBNQUNJTlRFTDogL01hY0ludGVsL2ksXG4gICAgQU5EUk9JRF9UQUJMRVQ6IC9hbmRyb2lkfGFuZHJvaWQgMy4wfHhvb218c2NoLWk4MDB8cGxheWJvb2t8dGFibGV0fGtpbmRsZS9pLFxuICAgIE1PQklMRTogL01vYmlsZS9pLFxuICAgIFdJTkRPV1M6IC9XaW5kb3dzIFBob25lL2ksXG4gICAgU1VQUE9SVEVEX0lNQUdFX0ZPUk1BVDogL1xcLihibXB8Z2lmfGpwZXxqcGd8anBlZ3x0aWZ8dGlmZnxwYm18cG5nfGljbykkL2ksXG4gICAgU1VQUE9SVEVEX0ZJTEVfRk9STUFUOiAvXFwuKHR4dHxqc3xjc3N8aHRtbHxzY3JpcHR8cHJvcGVydGllc3xqc29ufGphdmF8eG1sfHNtZHx4bWl8c3FsfGxvZ3x3c2RsfHZtfGZ0bHxqcnhtbHx5bWx8eWFtbHxtZHxsZXNzfGpzcCkkL2ksXG4gICAgU1VQUE9SVEVEX0FVRElPX0ZPUk1BVDogL1xcLihtcDN8b2dnfHdlYm18d21hfDNncHx3YXZ8bTRhKSQvaSxcbiAgICBTVVBQT1JURURfVklERU9fRk9STUFUOiAvXFwuKG1wNHxvZ2d8d2VibXx3bXZ8bXBlZ3xtcGd8YXZpfG1vdikkL2ksXG4gICAgUEFHRV9SRVNPVVJDRV9QQVRIOiAvXlxcL3BhZ2VzXFwvLipcXC4oanN8Y3NzfGh0bWx8anNvbikkLyxcbiAgICBNSU5fUEFHRV9SRVNPVVJDRV9QQVRIOiAvLioocGFnZS5taW4uaHRtbCkkLyxcbiAgICBWQUxJRF9FTUFJTDogL15bYS16QS1aXVtcXHcuK10rQFthLXpBLVpfXSs/XFwuW2EtekEtWi5dezEsNH1bYS16QS1aXSQvLFxuICAgIFZBTElEX1dFQl9VUkw6IC9eKGh0dHBbc10/OlxcL1xcLykod3d3XFwuKXswLDF9W2EtekEtWjAtOT06P1xcL1xcLlxcLV0rKFxcLlthLXpBLVpdezIsNX1bXFwuXXswLDF9KT8vLFxuICAgIFZBTElEX1dFQlNPQ0tFVF9VUkw6IC9eKHdzW3NdPzpcXC9cXC8pKHd3d1xcLil7MCwxfVthLXpBLVowLTk9Oj9cXC9cXC5cXC1dKyhcXC5bYS16QS1aXXsyLDV9W1xcLl17MCwxfSk/LyxcbiAgICBWQUxJRF9SRUxBVElWRV9VUkw6IC9eKD8hd3d3XFwufCg/Omh0dHB8ZnRwKXM/OlxcL1xcL3xbQS1aYS16XTpcXFxcfFxcL1xcLykuKi8sXG4gICAgUkVQTEFDRV9QQVRURVJOOiAvXFwkXFx7KFteXFx9XSspXFx9L2csXG4gICAgWklQX0ZJTEU6IC9cXC56aXAkL2ksXG4gICAgRVhFX0ZJTEU6IC9cXC5leGUkL2ksXG4gICAgTk9fUVVPVEVTX0FMTE9XRUQ6IC9eW14nfFwiXSokLyxcbiAgICBOT19ET1VCTEVfUVVPVEVTX0FMTE9XRUQ6IC9eW15cIl0qJC8sXG4gICAgVkFMSURfSFRNTDogLzxbYS16XVtcXHNcXFNdKj4vaSxcbiAgICBWQUxJRF9QQVNTV09SRDogL15bMC05YS16QS1aLV8uQCYqISMkJV0rJC8sXG4gICAgU1BFQ0lBTF9DSEFSQUNURVJTOiAvW15BLVowLTlhLXpfXSsvaSxcbiAgICBBUFBfU0VSVkVSX1VSTF9GT1JNQVQ6IC9eKGh0dHBbc10/OlxcL1xcLykod3d3XFwuKXswLDF9W2EtekEtWjAtOVxcLlxcLV0rKFs6XT9bMC05XXsyLDV9fFxcLlthLXpBLVpdezIsNX1bXFwuXXswLDF9KVxcLytbXj8jJj1dKyQvLFxuICAgIEpTT05fREFURV9GT1JNQVQ6IC9cXGR7NH0tWzAtMV1cXGQtWzAtM11cXGQoVFswLTJdXFxkOlswLTVdXFxkOlswLTVdXFxkLlxcZHsxLDN9WiQpPy8sXG4gICAgREFUQV9VUkw6IC9eXFxzKmRhdGE6KFthLXpdK1xcL1thLXowLTktKy5dKyg7W2Etei1dKz1bYS16MC05LV0rKT8pPyg7YmFzZTY0KT8sKFthLXowLTkhJCYnLCgpKis7PVxcLS5ffjpAXFwvPyVcXHNdKilcXHMqJC9pLFxuICAgIElTT19EQVRFX0ZPUk1BVDogLyhcXGR7NH0tXFxkezJ9LVxcZHsyfSlUKFxcZHsyfTpcXGR7Mn06XFxkezJ9KShcXC5cXGQrKT8oWystXVxcZHsyfTo/XFxkezJ9fFopJC9cbn0sXG4gICAgY29tcGFyZUJ5U2VwYXJhdG9yID0gJzonO1xuXG5jb25zdCBOVU1CRVJfVFlQRVMgPSBbJ2ludCcsIERhdGFUeXBlLklOVEVHRVIsIERhdGFUeXBlLkZMT0FULCBEYXRhVHlwZS5ET1VCTEUsIERhdGFUeXBlLkxPTkcsIERhdGFUeXBlLlNIT1JULCBEYXRhVHlwZS5CWVRFLCBEYXRhVHlwZS5CSUdfSU5URUdFUiwgRGF0YVR5cGUuQklHX0RFQ0lNQUxdO1xuY29uc3Qgbm93OiBEYXRlID0gbmV3IERhdGUoKTtcbmNvbnN0IENVUlJFTlRfREFURSA9ICdDVVJSRU5UX0RBVEUnO1xuXG5leHBvcnQgY29uc3QgZW51bSBFVkVOVF9MSUZFIHsgT05DRSwgV0lORE9XIH1cblxuZXhwb3J0IGNvbnN0IGlzRGVmaW5lZCA9IHYgPT4gJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiB2O1xuXG5leHBvcnQgY29uc3QgaXNPYmplY3QgPSB2ID0+IG51bGwgIT09IHYgJiYgJ29iamVjdCcgPT09IHR5cGVvZiB2O1xuXG5leHBvcnQgY29uc3QgdG9Cb29sZWFuID0gKHZhbCwgaWRlbnRpdHk/KSA9PiAoKHZhbCAmJiB2YWwgIT09ICdmYWxzZScpID8gdHJ1ZSA6IChpZGVudGl0eSA/IHZhbCA9PT0gaWRlbnRpdHkgOiBmYWxzZSkpO1xuXG5mdW5jdGlvbiBpc0lFMTEoKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5uYXZpZ2F0b3IuYXBwVmVyc2lvbi5pbmRleE9mKCdUcmlkZW50LycpID4gLTE7XG59XG5cbmV4cG9ydCBjb25zdCBpc0lFID0gKCkgPT4ge1xuICAgIHJldHVybiBpc0lFMTEoKSB8fCB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdNU0lFJykgPiAtMTtcbn07XG5cblxuZXhwb3J0IGNvbnN0IGlzQW5kcm9pZCA9ICgpID0+IFJFR0VYLkFORFJPSUQudGVzdCh1c2VyQWdlbnQpO1xuXG5leHBvcnQgY29uc3QgaXNBbmRyb2lkVGFibGV0ID0gKCkgPT4gUkVHRVguQU5EUk9JRF9UQUJMRVQudGVzdCh1c2VyQWdlbnQpICYmICEoKC9UYWJsZXQgUEMgMi4wL2kpLnRlc3QodXNlckFnZW50KSk7XG5cbmV4cG9ydCBjb25zdCBpc0lwaG9uZSA9ICgpID0+IFJFR0VYLklQSE9ORS50ZXN0KHVzZXJBZ2VudCk7XG5leHBvcnQgY29uc3QgaXNJcG9kID0gKCkgPT4gUkVHRVguSVBPRC50ZXN0KHVzZXJBZ2VudCk7XG5leHBvcnQgY29uc3QgaXNJcGFkID0gKCkgPT4ge1xuICAgIHJldHVybiBSRUdFWC5JUEFELnRlc3QodXNlckFnZW50KSB8fCAod2luZG93Lm5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyAmJiB3aW5kb3cubmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMiAmJiAoUkVHRVguTUFDLnRlc3Qod2luZG93Lm5hdmlnYXRvci5wbGF0Zm9ybSkgfHwgUkVHRVguTUFDSU5URUwudGVzdCh3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtKSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzSW9zID0gKCkgPT4gaXNJcGhvbmUoKSB8fCBpc0lwb2QoKSB8fCBpc0lwYWQoKTtcblxuZXhwb3J0IGNvbnN0IGlzTGFyZ2VUYWJsZXRMYW5kc2NhcGUgPSAobGFuZFNjYXBlV2lkdGgsIGxhbmRTY2FwZUhlaWdodCkgPT4ge1xuICAgIGNvbnN0IHdpZHRoID0gbGFuZFNjYXBlV2lkdGggfHwgJzEzNjZweCc7XG4gICAgY29uc3QgaGVpZ2h0ID0gbGFuZFNjYXBlSGVpZ2h0IHx8ICcxMDI0cHgnO1xuICAgIHJldHVybiB3aW5kb3cubWF0Y2hNZWRpYShcIm9ubHkgc2NyZWVuIGFuZCAobWluLWRldmljZS13aWR0aCA6IFwiK3dpZHRoK1wiKSBhbmQgKG1heC1kZXZpY2Utd2lkdGggOiBcIit3aWR0aCtcIikgYW5kIChtaW4tZGV2aWNlLWhlaWdodCA6IFwiK2hlaWdodCtcIikgYW5kIChtYXgtZGV2aWNlLWhlaWdodCA6IFwiK2hlaWdodCtcIikgYW5kIChtaW4td2lkdGg6IFwiK3dpZHRoK1wiKSBhbmQgKG1heC13aWR0aDogXCIrd2lkdGgrXCIpXCIpLm1hdGNoZXM7XG59XG5cbmV4cG9ydCBjb25zdCBpc0xhcmdlVGFibGV0UG9ydHJhaXQgPSAobGFuZFNjYXBlV2lkdGgsIGxhbmRTY2FwZUhlaWdodCkgPT4gIHtcbiAgICBjb25zdCBoZWlnaHQgPSBsYW5kU2NhcGVXaWR0aCB8fCAnMTM2NnB4JztcbiAgICBjb25zdCB3aWR0aCA9IGxhbmRTY2FwZUhlaWdodCB8fCAnMTAyNHB4JztcbiAgICByZXR1cm4gd2luZG93Lm1hdGNoTWVkaWEoXCJvbmx5IHNjcmVlbiBhbmQgKG1pbi1kZXZpY2Utd2lkdGggOiBcIit3aWR0aCtcIikgYW5kIChtYXgtZGV2aWNlLXdpZHRoIDogXCIrd2lkdGgrXCIpIGFuZCAobWluLWRldmljZS1oZWlnaHQgOiBcIitoZWlnaHQrXCIpIGFuZCAobWF4LWRldmljZS1oZWlnaHQgOiBcIitoZWlnaHQrXCIpIGFuZCAobWluLXdpZHRoOiBcIit3aWR0aCtcIikgYW5kIChtYXgtd2lkdGg6IFwiK3dpZHRoK1wiKVwiKS5tYXRjaGVzO1xufVxuXG5leHBvcnQgY29uc3QgaXNNb2JpbGUgPSAoKSA9PiBpc0FuZHJvaWQoKSB8fCBpc0lvcygpIHx8IGlzQW5kcm9pZFRhYmxldCgpIHx8ICQoJyN3bS1tb2JpbGUtZGlzcGxheTp2aXNpYmxlJykubGVuZ3RoID4gMDtcblxuZXhwb3J0IGNvbnN0IGlzVGFibGV0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHNjb3BlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmFwcC1wYWdlJykud2lkZ2V0O1xuICAgIHJldHVybiBzY29wZSAmJiBzY29wZS52aWV3UGFyZW50LlZpZXdwb3J0LmlzVGFibGV0VHlwZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc01vYmlsZUFwcCA9ICgpID0+IGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS5wbGF0Zm9ybVR5cGUgPT09ICdNT0JJTEUnICYmIGdldFdtUHJvamVjdFByb3BlcnRpZXMoKS50eXBlID09PSAnQVBQTElDQVRJT04nO1xuXG5leHBvcnQgY29uc3QgZ2V0QW5kcm9pZFZlcnNpb24gPSAoKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSAod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKSkubWF0Y2goL2FuZHJvaWRcXHMoWzAtOVxcLl0qKS8pO1xuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdIDogJyc7XG59O1xuXG5leHBvcnQgY29uc3QgaXNLaXRrYXREZXZpY2UgPSAoKSA9PiBpc0FuZHJvaWQoKSAmJiBwYXJzZUludChnZXRBbmRyb2lkVmVyc2lvbigpLCAxMCkgPT09IDQ7XG5cbi8qKlxuICogdGhpcyBtZXRob2QgZW5jb2RlcyB0aGUgdXJsIGFuZCByZXR1cm5zIHRoZSBlbmNvZGVkIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgZW5jb2RlVXJsID0gKHVybDogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBpbmRleCA9IHVybC5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgLy8gZW5jb2RlIHRoZSByZWxhdGl2ZSBwYXRoXG4gICAgICAgIHVybCA9IGVuY29kZVVSSSh1cmwuc3Vic3RyaW5nKDAsIGluZGV4KSkgKyB1cmwuc3Vic3RyaW5nKGluZGV4KTtcbiAgICAgICAgLy8gZW5jb2RlIHVybCBwYXJhbXMsIG5vdCBlbmNvZGVkIHRocm91Z2ggZW5jb2RlVVJJXG4gICAgICAgIHVybCA9IGVuY29kZVVybFBhcmFtcyh1cmwpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHVybCA9IGVuY29kZVVSSSh1cmwpO1xuICAgIH1cblxuICAgIHJldHVybiB1cmw7XG59O1xuXG4vKipcbiAqIHRoaXMgbWV0aG9kIGVuY29kZXMgdGhlIHVybCBwYXJhbXMgYW5kIGlzIHByaXZhdGUgdG8gdGhlIGNsYXNzIG9ubHlcbiAqL1xuZXhwb3J0IGNvbnN0IGVuY29kZVVybFBhcmFtcyA9ICh1cmw6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgbGV0IHF1ZXJ5UGFyYW1zLCBlbmNvZGVkUGFyYW1zID0gJycsIHF1ZXJ5UGFyYW1zU3RyaW5nLCBpbmRleDtcbiAgICBpbmRleCA9IHVybC5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgaW5kZXggKz0gMTtcbiAgICAgICAgcXVlcnlQYXJhbXNTdHJpbmcgPSB1cmwuc3Vic3RyaW5nKGluZGV4KTtcbiAgICAgICAgLy8gRW5jb2RpbmcgdGhlIHF1ZXJ5IHBhcmFtcyBpZiBleGlzdFxuICAgICAgICBpZiAocXVlcnlQYXJhbXNTdHJpbmcpIHtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zID0gcXVlcnlQYXJhbXNTdHJpbmcuc3BsaXQoJyYnKTtcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRlY29kZWRQYXJhbVZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGkgPSBpbmNsdWRlcyhwYXJhbSwgJz0nKSA/IHBhcmFtLmluZGV4T2YoJz0nKSA6IChwYXJhbSAmJiBwYXJhbS5sZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWUgPSBwYXJhbS5zdWJzdHIoMCwgaSksXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtVmFsdWUgPSBwYXJhbS5zdWJzdHIoaSArIDEpO1xuXG4gICAgICAgICAgICAgICAgLy8gYWRkIHRoZSA9IGZvciBwYXJhbSBuYW1lIG9ubHkgd2hlbiB0aGUgcGFyYW0gdmFsdWUgZXhpc3RzIGluIHRoZSBnaXZlbiBwYXJhbSBvciBlbXB0eSB2YWx1ZSBpcyBhc3NpZ25lZFxuICAgICAgICAgICAgICAgIGlmIChwYXJhbVZhbHVlIHx8IGluY2x1ZGVzKHBhcmFtLCAnPScpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNvZGVkUGFyYW1WYWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChwYXJhbVZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZFBhcmFtVmFsdWUgPSBwYXJhbVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRQYXJhbXMgKz0gcGFyYW1OYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KGRlY29kZWRQYXJhbVZhbHVlKSArICcmJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkUGFyYW1zICs9IHBhcmFtTmFtZSArICcmJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVuY29kZWRQYXJhbXMgPSBlbmNvZGVkUGFyYW1zLnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgIHVybCA9IHVybC5yZXBsYWNlKHF1ZXJ5UGFyYW1zU3RyaW5nLCBlbmNvZGVkUGFyYW1zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXJsO1xufTtcblxuLyogY2FwaXRhbGl6ZSB0aGUgZmlyc3QtbGV0dGVyIG9mIHRoZSBzdHJpbmcgcGFzc2VkICovXG5leHBvcnQgY29uc3QgaW5pdENhcHMgPSBuYW1lID0+IHtcbiAgICBpZiAoIW5hbWUpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc3Vic3RyaW5nKDEpO1xufTtcblxuLyogY29udmVydCBjYW1lbENhc2Ugc3RyaW5nIHRvIGEgc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyAqL1xuZXhwb3J0IGNvbnN0IHNwYWNlU2VwYXJhdGUgPSBuYW1lID0+IHtcbiAgICBpZiAobmFtZSA9PT0gbmFtZS50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKFJFR0VYLlNOQUtFX0NBU0UsIGZ1bmN0aW9uIChsZXR0ZXIsIHBvcykge1xuICAgICAgICByZXR1cm4gKHBvcyA/ICcgJyA6ICcnKSArIGxldHRlcjtcbiAgICB9KTtcbn07XG5cbi8qUmVwbGFjZSB0aGUgY2hhcmFjdGVyIGF0IGEgcGFydGljdWxhciBpbmRleCovXG5leHBvcnQgY29uc3QgcmVwbGFjZUF0ID0gKHN0cmluZywgaW5kZXgsIGNoYXJhY3RlcikgPT4gc3RyaW5nLnN1YnN0cigwLCBpbmRleCkgKyBjaGFyYWN0ZXIgKyBzdHJpbmcuc3Vic3RyKGluZGV4ICsgY2hhcmFjdGVyLmxlbmd0aCk7XG5cbi8qUmVwbGFjZSAnLicgd2l0aCBzcGFjZSBhbmQgY2FwaXRhbGl6ZSB0aGUgbmV4dCBsZXR0ZXIqL1xuZXhwb3J0IGNvbnN0IHBlcmlvZFNlcGFyYXRlID0gbmFtZSA9PiB7XG4gICAgbGV0IGRvdEluZGV4O1xuICAgIGRvdEluZGV4ID0gbmFtZS5pbmRleE9mKCcuJyk7XG4gICAgaWYgKGRvdEluZGV4ICE9PSAtMSkge1xuICAgICAgICBuYW1lID0gcmVwbGFjZUF0KG5hbWUsIGRvdEluZGV4ICsgMSwgbmFtZS5jaGFyQXQoZG90SW5kZXggKyAxKS50b1VwcGVyQ2FzZSgpKTtcbiAgICAgICAgbmFtZSA9IHJlcGxhY2VBdChuYW1lLCBkb3RJbmRleCwgJyAnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5hbWU7XG59O1xuXG5leHBvcnQgY29uc3QgcHJldHRpZnlMYWJlbCA9IGxhYmVsID0+IHtcbiAgICBsYWJlbCA9IGNhbWVsQ2FzZShsYWJlbCk7XG4gICAgLypjYXBpdGFsaXplIHRoZSBpbml0aWFsIExldHRlciovXG4gICAgbGFiZWwgPSBpbml0Q2FwcyhsYWJlbCk7XG4gICAgLypDb252ZXJ0IGNhbWVsIGNhc2Ugd29yZHMgdG8gc2VwYXJhdGVkIHdvcmRzKi9cbiAgICBsYWJlbCA9IHNwYWNlU2VwYXJhdGUobGFiZWwpO1xuICAgIC8qUmVwbGFjZSAnLicgd2l0aCBzcGFjZSBhbmQgY2FwaXRhbGl6ZSB0aGUgbmV4dCBsZXR0ZXIqL1xuICAgIGxhYmVsID0gcGVyaW9kU2VwYXJhdGUobGFiZWwpO1xuICAgIHJldHVybiBsYWJlbDtcbn07XG5cbmV4cG9ydCBjb25zdCBkZUh5cGhlbmF0ZSA9IChuYW1lKSA9PiB7XG4gICAgcmV0dXJuIG5hbWUuc3BsaXQoJy0nKS5qb2luKCcgJyk7XG59O1xuXG4vKkFjY2VwdHMgYW4gYXJyYXkgb3IgYSBzdHJpbmcgc2VwYXJhdGVkIHdpdGggc3ltYm9sIGFuZCByZXR1cm5zIHByZXR0aWZpZWQgcmVzdWx0Ki9cbmV4cG9ydCBjb25zdCBwcmV0dGlmeUxhYmVscyA9IChuYW1lcywgc2VwYXJhdG9yID0gJywnKSA9PiB7XG4gICAgbGV0IG1vZGlmaWVkTmFtZXMsIG5hbWVzQXJyYXkgPSBbXTtcblxuICAgIGlmICghaXNBcnJheShuYW1lcykpIHtcbiAgICAgICAgbmFtZXNBcnJheSA9IHNwbGl0KG5hbWVzLCBzZXBhcmF0b3IpO1xuICAgIH1cblxuICAgIG1vZGlmaWVkTmFtZXMgPSBtYXAobmFtZXNBcnJheSwgcHJldHRpZnlMYWJlbCk7XG4gICAgaWYgKGlzQXJyYXkobmFtZXMpKSB7XG4gICAgICAgIHJldHVybiBtb2RpZmllZE5hbWVzO1xuICAgIH1cbiAgICByZXR1cm4gbW9kaWZpZWROYW1lcy5qb2luKHNlcGFyYXRvcik7XG59O1xuXG4vKipcbiAqIHRoaXMgbWV0aG9kIGNoZWNrcyBpZiBhIGluc2VjdXJlIGNvbnRlbnQgcmVxdWVzdCBpcyBiZWluZyBtYWRlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0luc2VjdXJlQ29udGVudFJlcXVlc3QgPSAodXJsOiBzdHJpbmcpOiBib29sZWFuID0+IHtcblxuICAgIGNvbnN0IHBhcnNlcjogSFRNTEFuY2hvckVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgcGFyc2VyLmhyZWYgPSB1cmw7XG5cbiAgICAvLyBmb3IgcmVsYXRpdmUgdXJscyBJRSByZXR1cm5zIHRoZSBwcm90b2NvbCBhcyBlbXB0eSBzdHJpbmdcbiAgICBpZiAocGFyc2VyLnByb3RvY29sID09PSAnJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGlucHV0dGVkIHNvdXJjZSBpcyBhIGJhc2U2NCB1cmwsIGRvIG5vdCB0aHJvdyBpbnNlY3VyZSBjb250ZW50IGVycm9yXG4gICAgaWYgKFJFR0VYLkRBVEFfVVJMLnRlc3QodXJsKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHN0cmluZ1N0YXJ0c1dpdGgobG9jYXRpb24uaHJlZiwgJ2h0dHBzOi8vJykpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlci5wcm90b2NvbCAhPT0gJ2h0dHBzOicgJiYgcGFyc2VyLnByb3RvY29sICE9PSAnd3NzOic7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLyoqXG4gKiB0aGlzIG1ldGhvZCBjaGVja3MgaWYgYSBnaXZlbiBzdHJpbmcgc3RhcnRzIHdpdGggdGhlIGdpdmVuIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3Qgc3RyaW5nU3RhcnRzV2l0aCA9IChzdHI6IHN0cmluZywgc3RhcnRzV2l0aDogc3RyaW5nLCBpZ25vcmVDYXNlPyk6IGJvb2xlYW4gPT4ge1xuICAgIGlmICghc3RyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCByZWdFeCA9IG5ldyBSZWdFeHAoJ14nICsgc3RhcnRzV2l0aCwgaWdub3JlQ2FzZSA/ICdpJyA6ICcnKTtcblxuICAgIHJldHVybiByZWdFeC50ZXN0KHN0cik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RXZhbHVhdGVkRXhwclZhbHVlID0gKG9iamVjdCwgZXhwcmVzc2lvbikgPT4ge1xuICAgIGxldCB2YWw7XG4gICAgLyoqXG4gICAgICogRXZhbHVhdGUgdGhlIGV4cHJlc3Npb24gd2l0aCB0aGUgc2NvcGUgYW5kIG9iamVjdC5cbiAgICAgKiAkZXZhbCBpcyB1c2VkLCBhcyBleHByZXNzaW9uIGNhbiBiZSBpbiBmb3JtYXQgb2YgZmllbGQxICsgJyAnICsgZmllbGQyXG4gICAgICogJGV2YWwgY2FuIGZhaWwsIGlmIGV4cHJlc3Npb24gaXMgbm90IGluIGNvcnJlY3QgZm9ybWF0LCBzbyBhdHRlbXB0IHRoZSBldmFsIGZ1bmN0aW9uXG4gICAgICovXG4gICAgdmFsID0gYXR0ZW1wdChmdW5jdGlvbiAoKSB7XG5cbiAgICAgICAgY29uc3QgYXJnc0V4cHIgPSBPYmplY3Qua2V5cyhvYmplY3QpLm1hcCgoZmllbGROYW1lKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYHZhciAke2ZpZWxkTmFtZX0gPSBkYXRhWycke2ZpZWxkTmFtZX0nXTtgO1xuICAgICAgICB9KS5qb2luKCcgJyk7XG4gICAgICAgIGNvbnN0IGYgPSBuZXcgRnVuY3Rpb24oJ2RhdGEnLCBgJHthcmdzRXhwcn0gcmV0dXJuICAke2V4cHJlc3Npb259YCk7XG4gICAgICAgIHJldHVybiBmKG9iamVjdCk7XG4gICAgfSk7XG4gICAgLyoqXG4gICAgICogJGV2YWwgZmFpbHMgaWYgZmllbGQgZXhwcmVzc2lvbiBoYXMgc3BhY2VzLiBFeDogJ2ZpZWxkIG5hbWUnIG9yICdmaWVsZEBuYW1lJ1xuICAgICAqIEFzIGEgZmFsbGJhY2ssIGdldCB2YWx1ZSBkaXJlY3RseSBmcm9tIG9iamVjdCBvciBzY29wZVxuICAgICAqL1xuICAgIGlmIChpc0Vycm9yKHZhbCkpIHtcbiAgICAgICAgdmFsID0gZ2V0KG9iamVjdCwgZXhwcmVzc2lvbik7XG4gICAgfVxuICAgIHJldHVybiB2YWw7XG59O1xuXG4vKiBmdW5jdGlvbnMgZm9yIHJlc291cmNlIFRhYiovXG5leHBvcnQgY29uc3QgaXNJbWFnZUZpbGUgPSAoZmlsZU5hbWUpID0+IHtcbiAgICByZXR1cm4gKFJFR0VYLlNVUFBPUlRFRF9JTUFHRV9GT1JNQVQpLnRlc3QoZmlsZU5hbWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQXVkaW9GaWxlID0gKGZpbGVOYW1lKSA9PiB7XG4gICAgcmV0dXJuIChSRUdFWC5TVVBQT1JURURfQVVESU9fRk9STUFUKS50ZXN0KGZpbGVOYW1lKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1ZpZGVvRmlsZSA9IChmaWxlTmFtZSkgPT4ge1xuICAgIHJldHVybiAoUkVHRVguU1VQUE9SVEVEX1ZJREVPX0ZPUk1BVCkudGVzdChmaWxlTmFtZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNWYWxpZFdlYlVSTCA9ICh1cmw6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICAgIHJldHVybiAoUkVHRVguVkFMSURfV0VCX1VSTCkudGVzdCh1cmwpO1xufTtcblxuLypUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHVybCB0byB0aGUgcmVzb3VyY2UgYWZ0ZXIgY2hlY2tpbmcgdGhlIHZhbGlkaXR5IG9mIHVybCovXG5leHBvcnQgY29uc3QgZ2V0UmVzb3VyY2VVUkwgPSAodXJsU3RyaW5nKSA9PiB7XG4gICAgaWYgKGlzVmFsaWRXZWJVUkwodXJsU3RyaW5nKSkge1xuICAgICAgICAvKlRPRE86IFVzZSBEb21TYW5pdGl6ZXIqL1xuICAgICAgICAvLyByZXR1cm4gc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RSZXNvdXJjZVVybCh1cmxTdHJpbmcpO1xuICAgIH1cbiAgICByZXR1cm4gdXJsU3RyaW5nO1xufTtcblxuLypmdW5jdGlvbiB0byBjaGVjayBpZiBmbiBpcyBhIGZ1bmN0aW9uIGFuZCB0aGVuIGV4ZWN1dGUqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaWdnZXJGbihmbiwgLi4uYXJnbW50cykge1xuICAgIC8qIFVzZSBvZiBzbGljZSBvbiBhcmd1bWVudHMgd2lsbCBtYWtlIHRoaXMgZnVuY3Rpb24gbm90IG9wdGltaXphYmxlXG4gICAgKiBodHRwczovL2dpdGh1Yi5jb20vcGV0a2FhbnRvbm92L2JsdWViaXJkL3dpa2kvT3B0aW1pemF0aW9uLWtpbGxlcnMjMzItbGVha2luZy1hcmd1bWVudHNcbiAgICAqICovXG5cbiAgICBsZXQgc3RhcnQgPSAxO1xuICAgIGNvbnN0IGxlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkobGVuIC0gc3RhcnQpO1xuICAgIGZvciAoc3RhcnQ7IHN0YXJ0IDwgbGVuOyBzdGFydCsrKSB7XG4gICAgICAgIGFyZ3Nbc3RhcnQgLSAxXSA9IGFyZ3VtZW50c1tzdGFydF07XG4gICAgfVxuXG4gICAgaWYgKGlzRnVuY3Rpb24oZm4pKSB7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9XG59XG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBnZXQgdGhlIGZvcm1hdHRlZCBkYXRlXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRGb3JtYXR0ZWREYXRlID0gKGRhdGVQaXBlLCBkYXRlT2JqLCBmb3JtYXQsIHRpbWVab25lPywgaXNUaW1lU3RhbXBUeXBlPywgaXNJbnRlcnZhbERhdGVUaW1lPywgY29tcEluc3RhbmNlPyk6IGFueSA9PiB7XG4gICAgaWYgKCFkYXRlT2JqKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChmb3JtYXQgPT09ICd0aW1lc3RhbXAnKSB7XG4gICAgICAgIHJldHVybiBtb21lbnQoZGF0ZU9iaikudmFsdWVPZigpO1xuICAgIH1cblxuICAgIGlmIChmb3JtYXQgPT09ICdVVEMnKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShkYXRlT2JqKS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICh0aW1lWm9uZSkge1xuICAgICAgICBjb25zdCBtb21lbnRGb3JtYXQgPSBmb3JtYXQucmVwbGFjZUFsbCgneScsICdZJykucmVwbGFjZUFsbCgnZCcsICdEJykucmVwbGFjZSgnYScsICdBJyk7XG4gICAgICAgIGlmIChpc0ludGVydmFsRGF0ZVRpbWUgKSB7IC8vIGRhdGVzIHdoaWNoIGFyZSBvZiB0eXBlIHRpbWUgd2lkZ2V0ICh2YWx1ZSBpcyBoaDptbTpzcykgYnV0IHJldHVybmVkIGFzIGRhdGUgc3RyaW5nIGZyb20gdGltZSBjb21wXG4gICAgICAgICAgICByZXR1cm4gbW9tZW50KGRhdGVPYmopLmZvcm1hdChtb21lbnRGb3JtYXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1RpbWVTdGFtcFR5cGUgPT09ICdkYXRldGltZXN0YW1wJykge1xuICAgICAgICAgICAgZGF0ZU9iaiA9IGdldE1vbWVudExvY2FsZU9iamVjdCh0aW1lWm9uZSwgZGF0ZU9iaik7XG4gICAgICAgICAgICByZXR1cm4gbW9tZW50KGRhdGVPYmopLmZvcm1hdChtb21lbnRGb3JtYXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGVQaXBlLnRyYW5zZm9ybShkYXRlT2JqLCBmb3JtYXQsIHRpbWVab25lLCBjb21wSW5zdGFuY2UpO1xufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNoZWNrIGlmIHRoZSBkYXRlIGhhcyB0aW1lem9uZSBpbmZvcm1hdGlvbiBvciBub3RcbiAqL1xuZXhwb3J0IGNvbnN0IGhhc09mZnNldFN0ciA9IChkYXRlU3RyKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBkYXRlU3RyICE9PSAnc3RyaW5nJykgcmV0dXJuO1xuICAgIGNvbnN0IG1hdGNoZXMgPSBkYXRlU3RyLm1hdGNoKFJFR0VYLklTT19EQVRFX0ZPUk1BVCk7XG4gICAgaWYgKG1hdGNoZXMgJiYgbWF0Y2hlc1s0XSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG59XG5cbi8qKlxuICogbWV0aG9kIHRvIGdldCB0aGUgZGF0ZSBvYmplY3QgZnJvbSB0aGUgaW5wdXQgcmVjZWl2ZWRcbiAqL1xuZXhwb3J0IGNvbnN0IGdldERhdGVPYmogPSAodmFsdWUsIG9wdGlvbnM/LCB0aW1lem9uZT8pOiBEYXRlID0+IHtcbiAgICAvLyBIYW5kbGluZyBsb2NhbGl6YXRpb25cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnBhdHRlcm4gJiYgb3B0aW9ucy5wYXR0ZXJuICE9PSAndGltZXN0YW1wJykge1xuICAgICAgICAvLyBGaXggZm9yIFdNUy0xOTYwMSwgaW52YWxpZCBkYXRlIGlzIHJldHVybmVkIG9uIGRhdGUgc2VsZWN0aW9uLlxuICAgICAgICBjb25zdCBpc05hdGl2ZVBpY2tlciA9IChvcHRpb25zICYmIG9wdGlvbnMuaGFzT3duUHJvcGVydHkoJ2lzTmF0aXZlUGlja2VyJykpID8gZ2V0KG9wdGlvbnMsICdpc05hdGl2ZVBpY2tlcicpIDogaXNNb2JpbGUoKTtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9ICBpc05hdGl2ZVBpY2tlciA/ICdZWVlZL01NL0REIEhIOm1tOnNzJyA6IG1vbWVudFBhdHRlcm4ob3B0aW9ucy5wYXR0ZXJuKTtcbiAgICAgICAgdmFsdWUgPSBtb21lbnQodmFsdWUsIHBhdHRlcm4pLnRvRGF0ZSgpO1xuICAgIH1cblxuICAgIC8qaWYgdGhlIHZhbHVlIGlzIGEgZGF0ZSBvYmplY3QsIG5vIG5lZWQgdG8gY292ZXJ0IGl0Ki9cbiAgICBpZiAoaXNEYXRlKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyppZiB0aGUgdmFsdWUgaXMgYSB0aW1lc3RhbXAgc3RyaW5nLCBjb252ZXJ0IGl0IHRvIGEgbnVtYmVyKi9cbiAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICB2YWx1ZSA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gICAgfVxuXG4gICAgaWYgKCFtb21lbnQodmFsdWUpLmlzVmFsaWQoKSB8fCB2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBsZXQgZGF0ZU9iaiA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAvKipcbiAgICAgKiBpZiBkYXRlIHZhbHVlIGlzIHN0cmluZyBcIjIwLTA1LTIwMTlcIiB0aGVuIG5ldyBEYXRlKHZhbHVlKSByZXR1cm4gMjBNYXkyMDE5IHdpdGggY3VycmVudCB0aW1lIGluIEluZGlhLFxuICAgICAqIHdoZXJlYXMgdGhpcyB3aWxsIHJldHVybiAxOU1heTIwMTkgd2l0aCB0aW1lIGxhZ2dpbmcgZm9yIGZldyBob3Vycy5cbiAgICAgKiBUaGlzIGlzIGJlY2F1c2UgaXQgcmV0dXJucyBVVEMgdGltZSBpLmUuIENvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lIChVVEMpLlxuICAgICAqIFRvIGNyZWF0ZSBkYXRlIGluIGxvY2FsIHRpbWUgdXNlIG1vbWVudFxuICAgICAqL1xuICAgIGlmIChpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgICAgLypcbiAgICAgICAgICogSWYgc2VsZWN0ZWQgbG9jYWxlIGlzIEFyYWJpYywgbW9tZW50KHZhbHVlKS5mb3JtYXQoKSBpcyBnaXZpbmcgZGF0ZSBpbiBBcmFiaWMgbGFuZ3VhZ2VcbiAgICAgICAgICogKEV4OiBJZiBkYXRlIHZhbHVlIGlzIFwiMTk5MC0xMS0yM1wiIGFuZCBtb21lbnQodmFsdWUpLmZvcm1hdCgpIGlzIFwi2aHZqdmp2aAt2aHZoS3ZotmjVNmg2aA62aDZoDrZoNmgK9mg2aU62aPZoFwiKVxuICAgICAgICAgKiBhbmQgbmV3IERhdGUobW9tZW50KHZhbHVlKS5mb3JtYXQoKSkgaXMgZ2l2aW5nIEludmFsaWQgRGF0ZS4gU28gZnJzdCBjb252ZXJ0aW5nIGl0IHRvIHRpbWVzdGFtcCB2YWx1ZS5cbiAgICAgICAgKi9cblxuICAgICAgICBkYXRlT2JqID0gIXRpbWV6b25lID8gbmV3IERhdGUobW9tZW50KG1vbWVudCh2YWx1ZSkuZm9ybWF0KCkpLnZhbHVlT2YoKSkgOiBnZXRNb21lbnRMb2NhbGVPYmplY3QodGltZXpvbmUsIHZhbHVlKTs7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlID09PSBDVVJSRU5UX0RBVEUgfHwgaXNOYU4oZGF0ZU9iai5nZXREYXkoKSkpIHtcbiAgICAgICAgcmV0dXJuIG5vdztcbiAgICB9XG4gICAgcmV0dXJuIGRhdGVPYmo7XG59O1xuXG5leHBvcnQgY29uc3QgYWRkRXZlbnRMaXN0ZW5lck9uRWxlbWVudCA9IChfZWxlbWVudDogRWxlbWVudCwgZXhjbHVkZUVsZW1lbnQ6IEVsZW1lbnQsIG5hdGl2ZUVsZW1lbnQ6IEVsZW1lbnQsIGV2ZW50VHlwZSwgaXNEcm9wRG93bkRpc3BsYXlFbmFibGVkT25JbnB1dCwgc3VjY2Vzc0NCLCBsaWZlOiBFVkVOVF9MSUZFLCBpc0NhcHR1cmUgPSBmYWxzZSkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnQ6IEVsZW1lbnQgPSBfZWxlbWVudDtcbiAgICBjb25zdCBldmVudExpc3RlbmVyID0gKGV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChleGNsdWRlRWxlbWVudCAmJiAoZXhjbHVkZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSB8fCBleGNsdWRlRWxlbWVudCA9PT0gZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChuYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgIGlmICgkKGV2ZW50LnRhcmdldCkuaXMoJ2lucHV0JykgJiYgIWlzRHJvcERvd25EaXNwbGF5RW5hYmxlZE9uSW5wdXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBldmVudExpc3RlbmVyLCBpc0NhcHR1cmUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaWZlID09PSBFVkVOVF9MSUZFLk9OQ0UpIHtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGV2ZW50TGlzdGVuZXIsIGlzQ2FwdHVyZSk7XG4gICAgICAgIH1cbiAgICAgICAgc3VjY2Vzc0NCKCk7XG4gICAgfTtcbiAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBldmVudExpc3RlbmVyLCBpc0NhcHR1cmUpO1xuICAgIGNvbnN0IHJlbW92ZUV2ZW50TGlzdGVuZXIgPSAoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGV2ZW50TGlzdGVuZXIsIGlzQ2FwdHVyZSk7XG4gICAgfTtcbiAgICByZXR1cm4gcmVtb3ZlRXZlbnRMaXN0ZW5lcjtcbn07XG5cbi8qKlxuICogUmV0dXJucyBhIGRlZXAgY2xvbmVkIHJlcGxpY2Egb2YgdGhlIHBhc3NlZCBvYmplY3QvYXJyYXlcbiAqIEBwYXJhbSBvYmplY3Qgb2JqZWN0L2FycmF5IHRvIGNsb25lXG4gKiBAcmV0dXJucyBhIGNsb25lIG9mIHRoZSBwYXNzZWQgb2JqZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDbG9uZWRPYmplY3QgPSAob2JqZWN0KSA9PiB7XG4gICAgcmV0dXJuIGNsb25lRGVlcChvYmplY3QpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEZpbGVzID0gKGZvcm1OYW1lLCBmaWVsZE5hbWUsIGlzTGlzdCkgPT4ge1xuICAgIGNvbnN0IGZpbGVzID0gZ2V0KGRvY3VtZW50LmZvcm1zLCBbZm9ybU5hbWUsIGZpZWxkTmFtZSwgJ2ZpbGVzJ10pO1xuICAgIHJldHVybiBpc0xpc3QgPyBtYXAoZmlsZXMsIGlkZW50aXR5KSA6IGZpbGVzICYmIGZpbGVzWzBdO1xufTtcblxuLypGdW5jdGlvbiB0byBnZW5lcmF0ZSBhIHJhbmRvbSBudW1iZXIqL1xuZnVuY3Rpb24gcmFuZG9tKCkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKCgxICsgTWF0aC5yYW5kb20oKSkgKiAweDEwMDAwKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpO1xufVxuXG4vKkZ1bmN0aW9uIHRvIGdlbmVyYXRlIGEgZ3VpZCBiYXNlZCBvbiByYW5kb20gbnVtYmVycy4qL1xuZXhwb3J0IGNvbnN0IGdlbmVyYXRlR1VJZCA9ICgpID0+IHtcbiAgICByZXR1cm4gcmFuZG9tKCkgKyAnLScgKyByYW5kb20oKSArICctJyArIHJhbmRvbSgpO1xufTtcblxuLyoqXG4gKiBWYWxpZGF0ZSBpZiBnaXZlbiBhY2Nlc3Mgcm9sZSBpcyBpbiBjdXJyZW50IGxvZ2dlZGluIHVzZXIgYWNjZXNzIHJvbGVzXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUFjY2Vzc1JvbGVzID0gKHJvbGVFeHAsIGxvZ2dlZEluVXNlcikgPT4ge1xuICAgIGxldCByb2xlcztcblxuICAgIGlmIChyb2xlRXhwICYmIGxvZ2dlZEluVXNlcikge1xuXG4gICAgICAgIHJvbGVzID0gcm9sZUV4cCAmJiByb2xlRXhwLnNwbGl0KCcsJykubWFwKEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsLCBTdHJpbmcucHJvdG90eXBlLnRyaW0pO1xuXG4gICAgICAgIHJldHVybiBpbnRlcnNlY3Rpb24ocm9sZXMsIGxvZ2dlZEluVXNlci51c2VyUm9sZXMpLmxlbmd0aDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWYWxpZEpTT04gPSAoY29udGVudCkgPT4ge1xuICAgIGlmICghY29udGVudCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBjb25zdCBwYXJzZWRJbnRWYWx1ZSA9IHBhcnNlSW50KGNvbnRlbnQsIDEwKTtcbiAgICAgICAgLypvYnRhaW5pbmcganNvbiBmcm9tIGVkaXRvciBjb250ZW50IHN0cmluZyovXG4gICAgICAgIHJldHVybiBpc09iamVjdChjb250ZW50KSB8fCAhaXNOYU4ocGFyc2VkSW50VmFsdWUpID8gY29udGVudCA6IEpTT04ucGFyc2UoY29udGVudCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvKnRlcm1pbmF0aW5nIGV4ZWN1dGlvbiBpZiBuZXcgdmFyaWFibGUgb2JqZWN0IGlzIG5vdCB2YWxpZCBqc29uLiovXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHhtbFRvSnNvbiA9ICh4bWxTdHJpbmcpID0+IHtcbiAgICBjb25zdCB4MmpzT2JqID0gbmV3IFgySlMoeyAnZW1wdHlOb2RlRm9ybSc6ICdjb250ZW50JywgJ2F0dHJpYnV0ZVByZWZpeCc6ICcnLCAnZW5hYmxlVG9TdHJpbmdGdW5jJzogZmFsc2UgfSk7XG4gICAgbGV0IGpzb24gPSB4MmpzT2JqLnhtbDJqcyh4bWxTdHJpbmcpO1xuICAgIGlmIChqc29uKSB7XG4gICAgICAgIGpzb24gPSBnZXQoanNvbiwgT2JqZWN0LmtleXMoanNvbilbMF0pO1xuICAgIH1cbiAgICByZXR1cm4ganNvbjtcbn07XG5cbi8qXG4gKiBVdGlsIG1ldGhvZCB0byBmaW5kIHRoZSB2YWx1ZSBvZiBhIGtleSBpbiB0aGUgb2JqZWN0XG4gKiBpZiBrZXkgbm90IGZvdW5kIGFuZCBjcmVhdGUgaXMgdHJ1ZSwgYW4gb2JqZWN0IGlzIGNyZWF0ZWQgYWdhaW5zdCB0aGF0IG5vZGVcbiAqIEV4YW1wbGVzOlxuICogdmFyIGEgPSB7XG4gKiAgYjoge1xuICogICAgICBjIDoge1xuICogICAgICAgICAgZDogJ3Rlc3QnXG4gKiAgICAgIH1cbiAqICB9XG4gKiB9XG4gKiBVdGlscy5maW5kVmFsdWUoYSwgJ2IuYy5kJykgLS0+ICd0ZXN0J1xuICogVXRpbHMuZmluZFZhbHVlKGEsICdiLmMnKSAtLT4ge2Q6ICd0ZXN0J31cbiAqIFV0aWxzLmZpbmRWYWx1ZShhLCAnZScpIC0tPiB1bmRlZmluZWRcbiAqIFV0aWxzLmZpbmRWYWx1ZShhLCAnZScsIHRydWUpIC0tPiB7fSBhbmQgYSB3aWxsIGJlY29tZTpcbiAqIHtcbiAqICAgYjoge1xuICogICAgICBjIDoge1xuICogICAgICAgICAgZDogJ3Rlc3QnXG4gKiAgICAgIH1cbiAqICB9LFxuICogIGU6IHtcbiAqICB9XG4gKiB9XG4gKi9cbmV4cG9ydCBjb25zdCBmaW5kVmFsdWVPZiA9IChvYmosIGtleSwgY3JlYXRlPykgPT4ge1xuXG4gICAgaWYgKCFvYmogfHwgIWtleSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFjcmVhdGUpIHtcbiAgICAgICAgcmV0dXJuIGdldChvYmosIGtleSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFydHMgPSBrZXkuc3BsaXQoJy4nKSxcbiAgICAgICAga2V5cyA9IFtdO1xuXG4gICAgbGV0IHNraXBQcm9jZXNzaW5nO1xuXG4gICAgcGFydHMuZm9yRWFjaCgocGFydCkgPT4ge1xuICAgICAgICBpZiAoIXBhcnRzLmxlbmd0aCkgeyAvLyBpZiB0aGUgcGFydCBvZiBhIGtleSBpcyBub3QgdmFsaWQsIHNraXAgdGhlIHByb2Nlc3NpbmcuXG4gICAgICAgICAgICBza2lwUHJvY2Vzc2luZyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdWJQYXJ0cyA9IHBhcnQubWF0Y2goL1xcdysvZyk7XG4gICAgICAgIGxldCBzdWJQYXJ0O1xuXG4gICAgICAgIHdoaWxlIChzdWJQYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN1YlBhcnQgPSBzdWJQYXJ0cy5zaGlmdCgpO1xuICAgICAgICAgICAga2V5cy5wdXNoKHsgJ2tleSc6IHN1YlBhcnQsICd2YWx1ZSc6IHN1YlBhcnRzLmxlbmd0aCA/IFtdIDoge30gfSk7IC8vIGRldGVybWluZSB3aGV0aGVyIHRvIGNyZWF0ZSBhbiBhcnJheSBvciBhbiBvYmplY3RcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHNraXBQcm9jZXNzaW5nKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAga2V5cy5mb3JFYWNoKChfa2V5KSA9PiB7XG4gICAgICAgIGxldCB0ZW1wT2JqID0gb2JqW19rZXkua2V5XTtcbiAgICAgICAgaWYgKCFpc09iamVjdCh0ZW1wT2JqKSkge1xuICAgICAgICAgICAgdGVtcE9iaiA9IGdldFZhbGlkSlNPTih0ZW1wT2JqKTtcbiAgICAgICAgICAgIGlmICghdGVtcE9iaikge1xuICAgICAgICAgICAgICAgIHRlbXBPYmogPSBfa2V5LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9ialtfa2V5LmtleV0gPSB0ZW1wT2JqO1xuICAgICAgICBvYmogPSB0ZW1wT2JqO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbn07XG5cbi8qXG4qIGV4dHJhY3RzIGFuZCByZXR1cm5zIHRoZSBsYXN0IGJpdCBmcm9tIGZ1bGwgdHlwZVJlZiBvZiBhIGZpZWxkXG4qIGUuZy4gcmV0dXJucyAnU3RyaW5nJyBmb3IgdHlwZVJlZiA9ICdqYXZhLmxhbmcuU3RyaW5nJ1xuKiBAcGFyYW1zOiB7dHlwZVJlZn0gdHlwZSByZWZlcmVuY2VcbiovXG5leHBvcnQgY29uc3QgZXh0cmFjdFR5cGUgPSAodHlwZVJlZjogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgICBsZXQgdHlwZTtcbiAgICBpZiAoIXR5cGVSZWYpIHtcbiAgICAgICAgcmV0dXJuIERhdGFUeXBlLlNUUklORztcbiAgICB9XG4gICAgdHlwZSA9IHR5cGVSZWYgJiYgdHlwZVJlZi5zdWJzdHJpbmcodHlwZVJlZi5sYXN0SW5kZXhPZignLicpICsgMSk7XG4gICAgdHlwZSA9IHR5cGUgJiYgdHlwZS50b0xvd2VyQ2FzZSgpO1xuICAgIHR5cGUgPSB0eXBlID09PSBEYXRhVHlwZS5MT0NBTERBVEVUSU1FID8gRGF0YVR5cGUuREFURVRJTUUgOiB0eXBlO1xuICAgIHJldHVybiB0eXBlO1xufTtcblxuLyogcmV0dXJucyB0cnVlIGlmIHRoZSBwcm92aWRlZCBkYXRhIHR5cGUgbWF0Y2hlcyBudW1iZXIgdHlwZSAqL1xuZXhwb3J0IGNvbnN0IGlzTnVtYmVyVHlwZSA9ICh0eXBlOiBhbnkpOiBib29sZWFuID0+IHtcbiAgICByZXR1cm4gKE5VTUJFUl9UWVBFUy5pbmRleE9mKGV4dHJhY3RUeXBlKHR5cGUpLnRvTG93ZXJDYXNlKCkpICE9PSAtMSk7XG59O1xuXG4vKiBmdW5jdGlvbiB0byBjaGVjayBpZiBwcm92aWRlZCBvYmplY3QgaXMgZW1wdHkqL1xuZXhwb3J0IGNvbnN0IGlzRW1wdHlPYmplY3QgPSAob2JqOiBhbnkpOiBib29sZWFuID0+IHtcbiAgICBpZiAoaXNPYmplY3Qob2JqKSAmJiAhaXNBcnJheShvYmopKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLy8gRnVuY3Rpb24gZXhwZWN0cyBhbiBlbGVtZW50IG9uIHdoaWNoIHRoZSBzY3JvbGxpbmcgc2hvdWxkIGJlIGFwcGxpZWQsIERlcGVuZGluZyBvbiB0aGUgb2Zmc2V0IG9mIHRoZSBlbGVtZW50IHNjcm9sbGJhciB3aWxsIGJlIGFkanVzdGVkXG5leHBvcnQgY29uc3Qgc2Nyb2xsVG9FbGVtZW50ID0gKGVsZW1lbnQpID0+IHtcbiAgICBjb25zdCAkZWxlbWVudCA9ICQoZWxlbWVudCk7XG4gICAgY29uc3QgZm9ybVBvc2l0aW9uID0gJGVsZW1lbnQub2Zmc2V0KCkudG9wO1xuICAgIGNvbnN0ICRzY3JvbGxQYXJlbnQgPSAkZWxlbWVudC5jbG9zZXN0KCdbd21zbW9vdGhzY3JvbGw9XCJ0cnVlXCJdJyk7XG4gICAgaWYgKGlzTW9iaWxlQXBwKCkgJiYgJHNjcm9sbFBhcmVudC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgaVNjcm9sbCA9IGdldCgkc2Nyb2xsUGFyZW50WzBdLCAnaXNjcm9sbCcpO1xuICAgICAgICBsZXQgdG8gPSAtKGZvcm1Qb3NpdGlvbiAtIGlTY3JvbGwueSk7XG4gICAgICAgIHRvID0gKGlTY3JvbGwubWF4U2Nyb2xsWSA+IHRvKSA/IGlTY3JvbGwubWF4U2Nyb2xsWSA6IHRvO1xuICAgICAgICBpU2Nyb2xsLnNjcm9sbFRvKDAsIHRvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cuc2Nyb2xsKHtcbiAgICAgICAgICAgIHRvcDogZm9ybVBvc2l0aW9uLFxuICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgIGJlaGF2aW9yOiAnc21vb3RoJ1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbi8vIEZ1bmN0aW9uIHdpbGwgcmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIGVsZW1lbnQgaXMgaW4gdmlld3BvcnQgb3Igbm90XG5leHBvcnQgY29uc3QgaXNFbGVtZW50SW5WaWV3cG9ydCA9IChlbGVtZW50KSA9PiB7XG4gICAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiAoXG4gICAgICAgIHJlY3QudG9wID49IDAgJiZcbiAgICAgICAgcmVjdC5sZWZ0ID49IDAgJiZcbiAgICAgICAgcmVjdC5ib3R0b20gPD0gKHdpbmRvdy5pbm5lckhlaWdodCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KSAmJlxuICAgICAgICByZWN0LnJpZ2h0IDw9ICh3aW5kb3cuaW5uZXJXaWR0aCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGgpXG4gICAgKTtcbn1cblxuLypGdW5jdGlvbiB0byBjaGVjayB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgb2JqZWN0IGlzIGEgcGFnZWFibGUgb2JqZWN0IG9yIG5vdC4qL1xuZXhwb3J0IGNvbnN0IGlzUGFnZWFibGUgPSAob2JqOiBhbnkpOiBib29sZWFuID0+IHtcbiAgICBjb25zdCBwYWdlYWJsZSA9IHtcbiAgICAgICAgJ2NvbnRlbnQnOiBbXSxcbiAgICAgICAgJ2ZpcnN0JzogdHJ1ZSxcbiAgICAgICAgJ2xhc3QnOiB0cnVlLFxuICAgICAgICAnbnVtYmVyJzogMCxcbiAgICAgICAgJ251bWJlck9mRWxlbWVudHMnOiAxMCxcbiAgICAgICAgJ3NpemUnOiAyMCxcbiAgICAgICAgJ3NvcnQnOiBudWxsLFxuICAgICAgICAndG90YWxFbGVtZW50cyc6IDEwLFxuICAgICAgICAndG90YWxQYWdlcyc6IDFcbiAgICB9O1xuICAgIC8vIHBhZ2luYXRlZCBvYmplY3QgbWF5IG9yIG1heSBub3QgY29udGFpbiAnZW1wdHknIHByb3BlcnR5LiBJbiBlaXRoZXIgY2FzZSwgUGFnZWFibGUgc2hvdWxkIHJldHVybiBhcyB0cnVlLlxuICAgIGNvbnN0IHBhZ2luYXRlZE9iaiA9IG9taXQob2JqLCAnZW1wdHknKTtcbiAgICByZXR1cm4gKGlzRXF1YWwoa2V5cyhwYWdlYWJsZSksIGtleXMocGFnaW5hdGVkT2JqKS5zb3J0KCkpKTtcbn07XG5cbi8qXG4gKiBVdGlsIG1ldGhvZCB0byByZXBsYWNlIHBhdHRlcm5zIGluIHN0cmluZyB3aXRoIG9iamVjdCBrZXlzIG9yIGFycmF5IHZhbHVlc1xuICogRXhhbXBsZXM6XG4gKiBVdGlscy5yZXBsYWNlKCdIZWxsbywgJHtmaXJzdH0gJHtsYXN0fSAhJywge2ZpcnN0OiAnd2F2ZW1ha2VyJywgbGFzdDogJ25nJ30pIC0tPiBIZWxsbywgd2F2ZW1ha2VyIG5nXG4gKiBVdGlscy5yZXBsYWNlKCdIZWxsbywgJHswfSAkezF9ICEnLCBbJ3dhdmVtYWtlcicsJ25nJ10pIC0tPiBIZWxsbywgd2F2ZW1ha2VyIG5nXG4gKiBFeGFtcGxlcyBpZiBwYXJzZUVycm9yIGlzIHRydWU6XG4gKiBVdGlscy5yZXBsYWNlKCdIZWxsbywgezB9IHsxfSAhJywgWyd3YXZlbWFrZXInLCduZyddKSAtLT4gSGVsbG8sIHdhdmVtYWtlciBuZ1xuICovXG5leHBvcnQgY29uc3QgcmVwbGFjZSA9ICh0ZW1wbGF0ZSwgbWFwLCBwYXJzZUVycm9yPzogYm9vbGVhbikgPT4ge1xuICAgIGxldCByZWdFeCA9IFJFR0VYLlJFUExBQ0VfUEFUVEVSTjtcbiAgICBpZiAoIXRlbXBsYXRlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHBhcnNlRXJyb3IpIHtcbiAgICAgICAgcmVnRXggPSAvXFx7KFteXFx9XSspXFx9L2c7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UocmVnRXgsIGZ1bmN0aW9uIChtYXRjaCwga2V5KSB7XG4gICAgICAgIHJldHVybiBnZXQobWFwLCBrZXkpO1xuICAgIH0pO1xufTtcblxuLypGdW5jdGlvbiB0byBjaGVjayBpZiBkYXRlIHRpbWUgdHlwZSovXG5leHBvcnQgY29uc3QgaXNEYXRlVGltZVR5cGUgPSB0eXBlID0+IHtcbiAgICBpZiAoaW5jbHVkZXModHlwZSwgJy4nKSkge1xuICAgICAgICB0eXBlID0gdG9Mb3dlcihleHRyYWN0VHlwZSh0eXBlKSk7XG4gICAgfVxuICAgIHJldHVybiBpbmNsdWRlcyhbRGF0YVR5cGUuREFURSwgRGF0YVR5cGUuVElNRSwgRGF0YVR5cGUuVElNRVNUQU1QLCBEYXRhVHlwZS5EQVRFVElNRSwgRGF0YVR5cGUuTE9DQUxEQVRFVElNRV0sIHR5cGUpO1xufTtcblxuY29uc3QgbW9tZW50UGF0dGVybiA9IChwYXR0ZXJuKSA9PiB7XG4gICAgaWYgKGluY2x1ZGVzKHBhdHRlcm4sICdFJykpIHtcbiAgICAgICAgcGF0dGVybiA9IF9yZXBsYWNlKHBhdHRlcm4sIC9FWyxdPy9nLCAnJyk7XG4gICAgfVxuICAgIHJldHVybiBfcmVwbGFjZShwYXR0ZXJuLCAveSpkKi9nLCAodmFsKSA9PiB2YWwudG9VcHBlckNhc2UoKSk7XG59O1xuXG4vKiAgVGhpcyBmdW5jdGlvbiByZXR1cm5zIGRhdGUgb2JqZWN0LiBJZiB2YWwgaXMgdW5kZWZpbmVkIGl0IHJldHVybnMgaW52YWxpZCBkYXRlICovXG5leHBvcnQgY29uc3QgZ2V0VmFsaWREYXRlT2JqZWN0ID0gKHZhbCwgb3B0aW9ucz8pID0+IHtcbiAgIGNvbnN0IGRlZmF1bHRNZXJpZGlhbiA9IFsnQU0nLCAnUE0nXTtcbiAgIGNvbnN0IG1vbWVudE1lcmlkaWFuID0gbW9tZW50KCkuX2xvY2FsZS5tZXJpZGllbSgpO1xuICAgIC8vIFVwZGF0aW5nIGxvY2FsaXplZCBtZXJpZGlhbnMgd2l0aCBkZWZhdWx0IG1lcmlkaWFucyB3aGVuIG1vbWVudCBtZXJpZGlhbiBpcyBub3QgZGVmaW5lZFxuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMubWVyaWRpYW5zICYmIGluY2x1ZGVzKGRlZmF1bHRNZXJpZGlhbiwgbW9tZW50TWVyaWRpYW4pKSB7XG4gICAgICAgIGZvckVhY2gob3B0aW9ucy5tZXJpZGlhbnMsIChtZXJpZGlhbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmNsdWRlcyh2YWwsIG1lcmlkaWFuKSkge1xuICAgICAgICAgICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKG1lcmlkaWFuLCBkZWZhdWx0TWVyaWRpYW5baW5kZXhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IGlzTmF0aXZlUGlja2VyID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5oYXNPd25Qcm9wZXJ0eSgnaXNOYXRpdmVQaWNrZXInKSkgPyBnZXQob3B0aW9ucywgJ2lzTmF0aXZlUGlja2VyJykgOiBpc01vYmlsZSgpO1xuICAgIGNvbnN0IHBhdHRlcm4gPSBpc05hdGl2ZVBpY2tlciA/IChnZXQob3B0aW9ucywgJ3BhdHRlcm4nKSB8fCAnWVlZWS9NTS9ERCBISDptbTpzcycpIDogKG1vbWVudFBhdHRlcm4oZ2V0KG9wdGlvbnMsICdwYXR0ZXJuJykpIHx8ICcnKTtcbiAgICAvLyBIYW5kbGluZyBsb2NhbGl6YXRpb25cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnBhdHRlcm4gJiYgb3B0aW9ucy5wYXR0ZXJuICE9PSAndGltZXN0YW1wJykge1xuICAgICAgICBpZiAoIWlzTmFOKChuZXcgRGF0ZSh2YWwpKS5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgICAvLyBjaGVjayB3aGV0aGVyIHZhbCBpcyBhIHZhbGlkIGRhdGUgb3Igbm90XG4gICAgICAgICAgICBpZiAoaXNJb3MoKSkge1xuICAgICAgICAgICAgICAgIC8vIEZvciBpT1MsIGV4cGxpY2l0bHkgc2V0dGluZyB0aGUgZm9ybWF0IHRvIGNvbnNpZGVyIGV2ZW4gdGhlIHNlY29uZHMuXG4gICAgICAgICAgICAgICAgdmFsID0gbW9tZW50KHZhbCkuZm9ybWF0KCdZWVlZL01NL0REIEhIOm1tOnNzJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWwgPSBtb21lbnQobmV3IERhdGUodmFsKSwgcGF0dGVybik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWwgPSBtb21lbnQodmFsLCBwYXR0ZXJuKTtcbiAgICAgICAgfVxuICAgICAgICB2YWwgPSB2YWwudG9EYXRlKCk7XG4gICAgfVxuXG4gICAgaWYgKG1vbWVudCh2YWwsIHBhdHRlcm4pLmlzVmFsaWQoKSkge1xuICAgICAgICAvLyBkYXRlIHdpdGggKzUgaG91cnMgaXMgcmV0dXJuZWQgaW4gc2FmYXJpIGJyb3dzZXIgd2hpY2ggaXMgbm90IGEgdmFsaWQgZGF0ZS5cbiAgICAgICAgLy8gSGVuY2UgY29udmVydGluZyB0aGUgZGF0ZSB0byB0aGUgc3VwcG9ydGVkIGZvcm1hdCBcIllZWVkvTU0vREQgSEg6bW06c3NcIiBpbiBJT1NcbiAgICAgICAgaWYgKGlzSW9zKCkpIHtcbiAgICAgICAgICAgIHZhbCA9IG1vbWVudChtb21lbnQodmFsKS52YWx1ZU9mKCkpLmZvcm1hdCgnWVlZWS9NTS9ERCBISDptbTpzcycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgfVxuICAgIC8qaWYgdGhlIHZhbHVlIGlzIGEgdGltZXN0YW1wIHN0cmluZywgY29udmVydCBpdCB0byBhIG51bWJlciovXG4gICAgaWYgKCFpc05hTih2YWwpKSB7XG4gICAgICAgIHZhbCA9IHBhcnNlSW50KHZhbCwgMTApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8qaWYgdGhlIHZhbHVlIGlzIGluIEhIOm1tOnNzIGZvcm1hdCwgaXQgcmV0dXJucyBhIHdyb25nIGRhdGUuIFNvIGFwcGVuZCB0aGUgZGF0ZSB0byB0aGUgZ2l2ZW4gdmFsdWUgdG8gZ2V0IGRhdGUqL1xuICAgICAgICBpZiAoIShuZXcgRGF0ZSh2YWwpLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgIHZhbCA9IG1vbWVudCgobW9tZW50KCkuZm9ybWF0KCdZWVlZLU1NLUREJykgKyAnICcgKyB2YWwpLCAnWVlZWS1NTS1ERCBISDptbTpzcyBBJyk7XG5cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IERhdGUobW9tZW50KHZhbCkudmFsdWVPZigpKTtcbn07XG5cbi8qICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgamF2YXNjcmlwdCBkYXRlIG9iamVjdCovXG5leHBvcnQgY29uc3QgZ2V0TmF0aXZlRGF0ZU9iamVjdCA9ICh2YWwsIG9wdGlvbnM/KSA9PiB7XG4gICAgdmFsID0gZ2V0VmFsaWREYXRlT2JqZWN0KHZhbCwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbCk7XG59O1xuXG5cbi8qKlxuICogcHJlcGFyZSBhIGJsb2Igb2JqZWN0IGJhc2VkIG9uIHRoZSBjb250ZW50IGFuZCBjb250ZW50IHR5cGUgcHJvdmlkZWRcbiAqIGlmIGNvbnRlbnQgaXMgYmxvYiBpdHNlbGYsIHNpbXBseSByZXR1cm5zIGl0IGJhY2tcbiAqIEBwYXJhbSB2YWxcbiAqIEBwYXJhbSB2YWxDb250ZW50VHlwZVxuICogQHJldHVybnMgeyp9XG4gKi9cbmV4cG9ydCBjb25zdCBnZXRCbG9iID0gKHZhbCwgdmFsQ29udGVudFR5cGU/KSA9PiB7XG4gICAgaWYgKHZhbCBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgY29uc3QganNvblZhbCA9IGdldFZhbGlkSlNPTih2YWwpO1xuICAgIGlmIChqc29uVmFsICYmIGpzb25WYWwgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgdmFsID0gbmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KGpzb25WYWwpXSwgeyB0eXBlOiB2YWxDb250ZW50VHlwZSB8fCAnYXBwbGljYXRpb24vanNvbicgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFsID0gbmV3IEJsb2IoW3ZhbF0sIHsgdHlwZTogdmFsQ29udGVudFR5cGUgfHwgJ3RleHQvcGxhaW4nIH0pO1xuICAgIH1cbiAgICByZXR1cm4gdmFsO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSBieSBjb21wYXJpbmcgdHdvIG9iamVjdHMgYmFzZWQgb24gdGhlIGZpZWxkc1xuICogQHBhcmFtIG9iajEgb2JqZWN0XG4gKiBAcGFyYW0gb2JqMiBvYmplY3RcbiAqIEBwYXJhbSBjb21wYXJlQnkgc3RyaW5nIGZpZWxkIHZhbHVlcyB0byBjb21wYXJlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gdHJ1ZSBpZiBvYmplY3QgZXF1YWxpdHkgcmV0dXJucyB0cnVlIGJhc2VkIG9uIGZpZWxkc1xuICovXG5leHBvcnQgY29uc3QgaXNFcXVhbFdpdGhGaWVsZHMgPSAob2JqMSwgb2JqMiwgY29tcGFyZUJ5KSA9PiB7XG4gICAgLy8gY29tcGFyZUJ5IGNhbiBiZSAnaWQnIG9yICdpZDEsIGlkMicgb3IgJ2lkMSwgaWQyOmlkMydcbiAgICAvLyBTcGxpdCB0aGUgY29tcGFyZWJ5IGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXNcbiAgICBsZXQgX2NvbXBhcmVCeSA9IGlzQXJyYXkoY29tcGFyZUJ5KSA/IGNvbXBhcmVCeSA6IHNwbGl0KGNvbXBhcmVCeSwgJywnKTtcblxuICAgIF9jb21wYXJlQnkgPSBtYXAoX2NvbXBhcmVCeSwgdHJpbSk7XG5cbiAgICByZXR1cm4gaXNFcXVhbFdpdGgob2JqMSwgb2JqMiwgZnVuY3Rpb24gKG8xLCBvMikge1xuICAgICAgICByZXR1cm4gZXZlcnkoX2NvbXBhcmVCeSwgZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBsZXQgY2IxLCBjYjIsIF9jYjtcblxuICAgICAgICAgICAgLy8gSWYgY29tcGFyZWJ5IGNvbnRhaW5zIDogLCBjb21wYXJlIHRoZSB2YWx1ZXMgYnkgdGhlIGtleXMgb24gZWl0aGVyIHNpZGUgb2YgOlxuICAgICAgICAgICAgaWYgKGluZGV4T2YoY2IsIGNvbXBhcmVCeVNlcGFyYXRvcikgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY2IxID0gY2IyID0gdHJpbShjYik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIF9jYiA9IHNwbGl0KGNiLCBjb21wYXJlQnlTZXBhcmF0b3IpO1xuICAgICAgICAgICAgICAgIGNiMSA9IHRyaW0oX2NiWzBdKTtcbiAgICAgICAgICAgICAgICBjYjIgPSB0cmltKF9jYlsxXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBnZXQobzEsIGNiMSkgPT09IGdldChvMiwgY2IyKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuXG5jb25zdCBnZXROb2RlID0gc2VsZWN0b3IgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7XG5cbi8vIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIHRoZSBzdHlsZXNoZWV0IGlzIGFscmVhZHkgbG9hZGVkXG5jb25zdCBpc1N0eWxlU2hlZXRMb2FkZWQgPSBocmVmID0+ICEhZ2V0Tm9kZShgbGlua1tocmVmPVwiJHtocmVmfVwiXWApO1xuXG4vLyBmdW5jdGlvbiB0byByZW1vdmUgc3R5bGVzaGVldCBpZiB0aGUgc3R5bGVzaGVldCBpcyBhbHJlYWR5IGxvYWRlZFxuY29uc3QgcmVtb3ZlU3R5bGVTaGVldCA9IGhyZWYgPT4ge1xuICAgIGNvbnN0IG5vZGUgPSBnZXROb2RlKGBsaW5rW2hyZWY9XCIke2hyZWZ9XCJdYCk7XG4gICAgaWYgKG5vZGUpIHtcbiAgICAgICAgbm9kZS5yZW1vdmUoKTtcbiAgICB9XG59O1xuXG4vLyBmdW5jdGlvbiB0byBsb2FkIGEgc3R5bGVzaGVldFxuZXhwb3J0IGNvbnN0IGxvYWRTdHlsZVNoZWV0ID0gKHVybCwgYXR0cikgPT4ge1xuICAgIGlmIChpc1N0eWxlU2hlZXRMb2FkZWQodXJsKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XG4gICAgbGluay5ocmVmID0gdXJsO1xuICAgIC8vIFRvIGFkZCBhdHRyaWJ1dGVzIHRvIGxpbmsgdGFnXG4gICAgaWYgKGF0dHIgJiYgYXR0ci5uYW1lKSB7XG4gICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKGF0dHIubmFtZSwgYXR0ci52YWx1ZSk7XG4gICAgfVxuICAgIGxpbmsuc2V0QXR0cmlidXRlKCdyZWwnLCAnc3R5bGVzaGVldCcpO1xuICAgIGxpbmsuc2V0QXR0cmlidXRlKCd0eXBlJywgJ3RleHQvY3NzJyk7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICByZXR1cm4gbGluaztcbn07XG5cbi8vIGZ1bmN0aW9uIHRvIGxvYWQgc3R5bGVzaGVldHNcbmV4cG9ydCBjb25zdCBsb2FkU3R5bGVTaGVldHMgPSAodXJscyA9IFtdKSA9PiB7XG4gICAgLy8gaWYgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIG5vdCBhbiBhcnJheSwgY29udmVydCBpdCB0byBhbiBhcnJheVxuICAgIGlmICghQXJyYXkuaXNBcnJheSh1cmxzKSkge1xuICAgICAgICB1cmxzID0gW3VybHNdO1xuICAgIH1cbiAgICB1cmxzLmZvckVhY2gobG9hZFN0eWxlU2hlZXQpO1xufTtcblxuLy8gZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIHNjcmlwdCBpcyBhbHJlYWR5IGxvYWRlZFxuY29uc3QgaXNTY3JpcHRMb2FkZWQgPSBzcmMgPT4gISFnZXROb2RlKGBzY3JpcHRbc3JjPVwiJHtzcmN9XCJdLCBzY3JpcHRbZGF0YS1zcmM9XCIke3NyY31cIl1gKTtcblxuZXhwb3J0IGNvbnN0IGdldE1vbWVudExvY2FsZU9iamVjdCA9ICh0aW1lWm9uZSwgZGF0ZU9iaj8pID0+IHtcbiAgICBpZiAoZGF0ZU9iaikge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUobmV3IERhdGUobW9tZW50KGRhdGVPYmopLnR6KHRpbWVab25lKS5mb3JtYXQoKSkudG9Mb2NhbGVTdHJpbmcoXCJlbi1VU1wiLCB7dGltZVpvbmU6IHRpbWVab25lfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShuZXcgRGF0ZShtb21lbnQoKS50eih0aW1lWm9uZSkuZm9ybWF0KCkpLnRvTG9jYWxlU3RyaW5nKFwiZW4tVVNcIiwge3RpbWVab25lOiB0aW1lWm9uZX0pKTtcbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBsb2FkU2NyaXB0ID0gYXN5bmMgKHVybCwgbG9hZFZpYVNjcmlwdFRhZywgY2FjaGVhYmxlID0gZmFsc2UpID0+IHtcbiAgICBjb25zdCBfdXJsID0gdXJsLnRyaW0oKTtcbiAgICBpZiAoIV91cmwubGVuZ3RoIHx8IGlzU2NyaXB0TG9hZGVkKF91cmwpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG5cbiAgICBpZiAobG9hZFZpYVNjcmlwdFRhZykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KT0+e1xuICAgICAgICAgICAgbGV0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICAgICAgc2NyaXB0LnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JztcbiAgICAgICAgICAgIHNjcmlwdC5zcmMgPSBfdXJsO1xuICAgICAgICAgICAgc2NyaXB0LmFzeW5jID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc2NyaXB0LnJlYWR5U3RhdGUpIHsgIC8vSUVcbiAgICAgICAgICAgICAgICBzY3JpcHQub25yZWFkeXN0YXRlY2hhbmdlID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwibG9hZGVkXCIgfHwgc2NyaXB0LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NyaXB0Lm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7ICAvL090aGVyIGJyb3dzZXJzXG4gICAgICAgICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2NyaXB0Lm9uZXJyb3IgPSAoZXJyb3I6IGFueSkgPT4gcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmKGNhY2hlYWJsZSkge1xuICAgICAgICByZXR1cm4gJC5hamF4KHtcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnc2NyaXB0JyxcbiAgICAgICAgICAgIGNhY2hlOiB0cnVlLFxuICAgICAgICAgICAgdXJsOiB1cmxcbiAgICAgICAgfSkuZG9uZShyZXNwb25zZSA9PiByZXNwb25zZSlcbiAgICAgICAgICAgIC5mYWlsKHJlYXNvbiA9PiByZWFzb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAkLmdldFNjcmlwdCh1cmwpXG4gICAgICAgICAgICAuZG9uZShyZXNwb25zZSA9PiByZXNwb25zZSlcbiAgICAgICAgICAgIC5mYWlsKHJlYXNvbiA9PiByZWFzb24pO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBsb2FkU2NyaXB0cyA9IGFzeW5jICh1cmxzID0gW10sIGxvYWRWaWFTY3JpcHRUYWcgPSB0cnVlKSA9PiB7XG4gICAgZm9yIChjb25zdCB1cmwgb2YgdXJscykge1xuICAgICAgICBhd2FpdCBsb2FkU2NyaXB0KHVybCwgbG9hZFZpYVNjcmlwdFRhZyk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbn07XG5cbmV4cG9ydCBsZXQgX1dNX0FQUF9QUk9KRUNUOiBhbnkgPSB7fTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHNldHMgc2Vzc2lvbiBzdG9yYWdlIGl0ZW0gYmFzZWQgb24gdGhlIHByb2plY3QgSURcbiAqIEBwYXJhbSBrZXkgc3RyaW5nXG4gKiBAcGFyYW0gdmFsdWUgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uU3RvcmFnZUl0ZW0gPSAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgIGxldCBpdGVtOiBhbnkgPSB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShfV01fQVBQX1BST0pFQ1QuaWQpO1xuXG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgaXRlbSA9IEpTT04ucGFyc2UoaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbSA9IHt9O1xuICAgIH1cbiAgICBpdGVtW2tleV0gPSB2YWx1ZTtcblxuICAgIHdpbmRvdy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKF9XTV9BUFBfUFJPSkVDVC5pZCwgSlNPTi5zdHJpbmdpZnkoaXRlbSkpO1xufTtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGdldHMgc2Vzc2lvbiBzdG9yYWdlIGl0ZW0gYmFzZWQgb24gdGhlIHByb2plY3QgSURcbiAqIEBwYXJhbSBrZXkgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTZXNzaW9uU3RvcmFnZUl0ZW0gPSBrZXkgPT4ge1xuICAgIC8vIHNhbml0eSBjaGVjayBmb3IgdGhpcyB0byB3b3JrIHdpdGggbmctY29kZWdlblxuICAgIGxldCBpdGVtID0gd2luZG93ICYmIHdpbmRvdy5zZXNzaW9uU3RvcmFnZSAmJiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShfV01fQVBQX1BST0pFQ1QuaWQpO1xuXG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgICAgaXRlbSA9IEpTT04ucGFyc2UoaXRlbSk7XG4gICAgICAgIHJldHVybiBpdGVtW2tleV07XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IG5vb3AgPSAoLi4uYXJncykgPT4geyB9O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGJsb2Igb2JqZWN0IGZyb20gdGhlIGdpdmVuIGZpbGUgcGF0aFxuICogQHBhcmFtIGZpbGVwYXRoXG4gKiBAcmV0dXJucyBwcm9taXNlIGhhdmluZyBibG9iIG9iamVjdFxuICovXG5leHBvcnQgY29uc3QgY29udmVydFRvQmxvYiA9IChmaWxlcGF0aCk6IFByb21pc2U8YW55PiA9PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAvLyBSZWFkIHRoZSBmaWxlIGVudHJ5IGZyb20gdGhlIGZpbGUgVVJMXG4gICAgICAgIHJlc29sdmVMb2NhbEZpbGVTeXN0ZW1VUkwoZmlsZXBhdGgsIGZ1bmN0aW9uIChmaWxlRW50cnkpIHtcbiAgICAgICAgICAgIGZpbGVFbnRyeS5maWxlKGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgICAgICAgICAgLy8gZmlsZSBoYXMgdGhlIGNvcmRvdmEgZmlsZSBzdHJ1Y3R1cmUuIFRvIHN1Ym1pdCB0byB0aGUgYmFja2VuZCwgY29udmVydCB0aGlzIGZpbGUgdG8gamF2YXNjcmlwdCBmaWxlXG4gICAgICAgICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICByZWFkZXIub25sb2FkZW5kID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWdCbG9iID0gbmV3IEJsb2IoW3JlYWRlci5yZXN1bHRdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAndHlwZSc6IGZpbGUudHlwZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh7ICdibG9iJzogaW1nQmxvYiwgJ2ZpbGVwYXRoJzogZmlsZXBhdGggfSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZWFkZXIub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNDb3Jkb3ZhID0gKCkgPT4ge1xuICAgIHJldHVybiAhIXdpbmRvd1snY29yZG92YSddO1xufTtcblxuZXhwb3J0IGNvbnN0IEFwcENvbnN0YW50cyA9IHtcbiAgICBJTlRfTUFYX1ZBTFVFOiAyMTQ3NDgzNjQ3XG59O1xuXG5leHBvcnQgY29uc3Qgb3BlbkxpbmsgPSAobGluazogc3RyaW5nLCB0YXJnZXQ6IHN0cmluZyA9ICdfc2VsZicpID0+IHtcbiAgICBpZiAoaGFzQ29yZG92YSgpICYmIHN0YXJ0c1dpdGgobGluaywgJyMnKSkge1xuICAgICAgICBsb2NhdGlvbi5oYXNoID0gbGluaztcbiAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cub3BlbihsaW5rLCB0YXJnZXQpO1xuICAgIH1cbn07XG5cbi8qIHV0aWwgZnVuY3Rpb24gdG8gbG9hZCB0aGUgY29udGVudCBmcm9tIGEgdXJsICovXG5leHBvcnQgY29uc3QgZmV0Y2hDb250ZW50ID0gKGRhdGFUeXBlLCB1cmw6IHN0cmluZywgaW5TeW5jOiBib29sZWFuID0gZmFsc2UsIHN1Y2Nlc3M/LCBlcnJvcj8pOiBQcm9taXNlPGFueT4gPT4ge1xuICAgIHJldHVybiAkLmFqYXgoeyB0eXBlOiAnZ2V0JywgZGF0YVR5cGU6IGRhdGFUeXBlLCB1cmw6IHVybCwgYXN5bmM6ICFpblN5bmMgfSlcbiAgICAgICAgLmRvbmUocmVzcG9uc2UgPT4gc3VjY2VzcyAmJiBzdWNjZXNzKHJlc3BvbnNlKSlcbiAgICAgICAgLmZhaWwocmVhc29uID0+IGVycm9yICYmIGVycm9yKHJlYXNvbikpO1xufTtcblxuLyoqXG4gKiBJZiB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGEgcHJvbWlzZSwgdGhlbiBvYmplY3QgaXMgcmV0dXJuZWQuIE90aGVyd2lzZSwgYSBwcm9taXNlIGlzIHJlc29sdmVkIHdpdGggdGhlIGdpdmVuIG9iamVjdC5cbiAqIEBwYXJhbSB7UHJvbWlzZTxUPiB8IFR9IGFcbiAqIEByZXR1cm5zIHtQcm9taXNlPFQ+fVxuICovXG5leHBvcnQgY29uc3QgdG9Qcm9taXNlID0gPFQ+KGE6IFQgfCBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiA9PiB7XG4gICAgaWYgKGEgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgIHJldHVybiBhO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYSBhcyBUKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gaW52b2tlcyB0aGUgZ2l2ZW4gdGhlIGZ1bmN0aW9uIChmbikgdW50aWwgdGhlIGZ1bmN0aW9uIHN1Y2Nlc3NmdWxseSBleGVjdXRlcyBvciB0aGUgbWF4aW11bSBudW1iZXJcbiAqIG9mIHJldHJpZXMgaXMgcmVhY2hlZCBvciBvbkJlZm9yZVJldHJ5IHJldHVybnMgZmFsc2UuXG4gKlxuICogQHBhcmFtIGZuIC0gYSBmdW5jdGlvbiB0aGF0IGlzIG5lZWRzIHRvIGJlIGludm9rZWQuIFRoZSBmdW5jdGlvbiBjYW4gYWxzbyByZXR1cm4gYSBwcm9taXNlIGFzIHdlbGwuXG4gKiBAcGFyYW0gaW50ZXJ2YWwgLSBtaW5pbXVtIHRpbWUgZ2FwIGJldHdlZW4gc3VjY2Vzc2l2ZSByZXRyaWVzLiBUaGlzIGFyZ3VtZW50IHNob3VsZCBiZSBncmVhdGVyIG9yIGVxdWFsIHRvIDAuXG4gKiBAcGFyYW0gbWF4UmV0cmllcyAtIG1heGltdW0gbnVtYmVyIG9mIHJldHJpZXMuIFRoaXMgYXJndW1lbnQgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwLiBGb3IgYWxsIG90aGVyIHZhbHVlcyxcbiAqIG1heFJldHJpZXMgaXMgaW5maW5pdHkuXG4gKiBAcGFyYW0gb25CZWZvcmVSZXRyeSAtIGEgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGludm9rZWQgYmVmb3JlIHJlLWludm9raW5nIGFnYWluLiBUaGlzIGZ1bmN0aW9uIGNhblxuICogcmV0dXJuIGZhbHNlIG9yIGEgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHRvIGZhbHNlIHRvIHN0b3AgZnVydGhlciByZXRyeSBhdHRlbXB0cy5cbiAqIEByZXR1cm5zIHsqfSBhIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIGZuIGlzIHN1Y2Nlc3MgKG9yKSBtYXhpbXVtIHJldHJ5IGF0dGVtcHRzIHJlYWNoZWRcbiAqIChvcikgb25CZWZvcmVSZXRyeSByZXR1cm5lZCBmYWxzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHJldHJ5SWZGYWlscyA9IChmbjogKCkgPT4gYW55LCBpbnRlcnZhbDogbnVtYmVyLCBtYXhSZXRyaWVzOiBudW1iZXIsIG9uQmVmb3JlUmV0cnkgPSAoKSA9PiBQcm9taXNlLnJlc29sdmUoZmFsc2UpKSA9PiB7XG4gICAgbGV0IHJldHJ5Q291bnQgPSAwO1xuICAgIGNvbnN0IHRyeUZuID0gKCkgPT4ge1xuICAgICAgICByZXRyeUNvdW50Kys7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGZuKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZuKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIG1heFJldHJpZXMgPSAoaXNOdW1iZXIobWF4UmV0cmllcykgJiYgbWF4UmV0cmllcyA+IDAgPyBtYXhSZXRyaWVzIDogMCk7XG4gICAgaW50ZXJ2YWwgPSAoaXNOdW1iZXIoaW50ZXJ2YWwpICYmIGludGVydmFsID4gMCA/IGludGVydmFsIDogMCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JGbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVyckFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0b1Byb21pc2U8Ym9vbGVhbj4ob25CZWZvcmVSZXRyeSgpKS50aGVuKGZ1bmN0aW9uIChyZXRyeSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnkgIT09IGZhbHNlICYmICghbWF4UmV0cmllcyB8fCByZXRyeUNvdW50IDw9IG1heFJldHJpZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b1Byb21pc2UodHJ5Rm4oKSkudGhlbihyZXNvbHZlLCBlcnJvckZuKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJBcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sICgpID0+IHJlamVjdChlcnJBcmdzKSk7XG4gICAgICAgICAgICB9LCBpbnRlcnZhbCk7XG4gICAgICAgIH07XG4gICAgICAgIHRvUHJvbWlzZSh0cnlGbigpKS50aGVuKHJlc29sdmUsIGVycm9yRm4pO1xuICAgIH0pO1xufTtcblxuLyoqXG4gKiBQcm9taXNlIG9mIGEgZGVmZXIgY3JlYXRlZCB1c2luZyB0aGlzIGZ1bmN0aW9uLCBoYXMgYWJvcnQgZnVuY3Rpb24gdGhhdCB3aWxsIHJlamVjdCB0aGUgZGVmZXIgd2hlbiBjYWxsZWQuXG4gKiBAcmV0dXJucyB7Kn0gYW5ndWxhciBkZWZlciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGdldEFib3J0YWJsZURlZmVyID0gKCkgPT4ge1xuICAgIGNvbnN0IF9kZWZlcjogYW55ID0ge1xuICAgICAgICBwcm9taXNlOiBudWxsLFxuICAgICAgICByZWplY3Q6IG51bGwsXG4gICAgICAgIHJlc29sdmU6IG51bGwsXG4gICAgICAgIG9uQWJvcnQ6ICgpID0+IHsgfSxcbiAgICAgICAgaXNBYm9ydGVkOiBmYWxzZVxuICAgIH07XG4gICAgX2RlZmVyLnByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIF9kZWZlci5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgICAgX2RlZmVyLnJlamVjdCA9IHJlamVjdDtcbiAgICB9KTtcbiAgICBfZGVmZXIucHJvbWlzZS5hYm9ydCA9ICgpID0+IHtcbiAgICAgICAgdHJpZ2dlckZuKF9kZWZlci5vbkFib3J0KTtcbiAgICAgICAgX2RlZmVyLnJlamVjdCgnYWJvcnRlZCcpO1xuICAgICAgICBfZGVmZXIuaXNBYm9ydGVkID0gdHJ1ZTtcbiAgICB9O1xuICAgIHJldHVybiBfZGVmZXI7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQ1NTUnVsZSA9IChydWxlU2VsZWN0b3I6IHN0cmluZywgcnVsZXM6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHN0eWxlc2hlZXQgPSBkb2N1bWVudC5zdHlsZVNoZWV0c1swXTtcbiAgICBzdHlsZXNoZWV0Lmluc2VydFJ1bGUoYCR7cnVsZVNlbGVjdG9yfSB7ICR7cnVsZXN9IH1gKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVcmxQYXJhbXMgPSAobGluaykgPT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHt9O1xuICAgIC8vIElmIHVybCBwYXJhbXMgYXJlIHByZXNlbnQsIGNvbnN0cnVjdCBwYXJhbXMgb2JqZWN0IGFuZCBwYXNzIGl0IHRvIHNlYXJjaFxuICAgIGNvbnN0IGluZGV4ID0gbGluay5pbmRleE9mKCc/Jyk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IHNwbGl0KGxpbmsuc3Vic3RyaW5nKGluZGV4ICsgMSwgbGluay5sZW5ndGgpLCAnJicpO1xuICAgICAgICBxdWVyeVBhcmFtcy5mb3JFYWNoKChwYXJhbSkgPT4ge1xuICAgICAgICAgICAgbGV0IHBhcmFtQXJyYXkgPSBzcGxpdChwYXJhbSwgJz0nKTtcbiAgICAgICAgICAgIHBhcmFtc1twYXJhbUFycmF5WzBdXSA9IHBhcmFtQXJyYXlbMV07XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcGFyYW1zO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJvdXRlTmFtZUZyb21MaW5rID0gKGxpbmspID0+IHtcbiAgICBsaW5rID0gbGluay5yZXBsYWNlKCcjLycsICcvJyk7XG4gICAgY29uc3QgaW5kZXggPSBsaW5rLmluZGV4T2YoJz8nKTtcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgIGxpbmsgPSBsaW5rLnN1YnN0cmluZygwLCBpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiBsaW5rO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQXBwbGVQcm9kdWN0ID0gL01hY3xpUG9kfGlQaG9uZXxpUGFkLy50ZXN0KHdpbmRvdy5uYXZpZ2F0b3IucGxhdGZvcm0pO1xuXG5leHBvcnQgY29uc3QgZGVmZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgZCA9IHtcbiAgICAgICAgcHJvbWlzZTogbnVsbCxcbiAgICAgICAgcmVzb2x2ZTogbm9vcCxcbiAgICAgICAgcmVqZWN0OiBub29wXG4gICAgfTtcbiAgICBkLnByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGQucmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICAgIGQucmVqZWN0ID0gcmVqZWN0O1xuICAgIH0pO1xuICAgIHJldHVybiBkO1xufTtcblxuLypcbiAqIEludm9rZXMgdGhlIGdpdmVuIGxpc3Qgb2YgZnVuY3Rpb25zIHNlcXVlbnRpYWxseSB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHMuIElmIGEgZnVuY3Rpb24gcmV0dXJucyBhIHByb21pc2UsXG4gKiB0aGVuIG5leHQgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIG9ubHkgaWYgdGhlIHByb21pc2UgaXMgcmVzb2x2ZWQuXG4gKi9cbmV4cG9ydCBjb25zdCBleGVjdXRlUHJvbWlzZUNoYWluID0gKGZucywgYXJncywgZD8sIGk/KSA9PiB7XG4gICAgZCA9IGQgfHwgZGVmZXIoKTtcbiAgICBpID0gaSB8fCAwO1xuICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgIGZucyA9IGZpbHRlcihmbnMsIGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgcmV0dXJuICEoaXNVbmRlZmluZWQoZm4pIHx8IGlzTnVsbChmbikpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGZucyAmJiBpIDwgZm5zLmxlbmd0aCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdG9Qcm9taXNlKGZuc1tpXS5hcHBseSh1bmRlZmluZWQsIGFyZ3MpKVxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IGV4ZWN1dGVQcm9taXNlQ2hhaW4oZm5zLCBhcmdzLCBkLCBpICsgMSksIGQucmVqZWN0KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZC5yZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBkLnJlc29sdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGQucHJvbWlzZTtcbn07XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBhY2NlcHRzIHR3byBkYXRhIHNvdXJjZXMgYW5kIHdpbGwgY2hlY2sgaWYgYm90aCBhcmUgc2FtZSBieSBjb21wYXJpbmcgdGhlIHVuaXF1ZSBpZCBhbmRcbiAqIGNvbnRleHQgaW4gd2hpY2ggZGF0YXNvdXJjZXMgYXJlIHByZXNlbnRcbiAqIEByZXR1cm5zIHsqfSBib29sZWFuIHRydWUvIGZhbHNlXG4gKi9cbmV4cG9ydCBjb25zdCBpc0RhdGFTb3VyY2VFcXVhbCA9IChkMSwgZDIpID0+IHtcbiAgICByZXR1cm4gZDEuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfVU5JUVVFX0lERU5USUZJRVIpID09PSBkMi5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9VTklRVUVfSURFTlRJRklFUikgJiZcbiAgICAgICAgaXNFcXVhbChkMS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9DT05URVhUX0lERU5USUZJRVIpLCBkMi5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLkdFVF9DT05URVhUX0lERU5USUZJRVIpKTtcbn07XG5cbi8qKlxuICogY2hlY2tzIGlmIHRoZSBwYXNzZWQgZGF0YXNvdXJjZSBjb250ZXh0IG1hdGNoZXMgd2l0aCBwYXNzZWQgY29udGV4dFxuICogQHBhcmFtIGRzLCBkYXRhc291cmNlIGhhdmluZyBhIGNvbnRleHRcbiAqIEBwYXJhbSBjdHgsIGNvbnRleHQgdG8gY29tcGFyZSB3aXRoXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlRGF0YVNvdXJjZUN0eCA9IChkcywgY3R4KSA9PiB7XG4gICAgcmV0dXJuIGRzLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX0NPTlRFWFRfSURFTlRJRklFUikgPT09IGN0eDtcbn07XG5cbi8qKlxuICogVGhpcyB0cmF2ZXJzZXMgdGhlIGZpbHRlcmV4cHJlc3Npb25zIG9iamVjdCByZWN1cnNpdmVseSBhbmQgcHJvY2VzcyB0aGUgYmluZCBzdHJpbmcgaWYgYW55IGluIHRoZSBvYmplY3RcbiAqIEBwYXJhbSB2YXJpYWJsZSB2YXJpYWJsZSBvYmplY3RcbiAqIEBwYXJhbSBuYW1lIG5hbWUgb2YgdGhlIHZhcmlhYmxlXG4gKiBAcGFyYW0gY29udGV4dCBzY29wZSBvZiB0aGUgdmFyaWFibGVcbiAqL1xuZXhwb3J0IGNvbnN0IHByb2Nlc3NGaWx0ZXJFeHBCaW5kTm9kZSA9IChjb250ZXh0LCBmaWx0ZXJFeHByZXNzaW9ucywgdmFyaWFibGU/KSA9PiB7XG4gICAgY29uc3QgZGVzdHJveUZuID0gY29udGV4dC5yZWdpc3RlckRlc3Ryb3lMaXN0ZW5lciA/IGNvbnRleHQucmVnaXN0ZXJEZXN0cm95TGlzdGVuZXIuYmluZChjb250ZXh0KSA6IF9ub29wO1xuICAgIGNvbnN0IGZpbHRlciQgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgY29uc3QgYmluZEZpbEV4cE9iaiA9IChvYmosIHRhcmdldE5vZGVLZXkpID0+IHtcbiAgICAgICBjb25zdCBsaXN0ZW5lciA9IChuZXdWYWwsIG9sZFZhbCkgPT4ge1xuICAgICAgICAgICBpZiAoKG5ld1ZhbCA9PT0gb2xkVmFsICYmIGlzVW5kZWZpbmVkKG5ld1ZhbCkpIHx8IChpc1VuZGVmaW5lZChuZXdWYWwpICYmICFpc1VuZGVmaW5lZChvbGRWYWwpKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNraXAgY2xvbmluZyBmb3IgYmxvYiBjb2x1bW5cbiAgICAgICAgICAgaWYgKCFpbmNsdWRlcyhbJ2Jsb2InLCAnZmlsZSddLCBvYmoudHlwZSkpIHtcbiAgICAgICAgICAgICAgICBuZXdWYWwgPSBnZXRDbG9uZWRPYmplY3QobmV3VmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6IHdoZXJlIHdlIGFyZSBhbGxvd2luZyB0aGUgdXNlciB0byBiaW5kIGNvbXBsZXRlIG9iamVjdFxuICAgICAgICAgICAgaWYgKG9iai50YXJnZXQgPT09ICdkYXRhQmluZGluZycpIHtcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgdGhlIGV4aXN0aW5nIGRhdGFiaW5kaW5nIGVsZW1lbnRcbiAgICAgICAgICAgICAgICBmaWx0ZXJFeHByZXNzaW9ucy5ydWxlcyA9IFtdO1xuICAgICAgICAgICAgICAgIC8vIG5vdyBhZGQgYWxsIHRoZSByZXR1cm5lZCB2YWx1ZXNcbiAgICAgICAgICAgICAgICBmb3JFYWNoKG5ld1ZhbCwgZnVuY3Rpb24gKHZhbHVlLCB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyRXhwcmVzc2lvbnMucnVsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAndGFyZ2V0JzogdGFyZ2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3ZhbHVlJzogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAnbWF0Y2hNb2RlJzogb2JqLm1hdGNoTW9kZSB8fCAnc3RhcnRpZ25vcmVjYXNlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdyZXF1aXJlZCc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiAnJ1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gc2V0dGluZyB2YWx1ZSB0byB0aGUgcm9vdCBub2RlXG4gICAgICAgICAgICAgICAgb2JqW3RhcmdldE5vZGVLZXldID0gbmV3VmFsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlsdGVyJC5uZXh0KHsgZmlsdGVyRXhwcmVzc2lvbnMsIG5ld1ZhbCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpbmdTdGFydHNXaXRoKG9ialt0YXJnZXROb2RlS2V5XSwgJ2JpbmQ6JykpIHtcbiAgICAgICAgICAgIC8vIFtUb2RvLUNTUF06IG5lZWRzIGEgY2hlY2ssIHdoZXJlIGlzIHRoaXMgdXNlZFxuICAgICAgICAgICAgZGVzdHJveUZuKFxuICAgICAgICAgICAgICAgICR3YXRjaChvYmpbdGFyZ2V0Tm9kZUtleV0ucmVwbGFjZSgnYmluZDonLCAnJyksIGNvbnRleHQsIHt9LCB2YXJpYWJsZSA/IHZhcmlhYmxlLmludm9rZU9uRmlsdGVydEV4cHJlc3Npb25DaGFuZ2UuYmluZCh2YXJpYWJsZSwgb2JqLCB0YXJnZXROb2RlS2V5KSA6IGxpc3RlbmVyLCB1bmRlZmluZWQsIGZhbHNlLCB7YXJyYXlUeXBlOiBpbmNsdWRlcyhbJ2luJywgJ25vdGluJ10sIG9iai5tYXRjaE1vZGUpfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgdHJhdmVyc2VGaWx0ZXJFeHByZXNzaW9ucyA9IGV4cHJlc3Npb25zID0+IHtcbiAgICAgICAgaWYgKGV4cHJlc3Npb25zLnJ1bGVzKSB7XG4gICAgICAgICAgICBmb3JFYWNoKGV4cHJlc3Npb25zLnJ1bGVzLCAoZmlsRXhwT2JqLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbEV4cE9iai5ydWxlcykge1xuICAgICAgICAgICAgICAgICAgICB0cmF2ZXJzZUZpbHRlckV4cHJlc3Npb25zKGZpbEV4cE9iaik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbEV4cE9iai5tYXRjaE1vZGUgPT09ICdiZXR3ZWVuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmluZEZpbEV4cE9iaihmaWxFeHBPYmosICdzZWNvbmR2YWx1ZScpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJpbmRGaWxFeHBPYmooZmlsRXhwT2JqLCAndmFsdWUnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdHJhdmVyc2VGaWx0ZXJFeHByZXNzaW9ucyhmaWx0ZXJFeHByZXNzaW9ucyk7XG5cbiAgICByZXR1cm4gZmlsdGVyJDtcbn07XG5cbi8vIFRoaXMgbWV0aG9kIHdpbGwgc2V0IHRoZSBnaXZlbiBwcm90byBvbiB0aGUgdGFyZ2V0XG5leHBvcnQgY29uc3QgZXh0ZW5kUHJvdG8gPSAodGFyZ2V0LCBwcm90bykgPT4ge1xuICAgIGxldCBfcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGFyZ2V0KTtcbiAgICB3aGlsZSAoT2JqZWN0LmdldFByb3RvdHlwZU9mKF9wcm90bykuY29uc3RydWN0b3IgIT09IE9iamVjdCkge1xuICAgICAgICBfcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoX3Byb3RvKTtcbiAgICAgICAgLy8gcmV0dXJuIGlmIHRoZSBwcm90b3R5cGUgb2YgY3JlYXRlZCBjb21wb25lbnQgYW5kIHByb3RvdHlwZSBvZiBjb250ZXh0IGFyZSBzYW1lXG4gICAgICAgIGlmIChwcm90byA9PT0gX3Byb3RvKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKF9wcm90bywgcHJvdG8pO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlbW92ZUV4dHJhU2xhc2hlcyA9IGZ1bmN0aW9uICh1cmwpIHtcbiAgICBjb25zdCBiYXNlNjRyZWdleCA9IC9eZGF0YTppbWFnZVxcLyhbYS16XXsyLH0pO2Jhc2U2NCwvO1xuICAgIGlmIChpc1N0cmluZyh1cmwpKSB7XG4gICAgICAgIC8qXG4gICAgICAgICogc3VwcG9ydCBmb3IgbW9iaWxlIGFwcHMgaGF2aW5nIGxvY2FsIGZpbGUgcGF0aCB1cmwgc3RhcnRpbmcgd2l0aCBmaWxlOi8vLyBhbmRcbiAgICAgICAgKiBzdXBwb3J0IGZvciBiYXNlNjQgZm9ybWF0XG4gICAgICAgICogKi9cbiAgICAgICAgaWYgKHN0YXJ0c1dpdGgodXJsLCAnZmlsZTovLy8nKSB8fCBiYXNlNjRyZWdleC50ZXN0KHVybCkpIHtcbiAgICAgICAgICAgIHJldHVybiB1cmw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKG5ldyBSZWdFeHAoJyhbXjpdXFwvKShcXC8pKycsICdnJyksICckMScpO1xuICAgIH1cbn07XG5cbiQuY2FjaGVkU2NyaXB0ID0gKCgpID0+IHtcbiAgICBjb25zdCBpblByb2dyZXNzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IHJlc29sdmVkID0gbmV3IFNldCgpO1xuXG4gICAgY29uc3QgaXNJblByb2dyZXNzID0gdXJsID0+IGluUHJvZ3Jlc3MuaGFzKHVybCk7XG4gICAgY29uc3QgaXNSZXNvbHZlZCA9IHVybCA9PiByZXNvbHZlZC5oYXModXJsKTtcbiAgICBjb25zdCBvbkxvYWQgPSB1cmwgPT4ge1xuICAgICAgICByZXNvbHZlZC5hZGQodXJsKTtcbiAgICAgICAgaW5Qcm9ncmVzcy5nZXQodXJsKS5yZXNvbHZlKCk7XG4gICAgICAgIGluUHJvZ3Jlc3MuZGVsZXRlKHVybCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHNldEluUHJvZ3Jlc3MgPSB1cmwgPT4ge1xuICAgICAgICBsZXQgcmVzRm47XG4gICAgICAgIGxldCByZWpGbjtcbiAgICAgICAgY29uc3QgcHJvbWlzZTogYW55ID0gbmV3IFByb21pc2UoKHJlcywgcmVqKSA9PiB7XG4gICAgICAgICAgICByZXNGbiA9IHJlcztcbiAgICAgICAgICAgIHJlakZuID0gcmVqO1xuICAgICAgICB9KTtcblxuICAgICAgICBwcm9taXNlLnJlc29sdmUgPSByZXNGbjtcbiAgICAgICAgcHJvbWlzZS5yZWplY3QgPSByZWpGbjtcblxuICAgICAgICBpblByb2dyZXNzLnNldCh1cmwsIHByb21pc2UpO1xuICAgIH07XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKHVybCkge1xuICAgICAgICBpZiAoaXNSZXNvbHZlZCh1cmwpKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNJblByb2dyZXNzKHVybCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpblByb2dyZXNzLmdldCh1cmwpO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0SW5Qcm9ncmVzcyh1cmwpO1xuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgICAgICBkYXRhVHlwZTogJ3NjcmlwdCcsXG4gICAgICAgICAgICBjYWNoZTogdHJ1ZSxcbiAgICAgICAgICAgIHVybFxuICAgICAgICB9O1xuXG4gICAgICAgICQuYWpheChvcHRpb25zKS5kb25lKCgpID0+IG9uTG9hZCh1cmwpKTtcblxuICAgICAgICByZXR1cm4gaW5Qcm9ncmVzcy5nZXQodXJsKTtcbiAgICB9O1xufSkoKTtcblxuY29uc3QgREVGQVVMVF9ESVNQTEFZX0ZPUk1BVFMgPSB7XG4gICAgREFURTogJ3l5eXktTU0tZGQnLFxuICAgIFRJTUU6ICdoaDptbSBhJyxcbiAgICBUSU1FU1RBTVA6ICd5eXl5LU1NLWRkIGhoOm1tOnNzIGEnLFxuICAgIERBVEVUSU1FOiAneXl5eS1NTS1kZCBoaDptbTpzcyBhJyxcbn07XG4vLyBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBkaXNwbGF5IGRhdGUgZm9ybWF0IGZvciBnaXZlbiB0eXBlXG5leHBvcnQgY29uc3QgZ2V0RGlzcGxheURhdGVUaW1lRm9ybWF0ID0gdHlwZSA9PiB7XG4gICAgcmV0dXJuIERFRkFVTFRfRElTUExBWV9GT1JNQVRTW3RvVXBwZXIodHlwZSldO1xufTtcblxuLy8gR2VuZXJhdGUgZm9yIGF0dHJpYnV0ZSBvbiBsYWJlbCBhbmQgSUQgb24gaW5wdXQgZWxlbWVudCwgc28gdGhhdCBsYWJlbCBlbGVtZW50cyBhcmUgYXNzb2NpYXRlZCB0byBmb3JtIGNvbnRyb2xzXG5leHBvcnQgY29uc3QgYWRkRm9ySWRBdHRyaWJ1dGVzID0gKGVsZW1lbnQ6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgbGFiZWxFbCA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnbGFiZWwuY29udHJvbC1sYWJlbCcpO1xuICAgIGxldCBpbnB1dEVsID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbZm9jdXMtdGFyZ2V0XScpO1xuICAgIGlmICghaW5wdXRFbC5sZW5ndGgpIHtcbiAgICAgICAgaW5wdXRFbCA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEnKTtcbiAgICB9XG4gICAgLyppZiB0aGVyZSBhcmUgb25seSBvbmUgaW5wdXQgZWwgYW5kIGxhYmVsIEVsIGFkZCBpZCBhbmQgZm9yIGF0dHJpYnV0ZSovXG4gICAgaWYgKGxhYmVsRWwubGVuZ3RoICYmIGlucHV0RWwubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHdpZGdldElkID0gJChpbnB1dEVsWzBdIGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KCdbd2lkZ2V0LWlkXScpLmF0dHIoJ3dpZGdldC1pZCcpO1xuICAgICAgICBpZiAod2lkZ2V0SWQpIHtcbiAgICAgICAgICAgIHNldEF0dHIoaW5wdXRFbFswXSBhcyBIVE1MRWxlbWVudCwgJ2lkJywgd2lkZ2V0SWQpO1xuICAgICAgICAgICAgc2V0QXR0cihsYWJlbEVsWzBdIGFzIEhUTUxFbGVtZW50LCAnZm9yJywgd2lkZ2V0SWQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qQWRkaW5nIGFyaWEtbGFiZWxsZWRieSB0byByYWRpb3NldCwgY2hlY2tib3hzZXQgd2lkZ2V0cyovXG4gICAgY29uc3QgdWxFbCA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgndWwnKTtcbiAgICBpZiAobGFiZWxFbC5sZW5ndGggJiYgdWxFbC5sZW5ndGggJiYgKHVsRWxbMF0uZ2V0QXR0cmlidXRlKCdyb2xlJykgPT09ICdyYWRpb2dyb3VwJyB8fCB1bEVsWzBdLmdldEF0dHJpYnV0ZSgncm9sZScpID09PSAnZ3JvdXAnKSkge1xuICAgICAgICBjb25zdCB3aWRnZXRJZCA9ICd3bS1ncm91cC1sYWJlbC0nICsgZ2VuZXJhdGVHVUlkKCk7XG4gICAgICAgIHNldEF0dHIodWxFbFswXSBhcyBIVE1MRWxlbWVudCwgJ2FyaWEtbGFiZWxsZWRieScsIHdpZGdldElkKTtcbiAgICAgICAgc2V0QXR0cihsYWJlbEVsWzBdIGFzIEhUTUxFbGVtZW50LCAnaWQnLCB3aWRnZXRJZCk7XG4gICAgfVxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGFkanVzdCB0aGUgY29udGFpbmVyIHBvc2l0aW9uXG4gKiBGb3IgZXhhbXBsZTogMS4gV2hlbiBkYXRlcGlja2VyIGNvbnRyb2wgcGxhY2VkIGNsb3NlZCB0byB0aGUgc2NyZWVuIGxlZnQgZWRnZXMsIGl0IGlzIGdvaW5nIHRvIG5lZ2F0aXZlIHZhbHVlcyB3aGljaCBpcyAgY3V0dGluZyB0aGUgY29udGFpbmVyLlxuICogVG8gRml4IHRoZSBjb250YWluZXIgb3ZlcmxhcHBpbmcgaXNzdWUgY2hhbmdpbmcgdGhlIGNvbnRyYWluZXIgbGVmdCB0cmFuc2xhdGlvbiB0byAwXG4gKiBAcGFyYW0gY29udGFpbmVyRWxlbSAtIHBpY2tlci9kcm9wZG93biBjb250YWluZXIgZWxlbWVudChqcXVlcnkpXG4gKiBAcGFyYW0gcGFyZW50RWxlbSAtIHdpZGdldCBuYXRpdmUgZWxlbWVudFxuICogQHBhcmFtIHJlZiAtIHNjb3BlIG9mIHBhcnRpY3VsYXIgbGlicmFyeSBkaXJlY3RpdmVcbiAqIEBwYXJhbSBlbGUgLSBDaGlsZCBlbGVtZW50KGpxdWVyeSkuIEZvciBzb21lIG9mIHRoZSB3aWRnZXRzKHRpbWUsIHNlYXJjaCkgY29udGFpbmVyRWxlbSBkb2Vzbid0IGhhdmUgaGVpZ2h0LiBUaGUgaW5uZXIgZWxlbWVudChkcm9wZG93bi1tZW51KSBoYXMgaGVpZ2h0IHNvIHBhc3NpbmcgaXQgYXMgb3B0aW9uYWwuXG4gKi9cbmV4cG9ydCBjb25zdCBhZGp1c3RDb250YWluZXJQb3NpdGlvbiA9IChjb250YWluZXJFbGVtLCBwYXJlbnRFbGVtLCByZWYsIGVsZT8pID0+IHtcbiAgICBjb25zdCB6b25lUmVmID0gcmVmLl9uZ1pvbmUgfHwgcmVmLm5nWm9uZTtcbiAgICB6b25lUmVmLm9uU3RhYmxlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucyA9IGdldFdlYmtpdFRyYXNsYXRpb25NYXRyaXgoY29udGFpbmVyRWxlbSk7XG4gICAgICAgIGlmIChjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMubTQxIDwgMCkge1xuICAgICAgICAgICAgIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucy5tNDEgPSAwO1xuICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICB9XG4gICAgICAgICBzZXRUcmFuc2xhdGlvbjNkUG9zaXRpb24oY29udGFpbmVyRWxlbSwgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zKTtcbiAgICAgfSk7XG4gICB9O1xuXG5cbi8qKlxuICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byBhZGp1c3QgdGhlIGNvbnRhaW5lciBwb3NpdGlvblxuICogRm9yIGV4YW1wbGU6IDEuIFdoZW4gZGF0ZXBpY2tlciBjb250cm9sIHBsYWNlZCBjbG9zZWQgdG8gdGhlIHNjcmVlbiByaWdodCBlZGdlcywgaXQgaXMgZ29pbmcgdG8gb3V0IG9mIHRoZSB2aWV3cG9ydCB2YWx1ZXMgd2hpY2ggaXMgIGN1dHRpbmcgdGhlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSBjb250YWluZXJFbGVtICBwaWNrZXIvZHJvcGRvd24gY29udGFpbmVyIGVsZW1lbnQoanF1ZXJ5KVxuICogQHBhcmFtIHBhcmVudEVsZW0gd2lkZ2V0IG5hdGl2ZSBlbGVtZW50XG4gKiBAcGFyYW0gcmVmICBzY29wZSBvZiBwYXJ0aWN1bGFyIGxpYnJhcnkgZGlyZWN0aXZlXG4gKiBAcGFyYW0gZWxlIENoaWxkIGVsZW1lbnQoanF1ZXJ5KS4gRm9yIHNvbWUgb2YgdGhlIHdpZGdldHModGltZSwgc2VhcmNoKSBjb250YWluZXJFbGVtIGRvZXNuJ3QgaGF2ZSBoZWlnaHQuIFRoZSBpbm5lciBlbGVtZW50KGRyb3Bkb3duLW1lbnUpIGhhcyBoZWlnaHQgc28gcGFzc2luZyBpdCBhcyBvcHRpb25hbC5cbiAqL1xuICAgZXhwb3J0IGNvbnN0IGFkanVzdENvbnRhaW5lclJpZ2h0RWRnZXMgPSAoY29udGFpbmVyRWxlbSwgcGFyZW50RWxlbSwgcmVmLCBlbGU/KSA9PiB7XG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBlbGUgPyBwYXJzZUludChlbGUuY3NzKCd3aWR0aCcpKSA6IHBhcnNlSW50KGNvbnRhaW5lckVsZW0uY3NzKCd3aWR0aCcpKTtcbiAgICAgICAgY29uc3Qgdmlld1BvcnRXaWR0aCA9ICQod2luZG93KS53aWR0aCgpICsgd2luZG93LnNjcm9sbFg7XG4gICAgICAgIGNvbnN0IHBhcmVudERpbWVzaW9uID0gcGFyZW50RWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgcGFyZW50UmlnaHQgPSBwYXJlbnREaW1lc2lvbi5yaWdodCArIHdpbmRvdy5zY3JvbGxYO1xuICAgICAgICBsZXQgbmV3TGVmdDtcbiAgICAgICAgY29uc3Qgem9uZVJlZiA9IHJlZi5fbmdab25lIHx8IHJlZi5uZ1pvbmU7XG4gICAgICAgIHpvbmVSZWYub25TdGFibGUuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucyA9IGdldFdlYmtpdFRyYXNsYXRpb25NYXRyaXgoY29udGFpbmVyRWxlbSk7XG5cbiAgICAgICAgICAgIGlmICh2aWV3UG9ydFdpZHRoIC0gKHBhcmVudFJpZ2h0ICsgcGFyZW50RGltZXNpb24ud2lkdGgpIDwgY29udGFpbmVyV2lkdGgpIHtcbiAgICAgICAgICAgICAgICBuZXdMZWZ0ID0gcGFyZW50UmlnaHQgLSBjb250YWluZXJXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAobmV3TGVmdCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3TGVmdCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucy5tNDEgPSBuZXdMZWZ0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRUcmFuc2xhdGlvbjNkUG9zaXRpb24oY29udGFpbmVyRWxlbSwgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zKTtcbiAgICAgICAgfSk7XG4gICB9O1xuXG4gIC8qKlxuICAgKiBGb3IgZ2l2ZW4gZWxlbWVudCBzZXQgdGhlIHRyYXNsYXRpb25cbiAgICogQHBhcmFtIGNvbnRhaW5lckVsZW0gdGFuc2xhdGVkIGVsZW1lbnRcbiAgICpcbiAgICogQHBhcmFtIGNvbnRhaW5lckVsZVRyYW5zZm9ybWF0aW9ucyB0cmFuc2xhdGUgbWF0cml4IHBvc2l0aW9uc1xuICAgKi9cbiAgIGV4cG9ydCBjb25zdCBzZXRUcmFuc2xhdGlvbjNkUG9zaXRpb24gPSAoY29udGFpbmVyRWxlbSwgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYW5zbGF0ZVBvc2l0aW9uID0gJ3RyYW5zbGF0ZTNkKCcgKyBjb250YWluZXJFbGVUcmFuc2Zvcm1hdGlvbnMubTQxICsgJ3B4LCAnICsgY29udGFpbmVyRWxlVHJhbnNmb3JtYXRpb25zLm00MiArICdweCwgMHB4KSc7XG4gICAgICAgIGNvbnRhaW5lckVsZW1bMF0uc3R5bGUud2Via2l0VHJhbnNmb3JtID0gdHJhbnNsYXRlUG9zaXRpb247XG4gICAgICAgIGNvbnRhaW5lckVsZW1bMF0uc3R5bGUuTW96VHJhbnNmb3JtID0gdHJhbnNsYXRlUG9zaXRpb247XG4gICAgICAgIGNvbnRhaW5lckVsZW1bMF0uc3R5bGUubXNUcmFuc2Zvcm0gPSB0cmFuc2xhdGVQb3NpdGlvbjtcbiAgICAgICAgY29udGFpbmVyRWxlbVswXS5zdHlsZS5PVHJhbnNmb3JtID0gdHJhbnNsYXRlUG9zaXRpb247XG4gICAgICAgIGNvbnRhaW5lckVsZW1bMF0uc3R5bGUudHJhbnNmb3JtID0gdHJhbnNsYXRlUG9zaXRpb247XG4gICB9O1xuXG4gICAvKipcbiAgICAqXG4gICAgKiBAcGFyYW0gY29udGFpbmVyRWxlbSBlbGVtZXQgZm9yIHRoZSBXZWJLaXRDU1NNYXRyaXhcbiAgICAqL1xuICAgIGV4cG9ydCBjb25zdCBnZXRXZWJraXRUcmFzbGF0aW9uTWF0cml4ID0gKGNvbnRhaW5lckVsZW0pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBXZWJLaXRDU1NNYXRyaXggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1TQ1NTTWF0cml4KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNvbnRhaW5lckVsZW1bMF0pLnRyYW5zZm9ybSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBXZWJLaXRDU1NNYXRyaXgod2luZG93LmdldENvbXB1dGVkU3R5bGUoY29udGFpbmVyRWxlbVswXSkud2Via2l0VHJhbnNmb3JtKTtcbiAgICB9XG5cbi8vIGNsb3NlIGFsbCB0aGUgcG9wb3ZlcnMuXG5leHBvcnQgY29uc3QgY2xvc2VQb3BvdmVyID0gKGVsZW1lbnQpID0+IHtcbiAgICBpZiAoIWVsZW1lbnQuY2xvc2VzdCgnLmFwcC1wb3BvdmVyJykubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHBvcG92ZXJFbGVtZW50cyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5hcHAtcG9wb3Zlci13cmFwcGVyJyk7XG4gICAgICAgIGZvckVhY2gocG9wb3ZlckVsZW1lbnRzLCAoZWxlKSA9PiB7XG4gICAgICAgICAgICBpZiAoZWxlLndpZGdldC5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICBlbGUud2lkZ2V0LmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHRvIHRyaWdnZXIgY2hhbmdlIGRldGVjdGlvbiBpbiB0aGUgYXBwXG4gKiBUaGlzIGlzIGV4cG9zZWQgZm9yIHRoZSBlbmQgdXNlciBkZXZlbG9wZXIgb2YgV00gYXBwXG4gKiBUaGlzIGlzIHRoZSBhbHRlcm5hdGl2ZSBmb3IgJHJzLiRzYWZlQXBwbHkoKSBpbiBBbmd1bGFySlNcbiAqIFNlZSAkYXBwRGlnZXN0IGluIHV0aWxzIGZvciBtb3JlIGluZm9cbiAqL1xuZXhwb3J0IGNvbnN0IGRldGVjdENoYW5nZXMgPSAkYXBwRGlnZXN0O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHRvIHRyaWdnZXIgdGhlIGFjdGlvbi9saW5rIG9mIG1lbnUvbmF2IGl0ZW1cbiAqIEBwYXJhbSBzY29wZSAtIHNjb3BlIG9mIHRoZSB3aWRnZXRcbiAqIEBwYXJhbSBpdGVtIC0gaXRlbSBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IHRyaWdnZXJJdGVtQWN0aW9uID0gKHNjb3BlLCBpdGVtKSA9PiB7XG4gICAgbGV0IGl0ZW1MaW5rID0gaXRlbS5saW5rO1xuICAgIGNvbnN0IGl0ZW1BY3Rpb24gPSBpdGVtLmFjdGlvbjtcbiAgICBjb25zdCBsaW5rVGFyZ2V0ID0gaXRlbS50YXJnZXQ7XG4gICAgaWYgKGl0ZW1BY3Rpb24pIHtcbiAgICAgICAgaWYgKCFzY29wZS5pdGVtQWN0aW9uRm4pIHtcbiAgICAgICAgICAgIC8vW1RvZG8tQ1NQXTogVGhpcyB3aWxsIG5vdCB3b3JrIGFzIGZ1bmN0aW9uIHdpbGwgYmUgZHluYW1pY1xuICAgICAgICAgICAgc2NvcGUuaXRlbUFjdGlvbkZuID0gJHBhcnNlRXZlbnQoaXRlbUFjdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBzY29wZS5pdGVtQWN0aW9uRm4oc2NvcGUudXNlckRlZmluZWRFeGVjdXRpb25Db250ZXh0LCBPYmplY3QuY3JlYXRlKGl0ZW0pKTtcbiAgICB9XG4gICAgaWYgKGl0ZW1MaW5rKSB7XG4gICAgICAgIGlmIChpdGVtTGluay5zdGFydHNXaXRoKCcjLycpICYmICghbGlua1RhcmdldCB8fCBsaW5rVGFyZ2V0ID09PSAnX3NlbGYnKSkge1xuICAgICAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSBnZXRVcmxQYXJhbXMoaXRlbUxpbmspO1xuICAgICAgICAgICAgaXRlbUxpbmsgPSBnZXRSb3V0ZU5hbWVGcm9tTGluayhpdGVtTGluayk7XG4gICAgICAgICAgICBjb25zdCByb3V0ZXIgPSBnZXQoc2NvcGUsICdyb3V0ZScpIHx8IGdldChzY29wZSwgJ21lbnVSZWYucm91dGUnKTtcbiAgICAgICAgICAgIHJvdXRlci5uYXZpZ2F0ZShbaXRlbUxpbmtdLCB7IHF1ZXJ5UGFyYW1zIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3BlbkxpbmsoaXRlbUxpbmssIGxpbmtUYXJnZXQpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuLyoqXG4gKiBUaGlzIG1ldGhvZCBpcyB0byBnZXQgZGF0c291cmNlIGZyb20gdGhlIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBleHByIC0gZXhwcmVzc2lvbiBvZiB0aGUgZGF0YXNldFxuICogQHBhcmFtIHNjb3BlIC0gc2NvcGUgb2YgdGhlIHdpZGdldFxuICogRXhhbXBsZTE6IGV4cHIgLSBcIlZhcmlhYmxlcy5zdGF0aWNWYXIxLmRhdGFTZXQuZGV0YWlsc1skaV0uYWRkcmVzc2VzXCIgdGhlbiB0aGUgbWV0aG9kIHdpbGwgcmV0dXJuIGRhdGFzb3VyY2UgYXMgVmFyaWFibGVzLnN0YXRpY1ZhcjFcbiAqIEV4YW1wbGUyOiBleHByIC0gXCJXaWRnZXRzLmxpc3QxLmN1cnJlbnRJdGVtLmFkZHJlc3Nlc1wiIGFuZCBsaXN0MSBpcyBib3VuZCB0byBcIlZhcmlhYmxlcy5zdGF0aWNWYXIxLmRhdGFTZXQuZGV0YWlsc1wiIHRoZW4gdGhlIG1ldGhvZCB3aWxsIHJldHVybiBkYXRhc291cmNlIGFzIFZhcmlhYmxlcy5zdGF0aWNWYXIxXG4gKi9cbmV4cG9ydCBjb25zdCBnZXREYXRhc291cmNlRnJvbUV4cHIgPSAoZXhwciwgc2NvcGUpID0+IHtcbiAgICBjb25zdCBpc0JvdW5kVG9WYXJpYWJsZSA9IHN0YXJ0c1dpdGgoZXhwciwgJ1ZhcmlhYmxlcy4nKTtcbiAgICBjb25zdCBpc0JvdW5kVG9XaWRnZXQgPSBzdGFydHNXaXRoKGV4cHIsICdXaWRnZXRzLicpO1xuICAgIGNvbnN0IHBhcnRzID0gZXhwci5zcGxpdCgnLicpO1xuICAgIGlmIChpc0JvdW5kVG9WYXJpYWJsZSkge1xuICAgICAgICByZXR1cm4gZ2V0KHNjb3BlLnZpZXdQYXJlbnQuVmFyaWFibGVzLCBwYXJ0c1sxXSk7XG4gICAgfVxuICAgIGlmIChpc0JvdW5kVG9XaWRnZXQpIHtcbiAgICAgICAgY29uc3Qgd2lkZ2V0U2NvcGUgPSBnZXQoc2NvcGUudmlld1BhcmVudC5XaWRnZXRzLCBwYXJ0c1sxXSk7XG4gICAgICAgIGNvbnN0IHdpZGdldERhdGFzZXRCb3VuZEV4cHIgPSB3aWRnZXRTY29wZS4kYXR0cnMuZ2V0KCdkYXRhc2V0Ym91bmRleHByJyk7XG4gICAgICAgIGxldCB3aWRnZXRCb3VuZEV4cHJlc3Npb247XG4gICAgICAgIHdpZGdldEJvdW5kRXhwcmVzc2lvbiA9ICghd2lkZ2V0U2NvcGUuZGF0YXNvdXJjZSAmJiB3aWRnZXREYXRhc2V0Qm91bmRFeHByKSA/IHdpZGdldERhdGFzZXRCb3VuZEV4cHIgOiB3aWRnZXRTY29wZS5iaW5kZGF0YXNldDtcbiAgICAgICAgcmV0dXJuIGdldERhdGFzb3VyY2VGcm9tRXhwcih3aWRnZXRCb3VuZEV4cHJlc3Npb24sIHdpZGdldFNjb3BlKTtcbiAgICB9XG59O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIHRvIGdldCBkYXRhc2V0IGJvdW5kIGV4cHJlc3Npb24gZnJvbSBsaXN0IGN1cnJlbnRpdGVtIGV4cHJlc3Npb25cbiAqIEBwYXJhbSBleHByIC0gYm91bmQgZGF0YXNldCBleHByZXNzaW9uXG4gKiBAcGFyYW0gc2NvcGUgLSBzY29wZSBvZiB0aGUgd2lkZ2V0XG4gKiBFeGFtcGxlMTogZXhwciAtIFwiV2lkZ2V0cy5saXN0MS5jdXJyZW50SXRlbS5kZXRhaWxzXCIgYW5kIGxpc3QxIGlzIGJvdW5kIHRvIFwiVmFyaWFibGVzLnN0YXRpY1ZhcjEuZGF0YVNldFwiIHRoZW4gaXQgcmV0dXJucyBleHByZXNzaW9uIGFzIFwiVmFyaWFibGVzLnN0YXRpY1ZhcjEuZGF0YVNldFskaV0uZGV0YWlsc1wiXG4gKi9cbmV4cG9ydCBjb25zdCBleHRyYWN0Q3VycmVudEl0ZW1FeHByID0gKGV4cHIsIHNjb3BlKSA9PiB7XG4gICAgY29uc3QgY3VycmVudEl0ZW1SZWdFeCA9IC9eV2lkZ2V0c1xcLi4qXFwuY3VycmVudEl0ZW0vZztcbiAgICBpZiAoY3VycmVudEl0ZW1SZWdFeC50ZXN0KGV4cHIpKSB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gZXhwci5zcGxpdCgnLicpO1xuICAgICAgICBjb25zdCB3aWRnZXRTY29wZSA9IGdldChzY29wZS52aWV3UGFyZW50LldpZGdldHMsIHBhcnRzWzFdKTtcbiAgICAgICAgY29uc3Qgd2lkZ2V0RGF0YXNldEJvdW5kRXhwciA9IHdpZGdldFNjb3BlLiRhdHRycy5nZXQoJ2RhdGFzZXRib3VuZGV4cHInKTtcbiAgICAgICAgaWYgKCF3aWRnZXRTY29wZS5kYXRhc291cmNlICYmIHdpZGdldERhdGFzZXRCb3VuZEV4cHIpIHtcbiAgICAgICAgICAgIGV4cHIgPSBleHByLnJlcGxhY2UoL15XaWRnZXRzXFwuLipcXC5jdXJyZW50SXRlbS9nLCBgJHt3aWRnZXREYXRhc2V0Qm91bmRFeHByfVskaV1gKTtcbiAgICAgICAgICAgIHJldHVybiBleHRyYWN0Q3VycmVudEl0ZW1FeHByKGV4cHIsIHNjb3BlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGV4cHIgPSBleHByLnJlcGxhY2UoL15XaWRnZXRzXFwuLipcXC5jdXJyZW50SXRlbS9nLCBgJHt3aWRnZXRTY29wZS5iaW5kZGF0YXNldH1bJGldYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV4cHI7XG59O1xuXG4vLyB0aGlzIHdpbGwgYWRkIHRoZSBodG1sIHRhZyB0byB0aGUgd2lkZ2V0IHRvIHNjb3BlIHRoZSBjc3MgdG8gdGhlIHBhZ2UuXG5leHBvcnQgY29uc3QgZmluZFJvb3RDb250YWluZXIgPSAoJGVsKSA9PiB7XG4gICAgbGV0IHJvb3QgPSAkZWwuY2xvc2VzdCgnLmFwcC1wcmVmYWInKTtcbiAgICBpZiAoIXJvb3QubGVuZ3RoKSB7XG4gICAgICAgIHJvb3QgPSAkZWwuY2xvc2VzdCgnLmFwcC1wYXJ0aWFsJyk7XG4gICAgfVxuICAgIGlmKCFyb290Lmxlbmd0aCkge1xuICAgICAgICByb290ID0gJGVsLmNsb3Nlc3QoJy5hcHAtc3BhLXBhZ2UnKTtcbiAgICB9XG4gICAgaWYgKCFyb290Lmxlbmd0aCkge1xuICAgICAgICByb290ID0gJGVsLmNsb3Nlc3QoJy5hcHAtcGFnZScpO1xuICAgIH1cbiAgICByZXR1cm4gcm9vdC5sZW5ndGggJiYgcm9vdC5wYXJlbnQoKVswXS50YWdOYW1lO1xufTtcblxuZXhwb3J0IGNvbnN0IFZBTElEQVRPUiA9IHtcbiAgICBSRVFVSVJFRDogJ3JlcXVpcmVkJyxcbiAgICBNQVhDSEFSUzogJ21heGNoYXJzJyxcbiAgICBNSU5WQUxVRTogJ21pbnZhbHVlJyxcbiAgICBNQVhWQUxVRTogJ21heHZhbHVlJyxcbiAgICBSRUdFWFA6ICdyZWdleHAnLFxuICAgIE1JTkRBVEU6ICdtaW5kYXRlJyxcbiAgICBNQVhEQVRFOiAnbWF4ZGF0ZScsXG4gICAgTUlOVElNRTogJ21pbnRpbWUnLFxuICAgIE1BWFRJTUU6ICdtYXh0aW1lJyxcbiAgICBFWENMVURFREFURVM6ICdleGNsdWRlZGF0ZXMnLFxuICAgIEVYQ0xVREVEQVlTOiAnZXhjbHVkZWRheXMnXG59O1xuXG5leHBvcnQgY29uc3QgdHJhbnNmb3JtRmlsZVVSSSA9ICh1cmwpID0+IHtcbiAgICBpZiAoaXNTdHJpbmcodXJsKSAmJiBoYXNDb3Jkb3ZhKCkgJiYgdXJsLnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSkge1xuICAgICAgICBpZiAoaXNJb3MoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKCdmaWxlOi8vJywgJy9fYXBwX2ZpbGVfJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBbmRyb2lkKCkgJiYgbG9jYXRpb24uaHJlZi5zdGFydHNXaXRoKCdodHRwJykpIHtcbiAgICAgICAgICAgIGlmICh1cmwuc3RhcnRzV2l0aChjb3Jkb3ZhLmZpbGUuYXBwbGljYXRpb25EaXJlY3RvcnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVybC5yZXBsYWNlKGNvcmRvdmEuZmlsZS5hcHBsaWNhdGlvbkRpcmVjdG9yeSArICd3d3cnLCAnJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdXJsLnJlcGxhY2UoJ2ZpbGU6Ly8nLCAnL19hcHBfZmlsZV8nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdXJsO1xufTtcblxuZXhwb3J0IGNvbnN0IGFwcGVuZFNjcmlwdFRvSGVhZCA9IChjYWxsYmFjaykgPT57XG5cbiAgICBjb25zdCBzY3JpcHRlbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICBzY3JpcHRlbGUub25sb2FkID0gKCkgPT4ge1xuICAgICBjYWxsYmFjayhXTV9DVVNUT01fRk9STUFUVEVSUyk7XG4gICAgfTtcbiAgICBzY3JpcHRlbGUub25lcnJvciA9IGVyciA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybignRXJyb3Igd2hpbGUgbG9hZGluZyB0aGUgZmlsZSAnICsgc2NyaXB0ZWxlLnNyYyArICdcXG4nICsgZXJyKTtcbiAgICB9O1xuICAgIHNjcmlwdGVsZS50eXBlID0gJ3RleHQvamF2YXNjcmlwdCc7XG4gICAgc2NyaXB0ZWxlLnNyYyA9ICcuL2V4dGVuc2lvbnMvZm9ybWF0dGVycy5qcyc7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHRlbGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFwcFNldHRpbmcgPSAoa2V5LCBkZWZhdWx0VmFsdWUpID0+IHtcbiAgICByZXR1cm4gKF9XTV9BUFBfUFJPUEVSVElFUy5leHRyYV9zZXR0aW5ncyAmJiBnZXQoX1dNX0FQUF9QUk9QRVJUSUVTLmV4dHJhX3NldHRpbmdzLCBrZXkpKSB8fCBkZWZhdWx0VmFsdWU7XG59O1xuXG4vKiB0aGlzIGZ1bmN0aW9uIHNldHMgdGhlIGl0ZW1jbGFzcyBkZXBlbmRpbmcgb24gaXRlbXNwZXJyb3cuXG4gICAqIGlmIGl0ZW1zcGVycm93IGlzIDIgZm9yIGxhcmdlIGRldmljZSwgdGhlbiBpdGVtY2xhc3MgaXMgJ2NvbC14cy0xIGNvbC1zbS0xIGNvbC1sZy0yJ1xuICAgKiBpZiBpdGVtc3BlcnJvdyBpcyAnbGctMycgdGhlbiBpdGVtY2xhc3MgaXMgJ2NvbC1sZy0zJ1xuKi9cbmV4cG9ydCBjb25zdCBzZXRMaXN0Q2xhc3MgPSAoc2NvcGUpID0+IHtcbiAgICBsZXQgdGVtcCA9ICcnO1xuICAgIGlmIChzY29wZS5pdGVtc3BlcnJvdykge1xuICAgICAgICBpZiAoaXNOYU4ocGFyc2VJbnQoc2NvcGUuaXRlbXNwZXJyb3csIDEwKSkpIHtcbiAgICAgICAgICAgIC8vIGhhbmRsaW5nIGl0ZW1zcGVycm93IGNvbnRhaW5pbmcgc3RyaW5nIG9mIGNsYXNzZXNcbiAgICAgICAgICAgIHNwbGl0KHNjb3BlLml0ZW1zcGVycm93LCAnICcpLmZvckVhY2goKGNsczogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IHNwbGl0KGNscywgJy0nKTtcbiAgICAgICAgICAgICAgICBjbHMgPSBgJHtrZXlzWzBdfS0keygxMiAvIHBhcnNlSW50KGtleXNbMV0sIDEwKSl9YDtcbiAgICAgICAgICAgICAgICB0ZW1wICs9IGAgY29sLSR7Y2xzfWA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNjb3BlLml0ZW1zUGVyUm93Q2xhc3MgPSB0ZW1wLnRyaW0oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGhhbmRsaW5nIGl0ZW1zcGVycm93IGhhdmluZyBpbnRlZ2VyIHZhbHVlLlxuICAgICAgICAgICAgc2NvcGUuaXRlbXNQZXJSb3dDbGFzcyA9IGBjb2wteHMtJHsoMTIgLyBwYXJzZUludChzY29wZS5pdGVtc3BlcnJvdywgMTApKX1gO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHsgLy8gSWYgaXRlbXNwZXJyb3cgaXMgbm90IHNwZWNpZmllZCBtYWtlIGl0IGZ1bGwgd2lkdGhcbiAgICAgICAgc2NvcGUuaXRlbXNQZXJSb3dDbGFzcyA9ICdjb2wteHMtMTInO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kUGFyZW50ID0gKGxWaWV3OiBhbnksIHZpZXdQYXJlbnRBcHA/OiBhbnkpID0+IHtcbiAgICBsZXQgcGFyZW50ID0gZmluZFZpZXdQYXJlbnQobFZpZXcpO1xuICAgIHJldHVybiBwYXJlbnQgPyBwYXJlbnQgOiB2aWV3UGFyZW50QXBwO1xufVxuXG5leHBvcnQgY29uc3QgZmluZFZpZXdQYXJlbnQgPSAobFZpZXc6IGFueSkgPT4ge1xuICAgIHJldHVybiBsVmlld1sxNV0gPyBsVmlld1sxNV1bOF0gOiBsVmlld1sxNV07XG4gICAgLyppZihsVmlld1szXSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbFZpZXdbOF07XG4gICAgfVxuICAgIGxldCBwYXJlbnRsVmlldyA9IGxWaWV3WzNdO1xuICAgIGlmKHR5cGVvZiBsVmlld1sxXSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRWaWV3UGFyZW50KHBhcmVudGxWaWV3KTtcbiAgICB9XG4gICAgbGV0IGNvbXBvbmVudFR5cGUgPSBsVmlld1sxXVtcInR5cGVcIl07XG4gICAgaWYoY29tcG9uZW50VHlwZSA9PT0gMCB8fCBjb21wb25lbnRUeXBlID09PSAxKSB7XG4gICAgICAgIGxldCBwID0gbFZpZXdbOF07XG4gICAgICAgIC8vIHRzLWlnbm9yZVxuICAgICAgICBpZihwLmhhc093blByb3BlcnR5KFwiaXNEaWFsb2dDb21wb25lbnRcIikgfHwgcC5oYXNPd25Qcm9wZXJ0eShcImlzQ29udGFpbmVyRGlyZWN0aXZlXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmluZFZpZXdQYXJlbnQocGFyZW50bFZpZXcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHA7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmluZFZpZXdQYXJlbnQocGFyZW50bFZpZXcpO1xuICAgIH0qL1xufVxuXG4vKmV4cG9ydCBjb25zdCBnZXRQYXJlbnQgPSAocGFyZW50OiBhbnkpID0+IHtcbiAgICBpZihwYXJlbnQuaGFzT3duUHJvcGVydHkoXCJpc0R5bmFtaWNDb21wb25lbnRcIikgfHwgcGFyZW50Lmhhc093blByb3BlcnR5KFwiaXNQYWdlQ29tcG9uZW50XCIpKSB7XG4gICAgICAgIHJldHVybiBwYXJlbnRcbiAgICB9IGVsc2V7XG4gICAgICAgIHJldHVybiBwYXJlbnQudmlld1BhcmVudCA/IGdldFBhcmVudChwYXJlbnQudmlld1BhcmVudCkgOiBwYXJlbnQ7XG4gICAgfVxuXG59Ki9cbiJdfQ==
|