cax-design-system 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -0
- package/accordion/accordion.d.ts +220 -0
- package/accordion/accordion.interface.d.ts +49 -0
- package/accordion/accordion.module.d.ts +13 -0
- package/accordion/index.d.ts +5 -0
- package/accordion/public_api.d.ts +3 -0
- package/animate/animate.d.ts +40 -0
- package/animate/index.d.ts +5 -0
- package/animate/public_api.d.ts +1 -0
- package/animateonscroll/animateonscroll.d.ts +75 -0
- package/animateonscroll/index.d.ts +5 -0
- package/animateonscroll/public_api.d.ts +1 -0
- package/api/blockableui.d.ts +10 -0
- package/api/caxconfig.d.ts +24 -0
- package/api/confirmaeventtype.d.ts +8 -0
- package/api/confirmation.d.ts +91 -0
- package/api/confirmationservice.d.ts +30 -0
- package/api/contextmenuservice.d.ts +11 -0
- package/api/filtermatchmode.d.ts +22 -0
- package/api/filtermetadata.d.ts +18 -0
- package/api/filteroperator.d.ts +4 -0
- package/api/filterservice.d.ts +10 -0
- package/api/index.d.ts +5 -0
- package/api/lazyloadevent.d.ts +47 -0
- package/api/lazyloadmeta.d.ts +19 -0
- package/api/megamenuitem.d.ts +130 -0
- package/api/menuitem.d.ts +176 -0
- package/api/message.d.ts +30 -0
- package/api/messageservice.d.ts +32 -0
- package/api/overlayoptions.d.ts +188 -0
- package/api/overlayservice.d.ts +9 -0
- package/api/primeicons.d.ts +313 -0
- package/api/public_api.d.ts +33 -0
- package/api/scrolleroptions.d.ts +116 -0
- package/api/selectitem.d.ts +12 -0
- package/api/selectitemgroup.d.ts +10 -0
- package/api/shared.d.ts +24 -0
- package/api/sortevent.d.ts +12 -0
- package/api/sortmeta.d.ts +8 -0
- package/api/tablestate.d.ts +60 -0
- package/api/tooltipoptions.d.ts +69 -0
- package/api/translation.d.ts +135 -0
- package/api/translationkeys.d.ts +50 -0
- package/api/treedragdropservice.d.ts +12 -0
- package/api/treenode.d.ts +86 -0
- package/api/treenodedragevent.d.ts +27 -0
- package/api/treetablenode.d.ts +36 -0
- package/autocomplete/autocomplete.d.ts +629 -0
- package/autocomplete/autocomplete.interface.d.ts +164 -0
- package/autocomplete/index.d.ts +5 -0
- package/autocomplete/public_api.d.ts +2 -0
- package/autofocus/autofocus.d.ts +28 -0
- package/autofocus/index.d.ts +5 -0
- package/autofocus/public_api.d.ts +1 -0
- package/avatar/avatar.d.ts +73 -0
- package/avatar/avatar.module.d.ts +7 -0
- package/avatar/index.d.ts +5 -0
- package/avatar/public_api.d.ts +2 -0
- package/avatargroup/avatargroup.d.ts +27 -0
- package/avatargroup/index.d.ts +5 -0
- package/avatargroup/public_api.d.ts +1 -0
- package/badge/badge.d.ts +23 -0
- package/badge/badge.directive.d.ts +33 -0
- package/badge/badge.module.d.ts +10 -0
- package/badge/index.d.ts +5 -0
- package/badge/public_api.d.ts +3 -0
- package/baseicon/baseicon.d.ts +15 -0
- package/baseicon/index.d.ts +5 -0
- package/baseicon/public_api.d.ts +1 -0
- package/blockui/blockui.d.ts +64 -0
- package/blockui/blockui.interface.d.ts +11 -0
- package/blockui/index.d.ts +5 -0
- package/blockui/public_api.d.ts +2 -0
- package/breadcrumb/breadcrumb.d.ts +55 -0
- package/breadcrumb/breadcrumb.interface.d.ts +38 -0
- package/breadcrumb/breadcrumb.module.d.ts +13 -0
- package/breadcrumb/index.d.ts +5 -0
- package/breadcrumb/public_api.d.ts +3 -0
- package/button/button.d.ts +84 -0
- package/button/button.directive.d.ts +46 -0
- package/button/button.interface.d.ts +30 -0
- package/button/button.module.d.ts +9 -0
- package/button/index.d.ts +5 -0
- package/button/public_api.d.ts +4 -0
- package/buttongroup/buttongroup.d.ts +11 -0
- package/buttongroup/index.d.ts +5 -0
- package/buttongroup/public_api.d.ts +1 -0
- package/calendar/calendar.d.ts +712 -0
- package/calendar/calendar.interface.d.ts +204 -0
- package/calendar/calendar.module.d.ts +9 -0
- package/calendar/index.d.ts +5 -0
- package/calendar/public_api.d.ts +3 -0
- package/card/card.d.ts +53 -0
- package/card/card.interface.d.ts +27 -0
- package/card/card.module.d.ts +11 -0
- package/card/index.d.ts +5 -0
- package/card/public_api.d.ts +3 -0
- package/carousel/carousel.d.ts +227 -0
- package/carousel/carousel.interface.d.ts +63 -0
- package/carousel/index.d.ts +5 -0
- package/carousel/public_api.d.ts +2 -0
- package/cascadeselect/cascadeselect.d.ts +435 -0
- package/cascadeselect/cascadeselect.interface.d.ts +115 -0
- package/cascadeselect/cascadeselect.module.d.ts +15 -0
- package/cascadeselect/index.d.ts +5 -0
- package/cascadeselect/public_api.d.ts +3 -0
- package/chart/chart.d.ts +87 -0
- package/chart/index.d.ts +5 -0
- package/chart/public_api.d.ts +1 -0
- package/checkbox/checkbox.d.ts +164 -0
- package/checkbox/checkbox.interface.d.ts +26 -0
- package/checkbox/checkbox.module.d.ts +10 -0
- package/checkbox/index.d.ts +5 -0
- package/checkbox/public_api.d.ts +3 -0
- package/chip/chip.d.ts +37 -0
- package/chip/chip.interface.d.ts +15 -0
- package/chip/chip.module.d.ts +10 -0
- package/chip/index.d.ts +5 -0
- package/chip/public_api.d.ts +3 -0
- package/chips/chips.d.ts +221 -0
- package/chips/chips.interface.d.ts +58 -0
- package/chips/chips.module.d.ts +13 -0
- package/chips/index.d.ts +5 -0
- package/chips/public_api.d.ts +3 -0
- package/colorpicker/colorpicker.d.ts +247 -0
- package/colorpicker/colorpicker.interface.d.ts +15 -0
- package/colorpicker/index.d.ts +5 -0
- package/colorpicker/public_api.d.ts +2 -0
- package/confirmdialog/confirmdialog.d.ts +273 -0
- package/confirmdialog/confirmdialog.interface.d.ts +39 -0
- package/confirmdialog/index.d.ts +5 -0
- package/confirmdialog/public_api.d.ts +2 -0
- package/confirmpopup/confirmpopup.d.ts +119 -0
- package/confirmpopup/confirmpopup.interface.d.ts +27 -0
- package/confirmpopup/index.d.ts +5 -0
- package/confirmpopup/public_api.d.ts +2 -0
- package/contextmenu/contextmenu.d.ts +260 -0
- package/contextmenu/index.d.ts +5 -0
- package/contextmenu/public_api.d.ts +1 -0
- package/dataview/dataview.d.ts +274 -0
- package/dataview/dataview.interface.d.ts +183 -0
- package/dataview/index.d.ts +5 -0
- package/dataview/public_api.d.ts +2 -0
- package/defer/defer.d.ts +39 -0
- package/defer/index.d.ts +5 -0
- package/defer/public_api.d.ts +1 -0
- package/dialog/dialog.d.ts +373 -0
- package/dialog/dialog.interface.d.ts +31 -0
- package/dialog/index.d.ts +5 -0
- package/dialog/public_api.d.ts +2 -0
- package/divider/divider.d.ts +49 -0
- package/divider/divider.module.d.ts +7 -0
- package/divider/index.d.ts +5 -0
- package/divider/public_api.d.ts +2 -0
- package/dock/dock.d.ts +115 -0
- package/dock/dock.interface.d.ts +19 -0
- package/dock/index.d.ts +5 -0
- package/dock/public_api.d.ts +2 -0
- package/dom/connectedoverlayscrollhandler.d.ts +9 -0
- package/dom/domhandler.d.ts +95 -0
- package/dom/index.d.ts +5 -0
- package/dom/public_api.d.ts +2 -0
- package/dragdrop/dragdrop.d.ts +112 -0
- package/dragdrop/dragdrop.module.d.ts +8 -0
- package/dragdrop/index.d.ts +5 -0
- package/dragdrop/public_api.d.ts +2 -0
- package/dropdown/dropdown-item.d.ts +30 -0
- package/dropdown/dropdown.d.ts +627 -0
- package/dropdown/dropdown.interface.d.ts +154 -0
- package/dropdown/dropdown.module.d.ts +11 -0
- package/dropdown/index.d.ts +5 -0
- package/dropdown/public_api.d.ts +4 -0
- package/dynamicdialog/dialogservice.d.ts +35 -0
- package/dynamicdialog/dynamicdialog-config.d.ts +221 -0
- package/dynamicdialog/dynamicdialog-injector.d.ts +7 -0
- package/dynamicdialog/dynamicdialog-ref.d.ts +101 -0
- package/dynamicdialog/dynamicdialog.d.ts +124 -0
- package/dynamicdialog/dynamicdialogcontent.d.ts +8 -0
- package/dynamicdialog/index.d.ts +5 -0
- package/dynamicdialog/public_api.d.ts +6 -0
- package/editor/editor.d.ts +111 -0
- package/editor/editor.interface.d.ts +64 -0
- package/editor/index.d.ts +5 -0
- package/editor/public_api.d.ts +2 -0
- package/esm2022/accordion/accordion.interface.mjs +2 -0
- package/esm2022/accordion/accordion.mjs +591 -0
- package/esm2022/accordion/accordion.module.mjs +23 -0
- package/esm2022/accordion/cax-design-system-accordion.mjs +5 -0
- package/esm2022/accordion/public_api.mjs +4 -0
- package/esm2022/animate/animate.mjs +101 -0
- package/esm2022/animate/cax-design-system-animate.mjs +5 -0
- package/esm2022/animate/public_api.mjs +2 -0
- package/esm2022/animateonscroll/animateonscroll.mjs +185 -0
- package/esm2022/animateonscroll/cax-design-system-animateonscroll.mjs +5 -0
- package/esm2022/animateonscroll/public_api.mjs +2 -0
- package/esm2022/api/blockableui.mjs +2 -0
- package/esm2022/api/cax-design-system-api.mjs +5 -0
- package/esm2022/api/caxconfig.mjs +163 -0
- package/esm2022/api/confirmaeventtype.mjs +10 -0
- package/esm2022/api/confirmation.mjs +2 -0
- package/esm2022/api/confirmationservice.mjs +43 -0
- package/esm2022/api/contextmenuservice.mjs +22 -0
- package/esm2022/api/filtermatchmode.mjs +23 -0
- package/esm2022/api/filtermetadata.mjs +2 -0
- package/esm2022/api/filteroperator.mjs +5 -0
- package/esm2022/api/filterservice.mjs +225 -0
- package/esm2022/api/lazyloadevent.mjs +2 -0
- package/esm2022/api/lazyloadmeta.mjs +2 -0
- package/esm2022/api/megamenuitem.mjs +2 -0
- package/esm2022/api/menuitem.mjs +2 -0
- package/esm2022/api/message.mjs +2 -0
- package/esm2022/api/messageservice.mjs +47 -0
- package/esm2022/api/overlayoptions.mjs +2 -0
- package/esm2022/api/overlayservice.mjs +19 -0
- package/esm2022/api/primeicons.mjs +314 -0
- package/esm2022/api/public_api.mjs +34 -0
- package/esm2022/api/scrolleroptions.mjs +2 -0
- package/esm2022/api/selectitem.mjs +2 -0
- package/esm2022/api/selectitemgroup.mjs +2 -0
- package/esm2022/api/shared.mjs +65 -0
- package/esm2022/api/sortevent.mjs +2 -0
- package/esm2022/api/sortmeta.mjs +2 -0
- package/esm2022/api/tablestate.mjs +2 -0
- package/esm2022/api/tooltipoptions.mjs +2 -0
- package/esm2022/api/translation.mjs +2 -0
- package/esm2022/api/translationkeys.mjs +51 -0
- package/esm2022/api/treedragdropservice.mjs +21 -0
- package/esm2022/api/treenode.mjs +2 -0
- package/esm2022/api/treenodedragevent.mjs +2 -0
- package/esm2022/api/treetablenode.mjs +2 -0
- package/esm2022/autocomplete/autocomplete.interface.mjs +2 -0
- package/esm2022/autocomplete/autocomplete.mjs +1880 -0
- package/esm2022/autocomplete/cax-design-system-autocomplete.mjs +5 -0
- package/esm2022/autocomplete/public_api.mjs +3 -0
- package/esm2022/autofocus/autofocus.mjs +78 -0
- package/esm2022/autofocus/cax-design-system-autofocus.mjs +5 -0
- package/esm2022/autofocus/public_api.mjs +2 -0
- package/esm2022/avatar/avatar.mjs +104 -0
- package/esm2022/avatar/avatar.module.mjs +16 -0
- package/esm2022/avatar/cax-design-system-avatar.mjs +5 -0
- package/esm2022/avatar/public_api.mjs +3 -0
- package/esm2022/avatargroup/avatargroup.mjs +54 -0
- package/esm2022/avatargroup/cax-design-system-avatargroup.mjs +5 -0
- package/esm2022/avatargroup/public_api.mjs +2 -0
- package/esm2022/badge/badge.directive.mjs +199 -0
- package/esm2022/badge/badge.mjs +51 -0
- package/esm2022/badge/badge.module.mjs +20 -0
- package/esm2022/badge/cax-design-system-badge.mjs +5 -0
- package/esm2022/badge/public_api.mjs +4 -0
- package/esm2022/baseicon/baseicon.mjs +45 -0
- package/esm2022/baseicon/cax-design-system-baseicon.mjs +5 -0
- package/esm2022/baseicon/public_api.mjs +2 -0
- package/esm2022/blockui/blockui.interface.mjs +2 -0
- package/esm2022/blockui/blockui.mjs +206 -0
- package/esm2022/blockui/cax-design-system-blockui.mjs +5 -0
- package/esm2022/blockui/public_api.mjs +3 -0
- package/esm2022/breadcrumb/breadcrumb.interface.mjs +2 -0
- package/esm2022/breadcrumb/breadcrumb.mjs +120 -0
- package/esm2022/breadcrumb/breadcrumb.module.mjs +23 -0
- package/esm2022/breadcrumb/cax-design-system-breadcrumb.mjs +5 -0
- package/esm2022/breadcrumb/public_api.mjs +4 -0
- package/esm2022/button/button.directive.mjs +227 -0
- package/esm2022/button/button.interface.mjs +2 -0
- package/esm2022/button/button.mjs +189 -0
- package/esm2022/button/button.module.mjs +18 -0
- package/esm2022/button/cax-design-system-button.mjs +5 -0
- package/esm2022/button/public_api.mjs +5 -0
- package/esm2022/buttongroup/buttongroup.mjs +38 -0
- package/esm2022/buttongroup/cax-design-system-buttongroup.mjs +5 -0
- package/esm2022/buttongroup/public_api.mjs +2 -0
- package/esm2022/calendar/calendar.interface.mjs +2 -0
- package/esm2022/calendar/calendar.mjs +3192 -0
- package/esm2022/calendar/calendar.module.mjs +18 -0
- package/esm2022/calendar/cax-design-system-calendar.mjs +5 -0
- package/esm2022/calendar/public_api.mjs +4 -0
- package/esm2022/card/card.interface.mjs +2 -0
- package/esm2022/card/card.mjs +117 -0
- package/esm2022/card/card.module.mjs +21 -0
- package/esm2022/card/cax-design-system-card.mjs +5 -0
- package/esm2022/card/public_api.mjs +4 -0
- package/esm2022/carousel/carousel.interface.mjs +2 -0
- package/esm2022/carousel/carousel.mjs +968 -0
- package/esm2022/carousel/cax-design-system-carousel.mjs +5 -0
- package/esm2022/carousel/public_api.mjs +3 -0
- package/esm2022/cascadeselect/cascadeselect.interface.mjs +2 -0
- package/esm2022/cascadeselect/cascadeselect.mjs +1135 -0
- package/esm2022/cascadeselect/cascadeselect.module.mjs +25 -0
- package/esm2022/cascadeselect/cax-design-system-cascadeselect.mjs +5 -0
- package/esm2022/cascadeselect/public_api.mjs +4 -0
- package/esm2022/cax-design-system.mjs +5 -0
- package/esm2022/chart/cax-design-system-chart.mjs +5 -0
- package/esm2022/chart/chart.mjs +236 -0
- package/esm2022/chart/public_api.mjs +2 -0
- package/esm2022/checkbox/cax-design-system-checkbox.mjs +5 -0
- package/esm2022/checkbox/checkbox.interface.mjs +2 -0
- package/esm2022/checkbox/checkbox.mjs +303 -0
- package/esm2022/checkbox/checkbox.module.mjs +20 -0
- package/esm2022/checkbox/public_api.mjs +4 -0
- package/esm2022/chip/cax-design-system-chip.mjs +5 -0
- package/esm2022/chip/chip.interface.mjs +2 -0
- package/esm2022/chip/chip.mjs +86 -0
- package/esm2022/chip/chip.module.mjs +20 -0
- package/esm2022/chip/public_api.mjs +4 -0
- package/esm2022/chips/cax-design-system-chips.mjs +5 -0
- package/esm2022/chips/chips.interface.mjs +2 -0
- package/esm2022/chips/chips.mjs +568 -0
- package/esm2022/chips/chips.module.mjs +22 -0
- package/esm2022/chips/public_api.mjs +4 -0
- package/esm2022/colorpicker/cax-design-system-colorpicker.mjs +5 -0
- package/esm2022/colorpicker/colorpicker.interface.mjs +2 -0
- package/esm2022/colorpicker/colorpicker.mjs +829 -0
- package/esm2022/colorpicker/public_api.mjs +3 -0
- package/esm2022/confirmdialog/cax-design-system-confirmdialog.mjs +5 -0
- package/esm2022/confirmdialog/confirmdialog.interface.mjs +2 -0
- package/esm2022/confirmdialog/confirmdialog.mjs +689 -0
- package/esm2022/confirmdialog/public_api.mjs +3 -0
- package/esm2022/confirmpopup/cax-design-system-confirmpopup.mjs +5 -0
- package/esm2022/confirmpopup/confirmpopup.interface.mjs +2 -0
- package/esm2022/confirmpopup/confirmpopup.mjs +499 -0
- package/esm2022/confirmpopup/public_api.mjs +3 -0
- package/esm2022/contextmenu/cax-design-system-contextmenu.mjs +5 -0
- package/esm2022/contextmenu/contextmenu.mjs +1304 -0
- package/esm2022/contextmenu/public_api.mjs +2 -0
- package/esm2022/dataview/cax-design-system-dataview.mjs +5 -0
- package/esm2022/dataview/dataview.interface.mjs +2 -0
- package/esm2022/dataview/dataview.mjs +723 -0
- package/esm2022/dataview/public_api.mjs +3 -0
- package/esm2022/defer/cax-design-system-defer.mjs +5 -0
- package/esm2022/defer/defer.mjs +111 -0
- package/esm2022/defer/public_api.mjs +2 -0
- package/esm2022/dialog/cax-design-system-dialog.mjs +5 -0
- package/esm2022/dialog/dialog.interface.mjs +2 -0
- package/esm2022/dialog/dialog.mjs +1168 -0
- package/esm2022/dialog/public_api.mjs +3 -0
- package/esm2022/divider/cax-design-system-divider.mjs +5 -0
- package/esm2022/divider/divider.mjs +69 -0
- package/esm2022/divider/divider.module.mjs +16 -0
- package/esm2022/divider/public_api.mjs +3 -0
- package/esm2022/dock/cax-design-system-dock.mjs +5 -0
- package/esm2022/dock/dock.interface.mjs +2 -0
- package/esm2022/dock/dock.mjs +431 -0
- package/esm2022/dock/public_api.mjs +3 -0
- package/esm2022/dom/cax-design-system-dom.mjs +5 -0
- package/esm2022/dom/connectedoverlayscrollhandler.mjs +30 -0
- package/esm2022/dom/domhandler.mjs +722 -0
- package/esm2022/dom/public_api.mjs +3 -0
- package/esm2022/dragdrop/cax-design-system-dragdrop.mjs +5 -0
- package/esm2022/dragdrop/dragdrop.mjs +309 -0
- package/esm2022/dragdrop/dragdrop.module.mjs +18 -0
- package/esm2022/dragdrop/public_api.mjs +3 -0
- package/esm2022/dropdown/cax-design-system-dropdown.mjs +5 -0
- package/esm2022/dropdown/dropdown-item.mjs +72 -0
- package/esm2022/dropdown/dropdown.interface.mjs +2 -0
- package/esm2022/dropdown/dropdown.mjs +1597 -0
- package/esm2022/dropdown/dropdown.module.mjs +20 -0
- package/esm2022/dropdown/public_api.mjs +5 -0
- package/esm2022/dynamicdialog/cax-design-system-dynamicdialog.mjs +5 -0
- package/esm2022/dynamicdialog/dialogservice.mjs +102 -0
- package/esm2022/dynamicdialog/dynamicdialog-config.mjs +187 -0
- package/esm2022/dynamicdialog/dynamicdialog-injector.mjs +15 -0
- package/esm2022/dynamicdialog/dynamicdialog-ref.mjs +119 -0
- package/esm2022/dynamicdialog/dynamicdialog.mjs +696 -0
- package/esm2022/dynamicdialog/dynamicdialogcontent.mjs +20 -0
- package/esm2022/dynamicdialog/public_api.mjs +7 -0
- package/esm2022/editor/cax-design-system-editor.mjs +5 -0
- package/esm2022/editor/editor.interface.mjs +2 -0
- package/esm2022/editor/editor.mjs +392 -0
- package/esm2022/editor/public_api.mjs +3 -0
- package/esm2022/fieldset/cax-design-system-fieldset.mjs +5 -0
- package/esm2022/fieldset/fieldset.interface.mjs +2 -0
- package/esm2022/fieldset/fieldset.mjs +297 -0
- package/esm2022/fieldset/public_api.mjs +3 -0
- package/esm2022/fileupload/cax-design-system-fileupload.mjs +5 -0
- package/esm2022/fileupload/fileupload.interface.mjs +2 -0
- package/esm2022/fileupload/fileupload.mjs +1188 -0
- package/esm2022/fileupload/public_api.mjs +3 -0
- package/esm2022/floatlabel/cax-design-system-floatlabel.mjs +5 -0
- package/esm2022/floatlabel/floatlabel.mjs +44 -0
- package/esm2022/floatlabel/public_api.mjs +2 -0
- package/esm2022/focustrap/cax-design-system-focustrap.mjs +5 -0
- package/esm2022/focustrap/focustrap.mjs +103 -0
- package/esm2022/focustrap/public_api.mjs +2 -0
- package/esm2022/galleria/cax-design-system-galleria.mjs +5 -0
- package/esm2022/galleria/galleria.interface.mjs +2 -0
- package/esm2022/galleria/galleria.mjs +1668 -0
- package/esm2022/galleria/public_api.mjs +3 -0
- package/esm2022/iconfield/cax-design-system-iconfield.mjs +5 -0
- package/esm2022/iconfield/iconfield.mjs +44 -0
- package/esm2022/iconfield/public_api.mjs +2 -0
- package/esm2022/icons/angledoubledown/angledoubledown.mjs +35 -0
- package/esm2022/icons/angledoubledown/cax-design-system-icons-angledoubledown.mjs +5 -0
- package/esm2022/icons/angledoubledown/public_api.mjs +2 -0
- package/esm2022/icons/angledoubleleft/angledoubleleft.mjs +35 -0
- package/esm2022/icons/angledoubleleft/cax-design-system-icons-angledoubleleft.mjs +5 -0
- package/esm2022/icons/angledoubleleft/public_api.mjs +2 -0
- package/esm2022/icons/angledoubleright/angledoubleright.mjs +35 -0
- package/esm2022/icons/angledoubleright/cax-design-system-icons-angledoubleright.mjs +5 -0
- package/esm2022/icons/angledoubleright/public_api.mjs +2 -0
- package/esm2022/icons/angledoubleup/angledoubleup.mjs +35 -0
- package/esm2022/icons/angledoubleup/cax-design-system-icons-angledoubleup.mjs +5 -0
- package/esm2022/icons/angledoubleup/public_api.mjs +2 -0
- package/esm2022/icons/angledown/angledown.mjs +31 -0
- package/esm2022/icons/angledown/cax-design-system-icons-angledown.mjs +5 -0
- package/esm2022/icons/angledown/public_api.mjs +2 -0
- package/esm2022/icons/angleleft/angleleft.mjs +31 -0
- package/esm2022/icons/angleleft/cax-design-system-icons-angleleft.mjs +5 -0
- package/esm2022/icons/angleleft/public_api.mjs +2 -0
- package/esm2022/icons/angleright/angleright.mjs +31 -0
- package/esm2022/icons/angleright/cax-design-system-icons-angleright.mjs +5 -0
- package/esm2022/icons/angleright/public_api.mjs +2 -0
- package/esm2022/icons/angleup/angleup.mjs +31 -0
- package/esm2022/icons/angleup/cax-design-system-icons-angleup.mjs +5 -0
- package/esm2022/icons/angleup/public_api.mjs +2 -0
- package/esm2022/icons/arrowdown/arrowdown.mjs +54 -0
- package/esm2022/icons/arrowdown/cax-design-system-icons-arrowdown.mjs +5 -0
- package/esm2022/icons/arrowdown/public_api.mjs +2 -0
- package/esm2022/icons/arrowdownleft/arrowdownleft.mjs +31 -0
- package/esm2022/icons/arrowdownleft/cax-design-system-icons-arrowdownleft.mjs +5 -0
- package/esm2022/icons/arrowdownleft/public_api.mjs +2 -0
- package/esm2022/icons/arrowdownright/arrowdownright.mjs +31 -0
- package/esm2022/icons/arrowdownright/cax-design-system-icons-arrowdownright.mjs +5 -0
- package/esm2022/icons/arrowdownright/public_api.mjs +2 -0
- package/esm2022/icons/arrowleft/arrowleft.mjs +54 -0
- package/esm2022/icons/arrowleft/cax-design-system-icons-arrowleft.mjs +5 -0
- package/esm2022/icons/arrowleft/public_api.mjs +2 -0
- package/esm2022/icons/arrowright/arrowright.mjs +35 -0
- package/esm2022/icons/arrowright/cax-design-system-icons-arrowright.mjs +5 -0
- package/esm2022/icons/arrowright/public_api.mjs +2 -0
- package/esm2022/icons/arrowup/arrowup.mjs +54 -0
- package/esm2022/icons/arrowup/cax-design-system-icons-arrowup.mjs +5 -0
- package/esm2022/icons/arrowup/public_api.mjs +2 -0
- package/esm2022/icons/ban/ban.mjs +50 -0
- package/esm2022/icons/ban/cax-design-system-icons-ban.mjs +5 -0
- package/esm2022/icons/ban/public_api.mjs +2 -0
- package/esm2022/icons/bars/bars.mjs +35 -0
- package/esm2022/icons/bars/cax-design-system-icons-bars.mjs +5 -0
- package/esm2022/icons/bars/public_api.mjs +2 -0
- package/esm2022/icons/blank/blank.mjs +25 -0
- package/esm2022/icons/blank/cax-design-system-icons-blank.mjs +5 -0
- package/esm2022/icons/blank/public_api.mjs +2 -0
- package/esm2022/icons/calendar/calendar.mjs +31 -0
- package/esm2022/icons/calendar/cax-design-system-icons-calendar.mjs +5 -0
- package/esm2022/icons/calendar/public_api.mjs +2 -0
- package/esm2022/icons/caretleft/caretleft.mjs +31 -0
- package/esm2022/icons/caretleft/cax-design-system-icons-caretleft.mjs +5 -0
- package/esm2022/icons/caretleft/public_api.mjs +2 -0
- package/esm2022/icons/caretright/caretright.mjs +31 -0
- package/esm2022/icons/caretright/cax-design-system-icons-caretright.mjs +5 -0
- package/esm2022/icons/caretright/public_api.mjs +2 -0
- package/esm2022/icons/check/cax-design-system-icons-check.mjs +5 -0
- package/esm2022/icons/check/check.mjs +31 -0
- package/esm2022/icons/check/public_api.mjs +2 -0
- package/esm2022/icons/chevrondown/cax-design-system-icons-chevrondown.mjs +5 -0
- package/esm2022/icons/chevrondown/chevrondown.mjs +31 -0
- package/esm2022/icons/chevrondown/public_api.mjs +2 -0
- package/esm2022/icons/chevronleft/cax-design-system-icons-chevronleft.mjs +5 -0
- package/esm2022/icons/chevronleft/chevronleft.mjs +31 -0
- package/esm2022/icons/chevronleft/public_api.mjs +2 -0
- package/esm2022/icons/chevronright/cax-design-system-icons-chevronright.mjs +5 -0
- package/esm2022/icons/chevronright/chevronright.mjs +31 -0
- package/esm2022/icons/chevronright/public_api.mjs +2 -0
- package/esm2022/icons/chevronup/cax-design-system-icons-chevronup.mjs +5 -0
- package/esm2022/icons/chevronup/chevronup.mjs +31 -0
- package/esm2022/icons/chevronup/public_api.mjs +2 -0
- package/esm2022/icons/exclamationtriangle/cax-design-system-icons-exclamationtriangle.mjs +5 -0
- package/esm2022/icons/exclamationtriangle/exclamationtriangle.mjs +66 -0
- package/esm2022/icons/exclamationtriangle/public_api.mjs +2 -0
- package/esm2022/icons/eye/cax-design-system-icons-eye.mjs +5 -0
- package/esm2022/icons/eye/eye.mjs +35 -0
- package/esm2022/icons/eye/public_api.mjs +2 -0
- package/esm2022/icons/eyeslash/cax-design-system-icons-eyeslash.mjs +5 -0
- package/esm2022/icons/eyeslash/eyeslash.mjs +54 -0
- package/esm2022/icons/eyeslash/public_api.mjs +2 -0
- package/esm2022/icons/filter/cax-design-system-icons-filter.mjs +5 -0
- package/esm2022/icons/filter/filter.mjs +50 -0
- package/esm2022/icons/filter/public_api.mjs +2 -0
- package/esm2022/icons/filterslash/cax-design-system-icons-filterslash.mjs +5 -0
- package/esm2022/icons/filterslash/filterslash.mjs +54 -0
- package/esm2022/icons/filterslash/public_api.mjs +2 -0
- package/esm2022/icons/home/cax-design-system-icons-home.mjs +5 -0
- package/esm2022/icons/home/home.mjs +54 -0
- package/esm2022/icons/home/public_api.mjs +2 -0
- package/esm2022/icons/infocircle/cax-design-system-icons-infocircle.mjs +5 -0
- package/esm2022/icons/infocircle/infocircle.mjs +54 -0
- package/esm2022/icons/infocircle/public_api.mjs +2 -0
- package/esm2022/icons/minus/cax-design-system-icons-minus.mjs +5 -0
- package/esm2022/icons/minus/minus.mjs +32 -0
- package/esm2022/icons/minus/public_api.mjs +2 -0
- package/esm2022/icons/pencil/cax-design-system-icons-pencil.mjs +5 -0
- package/esm2022/icons/pencil/pencil.mjs +50 -0
- package/esm2022/icons/pencil/public_api.mjs +2 -0
- package/esm2022/icons/plus/cax-design-system-icons-plus.mjs +5 -0
- package/esm2022/icons/plus/plus.mjs +50 -0
- package/esm2022/icons/plus/public_api.mjs +2 -0
- package/esm2022/icons/refresh/cax-design-system-icons-refresh.mjs +5 -0
- package/esm2022/icons/refresh/public_api.mjs +2 -0
- package/esm2022/icons/refresh/refresh.mjs +54 -0
- package/esm2022/icons/search/cax-design-system-icons-search.mjs +5 -0
- package/esm2022/icons/search/public_api.mjs +2 -0
- package/esm2022/icons/search/search.mjs +54 -0
- package/esm2022/icons/searchminus/cax-design-system-icons-searchminus.mjs +5 -0
- package/esm2022/icons/searchminus/public_api.mjs +2 -0
- package/esm2022/icons/searchminus/searchminus.mjs +54 -0
- package/esm2022/icons/searchplus/cax-design-system-icons-searchplus.mjs +5 -0
- package/esm2022/icons/searchplus/public_api.mjs +2 -0
- package/esm2022/icons/searchplus/searchplus.mjs +54 -0
- package/esm2022/icons/sortalt/cax-design-system-icons-sortalt.mjs +5 -0
- package/esm2022/icons/sortalt/public_api.mjs +2 -0
- package/esm2022/icons/sortalt/sortalt.mjs +62 -0
- package/esm2022/icons/sortamountdown/cax-design-system-icons-sortamountdown.mjs +5 -0
- package/esm2022/icons/sortamountdown/public_api.mjs +2 -0
- package/esm2022/icons/sortamountdown/sortamountdown.mjs +50 -0
- package/esm2022/icons/sortamountupalt/cax-design-system-icons-sortamountupalt.mjs +5 -0
- package/esm2022/icons/sortamountupalt/public_api.mjs +2 -0
- package/esm2022/icons/sortamountupalt/sortamountupalt.mjs +50 -0
- package/esm2022/icons/spinner/cax-design-system-icons-spinner.mjs +5 -0
- package/esm2022/icons/spinner/public_api.mjs +2 -0
- package/esm2022/icons/spinner/spinner.mjs +50 -0
- package/esm2022/icons/star/cax-design-system-icons-star.mjs +5 -0
- package/esm2022/icons/star/public_api.mjs +2 -0
- package/esm2022/icons/star/star.mjs +50 -0
- package/esm2022/icons/starfill/cax-design-system-icons-starfill.mjs +5 -0
- package/esm2022/icons/starfill/public_api.mjs +2 -0
- package/esm2022/icons/starfill/starfill.mjs +50 -0
- package/esm2022/icons/thlarge/cax-design-system-icons-thlarge.mjs +5 -0
- package/esm2022/icons/thlarge/public_api.mjs +2 -0
- package/esm2022/icons/thlarge/thlarge.mjs +54 -0
- package/esm2022/icons/times/cax-design-system-icons-times.mjs +5 -0
- package/esm2022/icons/times/public_api.mjs +2 -0
- package/esm2022/icons/times/times.mjs +31 -0
- package/esm2022/icons/timescircle/cax-design-system-icons-timescircle.mjs +5 -0
- package/esm2022/icons/timescircle/public_api.mjs +2 -0
- package/esm2022/icons/timescircle/timescircle.mjs +54 -0
- package/esm2022/icons/trash/cax-design-system-icons-trash.mjs +5 -0
- package/esm2022/icons/trash/public_api.mjs +2 -0
- package/esm2022/icons/trash/trash.mjs +54 -0
- package/esm2022/icons/undo/cax-design-system-icons-undo.mjs +5 -0
- package/esm2022/icons/undo/public_api.mjs +2 -0
- package/esm2022/icons/undo/undo.mjs +54 -0
- package/esm2022/icons/upload/cax-design-system-icons-upload.mjs +5 -0
- package/esm2022/icons/upload/public_api.mjs +2 -0
- package/esm2022/icons/upload/upload.mjs +54 -0
- package/esm2022/icons/windowmaximize/cax-design-system-icons-windowmaximize.mjs +5 -0
- package/esm2022/icons/windowmaximize/public_api.mjs +2 -0
- package/esm2022/icons/windowmaximize/windowmaximize.mjs +54 -0
- package/esm2022/icons/windowminimize/cax-design-system-icons-windowminimize.mjs +5 -0
- package/esm2022/icons/windowminimize/public_api.mjs +2 -0
- package/esm2022/icons/windowminimize/windowminimize.mjs +54 -0
- package/esm2022/image/cax-design-system-image.mjs +5 -0
- package/esm2022/image/image.interface.mjs +2 -0
- package/esm2022/image/image.mjs +418 -0
- package/esm2022/image/image.module.mjs +17 -0
- package/esm2022/image/public_api.mjs +4 -0
- package/esm2022/inplace/cax-design-system-inplace.mjs +5 -0
- package/esm2022/inplace/inplace.interface.mjs +2 -0
- package/esm2022/inplace/inplace.mjs +243 -0
- package/esm2022/inplace/public_api.mjs +3 -0
- package/esm2022/inputgroup/cax-design-system-inputgroup.mjs +5 -0
- package/esm2022/inputgroup/inputgroup.mjs +48 -0
- package/esm2022/inputgroup/inputgroup.module.mjs +25 -0
- package/esm2022/inputgroup/public_api.mjs +3 -0
- package/esm2022/inputgroupaddon/cax-design-system-inputgroupaddon.mjs +5 -0
- package/esm2022/inputgroupaddon/inputgroupaddon.mjs +32 -0
- package/esm2022/inputgroupaddon/inputgroupaddon.module.mjs +24 -0
- package/esm2022/inputgroupaddon/public_api.mjs +3 -0
- package/esm2022/inputicon/cax-design-system-inputicon.mjs +5 -0
- package/esm2022/inputicon/inputicon.mjs +38 -0
- package/esm2022/inputicon/public_api.mjs +2 -0
- package/esm2022/inputmask/cax-design-system-inputmask.mjs +5 -0
- package/esm2022/inputmask/inputmask.interface.mjs +2 -0
- package/esm2022/inputmask/inputmask.mjs +914 -0
- package/esm2022/inputmask/public_api.mjs +3 -0
- package/esm2022/inputnumber/cax-design-system-inputnumber.mjs +5 -0
- package/esm2022/inputnumber/inputnumber.interface.mjs +2 -0
- package/esm2022/inputnumber/inputnumber.mjs +1290 -0
- package/esm2022/inputnumber/inputnumber.module.mjs +17 -0
- package/esm2022/inputnumber/public_api.mjs +4 -0
- package/esm2022/inputotp/cax-design-system-inputotp.mjs +5 -0
- package/esm2022/inputotp/inputotp.interface.mjs +2 -0
- package/esm2022/inputotp/inputotp.mjs +381 -0
- package/esm2022/inputotp/public_api.mjs +3 -0
- package/esm2022/inputswitch/cax-design-system-inputswitch.mjs +5 -0
- package/esm2022/inputswitch/inputswitch.interface.mjs +2 -0
- package/esm2022/inputswitch/inputswitch.mjs +244 -0
- package/esm2022/inputswitch/public_api.mjs +3 -0
- package/esm2022/inputtext/cax-design-system-inputtext.mjs +5 -0
- package/esm2022/inputtext/inputtext.component.mjs +74 -0
- package/esm2022/inputtext/inputtext.directive.mjs +52 -0
- package/esm2022/inputtext/inputtext.module.mjs +20 -0
- package/esm2022/inputtext/public_api.mjs +4 -0
- package/esm2022/inputtextarea/cax-design-system-inputtextarea.mjs +5 -0
- package/esm2022/inputtextarea/inputtextarea.mjs +135 -0
- package/esm2022/inputtextarea/public_api.mjs +2 -0
- package/esm2022/keyfilter/cax-design-system-keyfilter.mjs +5 -0
- package/esm2022/keyfilter/keyfilter.interface.mjs +2 -0
- package/esm2022/keyfilter/keyfilter.mjs +265 -0
- package/esm2022/keyfilter/public_api.mjs +3 -0
- package/esm2022/knob/cax-design-system-knob.mjs +5 -0
- package/esm2022/knob/knob.mjs +464 -0
- package/esm2022/knob/public_api.mjs +2 -0
- package/esm2022/listbox/cax-design-system-listbox.mjs +5 -0
- package/esm2022/listbox/listbox.interface.mjs +2 -0
- package/esm2022/listbox/listbox.mjs +1555 -0
- package/esm2022/listbox/public_api.mjs +3 -0
- package/esm2022/logo/cax-design-system-logo.mjs +5 -0
- package/esm2022/logo/logo.mjs +45 -0
- package/esm2022/logo/logo.module.mjs +16 -0
- package/esm2022/logo/public_api.mjs +3 -0
- package/esm2022/megamenu/cax-design-system-megamenu.mjs +5 -0
- package/esm2022/megamenu/megamenu.interface.mjs +2 -0
- package/esm2022/megamenu/megamenu.mjs +1190 -0
- package/esm2022/megamenu/public_api.mjs +3 -0
- package/esm2022/menu/cax-design-system-menu.mjs +5 -0
- package/esm2022/menu/menu.mjs +953 -0
- package/esm2022/menu/public_api.mjs +2 -0
- package/esm2022/menubar/cax-design-system-menubar.mjs +5 -0
- package/esm2022/menubar/menubar.interface.mjs +2 -0
- package/esm2022/menubar/menubar.mjs +1249 -0
- package/esm2022/menubar/public_api.mjs +3 -0
- package/esm2022/message/cax-design-system-message.mjs +5 -0
- package/esm2022/message/message.mjs +112 -0
- package/esm2022/message/public_api.mjs +2 -0
- package/esm2022/messages/cax-design-system-messages.mjs +5 -0
- package/esm2022/messages/messages.interface.mjs +2 -0
- package/esm2022/messages/messages.mjs +283 -0
- package/esm2022/messages/messages.module.mjs +17 -0
- package/esm2022/messages/public_api.mjs +4 -0
- package/esm2022/metergroup/cax-design-system-metergroup.mjs +5 -0
- package/esm2022/metergroup/metergroup.interface.mjs +2 -0
- package/esm2022/metergroup/metergroup.mjs +280 -0
- package/esm2022/metergroup/public_api.mjs +3 -0
- package/esm2022/multiselect/cax-design-system-multiselect.mjs +5 -0
- package/esm2022/multiselect/multiselect.interface.mjs +2 -0
- package/esm2022/multiselect/multiselect.mjs +2525 -0
- package/esm2022/multiselect/public_api.mjs +3 -0
- package/esm2022/navigation/cax-design-system-navigation.mjs +5 -0
- package/esm2022/navigation/navigation.interface.mjs +2 -0
- package/esm2022/navigation/navigation.mjs +261 -0
- package/esm2022/navigation/navigation.module.mjs +16 -0
- package/esm2022/navigation/public_api.mjs +3 -0
- package/esm2022/orderlist/cax-design-system-orderlist.mjs +5 -0
- package/esm2022/orderlist/orderlist.interface.mjs +2 -0
- package/esm2022/orderlist/orderlist.mjs +993 -0
- package/esm2022/orderlist/public_api.mjs +3 -0
- package/esm2022/organizationchart/cax-design-system-organizationchart.mjs +5 -0
- package/esm2022/organizationchart/organizationchart.interface.mjs +2 -0
- package/esm2022/organizationchart/organizationchart.mjs +416 -0
- package/esm2022/organizationchart/public_api.mjs +3 -0
- package/esm2022/overlay/cax-design-system-overlay.mjs +5 -0
- package/esm2022/overlay/overlay.mjs +579 -0
- package/esm2022/overlay/overlay.module.mjs +17 -0
- package/esm2022/overlay/public_api.mjs +3 -0
- package/esm2022/overlaypanel/cax-design-system-overlaypanel.mjs +5 -0
- package/esm2022/overlaypanel/overlaypanel.mjs +470 -0
- package/esm2022/overlaypanel/overlaypanel.module.mjs +17 -0
- package/esm2022/overlaypanel/public_api.mjs +3 -0
- package/esm2022/paginator/cax-design-system-paginator.mjs +5 -0
- package/esm2022/paginator/paginator.interface.mjs +2 -0
- package/esm2022/paginator/paginator.mjs +424 -0
- package/esm2022/paginator/paginator.module.mjs +27 -0
- package/esm2022/paginator/public_api.mjs +4 -0
- package/esm2022/panel/cax-design-system-panel.mjs +5 -0
- package/esm2022/panel/panel.interface.mjs +2 -0
- package/esm2022/panel/panel.mjs +393 -0
- package/esm2022/panel/public_api.mjs +3 -0
- package/esm2022/panelmenu/cax-design-system-panelmenu.mjs +5 -0
- package/esm2022/panelmenu/panelmenu.interface.mjs +2 -0
- package/esm2022/panelmenu/panelmenu.mjs +1276 -0
- package/esm2022/panelmenu/public_api.mjs +3 -0
- package/esm2022/password/cax-design-system-password.mjs +5 -0
- package/esm2022/password/password.mjs +1017 -0
- package/esm2022/password/public_api.mjs +2 -0
- package/esm2022/picklist/cax-design-system-picklist.mjs +5 -0
- package/esm2022/picklist/picklist.interface.mjs +2 -0
- package/esm2022/picklist/picklist.mjs +1909 -0
- package/esm2022/picklist/public_api.mjs +3 -0
- package/esm2022/progressbar/cax-design-system-progressbar.mjs +5 -0
- package/esm2022/progressbar/progressbar.mjs +86 -0
- package/esm2022/progressbar/progressbar.module.mjs +18 -0
- package/esm2022/progressbar/public_api.mjs +3 -0
- package/esm2022/progressspinner/cax-design-system-progressspinner.mjs +5 -0
- package/esm2022/progressspinner/progressspinner.mjs +112 -0
- package/esm2022/progressspinner/progressspinner.module.mjs +18 -0
- package/esm2022/progressspinner/public_api.mjs +3 -0
- package/esm2022/public_api.mjs +2 -0
- package/esm2022/radiobutton/cax-design-system-radiobutton.mjs +5 -0
- package/esm2022/radiobutton/public_api.mjs +4 -0
- package/esm2022/radiobutton/radiobutton.interface.mjs +2 -0
- package/esm2022/radiobutton/radiobutton.mjs +277 -0
- package/esm2022/radiobutton/radiobutton.module.mjs +16 -0
- package/esm2022/rating/cax-design-system-rating.mjs +5 -0
- package/esm2022/rating/public_api.mjs +3 -0
- package/esm2022/rating/rating.interface.mjs +2 -0
- package/esm2022/rating/rating.mjs +388 -0
- package/esm2022/ripple/cax-design-system-ripple.mjs +5 -0
- package/esm2022/ripple/public_api.mjs +3 -0
- package/esm2022/ripple/ripple.mjs +129 -0
- package/esm2022/ripple/ripple.module.mjs +16 -0
- package/esm2022/scroller/cax-design-system-scroller.mjs +5 -0
- package/esm2022/scroller/public_api.mjs +4 -0
- package/esm2022/scroller/scroller.interface.mjs +2 -0
- package/esm2022/scroller/scroller.mjs +981 -0
- package/esm2022/scroller/scroller.module.mjs +17 -0
- package/esm2022/scrollpanel/cax-design-system-scrollpanel.mjs +5 -0
- package/esm2022/scrollpanel/public_api.mjs +3 -0
- package/esm2022/scrollpanel/scrollpanel.interface.mjs +2 -0
- package/esm2022/scrollpanel/scrollpanel.mjs +501 -0
- package/esm2022/scrolltop/cax-design-system-scrolltop.mjs +5 -0
- package/esm2022/scrolltop/public_api.mjs +3 -0
- package/esm2022/scrolltop/scrolltop.interface.mjs +2 -0
- package/esm2022/scrolltop/scrolltop.mjs +282 -0
- package/esm2022/selectbutton/cax-design-system-selectbutton.mjs +5 -0
- package/esm2022/selectbutton/public_api.mjs +3 -0
- package/esm2022/selectbutton/selectbutton.interface.mjs +2 -0
- package/esm2022/selectbutton/selectbutton.mjs +378 -0
- package/esm2022/sidebar/cax-design-system-sidebar.mjs +5 -0
- package/esm2022/sidebar/public_api.mjs +4 -0
- package/esm2022/sidebar/sidebar.interface.mjs +2 -0
- package/esm2022/sidebar/sidebar.mjs +419 -0
- package/esm2022/sidebar/sidebar.module.mjs +21 -0
- package/esm2022/skeleton/cax-design-system-skeleton.mjs +5 -0
- package/esm2022/skeleton/public_api.mjs +3 -0
- package/esm2022/skeleton/skeleton.mjs +87 -0
- package/esm2022/skeleton/skeleton.module.mjs +18 -0
- package/esm2022/slidemenu/cax-design-system-slidemenu.mjs +5 -0
- package/esm2022/slidemenu/public_api.mjs +3 -0
- package/esm2022/slidemenu/slidemenu.interface.mjs +2 -0
- package/esm2022/slidemenu/slidemenu.mjs +1501 -0
- package/esm2022/slider/cax-design-system-slider.mjs +5 -0
- package/esm2022/slider/public_api.mjs +3 -0
- package/esm2022/slider/slider.interface.mjs +2 -0
- package/esm2022/slider/slider.mjs +796 -0
- package/esm2022/speeddial/cax-design-system-speeddial.mjs +5 -0
- package/esm2022/speeddial/public_api.mjs +4 -0
- package/esm2022/speeddial/speeddial.interface.mjs +2 -0
- package/esm2022/speeddial/speeddial.mjs +611 -0
- package/esm2022/speeddial/speeddial.module.mjs +24 -0
- package/esm2022/spinner/cax-design-system-spinner.mjs +5 -0
- package/esm2022/spinner/public_api.mjs +2 -0
- package/esm2022/spinner/spinner.mjs +447 -0
- package/esm2022/splitbutton/cax-design-system-splitbutton.mjs +5 -0
- package/esm2022/splitbutton/public_api.mjs +4 -0
- package/esm2022/splitbutton/splitbutton.interface.mjs +2 -0
- package/esm2022/splitbutton/splitbutton.mjs +364 -0
- package/esm2022/splitbutton/splitbutton.module.mjs +22 -0
- package/esm2022/splitter/cax-design-system-splitter.mjs +5 -0
- package/esm2022/splitter/public_api.mjs +3 -0
- package/esm2022/splitter/splitter.interface.mjs +2 -0
- package/esm2022/splitter/splitter.mjs +562 -0
- package/esm2022/stepper/cax-design-system-stepper.mjs +5 -0
- package/esm2022/stepper/public_api.mjs +3 -0
- package/esm2022/stepper/stepper.interface.mjs +2 -0
- package/esm2022/stepper/stepper.mjs +677 -0
- package/esm2022/steps/cax-design-system-steps.mjs +5 -0
- package/esm2022/steps/public_api.mjs +2 -0
- package/esm2022/steps/steps.mjs +345 -0
- package/esm2022/styleclass/cax-design-system-styleclass.mjs +5 -0
- package/esm2022/styleclass/public_api.mjs +2 -0
- package/esm2022/styleclass/styleclass.mjs +316 -0
- package/esm2022/table/cax-design-system-table.mjs +5 -0
- package/esm2022/table/columnfilter.interface.mjs +2 -0
- package/esm2022/table/components/cell-editor/cell-editor.mjs +52 -0
- package/esm2022/table/components/column-filter/column-filter.mjs +685 -0
- package/esm2022/table/components/column-filter-form-element/column-filter-form-element.mjs +106 -0
- package/esm2022/table/components/sort-icon/sort-icon.mjs +75 -0
- package/esm2022/table/components/table-body/table-body.mjs +152 -0
- package/esm2022/table/components/table-checkbox/table-checkbox.mjs +82 -0
- package/esm2022/table/components/table-header-checkbox/table-header-checkbox.mjs +92 -0
- package/esm2022/table/components/table-radio-button/table-radio-button.mjs +79 -0
- package/esm2022/table/directives/cancel-editable-row.directive.mjs +32 -0
- package/esm2022/table/directives/content-menu-row.directive.mjs +70 -0
- package/esm2022/table/directives/editable-column.directive.mjs +344 -0
- package/esm2022/table/directives/editable-row.directive.mjs +32 -0
- package/esm2022/table/directives/frozen-column.directive.mjs +77 -0
- package/esm2022/table/directives/init-editable-row.directive.mjs +32 -0
- package/esm2022/table/directives/reorderable-column.directive.mjs +115 -0
- package/esm2022/table/directives/reorderable-row-handle.directive.mjs +25 -0
- package/esm2022/table/directives/reorderable-row.directive.mjs +122 -0
- package/esm2022/table/directives/resizable-column.directive.mjs +123 -0
- package/esm2022/table/directives/row-group-header.directive.mjs +26 -0
- package/esm2022/table/directives/row-toggler.directive.mjs +42 -0
- package/esm2022/table/directives/save-editable-row.directive.mjs +32 -0
- package/esm2022/table/directives/selectable-row-double-click.directive.mjs +71 -0
- package/esm2022/table/directives/selectable-row.directive.mjs +243 -0
- package/esm2022/table/directives/sortable-column.directive.mjs +90 -0
- package/esm2022/table/public_api.mjs +29 -0
- package/esm2022/table/table.interface.mjs +2 -0
- package/esm2022/table/table.mjs +2721 -0
- package/esm2022/table/table.module.mjs +147 -0
- package/esm2022/table/table.service.mjs +42 -0
- package/esm2022/tabmenu/cax-design-system-tabmenu.mjs +5 -0
- package/esm2022/tabmenu/public_api.mjs +3 -0
- package/esm2022/tabmenu/tabmenu.interface.mjs +2 -0
- package/esm2022/tabmenu/tabmenu.mjs +576 -0
- package/esm2022/tabview/cax-design-system-tabview.mjs +5 -0
- package/esm2022/tabview/public_api.mjs +4 -0
- package/esm2022/tabview/tabview.interface.mjs +2 -0
- package/esm2022/tabview/tabview.mjs +824 -0
- package/esm2022/tabview/tabview.module.mjs +24 -0
- package/esm2022/tag/cax-design-system-tag.mjs +5 -0
- package/esm2022/tag/public_api.mjs +4 -0
- package/esm2022/tag/tag.interface.mjs +2 -0
- package/esm2022/tag/tag.mjs +95 -0
- package/esm2022/tag/tag.module.mjs +19 -0
- package/esm2022/terminal/cax-design-system-terminal.mjs +5 -0
- package/esm2022/terminal/public_api.mjs +3 -0
- package/esm2022/terminal/terminal.mjs +143 -0
- package/esm2022/terminal/terminalservice.mjs +25 -0
- package/esm2022/tieredmenu/cax-design-system-tieredmenu.mjs +5 -0
- package/esm2022/tieredmenu/public_api.mjs +4 -0
- package/esm2022/tieredmenu/tieredmenu.interface.mjs +2 -0
- package/esm2022/tieredmenu/tieredmenu.mjs +1289 -0
- package/esm2022/tieredmenu/tiredmenu.module.mjs +23 -0
- package/esm2022/timeline/cax-design-system-timeline.mjs +5 -0
- package/esm2022/timeline/public_api.mjs +3 -0
- package/esm2022/timeline/timeline.interface.mjs +2 -0
- package/esm2022/timeline/timeline.mjs +167 -0
- package/esm2022/toast/cax-design-system-toast.mjs +5 -0
- package/esm2022/toast/public_api.mjs +4 -0
- package/esm2022/toast/toast.interface.mjs +2 -0
- package/esm2022/toast/toast.mjs +324 -0
- package/esm2022/toast/toast.module.mjs +18 -0
- package/esm2022/toast/toastitem.mjs +170 -0
- package/esm2022/togglebutton/cax-design-system-togglebutton.mjs +5 -0
- package/esm2022/togglebutton/public_api.mjs +3 -0
- package/esm2022/togglebutton/togglebutton.interface.mjs +2 -0
- package/esm2022/togglebutton/togglebutton.mjs +274 -0
- package/esm2022/toggleswitch/cax-design-system-toggleswitch.mjs +5 -0
- package/esm2022/toggleswitch/public_api.mjs +3 -0
- package/esm2022/toggleswitch/toggleswitch.mjs +34 -0
- package/esm2022/toggleswitch/toggleswitch.module.mjs +19 -0
- package/esm2022/toolbar/cax-design-system-toolbar.mjs +5 -0
- package/esm2022/toolbar/public_api.mjs +3 -0
- package/esm2022/toolbar/toolbar.interface.mjs +2 -0
- package/esm2022/toolbar/toolbar.mjs +111 -0
- package/esm2022/tooltip/cax-design-system-tooltip.mjs +5 -0
- package/esm2022/tooltip/public_api.mjs +3 -0
- package/esm2022/tooltip/tooltip.mjs +889 -0
- package/esm2022/tooltip/tooltip.module.mjs +18 -0
- package/esm2022/tree/cax-design-system-tree.mjs +5 -0
- package/esm2022/tree/public_api.mjs +4 -0
- package/esm2022/tree/tree.interface.mjs +2 -0
- package/esm2022/tree/tree.mjs +1495 -0
- package/esm2022/tree/tree.module.mjs +29 -0
- package/esm2022/treeselect/cax-design-system-treeselect.mjs +5 -0
- package/esm2022/treeselect/public_api.mjs +3 -0
- package/esm2022/treeselect/treeselect.interface.mjs +2 -0
- package/esm2022/treeselect/treeselect.mjs +1193 -0
- package/esm2022/treetable/cax-design-system-treetable.mjs +5 -0
- package/esm2022/treetable/public_api.mjs +3 -0
- package/esm2022/treetable/treetable.interface.mjs +2 -0
- package/esm2022/treetable/treetable.mjs +4111 -0
- package/esm2022/tristatecheckbox/cax-design-system-tristatecheckbox.mjs +5 -0
- package/esm2022/tristatecheckbox/public_api.mjs +4 -0
- package/esm2022/tristatecheckbox/tristatecheckbox.interface.mjs +2 -0
- package/esm2022/tristatecheckbox/tristatecheckbox.mjs +215 -0
- package/esm2022/tristatecheckbox/tristatecheckbox.module.mjs +17 -0
- package/esm2022/ts-helpers/cax-design-system-ts-helpers.mjs +5 -0
- package/esm2022/ts-helpers/public_api.mjs +2 -0
- package/esm2022/ts-helpers/ts-helpers.mjs +2 -0
- package/esm2022/utils/cax-design-system-utils.mjs +5 -0
- package/esm2022/utils/objectutils.mjs +258 -0
- package/esm2022/utils/public_api.mjs +5 -0
- package/esm2022/utils/uniquecomponentid.mjs +6 -0
- package/esm2022/utils/zindexutils.mjs +35 -0
- package/esm2022/virtualscroller/cax-design-system-virtualscroller.mjs +5 -0
- package/esm2022/virtualscroller/public_api.mjs +3 -0
- package/esm2022/virtualscroller/virtualscroller.interface.mjs +2 -0
- package/esm2022/virtualscroller/virtualscroller.mjs +215 -0
- package/fesm2022/cax-design-system-accordion.mjs +617 -0
- package/fesm2022/cax-design-system-accordion.mjs.map +1 -0
- package/fesm2022/cax-design-system-animate.mjs +108 -0
- package/fesm2022/cax-design-system-animate.mjs.map +1 -0
- package/fesm2022/cax-design-system-animateonscroll.mjs +192 -0
- package/fesm2022/cax-design-system-animateonscroll.mjs.map +1 -0
- package/fesm2022/cax-design-system-api.mjs +995 -0
- package/fesm2022/cax-design-system-api.mjs.map +1 -0
- package/fesm2022/cax-design-system-autocomplete.mjs +1887 -0
- package/fesm2022/cax-design-system-autocomplete.mjs.map +1 -0
- package/fesm2022/cax-design-system-autofocus.mjs +85 -0
- package/fesm2022/cax-design-system-autofocus.mjs.map +1 -0
- package/fesm2022/cax-design-system-avatar.mjs +124 -0
- package/fesm2022/cax-design-system-avatar.mjs.map +1 -0
- package/fesm2022/cax-design-system-avatargroup.mjs +61 -0
- package/fesm2022/cax-design-system-avatargroup.mjs.map +1 -0
- package/fesm2022/cax-design-system-badge.mjs +270 -0
- package/fesm2022/cax-design-system-badge.mjs.map +1 -0
- package/fesm2022/cax-design-system-baseicon.mjs +52 -0
- package/fesm2022/cax-design-system-baseicon.mjs.map +1 -0
- package/fesm2022/cax-design-system-blockui.mjs +213 -0
- package/fesm2022/cax-design-system-blockui.mjs.map +1 -0
- package/fesm2022/cax-design-system-breadcrumb.mjs +146 -0
- package/fesm2022/cax-design-system-breadcrumb.mjs.map +1 -0
- package/fesm2022/cax-design-system-button.mjs +431 -0
- package/fesm2022/cax-design-system-button.mjs.map +1 -0
- package/fesm2022/cax-design-system-buttongroup.mjs +45 -0
- package/fesm2022/cax-design-system-buttongroup.mjs.map +1 -0
- package/fesm2022/cax-design-system-calendar.mjs +3212 -0
- package/fesm2022/cax-design-system-calendar.mjs.map +1 -0
- package/fesm2022/cax-design-system-card.mjs +141 -0
- package/fesm2022/cax-design-system-card.mjs.map +1 -0
- package/fesm2022/cax-design-system-carousel.mjs +975 -0
- package/fesm2022/cax-design-system-carousel.mjs.map +1 -0
- package/fesm2022/cax-design-system-cascadeselect.mjs +1163 -0
- package/fesm2022/cax-design-system-cascadeselect.mjs.map +1 -0
- package/fesm2022/cax-design-system-chart.mjs +243 -0
- package/fesm2022/cax-design-system-chart.mjs.map +1 -0
- package/fesm2022/cax-design-system-checkbox.mjs +326 -0
- package/fesm2022/cax-design-system-checkbox.mjs.map +1 -0
- package/fesm2022/cax-design-system-chip.mjs +109 -0
- package/fesm2022/cax-design-system-chip.mjs.map +1 -0
- package/fesm2022/cax-design-system-chips.mjs +588 -0
- package/fesm2022/cax-design-system-chips.mjs.map +1 -0
- package/fesm2022/cax-design-system-colorpicker.mjs +836 -0
- package/fesm2022/cax-design-system-colorpicker.mjs.map +1 -0
- package/fesm2022/cax-design-system-confirmdialog.mjs +696 -0
- package/fesm2022/cax-design-system-confirmdialog.mjs.map +1 -0
- package/fesm2022/cax-design-system-confirmpopup.mjs +506 -0
- package/fesm2022/cax-design-system-confirmpopup.mjs.map +1 -0
- package/fesm2022/cax-design-system-contextmenu.mjs +1311 -0
- package/fesm2022/cax-design-system-contextmenu.mjs.map +1 -0
- package/fesm2022/cax-design-system-dataview.mjs +730 -0
- package/fesm2022/cax-design-system-dataview.mjs.map +1 -0
- package/fesm2022/cax-design-system-defer.mjs +118 -0
- package/fesm2022/cax-design-system-defer.mjs.map +1 -0
- package/fesm2022/cax-design-system-dialog.mjs +1175 -0
- package/fesm2022/cax-design-system-dialog.mjs.map +1 -0
- package/fesm2022/cax-design-system-divider.mjs +89 -0
- package/fesm2022/cax-design-system-divider.mjs.map +1 -0
- package/fesm2022/cax-design-system-dock.mjs +438 -0
- package/fesm2022/cax-design-system-dock.mjs.map +1 -0
- package/fesm2022/cax-design-system-dom.mjs +757 -0
- package/fesm2022/cax-design-system-dom.mjs.map +1 -0
- package/fesm2022/cax-design-system-dragdrop.mjs +331 -0
- package/fesm2022/cax-design-system-dragdrop.mjs.map +1 -0
- package/fesm2022/cax-design-system-dropdown.mjs +1684 -0
- package/fesm2022/cax-design-system-dropdown.mjs.map +1 -0
- package/fesm2022/cax-design-system-dynamicdialog.mjs +1133 -0
- package/fesm2022/cax-design-system-dynamicdialog.mjs.map +1 -0
- package/fesm2022/cax-design-system-editor.mjs +399 -0
- package/fesm2022/cax-design-system-editor.mjs.map +1 -0
- package/fesm2022/cax-design-system-fieldset.mjs +304 -0
- package/fesm2022/cax-design-system-fieldset.mjs.map +1 -0
- package/fesm2022/cax-design-system-fileupload.mjs +1195 -0
- package/fesm2022/cax-design-system-fileupload.mjs.map +1 -0
- package/fesm2022/cax-design-system-floatlabel.mjs +51 -0
- package/fesm2022/cax-design-system-floatlabel.mjs.map +1 -0
- package/fesm2022/cax-design-system-focustrap.mjs +110 -0
- package/fesm2022/cax-design-system-focustrap.mjs.map +1 -0
- package/fesm2022/cax-design-system-galleria.mjs +1675 -0
- package/fesm2022/cax-design-system-galleria.mjs.map +1 -0
- package/fesm2022/cax-design-system-iconfield.mjs +51 -0
- package/fesm2022/cax-design-system-iconfield.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-angledoubledown.mjs +42 -0
- package/fesm2022/cax-design-system-icons-angledoubledown.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-angledoubleleft.mjs +42 -0
- package/fesm2022/cax-design-system-icons-angledoubleleft.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-angledoubleright.mjs +42 -0
- package/fesm2022/cax-design-system-icons-angledoubleright.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-angledoubleup.mjs +42 -0
- package/fesm2022/cax-design-system-icons-angledoubleup.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-angledown.mjs +38 -0
- package/fesm2022/cax-design-system-icons-angledown.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-angleleft.mjs +38 -0
- package/fesm2022/cax-design-system-icons-angleleft.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-angleright.mjs +38 -0
- package/fesm2022/cax-design-system-icons-angleright.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-angleup.mjs +38 -0
- package/fesm2022/cax-design-system-icons-angleup.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-arrowdown.mjs +61 -0
- package/fesm2022/cax-design-system-icons-arrowdown.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-arrowdownleft.mjs +38 -0
- package/fesm2022/cax-design-system-icons-arrowdownleft.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-arrowdownright.mjs +38 -0
- package/fesm2022/cax-design-system-icons-arrowdownright.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-arrowleft.mjs +61 -0
- package/fesm2022/cax-design-system-icons-arrowleft.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-arrowright.mjs +42 -0
- package/fesm2022/cax-design-system-icons-arrowright.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-arrowup.mjs +61 -0
- package/fesm2022/cax-design-system-icons-arrowup.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-ban.mjs +57 -0
- package/fesm2022/cax-design-system-icons-ban.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-bars.mjs +42 -0
- package/fesm2022/cax-design-system-icons-bars.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-blank.mjs +32 -0
- package/fesm2022/cax-design-system-icons-blank.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-calendar.mjs +38 -0
- package/fesm2022/cax-design-system-icons-calendar.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-caretleft.mjs +38 -0
- package/fesm2022/cax-design-system-icons-caretleft.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-caretright.mjs +38 -0
- package/fesm2022/cax-design-system-icons-caretright.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-check.mjs +38 -0
- package/fesm2022/cax-design-system-icons-check.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-chevrondown.mjs +38 -0
- package/fesm2022/cax-design-system-icons-chevrondown.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-chevronleft.mjs +38 -0
- package/fesm2022/cax-design-system-icons-chevronleft.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-chevronright.mjs +38 -0
- package/fesm2022/cax-design-system-icons-chevronright.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-chevronup.mjs +38 -0
- package/fesm2022/cax-design-system-icons-chevronup.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-exclamationtriangle.mjs +73 -0
- package/fesm2022/cax-design-system-icons-exclamationtriangle.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-eye.mjs +42 -0
- package/fesm2022/cax-design-system-icons-eye.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-eyeslash.mjs +61 -0
- package/fesm2022/cax-design-system-icons-eyeslash.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-filter.mjs +57 -0
- package/fesm2022/cax-design-system-icons-filter.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-filterslash.mjs +61 -0
- package/fesm2022/cax-design-system-icons-filterslash.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-home.mjs +61 -0
- package/fesm2022/cax-design-system-icons-home.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-infocircle.mjs +61 -0
- package/fesm2022/cax-design-system-icons-infocircle.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-minus.mjs +39 -0
- package/fesm2022/cax-design-system-icons-minus.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-pencil.mjs +57 -0
- package/fesm2022/cax-design-system-icons-pencil.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-plus.mjs +57 -0
- package/fesm2022/cax-design-system-icons-plus.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-refresh.mjs +61 -0
- package/fesm2022/cax-design-system-icons-refresh.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-search.mjs +61 -0
- package/fesm2022/cax-design-system-icons-search.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-searchminus.mjs +61 -0
- package/fesm2022/cax-design-system-icons-searchminus.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-searchplus.mjs +61 -0
- package/fesm2022/cax-design-system-icons-searchplus.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-sortalt.mjs +69 -0
- package/fesm2022/cax-design-system-icons-sortalt.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-sortamountdown.mjs +57 -0
- package/fesm2022/cax-design-system-icons-sortamountdown.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-sortamountupalt.mjs +57 -0
- package/fesm2022/cax-design-system-icons-sortamountupalt.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-spinner.mjs +57 -0
- package/fesm2022/cax-design-system-icons-spinner.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-star.mjs +57 -0
- package/fesm2022/cax-design-system-icons-star.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-starfill.mjs +57 -0
- package/fesm2022/cax-design-system-icons-starfill.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-thlarge.mjs +61 -0
- package/fesm2022/cax-design-system-icons-thlarge.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-times.mjs +38 -0
- package/fesm2022/cax-design-system-icons-times.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-timescircle.mjs +61 -0
- package/fesm2022/cax-design-system-icons-timescircle.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-trash.mjs +61 -0
- package/fesm2022/cax-design-system-icons-trash.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-undo.mjs +61 -0
- package/fesm2022/cax-design-system-icons-undo.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-upload.mjs +61 -0
- package/fesm2022/cax-design-system-icons-upload.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-windowmaximize.mjs +61 -0
- package/fesm2022/cax-design-system-icons-windowmaximize.mjs.map +1 -0
- package/fesm2022/cax-design-system-icons-windowminimize.mjs +61 -0
- package/fesm2022/cax-design-system-icons-windowminimize.mjs.map +1 -0
- package/fesm2022/cax-design-system-image.mjs +438 -0
- package/fesm2022/cax-design-system-image.mjs.map +1 -0
- package/fesm2022/cax-design-system-inplace.mjs +250 -0
- package/fesm2022/cax-design-system-inplace.mjs.map +1 -0
- package/fesm2022/cax-design-system-inputgroup.mjs +77 -0
- package/fesm2022/cax-design-system-inputgroup.mjs.map +1 -0
- package/fesm2022/cax-design-system-inputgroupaddon.mjs +60 -0
- package/fesm2022/cax-design-system-inputgroupaddon.mjs.map +1 -0
- package/fesm2022/cax-design-system-inputicon.mjs +45 -0
- package/fesm2022/cax-design-system-inputicon.mjs.map +1 -0
- package/fesm2022/cax-design-system-inputmask.mjs +921 -0
- package/fesm2022/cax-design-system-inputmask.mjs.map +1 -0
- package/fesm2022/cax-design-system-inputnumber.mjs +1310 -0
- package/fesm2022/cax-design-system-inputnumber.mjs.map +1 -0
- package/fesm2022/cax-design-system-inputotp.mjs +388 -0
- package/fesm2022/cax-design-system-inputotp.mjs.map +1 -0
- package/fesm2022/cax-design-system-inputswitch.mjs +251 -0
- package/fesm2022/cax-design-system-inputswitch.mjs.map +1 -0
- package/fesm2022/cax-design-system-inputtext.mjs +145 -0
- package/fesm2022/cax-design-system-inputtext.mjs.map +1 -0
- package/fesm2022/cax-design-system-inputtextarea.mjs +142 -0
- package/fesm2022/cax-design-system-inputtextarea.mjs.map +1 -0
- package/fesm2022/cax-design-system-keyfilter.mjs +272 -0
- package/fesm2022/cax-design-system-keyfilter.mjs.map +1 -0
- package/fesm2022/cax-design-system-knob.mjs +471 -0
- package/fesm2022/cax-design-system-knob.mjs.map +1 -0
- package/fesm2022/cax-design-system-listbox.mjs +1562 -0
- package/fesm2022/cax-design-system-listbox.mjs.map +1 -0
- package/fesm2022/cax-design-system-logo.mjs +65 -0
- package/fesm2022/cax-design-system-logo.mjs.map +1 -0
- package/fesm2022/cax-design-system-megamenu.mjs +1197 -0
- package/fesm2022/cax-design-system-megamenu.mjs.map +1 -0
- package/fesm2022/cax-design-system-menu.mjs +960 -0
- package/fesm2022/cax-design-system-menu.mjs.map +1 -0
- package/fesm2022/cax-design-system-menubar.mjs +1256 -0
- package/fesm2022/cax-design-system-menubar.mjs.map +1 -0
- package/fesm2022/cax-design-system-message.mjs +119 -0
- package/fesm2022/cax-design-system-message.mjs.map +1 -0
- package/fesm2022/cax-design-system-messages.mjs +303 -0
- package/fesm2022/cax-design-system-messages.mjs.map +1 -0
- package/fesm2022/cax-design-system-metergroup.mjs +287 -0
- package/fesm2022/cax-design-system-metergroup.mjs.map +1 -0
- package/fesm2022/cax-design-system-multiselect.mjs +2532 -0
- package/fesm2022/cax-design-system-multiselect.mjs.map +1 -0
- package/fesm2022/cax-design-system-navigation.mjs +281 -0
- package/fesm2022/cax-design-system-navigation.mjs.map +1 -0
- package/fesm2022/cax-design-system-orderlist.mjs +1000 -0
- package/fesm2022/cax-design-system-orderlist.mjs.map +1 -0
- package/fesm2022/cax-design-system-organizationchart.mjs +423 -0
- package/fesm2022/cax-design-system-organizationchart.mjs.map +1 -0
- package/fesm2022/cax-design-system-overlay.mjs +599 -0
- package/fesm2022/cax-design-system-overlay.mjs.map +1 -0
- package/fesm2022/cax-design-system-overlaypanel.mjs +490 -0
- package/fesm2022/cax-design-system-overlaypanel.mjs.map +1 -0
- package/fesm2022/cax-design-system-paginator.mjs +454 -0
- package/fesm2022/cax-design-system-paginator.mjs.map +1 -0
- package/fesm2022/cax-design-system-panel.mjs +400 -0
- package/fesm2022/cax-design-system-panel.mjs.map +1 -0
- package/fesm2022/cax-design-system-panelmenu.mjs +1283 -0
- package/fesm2022/cax-design-system-panelmenu.mjs.map +1 -0
- package/fesm2022/cax-design-system-password.mjs +1024 -0
- package/fesm2022/cax-design-system-password.mjs.map +1 -0
- package/fesm2022/cax-design-system-picklist.mjs +1916 -0
- package/fesm2022/cax-design-system-picklist.mjs.map +1 -0
- package/fesm2022/cax-design-system-progressbar.mjs +108 -0
- package/fesm2022/cax-design-system-progressbar.mjs.map +1 -0
- package/fesm2022/cax-design-system-progressspinner.mjs +134 -0
- package/fesm2022/cax-design-system-progressspinner.mjs.map +1 -0
- package/fesm2022/cax-design-system-radiobutton.mjs +297 -0
- package/fesm2022/cax-design-system-radiobutton.mjs.map +1 -0
- package/fesm2022/cax-design-system-rating.mjs +395 -0
- package/fesm2022/cax-design-system-rating.mjs.map +1 -0
- package/fesm2022/cax-design-system-ripple.mjs +149 -0
- package/fesm2022/cax-design-system-ripple.mjs.map +1 -0
- package/fesm2022/cax-design-system-scroller.mjs +1001 -0
- package/fesm2022/cax-design-system-scroller.mjs.map +1 -0
- package/fesm2022/cax-design-system-scrollpanel.mjs +508 -0
- package/fesm2022/cax-design-system-scrollpanel.mjs.map +1 -0
- package/fesm2022/cax-design-system-scrolltop.mjs +289 -0
- package/fesm2022/cax-design-system-scrolltop.mjs.map +1 -0
- package/fesm2022/cax-design-system-selectbutton.mjs +385 -0
- package/fesm2022/cax-design-system-selectbutton.mjs.map +1 -0
- package/fesm2022/cax-design-system-sidebar.mjs +439 -0
- package/fesm2022/cax-design-system-sidebar.mjs.map +1 -0
- package/fesm2022/cax-design-system-skeleton.mjs +109 -0
- package/fesm2022/cax-design-system-skeleton.mjs.map +1 -0
- package/fesm2022/cax-design-system-slidemenu.mjs +1508 -0
- package/fesm2022/cax-design-system-slidemenu.mjs.map +1 -0
- package/fesm2022/cax-design-system-slider.mjs +803 -0
- package/fesm2022/cax-design-system-slider.mjs.map +1 -0
- package/fesm2022/cax-design-system-speeddial.mjs +637 -0
- package/fesm2022/cax-design-system-speeddial.mjs.map +1 -0
- package/fesm2022/cax-design-system-spinner.mjs +454 -0
- package/fesm2022/cax-design-system-spinner.mjs.map +1 -0
- package/fesm2022/cax-design-system-splitbutton.mjs +390 -0
- package/fesm2022/cax-design-system-splitbutton.mjs.map +1 -0
- package/fesm2022/cax-design-system-splitter.mjs +569 -0
- package/fesm2022/cax-design-system-splitter.mjs.map +1 -0
- package/fesm2022/cax-design-system-stepper.mjs +684 -0
- package/fesm2022/cax-design-system-stepper.mjs.map +1 -0
- package/fesm2022/cax-design-system-steps.mjs +352 -0
- package/fesm2022/cax-design-system-steps.mjs.map +1 -0
- package/fesm2022/cax-design-system-styleclass.mjs +323 -0
- package/fesm2022/cax-design-system-styleclass.mjs.map +1 -0
- package/fesm2022/cax-design-system-table.mjs +5562 -0
- package/fesm2022/cax-design-system-table.mjs.map +1 -0
- package/fesm2022/cax-design-system-tabmenu.mjs +583 -0
- package/fesm2022/cax-design-system-tabmenu.mjs.map +1 -0
- package/fesm2022/cax-design-system-tabview.mjs +850 -0
- package/fesm2022/cax-design-system-tabview.mjs.map +1 -0
- package/fesm2022/cax-design-system-tag.mjs +117 -0
- package/fesm2022/cax-design-system-tag.mjs.map +1 -0
- package/fesm2022/cax-design-system-terminal.mjs +172 -0
- package/fesm2022/cax-design-system-terminal.mjs.map +1 -0
- package/fesm2022/cax-design-system-tieredmenu.mjs +1314 -0
- package/fesm2022/cax-design-system-tieredmenu.mjs.map +1 -0
- package/fesm2022/cax-design-system-timeline.mjs +174 -0
- package/fesm2022/cax-design-system-timeline.mjs.map +1 -0
- package/fesm2022/cax-design-system-toast.mjs +507 -0
- package/fesm2022/cax-design-system-toast.mjs.map +1 -0
- package/fesm2022/cax-design-system-togglebutton.mjs +281 -0
- package/fesm2022/cax-design-system-togglebutton.mjs.map +1 -0
- package/fesm2022/cax-design-system-toggleswitch.mjs +57 -0
- package/fesm2022/cax-design-system-toggleswitch.mjs.map +1 -0
- package/fesm2022/cax-design-system-toolbar.mjs +118 -0
- package/fesm2022/cax-design-system-toolbar.mjs.map +1 -0
- package/fesm2022/cax-design-system-tooltip.mjs +910 -0
- package/fesm2022/cax-design-system-tooltip.mjs.map +1 -0
- package/fesm2022/cax-design-system-tree.mjs +1527 -0
- package/fesm2022/cax-design-system-tree.mjs.map +1 -0
- package/fesm2022/cax-design-system-treeselect.mjs +1200 -0
- package/fesm2022/cax-design-system-treeselect.mjs.map +1 -0
- package/fesm2022/cax-design-system-treetable.mjs +4118 -0
- package/fesm2022/cax-design-system-treetable.mjs.map +1 -0
- package/fesm2022/cax-design-system-tristatecheckbox.mjs +235 -0
- package/fesm2022/cax-design-system-tristatecheckbox.mjs.map +1 -0
- package/fesm2022/cax-design-system-ts-helpers.mjs +4 -0
- package/fesm2022/cax-design-system-ts-helpers.mjs.map +1 -0
- package/fesm2022/cax-design-system-utils.mjs +305 -0
- package/fesm2022/cax-design-system-utils.mjs.map +1 -0
- package/fesm2022/cax-design-system-virtualscroller.mjs +222 -0
- package/fesm2022/cax-design-system-virtualscroller.mjs.map +1 -0
- package/fesm2022/cax-design-system.mjs +6 -0
- package/fesm2022/cax-design-system.mjs.map +1 -0
- package/fieldset/fieldset.d.ts +93 -0
- package/fieldset/fieldset.interface.d.ts +46 -0
- package/fieldset/index.d.ts +5 -0
- package/fieldset/public_api.d.ts +2 -0
- package/fileupload/fileupload.d.ts +380 -0
- package/fileupload/fileupload.interface.d.ts +226 -0
- package/fileupload/index.d.ts +5 -0
- package/fileupload/public_api.d.ts +2 -0
- package/floatlabel/floatlabel.d.ts +17 -0
- package/floatlabel/index.d.ts +5 -0
- package/floatlabel/public_api.d.ts +1 -0
- package/focustrap/focustrap.d.ts +34 -0
- package/focustrap/index.d.ts +5 -0
- package/focustrap/public_api.d.ts +1 -0
- package/galleria/galleria.d.ts +404 -0
- package/galleria/galleria.interface.d.ts +97 -0
- package/galleria/index.d.ts +5 -0
- package/galleria/public_api.d.ts +2 -0
- package/iconfield/iconfield.d.ts +25 -0
- package/iconfield/index.d.ts +5 -0
- package/iconfield/public_api.d.ts +1 -0
- package/icons/angledoubledown/angledoubledown.d.ts +6 -0
- package/icons/angledoubledown/index.d.ts +5 -0
- package/icons/angledoubledown/public_api.d.ts +1 -0
- package/icons/angledoubleleft/angledoubleleft.d.ts +6 -0
- package/icons/angledoubleleft/index.d.ts +5 -0
- package/icons/angledoubleleft/public_api.d.ts +1 -0
- package/icons/angledoubleright/angledoubleright.d.ts +6 -0
- package/icons/angledoubleright/index.d.ts +5 -0
- package/icons/angledoubleright/public_api.d.ts +1 -0
- package/icons/angledoubleup/angledoubleup.d.ts +6 -0
- package/icons/angledoubleup/index.d.ts +5 -0
- package/icons/angledoubleup/public_api.d.ts +1 -0
- package/icons/angledown/angledown.d.ts +6 -0
- package/icons/angledown/index.d.ts +5 -0
- package/icons/angledown/public_api.d.ts +1 -0
- package/icons/angleleft/angleleft.d.ts +6 -0
- package/icons/angleleft/index.d.ts +5 -0
- package/icons/angleleft/public_api.d.ts +1 -0
- package/icons/angleright/angleright.d.ts +6 -0
- package/icons/angleright/index.d.ts +5 -0
- package/icons/angleright/public_api.d.ts +1 -0
- package/icons/angleup/angleup.d.ts +6 -0
- package/icons/angleup/index.d.ts +5 -0
- package/icons/angleup/public_api.d.ts +1 -0
- package/icons/arrowdown/arrowdown.d.ts +9 -0
- package/icons/arrowdown/index.d.ts +5 -0
- package/icons/arrowdown/public_api.d.ts +1 -0
- package/icons/arrowdownleft/arrowdownleft.d.ts +6 -0
- package/icons/arrowdownleft/index.d.ts +5 -0
- package/icons/arrowdownleft/public_api.d.ts +1 -0
- package/icons/arrowdownright/arrowdownright.d.ts +6 -0
- package/icons/arrowdownright/index.d.ts +5 -0
- package/icons/arrowdownright/public_api.d.ts +1 -0
- package/icons/arrowleft/arrowleft.d.ts +8 -0
- package/icons/arrowleft/index.d.ts +5 -0
- package/icons/arrowleft/public_api.d.ts +1 -0
- package/icons/arrowright/arrowright.d.ts +6 -0
- package/icons/arrowright/index.d.ts +5 -0
- package/icons/arrowright/public_api.d.ts +1 -0
- package/icons/arrowup/arrowup.d.ts +8 -0
- package/icons/arrowup/index.d.ts +5 -0
- package/icons/arrowup/public_api.d.ts +1 -0
- package/icons/ban/ban.d.ts +8 -0
- package/icons/ban/index.d.ts +5 -0
- package/icons/ban/public_api.d.ts +1 -0
- package/icons/bars/bars.d.ts +6 -0
- package/icons/bars/index.d.ts +5 -0
- package/icons/bars/public_api.d.ts +1 -0
- package/icons/blank/blank.d.ts +6 -0
- package/icons/blank/index.d.ts +5 -0
- package/icons/blank/public_api.d.ts +1 -0
- package/icons/calendar/calendar.d.ts +6 -0
- package/icons/calendar/index.d.ts +5 -0
- package/icons/calendar/public_api.d.ts +1 -0
- package/icons/caretleft/caretleft.d.ts +6 -0
- package/icons/caretleft/index.d.ts +5 -0
- package/icons/caretleft/public_api.d.ts +1 -0
- package/icons/caretright/caretright.d.ts +6 -0
- package/icons/caretright/index.d.ts +5 -0
- package/icons/caretright/public_api.d.ts +1 -0
- package/icons/check/check.d.ts +6 -0
- package/icons/check/index.d.ts +5 -0
- package/icons/check/public_api.d.ts +1 -0
- package/icons/chevrondown/chevrondown.d.ts +6 -0
- package/icons/chevrondown/index.d.ts +5 -0
- package/icons/chevrondown/public_api.d.ts +1 -0
- package/icons/chevronleft/chevronleft.d.ts +6 -0
- package/icons/chevronleft/index.d.ts +5 -0
- package/icons/chevronleft/public_api.d.ts +1 -0
- package/icons/chevronright/chevronright.d.ts +6 -0
- package/icons/chevronright/index.d.ts +5 -0
- package/icons/chevronright/public_api.d.ts +1 -0
- package/icons/chevronup/chevronup.d.ts +6 -0
- package/icons/chevronup/index.d.ts +5 -0
- package/icons/chevronup/public_api.d.ts +1 -0
- package/icons/exclamationtriangle/exclamationtriangle.d.ts +9 -0
- package/icons/exclamationtriangle/index.d.ts +5 -0
- package/icons/exclamationtriangle/public_api.d.ts +1 -0
- package/icons/eye/eye.d.ts +6 -0
- package/icons/eye/index.d.ts +5 -0
- package/icons/eye/public_api.d.ts +1 -0
- package/icons/eyeslash/eyeslash.d.ts +8 -0
- package/icons/eyeslash/index.d.ts +5 -0
- package/icons/eyeslash/public_api.d.ts +1 -0
- package/icons/filter/filter.d.ts +8 -0
- package/icons/filter/index.d.ts +5 -0
- package/icons/filter/public_api.d.ts +1 -0
- package/icons/filterslash/filterslash.d.ts +8 -0
- package/icons/filterslash/index.d.ts +5 -0
- package/icons/filterslash/public_api.d.ts +1 -0
- package/icons/home/home.d.ts +8 -0
- package/icons/home/index.d.ts +5 -0
- package/icons/home/public_api.d.ts +1 -0
- package/icons/infocircle/index.d.ts +5 -0
- package/icons/infocircle/infocircle.d.ts +8 -0
- package/icons/infocircle/public_api.d.ts +1 -0
- package/icons/minus/index.d.ts +5 -0
- package/icons/minus/minus.d.ts +6 -0
- package/icons/minus/public_api.d.ts +1 -0
- package/icons/pencil/index.d.ts +5 -0
- package/icons/pencil/pencil.d.ts +8 -0
- package/icons/pencil/public_api.d.ts +1 -0
- package/icons/plus/index.d.ts +5 -0
- package/icons/plus/plus.d.ts +8 -0
- package/icons/plus/public_api.d.ts +1 -0
- package/icons/refresh/index.d.ts +5 -0
- package/icons/refresh/public_api.d.ts +1 -0
- package/icons/refresh/refresh.d.ts +8 -0
- package/icons/search/index.d.ts +5 -0
- package/icons/search/public_api.d.ts +1 -0
- package/icons/search/search.d.ts +8 -0
- package/icons/searchminus/index.d.ts +5 -0
- package/icons/searchminus/public_api.d.ts +1 -0
- package/icons/searchminus/searchminus.d.ts +8 -0
- package/icons/searchplus/index.d.ts +5 -0
- package/icons/searchplus/public_api.d.ts +1 -0
- package/icons/searchplus/searchplus.d.ts +8 -0
- package/icons/sortalt/index.d.ts +5 -0
- package/icons/sortalt/public_api.d.ts +1 -0
- package/icons/sortalt/sortalt.d.ts +8 -0
- package/icons/sortamountdown/index.d.ts +5 -0
- package/icons/sortamountdown/public_api.d.ts +1 -0
- package/icons/sortamountdown/sortamountdown.d.ts +8 -0
- package/icons/sortamountupalt/index.d.ts +5 -0
- package/icons/sortamountupalt/public_api.d.ts +1 -0
- package/icons/sortamountupalt/sortamountupalt.d.ts +8 -0
- package/icons/spinner/index.d.ts +5 -0
- package/icons/spinner/public_api.d.ts +1 -0
- package/icons/spinner/spinner.d.ts +8 -0
- package/icons/star/index.d.ts +5 -0
- package/icons/star/public_api.d.ts +1 -0
- package/icons/star/star.d.ts +8 -0
- package/icons/starfill/index.d.ts +5 -0
- package/icons/starfill/public_api.d.ts +1 -0
- package/icons/starfill/starfill.d.ts +8 -0
- package/icons/thlarge/index.d.ts +5 -0
- package/icons/thlarge/public_api.d.ts +1 -0
- package/icons/thlarge/thlarge.d.ts +8 -0
- package/icons/times/index.d.ts +5 -0
- package/icons/times/public_api.d.ts +1 -0
- package/icons/times/times.d.ts +6 -0
- package/icons/timescircle/index.d.ts +5 -0
- package/icons/timescircle/public_api.d.ts +1 -0
- package/icons/timescircle/timescircle.d.ts +8 -0
- package/icons/trash/index.d.ts +5 -0
- package/icons/trash/public_api.d.ts +1 -0
- package/icons/trash/trash.d.ts +8 -0
- package/icons/undo/index.d.ts +5 -0
- package/icons/undo/public_api.d.ts +1 -0
- package/icons/undo/undo.d.ts +8 -0
- package/icons/upload/index.d.ts +5 -0
- package/icons/upload/public_api.d.ts +1 -0
- package/icons/upload/upload.d.ts +8 -0
- package/icons/windowmaximize/index.d.ts +5 -0
- package/icons/windowmaximize/public_api.d.ts +1 -0
- package/icons/windowmaximize/windowmaximize.d.ts +8 -0
- package/icons/windowminimize/index.d.ts +5 -0
- package/icons/windowminimize/public_api.d.ts +1 -0
- package/icons/windowminimize/windowminimize.d.ts +8 -0
- package/image/image.d.ts +188 -0
- package/image/image.interface.d.ts +31 -0
- package/image/image.module.d.ts +8 -0
- package/image/index.d.ts +5 -0
- package/image/public_api.d.ts +3 -0
- package/index.d.ts +5 -0
- package/inplace/index.d.ts +5 -0
- package/inplace/inplace.d.ts +109 -0
- package/inplace/inplace.interface.d.ts +19 -0
- package/inplace/public_api.d.ts +2 -0
- package/inputgroup/index.d.ts +5 -0
- package/inputgroup/inputgroup.d.ts +28 -0
- package/inputgroup/inputgroup.module.d.ts +15 -0
- package/inputgroup/public_api.d.ts +2 -0
- package/inputgroupaddon/index.d.ts +5 -0
- package/inputgroupaddon/inputgroupaddon.d.ts +21 -0
- package/inputgroupaddon/inputgroupaddon.module.d.ts +14 -0
- package/inputgroupaddon/public_api.d.ts +2 -0
- package/inputicon/index.d.ts +5 -0
- package/inputicon/inputicon.d.ts +21 -0
- package/inputicon/public_api.d.ts +1 -0
- package/inputmask/index.d.ts +5 -0
- package/inputmask/inputmask.d.ts +273 -0
- package/inputmask/inputmask.interface.d.ts +19 -0
- package/inputmask/public_api.d.ts +2 -0
- package/inputnumber/index.d.ts +5 -0
- package/inputnumber/inputnumber.d.ts +392 -0
- package/inputnumber/inputnumber.interface.d.ts +38 -0
- package/inputnumber/inputnumber.module.d.ts +8 -0
- package/inputnumber/public_api.d.ts +3 -0
- package/inputotp/index.d.ts +5 -0
- package/inputotp/inputotp.d.ts +123 -0
- package/inputotp/inputotp.interface.d.ts +65 -0
- package/inputotp/public_api.d.ts +2 -0
- package/inputswitch/index.d.ts +5 -0
- package/inputswitch/inputswitch.d.ts +106 -0
- package/inputswitch/inputswitch.interface.d.ts +15 -0
- package/inputswitch/public_api.d.ts +2 -0
- package/inputtext/index.d.ts +5 -0
- package/inputtext/inputtext.component.d.ts +25 -0
- package/inputtext/inputtext.directive.d.ts +20 -0
- package/inputtext/inputtext.module.d.ts +10 -0
- package/inputtext/public_api.d.ts +3 -0
- package/inputtextarea/index.d.ts +5 -0
- package/inputtextarea/inputtextarea.d.ts +53 -0
- package/inputtextarea/public_api.d.ts +1 -0
- package/keyfilter/index.d.ts +5 -0
- package/keyfilter/keyfilter.d.ts +58 -0
- package/keyfilter/keyfilter.interface.d.ts +5 -0
- package/keyfilter/public_api.d.ts +2 -0
- package/knob/index.d.ts +5 -0
- package/knob/knob.d.ts +178 -0
- package/knob/public_api.d.ts +1 -0
- package/listbox/index.d.ts +5 -0
- package/listbox/listbox.d.ts +463 -0
- package/listbox/listbox.interface.d.ts +156 -0
- package/listbox/public_api.d.ts +2 -0
- package/logo/index.d.ts +5 -0
- package/logo/logo.d.ts +11 -0
- package/logo/logo.module.d.ts +7 -0
- package/logo/public_api.d.ts +2 -0
- package/megamenu/index.d.ts +5 -0
- package/megamenu/megamenu.d.ts +198 -0
- package/megamenu/megamenu.interface.d.ts +31 -0
- package/megamenu/public_api.d.ts +2 -0
- package/menu/index.d.ts +5 -0
- package/menu/menu.d.ts +220 -0
- package/menu/public_api.d.ts +1 -0
- package/menubar/index.d.ts +5 -0
- package/menubar/menubar.d.ts +248 -0
- package/menubar/menubar.interface.d.ts +40 -0
- package/menubar/public_api.d.ts +2 -0
- package/message/index.d.ts +5 -0
- package/message/message.d.ts +52 -0
- package/message/public_api.d.ts +1 -0
- package/messages/index.d.ts +5 -0
- package/messages/messages.d.ts +115 -0
- package/messages/messages.interface.d.ts +18 -0
- package/messages/messages.module.d.ts +8 -0
- package/messages/public_api.d.ts +3 -0
- package/metergroup/index.d.ts +5 -0
- package/metergroup/metergroup.d.ts +101 -0
- package/metergroup/metergroup.interface.d.ts +122 -0
- package/metergroup/public_api.d.ts +2 -0
- package/multiselect/index.d.ts +5 -0
- package/multiselect/multiselect.d.ts +724 -0
- package/multiselect/multiselect.interface.d.ts +247 -0
- package/multiselect/public_api.d.ts +2 -0
- package/navigation/index.d.ts +5 -0
- package/navigation/navigation.d.ts +54 -0
- package/navigation/navigation.interface.d.ts +23 -0
- package/navigation/navigation.module.d.ts +7 -0
- package/navigation/public_api.d.ts +2 -0
- package/orderlist/index.d.ts +5 -0
- package/orderlist/orderlist.d.ts +270 -0
- package/orderlist/orderlist.interface.d.ts +110 -0
- package/orderlist/public_api.d.ts +2 -0
- package/organizationchart/index.d.ts +5 -0
- package/organizationchart/organizationchart.d.ts +132 -0
- package/organizationchart/organizationchart.interface.d.ts +59 -0
- package/organizationchart/public_api.d.ts +2 -0
- package/overlay/index.d.ts +5 -0
- package/overlay/overlay.d.ts +238 -0
- package/overlay/overlay.module.d.ts +8 -0
- package/overlay/public_api.d.ts +2 -0
- package/overlaypanel/index.d.ts +5 -0
- package/overlaypanel/overlaypanel.d.ts +162 -0
- package/overlaypanel/overlaypanel.module.d.ts +8 -0
- package/overlaypanel/public_api.d.ts +2 -0
- package/package.json +1033 -0
- package/paginator/index.d.ts +5 -0
- package/paginator/paginator.d.ts +192 -0
- package/paginator/paginator.interface.d.ts +37 -0
- package/paginator/paginator.module.d.ts +17 -0
- package/paginator/public_api.d.ts +3 -0
- package/panel/index.d.ts +5 -0
- package/panel/panel.d.ts +126 -0
- package/panel/panel.interface.d.ts +58 -0
- package/panel/public_api.d.ts +2 -0
- package/panelmenu/index.d.ts +5 -0
- package/panelmenu/panelmenu.d.ts +225 -0
- package/panelmenu/panelmenu.interface.d.ts +23 -0
- package/panelmenu/public_api.d.ts +2 -0
- package/password/index.d.ts +5 -0
- package/password/password.d.ts +342 -0
- package/password/public_api.d.ts +1 -0
- package/picklist/index.d.ts +5 -0
- package/picklist/picklist.d.ts +453 -0
- package/picklist/picklist.interface.d.ts +242 -0
- package/picklist/public_api.d.ts +2 -0
- package/progressbar/index.d.ts +5 -0
- package/progressbar/progressbar.d.ts +54 -0
- package/progressbar/progressbar.module.d.ts +8 -0
- package/progressbar/public_api.d.ts +2 -0
- package/progressspinner/index.d.ts +5 -0
- package/progressspinner/progressspinner.d.ts +50 -0
- package/progressspinner/progressspinner.module.d.ts +8 -0
- package/progressspinner/public_api.d.ts +2 -0
- package/public_api.d.ts +2 -0
- package/radiobutton/index.d.ts +5 -0
- package/radiobutton/public_api.d.ts +3 -0
- package/radiobutton/radiobutton.d.ts +145 -0
- package/radiobutton/radiobutton.interface.d.ts +15 -0
- package/radiobutton/radiobutton.module.d.ts +7 -0
- package/rating/index.d.ts +5 -0
- package/rating/public_api.d.ts +2 -0
- package/rating/rating.d.ts +146 -0
- package/rating/rating.interface.d.ts +34 -0
- package/resources/cax.min.scss +1 -0
- package/resources/cax.scss +784 -0
- package/resources/components/accordion/accordion.scss +44 -0
- package/resources/components/autocomplete/autocomplete.css +104 -0
- package/resources/components/avatar/avatar.scss +33 -0
- package/resources/components/avatargroup/avatargroup.css +10 -0
- package/resources/components/badge/badge.scss +34 -0
- package/resources/components/blockui/blockui.css +26 -0
- package/resources/components/breadcrumb/breadcrumb.scss +33 -0
- package/resources/components/button/button.scss +117 -0
- package/resources/components/calendar/calendar.scss +177 -0
- package/resources/components/card/card.scss +50 -0
- package/resources/components/carousel/carousel.css +71 -0
- package/resources/components/cascadeselect/cascadeselect.scss +99 -0
- package/resources/components/checkbox/checkbox.scss +30 -0
- package/resources/components/chip/chip.scss +63 -0
- package/resources/components/chips/chips.scss +156 -0
- package/resources/components/colorpicker/colorpicker-images.css +7 -0
- package/resources/components/colorpicker/colorpicker.css +83 -0
- package/resources/components/colorpicker/images/color.png +0 -0
- package/resources/components/colorpicker/images/hue.png +0 -0
- package/resources/components/common/common.scss +182 -0
- package/resources/components/confirmpopup/confirmpopup.css +53 -0
- package/resources/components/contextmenu/contextmenu.css +42 -0
- package/resources/components/dataview/dataview.css +13 -0
- package/resources/components/dialog/dialog.scss +164 -0
- package/resources/components/divider/divider.scss +86 -0
- package/resources/components/dock/dock.css +107 -0
- package/resources/components/dropdown/dropdown.scss +92 -0
- package/resources/components/editor/editor.css +4 -0
- package/resources/components/fieldset/fieldset.css +30 -0
- package/resources/components/fileupload/fileupload.css +47 -0
- package/resources/components/galleria/galleria.css +281 -0
- package/resources/components/iconfield/iconfield.css +5 -0
- package/resources/components/image/image.scss +97 -0
- package/resources/components/inplace/inplace.css +19 -0
- package/resources/components/inputicon/inputicon.css +6 -0
- package/resources/components/inputmask/inputmask.css +12 -0
- package/resources/components/inputnumber/inputnumber.scss +116 -0
- package/resources/components/inputotp/inputotp.css +2 -0
- package/resources/components/inputswitch/inputswitch.css +23 -0
- package/resources/components/inputtext/inputtext.scss +150 -0
- package/resources/components/inputtextarea/inputtextarea.css +10 -0
- package/resources/components/knob/knob.css +20 -0
- package/resources/components/listbox/listbox.css +40 -0
- package/resources/components/logo/logo.scss +0 -0
- package/resources/components/megamenu/megamenu.css +108 -0
- package/resources/components/menu/menu.css +30 -0
- package/resources/components/menubar/menubar.css +81 -0
- package/resources/components/message/message.css +17 -0
- package/resources/components/messages/messages.scss +55 -0
- package/resources/components/multiselect/multiselect.css +116 -0
- package/resources/components/navigation/navigation.scss +217 -0
- package/resources/components/orderlist/orderlist.css +78 -0
- package/resources/components/organizationchart/organizationchart.css +62 -0
- package/resources/components/overlay/overlay.scss +80 -0
- package/resources/components/overlaypanel/overlaypanel.scss +63 -0
- package/resources/components/paginator/paginator.scss +37 -0
- package/resources/components/panel/panel.css +29 -0
- package/resources/components/panelmenu/panelmenu.css +45 -0
- package/resources/components/password/images/password-meter.png +0 -0
- package/resources/components/password/password.css +54 -0
- package/resources/components/picklist/picklist.css +60 -0
- package/resources/components/progressbar/progressbar.scss +122 -0
- package/resources/components/progressspinner/progressspinner.scss +94 -0
- package/resources/components/radiobutton/radiobutton.scss +38 -0
- package/resources/components/rating/rating.css +15 -0
- package/resources/components/ripple/ripple.scss +29 -0
- package/resources/components/scroller/scroller.scss +58 -0
- package/resources/components/scrollpanel/scrollpanel.css +50 -0
- package/resources/components/scrolltop/scrolltop.css +18 -0
- package/resources/components/sidebar/sidebar.scss +114 -0
- package/resources/components/skeleton/skeleton.scss +25 -0
- package/resources/components/slidemenu/slidemenu.css +100 -0
- package/resources/components/slider/slider.css +41 -0
- package/resources/components/speeddial/speeddial.scss +122 -0
- package/resources/components/spinner/spinner.css +63 -0
- package/resources/components/splitbutton/splitbutton.scss +48 -0
- package/resources/components/splitter/splitter.css +70 -0
- package/resources/components/stepper/stepper.css +9 -0
- package/resources/components/steps/steps.css +49 -0
- package/resources/components/table/table.scss +249 -0
- package/resources/components/tabmenu/tabmenu.css +80 -0
- package/resources/components/tabview/tabview.scss +163 -0
- package/resources/components/tag/tag.scss +17 -0
- package/resources/components/terminal/terminal.css +24 -0
- package/resources/components/tieredmenu/tieredmenu.scss +55 -0
- package/resources/components/timeline/timeline.css +114 -0
- package/resources/components/toast/toast.scss +83 -0
- package/resources/components/toggleswitch/toggleswitch.scss +30 -0
- package/resources/components/toolbar/toolbar.css +19 -0
- package/resources/components/tooltip/tooltip.scss +124 -0
- package/resources/components/tree/images/line.gif +0 -0
- package/resources/components/tree/tree.scss +158 -0
- package/resources/components/treeselect/treeselect.css +98 -0
- package/resources/components/treetable/treetable.css +205 -0
- package/resources/images/color.png +0 -0
- package/resources/images/hue.png +0 -0
- package/resources/images/line.gif +0 -0
- package/resources/images/password-meter.png +0 -0
- package/resources/logo/dataX-dark.svg +12 -0
- package/resources/logo/dataX-icon-dark.svg +6 -0
- package/resources/logo/dataX-icon.svg +6 -0
- package/resources/logo/dataX.svg +12 -0
- package/resources/logo/usercard.png +0 -0
- package/resources/themes/cax-theme.scss +9272 -0
- package/ripple/index.d.ts +5 -0
- package/ripple/public_api.d.ts +2 -0
- package/ripple/ripple.d.ts +30 -0
- package/ripple/ripple.module.d.ts +7 -0
- package/scroller/index.d.ts +5 -0
- package/scroller/public_api.d.ts +3 -0
- package/scroller/scroller.d.ts +343 -0
- package/scroller/scroller.interface.d.ts +177 -0
- package/scroller/scroller.module.d.ts +8 -0
- package/scrollpanel/index.d.ts +5 -0
- package/scrollpanel/public_api.d.ts +2 -0
- package/scrollpanel/scrollpanel.d.ts +103 -0
- package/scrollpanel/scrollpanel.interface.d.ts +11 -0
- package/scrolltop/index.d.ts +5 -0
- package/scrolltop/public_api.d.ts +2 -0
- package/scrolltop/scrolltop.d.ts +97 -0
- package/scrolltop/scrolltop.interface.d.ts +18 -0
- package/selectbutton/index.d.ts +5 -0
- package/selectbutton/public_api.d.ts +2 -0
- package/selectbutton/selectbutton.d.ts +136 -0
- package/selectbutton/selectbutton.interface.d.ts +45 -0
- package/sidebar/index.d.ts +5 -0
- package/sidebar/public_api.d.ts +3 -0
- package/sidebar/sidebar.d.ts +158 -0
- package/sidebar/sidebar.interface.d.ts +27 -0
- package/sidebar/sidebar.module.d.ts +12 -0
- package/skeleton/index.d.ts +5 -0
- package/skeleton/public_api.d.ts +2 -0
- package/skeleton/skeleton.d.ts +61 -0
- package/skeleton/skeleton.module.d.ts +8 -0
- package/slidemenu/index.d.ts +5 -0
- package/slidemenu/public_api.d.ts +2 -0
- package/slidemenu/slidemenu.d.ts +322 -0
- package/slidemenu/slidemenu.interface.d.ts +15 -0
- package/slider/index.d.ts +5 -0
- package/slider/public_api.d.ts +2 -0
- package/slider/slider.d.ts +174 -0
- package/slider/slider.interface.d.ts +38 -0
- package/speeddial/index.d.ts +5 -0
- package/speeddial/public_api.d.ts +3 -0
- package/speeddial/speeddial.d.ts +277 -0
- package/speeddial/speeddial.interface.d.ts +28 -0
- package/speeddial/speeddial.module.d.ts +14 -0
- package/spinner/index.d.ts +5 -0
- package/spinner/public_api.d.ts +1 -0
- package/spinner/spinner.d.ts +90 -0
- package/splitbutton/index.d.ts +5 -0
- package/splitbutton/public_api.d.ts +3 -0
- package/splitbutton/splitbutton.d.ts +221 -0
- package/splitbutton/splitbutton.interface.d.ts +30 -0
- package/splitbutton/splitbutton.module.d.ts +12 -0
- package/splitter/index.d.ts +5 -0
- package/splitter/public_api.d.ts +2 -0
- package/splitter/splitter.d.ts +164 -0
- package/splitter/splitter.interface.d.ts +34 -0
- package/stepper/index.d.ts +5 -0
- package/stepper/public_api.d.ts +2 -0
- package/stepper/stepper.d.ts +117 -0
- package/stepper/stepper.interface.d.ts +26 -0
- package/steps/index.d.ts +5 -0
- package/steps/public_api.d.ts +1 -0
- package/steps/steps.d.ts +85 -0
- package/styleclass/index.d.ts +5 -0
- package/styleclass/public_api.d.ts +1 -0
- package/styleclass/styleclass.d.ts +108 -0
- package/table/columnfilter.interface.d.ts +247 -0
- package/table/components/cell-editor/cell-editor.d.ts +20 -0
- package/table/components/column-filter/column-filter.d.ts +256 -0
- package/table/components/column-filter-form-element/column-filter-form-element.d.ts +37 -0
- package/table/components/sort-icon/sort-icon.d.ts +21 -0
- package/table/components/table-body/table-body.d.ts +36 -0
- package/table/components/table-checkbox/table-checkbox.d.ts +31 -0
- package/table/components/table-header-checkbox/table-header-checkbox.d.ts +29 -0
- package/table/components/table-radio-button/table-radio-button.d.ts +29 -0
- package/table/directives/cancel-editable-row.directive.d.ts +11 -0
- package/table/directives/content-menu-row.directive.d.ts +22 -0
- package/table/directives/editable-column.directive.d.ts +40 -0
- package/table/directives/editable-row.directive.d.ts +12 -0
- package/table/directives/frozen-column.directive.d.ts +16 -0
- package/table/directives/init-editable-row.directive.d.ts +11 -0
- package/table/directives/reorderable-column.directive.d.ts +32 -0
- package/table/directives/reorderable-row-handle.directive.d.ts +9 -0
- package/table/directives/reorderable-row.directive.d.ts +34 -0
- package/table/directives/resizable-column.directive.d.ts +35 -0
- package/table/directives/row-group-header.directive.d.ts +9 -0
- package/table/directives/row-toggler.directive.d.ts +13 -0
- package/table/directives/save-editable-row.directive.d.ts +11 -0
- package/table/directives/selectable-row-double-click.directive.d.ts +22 -0
- package/table/directives/selectable-row.directive.d.ts +37 -0
- package/table/directives/sortable-column.directive.d.ts +24 -0
- package/table/index.d.ts +5 -0
- package/table/public_api.d.ts +28 -0
- package/table/table.d.ts +859 -0
- package/table/table.interface.d.ts +623 -0
- package/table/table.module.d.ts +32 -0
- package/table/table.service.d.ts +24 -0
- package/tabmenu/index.d.ts +5 -0
- package/tabmenu/public_api.d.ts +2 -0
- package/tabmenu/tabmenu.d.ts +126 -0
- package/tabmenu/tabmenu.interface.d.ts +32 -0
- package/tabview/index.d.ts +5 -0
- package/tabview/public_api.d.ts +3 -0
- package/tabview/tabview.d.ts +281 -0
- package/tabview/tabview.interface.d.ts +49 -0
- package/tabview/tabview.module.d.ts +14 -0
- package/tag/index.d.ts +5 -0
- package/tag/public_api.d.ts +3 -0
- package/tag/tag.d.ts +61 -0
- package/tag/tag.interface.d.ts +11 -0
- package/tag/tag.module.d.ts +9 -0
- package/terminal/index.d.ts +5 -0
- package/terminal/public_api.d.ts +2 -0
- package/terminal/terminal.d.ts +56 -0
- package/terminal/terminalservice.d.ts +11 -0
- package/tieredmenu/index.d.ts +5 -0
- package/tieredmenu/public_api.d.ts +3 -0
- package/tieredmenu/tieredmenu.d.ts +266 -0
- package/tieredmenu/tieredmenu.interface.d.ts +27 -0
- package/tieredmenu/tiredmenu.module.d.ts +13 -0
- package/timeline/index.d.ts +5 -0
- package/timeline/public_api.d.ts +2 -0
- package/timeline/timeline.d.ts +54 -0
- package/timeline/timeline.interface.d.ts +43 -0
- package/toast/index.d.ts +5 -0
- package/toast/public_api.d.ts +3 -0
- package/toast/toast.d.ts +142 -0
- package/toast/toast.interface.d.ts +52 -0
- package/toast/toast.module.d.ts +9 -0
- package/toast/toastitem.d.ts +37 -0
- package/togglebutton/index.d.ts +5 -0
- package/togglebutton/public_api.d.ts +2 -0
- package/togglebutton/togglebutton.d.ts +115 -0
- package/togglebutton/togglebutton.interface.d.ts +34 -0
- package/toggleswitch/index.d.ts +5 -0
- package/toggleswitch/public_api.d.ts +2 -0
- package/toggleswitch/toggleswitch.d.ts +13 -0
- package/toggleswitch/toggleswitch.module.d.ts +9 -0
- package/toolbar/index.d.ts +5 -0
- package/toolbar/public_api.d.ts +2 -0
- package/toolbar/toolbar.d.ts +43 -0
- package/toolbar/toolbar.interface.d.ts +19 -0
- package/tooltip/index.d.ts +5 -0
- package/tooltip/public_api.d.ts +2 -0
- package/tooltip/tooltip.d.ts +208 -0
- package/tooltip/tooltip.module.d.ts +8 -0
- package/tree/index.d.ts +5 -0
- package/tree/public_api.d.ts +3 -0
- package/tree/tree.d.ts +449 -0
- package/tree/tree.interface.d.ts +193 -0
- package/tree/tree.module.d.ts +19 -0
- package/treeselect/index.d.ts +5 -0
- package/treeselect/public_api.d.ts +2 -0
- package/treeselect/treeselect.d.ts +405 -0
- package/treeselect/treeselect.interface.d.ts +108 -0
- package/treetable/index.d.ts +5 -0
- package/treetable/public_api.d.ts +2 -0
- package/treetable/treetable.d.ts +988 -0
- package/treetable/treetable.interface.d.ts +472 -0
- package/tristatecheckbox/index.d.ts +5 -0
- package/tristatecheckbox/public_api.d.ts +3 -0
- package/tristatecheckbox/tristatecheckbox.d.ts +117 -0
- package/tristatecheckbox/tristatecheckbox.interface.d.ts +30 -0
- package/tristatecheckbox/tristatecheckbox.module.d.ts +8 -0
- package/ts-helpers/index.d.ts +5 -0
- package/ts-helpers/public_api.d.ts +1 -0
- package/ts-helpers/ts-helpers.d.ts +4 -0
- package/utils/index.d.ts +5 -0
- package/utils/objectutils.d.ts +24 -0
- package/utils/public_api.d.ts +4 -0
- package/utils/uniquecomponentid.d.ts +2 -0
- package/utils/zindexutils.d.ts +7 -0
- package/virtualscroller/index.d.ts +5 -0
- package/virtualscroller/public_api.d.ts +2 -0
- package/virtualscroller/virtualscroller.d.ts +89 -0
- package/virtualscroller/virtualscroller.interface.d.ts +72 -0
|
@@ -0,0 +1,2721 @@
|
|
|
1
|
+
import { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';
|
|
2
|
+
import { booleanAttribute, ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, Inject, Input, numberAttribute, Output, PLATFORM_ID, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
3
|
+
import { FilterMatchMode, FilterOperator, CaxTemplate } from 'cax-design-system/api';
|
|
4
|
+
import { DomHandler } from 'cax-design-system/dom';
|
|
5
|
+
import { ScrollerModule } from 'cax-design-system/scroller';
|
|
6
|
+
import { ObjectUtils, UniqueComponentId } from 'cax-design-system/utils';
|
|
7
|
+
import { ArrowDownIcon } from 'cax-design-system/icons/arrowdown';
|
|
8
|
+
import { ArrowUpIcon } from 'cax-design-system/icons/arrowup';
|
|
9
|
+
import { SpinnerIcon } from 'cax-design-system/icons/spinner';
|
|
10
|
+
import { PaginatorModule } from 'cax-design-system/paginator';
|
|
11
|
+
import { TableBody } from './components/table-body/table-body';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
import * as i1 from "./table.service";
|
|
14
|
+
import * as i2 from "cax-design-system/api";
|
|
15
|
+
import * as i3 from "@angular/platform-browser";
|
|
16
|
+
import * as i4 from "@angular/common";
|
|
17
|
+
import * as i5 from "cax-design-system/paginator";
|
|
18
|
+
import * as i6 from "cax-design-system/scroller";
|
|
19
|
+
/**
|
|
20
|
+
* Table displays data in tabular format.
|
|
21
|
+
* @group Components
|
|
22
|
+
*/
|
|
23
|
+
export class Table {
|
|
24
|
+
document;
|
|
25
|
+
platformId;
|
|
26
|
+
renderer;
|
|
27
|
+
el;
|
|
28
|
+
zone;
|
|
29
|
+
tableService;
|
|
30
|
+
cd;
|
|
31
|
+
filterService;
|
|
32
|
+
overlayService;
|
|
33
|
+
config;
|
|
34
|
+
domSanitizer;
|
|
35
|
+
/**
|
|
36
|
+
* An array of objects to represent dynamic columns that are frozen.
|
|
37
|
+
* @group Props
|
|
38
|
+
*/
|
|
39
|
+
frozenColumns;
|
|
40
|
+
/**
|
|
41
|
+
* An array of objects to display as frozen.
|
|
42
|
+
* @group Props
|
|
43
|
+
*/
|
|
44
|
+
frozenValue;
|
|
45
|
+
/**
|
|
46
|
+
* Inline style of the component.
|
|
47
|
+
* @group Props
|
|
48
|
+
*/
|
|
49
|
+
style;
|
|
50
|
+
/**
|
|
51
|
+
* Style class of the component.
|
|
52
|
+
* @group Props
|
|
53
|
+
*/
|
|
54
|
+
styleClass;
|
|
55
|
+
/**
|
|
56
|
+
* Inline style of the table.
|
|
57
|
+
* @group Props
|
|
58
|
+
*/
|
|
59
|
+
tableStyle;
|
|
60
|
+
/**
|
|
61
|
+
* Style class of the table.
|
|
62
|
+
* @group Props
|
|
63
|
+
*/
|
|
64
|
+
tableStyleClass;
|
|
65
|
+
/**
|
|
66
|
+
* When specified as true, enables the pagination.
|
|
67
|
+
* @group Props
|
|
68
|
+
*/
|
|
69
|
+
paginator;
|
|
70
|
+
/**
|
|
71
|
+
* Number of page links to display in paginator.
|
|
72
|
+
* @group Props
|
|
73
|
+
*/
|
|
74
|
+
pageLinks = 5;
|
|
75
|
+
/**
|
|
76
|
+
* Array of integer/object values to display inside rows per page dropdown of paginator
|
|
77
|
+
* @group Props
|
|
78
|
+
*/
|
|
79
|
+
rowsPerPageOptions;
|
|
80
|
+
/**
|
|
81
|
+
* Whether to show it even there is only one page.
|
|
82
|
+
* @group Props
|
|
83
|
+
*/
|
|
84
|
+
alwaysShowPaginator = true;
|
|
85
|
+
/**
|
|
86
|
+
* Position of the paginator, options are "top", "bottom" or "both".
|
|
87
|
+
* @group Props
|
|
88
|
+
*/
|
|
89
|
+
paginatorPosition = 'bottom';
|
|
90
|
+
/**
|
|
91
|
+
* Custom style class for paginator
|
|
92
|
+
* @group Props
|
|
93
|
+
*/
|
|
94
|
+
paginatorStyleClass;
|
|
95
|
+
/**
|
|
96
|
+
* Target element to attach the paginator dropdown overlay, valid values are "body" or a local ng-template variable of another element (note: use binding with brackets for template variables, e.g. [appendTo]="mydiv" for a div element having #mydiv as variable name).
|
|
97
|
+
* @group Props
|
|
98
|
+
*/
|
|
99
|
+
paginatorDropdownAppendTo;
|
|
100
|
+
/**
|
|
101
|
+
* Paginator dropdown height of the viewport in pixels, a scrollbar is defined if height of list exceeds this value.
|
|
102
|
+
* @group Props
|
|
103
|
+
*/
|
|
104
|
+
paginatorDropdownScrollHeight = '200px';
|
|
105
|
+
/**
|
|
106
|
+
* Template of the current page report element. Available placeholders are {currentPage},{totalPages},{rows},{first},{last} and {totalRecords}
|
|
107
|
+
* @group Props
|
|
108
|
+
*/
|
|
109
|
+
currentPageReportTemplate = '{currentPage} of {totalPages}';
|
|
110
|
+
/**
|
|
111
|
+
* Whether to display current page report.
|
|
112
|
+
* @group Props
|
|
113
|
+
*/
|
|
114
|
+
showCurrentPageReport;
|
|
115
|
+
/**
|
|
116
|
+
* Whether to display a dropdown to navigate to any page.
|
|
117
|
+
* @group Props
|
|
118
|
+
*/
|
|
119
|
+
showJumpToPageDropdown;
|
|
120
|
+
/**
|
|
121
|
+
* Whether to display a input to navigate to any page.
|
|
122
|
+
* @group Props
|
|
123
|
+
*/
|
|
124
|
+
showJumpToPageInput;
|
|
125
|
+
/**
|
|
126
|
+
* When enabled, icons are displayed on paginator to go first and last page.
|
|
127
|
+
* @group Props
|
|
128
|
+
*/
|
|
129
|
+
showFirstLastIcon = true;
|
|
130
|
+
/**
|
|
131
|
+
* Whether to show page links.
|
|
132
|
+
* @group Props
|
|
133
|
+
*/
|
|
134
|
+
showPageLinks = true;
|
|
135
|
+
/**
|
|
136
|
+
* Sort order to use when an unsorted column gets sorted by user interaction.
|
|
137
|
+
* @group Props
|
|
138
|
+
*/
|
|
139
|
+
defaultSortOrder = 1;
|
|
140
|
+
/**
|
|
141
|
+
* Defines whether sorting works on single column or on multiple columns.
|
|
142
|
+
* @group Props
|
|
143
|
+
*/
|
|
144
|
+
sortMode = 'single';
|
|
145
|
+
/**
|
|
146
|
+
* When true, resets paginator to first page after sorting. Available only when sortMode is set to single.
|
|
147
|
+
* @group Props
|
|
148
|
+
*/
|
|
149
|
+
resetPageOnSort = true;
|
|
150
|
+
/**
|
|
151
|
+
* Specifies the selection mode, valid values are "single" and "multiple".
|
|
152
|
+
* @group Props
|
|
153
|
+
*/
|
|
154
|
+
selectionMode;
|
|
155
|
+
/**
|
|
156
|
+
* When enabled with paginator and checkbox selection mode, the select all checkbox in the header will select all rows on the current page.
|
|
157
|
+
* @group Props
|
|
158
|
+
*/
|
|
159
|
+
selectionPageOnly;
|
|
160
|
+
/**
|
|
161
|
+
* Selected row with a context menu.
|
|
162
|
+
* @group Props
|
|
163
|
+
*/
|
|
164
|
+
contextMenuSelection;
|
|
165
|
+
/**
|
|
166
|
+
* Callback to invoke on context menu selection change.
|
|
167
|
+
* @param {*} object - row data.
|
|
168
|
+
* @group Emits
|
|
169
|
+
*/
|
|
170
|
+
contextMenuSelectionChange = new EventEmitter();
|
|
171
|
+
/**
|
|
172
|
+
* Defines the behavior of context menu selection, in "separate" mode context menu updates contextMenuSelection property whereas in joint mode selection property is used instead so that when row selection is enabled, both row selection and context menu selection use the same property.
|
|
173
|
+
* @group Props
|
|
174
|
+
*/
|
|
175
|
+
contextMenuSelectionMode = 'separate';
|
|
176
|
+
/**
|
|
177
|
+
* A property to uniquely identify a record in data.
|
|
178
|
+
* @group Props
|
|
179
|
+
*/
|
|
180
|
+
dataKey;
|
|
181
|
+
/**
|
|
182
|
+
* Defines whether metaKey should be considered for the selection. On touch enabled devices, metaKeySelection is turned off automatically.
|
|
183
|
+
* @group Props
|
|
184
|
+
*/
|
|
185
|
+
metaKeySelection = false;
|
|
186
|
+
/**
|
|
187
|
+
* Defines if the row is selectable.
|
|
188
|
+
* @group Props
|
|
189
|
+
*/
|
|
190
|
+
rowSelectable;
|
|
191
|
+
/**
|
|
192
|
+
* Function to optimize the dom operations by delegating to ngForTrackBy, default algorithm checks for object identity.
|
|
193
|
+
* @group Props
|
|
194
|
+
*/
|
|
195
|
+
rowTrackBy = (index, item) => item;
|
|
196
|
+
/**
|
|
197
|
+
* Defines if data is loaded and interacted with in lazy manner.
|
|
198
|
+
* @group Props
|
|
199
|
+
*/
|
|
200
|
+
lazy = false;
|
|
201
|
+
/**
|
|
202
|
+
* Whether to call lazy loading on initialization.
|
|
203
|
+
* @group Props
|
|
204
|
+
*/
|
|
205
|
+
lazyLoadOnInit = true;
|
|
206
|
+
/**
|
|
207
|
+
* Algorithm to define if a row is selected, valid values are "equals" that compares by reference and "deepEquals" that compares all fields.
|
|
208
|
+
* @group Props
|
|
209
|
+
*/
|
|
210
|
+
compareSelectionBy = 'deepEquals';
|
|
211
|
+
/**
|
|
212
|
+
* Character to use as the csv separator.
|
|
213
|
+
* @group Props
|
|
214
|
+
*/
|
|
215
|
+
csvSeparator = ',';
|
|
216
|
+
/**
|
|
217
|
+
* Name of the exported file.
|
|
218
|
+
* @group Props
|
|
219
|
+
*/
|
|
220
|
+
exportFilename = 'download';
|
|
221
|
+
/**
|
|
222
|
+
* An array of FilterMetadata objects to provide external filters.
|
|
223
|
+
* @group Props
|
|
224
|
+
*/
|
|
225
|
+
filters = {};
|
|
226
|
+
/**
|
|
227
|
+
* An array of fields as string to use in global filtering.
|
|
228
|
+
* @group Props
|
|
229
|
+
*/
|
|
230
|
+
globalFilterFields;
|
|
231
|
+
/**
|
|
232
|
+
* Delay in milliseconds before filtering the data.
|
|
233
|
+
* @group Props
|
|
234
|
+
*/
|
|
235
|
+
filterDelay = 300;
|
|
236
|
+
/**
|
|
237
|
+
* Locale to use in filtering. The default locale is the host environment's current locale.
|
|
238
|
+
* @group Props
|
|
239
|
+
*/
|
|
240
|
+
filterLocale;
|
|
241
|
+
/**
|
|
242
|
+
* Map instance to keep the expanded rows where key of the map is the data key of the row.
|
|
243
|
+
* @group Props
|
|
244
|
+
*/
|
|
245
|
+
expandedRowKeys = {};
|
|
246
|
+
/**
|
|
247
|
+
* Map instance to keep the rows being edited where key of the map is the data key of the row.
|
|
248
|
+
* @group Props
|
|
249
|
+
*/
|
|
250
|
+
editingRowKeys = {};
|
|
251
|
+
/**
|
|
252
|
+
* Whether multiple rows can be expanded at any time. Valid values are "multiple" and "single".
|
|
253
|
+
* @group Props
|
|
254
|
+
*/
|
|
255
|
+
rowExpandMode = 'multiple';
|
|
256
|
+
/**
|
|
257
|
+
* Enables scrollable tables.
|
|
258
|
+
* @group Props
|
|
259
|
+
*/
|
|
260
|
+
scrollable;
|
|
261
|
+
/**
|
|
262
|
+
* Orientation of the scrolling, options are "vertical", "horizontal" and "both".
|
|
263
|
+
* @group Props
|
|
264
|
+
* @deprecated Property is obselete since v14.2.0.
|
|
265
|
+
*/
|
|
266
|
+
scrollDirection = 'vertical';
|
|
267
|
+
/**
|
|
268
|
+
* Type of the row grouping, valid values are "subheader" and "rowspan".
|
|
269
|
+
* @group Props
|
|
270
|
+
*/
|
|
271
|
+
rowGroupMode;
|
|
272
|
+
/**
|
|
273
|
+
* Height of the scroll viewport in fixed pixels or the "flex" keyword for a dynamic size.
|
|
274
|
+
* @group Props
|
|
275
|
+
*/
|
|
276
|
+
scrollHeight;
|
|
277
|
+
/**
|
|
278
|
+
* Whether the data should be loaded on demand during scroll.
|
|
279
|
+
* @group Props
|
|
280
|
+
*/
|
|
281
|
+
virtualScroll;
|
|
282
|
+
/**
|
|
283
|
+
* Height of a row to use in calculations of virtual scrolling.
|
|
284
|
+
* @group Props
|
|
285
|
+
*/
|
|
286
|
+
virtualScrollItemSize;
|
|
287
|
+
/**
|
|
288
|
+
* Whether to use the scroller feature. The properties of scroller component can be used like an object in it.
|
|
289
|
+
* @group Props
|
|
290
|
+
*/
|
|
291
|
+
virtualScrollOptions;
|
|
292
|
+
/**
|
|
293
|
+
* Threshold in milliseconds to delay lazy loading during scrolling.
|
|
294
|
+
* @group Props
|
|
295
|
+
*/
|
|
296
|
+
virtualScrollDelay = 250;
|
|
297
|
+
/**
|
|
298
|
+
* Width of the frozen columns container.
|
|
299
|
+
* @group Props
|
|
300
|
+
*/
|
|
301
|
+
frozenWidth;
|
|
302
|
+
/**
|
|
303
|
+
* Defines if the table is responsive.
|
|
304
|
+
* @group Props
|
|
305
|
+
* @deprecated table is always responsive with scrollable behavior.
|
|
306
|
+
*/
|
|
307
|
+
get responsive() {
|
|
308
|
+
return this._responsive;
|
|
309
|
+
}
|
|
310
|
+
set responsive(val) {
|
|
311
|
+
this._responsive = val;
|
|
312
|
+
console.warn('responsive property is deprecated as table is always responsive with scrollable behavior.');
|
|
313
|
+
}
|
|
314
|
+
_responsive;
|
|
315
|
+
/**
|
|
316
|
+
* Local ng-template varilable of a ContextMenu.
|
|
317
|
+
* @group Props
|
|
318
|
+
*/
|
|
319
|
+
contextMenu;
|
|
320
|
+
/**
|
|
321
|
+
* When enabled, columns can be resized using drag and drop.
|
|
322
|
+
* @group Props
|
|
323
|
+
*/
|
|
324
|
+
resizableColumns;
|
|
325
|
+
/**
|
|
326
|
+
* Defines whether the overall table width should change on column resize, valid values are "fit" and "expand".
|
|
327
|
+
* @group Props
|
|
328
|
+
*/
|
|
329
|
+
columnResizeMode = 'fit';
|
|
330
|
+
/**
|
|
331
|
+
* When enabled, columns can be reordered using drag and drop.
|
|
332
|
+
* @group Props
|
|
333
|
+
*/
|
|
334
|
+
reorderableColumns;
|
|
335
|
+
/**
|
|
336
|
+
* Displays a loader to indicate data load is in progress.
|
|
337
|
+
* @group Props
|
|
338
|
+
*/
|
|
339
|
+
loading;
|
|
340
|
+
/**
|
|
341
|
+
* The icon to show while indicating data load is in progress.
|
|
342
|
+
* @group Props
|
|
343
|
+
*/
|
|
344
|
+
loadingIcon;
|
|
345
|
+
/**
|
|
346
|
+
* Whether to show the loading mask when loading property is true.
|
|
347
|
+
* @group Props
|
|
348
|
+
*/
|
|
349
|
+
showLoader = true;
|
|
350
|
+
/**
|
|
351
|
+
* Adds hover effect to rows without the need for selectionMode. Note that tr elements that can be hovered need to have "cax-selectable-row" class for rowHover to work.
|
|
352
|
+
* @group Props
|
|
353
|
+
*/
|
|
354
|
+
rowHover;
|
|
355
|
+
/**
|
|
356
|
+
* Whether to use the default sorting or a custom one using sortFunction.
|
|
357
|
+
* @group Props
|
|
358
|
+
*/
|
|
359
|
+
customSort;
|
|
360
|
+
/**
|
|
361
|
+
* Whether to use the initial sort badge or not.
|
|
362
|
+
* @group Props
|
|
363
|
+
*/
|
|
364
|
+
showInitialSortBadge = true;
|
|
365
|
+
/**
|
|
366
|
+
* Whether the cell widths scale according to their content or not. Deprecated: Table layout is always "auto".
|
|
367
|
+
* @group Props
|
|
368
|
+
*/
|
|
369
|
+
autoLayout;
|
|
370
|
+
/**
|
|
371
|
+
* Export function.
|
|
372
|
+
* @group Props
|
|
373
|
+
*/
|
|
374
|
+
exportFunction;
|
|
375
|
+
/**
|
|
376
|
+
* Custom export header of the column to be exported as CSV.
|
|
377
|
+
* @group Props
|
|
378
|
+
*/
|
|
379
|
+
exportHeader;
|
|
380
|
+
/**
|
|
381
|
+
* Unique identifier of a stateful table to use in state storage.
|
|
382
|
+
* @group Props
|
|
383
|
+
*/
|
|
384
|
+
stateKey;
|
|
385
|
+
/**
|
|
386
|
+
* Defines where a stateful table keeps its state, valid values are "session" for sessionStorage and "local" for localStorage.
|
|
387
|
+
* @group Props
|
|
388
|
+
*/
|
|
389
|
+
stateStorage = 'session';
|
|
390
|
+
/**
|
|
391
|
+
* Defines the editing mode, valid values are "cell" and "row".
|
|
392
|
+
* @group Props
|
|
393
|
+
*/
|
|
394
|
+
editMode = 'cell';
|
|
395
|
+
/**
|
|
396
|
+
* Field name to use in row grouping.
|
|
397
|
+
* @group Props
|
|
398
|
+
*/
|
|
399
|
+
groupRowsBy;
|
|
400
|
+
/**
|
|
401
|
+
* Order to sort when default row grouping is enabled.
|
|
402
|
+
* @group Props
|
|
403
|
+
*/
|
|
404
|
+
groupRowsByOrder = 1;
|
|
405
|
+
/**
|
|
406
|
+
* Defines the responsive mode, valid options are "stack" and "scroll".
|
|
407
|
+
* @group Props
|
|
408
|
+
*/
|
|
409
|
+
responsiveLayout = 'scroll';
|
|
410
|
+
/**
|
|
411
|
+
* The breakpoint to define the maximum width boundary when using stack responsive layout.
|
|
412
|
+
* @group Props
|
|
413
|
+
*/
|
|
414
|
+
breakpoint = '960px';
|
|
415
|
+
/**
|
|
416
|
+
* Locale to be used in paginator formatting.
|
|
417
|
+
* @group Props
|
|
418
|
+
*/
|
|
419
|
+
paginatorLocale;
|
|
420
|
+
/**
|
|
421
|
+
* An array of objects to display.
|
|
422
|
+
* @group Props
|
|
423
|
+
*/
|
|
424
|
+
get value() {
|
|
425
|
+
return this._value;
|
|
426
|
+
}
|
|
427
|
+
set value(val) {
|
|
428
|
+
this._value = val;
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* An array of objects to represent dynamic columns.
|
|
432
|
+
* @group Props
|
|
433
|
+
*/
|
|
434
|
+
get columns() {
|
|
435
|
+
return this._columns;
|
|
436
|
+
}
|
|
437
|
+
set columns(cols) {
|
|
438
|
+
this._columns = cols;
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Index of the first row to be displayed.
|
|
442
|
+
* @group Props
|
|
443
|
+
*/
|
|
444
|
+
get first() {
|
|
445
|
+
return this._first;
|
|
446
|
+
}
|
|
447
|
+
set first(val) {
|
|
448
|
+
this._first = val;
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Number of rows to display per page.
|
|
452
|
+
* @group Props
|
|
453
|
+
*/
|
|
454
|
+
get rows() {
|
|
455
|
+
return this._rows;
|
|
456
|
+
}
|
|
457
|
+
set rows(val) {
|
|
458
|
+
this._rows = val;
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* Number of total records, defaults to length of value when not defined.
|
|
462
|
+
* @group Props
|
|
463
|
+
*/
|
|
464
|
+
get totalRecords() {
|
|
465
|
+
return this._totalRecords;
|
|
466
|
+
}
|
|
467
|
+
set totalRecords(val) {
|
|
468
|
+
this._totalRecords = val;
|
|
469
|
+
this.tableService.onTotalRecordsChange(this._totalRecords);
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* Name of the field to sort data by default.
|
|
473
|
+
* @group Props
|
|
474
|
+
*/
|
|
475
|
+
get sortField() {
|
|
476
|
+
return this._sortField;
|
|
477
|
+
}
|
|
478
|
+
set sortField(val) {
|
|
479
|
+
this._sortField = val;
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* Order to sort when default sorting is enabled.
|
|
483
|
+
* @group Props
|
|
484
|
+
*/
|
|
485
|
+
get sortOrder() {
|
|
486
|
+
return this._sortOrder;
|
|
487
|
+
}
|
|
488
|
+
set sortOrder(val) {
|
|
489
|
+
this._sortOrder = val;
|
|
490
|
+
}
|
|
491
|
+
/**
|
|
492
|
+
* An array of SortMeta objects to sort the data by default in multiple sort mode.
|
|
493
|
+
* @group Props
|
|
494
|
+
*/
|
|
495
|
+
get multiSortMeta() {
|
|
496
|
+
return this._multiSortMeta;
|
|
497
|
+
}
|
|
498
|
+
set multiSortMeta(val) {
|
|
499
|
+
this._multiSortMeta = val;
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* Selected row in single mode or an array of values in multiple mode.
|
|
503
|
+
* @group Props
|
|
504
|
+
*/
|
|
505
|
+
get selection() {
|
|
506
|
+
return this._selection;
|
|
507
|
+
}
|
|
508
|
+
set selection(val) {
|
|
509
|
+
this._selection = val;
|
|
510
|
+
}
|
|
511
|
+
/**
|
|
512
|
+
* Whether all data is selected.
|
|
513
|
+
* @group Props
|
|
514
|
+
*/
|
|
515
|
+
get selectAll() {
|
|
516
|
+
return this._selection;
|
|
517
|
+
}
|
|
518
|
+
set selectAll(val) {
|
|
519
|
+
this._selection = val;
|
|
520
|
+
}
|
|
521
|
+
/**
|
|
522
|
+
* Emits when the all of the items selected or unselected.
|
|
523
|
+
* @param {TableSelectAllChangeEvent} event - custom all selection change event.
|
|
524
|
+
* @group Emits
|
|
525
|
+
*/
|
|
526
|
+
selectAllChange = new EventEmitter();
|
|
527
|
+
/**
|
|
528
|
+
* Callback to invoke on selection changed.
|
|
529
|
+
* @param {any | null} value - selected data.
|
|
530
|
+
* @group Emits
|
|
531
|
+
*/
|
|
532
|
+
selectionChange = new EventEmitter();
|
|
533
|
+
/**
|
|
534
|
+
* Callback to invoke when a row is selected.
|
|
535
|
+
* @param {TableRowSelectEvent} event - custom select event.
|
|
536
|
+
* @group Emits
|
|
537
|
+
*/
|
|
538
|
+
onRowSelect = new EventEmitter();
|
|
539
|
+
/**
|
|
540
|
+
* Callback to invoke when a row is unselected.
|
|
541
|
+
* @param {TableRowUnSelectEvent} event - custom unselect event.
|
|
542
|
+
* @group Emits
|
|
543
|
+
*/
|
|
544
|
+
onRowUnselect = new EventEmitter();
|
|
545
|
+
/**
|
|
546
|
+
* Callback to invoke when pagination occurs.
|
|
547
|
+
* @param {TablePageEvent} event - custom pagination event.
|
|
548
|
+
* @group Emits
|
|
549
|
+
*/
|
|
550
|
+
onPage = new EventEmitter();
|
|
551
|
+
/**
|
|
552
|
+
* Callback to invoke when a column gets sorted.
|
|
553
|
+
* @param {Object} object - sort meta.
|
|
554
|
+
* @group Emits
|
|
555
|
+
*/
|
|
556
|
+
onSort = new EventEmitter();
|
|
557
|
+
/**
|
|
558
|
+
* Callback to invoke when data is filtered.
|
|
559
|
+
* @param {TableFilterEvent} event - custom filtering event.
|
|
560
|
+
* @group Emits
|
|
561
|
+
*/
|
|
562
|
+
onFilter = new EventEmitter();
|
|
563
|
+
/**
|
|
564
|
+
* Callback to invoke when paging, sorting or filtering happens in lazy mode.
|
|
565
|
+
* @param {TableLazyLoadEvent} event - custom lazy loading event.
|
|
566
|
+
* @group Emits
|
|
567
|
+
*/
|
|
568
|
+
onLazyLoad = new EventEmitter();
|
|
569
|
+
/**
|
|
570
|
+
* Callback to invoke when a row is expanded.
|
|
571
|
+
* @param {TableRowExpandEvent} event - custom row expand event.
|
|
572
|
+
* @group Emits
|
|
573
|
+
*/
|
|
574
|
+
onRowExpand = new EventEmitter();
|
|
575
|
+
/**
|
|
576
|
+
* Callback to invoke when a row is collapsed.
|
|
577
|
+
* @param {TableRowCollapseEvent} event - custom row collapse event.
|
|
578
|
+
* @group Emits
|
|
579
|
+
*/
|
|
580
|
+
onRowCollapse = new EventEmitter();
|
|
581
|
+
/**
|
|
582
|
+
* Callback to invoke when a row is selected with right click.
|
|
583
|
+
* @param {TableContextMenuSelectEvent} event - custom context menu select event.
|
|
584
|
+
* @group Emits
|
|
585
|
+
*/
|
|
586
|
+
onContextMenuSelect = new EventEmitter();
|
|
587
|
+
/**
|
|
588
|
+
* Callback to invoke when a column is resized.
|
|
589
|
+
* @param {TableColResizeEvent} event - custom column resize event.
|
|
590
|
+
* @group Emits
|
|
591
|
+
*/
|
|
592
|
+
onColResize = new EventEmitter();
|
|
593
|
+
/**
|
|
594
|
+
* Callback to invoke when a column is reordered.
|
|
595
|
+
* @param {TableColumnReorderEvent} event - custom column reorder event.
|
|
596
|
+
* @group Emits
|
|
597
|
+
*/
|
|
598
|
+
onColReorder = new EventEmitter();
|
|
599
|
+
/**
|
|
600
|
+
* Callback to invoke when a row is reordered.
|
|
601
|
+
* @param {TableRowReorderEvent} event - custom row reorder event.
|
|
602
|
+
* @group Emits
|
|
603
|
+
*/
|
|
604
|
+
onRowReorder = new EventEmitter();
|
|
605
|
+
/**
|
|
606
|
+
* Callback to invoke when a cell switches to edit mode.
|
|
607
|
+
* @param {TableEditInitEvent} event - custom edit init event.
|
|
608
|
+
* @group Emits
|
|
609
|
+
*/
|
|
610
|
+
onEditInit = new EventEmitter();
|
|
611
|
+
/**
|
|
612
|
+
* Callback to invoke when cell edit is completed.
|
|
613
|
+
* @param {TableEditCompleteEvent} event - custom edit complete event.
|
|
614
|
+
* @group Emits
|
|
615
|
+
*/
|
|
616
|
+
onEditComplete = new EventEmitter();
|
|
617
|
+
/**
|
|
618
|
+
* Callback to invoke when cell edit is cancelled with escape key.
|
|
619
|
+
* @param {TableEditCancelEvent} event - custom edit cancel event.
|
|
620
|
+
* @group Emits
|
|
621
|
+
*/
|
|
622
|
+
onEditCancel = new EventEmitter();
|
|
623
|
+
/**
|
|
624
|
+
* Callback to invoke when state of header checkbox changes.
|
|
625
|
+
* @param {TableHeaderCheckboxToggleEvent} event - custom header checkbox event.
|
|
626
|
+
* @group Emits
|
|
627
|
+
*/
|
|
628
|
+
onHeaderCheckboxToggle = new EventEmitter();
|
|
629
|
+
/**
|
|
630
|
+
* A function to implement custom sorting, refer to sorting section for details.
|
|
631
|
+
* @param {any} any - sort meta.
|
|
632
|
+
* @group Emits
|
|
633
|
+
*/
|
|
634
|
+
sortFunction = new EventEmitter();
|
|
635
|
+
/**
|
|
636
|
+
* Callback to invoke on pagination.
|
|
637
|
+
* @param {number} number - first element.
|
|
638
|
+
* @group Emits
|
|
639
|
+
*/
|
|
640
|
+
firstChange = new EventEmitter();
|
|
641
|
+
/**
|
|
642
|
+
* Callback to invoke on rows change.
|
|
643
|
+
* @param {number} number - Row count.
|
|
644
|
+
* @group Emits
|
|
645
|
+
*/
|
|
646
|
+
rowsChange = new EventEmitter();
|
|
647
|
+
/**
|
|
648
|
+
* Callback to invoke table state is saved.
|
|
649
|
+
* @param {TableState} object - table state.
|
|
650
|
+
* @group Emits
|
|
651
|
+
*/
|
|
652
|
+
onStateSave = new EventEmitter();
|
|
653
|
+
/**
|
|
654
|
+
* Callback to invoke table state is restored.
|
|
655
|
+
* @param {TableState} object - table state.
|
|
656
|
+
* @group Emits
|
|
657
|
+
*/
|
|
658
|
+
onStateRestore = new EventEmitter();
|
|
659
|
+
containerViewChild;
|
|
660
|
+
resizeHelperViewChild;
|
|
661
|
+
reorderIndicatorUpViewChild;
|
|
662
|
+
reorderIndicatorDownViewChild;
|
|
663
|
+
wrapperViewChild;
|
|
664
|
+
tableViewChild;
|
|
665
|
+
tableHeaderViewChild;
|
|
666
|
+
tableFooterViewChild;
|
|
667
|
+
scroller;
|
|
668
|
+
templates;
|
|
669
|
+
/**
|
|
670
|
+
* Indicates the height of rows to be scrolled.
|
|
671
|
+
* @group Props
|
|
672
|
+
* @deprecated use virtualScrollItemSize property instead.
|
|
673
|
+
*/
|
|
674
|
+
get virtualRowHeight() {
|
|
675
|
+
return this._virtualRowHeight;
|
|
676
|
+
}
|
|
677
|
+
set virtualRowHeight(val) {
|
|
678
|
+
this._virtualRowHeight = val;
|
|
679
|
+
console.warn('The virtualRowHeight property is deprecated.');
|
|
680
|
+
}
|
|
681
|
+
_virtualRowHeight = 28;
|
|
682
|
+
_value = [];
|
|
683
|
+
_columns;
|
|
684
|
+
_totalRecords = 0;
|
|
685
|
+
_first = 0;
|
|
686
|
+
_rows;
|
|
687
|
+
filteredValue;
|
|
688
|
+
headerTemplate;
|
|
689
|
+
headerGroupedTemplate;
|
|
690
|
+
bodyTemplate;
|
|
691
|
+
loadingBodyTemplate;
|
|
692
|
+
captionTemplate;
|
|
693
|
+
footerTemplate;
|
|
694
|
+
footerGroupedTemplate;
|
|
695
|
+
summaryTemplate;
|
|
696
|
+
colGroupTemplate;
|
|
697
|
+
expandedRowTemplate;
|
|
698
|
+
groupHeaderTemplate;
|
|
699
|
+
groupFooterTemplate;
|
|
700
|
+
frozenExpandedRowTemplate;
|
|
701
|
+
frozenHeaderTemplate;
|
|
702
|
+
frozenBodyTemplate;
|
|
703
|
+
frozenFooterTemplate;
|
|
704
|
+
frozenColGroupTemplate;
|
|
705
|
+
emptyMessageTemplate;
|
|
706
|
+
paginatorLeftTemplate;
|
|
707
|
+
paginatorRightTemplate;
|
|
708
|
+
paginatorDropdownItemTemplate;
|
|
709
|
+
loadingIconTemplate;
|
|
710
|
+
reorderIndicatorUpIconTemplate;
|
|
711
|
+
reorderIndicatorDownIconTemplate;
|
|
712
|
+
sortIconTemplate;
|
|
713
|
+
checkboxIconTemplate;
|
|
714
|
+
headerCheckboxIconTemplate;
|
|
715
|
+
paginatorDropdownIconTemplate;
|
|
716
|
+
paginatorFirstPageLinkIconTemplate;
|
|
717
|
+
paginatorLastPageLinkIconTemplate;
|
|
718
|
+
paginatorPreviousPageLinkIconTemplate;
|
|
719
|
+
paginatorNextPageLinkIconTemplate;
|
|
720
|
+
selectionKeys = {};
|
|
721
|
+
lastResizerHelperX;
|
|
722
|
+
reorderIconWidth;
|
|
723
|
+
reorderIconHeight;
|
|
724
|
+
draggedColumn;
|
|
725
|
+
draggedRowIndex;
|
|
726
|
+
droppedRowIndex;
|
|
727
|
+
rowDragging;
|
|
728
|
+
dropPosition;
|
|
729
|
+
editingCell;
|
|
730
|
+
editingCellData;
|
|
731
|
+
editingCellField;
|
|
732
|
+
editingCellRowIndex;
|
|
733
|
+
selfClick;
|
|
734
|
+
documentEditListener;
|
|
735
|
+
_multiSortMeta;
|
|
736
|
+
_sortField;
|
|
737
|
+
_sortOrder = 1;
|
|
738
|
+
preventSelectionSetterPropagation;
|
|
739
|
+
_selection;
|
|
740
|
+
_selectAll = null;
|
|
741
|
+
anchorRowIndex;
|
|
742
|
+
rangeRowIndex;
|
|
743
|
+
filterTimeout;
|
|
744
|
+
initialized;
|
|
745
|
+
rowTouched;
|
|
746
|
+
restoringSort;
|
|
747
|
+
restoringFilter;
|
|
748
|
+
stateRestored;
|
|
749
|
+
columnOrderStateRestored;
|
|
750
|
+
columnWidthsState;
|
|
751
|
+
tableWidthState;
|
|
752
|
+
overlaySubscription;
|
|
753
|
+
resizeColumnElement;
|
|
754
|
+
columnResizing = false;
|
|
755
|
+
rowGroupHeaderStyleObject = {};
|
|
756
|
+
id = UniqueComponentId();
|
|
757
|
+
styleElement;
|
|
758
|
+
responsiveStyleElement;
|
|
759
|
+
window;
|
|
760
|
+
constructor(document, platformId, renderer, el, zone, tableService, cd, filterService, overlayService, config, domSanitizer) {
|
|
761
|
+
this.document = document;
|
|
762
|
+
this.platformId = platformId;
|
|
763
|
+
this.renderer = renderer;
|
|
764
|
+
this.el = el;
|
|
765
|
+
this.zone = zone;
|
|
766
|
+
this.tableService = tableService;
|
|
767
|
+
this.cd = cd;
|
|
768
|
+
this.filterService = filterService;
|
|
769
|
+
this.overlayService = overlayService;
|
|
770
|
+
this.config = config;
|
|
771
|
+
this.domSanitizer = domSanitizer;
|
|
772
|
+
this.window = this.document.defaultView;
|
|
773
|
+
}
|
|
774
|
+
ngOnInit() {
|
|
775
|
+
if (this.lazy && this.lazyLoadOnInit) {
|
|
776
|
+
if (!this.virtualScroll) {
|
|
777
|
+
this.onLazyLoad.emit(this.createLazyLoadMetadata());
|
|
778
|
+
}
|
|
779
|
+
if (this.restoringFilter) {
|
|
780
|
+
this.restoringFilter = false;
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
if (this.responsiveLayout === 'stack') {
|
|
784
|
+
this.createResponsiveStyle();
|
|
785
|
+
}
|
|
786
|
+
this.initialized = true;
|
|
787
|
+
}
|
|
788
|
+
ngAfterContentInit() {
|
|
789
|
+
this.templates.forEach((item) => {
|
|
790
|
+
switch (item.getType()) {
|
|
791
|
+
case 'caption':
|
|
792
|
+
this.captionTemplate = item.template;
|
|
793
|
+
break;
|
|
794
|
+
case 'header':
|
|
795
|
+
this.headerTemplate = item.template;
|
|
796
|
+
break;
|
|
797
|
+
case 'headergrouped':
|
|
798
|
+
this.headerGroupedTemplate = item.template;
|
|
799
|
+
break;
|
|
800
|
+
case 'body':
|
|
801
|
+
this.bodyTemplate = item.template;
|
|
802
|
+
break;
|
|
803
|
+
case 'loadingbody':
|
|
804
|
+
this.loadingBodyTemplate = item.template;
|
|
805
|
+
break;
|
|
806
|
+
case 'footer':
|
|
807
|
+
this.footerTemplate = item.template;
|
|
808
|
+
break;
|
|
809
|
+
case 'footergrouped':
|
|
810
|
+
this.footerGroupedTemplate = item.template;
|
|
811
|
+
break;
|
|
812
|
+
case 'summary':
|
|
813
|
+
this.summaryTemplate = item.template;
|
|
814
|
+
break;
|
|
815
|
+
case 'colgroup':
|
|
816
|
+
this.colGroupTemplate = item.template;
|
|
817
|
+
break;
|
|
818
|
+
case 'rowexpansion':
|
|
819
|
+
this.expandedRowTemplate = item.template;
|
|
820
|
+
break;
|
|
821
|
+
case 'groupheader':
|
|
822
|
+
this.groupHeaderTemplate = item.template;
|
|
823
|
+
break;
|
|
824
|
+
case 'groupfooter':
|
|
825
|
+
this.groupFooterTemplate = item.template;
|
|
826
|
+
break;
|
|
827
|
+
case 'frozenheader':
|
|
828
|
+
this.frozenHeaderTemplate = item.template;
|
|
829
|
+
break;
|
|
830
|
+
case 'frozenbody':
|
|
831
|
+
this.frozenBodyTemplate = item.template;
|
|
832
|
+
break;
|
|
833
|
+
case 'frozenfooter':
|
|
834
|
+
this.frozenFooterTemplate = item.template;
|
|
835
|
+
break;
|
|
836
|
+
case 'frozencolgroup':
|
|
837
|
+
this.frozenColGroupTemplate = item.template;
|
|
838
|
+
break;
|
|
839
|
+
case 'frozenrowexpansion':
|
|
840
|
+
this.frozenExpandedRowTemplate = item.template;
|
|
841
|
+
break;
|
|
842
|
+
case 'emptymessage':
|
|
843
|
+
this.emptyMessageTemplate = item.template;
|
|
844
|
+
break;
|
|
845
|
+
case 'paginatorleft':
|
|
846
|
+
this.paginatorLeftTemplate = item.template;
|
|
847
|
+
break;
|
|
848
|
+
case 'paginatorright':
|
|
849
|
+
this.paginatorRightTemplate = item.template;
|
|
850
|
+
break;
|
|
851
|
+
case 'paginatordropdownicon':
|
|
852
|
+
this.paginatorDropdownIconTemplate = item.template;
|
|
853
|
+
break;
|
|
854
|
+
case 'paginatordropdownitem':
|
|
855
|
+
this.paginatorDropdownItemTemplate = item.template;
|
|
856
|
+
break;
|
|
857
|
+
case 'paginatorfirstpagelinkicon':
|
|
858
|
+
this.paginatorFirstPageLinkIconTemplate = item.template;
|
|
859
|
+
break;
|
|
860
|
+
case 'paginatorlastpagelinkicon':
|
|
861
|
+
this.paginatorLastPageLinkIconTemplate = item.template;
|
|
862
|
+
break;
|
|
863
|
+
case 'paginatorpreviouspagelinkicon':
|
|
864
|
+
this.paginatorPreviousPageLinkIconTemplate = item.template;
|
|
865
|
+
break;
|
|
866
|
+
case 'paginatornextpagelinkicon':
|
|
867
|
+
this.paginatorNextPageLinkIconTemplate = item.template;
|
|
868
|
+
break;
|
|
869
|
+
case 'loadingicon':
|
|
870
|
+
this.loadingIconTemplate = item.template;
|
|
871
|
+
break;
|
|
872
|
+
case 'reorderindicatorupicon':
|
|
873
|
+
this.reorderIndicatorUpIconTemplate = item.template;
|
|
874
|
+
break;
|
|
875
|
+
case 'reorderindicatordownicon':
|
|
876
|
+
this.reorderIndicatorDownIconTemplate = item.template;
|
|
877
|
+
break;
|
|
878
|
+
case 'sorticon':
|
|
879
|
+
this.sortIconTemplate = item.template;
|
|
880
|
+
break;
|
|
881
|
+
case 'checkboxicon':
|
|
882
|
+
this.checkboxIconTemplate = item.template;
|
|
883
|
+
break;
|
|
884
|
+
case 'headercheckboxicon':
|
|
885
|
+
this.headerCheckboxIconTemplate = item.template;
|
|
886
|
+
break;
|
|
887
|
+
}
|
|
888
|
+
});
|
|
889
|
+
}
|
|
890
|
+
ngAfterViewInit() {
|
|
891
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
892
|
+
if (this.isStateful() && this.resizableColumns) {
|
|
893
|
+
this.restoreColumnWidths();
|
|
894
|
+
}
|
|
895
|
+
}
|
|
896
|
+
}
|
|
897
|
+
ngOnChanges(simpleChange) {
|
|
898
|
+
if (simpleChange.value) {
|
|
899
|
+
if (this.isStateful() && !this.stateRestored && isPlatformBrowser(this.platformId)) {
|
|
900
|
+
this.restoreState();
|
|
901
|
+
}
|
|
902
|
+
this._value = simpleChange.value.currentValue;
|
|
903
|
+
if (!this.lazy) {
|
|
904
|
+
this.totalRecords = this._value ? this._value.length : 0;
|
|
905
|
+
if (this.sortMode == 'single' && (this.sortField || this.groupRowsBy))
|
|
906
|
+
this.sortSingle();
|
|
907
|
+
else if (this.sortMode == 'multiple' && (this.multiSortMeta || this.groupRowsBy))
|
|
908
|
+
this.sortMultiple();
|
|
909
|
+
else if (this.hasFilter())
|
|
910
|
+
//sort already filters
|
|
911
|
+
this._filter();
|
|
912
|
+
}
|
|
913
|
+
this.tableService.onValueChange(simpleChange.value.currentValue);
|
|
914
|
+
}
|
|
915
|
+
if (simpleChange.columns) {
|
|
916
|
+
if (!this.isStateful()) {
|
|
917
|
+
this._columns = simpleChange.columns.currentValue;
|
|
918
|
+
this.tableService.onColumnsChange(simpleChange.columns.currentValue);
|
|
919
|
+
}
|
|
920
|
+
if (this._columns && this.isStateful() && this.reorderableColumns && !this.columnOrderStateRestored) {
|
|
921
|
+
this.restoreColumnOrder();
|
|
922
|
+
this.tableService.onColumnsChange(this._columns);
|
|
923
|
+
}
|
|
924
|
+
}
|
|
925
|
+
if (simpleChange.sortField) {
|
|
926
|
+
this._sortField = simpleChange.sortField.currentValue;
|
|
927
|
+
//avoid triggering lazy load prior to lazy initialization at onInit
|
|
928
|
+
if (!this.lazy || this.initialized) {
|
|
929
|
+
if (this.sortMode === 'single') {
|
|
930
|
+
this.sortSingle();
|
|
931
|
+
}
|
|
932
|
+
}
|
|
933
|
+
}
|
|
934
|
+
if (simpleChange.groupRowsBy) {
|
|
935
|
+
//avoid triggering lazy load prior to lazy initialization at onInit
|
|
936
|
+
if (!this.lazy || this.initialized) {
|
|
937
|
+
if (this.sortMode === 'single') {
|
|
938
|
+
this.sortSingle();
|
|
939
|
+
}
|
|
940
|
+
}
|
|
941
|
+
}
|
|
942
|
+
if (simpleChange.sortOrder) {
|
|
943
|
+
this._sortOrder = simpleChange.sortOrder.currentValue;
|
|
944
|
+
//avoid triggering lazy load prior to lazy initialization at onInit
|
|
945
|
+
if (!this.lazy || this.initialized) {
|
|
946
|
+
if (this.sortMode === 'single') {
|
|
947
|
+
this.sortSingle();
|
|
948
|
+
}
|
|
949
|
+
}
|
|
950
|
+
}
|
|
951
|
+
if (simpleChange.groupRowsByOrder) {
|
|
952
|
+
//avoid triggering lazy load prior to lazy initialization at onInit
|
|
953
|
+
if (!this.lazy || this.initialized) {
|
|
954
|
+
if (this.sortMode === 'single') {
|
|
955
|
+
this.sortSingle();
|
|
956
|
+
}
|
|
957
|
+
}
|
|
958
|
+
}
|
|
959
|
+
if (simpleChange.multiSortMeta) {
|
|
960
|
+
this._multiSortMeta = simpleChange.multiSortMeta.currentValue;
|
|
961
|
+
if (this.sortMode === 'multiple' && (this.initialized || (!this.lazy && !this.virtualScroll))) {
|
|
962
|
+
this.sortMultiple();
|
|
963
|
+
}
|
|
964
|
+
}
|
|
965
|
+
if (simpleChange.selection) {
|
|
966
|
+
this._selection = simpleChange.selection.currentValue;
|
|
967
|
+
if (!this.preventSelectionSetterPropagation) {
|
|
968
|
+
this.updateSelectionKeys();
|
|
969
|
+
this.tableService.onSelectionChange();
|
|
970
|
+
}
|
|
971
|
+
this.preventSelectionSetterPropagation = false;
|
|
972
|
+
}
|
|
973
|
+
if (simpleChange.selectAll) {
|
|
974
|
+
this._selectAll = simpleChange.selectAll.currentValue;
|
|
975
|
+
if (!this.preventSelectionSetterPropagation) {
|
|
976
|
+
this.updateSelectionKeys();
|
|
977
|
+
this.tableService.onSelectionChange();
|
|
978
|
+
if (this.isStateful()) {
|
|
979
|
+
this.saveState();
|
|
980
|
+
}
|
|
981
|
+
}
|
|
982
|
+
this.preventSelectionSetterPropagation = false;
|
|
983
|
+
}
|
|
984
|
+
}
|
|
985
|
+
get processedData() {
|
|
986
|
+
return this.filteredValue || this.value || [];
|
|
987
|
+
}
|
|
988
|
+
_initialColWidths;
|
|
989
|
+
dataToRender(data) {
|
|
990
|
+
const _data = data || this.processedData;
|
|
991
|
+
if (_data && this.paginator) {
|
|
992
|
+
const first = this.lazy ? 0 : this.first;
|
|
993
|
+
return _data.slice(first, first + this.rows);
|
|
994
|
+
}
|
|
995
|
+
return _data;
|
|
996
|
+
}
|
|
997
|
+
updateSelectionKeys() {
|
|
998
|
+
if (this.dataKey && this._selection) {
|
|
999
|
+
this.selectionKeys = {};
|
|
1000
|
+
if (Array.isArray(this._selection)) {
|
|
1001
|
+
for (let data of this._selection) {
|
|
1002
|
+
this.selectionKeys[String(ObjectUtils.resolveFieldData(data, this.dataKey))] = 1;
|
|
1003
|
+
}
|
|
1004
|
+
}
|
|
1005
|
+
else {
|
|
1006
|
+
this.selectionKeys[String(ObjectUtils.resolveFieldData(this._selection, this.dataKey))] = 1;
|
|
1007
|
+
}
|
|
1008
|
+
}
|
|
1009
|
+
}
|
|
1010
|
+
onPageChange(event) {
|
|
1011
|
+
this.first = event.first;
|
|
1012
|
+
this.rows = event.rows;
|
|
1013
|
+
this.onPage.emit({
|
|
1014
|
+
first: this.first,
|
|
1015
|
+
rows: this.rows
|
|
1016
|
+
});
|
|
1017
|
+
if (this.lazy) {
|
|
1018
|
+
this.onLazyLoad.emit(this.createLazyLoadMetadata());
|
|
1019
|
+
}
|
|
1020
|
+
this.firstChange.emit(this.first);
|
|
1021
|
+
this.rowsChange.emit(this.rows);
|
|
1022
|
+
this.tableService.onValueChange(this.value);
|
|
1023
|
+
if (this.isStateful()) {
|
|
1024
|
+
this.saveState();
|
|
1025
|
+
}
|
|
1026
|
+
this.anchorRowIndex = null;
|
|
1027
|
+
if (this.scrollable) {
|
|
1028
|
+
this.resetScrollTop();
|
|
1029
|
+
}
|
|
1030
|
+
}
|
|
1031
|
+
sort(event) {
|
|
1032
|
+
let originalEvent = event.originalEvent;
|
|
1033
|
+
if (this.sortMode === 'single') {
|
|
1034
|
+
this._sortOrder = this.sortField === event.field ? this.sortOrder * -1 : this.defaultSortOrder;
|
|
1035
|
+
this._sortField = event.field;
|
|
1036
|
+
if (this.resetPageOnSort) {
|
|
1037
|
+
this._first = 0;
|
|
1038
|
+
this.firstChange.emit(this._first);
|
|
1039
|
+
if (this.scrollable) {
|
|
1040
|
+
this.resetScrollTop();
|
|
1041
|
+
}
|
|
1042
|
+
}
|
|
1043
|
+
this.sortSingle();
|
|
1044
|
+
}
|
|
1045
|
+
if (this.sortMode === 'multiple') {
|
|
1046
|
+
let metaKey = originalEvent.metaKey || originalEvent.ctrlKey;
|
|
1047
|
+
let sortMeta = this.getSortMeta(event.field);
|
|
1048
|
+
if (sortMeta) {
|
|
1049
|
+
if (!metaKey) {
|
|
1050
|
+
this._multiSortMeta = [{ field: event.field, order: sortMeta.order * -1 }];
|
|
1051
|
+
if (this.resetPageOnSort) {
|
|
1052
|
+
this._first = 0;
|
|
1053
|
+
this.firstChange.emit(this._first);
|
|
1054
|
+
if (this.scrollable) {
|
|
1055
|
+
this.resetScrollTop();
|
|
1056
|
+
}
|
|
1057
|
+
}
|
|
1058
|
+
}
|
|
1059
|
+
else {
|
|
1060
|
+
sortMeta.order = sortMeta.order * -1;
|
|
1061
|
+
}
|
|
1062
|
+
}
|
|
1063
|
+
else {
|
|
1064
|
+
if (!metaKey || !this.multiSortMeta) {
|
|
1065
|
+
this._multiSortMeta = [];
|
|
1066
|
+
if (this.resetPageOnSort) {
|
|
1067
|
+
this._first = 0;
|
|
1068
|
+
this.firstChange.emit(this._first);
|
|
1069
|
+
}
|
|
1070
|
+
}
|
|
1071
|
+
this._multiSortMeta.push({ field: event.field, order: this.defaultSortOrder });
|
|
1072
|
+
}
|
|
1073
|
+
this.sortMultiple();
|
|
1074
|
+
}
|
|
1075
|
+
if (this.isStateful()) {
|
|
1076
|
+
this.saveState();
|
|
1077
|
+
}
|
|
1078
|
+
this.anchorRowIndex = null;
|
|
1079
|
+
}
|
|
1080
|
+
sortSingle() {
|
|
1081
|
+
let field = this.sortField || this.groupRowsBy;
|
|
1082
|
+
let order = this.sortField ? this.sortOrder : this.groupRowsByOrder;
|
|
1083
|
+
if (this.groupRowsBy && this.sortField && this.groupRowsBy !== this.sortField) {
|
|
1084
|
+
this._multiSortMeta = [this.getGroupRowsMeta(), { field: this.sortField, order: this.sortOrder }];
|
|
1085
|
+
this.sortMultiple();
|
|
1086
|
+
return;
|
|
1087
|
+
}
|
|
1088
|
+
if (field && order) {
|
|
1089
|
+
if (this.restoringSort) {
|
|
1090
|
+
this.restoringSort = false;
|
|
1091
|
+
}
|
|
1092
|
+
if (this.lazy) {
|
|
1093
|
+
this.onLazyLoad.emit(this.createLazyLoadMetadata());
|
|
1094
|
+
}
|
|
1095
|
+
else if (this.value) {
|
|
1096
|
+
if (this.customSort) {
|
|
1097
|
+
this.sortFunction.emit({
|
|
1098
|
+
data: this.value,
|
|
1099
|
+
mode: this.sortMode,
|
|
1100
|
+
field: field,
|
|
1101
|
+
order: order
|
|
1102
|
+
});
|
|
1103
|
+
}
|
|
1104
|
+
else {
|
|
1105
|
+
this.value.sort((data1, data2) => {
|
|
1106
|
+
let value1 = ObjectUtils.resolveFieldData(data1, field);
|
|
1107
|
+
let value2 = ObjectUtils.resolveFieldData(data2, field);
|
|
1108
|
+
let result = null;
|
|
1109
|
+
if (value1 == null && value2 != null)
|
|
1110
|
+
result = -1;
|
|
1111
|
+
else if (value1 != null && value2 == null)
|
|
1112
|
+
result = 1;
|
|
1113
|
+
else if (value1 == null && value2 == null)
|
|
1114
|
+
result = 0;
|
|
1115
|
+
else if (typeof value1 === 'string' && typeof value2 === 'string')
|
|
1116
|
+
result = value1.localeCompare(value2);
|
|
1117
|
+
else
|
|
1118
|
+
result = value1 < value2 ? -1 : value1 > value2 ? 1 : 0;
|
|
1119
|
+
return order * result;
|
|
1120
|
+
});
|
|
1121
|
+
this._value = [...this.value];
|
|
1122
|
+
}
|
|
1123
|
+
if (this.hasFilter()) {
|
|
1124
|
+
this._filter();
|
|
1125
|
+
}
|
|
1126
|
+
}
|
|
1127
|
+
let sortMeta = {
|
|
1128
|
+
field: field,
|
|
1129
|
+
order: order
|
|
1130
|
+
};
|
|
1131
|
+
this.onSort.emit(sortMeta);
|
|
1132
|
+
this.tableService.onSort(sortMeta);
|
|
1133
|
+
}
|
|
1134
|
+
}
|
|
1135
|
+
sortMultiple() {
|
|
1136
|
+
if (this.groupRowsBy) {
|
|
1137
|
+
if (!this._multiSortMeta)
|
|
1138
|
+
this._multiSortMeta = [this.getGroupRowsMeta()];
|
|
1139
|
+
else if (this.multiSortMeta[0].field !== this.groupRowsBy)
|
|
1140
|
+
this._multiSortMeta = [this.getGroupRowsMeta(), ...this._multiSortMeta];
|
|
1141
|
+
}
|
|
1142
|
+
if (this.multiSortMeta) {
|
|
1143
|
+
if (this.lazy) {
|
|
1144
|
+
this.onLazyLoad.emit(this.createLazyLoadMetadata());
|
|
1145
|
+
}
|
|
1146
|
+
else if (this.value) {
|
|
1147
|
+
if (this.customSort) {
|
|
1148
|
+
this.sortFunction.emit({
|
|
1149
|
+
data: this.value,
|
|
1150
|
+
mode: this.sortMode,
|
|
1151
|
+
multiSortMeta: this.multiSortMeta
|
|
1152
|
+
});
|
|
1153
|
+
}
|
|
1154
|
+
else {
|
|
1155
|
+
this.value.sort((data1, data2) => {
|
|
1156
|
+
return this.multisortField(data1, data2, this.multiSortMeta, 0);
|
|
1157
|
+
});
|
|
1158
|
+
this._value = [...this.value];
|
|
1159
|
+
}
|
|
1160
|
+
if (this.hasFilter()) {
|
|
1161
|
+
this._filter();
|
|
1162
|
+
}
|
|
1163
|
+
}
|
|
1164
|
+
this.onSort.emit({
|
|
1165
|
+
multisortmeta: this.multiSortMeta
|
|
1166
|
+
});
|
|
1167
|
+
this.tableService.onSort(this.multiSortMeta);
|
|
1168
|
+
}
|
|
1169
|
+
}
|
|
1170
|
+
multisortField(data1, data2, multiSortMeta, index) {
|
|
1171
|
+
const value1 = ObjectUtils.resolveFieldData(data1, multiSortMeta[index].field);
|
|
1172
|
+
const value2 = ObjectUtils.resolveFieldData(data2, multiSortMeta[index].field);
|
|
1173
|
+
if (ObjectUtils.compare(value1, value2, this.filterLocale) === 0) {
|
|
1174
|
+
return multiSortMeta.length - 1 > index ? this.multisortField(data1, data2, multiSortMeta, index + 1) : 0;
|
|
1175
|
+
}
|
|
1176
|
+
return this.compareValuesOnSort(value1, value2, multiSortMeta[index].order);
|
|
1177
|
+
}
|
|
1178
|
+
compareValuesOnSort(value1, value2, order) {
|
|
1179
|
+
return ObjectUtils.sort(value1, value2, order, this.filterLocale, this.sortOrder);
|
|
1180
|
+
}
|
|
1181
|
+
getSortMeta(field) {
|
|
1182
|
+
if (this.multiSortMeta && this.multiSortMeta.length) {
|
|
1183
|
+
for (let i = 0; i < this.multiSortMeta.length; i++) {
|
|
1184
|
+
if (this.multiSortMeta[i].field === field) {
|
|
1185
|
+
return this.multiSortMeta[i];
|
|
1186
|
+
}
|
|
1187
|
+
}
|
|
1188
|
+
}
|
|
1189
|
+
return null;
|
|
1190
|
+
}
|
|
1191
|
+
isSorted(field) {
|
|
1192
|
+
if (this.sortMode === 'single') {
|
|
1193
|
+
return this.sortField && this.sortField === field;
|
|
1194
|
+
}
|
|
1195
|
+
else if (this.sortMode === 'multiple') {
|
|
1196
|
+
let sorted = false;
|
|
1197
|
+
if (this.multiSortMeta) {
|
|
1198
|
+
for (let i = 0; i < this.multiSortMeta.length; i++) {
|
|
1199
|
+
if (this.multiSortMeta[i].field == field) {
|
|
1200
|
+
sorted = true;
|
|
1201
|
+
break;
|
|
1202
|
+
}
|
|
1203
|
+
}
|
|
1204
|
+
}
|
|
1205
|
+
return sorted;
|
|
1206
|
+
}
|
|
1207
|
+
}
|
|
1208
|
+
handleRowClick(event) {
|
|
1209
|
+
let target = event.originalEvent.target;
|
|
1210
|
+
let targetNode = target.nodeName;
|
|
1211
|
+
let parentNode = target.parentElement && target.parentElement.nodeName;
|
|
1212
|
+
if (targetNode == 'INPUT' || targetNode == 'BUTTON' || targetNode == 'A' || parentNode == 'INPUT' || parentNode == 'BUTTON' || parentNode == 'A' || DomHandler.hasClass(event.originalEvent.target, 'cax-clickable')) {
|
|
1213
|
+
return;
|
|
1214
|
+
}
|
|
1215
|
+
if (this.selectionMode) {
|
|
1216
|
+
let rowData = event.rowData;
|
|
1217
|
+
let rowIndex = event.rowIndex;
|
|
1218
|
+
this.preventSelectionSetterPropagation = true;
|
|
1219
|
+
if (this.isMultipleSelectionMode() && event.originalEvent.shiftKey && this.anchorRowIndex != null) {
|
|
1220
|
+
DomHandler.clearSelection();
|
|
1221
|
+
if (this.rangeRowIndex != null) {
|
|
1222
|
+
this.clearSelectionRange(event.originalEvent);
|
|
1223
|
+
}
|
|
1224
|
+
this.rangeRowIndex = rowIndex;
|
|
1225
|
+
this.selectRange(event.originalEvent, rowIndex);
|
|
1226
|
+
}
|
|
1227
|
+
else {
|
|
1228
|
+
let selected = this.isSelected(rowData);
|
|
1229
|
+
if (!selected && !this.isRowSelectable(rowData, rowIndex)) {
|
|
1230
|
+
return;
|
|
1231
|
+
}
|
|
1232
|
+
let metaSelection = this.rowTouched ? false : this.metaKeySelection;
|
|
1233
|
+
let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowData, this.dataKey)) : null;
|
|
1234
|
+
this.anchorRowIndex = rowIndex;
|
|
1235
|
+
this.rangeRowIndex = rowIndex;
|
|
1236
|
+
if (metaSelection) {
|
|
1237
|
+
let metaKey = event.originalEvent.metaKey || event.originalEvent.ctrlKey;
|
|
1238
|
+
if (selected && metaKey) {
|
|
1239
|
+
if (this.isSingleSelectionMode()) {
|
|
1240
|
+
this._selection = null;
|
|
1241
|
+
this.selectionKeys = {};
|
|
1242
|
+
this.selectionChange.emit(null);
|
|
1243
|
+
}
|
|
1244
|
+
else {
|
|
1245
|
+
let selectionIndex = this.findIndexInSelection(rowData);
|
|
1246
|
+
this._selection = this.selection.filter((val, i) => i != selectionIndex);
|
|
1247
|
+
this.selectionChange.emit(this.selection);
|
|
1248
|
+
if (dataKeyValue) {
|
|
1249
|
+
delete this.selectionKeys[dataKeyValue];
|
|
1250
|
+
}
|
|
1251
|
+
}
|
|
1252
|
+
this.onRowUnselect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row' });
|
|
1253
|
+
}
|
|
1254
|
+
else {
|
|
1255
|
+
if (this.isSingleSelectionMode()) {
|
|
1256
|
+
this._selection = rowData;
|
|
1257
|
+
this.selectionChange.emit(rowData);
|
|
1258
|
+
if (dataKeyValue) {
|
|
1259
|
+
this.selectionKeys = {};
|
|
1260
|
+
this.selectionKeys[dataKeyValue] = 1;
|
|
1261
|
+
}
|
|
1262
|
+
}
|
|
1263
|
+
else if (this.isMultipleSelectionMode()) {
|
|
1264
|
+
if (metaKey) {
|
|
1265
|
+
this._selection = this.selection || [];
|
|
1266
|
+
}
|
|
1267
|
+
else {
|
|
1268
|
+
this._selection = [];
|
|
1269
|
+
this.selectionKeys = {};
|
|
1270
|
+
}
|
|
1271
|
+
this._selection = [...this.selection, rowData];
|
|
1272
|
+
this.selectionChange.emit(this.selection);
|
|
1273
|
+
if (dataKeyValue) {
|
|
1274
|
+
this.selectionKeys[dataKeyValue] = 1;
|
|
1275
|
+
}
|
|
1276
|
+
}
|
|
1277
|
+
this.onRowSelect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: rowIndex });
|
|
1278
|
+
}
|
|
1279
|
+
}
|
|
1280
|
+
else {
|
|
1281
|
+
if (this.selectionMode === 'single') {
|
|
1282
|
+
if (selected) {
|
|
1283
|
+
this._selection = null;
|
|
1284
|
+
this.selectionKeys = {};
|
|
1285
|
+
this.selectionChange.emit(this.selection);
|
|
1286
|
+
this.onRowUnselect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: rowIndex });
|
|
1287
|
+
}
|
|
1288
|
+
else {
|
|
1289
|
+
this._selection = rowData;
|
|
1290
|
+
this.selectionChange.emit(this.selection);
|
|
1291
|
+
this.onRowSelect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: rowIndex });
|
|
1292
|
+
if (dataKeyValue) {
|
|
1293
|
+
this.selectionKeys = {};
|
|
1294
|
+
this.selectionKeys[dataKeyValue] = 1;
|
|
1295
|
+
}
|
|
1296
|
+
}
|
|
1297
|
+
}
|
|
1298
|
+
else if (this.selectionMode === 'multiple') {
|
|
1299
|
+
if (selected) {
|
|
1300
|
+
let selectionIndex = this.findIndexInSelection(rowData);
|
|
1301
|
+
this._selection = this.selection.filter((val, i) => i != selectionIndex);
|
|
1302
|
+
this.selectionChange.emit(this.selection);
|
|
1303
|
+
this.onRowUnselect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: rowIndex });
|
|
1304
|
+
if (dataKeyValue) {
|
|
1305
|
+
delete this.selectionKeys[dataKeyValue];
|
|
1306
|
+
}
|
|
1307
|
+
}
|
|
1308
|
+
else {
|
|
1309
|
+
this._selection = this.selection ? [...this.selection, rowData] : [rowData];
|
|
1310
|
+
this.selectionChange.emit(this.selection);
|
|
1311
|
+
this.onRowSelect.emit({ originalEvent: event.originalEvent, data: rowData, type: 'row', index: rowIndex });
|
|
1312
|
+
if (dataKeyValue) {
|
|
1313
|
+
this.selectionKeys[dataKeyValue] = 1;
|
|
1314
|
+
}
|
|
1315
|
+
}
|
|
1316
|
+
}
|
|
1317
|
+
}
|
|
1318
|
+
}
|
|
1319
|
+
this.tableService.onSelectionChange();
|
|
1320
|
+
if (this.isStateful()) {
|
|
1321
|
+
this.saveState();
|
|
1322
|
+
}
|
|
1323
|
+
}
|
|
1324
|
+
this.rowTouched = false;
|
|
1325
|
+
}
|
|
1326
|
+
handleRowTouchEnd(event) {
|
|
1327
|
+
this.rowTouched = true;
|
|
1328
|
+
}
|
|
1329
|
+
handleRowRightClick(event) {
|
|
1330
|
+
if (this.contextMenu) {
|
|
1331
|
+
const rowData = event.rowData;
|
|
1332
|
+
const rowIndex = event.rowIndex;
|
|
1333
|
+
if (this.contextMenuSelectionMode === 'separate') {
|
|
1334
|
+
this.contextMenuSelection = rowData;
|
|
1335
|
+
this.contextMenuSelectionChange.emit(rowData);
|
|
1336
|
+
this.onContextMenuSelect.emit({ originalEvent: event.originalEvent, data: rowData, index: event.rowIndex });
|
|
1337
|
+
this.contextMenu.show(event.originalEvent);
|
|
1338
|
+
this.tableService.onContextMenu(rowData);
|
|
1339
|
+
}
|
|
1340
|
+
else if (this.contextMenuSelectionMode === 'joint') {
|
|
1341
|
+
this.preventSelectionSetterPropagation = true;
|
|
1342
|
+
let selected = this.isSelected(rowData);
|
|
1343
|
+
let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowData, this.dataKey)) : null;
|
|
1344
|
+
if (!selected) {
|
|
1345
|
+
if (!this.isRowSelectable(rowData, rowIndex)) {
|
|
1346
|
+
return;
|
|
1347
|
+
}
|
|
1348
|
+
if (this.isSingleSelectionMode()) {
|
|
1349
|
+
this.selection = rowData;
|
|
1350
|
+
this.selectionChange.emit(rowData);
|
|
1351
|
+
if (dataKeyValue) {
|
|
1352
|
+
this.selectionKeys = {};
|
|
1353
|
+
this.selectionKeys[dataKeyValue] = 1;
|
|
1354
|
+
}
|
|
1355
|
+
}
|
|
1356
|
+
else if (this.isMultipleSelectionMode()) {
|
|
1357
|
+
this._selection = this.selection ? [...this.selection, rowData] : [rowData];
|
|
1358
|
+
this.selectionChange.emit(this.selection);
|
|
1359
|
+
if (dataKeyValue) {
|
|
1360
|
+
this.selectionKeys[dataKeyValue] = 1;
|
|
1361
|
+
}
|
|
1362
|
+
}
|
|
1363
|
+
}
|
|
1364
|
+
this.tableService.onSelectionChange();
|
|
1365
|
+
this.contextMenu.show(event.originalEvent);
|
|
1366
|
+
this.onContextMenuSelect.emit({ originalEvent: event, data: rowData, index: event.rowIndex });
|
|
1367
|
+
}
|
|
1368
|
+
}
|
|
1369
|
+
}
|
|
1370
|
+
selectRange(event, rowIndex, isMetaKeySelection) {
|
|
1371
|
+
let rangeStart, rangeEnd;
|
|
1372
|
+
if (this.anchorRowIndex > rowIndex) {
|
|
1373
|
+
rangeStart = rowIndex;
|
|
1374
|
+
rangeEnd = this.anchorRowIndex;
|
|
1375
|
+
}
|
|
1376
|
+
else if (this.anchorRowIndex < rowIndex) {
|
|
1377
|
+
rangeStart = this.anchorRowIndex;
|
|
1378
|
+
rangeEnd = rowIndex;
|
|
1379
|
+
}
|
|
1380
|
+
else {
|
|
1381
|
+
rangeStart = rowIndex;
|
|
1382
|
+
rangeEnd = rowIndex;
|
|
1383
|
+
}
|
|
1384
|
+
if (this.lazy && this.paginator) {
|
|
1385
|
+
rangeStart -= this.first;
|
|
1386
|
+
rangeEnd -= this.first;
|
|
1387
|
+
}
|
|
1388
|
+
let rangeRowsData = [];
|
|
1389
|
+
for (let i = rangeStart; i <= rangeEnd; i++) {
|
|
1390
|
+
let rangeRowData = this.filteredValue ? this.filteredValue[i] : this.value[i];
|
|
1391
|
+
if (!this.isSelected(rangeRowData) && !isMetaKeySelection) {
|
|
1392
|
+
if (!this.isRowSelectable(rangeRowData, rowIndex)) {
|
|
1393
|
+
continue;
|
|
1394
|
+
}
|
|
1395
|
+
rangeRowsData.push(rangeRowData);
|
|
1396
|
+
this._selection = [...this.selection, rangeRowData];
|
|
1397
|
+
let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rangeRowData, this.dataKey)) : null;
|
|
1398
|
+
if (dataKeyValue) {
|
|
1399
|
+
this.selectionKeys[dataKeyValue] = 1;
|
|
1400
|
+
}
|
|
1401
|
+
}
|
|
1402
|
+
}
|
|
1403
|
+
this.selectionChange.emit(this.selection);
|
|
1404
|
+
this.onRowSelect.emit({ originalEvent: event, data: rangeRowsData, type: 'row' });
|
|
1405
|
+
}
|
|
1406
|
+
clearSelectionRange(event) {
|
|
1407
|
+
let rangeStart, rangeEnd;
|
|
1408
|
+
let rangeRowIndex = this.rangeRowIndex;
|
|
1409
|
+
let anchorRowIndex = this.anchorRowIndex;
|
|
1410
|
+
if (rangeRowIndex > anchorRowIndex) {
|
|
1411
|
+
rangeStart = this.anchorRowIndex;
|
|
1412
|
+
rangeEnd = this.rangeRowIndex;
|
|
1413
|
+
}
|
|
1414
|
+
else if (rangeRowIndex < anchorRowIndex) {
|
|
1415
|
+
rangeStart = this.rangeRowIndex;
|
|
1416
|
+
rangeEnd = this.anchorRowIndex;
|
|
1417
|
+
}
|
|
1418
|
+
else {
|
|
1419
|
+
rangeStart = this.rangeRowIndex;
|
|
1420
|
+
rangeEnd = this.rangeRowIndex;
|
|
1421
|
+
}
|
|
1422
|
+
for (let i = rangeStart; i <= rangeEnd; i++) {
|
|
1423
|
+
let rangeRowData = this.value[i];
|
|
1424
|
+
let selectionIndex = this.findIndexInSelection(rangeRowData);
|
|
1425
|
+
this._selection = this.selection.filter((val, i) => i != selectionIndex);
|
|
1426
|
+
let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rangeRowData, this.dataKey)) : null;
|
|
1427
|
+
if (dataKeyValue) {
|
|
1428
|
+
delete this.selectionKeys[dataKeyValue];
|
|
1429
|
+
}
|
|
1430
|
+
this.onRowUnselect.emit({ originalEvent: event, data: rangeRowData, type: 'row' });
|
|
1431
|
+
}
|
|
1432
|
+
}
|
|
1433
|
+
isSelected(rowData) {
|
|
1434
|
+
if (rowData && this.selection) {
|
|
1435
|
+
if (this.dataKey) {
|
|
1436
|
+
return this.selectionKeys[ObjectUtils.resolveFieldData(rowData, this.dataKey)] !== undefined;
|
|
1437
|
+
}
|
|
1438
|
+
else {
|
|
1439
|
+
if (Array.isArray(this.selection))
|
|
1440
|
+
return this.findIndexInSelection(rowData) > -1;
|
|
1441
|
+
else
|
|
1442
|
+
return this.equals(rowData, this.selection);
|
|
1443
|
+
}
|
|
1444
|
+
}
|
|
1445
|
+
return false;
|
|
1446
|
+
}
|
|
1447
|
+
findIndexInSelection(rowData) {
|
|
1448
|
+
let index = -1;
|
|
1449
|
+
if (this.selection && this.selection.length) {
|
|
1450
|
+
for (let i = 0; i < this.selection.length; i++) {
|
|
1451
|
+
if (this.equals(rowData, this.selection[i])) {
|
|
1452
|
+
index = i;
|
|
1453
|
+
break;
|
|
1454
|
+
}
|
|
1455
|
+
}
|
|
1456
|
+
}
|
|
1457
|
+
return index;
|
|
1458
|
+
}
|
|
1459
|
+
isRowSelectable(data, index) {
|
|
1460
|
+
if (this.rowSelectable && !this.rowSelectable({ data, index })) {
|
|
1461
|
+
return false;
|
|
1462
|
+
}
|
|
1463
|
+
return true;
|
|
1464
|
+
}
|
|
1465
|
+
toggleRowWithRadio(event, rowData) {
|
|
1466
|
+
this.preventSelectionSetterPropagation = true;
|
|
1467
|
+
if (this.selection != rowData) {
|
|
1468
|
+
if (!this.isRowSelectable(rowData, event.rowIndex)) {
|
|
1469
|
+
return;
|
|
1470
|
+
}
|
|
1471
|
+
this._selection = rowData;
|
|
1472
|
+
this.selectionChange.emit(this.selection);
|
|
1473
|
+
this.onRowSelect.emit({ originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'radiobutton' });
|
|
1474
|
+
if (this.dataKey) {
|
|
1475
|
+
this.selectionKeys = {};
|
|
1476
|
+
this.selectionKeys[String(ObjectUtils.resolveFieldData(rowData, this.dataKey))] = 1;
|
|
1477
|
+
}
|
|
1478
|
+
}
|
|
1479
|
+
else {
|
|
1480
|
+
this._selection = null;
|
|
1481
|
+
this.selectionChange.emit(this.selection);
|
|
1482
|
+
this.onRowUnselect.emit({ originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'radiobutton' });
|
|
1483
|
+
}
|
|
1484
|
+
this.tableService.onSelectionChange();
|
|
1485
|
+
if (this.isStateful()) {
|
|
1486
|
+
this.saveState();
|
|
1487
|
+
}
|
|
1488
|
+
}
|
|
1489
|
+
toggleRowWithCheckbox(event, rowData) {
|
|
1490
|
+
this.selection = this.selection || [];
|
|
1491
|
+
let selected = this.isSelected(rowData);
|
|
1492
|
+
let dataKeyValue = this.dataKey ? String(ObjectUtils.resolveFieldData(rowData, this.dataKey)) : null;
|
|
1493
|
+
this.preventSelectionSetterPropagation = true;
|
|
1494
|
+
if (selected) {
|
|
1495
|
+
let selectionIndex = this.findIndexInSelection(rowData);
|
|
1496
|
+
this._selection = this.selection.filter((val, i) => i != selectionIndex);
|
|
1497
|
+
this.selectionChange.emit(this.selection);
|
|
1498
|
+
this.onRowUnselect.emit({ originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'checkbox' });
|
|
1499
|
+
if (dataKeyValue) {
|
|
1500
|
+
delete this.selectionKeys[dataKeyValue];
|
|
1501
|
+
}
|
|
1502
|
+
}
|
|
1503
|
+
else {
|
|
1504
|
+
if (!this.isRowSelectable(rowData, event.rowIndex)) {
|
|
1505
|
+
return;
|
|
1506
|
+
}
|
|
1507
|
+
this._selection = this.selection ? [...this.selection, rowData] : [rowData];
|
|
1508
|
+
this.selectionChange.emit(this.selection);
|
|
1509
|
+
this.onRowSelect.emit({ originalEvent: event.originalEvent, index: event.rowIndex, data: rowData, type: 'checkbox' });
|
|
1510
|
+
if (dataKeyValue) {
|
|
1511
|
+
this.selectionKeys[dataKeyValue] = 1;
|
|
1512
|
+
}
|
|
1513
|
+
}
|
|
1514
|
+
this.tableService.onSelectionChange();
|
|
1515
|
+
if (this.isStateful()) {
|
|
1516
|
+
this.saveState();
|
|
1517
|
+
}
|
|
1518
|
+
}
|
|
1519
|
+
toggleRowsWithCheckbox(event, check) {
|
|
1520
|
+
if (this._selectAll !== null) {
|
|
1521
|
+
this.selectAllChange.emit({ originalEvent: event, checked: check });
|
|
1522
|
+
}
|
|
1523
|
+
else {
|
|
1524
|
+
const data = this.selectionPageOnly ? this.dataToRender(this.processedData) : this.processedData;
|
|
1525
|
+
let selection = this.selectionPageOnly && this._selection ? this._selection.filter((s) => !data.some((d) => this.equals(s, d))) : [];
|
|
1526
|
+
if (check) {
|
|
1527
|
+
selection = this.frozenValue ? [...selection, ...this.frozenValue, ...data] : [...selection, ...data];
|
|
1528
|
+
selection = this.rowSelectable ? selection.filter((data, index) => this.rowSelectable({ data, index })) : selection;
|
|
1529
|
+
}
|
|
1530
|
+
this._selection = selection;
|
|
1531
|
+
this.preventSelectionSetterPropagation = true;
|
|
1532
|
+
this.updateSelectionKeys();
|
|
1533
|
+
this.selectionChange.emit(this._selection);
|
|
1534
|
+
this.tableService.onSelectionChange();
|
|
1535
|
+
this.onHeaderCheckboxToggle.emit({ originalEvent: event, checked: check });
|
|
1536
|
+
if (this.isStateful()) {
|
|
1537
|
+
this.saveState();
|
|
1538
|
+
}
|
|
1539
|
+
}
|
|
1540
|
+
}
|
|
1541
|
+
equals(data1, data2) {
|
|
1542
|
+
return this.compareSelectionBy === 'equals' ? data1 === data2 : ObjectUtils.equals(data1, data2, this.dataKey);
|
|
1543
|
+
}
|
|
1544
|
+
/* Legacy Filtering for custom elements */
|
|
1545
|
+
filter(value, field, matchMode) {
|
|
1546
|
+
if (this.filterTimeout) {
|
|
1547
|
+
clearTimeout(this.filterTimeout);
|
|
1548
|
+
}
|
|
1549
|
+
if (!this.isFilterBlank(value)) {
|
|
1550
|
+
this.filters[field] = { value: value, matchMode: matchMode };
|
|
1551
|
+
}
|
|
1552
|
+
else if (this.filters[field]) {
|
|
1553
|
+
delete this.filters[field];
|
|
1554
|
+
}
|
|
1555
|
+
this.filterTimeout = setTimeout(() => {
|
|
1556
|
+
this._filter();
|
|
1557
|
+
this.filterTimeout = null;
|
|
1558
|
+
}, this.filterDelay);
|
|
1559
|
+
this.anchorRowIndex = null;
|
|
1560
|
+
}
|
|
1561
|
+
filterGlobal(value, matchMode) {
|
|
1562
|
+
this.filter(value, 'global', matchMode);
|
|
1563
|
+
}
|
|
1564
|
+
isFilterBlank(filter) {
|
|
1565
|
+
if (filter !== null && filter !== undefined) {
|
|
1566
|
+
if ((typeof filter === 'string' && filter.trim().length == 0) || (Array.isArray(filter) && filter.length == 0))
|
|
1567
|
+
return true;
|
|
1568
|
+
else
|
|
1569
|
+
return false;
|
|
1570
|
+
}
|
|
1571
|
+
return true;
|
|
1572
|
+
}
|
|
1573
|
+
_filter() {
|
|
1574
|
+
if (!this.restoringFilter) {
|
|
1575
|
+
this.first = 0;
|
|
1576
|
+
this.firstChange.emit(this.first);
|
|
1577
|
+
}
|
|
1578
|
+
if (this.lazy) {
|
|
1579
|
+
this.onLazyLoad.emit(this.createLazyLoadMetadata());
|
|
1580
|
+
}
|
|
1581
|
+
else {
|
|
1582
|
+
if (!this.value) {
|
|
1583
|
+
return;
|
|
1584
|
+
}
|
|
1585
|
+
if (!this.hasFilter()) {
|
|
1586
|
+
this.filteredValue = null;
|
|
1587
|
+
if (this.paginator) {
|
|
1588
|
+
this.totalRecords = this.value ? this.value.length : 0;
|
|
1589
|
+
}
|
|
1590
|
+
}
|
|
1591
|
+
else {
|
|
1592
|
+
let globalFilterFieldsArray;
|
|
1593
|
+
if (this.filters['global']) {
|
|
1594
|
+
if (!this.columns && !this.globalFilterFields)
|
|
1595
|
+
throw new Error('Global filtering requires dynamic columns or globalFilterFields to be defined.');
|
|
1596
|
+
else
|
|
1597
|
+
globalFilterFieldsArray = this.globalFilterFields || this.columns;
|
|
1598
|
+
}
|
|
1599
|
+
this.filteredValue = [];
|
|
1600
|
+
for (let i = 0; i < this.value.length; i++) {
|
|
1601
|
+
let localMatch = true;
|
|
1602
|
+
let globalMatch = false;
|
|
1603
|
+
let localFiltered = false;
|
|
1604
|
+
for (let prop in this.filters) {
|
|
1605
|
+
if (this.filters.hasOwnProperty(prop) && prop !== 'global') {
|
|
1606
|
+
localFiltered = true;
|
|
1607
|
+
let filterField = prop;
|
|
1608
|
+
let filterMeta = this.filters[filterField];
|
|
1609
|
+
if (Array.isArray(filterMeta)) {
|
|
1610
|
+
for (let meta of filterMeta) {
|
|
1611
|
+
localMatch = this.executeLocalFilter(filterField, this.value[i], meta);
|
|
1612
|
+
if ((meta.operator === FilterOperator.OR && localMatch) || (meta.operator === FilterOperator.AND && !localMatch)) {
|
|
1613
|
+
break;
|
|
1614
|
+
}
|
|
1615
|
+
}
|
|
1616
|
+
}
|
|
1617
|
+
else {
|
|
1618
|
+
localMatch = this.executeLocalFilter(filterField, this.value[i], filterMeta);
|
|
1619
|
+
}
|
|
1620
|
+
if (!localMatch) {
|
|
1621
|
+
break;
|
|
1622
|
+
}
|
|
1623
|
+
}
|
|
1624
|
+
}
|
|
1625
|
+
if (this.filters['global'] && !globalMatch && globalFilterFieldsArray) {
|
|
1626
|
+
for (let j = 0; j < globalFilterFieldsArray.length; j++) {
|
|
1627
|
+
let globalFilterField = globalFilterFieldsArray[j].field || globalFilterFieldsArray[j];
|
|
1628
|
+
globalMatch = this.filterService.filters[this.filters['global'].matchMode](ObjectUtils.resolveFieldData(this.value[i], globalFilterField), this.filters['global'].value, this.filterLocale);
|
|
1629
|
+
if (globalMatch) {
|
|
1630
|
+
break;
|
|
1631
|
+
}
|
|
1632
|
+
}
|
|
1633
|
+
}
|
|
1634
|
+
let matches;
|
|
1635
|
+
if (this.filters['global']) {
|
|
1636
|
+
matches = localFiltered ? localFiltered && localMatch && globalMatch : globalMatch;
|
|
1637
|
+
}
|
|
1638
|
+
else {
|
|
1639
|
+
matches = localFiltered && localMatch;
|
|
1640
|
+
}
|
|
1641
|
+
if (matches) {
|
|
1642
|
+
this.filteredValue.push(this.value[i]);
|
|
1643
|
+
}
|
|
1644
|
+
}
|
|
1645
|
+
if (this.filteredValue.length === this.value.length) {
|
|
1646
|
+
this.filteredValue = null;
|
|
1647
|
+
}
|
|
1648
|
+
if (this.paginator) {
|
|
1649
|
+
this.totalRecords = this.filteredValue ? this.filteredValue.length : this.value ? this.value.length : 0;
|
|
1650
|
+
}
|
|
1651
|
+
}
|
|
1652
|
+
}
|
|
1653
|
+
this.onFilter.emit({
|
|
1654
|
+
filters: this.filters,
|
|
1655
|
+
filteredValue: this.filteredValue || this.value
|
|
1656
|
+
});
|
|
1657
|
+
this.tableService.onValueChange(this.value);
|
|
1658
|
+
if (this.isStateful() && !this.restoringFilter) {
|
|
1659
|
+
this.saveState();
|
|
1660
|
+
}
|
|
1661
|
+
if (this.restoringFilter) {
|
|
1662
|
+
this.restoringFilter = false;
|
|
1663
|
+
}
|
|
1664
|
+
this.cd.markForCheck();
|
|
1665
|
+
if (this.scrollable) {
|
|
1666
|
+
this.resetScrollTop();
|
|
1667
|
+
}
|
|
1668
|
+
}
|
|
1669
|
+
executeLocalFilter(field, rowData, filterMeta) {
|
|
1670
|
+
let filterValue = filterMeta.value;
|
|
1671
|
+
let filterMatchMode = filterMeta.matchMode || FilterMatchMode.STARTS_WITH;
|
|
1672
|
+
let dataFieldValue = ObjectUtils.resolveFieldData(rowData, field);
|
|
1673
|
+
let filterConstraint = this.filterService.filters[filterMatchMode];
|
|
1674
|
+
return filterConstraint(dataFieldValue, filterValue, this.filterLocale);
|
|
1675
|
+
}
|
|
1676
|
+
hasFilter() {
|
|
1677
|
+
let empty = true;
|
|
1678
|
+
for (let prop in this.filters) {
|
|
1679
|
+
if (this.filters.hasOwnProperty(prop)) {
|
|
1680
|
+
empty = false;
|
|
1681
|
+
break;
|
|
1682
|
+
}
|
|
1683
|
+
}
|
|
1684
|
+
return !empty;
|
|
1685
|
+
}
|
|
1686
|
+
createLazyLoadMetadata() {
|
|
1687
|
+
return {
|
|
1688
|
+
first: this.first,
|
|
1689
|
+
rows: this.rows,
|
|
1690
|
+
sortField: this.sortField,
|
|
1691
|
+
sortOrder: this.sortOrder,
|
|
1692
|
+
filters: this.filters,
|
|
1693
|
+
globalFilter: this.filters && this.filters['global'] ? this.filters['global'].value : null,
|
|
1694
|
+
multiSortMeta: this.multiSortMeta,
|
|
1695
|
+
forceUpdate: () => this.cd.detectChanges()
|
|
1696
|
+
};
|
|
1697
|
+
}
|
|
1698
|
+
clear() {
|
|
1699
|
+
this._sortField = null;
|
|
1700
|
+
this._sortOrder = this.defaultSortOrder;
|
|
1701
|
+
this._multiSortMeta = null;
|
|
1702
|
+
this.tableService.onSort(null);
|
|
1703
|
+
this.clearFilterValues();
|
|
1704
|
+
this.filteredValue = null;
|
|
1705
|
+
this.first = 0;
|
|
1706
|
+
this.firstChange.emit(this.first);
|
|
1707
|
+
if (this.lazy) {
|
|
1708
|
+
this.onLazyLoad.emit(this.createLazyLoadMetadata());
|
|
1709
|
+
}
|
|
1710
|
+
else {
|
|
1711
|
+
this.totalRecords = this._value ? this._value.length : 0;
|
|
1712
|
+
}
|
|
1713
|
+
}
|
|
1714
|
+
clearFilterValues() {
|
|
1715
|
+
for (const [, filterMetadata] of Object.entries(this.filters)) {
|
|
1716
|
+
if (Array.isArray(filterMetadata)) {
|
|
1717
|
+
for (let filter of filterMetadata) {
|
|
1718
|
+
filter.value = null;
|
|
1719
|
+
}
|
|
1720
|
+
}
|
|
1721
|
+
else if (filterMetadata) {
|
|
1722
|
+
filterMetadata.value = null;
|
|
1723
|
+
}
|
|
1724
|
+
}
|
|
1725
|
+
}
|
|
1726
|
+
reset() {
|
|
1727
|
+
this.clear();
|
|
1728
|
+
}
|
|
1729
|
+
getExportHeader(column) {
|
|
1730
|
+
return column[this.exportHeader] || column.header || column.field;
|
|
1731
|
+
}
|
|
1732
|
+
/**
|
|
1733
|
+
* Data export method.
|
|
1734
|
+
* @param {ExportCSVOptions} object - Export options.
|
|
1735
|
+
* @group Method
|
|
1736
|
+
*/
|
|
1737
|
+
exportCSV(options) {
|
|
1738
|
+
let data;
|
|
1739
|
+
let csv = '';
|
|
1740
|
+
let columns = this.columns;
|
|
1741
|
+
if (options && options.selectionOnly) {
|
|
1742
|
+
data = this.selection || [];
|
|
1743
|
+
}
|
|
1744
|
+
else if (options && options.allValues) {
|
|
1745
|
+
data = this.value || [];
|
|
1746
|
+
}
|
|
1747
|
+
else {
|
|
1748
|
+
data = this.filteredValue || this.value;
|
|
1749
|
+
if (this.frozenValue) {
|
|
1750
|
+
data = data ? [...this.frozenValue, ...data] : this.frozenValue;
|
|
1751
|
+
}
|
|
1752
|
+
}
|
|
1753
|
+
const exportableColumns = columns.filter((column) => column.exportable !== false && column.field);
|
|
1754
|
+
//headers
|
|
1755
|
+
csv += exportableColumns.map((column) => '"' + this.getExportHeader(column) + '"').join(this.csvSeparator);
|
|
1756
|
+
//body
|
|
1757
|
+
const body = data
|
|
1758
|
+
.map((record) => exportableColumns
|
|
1759
|
+
.map((column) => {
|
|
1760
|
+
let cellData = ObjectUtils.resolveFieldData(record, column.field);
|
|
1761
|
+
if (cellData != null) {
|
|
1762
|
+
if (this.exportFunction) {
|
|
1763
|
+
cellData = this.exportFunction({
|
|
1764
|
+
data: cellData,
|
|
1765
|
+
field: column.field
|
|
1766
|
+
});
|
|
1767
|
+
}
|
|
1768
|
+
else
|
|
1769
|
+
cellData = String(cellData).replace(/"/g, '""');
|
|
1770
|
+
}
|
|
1771
|
+
else
|
|
1772
|
+
cellData = '';
|
|
1773
|
+
return '"' + cellData + '"';
|
|
1774
|
+
})
|
|
1775
|
+
.join(this.csvSeparator))
|
|
1776
|
+
.join('\n');
|
|
1777
|
+
if (body.length) {
|
|
1778
|
+
csv += '\n' + body;
|
|
1779
|
+
}
|
|
1780
|
+
let blob = new Blob([new Uint8Array([0xef, 0xbb, 0xbf]), csv], {
|
|
1781
|
+
type: 'text/csv;charset=utf-8;'
|
|
1782
|
+
});
|
|
1783
|
+
let link = this.renderer.createElement('a');
|
|
1784
|
+
link.style.display = 'none';
|
|
1785
|
+
this.renderer.appendChild(this.document.body, link);
|
|
1786
|
+
if (link.download !== undefined) {
|
|
1787
|
+
link.setAttribute('href', URL.createObjectURL(blob));
|
|
1788
|
+
link.setAttribute('download', this.exportFilename + '.csv');
|
|
1789
|
+
link.click();
|
|
1790
|
+
}
|
|
1791
|
+
else {
|
|
1792
|
+
csv = 'data:text/csv;charset=utf-8,' + csv;
|
|
1793
|
+
this.window.open(encodeURI(csv));
|
|
1794
|
+
}
|
|
1795
|
+
this.renderer.removeChild(this.document.body, link);
|
|
1796
|
+
}
|
|
1797
|
+
onLazyItemLoad(event) {
|
|
1798
|
+
this.onLazyLoad.emit({
|
|
1799
|
+
...this.createLazyLoadMetadata(),
|
|
1800
|
+
...event,
|
|
1801
|
+
rows: event.last - event.first
|
|
1802
|
+
});
|
|
1803
|
+
}
|
|
1804
|
+
/**
|
|
1805
|
+
* Resets scroll to top.
|
|
1806
|
+
* @group Method
|
|
1807
|
+
*/
|
|
1808
|
+
resetScrollTop() {
|
|
1809
|
+
if (this.virtualScroll)
|
|
1810
|
+
this.scrollToVirtualIndex(0);
|
|
1811
|
+
else
|
|
1812
|
+
this.scrollTo({ top: 0 });
|
|
1813
|
+
}
|
|
1814
|
+
/**
|
|
1815
|
+
* Scrolls to given index when using virtual scroll.
|
|
1816
|
+
* @param {number} index - index of the element.
|
|
1817
|
+
* @group Method
|
|
1818
|
+
*/
|
|
1819
|
+
scrollToVirtualIndex(index) {
|
|
1820
|
+
this.scroller && this.scroller.scrollToIndex(index);
|
|
1821
|
+
}
|
|
1822
|
+
/**
|
|
1823
|
+
* Scrolls to given index.
|
|
1824
|
+
* @param {ScrollToOptions} options - scroll options.
|
|
1825
|
+
* @group Method
|
|
1826
|
+
*/
|
|
1827
|
+
scrollTo(options) {
|
|
1828
|
+
if (this.virtualScroll) {
|
|
1829
|
+
this.scroller?.scrollTo(options);
|
|
1830
|
+
}
|
|
1831
|
+
else if (this.wrapperViewChild && this.wrapperViewChild.nativeElement) {
|
|
1832
|
+
if (this.wrapperViewChild.nativeElement.scrollTo) {
|
|
1833
|
+
this.wrapperViewChild.nativeElement.scrollTo(options);
|
|
1834
|
+
}
|
|
1835
|
+
else {
|
|
1836
|
+
this.wrapperViewChild.nativeElement.scrollLeft = options.left;
|
|
1837
|
+
this.wrapperViewChild.nativeElement.scrollTop = options.top;
|
|
1838
|
+
}
|
|
1839
|
+
}
|
|
1840
|
+
}
|
|
1841
|
+
updateEditingCell(cell, data, field, index) {
|
|
1842
|
+
this.editingCell = cell;
|
|
1843
|
+
this.editingCellData = data;
|
|
1844
|
+
this.editingCellField = field;
|
|
1845
|
+
this.editingCellRowIndex = index;
|
|
1846
|
+
this.bindDocumentEditListener();
|
|
1847
|
+
}
|
|
1848
|
+
isEditingCellValid() {
|
|
1849
|
+
return this.editingCell && DomHandler.find(this.editingCell, '.ng-invalid.ng-dirty').length === 0;
|
|
1850
|
+
}
|
|
1851
|
+
bindDocumentEditListener() {
|
|
1852
|
+
if (!this.documentEditListener) {
|
|
1853
|
+
this.documentEditListener = this.renderer.listen(this.document, 'click', (event) => {
|
|
1854
|
+
if (this.editingCell && !this.selfClick && this.isEditingCellValid()) {
|
|
1855
|
+
DomHandler.removeClass(this.editingCell, 'cax-cell-editing');
|
|
1856
|
+
this.editingCell = null;
|
|
1857
|
+
this.onEditComplete.emit({ field: this.editingCellField, data: this.editingCellData, originalEvent: event, index: this.editingCellRowIndex });
|
|
1858
|
+
this.editingCellField = null;
|
|
1859
|
+
this.editingCellData = null;
|
|
1860
|
+
this.editingCellRowIndex = null;
|
|
1861
|
+
this.unbindDocumentEditListener();
|
|
1862
|
+
this.cd.markForCheck();
|
|
1863
|
+
if (this.overlaySubscription) {
|
|
1864
|
+
this.overlaySubscription.unsubscribe();
|
|
1865
|
+
}
|
|
1866
|
+
}
|
|
1867
|
+
this.selfClick = false;
|
|
1868
|
+
});
|
|
1869
|
+
}
|
|
1870
|
+
}
|
|
1871
|
+
unbindDocumentEditListener() {
|
|
1872
|
+
if (this.documentEditListener) {
|
|
1873
|
+
this.documentEditListener();
|
|
1874
|
+
this.documentEditListener = null;
|
|
1875
|
+
}
|
|
1876
|
+
}
|
|
1877
|
+
initRowEdit(rowData) {
|
|
1878
|
+
let dataKeyValue = String(ObjectUtils.resolveFieldData(rowData, this.dataKey));
|
|
1879
|
+
this.editingRowKeys[dataKeyValue] = true;
|
|
1880
|
+
}
|
|
1881
|
+
saveRowEdit(rowData, rowElement) {
|
|
1882
|
+
if (DomHandler.find(rowElement, '.ng-invalid.ng-dirty').length === 0) {
|
|
1883
|
+
let dataKeyValue = String(ObjectUtils.resolveFieldData(rowData, this.dataKey));
|
|
1884
|
+
delete this.editingRowKeys[dataKeyValue];
|
|
1885
|
+
}
|
|
1886
|
+
}
|
|
1887
|
+
cancelRowEdit(rowData) {
|
|
1888
|
+
let dataKeyValue = String(ObjectUtils.resolveFieldData(rowData, this.dataKey));
|
|
1889
|
+
delete this.editingRowKeys[dataKeyValue];
|
|
1890
|
+
}
|
|
1891
|
+
toggleRow(rowData, event) {
|
|
1892
|
+
if (!this.dataKey && !this.groupRowsBy) {
|
|
1893
|
+
throw new Error('dataKey or groupRowsBy must be defined to use row expansion');
|
|
1894
|
+
}
|
|
1895
|
+
let dataKeyValue = this.groupRowsBy ? String(ObjectUtils.resolveFieldData(rowData, this.groupRowsBy)) : String(ObjectUtils.resolveFieldData(rowData, this.dataKey));
|
|
1896
|
+
if (this.expandedRowKeys[dataKeyValue] != null) {
|
|
1897
|
+
delete this.expandedRowKeys[dataKeyValue];
|
|
1898
|
+
this.onRowCollapse.emit({
|
|
1899
|
+
originalEvent: event,
|
|
1900
|
+
data: rowData
|
|
1901
|
+
});
|
|
1902
|
+
}
|
|
1903
|
+
else {
|
|
1904
|
+
if (this.rowExpandMode === 'single') {
|
|
1905
|
+
this.expandedRowKeys = {};
|
|
1906
|
+
}
|
|
1907
|
+
this.expandedRowKeys[dataKeyValue] = true;
|
|
1908
|
+
this.onRowExpand.emit({
|
|
1909
|
+
originalEvent: event,
|
|
1910
|
+
data: rowData
|
|
1911
|
+
});
|
|
1912
|
+
}
|
|
1913
|
+
if (event) {
|
|
1914
|
+
event.preventDefault();
|
|
1915
|
+
}
|
|
1916
|
+
if (this.isStateful()) {
|
|
1917
|
+
this.saveState();
|
|
1918
|
+
}
|
|
1919
|
+
}
|
|
1920
|
+
isRowExpanded(rowData) {
|
|
1921
|
+
return this.groupRowsBy ? this.expandedRowKeys[String(ObjectUtils.resolveFieldData(rowData, this.groupRowsBy))] === true : this.expandedRowKeys[String(ObjectUtils.resolveFieldData(rowData, this.dataKey))] === true;
|
|
1922
|
+
}
|
|
1923
|
+
isRowEditing(rowData) {
|
|
1924
|
+
return this.editingRowKeys[String(ObjectUtils.resolveFieldData(rowData, this.dataKey))] === true;
|
|
1925
|
+
}
|
|
1926
|
+
isSingleSelectionMode() {
|
|
1927
|
+
return this.selectionMode === 'single';
|
|
1928
|
+
}
|
|
1929
|
+
isMultipleSelectionMode() {
|
|
1930
|
+
return this.selectionMode === 'multiple';
|
|
1931
|
+
}
|
|
1932
|
+
onColumnResizeBegin(event) {
|
|
1933
|
+
let containerLeft = DomHandler.getOffset(this.containerViewChild?.nativeElement).left;
|
|
1934
|
+
this.resizeColumnElement = event.target.parentElement;
|
|
1935
|
+
this.columnResizing = true;
|
|
1936
|
+
if (event.type == 'touchstart') {
|
|
1937
|
+
this.lastResizerHelperX = event.changedTouches[0].clientX - containerLeft + this.containerViewChild?.nativeElement.scrollLeft;
|
|
1938
|
+
}
|
|
1939
|
+
else {
|
|
1940
|
+
this.lastResizerHelperX = event.pageX - containerLeft + this.containerViewChild?.nativeElement.scrollLeft;
|
|
1941
|
+
}
|
|
1942
|
+
this.onColumnResize(event);
|
|
1943
|
+
event.preventDefault();
|
|
1944
|
+
}
|
|
1945
|
+
onColumnResize(event) {
|
|
1946
|
+
let containerLeft = DomHandler.getOffset(this.containerViewChild?.nativeElement).left;
|
|
1947
|
+
DomHandler.addClass(this.containerViewChild?.nativeElement, 'cax-unselectable-text');
|
|
1948
|
+
this.resizeHelperViewChild.nativeElement.style.height = this.containerViewChild?.nativeElement.offsetHeight + 'px';
|
|
1949
|
+
this.resizeHelperViewChild.nativeElement.style.top = 0 + 'px';
|
|
1950
|
+
if (event.type == 'touchmove') {
|
|
1951
|
+
this.resizeHelperViewChild.nativeElement.style.left = event.changedTouches[0].clientX - containerLeft + this.containerViewChild?.nativeElement.scrollLeft + 'px';
|
|
1952
|
+
}
|
|
1953
|
+
else {
|
|
1954
|
+
this.resizeHelperViewChild.nativeElement.style.left = event.pageX - containerLeft + this.containerViewChild?.nativeElement.scrollLeft + 'px';
|
|
1955
|
+
}
|
|
1956
|
+
this.resizeHelperViewChild.nativeElement.style.display = 'block';
|
|
1957
|
+
}
|
|
1958
|
+
onColumnResizeEnd() {
|
|
1959
|
+
let delta = this.resizeHelperViewChild?.nativeElement.offsetLeft - this.lastResizerHelperX;
|
|
1960
|
+
let columnWidth = this.resizeColumnElement.offsetWidth;
|
|
1961
|
+
let newColumnWidth = columnWidth + delta;
|
|
1962
|
+
let minWidth = this.resizeColumnElement.style.minWidth.replace(/[^\d.]/g, '') || 15;
|
|
1963
|
+
if (newColumnWidth >= minWidth) {
|
|
1964
|
+
if (this.columnResizeMode === 'fit') {
|
|
1965
|
+
let nextColumn = this.resizeColumnElement.nextElementSibling;
|
|
1966
|
+
let nextColumnWidth = nextColumn.offsetWidth - delta;
|
|
1967
|
+
if (newColumnWidth > 15 && nextColumnWidth > 15) {
|
|
1968
|
+
this.resizeTableCells(newColumnWidth, nextColumnWidth);
|
|
1969
|
+
}
|
|
1970
|
+
}
|
|
1971
|
+
else if (this.columnResizeMode === 'expand') {
|
|
1972
|
+
this._initialColWidths = this._totalTableWidth();
|
|
1973
|
+
let tableWidth = this.tableViewChild?.nativeElement.offsetWidth + delta;
|
|
1974
|
+
this.setResizeTableWidth(tableWidth + 'px');
|
|
1975
|
+
this.resizeTableCells(newColumnWidth, null);
|
|
1976
|
+
}
|
|
1977
|
+
this.onColResize.emit({
|
|
1978
|
+
element: this.resizeColumnElement,
|
|
1979
|
+
delta: delta
|
|
1980
|
+
});
|
|
1981
|
+
if (this.isStateful()) {
|
|
1982
|
+
this.saveState();
|
|
1983
|
+
}
|
|
1984
|
+
}
|
|
1985
|
+
this.resizeHelperViewChild.nativeElement.style.display = 'none';
|
|
1986
|
+
DomHandler.removeClass(this.containerViewChild?.nativeElement, 'cax-unselectable-text');
|
|
1987
|
+
}
|
|
1988
|
+
_totalTableWidth() {
|
|
1989
|
+
let widths = [];
|
|
1990
|
+
const tableHead = DomHandler.findSingle(this.containerViewChild.nativeElement, '.cax-datatable-thead');
|
|
1991
|
+
let headers = DomHandler.find(tableHead, 'tr > th');
|
|
1992
|
+
headers.forEach((header) => widths.push(DomHandler.getOuterWidth(header)));
|
|
1993
|
+
return widths;
|
|
1994
|
+
}
|
|
1995
|
+
onColumnDragStart(event, columnElement) {
|
|
1996
|
+
this.reorderIconWidth = DomHandler.getHiddenElementOuterWidth(this.reorderIndicatorUpViewChild?.nativeElement);
|
|
1997
|
+
this.reorderIconHeight = DomHandler.getHiddenElementOuterHeight(this.reorderIndicatorDownViewChild?.nativeElement);
|
|
1998
|
+
this.draggedColumn = columnElement;
|
|
1999
|
+
event.dataTransfer.setData('text', 'b'); // For firefox
|
|
2000
|
+
}
|
|
2001
|
+
onColumnDragEnter(event, dropHeader) {
|
|
2002
|
+
if (this.reorderableColumns && this.draggedColumn && dropHeader) {
|
|
2003
|
+
event.preventDefault();
|
|
2004
|
+
let containerOffset = DomHandler.getOffset(this.containerViewChild?.nativeElement);
|
|
2005
|
+
let dropHeaderOffset = DomHandler.getOffset(dropHeader);
|
|
2006
|
+
if (this.draggedColumn != dropHeader) {
|
|
2007
|
+
let dragIndex = DomHandler.indexWithinGroup(this.draggedColumn, 'caxreorderablecolumn');
|
|
2008
|
+
let dropIndex = DomHandler.indexWithinGroup(dropHeader, 'caxreorderablecolumn');
|
|
2009
|
+
let targetLeft = dropHeaderOffset.left - containerOffset.left;
|
|
2010
|
+
let targetTop = containerOffset.top - dropHeaderOffset.top;
|
|
2011
|
+
let columnCenter = dropHeaderOffset.left + dropHeader.offsetWidth / 2;
|
|
2012
|
+
this.reorderIndicatorUpViewChild.nativeElement.style.top = dropHeaderOffset.top - containerOffset.top - (this.reorderIconHeight - 1) + 'px';
|
|
2013
|
+
this.reorderIndicatorDownViewChild.nativeElement.style.top = dropHeaderOffset.top - containerOffset.top + dropHeader.offsetHeight + 'px';
|
|
2014
|
+
if (event.pageX > columnCenter) {
|
|
2015
|
+
this.reorderIndicatorUpViewChild.nativeElement.style.left = targetLeft + dropHeader.offsetWidth - Math.ceil(this.reorderIconWidth / 2) + 'px';
|
|
2016
|
+
this.reorderIndicatorDownViewChild.nativeElement.style.left = targetLeft + dropHeader.offsetWidth - Math.ceil(this.reorderIconWidth / 2) + 'px';
|
|
2017
|
+
this.dropPosition = 1;
|
|
2018
|
+
}
|
|
2019
|
+
else {
|
|
2020
|
+
this.reorderIndicatorUpViewChild.nativeElement.style.left = targetLeft - Math.ceil(this.reorderIconWidth / 2) + 'px';
|
|
2021
|
+
this.reorderIndicatorDownViewChild.nativeElement.style.left = targetLeft - Math.ceil(this.reorderIconWidth / 2) + 'px';
|
|
2022
|
+
this.dropPosition = -1;
|
|
2023
|
+
}
|
|
2024
|
+
this.reorderIndicatorUpViewChild.nativeElement.style.display = 'block';
|
|
2025
|
+
this.reorderIndicatorDownViewChild.nativeElement.style.display = 'block';
|
|
2026
|
+
}
|
|
2027
|
+
else {
|
|
2028
|
+
event.dataTransfer.dropEffect = 'none';
|
|
2029
|
+
}
|
|
2030
|
+
}
|
|
2031
|
+
}
|
|
2032
|
+
onColumnDragLeave(event) {
|
|
2033
|
+
if (this.reorderableColumns && this.draggedColumn) {
|
|
2034
|
+
event.preventDefault();
|
|
2035
|
+
}
|
|
2036
|
+
}
|
|
2037
|
+
onColumnDrop(event, dropColumn) {
|
|
2038
|
+
event.preventDefault();
|
|
2039
|
+
if (this.draggedColumn) {
|
|
2040
|
+
let dragIndex = DomHandler.indexWithinGroup(this.draggedColumn, 'caxreorderablecolumn');
|
|
2041
|
+
let dropIndex = DomHandler.indexWithinGroup(dropColumn, 'caxreorderablecolumn');
|
|
2042
|
+
let allowDrop = dragIndex != dropIndex;
|
|
2043
|
+
if (allowDrop && ((dropIndex - dragIndex == 1 && this.dropPosition === -1) || (dragIndex - dropIndex == 1 && this.dropPosition === 1))) {
|
|
2044
|
+
allowDrop = false;
|
|
2045
|
+
}
|
|
2046
|
+
if (allowDrop && dropIndex < dragIndex && this.dropPosition === 1) {
|
|
2047
|
+
dropIndex = dropIndex + 1;
|
|
2048
|
+
}
|
|
2049
|
+
if (allowDrop && dropIndex > dragIndex && this.dropPosition === -1) {
|
|
2050
|
+
dropIndex = dropIndex - 1;
|
|
2051
|
+
}
|
|
2052
|
+
if (allowDrop) {
|
|
2053
|
+
ObjectUtils.reorderArray(this.columns, dragIndex, dropIndex);
|
|
2054
|
+
this.onColReorder.emit({
|
|
2055
|
+
dragIndex: dragIndex,
|
|
2056
|
+
dropIndex: dropIndex,
|
|
2057
|
+
columns: this.columns
|
|
2058
|
+
});
|
|
2059
|
+
if (this.isStateful()) {
|
|
2060
|
+
this.zone.runOutsideAngular(() => {
|
|
2061
|
+
setTimeout(() => {
|
|
2062
|
+
this.saveState();
|
|
2063
|
+
});
|
|
2064
|
+
});
|
|
2065
|
+
}
|
|
2066
|
+
}
|
|
2067
|
+
if (this.resizableColumns && this.resizeColumnElement) {
|
|
2068
|
+
let width = this.columnResizeMode === 'expand' ? this._initialColWidths : this._totalTableWidth();
|
|
2069
|
+
ObjectUtils.reorderArray(width, dragIndex + 1, dropIndex + 1);
|
|
2070
|
+
this.updateStyleElement(width, dragIndex, null, null);
|
|
2071
|
+
}
|
|
2072
|
+
this.reorderIndicatorUpViewChild.nativeElement.style.display = 'none';
|
|
2073
|
+
this.reorderIndicatorDownViewChild.nativeElement.style.display = 'none';
|
|
2074
|
+
this.draggedColumn.draggable = false;
|
|
2075
|
+
this.draggedColumn = null;
|
|
2076
|
+
this.dropPosition = null;
|
|
2077
|
+
}
|
|
2078
|
+
}
|
|
2079
|
+
resizeTableCells(newColumnWidth, nextColumnWidth) {
|
|
2080
|
+
let colIndex = DomHandler.index(this.resizeColumnElement);
|
|
2081
|
+
let width = this.columnResizeMode === 'expand' ? this._initialColWidths : this._totalTableWidth();
|
|
2082
|
+
this.updateStyleElement(width, colIndex, newColumnWidth, nextColumnWidth);
|
|
2083
|
+
}
|
|
2084
|
+
updateStyleElement(width, colIndex, newColumnWidth, nextColumnWidth) {
|
|
2085
|
+
this.destroyStyleElement();
|
|
2086
|
+
this.createStyleElement();
|
|
2087
|
+
let innerHTML = '';
|
|
2088
|
+
width.forEach((width, index) => {
|
|
2089
|
+
let colWidth = index === colIndex ? newColumnWidth : nextColumnWidth && index === colIndex + 1 ? nextColumnWidth : width;
|
|
2090
|
+
let style = `width: ${colWidth}px !important; max-width: ${colWidth}px !important;`;
|
|
2091
|
+
innerHTML += `
|
|
2092
|
+
#${this.id}-table > .cax-datatable-thead > tr > th:nth-child(${index + 1}),
|
|
2093
|
+
#${this.id}-table > .cax-datatable-tbody > tr > td:nth-child(${index + 1}),
|
|
2094
|
+
#${this.id}-table > .cax-datatable-tfoot > tr > td:nth-child(${index + 1}) {
|
|
2095
|
+
${style}
|
|
2096
|
+
}
|
|
2097
|
+
`;
|
|
2098
|
+
});
|
|
2099
|
+
this.renderer.setProperty(this.styleElement, 'innerHTML', this.domSanitizer.bypassSecurityTrustStyle(innerHTML));
|
|
2100
|
+
}
|
|
2101
|
+
onRowDragStart(event, index) {
|
|
2102
|
+
this.rowDragging = true;
|
|
2103
|
+
this.draggedRowIndex = index;
|
|
2104
|
+
event.dataTransfer.setData('text', 'b'); // For firefox
|
|
2105
|
+
}
|
|
2106
|
+
onRowDragOver(event, index, rowElement) {
|
|
2107
|
+
if (this.rowDragging && this.draggedRowIndex !== index) {
|
|
2108
|
+
let rowY = DomHandler.getOffset(rowElement).top;
|
|
2109
|
+
let pageY = event.pageY;
|
|
2110
|
+
let rowMidY = rowY + DomHandler.getOuterHeight(rowElement) / 2;
|
|
2111
|
+
let prevRowElement = rowElement.previousElementSibling;
|
|
2112
|
+
if (pageY < rowMidY) {
|
|
2113
|
+
DomHandler.removeClass(rowElement, 'cax-datatable-dragpoint-bottom');
|
|
2114
|
+
this.droppedRowIndex = index;
|
|
2115
|
+
if (prevRowElement)
|
|
2116
|
+
DomHandler.addClass(prevRowElement, 'cax-datatable-dragpoint-bottom');
|
|
2117
|
+
else
|
|
2118
|
+
DomHandler.addClass(rowElement, 'cax-datatable-dragpoint-top');
|
|
2119
|
+
}
|
|
2120
|
+
else {
|
|
2121
|
+
if (prevRowElement)
|
|
2122
|
+
DomHandler.removeClass(prevRowElement, 'cax-datatable-dragpoint-bottom');
|
|
2123
|
+
else
|
|
2124
|
+
DomHandler.addClass(rowElement, 'cax-datatable-dragpoint-top');
|
|
2125
|
+
this.droppedRowIndex = index + 1;
|
|
2126
|
+
DomHandler.addClass(rowElement, 'cax-datatable-dragpoint-bottom');
|
|
2127
|
+
}
|
|
2128
|
+
}
|
|
2129
|
+
}
|
|
2130
|
+
onRowDragLeave(event, rowElement) {
|
|
2131
|
+
let prevRowElement = rowElement.previousElementSibling;
|
|
2132
|
+
if (prevRowElement) {
|
|
2133
|
+
DomHandler.removeClass(prevRowElement, 'cax-datatable-dragpoint-bottom');
|
|
2134
|
+
}
|
|
2135
|
+
DomHandler.removeClass(rowElement, 'cax-datatable-dragpoint-bottom');
|
|
2136
|
+
DomHandler.removeClass(rowElement, 'cax-datatable-dragpoint-top');
|
|
2137
|
+
}
|
|
2138
|
+
onRowDragEnd(event) {
|
|
2139
|
+
this.rowDragging = false;
|
|
2140
|
+
this.draggedRowIndex = null;
|
|
2141
|
+
this.droppedRowIndex = null;
|
|
2142
|
+
}
|
|
2143
|
+
onRowDrop(event, rowElement) {
|
|
2144
|
+
if (this.droppedRowIndex != null) {
|
|
2145
|
+
let dropIndex = this.draggedRowIndex > this.droppedRowIndex ? this.droppedRowIndex : this.droppedRowIndex === 0 ? 0 : this.droppedRowIndex - 1;
|
|
2146
|
+
ObjectUtils.reorderArray(this.value, this.draggedRowIndex, dropIndex);
|
|
2147
|
+
if (this.virtualScroll) {
|
|
2148
|
+
// TODO: Check
|
|
2149
|
+
this._value = [...this._value];
|
|
2150
|
+
}
|
|
2151
|
+
this.onRowReorder.emit({
|
|
2152
|
+
dragIndex: this.draggedRowIndex,
|
|
2153
|
+
dropIndex: dropIndex
|
|
2154
|
+
});
|
|
2155
|
+
}
|
|
2156
|
+
//cleanup
|
|
2157
|
+
this.onRowDragLeave(event, rowElement);
|
|
2158
|
+
this.onRowDragEnd(event);
|
|
2159
|
+
}
|
|
2160
|
+
isEmpty() {
|
|
2161
|
+
let data = this.filteredValue || this.value;
|
|
2162
|
+
return data == null || data.length == 0;
|
|
2163
|
+
}
|
|
2164
|
+
getBlockableElement() {
|
|
2165
|
+
return this.el.nativeElement.children[0];
|
|
2166
|
+
}
|
|
2167
|
+
getStorage() {
|
|
2168
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
2169
|
+
switch (this.stateStorage) {
|
|
2170
|
+
case 'local':
|
|
2171
|
+
return window.localStorage;
|
|
2172
|
+
case 'session':
|
|
2173
|
+
return window.sessionStorage;
|
|
2174
|
+
default:
|
|
2175
|
+
throw new Error(this.stateStorage + ' is not a valid value for the state storage, supported values are "local" and "session".');
|
|
2176
|
+
}
|
|
2177
|
+
}
|
|
2178
|
+
else {
|
|
2179
|
+
throw new Error('Browser storage is not available in the server side.');
|
|
2180
|
+
}
|
|
2181
|
+
}
|
|
2182
|
+
isStateful() {
|
|
2183
|
+
return this.stateKey != null;
|
|
2184
|
+
}
|
|
2185
|
+
saveState() {
|
|
2186
|
+
const storage = this.getStorage();
|
|
2187
|
+
let state = {};
|
|
2188
|
+
if (this.paginator) {
|
|
2189
|
+
state.first = this.first;
|
|
2190
|
+
state.rows = this.rows;
|
|
2191
|
+
}
|
|
2192
|
+
if (this.sortField) {
|
|
2193
|
+
state.sortField = this.sortField;
|
|
2194
|
+
state.sortOrder = this.sortOrder;
|
|
2195
|
+
}
|
|
2196
|
+
if (this.multiSortMeta) {
|
|
2197
|
+
state.multiSortMeta = this.multiSortMeta;
|
|
2198
|
+
}
|
|
2199
|
+
if (this.hasFilter()) {
|
|
2200
|
+
state.filters = this.filters;
|
|
2201
|
+
}
|
|
2202
|
+
if (this.resizableColumns) {
|
|
2203
|
+
this.saveColumnWidths(state);
|
|
2204
|
+
}
|
|
2205
|
+
if (this.reorderableColumns) {
|
|
2206
|
+
this.saveColumnOrder(state);
|
|
2207
|
+
}
|
|
2208
|
+
if (this.selection) {
|
|
2209
|
+
state.selection = this.selection;
|
|
2210
|
+
}
|
|
2211
|
+
if (Object.keys(this.expandedRowKeys).length) {
|
|
2212
|
+
state.expandedRowKeys = this.expandedRowKeys;
|
|
2213
|
+
}
|
|
2214
|
+
storage.setItem(this.stateKey, JSON.stringify(state));
|
|
2215
|
+
this.onStateSave.emit(state);
|
|
2216
|
+
}
|
|
2217
|
+
clearState() {
|
|
2218
|
+
const storage = this.getStorage();
|
|
2219
|
+
if (this.stateKey) {
|
|
2220
|
+
storage.removeItem(this.stateKey);
|
|
2221
|
+
}
|
|
2222
|
+
}
|
|
2223
|
+
restoreState() {
|
|
2224
|
+
const storage = this.getStorage();
|
|
2225
|
+
const stateString = storage.getItem(this.stateKey);
|
|
2226
|
+
const dateFormat = /\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/;
|
|
2227
|
+
const reviver = function (key, value) {
|
|
2228
|
+
if (typeof value === 'string' && dateFormat.test(value)) {
|
|
2229
|
+
return new Date(value);
|
|
2230
|
+
}
|
|
2231
|
+
return value;
|
|
2232
|
+
};
|
|
2233
|
+
if (stateString) {
|
|
2234
|
+
let state = JSON.parse(stateString, reviver);
|
|
2235
|
+
if (this.paginator) {
|
|
2236
|
+
if (this.first !== undefined) {
|
|
2237
|
+
this.first = state.first;
|
|
2238
|
+
this.firstChange.emit(this.first);
|
|
2239
|
+
}
|
|
2240
|
+
if (this.rows !== undefined) {
|
|
2241
|
+
this.rows = state.rows;
|
|
2242
|
+
this.rowsChange.emit(this.rows);
|
|
2243
|
+
}
|
|
2244
|
+
}
|
|
2245
|
+
if (state.sortField) {
|
|
2246
|
+
this.restoringSort = true;
|
|
2247
|
+
this._sortField = state.sortField;
|
|
2248
|
+
this._sortOrder = state.sortOrder;
|
|
2249
|
+
}
|
|
2250
|
+
if (state.multiSortMeta) {
|
|
2251
|
+
this.restoringSort = true;
|
|
2252
|
+
this._multiSortMeta = state.multiSortMeta;
|
|
2253
|
+
}
|
|
2254
|
+
if (state.filters) {
|
|
2255
|
+
this.restoringFilter = true;
|
|
2256
|
+
this.filters = state.filters;
|
|
2257
|
+
}
|
|
2258
|
+
if (this.resizableColumns) {
|
|
2259
|
+
this.columnWidthsState = state.columnWidths;
|
|
2260
|
+
this.tableWidthState = state.tableWidth;
|
|
2261
|
+
}
|
|
2262
|
+
// if (this.reorderableColumns) {
|
|
2263
|
+
// this.restoreColumnOrder();
|
|
2264
|
+
// }
|
|
2265
|
+
if (state.expandedRowKeys) {
|
|
2266
|
+
this.expandedRowKeys = state.expandedRowKeys;
|
|
2267
|
+
}
|
|
2268
|
+
if (state.selection) {
|
|
2269
|
+
Promise.resolve(null).then(() => this.selectionChange.emit(state.selection));
|
|
2270
|
+
}
|
|
2271
|
+
this.stateRestored = true;
|
|
2272
|
+
this.onStateRestore.emit(state);
|
|
2273
|
+
}
|
|
2274
|
+
}
|
|
2275
|
+
saveColumnWidths(state) {
|
|
2276
|
+
let widths = [];
|
|
2277
|
+
let headers = [];
|
|
2278
|
+
const container = this.containerViewChild?.nativeElement;
|
|
2279
|
+
if (container) {
|
|
2280
|
+
headers = DomHandler.find(container, '.cax-datatable-thead > tr > th');
|
|
2281
|
+
}
|
|
2282
|
+
headers.forEach((header) => widths.push(DomHandler.getOuterWidth(header)));
|
|
2283
|
+
state.columnWidths = widths.join(',');
|
|
2284
|
+
if (this.columnResizeMode === 'expand') {
|
|
2285
|
+
state.tableWidth = DomHandler.getOuterWidth(this.tableViewChild?.nativeElement);
|
|
2286
|
+
}
|
|
2287
|
+
}
|
|
2288
|
+
setResizeTableWidth(width) {
|
|
2289
|
+
this.tableViewChild.nativeElement.style.width = width;
|
|
2290
|
+
this.tableViewChild.nativeElement.style.minWidth = width;
|
|
2291
|
+
}
|
|
2292
|
+
restoreColumnWidths() {
|
|
2293
|
+
if (this.columnWidthsState) {
|
|
2294
|
+
let widths = this.columnWidthsState.split(',');
|
|
2295
|
+
if (this.columnResizeMode === 'expand' && this.tableWidthState) {
|
|
2296
|
+
this.setResizeTableWidth(this.tableWidthState + 'px');
|
|
2297
|
+
}
|
|
2298
|
+
if (ObjectUtils.isNotEmpty(widths)) {
|
|
2299
|
+
this.createStyleElement();
|
|
2300
|
+
let innerHTML = '';
|
|
2301
|
+
widths.forEach((width, index) => {
|
|
2302
|
+
let style = `width: ${width}px !important; max-width: ${width}px !important`;
|
|
2303
|
+
innerHTML += `
|
|
2304
|
+
#${this.id}-table > .cax-datatable-thead > tr > th:nth-child(${index + 1}),
|
|
2305
|
+
#${this.id}-table > .cax-datatable-tbody > tr > td:nth-child(${index + 1}),
|
|
2306
|
+
#${this.id}-table > .cax-datatable-tfoot > tr > td:nth-child(${index + 1}) {
|
|
2307
|
+
${style}
|
|
2308
|
+
}
|
|
2309
|
+
`;
|
|
2310
|
+
});
|
|
2311
|
+
this.styleElement.textContent = innerHTML;
|
|
2312
|
+
}
|
|
2313
|
+
}
|
|
2314
|
+
}
|
|
2315
|
+
saveColumnOrder(state) {
|
|
2316
|
+
if (this.columns) {
|
|
2317
|
+
let columnOrder = [];
|
|
2318
|
+
this.columns.map((column) => {
|
|
2319
|
+
columnOrder.push(column.field || column.key);
|
|
2320
|
+
});
|
|
2321
|
+
state.columnOrder = columnOrder;
|
|
2322
|
+
}
|
|
2323
|
+
}
|
|
2324
|
+
restoreColumnOrder() {
|
|
2325
|
+
const storage = this.getStorage();
|
|
2326
|
+
const stateString = storage.getItem(this.stateKey);
|
|
2327
|
+
if (stateString) {
|
|
2328
|
+
let state = JSON.parse(stateString);
|
|
2329
|
+
let columnOrder = state.columnOrder;
|
|
2330
|
+
if (columnOrder) {
|
|
2331
|
+
let reorderedColumns = [];
|
|
2332
|
+
columnOrder.map((key) => {
|
|
2333
|
+
let col = this.findColumnByKey(key);
|
|
2334
|
+
if (col) {
|
|
2335
|
+
reorderedColumns.push(col);
|
|
2336
|
+
}
|
|
2337
|
+
});
|
|
2338
|
+
this.columnOrderStateRestored = true;
|
|
2339
|
+
this.columns = reorderedColumns;
|
|
2340
|
+
}
|
|
2341
|
+
}
|
|
2342
|
+
}
|
|
2343
|
+
findColumnByKey(key) {
|
|
2344
|
+
if (this.columns) {
|
|
2345
|
+
for (let col of this.columns) {
|
|
2346
|
+
if (col.key === key || col.field === key)
|
|
2347
|
+
return col;
|
|
2348
|
+
else
|
|
2349
|
+
continue;
|
|
2350
|
+
}
|
|
2351
|
+
}
|
|
2352
|
+
else {
|
|
2353
|
+
return null;
|
|
2354
|
+
}
|
|
2355
|
+
}
|
|
2356
|
+
createStyleElement() {
|
|
2357
|
+
this.styleElement = this.renderer.createElement('style');
|
|
2358
|
+
this.styleElement.type = 'text/css';
|
|
2359
|
+
DomHandler.setAttribute(this.styleElement, 'nonce', this.config?.csp()?.nonce);
|
|
2360
|
+
this.renderer.appendChild(this.document.head, this.styleElement);
|
|
2361
|
+
}
|
|
2362
|
+
getGroupRowsMeta() {
|
|
2363
|
+
return { field: this.groupRowsBy, order: this.groupRowsByOrder };
|
|
2364
|
+
}
|
|
2365
|
+
createResponsiveStyle() {
|
|
2366
|
+
if (isPlatformBrowser(this.platformId)) {
|
|
2367
|
+
if (!this.responsiveStyleElement) {
|
|
2368
|
+
this.responsiveStyleElement = this.renderer.createElement('style');
|
|
2369
|
+
this.responsiveStyleElement.type = 'text/css';
|
|
2370
|
+
DomHandler.setAttribute(this.responsiveStyleElement, 'nonce', this.config?.csp()?.nonce);
|
|
2371
|
+
this.renderer.appendChild(this.document.head, this.responsiveStyleElement);
|
|
2372
|
+
let innerHTML = `
|
|
2373
|
+
@media screen and (max-width: ${this.breakpoint}) {
|
|
2374
|
+
#${this.id}-table > .cax-datatable-thead > tr > th,
|
|
2375
|
+
#${this.id}-table > .cax-datatable-tfoot > tr > td {
|
|
2376
|
+
display: none !important;
|
|
2377
|
+
}
|
|
2378
|
+
|
|
2379
|
+
#${this.id}-table > .cax-datatable-tbody > tr > td {
|
|
2380
|
+
display: flex;
|
|
2381
|
+
width: 100% !important;
|
|
2382
|
+
align-items: center;
|
|
2383
|
+
justify-content: space-between;
|
|
2384
|
+
}
|
|
2385
|
+
|
|
2386
|
+
#${this.id}-table > .cax-datatable-tbody > tr > td:not(:last-child) {
|
|
2387
|
+
border: 0 none;
|
|
2388
|
+
}
|
|
2389
|
+
|
|
2390
|
+
#${this.id}.cax-datatable-gridlines > .cax-datatable-wrapper > .cax-datatable-table > .cax-datatable-tbody > tr > td:last-child {
|
|
2391
|
+
border-top: 0;
|
|
2392
|
+
border-right: 0;
|
|
2393
|
+
border-left: 0;
|
|
2394
|
+
}
|
|
2395
|
+
|
|
2396
|
+
#${this.id}-table > .cax-datatable-tbody > tr > td > .cax-column-title {
|
|
2397
|
+
display: block;
|
|
2398
|
+
}
|
|
2399
|
+
}
|
|
2400
|
+
`;
|
|
2401
|
+
this.renderer.setProperty(this.responsiveStyleElement, 'innerHTML', this.domSanitizer.bypassSecurityTrustStyle(innerHTML));
|
|
2402
|
+
}
|
|
2403
|
+
}
|
|
2404
|
+
}
|
|
2405
|
+
destroyResponsiveStyle() {
|
|
2406
|
+
if (this.responsiveStyleElement) {
|
|
2407
|
+
this.renderer.removeChild(this.document.head, this.responsiveStyleElement);
|
|
2408
|
+
this.responsiveStyleElement = null;
|
|
2409
|
+
}
|
|
2410
|
+
}
|
|
2411
|
+
destroyStyleElement() {
|
|
2412
|
+
if (this.styleElement) {
|
|
2413
|
+
this.renderer.removeChild(this.document.head, this.styleElement);
|
|
2414
|
+
this.styleElement = null;
|
|
2415
|
+
}
|
|
2416
|
+
}
|
|
2417
|
+
ngOnDestroy() {
|
|
2418
|
+
this.unbindDocumentEditListener();
|
|
2419
|
+
this.editingCell = null;
|
|
2420
|
+
this.initialized = null;
|
|
2421
|
+
this.destroyStyleElement();
|
|
2422
|
+
this.destroyResponsiveStyle();
|
|
2423
|
+
}
|
|
2424
|
+
getPaginatorStyleClasses(className) {
|
|
2425
|
+
return [this.paginatorStyleClass, className]
|
|
2426
|
+
.filter((c) => !!c)
|
|
2427
|
+
.join(' ')
|
|
2428
|
+
.trim();
|
|
2429
|
+
}
|
|
2430
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: Table, deps: [{ token: DOCUMENT }, { token: PLATFORM_ID }, { token: i0.Renderer2 }, { token: i0.ElementRef }, { token: i0.NgZone }, { token: i1.TableService }, { token: i0.ChangeDetectorRef }, { token: i2.FilterService }, { token: i2.OverlayService }, { token: i2.caxConfig }, { token: i3.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
|
|
2431
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "18.2.9", type: Table, isStandalone: true, selector: "cax-table", inputs: { frozenColumns: "frozenColumns", frozenValue: "frozenValue", style: "style", styleClass: "styleClass", tableStyle: "tableStyle", tableStyleClass: "tableStyleClass", paginator: ["paginator", "paginator", booleanAttribute], pageLinks: ["pageLinks", "pageLinks", numberAttribute], rowsPerPageOptions: "rowsPerPageOptions", alwaysShowPaginator: ["alwaysShowPaginator", "alwaysShowPaginator", booleanAttribute], paginatorPosition: "paginatorPosition", paginatorStyleClass: "paginatorStyleClass", paginatorDropdownAppendTo: "paginatorDropdownAppendTo", paginatorDropdownScrollHeight: "paginatorDropdownScrollHeight", currentPageReportTemplate: "currentPageReportTemplate", showCurrentPageReport: ["showCurrentPageReport", "showCurrentPageReport", booleanAttribute], showJumpToPageDropdown: ["showJumpToPageDropdown", "showJumpToPageDropdown", booleanAttribute], showJumpToPageInput: ["showJumpToPageInput", "showJumpToPageInput", booleanAttribute], showFirstLastIcon: ["showFirstLastIcon", "showFirstLastIcon", booleanAttribute], showPageLinks: ["showPageLinks", "showPageLinks", booleanAttribute], defaultSortOrder: ["defaultSortOrder", "defaultSortOrder", numberAttribute], sortMode: "sortMode", resetPageOnSort: ["resetPageOnSort", "resetPageOnSort", booleanAttribute], selectionMode: "selectionMode", selectionPageOnly: ["selectionPageOnly", "selectionPageOnly", booleanAttribute], contextMenuSelection: "contextMenuSelection", contextMenuSelectionMode: "contextMenuSelectionMode", dataKey: "dataKey", metaKeySelection: ["metaKeySelection", "metaKeySelection", booleanAttribute], rowSelectable: "rowSelectable", rowTrackBy: "rowTrackBy", lazy: ["lazy", "lazy", booleanAttribute], lazyLoadOnInit: ["lazyLoadOnInit", "lazyLoadOnInit", booleanAttribute], compareSelectionBy: "compareSelectionBy", csvSeparator: "csvSeparator", exportFilename: "exportFilename", filters: "filters", globalFilterFields: "globalFilterFields", filterDelay: ["filterDelay", "filterDelay", numberAttribute], filterLocale: "filterLocale", expandedRowKeys: "expandedRowKeys", editingRowKeys: "editingRowKeys", rowExpandMode: "rowExpandMode", scrollable: ["scrollable", "scrollable", booleanAttribute], scrollDirection: "scrollDirection", rowGroupMode: "rowGroupMode", scrollHeight: "scrollHeight", virtualScroll: ["virtualScroll", "virtualScroll", booleanAttribute], virtualScrollItemSize: ["virtualScrollItemSize", "virtualScrollItemSize", numberAttribute], virtualScrollOptions: "virtualScrollOptions", virtualScrollDelay: ["virtualScrollDelay", "virtualScrollDelay", numberAttribute], frozenWidth: "frozenWidth", responsive: "responsive", contextMenu: "contextMenu", resizableColumns: ["resizableColumns", "resizableColumns", booleanAttribute], columnResizeMode: "columnResizeMode", reorderableColumns: ["reorderableColumns", "reorderableColumns", booleanAttribute], loading: ["loading", "loading", booleanAttribute], loadingIcon: "loadingIcon", showLoader: ["showLoader", "showLoader", booleanAttribute], rowHover: ["rowHover", "rowHover", booleanAttribute], customSort: ["customSort", "customSort", booleanAttribute], showInitialSortBadge: ["showInitialSortBadge", "showInitialSortBadge", booleanAttribute], autoLayout: ["autoLayout", "autoLayout", booleanAttribute], exportFunction: "exportFunction", exportHeader: "exportHeader", stateKey: "stateKey", stateStorage: "stateStorage", editMode: "editMode", groupRowsBy: "groupRowsBy", groupRowsByOrder: ["groupRowsByOrder", "groupRowsByOrder", numberAttribute], responsiveLayout: "responsiveLayout", breakpoint: "breakpoint", paginatorLocale: "paginatorLocale", value: "value", columns: "columns", first: "first", rows: "rows", totalRecords: "totalRecords", sortField: "sortField", sortOrder: "sortOrder", multiSortMeta: "multiSortMeta", selection: "selection", selectAll: "selectAll", virtualRowHeight: "virtualRowHeight" }, outputs: { contextMenuSelectionChange: "contextMenuSelectionChange", selectAllChange: "selectAllChange", selectionChange: "selectionChange", onRowSelect: "onRowSelect", onRowUnselect: "onRowUnselect", onPage: "onPage", onSort: "onSort", onFilter: "onFilter", onLazyLoad: "onLazyLoad", onRowExpand: "onRowExpand", onRowCollapse: "onRowCollapse", onContextMenuSelect: "onContextMenuSelect", onColResize: "onColResize", onColReorder: "onColReorder", onRowReorder: "onRowReorder", onEditInit: "onEditInit", onEditComplete: "onEditComplete", onEditCancel: "onEditCancel", onHeaderCheckboxToggle: "onHeaderCheckboxToggle", sortFunction: "sortFunction", firstChange: "firstChange", rowsChange: "rowsChange", onStateSave: "onStateSave", onStateRestore: "onStateRestore" }, host: { classAttribute: "cax-element" }, queries: [{ propertyName: "templates", predicate: CaxTemplate }], viewQueries: [{ propertyName: "containerViewChild", first: true, predicate: ["container"], descendants: true }, { propertyName: "resizeHelperViewChild", first: true, predicate: ["resizeHelper"], descendants: true }, { propertyName: "reorderIndicatorUpViewChild", first: true, predicate: ["reorderIndicatorUp"], descendants: true }, { propertyName: "reorderIndicatorDownViewChild", first: true, predicate: ["reorderIndicatorDown"], descendants: true }, { propertyName: "wrapperViewChild", first: true, predicate: ["wrapper"], descendants: true }, { propertyName: "tableViewChild", first: true, predicate: ["table"], descendants: true }, { propertyName: "tableHeaderViewChild", first: true, predicate: ["thead"], descendants: true }, { propertyName: "tableFooterViewChild", first: true, predicate: ["tfoot"], descendants: true }, { propertyName: "scroller", first: true, predicate: ["scroller"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\r\n #container\r\n [ngStyle]=\"style\"\r\n [class]=\"styleClass\"\r\n [ngClass]=\"{ 'cax-datatable cax-component': true, 'cax-datatable-hoverable-rows': rowHover || selectionMode, 'cax-datatable-scrollable': scrollable, 'cax-datatable-flex-scrollable': scrollable && scrollHeight === 'flex' }\"\r\n [attr.id]=\"id\"\r\n>\r\n <div class=\"cax-datatable-loading-overlay cax-component-overlay\" *ngIf=\"loading && showLoader\">\r\n <i *ngIf=\"loadingIcon\" [class]=\"'cax-datatable-loading-icon ' + loadingIcon\"></i>\r\n <ng-container *ngIf=\"!loadingIcon\">\r\n <SpinnerIcon *ngIf=\"!loadingIconTemplate\" [spin]=\"true\" [styleClass]=\"'cax-datatable-loading-icon'\" />\r\n <span *ngIf=\"loadingIconTemplate\" class=\"cax-datatable-loading-icon\">\r\n <ng-template *ngTemplateOutlet=\"loadingIconTemplate\"></ng-template>\r\n </span>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"captionTemplate\" class=\"cax-datatable-header\">\r\n <ng-container *ngTemplateOutlet=\"captionTemplate\"></ng-container>\r\n </div>\r\n <cax-paginator\r\n [rows]=\"rows\"\r\n [first]=\"first\"\r\n [totalRecords]=\"totalRecords\"\r\n [pageLinkSize]=\"pageLinks\"\r\n [alwaysShow]=\"alwaysShowPaginator\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n *ngIf=\"paginator && (paginatorPosition === 'top' || paginatorPosition == 'both')\"\r\n [templateLeft]=\"paginatorLeftTemplate\"\r\n [templateRight]=\"paginatorRightTemplate\"\r\n [dropdownAppendTo]=\"paginatorDropdownAppendTo\"\r\n [dropdownScrollHeight]=\"paginatorDropdownScrollHeight\"\r\n [currentPageReportTemplate]=\"currentPageReportTemplate\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\"\r\n [showCurrentPageReport]=\"showCurrentPageReport\"\r\n [showJumpToPageDropdown]=\"showJumpToPageDropdown\"\r\n [showJumpToPageInput]=\"showJumpToPageInput\"\r\n [showPageLinks]=\"showPageLinks\"\r\n [styleClass]=\"getPaginatorStyleClasses('cax-paginator-top')\"\r\n [locale]=\"paginatorLocale\"\r\n >\r\n <ng-template caxTemplate=\"dropdownicon\" *ngIf=\"paginatorDropdownIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorDropdownIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"firstpagelinkicon\" *ngIf=\"paginatorFirstPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorFirstPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"previouspagelinkicon\" *ngIf=\"paginatorPreviousPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorPreviousPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"lastpagelinkicon\" *ngIf=\"paginatorLastPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorLastPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"nextpagelinkicon\" *ngIf=\"paginatorNextPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorNextPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n </cax-paginator>\r\n\r\n <div #wrapper class=\"cax-datatable-wrapper\" [ngStyle]=\"{ maxHeight: virtualScroll ? '' : scrollHeight }\">\r\n <cax-scroller\r\n #scroller\r\n *ngIf=\"virtualScroll\"\r\n [items]=\"processedData\"\r\n [columns]=\"columns\"\r\n [style]=\"{ height: scrollHeight !== 'flex' ? scrollHeight : undefined }\"\r\n [scrollHeight]=\"scrollHeight !== 'flex' ? undefined : '100%'\"\r\n [itemSize]=\"virtualScrollItemSize || _virtualRowHeight\"\r\n [step]=\"rows\"\r\n [delay]=\"lazy ? virtualScrollDelay : 0\"\r\n [inline]=\"true\"\r\n [autoSize]=\"true\"\r\n [lazy]=\"lazy\"\r\n (onLazyLoad)=\"onLazyItemLoad($event)\"\r\n [loaderDisabled]=\"true\"\r\n [showSpacer]=\"false\"\r\n [showLoader]=\"loadingBodyTemplate\"\r\n [options]=\"virtualScrollOptions\"\r\n >\r\n <ng-template caxTemplate=\"content\" let-items let-scrollerOptions=\"options\">\r\n <ng-container *ngTemplateOutlet=\"buildInTable; context: { $implicit: items, options: scrollerOptions }\"></ng-container>\r\n </ng-template>\r\n </cax-scroller>\r\n <ng-container *ngIf=\"!virtualScroll\">\r\n <ng-container *ngTemplateOutlet=\"buildInTable; context: { $implicit: processedData, options: { columns } }\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-template #buildInTable let-items let-scrollerOptions=\"options\">\r\n <table\r\n #table\r\n role=\"table\"\r\n [ngClass]=\"{ 'cax-datatable-table': true, 'cax-datatable-scrollable-table': scrollable, 'cax-datatable-resizable-table': resizableColumns, 'cax-datatable-resizable-table-fit': resizableColumns && columnResizeMode === 'fit' }\"\r\n [class]=\"tableStyleClass\"\r\n [ngStyle]=\"tableStyle\"\r\n [attr.id]=\"id + '-table'\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"colGroupTemplate; context: { $implicit: scrollerOptions.columns }\"></ng-container>\r\n <thead role=\"rowgroup\" #thead class=\"cax-datatable-thead\">\r\n <ng-container *ngTemplateOutlet=\"headerGroupedTemplate || headerTemplate; context: { $implicit: scrollerOptions.columns }\"></ng-container>\r\n </thead>\r\n <tbody\r\n role=\"rowgroup\"\r\n class=\"cax-datatable-tbody cax-datatable-frozen-tbody\"\r\n *ngIf=\"frozenValue || frozenBodyTemplate\"\r\n [value]=\"frozenValue\"\r\n [frozenRows]=\"true\"\r\n [pTableBody]=\"scrollerOptions.columns\"\r\n [pTableBodyTemplate]=\"frozenBodyTemplate\"\r\n [frozen]=\"true\"\r\n ></tbody>\r\n <tbody\r\n role=\"rowgroup\"\r\n class=\"cax-datatable-tbody\"\r\n [ngClass]=\"scrollerOptions.contentStyleClass\"\r\n [ngStyle]=\"scrollerOptions.contentStyle\"\r\n [value]=\"dataToRender(scrollerOptions.rows)\"\r\n [pTableBody]=\"scrollerOptions.columns\"\r\n [pTableBodyTemplate]=\"bodyTemplate\"\r\n [scrollerOptions]=\"scrollerOptions\"\r\n ></tbody>\r\n <tbody\r\n role=\"rowgroup\"\r\n *ngIf=\"scrollerOptions.spacerStyle\"\r\n [ngStyle]=\"{ height: 'calc(' + scrollerOptions.spacerStyle.height + ' - ' + scrollerOptions.rows.length * scrollerOptions.itemSize + 'px)' }\"\r\n class=\"cax-datatable-scroller-spacer\"\r\n ></tbody>\r\n <tfoot role=\"rowgroup\" *ngIf=\"footerGroupedTemplate || footerTemplate\" #tfoot class=\"cax-datatable-tfoot\">\r\n <ng-container *ngTemplateOutlet=\"footerGroupedTemplate || footerTemplate; context: { $implicit: scrollerOptions.columns }\"></ng-container>\r\n </tfoot>\r\n </table>\r\n </ng-template>\r\n </div>\r\n\r\n <cax-paginator\r\n [rows]=\"rows\"\r\n [first]=\"first\"\r\n [totalRecords]=\"totalRecords\"\r\n [pageLinkSize]=\"pageLinks\"\r\n [alwaysShow]=\"alwaysShowPaginator\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n *ngIf=\"paginator && (paginatorPosition === 'bottom' || paginatorPosition == 'both')\"\r\n [templateLeft]=\"paginatorLeftTemplate\"\r\n [templateRight]=\"paginatorRightTemplate\"\r\n [dropdownAppendTo]=\"paginatorDropdownAppendTo\"\r\n [dropdownScrollHeight]=\"paginatorDropdownScrollHeight\"\r\n [currentPageReportTemplate]=\"currentPageReportTemplate\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\"\r\n [showCurrentPageReport]=\"showCurrentPageReport\"\r\n [showJumpToPageDropdown]=\"showJumpToPageDropdown\"\r\n [showJumpToPageInput]=\"showJumpToPageInput\"\r\n [showPageLinks]=\"showPageLinks\"\r\n [styleClass]=\"getPaginatorStyleClasses('cax-paginator-bottom')\"\r\n [locale]=\"paginatorLocale\"\r\n >\r\n <ng-template caxTemplate=\"dropdownicon\" *ngIf=\"paginatorDropdownIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorDropdownIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"firstpagelinkicon\" *ngIf=\"paginatorFirstPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorFirstPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"previouspagelinkicon\" *ngIf=\"paginatorPreviousPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorPreviousPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"lastpagelinkicon\" *ngIf=\"paginatorLastPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorLastPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"nextpagelinkicon\" *ngIf=\"paginatorNextPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorNextPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n </cax-paginator>\r\n\r\n <div *ngIf=\"summaryTemplate\" class=\"cax-datatable-footer\">\r\n <ng-container *ngTemplateOutlet=\"summaryTemplate\"></ng-container>\r\n </div>\r\n\r\n <div\r\n #resizeHelper\r\n class=\"cax-column-resizer-helper\"\r\n [ngStyle]=\"{\r\n display: 'none'\r\n }\"\r\n *ngIf=\"resizableColumns\"\r\n ></div>\r\n <span\r\n #reorderIndicatorUp\r\n class=\"cax-datatable-reorder-indicator-up\"\r\n [ngStyle]=\"{\r\n display: 'none'\r\n }\"\r\n *ngIf=\"reorderableColumns\"\r\n >\r\n <ArrowDownIcon *ngIf=\"!reorderIndicatorUpIconTemplate\" />\r\n <ng-template *ngTemplateOutlet=\"reorderIndicatorUpIconTemplate\"></ng-template>\r\n </span>\r\n <span\r\n #reorderIndicatorDown\r\n class=\"cax-datatable-reorder-indicator-down\"\r\n [ngStyle]=\"{\r\n display: 'none'\r\n }\"\r\n *ngIf=\"reorderableColumns\"\r\n >\r\n <ArrowUpIcon *ngIf=\"!reorderIndicatorDownIconTemplate\" />\r\n <ng-template *ngTemplateOutlet=\"reorderIndicatorDownIconTemplate\"></ng-template>\r\n </span>\r\n</div>\r\n", styles: ["@layer cax{.cax-datatable{position:relative}.cax-datatable>.cax-datatable-wrapper{overflow:auto}.cax-datatable-table{border-spacing:0px;width:100%}.cax-datatable .cax-sortable-column{cursor:pointer;-webkit-user-select:none;user-select:none}.cax-datatable .cax-sortable-column .cax-column-title,.cax-datatable .cax-sortable-column .cax-sortable-column-icon,.cax-datatable .cax-sortable-column .cax-sortable-column-badge{vertical-align:middle}.cax-datatable .cax-sortable-column .cax-icon-wrapper{display:inline}.cax-datatable .cax-sortable-column .cax-sortable-column-badge{display:inline-flex;align-items:center;justify-content:center}.cax-datatable-hoverable-rows .cax-selectable-row{cursor:pointer}.cax-datatable-scrollable>.cax-datatable-wrapper{position:relative}.cax-datatable-scrollable-table>.cax-datatable-thead{position:sticky;top:0;z-index:2}.cax-datatable-scrollable-table>.cax-datatable-frozen-tbody{position:sticky;z-index:1}.cax-datatable-scrollable-table>.cax-datatable-tfoot{position:sticky;bottom:0;z-index:1}.cax-datatable-scrollable .cax-frozen-column{position:sticky;background:inherit;z-index:1}.cax-datatable-scrollable th.cax-frozen-column{z-index:1}.cax-datatable-flex-scrollable{display:flex;flex-direction:column;height:100%}.cax-datatable-flex-scrollable>.cax-datatable-wrapper{display:flex;flex-direction:column;flex:1;height:100%}.cax-datatable-scrollable-table>.cax-datatable-tbody>.cax-rowgroucax-header{position:sticky;z-index:2}.cax-datatable-resizable-table>.cax-datatable-thead>tr>th,.cax-datatable-resizable-table>.cax-datatable-tfoot>tr>td,.cax-datatable-resizable-table>.cax-datatable-tbody>tr>td{overflow:hidden;white-space:nowrap}.cax-datatable-resizable-table>.cax-datatable-thead>tr>th.cax-resizable-column:not(.cax-frozen-column){background-clip:padding-box;position:relative}.cax-datatable-resizable-table-fit>.cax-datatable-thead>tr>th.cax-resizable-column:last-child .cax-column-resizer{display:none}.cax-datatable .cax-column-resizer{display:block;position:absolute!important;top:0;right:0;margin:0;width:.5rem;height:100%;padding:0;cursor:col-resize;border:1px solid transparent}.cax-datatable .cax-column-resizer-helper{width:1px;position:absolute;z-index:10;display:none}.cax-datatable .cax-row-editor-init,.cax-datatable .cax-row-editor-save,.cax-datatable .cax-row-editor-cancel,.cax-datatable .cax-row-toggler{display:inline-flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.cax-datatable-reorder-indicator-up,.cax-datatable-reorder-indicator-down{position:absolute}.cax-datatable-reorderablerow-handle,[caxReorderableColumn]{cursor:move}.cax-datatable .cax-datatable-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:3}.cax-column-filter-row{display:flex;align-items:center;width:100%}.cax-column-filter-menu{display:inline-flex}.cax-column-filter-row cax-columnfilterformelement{flex:1 1 auto;width:1%}.cax-column-filter-menu-button,.cax-column-filter-clear-button{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;text-decoration:none;overflow:hidden;position:relative}.cax-column-filter-overlay{position:absolute;top:0;left:0}.cax-column-filter-row-items{margin:0;padding:0;list-style:none}.cax-column-filter-row-item{cursor:pointer}.cax-column-filter-add-button,.cax-column-filter-remove-button{justify-content:center}.cax-column-filter-add-button .cax-button-label,.cax-column-filter-remove-button .cax-button-label{flex-grow:0}.cax-column-filter-buttonbar{display:flex;align-items:center;justify-content:space-between}.cax-column-filter-buttonbar .cax-button{width:auto}.cax-datatable-tbody>tr>td>.cax-column-title{display:none}.cax-datatable-scroller-spacer{display:flex}.cax-datatable .cax-scroller .cax-scroller-loading{transform:none!important;min-height:0;position:sticky;top:0;left:0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: PaginatorModule }, { kind: "component", type: i5.Paginator, selector: "cax-paginator", inputs: ["pageLinkSize", "style", "styleClass", "alwaysShow", "dropdownAppendTo", "templateLeft", "templateRight", "appendTo", "dropdownScrollHeight", "currentPageReportTemplate", "showCurrentPageReport", "showFirstLastIcon", "totalRecords", "rows", "rowsPerPageOptions", "showJumpToPageDropdown", "showJumpToPageInput", "jumpToPageItemTemplate", "showPageLinks", "locale", "dropdownItemTemplate", "first"], outputs: ["onPageChange"] }, { kind: "directive", type: i2.CaxTemplate, selector: "[caxTemplate]", inputs: ["type", "caxTemplate"] }, { kind: "component", type: i6.Scroller, selector: "cax-scroller", inputs: ["id", "style", "styleClass", "tabindex", "items", "itemSize", "scrollHeight", "scrollWidth", "orientation", "step", "delay", "resizeDelay", "appendOnly", "inline", "lazy", "disabled", "loaderDisabled", "columns", "showSpacer", "showLoader", "numToleratedItems", "loading", "autoSize", "trackBy", "options"], outputs: ["onLazyLoad", "onScroll", "onScrollIndexChange"] }, { kind: "ngmodule", type: ScrollerModule }, { kind: "component", type: ArrowDownIcon, selector: "ArrowDownIcon" }, { kind: "component", type: ArrowUpIcon, selector: "ArrowUpIcon" }, { kind: "component", type: SpinnerIcon, selector: "SpinnerIcon" }, { kind: "component", type: TableBody, selector: "[pTableBody]", inputs: ["pTableBody", "pTableBodyTemplate", "value", "frozen", "frozenRows", "scrollerOptions"] }], changeDetection: i0.ChangeDetectionStrategy.Default, encapsulation: i0.ViewEncapsulation.None });
|
|
2432
|
+
}
|
|
2433
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: Table, decorators: [{
|
|
2434
|
+
type: Component,
|
|
2435
|
+
args: [{ selector: 'cax-table', changeDetection: ChangeDetectionStrategy.Default, encapsulation: ViewEncapsulation.None, standalone: true, imports: [CommonModule, PaginatorModule, ScrollerModule, ArrowDownIcon, ArrowUpIcon, SpinnerIcon, TableBody], host: {
|
|
2436
|
+
class: 'cax-element'
|
|
2437
|
+
}, template: "<div\r\n #container\r\n [ngStyle]=\"style\"\r\n [class]=\"styleClass\"\r\n [ngClass]=\"{ 'cax-datatable cax-component': true, 'cax-datatable-hoverable-rows': rowHover || selectionMode, 'cax-datatable-scrollable': scrollable, 'cax-datatable-flex-scrollable': scrollable && scrollHeight === 'flex' }\"\r\n [attr.id]=\"id\"\r\n>\r\n <div class=\"cax-datatable-loading-overlay cax-component-overlay\" *ngIf=\"loading && showLoader\">\r\n <i *ngIf=\"loadingIcon\" [class]=\"'cax-datatable-loading-icon ' + loadingIcon\"></i>\r\n <ng-container *ngIf=\"!loadingIcon\">\r\n <SpinnerIcon *ngIf=\"!loadingIconTemplate\" [spin]=\"true\" [styleClass]=\"'cax-datatable-loading-icon'\" />\r\n <span *ngIf=\"loadingIconTemplate\" class=\"cax-datatable-loading-icon\">\r\n <ng-template *ngTemplateOutlet=\"loadingIconTemplate\"></ng-template>\r\n </span>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"captionTemplate\" class=\"cax-datatable-header\">\r\n <ng-container *ngTemplateOutlet=\"captionTemplate\"></ng-container>\r\n </div>\r\n <cax-paginator\r\n [rows]=\"rows\"\r\n [first]=\"first\"\r\n [totalRecords]=\"totalRecords\"\r\n [pageLinkSize]=\"pageLinks\"\r\n [alwaysShow]=\"alwaysShowPaginator\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n *ngIf=\"paginator && (paginatorPosition === 'top' || paginatorPosition == 'both')\"\r\n [templateLeft]=\"paginatorLeftTemplate\"\r\n [templateRight]=\"paginatorRightTemplate\"\r\n [dropdownAppendTo]=\"paginatorDropdownAppendTo\"\r\n [dropdownScrollHeight]=\"paginatorDropdownScrollHeight\"\r\n [currentPageReportTemplate]=\"currentPageReportTemplate\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\"\r\n [showCurrentPageReport]=\"showCurrentPageReport\"\r\n [showJumpToPageDropdown]=\"showJumpToPageDropdown\"\r\n [showJumpToPageInput]=\"showJumpToPageInput\"\r\n [showPageLinks]=\"showPageLinks\"\r\n [styleClass]=\"getPaginatorStyleClasses('cax-paginator-top')\"\r\n [locale]=\"paginatorLocale\"\r\n >\r\n <ng-template caxTemplate=\"dropdownicon\" *ngIf=\"paginatorDropdownIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorDropdownIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"firstpagelinkicon\" *ngIf=\"paginatorFirstPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorFirstPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"previouspagelinkicon\" *ngIf=\"paginatorPreviousPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorPreviousPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"lastpagelinkicon\" *ngIf=\"paginatorLastPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorLastPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"nextpagelinkicon\" *ngIf=\"paginatorNextPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorNextPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n </cax-paginator>\r\n\r\n <div #wrapper class=\"cax-datatable-wrapper\" [ngStyle]=\"{ maxHeight: virtualScroll ? '' : scrollHeight }\">\r\n <cax-scroller\r\n #scroller\r\n *ngIf=\"virtualScroll\"\r\n [items]=\"processedData\"\r\n [columns]=\"columns\"\r\n [style]=\"{ height: scrollHeight !== 'flex' ? scrollHeight : undefined }\"\r\n [scrollHeight]=\"scrollHeight !== 'flex' ? undefined : '100%'\"\r\n [itemSize]=\"virtualScrollItemSize || _virtualRowHeight\"\r\n [step]=\"rows\"\r\n [delay]=\"lazy ? virtualScrollDelay : 0\"\r\n [inline]=\"true\"\r\n [autoSize]=\"true\"\r\n [lazy]=\"lazy\"\r\n (onLazyLoad)=\"onLazyItemLoad($event)\"\r\n [loaderDisabled]=\"true\"\r\n [showSpacer]=\"false\"\r\n [showLoader]=\"loadingBodyTemplate\"\r\n [options]=\"virtualScrollOptions\"\r\n >\r\n <ng-template caxTemplate=\"content\" let-items let-scrollerOptions=\"options\">\r\n <ng-container *ngTemplateOutlet=\"buildInTable; context: { $implicit: items, options: scrollerOptions }\"></ng-container>\r\n </ng-template>\r\n </cax-scroller>\r\n <ng-container *ngIf=\"!virtualScroll\">\r\n <ng-container *ngTemplateOutlet=\"buildInTable; context: { $implicit: processedData, options: { columns } }\"></ng-container>\r\n </ng-container>\r\n\r\n <ng-template #buildInTable let-items let-scrollerOptions=\"options\">\r\n <table\r\n #table\r\n role=\"table\"\r\n [ngClass]=\"{ 'cax-datatable-table': true, 'cax-datatable-scrollable-table': scrollable, 'cax-datatable-resizable-table': resizableColumns, 'cax-datatable-resizable-table-fit': resizableColumns && columnResizeMode === 'fit' }\"\r\n [class]=\"tableStyleClass\"\r\n [ngStyle]=\"tableStyle\"\r\n [attr.id]=\"id + '-table'\"\r\n >\r\n <ng-container *ngTemplateOutlet=\"colGroupTemplate; context: { $implicit: scrollerOptions.columns }\"></ng-container>\r\n <thead role=\"rowgroup\" #thead class=\"cax-datatable-thead\">\r\n <ng-container *ngTemplateOutlet=\"headerGroupedTemplate || headerTemplate; context: { $implicit: scrollerOptions.columns }\"></ng-container>\r\n </thead>\r\n <tbody\r\n role=\"rowgroup\"\r\n class=\"cax-datatable-tbody cax-datatable-frozen-tbody\"\r\n *ngIf=\"frozenValue || frozenBodyTemplate\"\r\n [value]=\"frozenValue\"\r\n [frozenRows]=\"true\"\r\n [pTableBody]=\"scrollerOptions.columns\"\r\n [pTableBodyTemplate]=\"frozenBodyTemplate\"\r\n [frozen]=\"true\"\r\n ></tbody>\r\n <tbody\r\n role=\"rowgroup\"\r\n class=\"cax-datatable-tbody\"\r\n [ngClass]=\"scrollerOptions.contentStyleClass\"\r\n [ngStyle]=\"scrollerOptions.contentStyle\"\r\n [value]=\"dataToRender(scrollerOptions.rows)\"\r\n [pTableBody]=\"scrollerOptions.columns\"\r\n [pTableBodyTemplate]=\"bodyTemplate\"\r\n [scrollerOptions]=\"scrollerOptions\"\r\n ></tbody>\r\n <tbody\r\n role=\"rowgroup\"\r\n *ngIf=\"scrollerOptions.spacerStyle\"\r\n [ngStyle]=\"{ height: 'calc(' + scrollerOptions.spacerStyle.height + ' - ' + scrollerOptions.rows.length * scrollerOptions.itemSize + 'px)' }\"\r\n class=\"cax-datatable-scroller-spacer\"\r\n ></tbody>\r\n <tfoot role=\"rowgroup\" *ngIf=\"footerGroupedTemplate || footerTemplate\" #tfoot class=\"cax-datatable-tfoot\">\r\n <ng-container *ngTemplateOutlet=\"footerGroupedTemplate || footerTemplate; context: { $implicit: scrollerOptions.columns }\"></ng-container>\r\n </tfoot>\r\n </table>\r\n </ng-template>\r\n </div>\r\n\r\n <cax-paginator\r\n [rows]=\"rows\"\r\n [first]=\"first\"\r\n [totalRecords]=\"totalRecords\"\r\n [pageLinkSize]=\"pageLinks\"\r\n [alwaysShow]=\"alwaysShowPaginator\"\r\n (onPageChange)=\"onPageChange($event)\"\r\n [rowsPerPageOptions]=\"rowsPerPageOptions\"\r\n *ngIf=\"paginator && (paginatorPosition === 'bottom' || paginatorPosition == 'both')\"\r\n [templateLeft]=\"paginatorLeftTemplate\"\r\n [templateRight]=\"paginatorRightTemplate\"\r\n [dropdownAppendTo]=\"paginatorDropdownAppendTo\"\r\n [dropdownScrollHeight]=\"paginatorDropdownScrollHeight\"\r\n [currentPageReportTemplate]=\"currentPageReportTemplate\"\r\n [showFirstLastIcon]=\"showFirstLastIcon\"\r\n [dropdownItemTemplate]=\"paginatorDropdownItemTemplate\"\r\n [showCurrentPageReport]=\"showCurrentPageReport\"\r\n [showJumpToPageDropdown]=\"showJumpToPageDropdown\"\r\n [showJumpToPageInput]=\"showJumpToPageInput\"\r\n [showPageLinks]=\"showPageLinks\"\r\n [styleClass]=\"getPaginatorStyleClasses('cax-paginator-bottom')\"\r\n [locale]=\"paginatorLocale\"\r\n >\r\n <ng-template caxTemplate=\"dropdownicon\" *ngIf=\"paginatorDropdownIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorDropdownIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"firstpagelinkicon\" *ngIf=\"paginatorFirstPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorFirstPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"previouspagelinkicon\" *ngIf=\"paginatorPreviousPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorPreviousPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"lastpagelinkicon\" *ngIf=\"paginatorLastPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorLastPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n\r\n <ng-template caxTemplate=\"nextpagelinkicon\" *ngIf=\"paginatorNextPageLinkIconTemplate\">\r\n <ng-container *ngTemplateOutlet=\"paginatorNextPageLinkIconTemplate\"></ng-container>\r\n </ng-template>\r\n </cax-paginator>\r\n\r\n <div *ngIf=\"summaryTemplate\" class=\"cax-datatable-footer\">\r\n <ng-container *ngTemplateOutlet=\"summaryTemplate\"></ng-container>\r\n </div>\r\n\r\n <div\r\n #resizeHelper\r\n class=\"cax-column-resizer-helper\"\r\n [ngStyle]=\"{\r\n display: 'none'\r\n }\"\r\n *ngIf=\"resizableColumns\"\r\n ></div>\r\n <span\r\n #reorderIndicatorUp\r\n class=\"cax-datatable-reorder-indicator-up\"\r\n [ngStyle]=\"{\r\n display: 'none'\r\n }\"\r\n *ngIf=\"reorderableColumns\"\r\n >\r\n <ArrowDownIcon *ngIf=\"!reorderIndicatorUpIconTemplate\" />\r\n <ng-template *ngTemplateOutlet=\"reorderIndicatorUpIconTemplate\"></ng-template>\r\n </span>\r\n <span\r\n #reorderIndicatorDown\r\n class=\"cax-datatable-reorder-indicator-down\"\r\n [ngStyle]=\"{\r\n display: 'none'\r\n }\"\r\n *ngIf=\"reorderableColumns\"\r\n >\r\n <ArrowUpIcon *ngIf=\"!reorderIndicatorDownIconTemplate\" />\r\n <ng-template *ngTemplateOutlet=\"reorderIndicatorDownIconTemplate\"></ng-template>\r\n </span>\r\n</div>\r\n", styles: ["@layer cax{.cax-datatable{position:relative}.cax-datatable>.cax-datatable-wrapper{overflow:auto}.cax-datatable-table{border-spacing:0px;width:100%}.cax-datatable .cax-sortable-column{cursor:pointer;-webkit-user-select:none;user-select:none}.cax-datatable .cax-sortable-column .cax-column-title,.cax-datatable .cax-sortable-column .cax-sortable-column-icon,.cax-datatable .cax-sortable-column .cax-sortable-column-badge{vertical-align:middle}.cax-datatable .cax-sortable-column .cax-icon-wrapper{display:inline}.cax-datatable .cax-sortable-column .cax-sortable-column-badge{display:inline-flex;align-items:center;justify-content:center}.cax-datatable-hoverable-rows .cax-selectable-row{cursor:pointer}.cax-datatable-scrollable>.cax-datatable-wrapper{position:relative}.cax-datatable-scrollable-table>.cax-datatable-thead{position:sticky;top:0;z-index:2}.cax-datatable-scrollable-table>.cax-datatable-frozen-tbody{position:sticky;z-index:1}.cax-datatable-scrollable-table>.cax-datatable-tfoot{position:sticky;bottom:0;z-index:1}.cax-datatable-scrollable .cax-frozen-column{position:sticky;background:inherit;z-index:1}.cax-datatable-scrollable th.cax-frozen-column{z-index:1}.cax-datatable-flex-scrollable{display:flex;flex-direction:column;height:100%}.cax-datatable-flex-scrollable>.cax-datatable-wrapper{display:flex;flex-direction:column;flex:1;height:100%}.cax-datatable-scrollable-table>.cax-datatable-tbody>.cax-rowgroucax-header{position:sticky;z-index:2}.cax-datatable-resizable-table>.cax-datatable-thead>tr>th,.cax-datatable-resizable-table>.cax-datatable-tfoot>tr>td,.cax-datatable-resizable-table>.cax-datatable-tbody>tr>td{overflow:hidden;white-space:nowrap}.cax-datatable-resizable-table>.cax-datatable-thead>tr>th.cax-resizable-column:not(.cax-frozen-column){background-clip:padding-box;position:relative}.cax-datatable-resizable-table-fit>.cax-datatable-thead>tr>th.cax-resizable-column:last-child .cax-column-resizer{display:none}.cax-datatable .cax-column-resizer{display:block;position:absolute!important;top:0;right:0;margin:0;width:.5rem;height:100%;padding:0;cursor:col-resize;border:1px solid transparent}.cax-datatable .cax-column-resizer-helper{width:1px;position:absolute;z-index:10;display:none}.cax-datatable .cax-row-editor-init,.cax-datatable .cax-row-editor-save,.cax-datatable .cax-row-editor-cancel,.cax-datatable .cax-row-toggler{display:inline-flex;align-items:center;justify-content:center;overflow:hidden;position:relative}.cax-datatable-reorder-indicator-up,.cax-datatable-reorder-indicator-down{position:absolute}.cax-datatable-reorderablerow-handle,[caxReorderableColumn]{cursor:move}.cax-datatable .cax-datatable-loading-overlay{position:absolute;display:flex;align-items:center;justify-content:center;z-index:3}.cax-column-filter-row{display:flex;align-items:center;width:100%}.cax-column-filter-menu{display:inline-flex}.cax-column-filter-row cax-columnfilterformelement{flex:1 1 auto;width:1%}.cax-column-filter-menu-button,.cax-column-filter-clear-button{display:inline-flex;justify-content:center;align-items:center;cursor:pointer;text-decoration:none;overflow:hidden;position:relative}.cax-column-filter-overlay{position:absolute;top:0;left:0}.cax-column-filter-row-items{margin:0;padding:0;list-style:none}.cax-column-filter-row-item{cursor:pointer}.cax-column-filter-add-button,.cax-column-filter-remove-button{justify-content:center}.cax-column-filter-add-button .cax-button-label,.cax-column-filter-remove-button .cax-button-label{flex-grow:0}.cax-column-filter-buttonbar{display:flex;align-items:center;justify-content:space-between}.cax-column-filter-buttonbar .cax-button{width:auto}.cax-datatable-tbody>tr>td>.cax-column-title{display:none}.cax-datatable-scroller-spacer{display:flex}.cax-datatable .cax-scroller .cax-scroller-loading{transform:none!important;min-height:0;position:sticky;top:0;left:0}}\n"] }]
|
|
2438
|
+
}], ctorParameters: () => [{ type: Document, decorators: [{
|
|
2439
|
+
type: Inject,
|
|
2440
|
+
args: [DOCUMENT]
|
|
2441
|
+
}] }, { type: undefined, decorators: [{
|
|
2442
|
+
type: Inject,
|
|
2443
|
+
args: [PLATFORM_ID]
|
|
2444
|
+
}] }, { type: i0.Renderer2 }, { type: i0.ElementRef }, { type: i0.NgZone }, { type: i1.TableService }, { type: i0.ChangeDetectorRef }, { type: i2.FilterService }, { type: i2.OverlayService }, { type: i2.caxConfig }, { type: i3.DomSanitizer }], propDecorators: { frozenColumns: [{
|
|
2445
|
+
type: Input
|
|
2446
|
+
}], frozenValue: [{
|
|
2447
|
+
type: Input
|
|
2448
|
+
}], style: [{
|
|
2449
|
+
type: Input
|
|
2450
|
+
}], styleClass: [{
|
|
2451
|
+
type: Input
|
|
2452
|
+
}], tableStyle: [{
|
|
2453
|
+
type: Input
|
|
2454
|
+
}], tableStyleClass: [{
|
|
2455
|
+
type: Input
|
|
2456
|
+
}], paginator: [{
|
|
2457
|
+
type: Input,
|
|
2458
|
+
args: [{ transform: booleanAttribute }]
|
|
2459
|
+
}], pageLinks: [{
|
|
2460
|
+
type: Input,
|
|
2461
|
+
args: [{ transform: numberAttribute }]
|
|
2462
|
+
}], rowsPerPageOptions: [{
|
|
2463
|
+
type: Input
|
|
2464
|
+
}], alwaysShowPaginator: [{
|
|
2465
|
+
type: Input,
|
|
2466
|
+
args: [{ transform: booleanAttribute }]
|
|
2467
|
+
}], paginatorPosition: [{
|
|
2468
|
+
type: Input
|
|
2469
|
+
}], paginatorStyleClass: [{
|
|
2470
|
+
type: Input
|
|
2471
|
+
}], paginatorDropdownAppendTo: [{
|
|
2472
|
+
type: Input
|
|
2473
|
+
}], paginatorDropdownScrollHeight: [{
|
|
2474
|
+
type: Input
|
|
2475
|
+
}], currentPageReportTemplate: [{
|
|
2476
|
+
type: Input
|
|
2477
|
+
}], showCurrentPageReport: [{
|
|
2478
|
+
type: Input,
|
|
2479
|
+
args: [{ transform: booleanAttribute }]
|
|
2480
|
+
}], showJumpToPageDropdown: [{
|
|
2481
|
+
type: Input,
|
|
2482
|
+
args: [{ transform: booleanAttribute }]
|
|
2483
|
+
}], showJumpToPageInput: [{
|
|
2484
|
+
type: Input,
|
|
2485
|
+
args: [{ transform: booleanAttribute }]
|
|
2486
|
+
}], showFirstLastIcon: [{
|
|
2487
|
+
type: Input,
|
|
2488
|
+
args: [{ transform: booleanAttribute }]
|
|
2489
|
+
}], showPageLinks: [{
|
|
2490
|
+
type: Input,
|
|
2491
|
+
args: [{ transform: booleanAttribute }]
|
|
2492
|
+
}], defaultSortOrder: [{
|
|
2493
|
+
type: Input,
|
|
2494
|
+
args: [{ transform: numberAttribute }]
|
|
2495
|
+
}], sortMode: [{
|
|
2496
|
+
type: Input
|
|
2497
|
+
}], resetPageOnSort: [{
|
|
2498
|
+
type: Input,
|
|
2499
|
+
args: [{ transform: booleanAttribute }]
|
|
2500
|
+
}], selectionMode: [{
|
|
2501
|
+
type: Input
|
|
2502
|
+
}], selectionPageOnly: [{
|
|
2503
|
+
type: Input,
|
|
2504
|
+
args: [{ transform: booleanAttribute }]
|
|
2505
|
+
}], contextMenuSelection: [{
|
|
2506
|
+
type: Input
|
|
2507
|
+
}], contextMenuSelectionChange: [{
|
|
2508
|
+
type: Output
|
|
2509
|
+
}], contextMenuSelectionMode: [{
|
|
2510
|
+
type: Input
|
|
2511
|
+
}], dataKey: [{
|
|
2512
|
+
type: Input
|
|
2513
|
+
}], metaKeySelection: [{
|
|
2514
|
+
type: Input,
|
|
2515
|
+
args: [{ transform: booleanAttribute }]
|
|
2516
|
+
}], rowSelectable: [{
|
|
2517
|
+
type: Input
|
|
2518
|
+
}], rowTrackBy: [{
|
|
2519
|
+
type: Input
|
|
2520
|
+
}], lazy: [{
|
|
2521
|
+
type: Input,
|
|
2522
|
+
args: [{ transform: booleanAttribute }]
|
|
2523
|
+
}], lazyLoadOnInit: [{
|
|
2524
|
+
type: Input,
|
|
2525
|
+
args: [{ transform: booleanAttribute }]
|
|
2526
|
+
}], compareSelectionBy: [{
|
|
2527
|
+
type: Input
|
|
2528
|
+
}], csvSeparator: [{
|
|
2529
|
+
type: Input
|
|
2530
|
+
}], exportFilename: [{
|
|
2531
|
+
type: Input
|
|
2532
|
+
}], filters: [{
|
|
2533
|
+
type: Input
|
|
2534
|
+
}], globalFilterFields: [{
|
|
2535
|
+
type: Input
|
|
2536
|
+
}], filterDelay: [{
|
|
2537
|
+
type: Input,
|
|
2538
|
+
args: [{ transform: numberAttribute }]
|
|
2539
|
+
}], filterLocale: [{
|
|
2540
|
+
type: Input
|
|
2541
|
+
}], expandedRowKeys: [{
|
|
2542
|
+
type: Input
|
|
2543
|
+
}], editingRowKeys: [{
|
|
2544
|
+
type: Input
|
|
2545
|
+
}], rowExpandMode: [{
|
|
2546
|
+
type: Input
|
|
2547
|
+
}], scrollable: [{
|
|
2548
|
+
type: Input,
|
|
2549
|
+
args: [{ transform: booleanAttribute }]
|
|
2550
|
+
}], scrollDirection: [{
|
|
2551
|
+
type: Input
|
|
2552
|
+
}], rowGroupMode: [{
|
|
2553
|
+
type: Input
|
|
2554
|
+
}], scrollHeight: [{
|
|
2555
|
+
type: Input
|
|
2556
|
+
}], virtualScroll: [{
|
|
2557
|
+
type: Input,
|
|
2558
|
+
args: [{ transform: booleanAttribute }]
|
|
2559
|
+
}], virtualScrollItemSize: [{
|
|
2560
|
+
type: Input,
|
|
2561
|
+
args: [{ transform: numberAttribute }]
|
|
2562
|
+
}], virtualScrollOptions: [{
|
|
2563
|
+
type: Input
|
|
2564
|
+
}], virtualScrollDelay: [{
|
|
2565
|
+
type: Input,
|
|
2566
|
+
args: [{ transform: numberAttribute }]
|
|
2567
|
+
}], frozenWidth: [{
|
|
2568
|
+
type: Input
|
|
2569
|
+
}], responsive: [{
|
|
2570
|
+
type: Input
|
|
2571
|
+
}], contextMenu: [{
|
|
2572
|
+
type: Input
|
|
2573
|
+
}], resizableColumns: [{
|
|
2574
|
+
type: Input,
|
|
2575
|
+
args: [{ transform: booleanAttribute }]
|
|
2576
|
+
}], columnResizeMode: [{
|
|
2577
|
+
type: Input
|
|
2578
|
+
}], reorderableColumns: [{
|
|
2579
|
+
type: Input,
|
|
2580
|
+
args: [{ transform: booleanAttribute }]
|
|
2581
|
+
}], loading: [{
|
|
2582
|
+
type: Input,
|
|
2583
|
+
args: [{ transform: booleanAttribute }]
|
|
2584
|
+
}], loadingIcon: [{
|
|
2585
|
+
type: Input
|
|
2586
|
+
}], showLoader: [{
|
|
2587
|
+
type: Input,
|
|
2588
|
+
args: [{ transform: booleanAttribute }]
|
|
2589
|
+
}], rowHover: [{
|
|
2590
|
+
type: Input,
|
|
2591
|
+
args: [{ transform: booleanAttribute }]
|
|
2592
|
+
}], customSort: [{
|
|
2593
|
+
type: Input,
|
|
2594
|
+
args: [{ transform: booleanAttribute }]
|
|
2595
|
+
}], showInitialSortBadge: [{
|
|
2596
|
+
type: Input,
|
|
2597
|
+
args: [{ transform: booleanAttribute }]
|
|
2598
|
+
}], autoLayout: [{
|
|
2599
|
+
type: Input,
|
|
2600
|
+
args: [{ transform: booleanAttribute }]
|
|
2601
|
+
}], exportFunction: [{
|
|
2602
|
+
type: Input
|
|
2603
|
+
}], exportHeader: [{
|
|
2604
|
+
type: Input
|
|
2605
|
+
}], stateKey: [{
|
|
2606
|
+
type: Input
|
|
2607
|
+
}], stateStorage: [{
|
|
2608
|
+
type: Input
|
|
2609
|
+
}], editMode: [{
|
|
2610
|
+
type: Input
|
|
2611
|
+
}], groupRowsBy: [{
|
|
2612
|
+
type: Input
|
|
2613
|
+
}], groupRowsByOrder: [{
|
|
2614
|
+
type: Input,
|
|
2615
|
+
args: [{ transform: numberAttribute }]
|
|
2616
|
+
}], responsiveLayout: [{
|
|
2617
|
+
type: Input
|
|
2618
|
+
}], breakpoint: [{
|
|
2619
|
+
type: Input
|
|
2620
|
+
}], paginatorLocale: [{
|
|
2621
|
+
type: Input
|
|
2622
|
+
}], value: [{
|
|
2623
|
+
type: Input
|
|
2624
|
+
}], columns: [{
|
|
2625
|
+
type: Input
|
|
2626
|
+
}], first: [{
|
|
2627
|
+
type: Input
|
|
2628
|
+
}], rows: [{
|
|
2629
|
+
type: Input
|
|
2630
|
+
}], totalRecords: [{
|
|
2631
|
+
type: Input
|
|
2632
|
+
}], sortField: [{
|
|
2633
|
+
type: Input
|
|
2634
|
+
}], sortOrder: [{
|
|
2635
|
+
type: Input
|
|
2636
|
+
}], multiSortMeta: [{
|
|
2637
|
+
type: Input
|
|
2638
|
+
}], selection: [{
|
|
2639
|
+
type: Input
|
|
2640
|
+
}], selectAll: [{
|
|
2641
|
+
type: Input
|
|
2642
|
+
}], selectAllChange: [{
|
|
2643
|
+
type: Output
|
|
2644
|
+
}], selectionChange: [{
|
|
2645
|
+
type: Output
|
|
2646
|
+
}], onRowSelect: [{
|
|
2647
|
+
type: Output
|
|
2648
|
+
}], onRowUnselect: [{
|
|
2649
|
+
type: Output
|
|
2650
|
+
}], onPage: [{
|
|
2651
|
+
type: Output
|
|
2652
|
+
}], onSort: [{
|
|
2653
|
+
type: Output
|
|
2654
|
+
}], onFilter: [{
|
|
2655
|
+
type: Output
|
|
2656
|
+
}], onLazyLoad: [{
|
|
2657
|
+
type: Output
|
|
2658
|
+
}], onRowExpand: [{
|
|
2659
|
+
type: Output
|
|
2660
|
+
}], onRowCollapse: [{
|
|
2661
|
+
type: Output
|
|
2662
|
+
}], onContextMenuSelect: [{
|
|
2663
|
+
type: Output
|
|
2664
|
+
}], onColResize: [{
|
|
2665
|
+
type: Output
|
|
2666
|
+
}], onColReorder: [{
|
|
2667
|
+
type: Output
|
|
2668
|
+
}], onRowReorder: [{
|
|
2669
|
+
type: Output
|
|
2670
|
+
}], onEditInit: [{
|
|
2671
|
+
type: Output
|
|
2672
|
+
}], onEditComplete: [{
|
|
2673
|
+
type: Output
|
|
2674
|
+
}], onEditCancel: [{
|
|
2675
|
+
type: Output
|
|
2676
|
+
}], onHeaderCheckboxToggle: [{
|
|
2677
|
+
type: Output
|
|
2678
|
+
}], sortFunction: [{
|
|
2679
|
+
type: Output
|
|
2680
|
+
}], firstChange: [{
|
|
2681
|
+
type: Output
|
|
2682
|
+
}], rowsChange: [{
|
|
2683
|
+
type: Output
|
|
2684
|
+
}], onStateSave: [{
|
|
2685
|
+
type: Output
|
|
2686
|
+
}], onStateRestore: [{
|
|
2687
|
+
type: Output
|
|
2688
|
+
}], containerViewChild: [{
|
|
2689
|
+
type: ViewChild,
|
|
2690
|
+
args: ['container']
|
|
2691
|
+
}], resizeHelperViewChild: [{
|
|
2692
|
+
type: ViewChild,
|
|
2693
|
+
args: ['resizeHelper']
|
|
2694
|
+
}], reorderIndicatorUpViewChild: [{
|
|
2695
|
+
type: ViewChild,
|
|
2696
|
+
args: ['reorderIndicatorUp']
|
|
2697
|
+
}], reorderIndicatorDownViewChild: [{
|
|
2698
|
+
type: ViewChild,
|
|
2699
|
+
args: ['reorderIndicatorDown']
|
|
2700
|
+
}], wrapperViewChild: [{
|
|
2701
|
+
type: ViewChild,
|
|
2702
|
+
args: ['wrapper']
|
|
2703
|
+
}], tableViewChild: [{
|
|
2704
|
+
type: ViewChild,
|
|
2705
|
+
args: ['table']
|
|
2706
|
+
}], tableHeaderViewChild: [{
|
|
2707
|
+
type: ViewChild,
|
|
2708
|
+
args: ['thead']
|
|
2709
|
+
}], tableFooterViewChild: [{
|
|
2710
|
+
type: ViewChild,
|
|
2711
|
+
args: ['tfoot']
|
|
2712
|
+
}], scroller: [{
|
|
2713
|
+
type: ViewChild,
|
|
2714
|
+
args: ['scroller']
|
|
2715
|
+
}], templates: [{
|
|
2716
|
+
type: ContentChildren,
|
|
2717
|
+
args: [CaxTemplate]
|
|
2718
|
+
}], virtualRowHeight: [{
|
|
2719
|
+
type: Input
|
|
2720
|
+
}] } });
|
|
2721
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvdGFibGUvdGFibGUudHMiLCIuLi8uLi8uLi9zcmMvYXBwL2NvbXBvbmVudHMvdGFibGUvdGFibGUuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVFLE9BQU8sRUFHSCxnQkFBZ0IsRUFDaEIsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxlQUFlLEVBRWYsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBRUwsZUFBZSxFQUdmLE1BQU0sRUFDTixXQUFXLEVBS1gsU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWUsZUFBZSxFQUFrQixjQUFjLEVBQTBELFdBQVcsRUFBeUMsTUFBTSx1QkFBdUIsQ0FBQztBQUNqTixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDbkQsT0FBTyxFQUFZLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRXRFLE9BQU8sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQXVCekUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7Ozs7Ozs7QUFFL0Q7OztHQUdHO0FBYUgsTUFBTSxPQUFPLEtBQUs7SUFnekJnQjtJQUNHO0lBQ3JCO0lBQ0Q7SUFDQTtJQUNBO0lBQ0E7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QUFlO3VCQUFDLFdBQVc7Z0JBTWYsZ0JBQWdCO3NCQUE1QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBET0NVTUVOVCwgaXNQbGF0Zm9ybUJyb3dzZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgbnVtYmVyQXR0cmlidXRlLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFBMQVRGT1JNX0lELFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCbG9ja2FibGVVSSwgRmlsdGVyTWF0Y2hNb2RlLCBGaWx0ZXJNZXRhZGF0YSwgRmlsdGVyT3BlcmF0b3IsIEZpbHRlclNlcnZpY2UsIExhenlMb2FkTWV0YSwgT3ZlcmxheVNlcnZpY2UsIGNheENvbmZpZywgQ2F4VGVtcGxhdGUsIFNjcm9sbGVyT3B0aW9ucywgU29ydE1ldGEsIFRhYmxlU3RhdGUgfSBmcm9tICdjYXgtZGVzaWduLXN5c3RlbS9hcGknO1xuaW1wb3J0IHsgRG9tSGFuZGxlciB9IGZyb20gJ2NheC1kZXNpZ24tc3lzdGVtL2RvbSc7XG5pbXBvcnQgeyBTY3JvbGxlciwgU2Nyb2xsZXJNb2R1bGUgfSBmcm9tICdjYXgtZGVzaWduLXN5c3RlbS9zY3JvbGxlcic7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ2NheC1kZXNpZ24tc3lzdGVtL3RzLWhlbHBlcnMnO1xuaW1wb3J0IHsgT2JqZWN0VXRpbHMsIFVuaXF1ZUNvbXBvbmVudElkIH0gZnJvbSAnY2F4LWRlc2lnbi1zeXN0ZW0vdXRpbHMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICAgIEV4cG9ydENTVk9wdGlvbnMsXG4gICAgVGFibGVDb2xSZXNpemVFdmVudCxcbiAgICBUYWJsZUNvbHVtblJlb3JkZXJFdmVudCxcbiAgICBUYWJsZUNvbnRleHRNZW51U2VsZWN0RXZlbnQsXG4gICAgVGFibGVFZGl0Q2FuY2VsRXZlbnQsXG4gICAgVGFibGVFZGl0Q29tcGxldGVFdmVudCxcbiAgICBUYWJsZUVkaXRJbml0RXZlbnQsXG4gICAgVGFibGVGaWx0ZXJFdmVudCxcbiAgICBUYWJsZUhlYWRlckNoZWNrYm94VG9nZ2xlRXZlbnQsXG4gICAgVGFibGVMYXp5TG9hZEV2ZW50LFxuICAgIFRhYmxlUGFnZUV2ZW50LFxuICAgIFRhYmxlUm93Q29sbGFwc2VFdmVudCxcbiAgICBUYWJsZVJvd0V4cGFuZEV2ZW50LFxuICAgIFRhYmxlUm93UmVvcmRlckV2ZW50LFxuICAgIFRhYmxlUm93U2VsZWN0RXZlbnQsXG4gICAgVGFibGVSb3dVblNlbGVjdEV2ZW50LFxuICAgIFRhYmxlU2VsZWN0QWxsQ2hhbmdlRXZlbnRcbn0gZnJvbSAnLi90YWJsZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBUYWJsZVNlcnZpY2UgfSBmcm9tICcuL3RhYmxlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQXJyb3dEb3duSWNvbiB9IGZyb20gJ2NheC1kZXNpZ24tc3lzdGVtL2ljb25zL2Fycm93ZG93bic7XG5pbXBvcnQgeyBBcnJvd1VwSWNvbiB9IGZyb20gJ2NheC1kZXNpZ24tc3lzdGVtL2ljb25zL2Fycm93dXAnO1xuaW1wb3J0IHsgU3Bpbm5lckljb24gfSBmcm9tICdjYXgtZGVzaWduLXN5c3RlbS9pY29ucy9zcGlubmVyJztcbmltcG9ydCB7IFBhZ2luYXRvck1vZHVsZSB9IGZyb20gJ2NheC1kZXNpZ24tc3lzdGVtL3BhZ2luYXRvcic7XG5pbXBvcnQgeyBUYWJsZUJvZHkgfSBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUtYm9keS90YWJsZS1ib2R5JztcblxuLyoqXG4gKiBUYWJsZSBkaXNwbGF5cyBkYXRhIGluIHRhYnVsYXIgZm9ybWF0LlxuICogQGdyb3VwIENvbXBvbmVudHNcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdjYXgtdGFibGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LkRlZmF1bHQsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBzdHlsZVVybHM6IFsnLi90YWJsZS5zY3NzJ10sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBQYWdpbmF0b3JNb2R1bGUsIFNjcm9sbGVyTW9kdWxlLCBBcnJvd0Rvd25JY29uLCBBcnJvd1VwSWNvbiwgU3Bpbm5lckljb24sIFRhYmxlQm9keV0sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2NheC1lbGVtZW50J1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgVGFibGUgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQsIEJsb2NrYWJsZVVJLCBPbkNoYW5nZXMge1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIG9iamVjdHMgdG8gcmVwcmVzZW50IGR5bmFtaWMgY29sdW1ucyB0aGF0IGFyZSBmcm96ZW4uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZnJvemVuQ29sdW1uczogYW55W10gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygb2JqZWN0cyB0byBkaXNwbGF5IGFzIGZyb3plbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBmcm96ZW5WYWx1ZTogYW55W10gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSW5saW5lIHN0eWxlIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgc3R5bGU6IHsgW2tsYXNzOiBzdHJpbmddOiBhbnkgfSB8IG51bGwgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogU3R5bGUgY2xhc3Mgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzdHlsZUNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogSW5saW5lIHN0eWxlIG9mIHRoZSB0YWJsZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0YWJsZVN0eWxlOiB7IFtrbGFzczogc3RyaW5nXTogYW55IH0gfCBudWxsIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFN0eWxlIGNsYXNzIG9mIHRoZSB0YWJsZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSB0YWJsZVN0eWxlQ2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGVuIHNwZWNpZmllZCBhcyB0cnVlLCBlbmFibGVzIHRoZSBwYWdpbmF0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBwYWdpbmF0b3I6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIHBhZ2UgbGlua3MgdG8gZGlzcGxheSBpbiBwYWdpbmF0b3IuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgcGFnZUxpbmtzOiBudW1iZXIgPSA1O1xuICAgIC8qKlxuICAgICAqIEFycmF5IG9mIGludGVnZXIvb2JqZWN0IHZhbHVlcyB0byBkaXNwbGF5IGluc2lkZSByb3dzIHBlciBwYWdlIGRyb3Bkb3duIG9mIHBhZ2luYXRvclxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHJvd3NQZXJQYWdlT3B0aW9uczogYW55W10gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBzaG93IGl0IGV2ZW4gdGhlcmUgaXMgb25seSBvbmUgcGFnZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgYWx3YXlzU2hvd1BhZ2luYXRvcjogYm9vbGVhbiA9IHRydWU7XG4gICAgLyoqXG4gICAgICogUG9zaXRpb24gb2YgdGhlIHBhZ2luYXRvciwgb3B0aW9ucyBhcmUgXCJ0b3BcIiwgXCJib3R0b21cIiBvciBcImJvdGhcIi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwYWdpbmF0b3JQb3NpdGlvbjogJ3RvcCcgfCAnYm90dG9tJyB8ICdib3RoJyA9ICdib3R0b20nO1xuICAgIC8qKlxuICAgICAqIEN1c3RvbSBzdHlsZSBjbGFzcyBmb3IgcGFnaW5hdG9yXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgcGFnaW5hdG9yU3R5bGVDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFRhcmdldCBlbGVtZW50IHRvIGF0dGFjaCB0aGUgcGFnaW5hdG9yIGRyb3Bkb3duIG92ZXJsYXksIHZhbGlkIHZhbHVlcyBhcmUgXCJib2R5XCIgb3IgYSBsb2NhbCBuZy10ZW1wbGF0ZSB2YXJpYWJsZSBvZiBhbm90aGVyIGVsZW1lbnQgKG5vdGU6IHVzZSBiaW5kaW5nIHdpdGggYnJhY2tldHMgZm9yIHRlbXBsYXRlIHZhcmlhYmxlcywgZS5nLiBbYXBwZW5kVG9dPVwibXlkaXZcIiBmb3IgYSBkaXYgZWxlbWVudCBoYXZpbmcgI215ZGl2IGFzIHZhcmlhYmxlIG5hbWUpLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHBhZ2luYXRvckRyb3Bkb3duQXBwZW5kVG86IEhUTUxFbGVtZW50IHwgRWxlbWVudFJlZiB8IFRlbXBsYXRlUmVmPGFueT4gfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIHwgYW55O1xuICAgIC8qKlxuICAgICAqIFBhZ2luYXRvciBkcm9wZG93biBoZWlnaHQgb2YgdGhlIHZpZXdwb3J0IGluIHBpeGVscywgYSBzY3JvbGxiYXIgaXMgZGVmaW5lZCBpZiBoZWlnaHQgb2YgbGlzdCBleGNlZWRzIHRoaXMgdmFsdWUuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgcGFnaW5hdG9yRHJvcGRvd25TY3JvbGxIZWlnaHQ6IHN0cmluZyA9ICcyMDBweCc7XG4gICAgLyoqXG4gICAgICogVGVtcGxhdGUgb2YgdGhlIGN1cnJlbnQgcGFnZSByZXBvcnQgZWxlbWVudC4gQXZhaWxhYmxlIHBsYWNlaG9sZGVycyBhcmUge2N1cnJlbnRQYWdlfSx7dG90YWxQYWdlc30se3Jvd3N9LHtmaXJzdH0se2xhc3R9IGFuZCB7dG90YWxSZWNvcmRzfVxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGU6IHN0cmluZyA9ICd7Y3VycmVudFBhZ2V9IG9mIHt0b3RhbFBhZ2VzfSc7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byBkaXNwbGF5IGN1cnJlbnQgcGFnZSByZXBvcnQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dDdXJyZW50UGFnZVJlcG9ydDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGRpc3BsYXkgYSBkcm9wZG93biB0byBuYXZpZ2F0ZSB0byBhbnkgcGFnZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd0p1bXBUb1BhZ2VEcm9wZG93bjogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGRpc3BsYXkgYSBpbnB1dCB0byBuYXZpZ2F0ZSB0byBhbnkgcGFnZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd0p1bXBUb1BhZ2VJbnB1dDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGVuIGVuYWJsZWQsIGljb25zIGFyZSBkaXNwbGF5ZWQgb24gcGFnaW5hdG9yIHRvIGdvIGZpcnN0IGFuZCBsYXN0IHBhZ2UuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNob3dGaXJzdExhc3RJY29uOiBib29sZWFuID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHNob3cgcGFnZSBsaW5rcy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd1BhZ2VMaW5rczogYm9vbGVhbiA9IHRydWU7XG4gICAgLyoqXG4gICAgICogU29ydCBvcmRlciB0byB1c2Ugd2hlbiBhbiB1bnNvcnRlZCBjb2x1bW4gZ2V0cyBzb3J0ZWQgYnkgdXNlciBpbnRlcmFjdGlvbi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBkZWZhdWx0U29ydE9yZGVyOiBudW1iZXIgPSAxO1xuICAgIC8qKlxuICAgICAqIERlZmluZXMgd2hldGhlciBzb3J0aW5nIHdvcmtzIG9uIHNpbmdsZSBjb2x1bW4gb3Igb24gbXVsdGlwbGUgY29sdW1ucy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBzb3J0TW9kZTogJ3NpbmdsZScgfCAnbXVsdGlwbGUnID0gJ3NpbmdsZSc7XG4gICAgLyoqXG4gICAgICogV2hlbiB0cnVlLCByZXNldHMgcGFnaW5hdG9yIHRvIGZpcnN0IHBhZ2UgYWZ0ZXIgc29ydGluZy4gQXZhaWxhYmxlIG9ubHkgd2hlbiBzb3J0TW9kZSBpcyBzZXQgdG8gc2luZ2xlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByZXNldFBhZ2VPblNvcnQ6IGJvb2xlYW4gPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIFNwZWNpZmllcyB0aGUgc2VsZWN0aW9uIG1vZGUsIHZhbGlkIHZhbHVlcyBhcmUgXCJzaW5nbGVcIiBhbmQgXCJtdWx0aXBsZVwiLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHNlbGVjdGlvbk1vZGU6ICdzaW5nbGUnIHwgJ211bHRpcGxlJyB8IHVuZGVmaW5lZCB8IG51bGw7XG4gICAgLyoqXG4gICAgICogV2hlbiBlbmFibGVkIHdpdGggcGFnaW5hdG9yIGFuZCBjaGVja2JveCBzZWxlY3Rpb24gbW9kZSwgdGhlIHNlbGVjdCBhbGwgY2hlY2tib3ggaW4gdGhlIGhlYWRlciB3aWxsIHNlbGVjdCBhbGwgcm93cyBvbiB0aGUgY3VycmVudCBwYWdlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzZWxlY3Rpb25QYWdlT25seTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBTZWxlY3RlZCByb3cgd2l0aCBhIGNvbnRleHQgbWVudS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBjb250ZXh0TWVudVNlbGVjdGlvbjogYW55O1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSBvbiBjb250ZXh0IG1lbnUgc2VsZWN0aW9uIGNoYW5nZS5cbiAgICAgKiBAcGFyYW0geyp9IG9iamVjdCAtIHJvdyBkYXRhLlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBjb250ZXh0TWVudVNlbGVjdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgLyoqXG4gICAgICogIERlZmluZXMgdGhlIGJlaGF2aW9yIG9mIGNvbnRleHQgbWVudSBzZWxlY3Rpb24sIGluIFwic2VwYXJhdGVcIiBtb2RlIGNvbnRleHQgbWVudSB1cGRhdGVzIGNvbnRleHRNZW51U2VsZWN0aW9uIHByb3BlcnR5IHdoZXJlYXMgaW4gam9pbnQgbW9kZSBzZWxlY3Rpb24gcHJvcGVydHkgaXMgdXNlZCBpbnN0ZWFkIHNvIHRoYXQgd2hlbiByb3cgc2VsZWN0aW9uIGlzIGVuYWJsZWQsIGJvdGggcm93IHNlbGVjdGlvbiBhbmQgY29udGV4dCBtZW51IHNlbGVjdGlvbiB1c2UgdGhlIHNhbWUgcHJvcGVydHkuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgY29udGV4dE1lbnVTZWxlY3Rpb25Nb2RlOiBzdHJpbmcgPSAnc2VwYXJhdGUnO1xuICAgIC8qKlxuICAgICAqIEEgcHJvcGVydHkgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYSByZWNvcmQgaW4gZGF0YS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBkYXRhS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB3aGV0aGVyIG1ldGFLZXkgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZm9yIHRoZSBzZWxlY3Rpb24uIE9uIHRvdWNoIGVuYWJsZWQgZGV2aWNlcywgbWV0YUtleVNlbGVjdGlvbiBpcyB0dXJuZWQgb2ZmIGF1dG9tYXRpY2FsbHkuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIG1ldGFLZXlTZWxlY3Rpb246IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIGlmIHRoZSByb3cgaXMgc2VsZWN0YWJsZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSByb3dTZWxlY3RhYmxlOiAocm93OiB7IGRhdGE6IGFueTsgaW5kZXg6IG51bWJlciB9KSA9PiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRvIG9wdGltaXplIHRoZSBkb20gb3BlcmF0aW9ucyBieSBkZWxlZ2F0aW5nIHRvIG5nRm9yVHJhY2tCeSwgZGVmYXVsdCBhbGdvcml0aG0gY2hlY2tzIGZvciBvYmplY3QgaWRlbnRpdHkuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgcm93VHJhY2tCeTogRnVuY3Rpb24gPSAoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSA9PiBpdGVtO1xuICAgIC8qKlxuICAgICAqIERlZmluZXMgaWYgZGF0YSBpcyBsb2FkZWQgYW5kIGludGVyYWN0ZWQgd2l0aCBpbiBsYXp5IG1hbm5lci5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgbGF6eTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gY2FsbCBsYXp5IGxvYWRpbmcgb24gaW5pdGlhbGl6YXRpb24uXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGxhenlMb2FkT25Jbml0OiBib29sZWFuID0gdHJ1ZTtcbiAgICAvKipcbiAgICAgKiBBbGdvcml0aG0gdG8gZGVmaW5lIGlmIGEgcm93IGlzIHNlbGVjdGVkLCB2YWxpZCB2YWx1ZXMgYXJlIFwiZXF1YWxzXCIgdGhhdCBjb21wYXJlcyBieSByZWZlcmVuY2UgYW5kIFwiZGVlcEVxdWFsc1wiIHRoYXQgY29tcGFyZXMgYWxsIGZpZWxkcy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBjb21wYXJlU2VsZWN0aW9uQnk6ICdlcXVhbHMnIHwgJ2RlZXBFcXVhbHMnID0gJ2RlZXBFcXVhbHMnO1xuICAgIC8qKlxuICAgICAqIENoYXJhY3RlciB0byB1c2UgYXMgdGhlIGNzdiBzZXBhcmF0b3IuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgY3N2U2VwYXJhdG9yOiBzdHJpbmcgPSAnLCc7XG4gICAgLyoqXG4gICAgICogTmFtZSBvZiB0aGUgZXhwb3J0ZWQgZmlsZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBleHBvcnRGaWxlbmFtZTogc3RyaW5nID0gJ2Rvd25sb2FkJztcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBGaWx0ZXJNZXRhZGF0YSBvYmplY3RzIHRvIHByb3ZpZGUgZXh0ZXJuYWwgZmlsdGVycy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBmaWx0ZXJzOiB7IFtzOiBzdHJpbmddOiBGaWx0ZXJNZXRhZGF0YSB8IEZpbHRlck1ldGFkYXRhW10gfSA9IHt9O1xuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIGZpZWxkcyBhcyBzdHJpbmcgdG8gdXNlIGluIGdsb2JhbCBmaWx0ZXJpbmcuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZ2xvYmFsRmlsdGVyRmllbGRzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBEZWxheSBpbiBtaWxsaXNlY29uZHMgYmVmb3JlIGZpbHRlcmluZyB0aGUgZGF0YS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBmaWx0ZXJEZWxheTogbnVtYmVyID0gMzAwO1xuICAgIC8qKlxuICAgICAqIExvY2FsZSB0byB1c2UgaW4gZmlsdGVyaW5nLiBUaGUgZGVmYXVsdCBsb2NhbGUgaXMgdGhlIGhvc3QgZW52aXJvbm1lbnQncyBjdXJyZW50IGxvY2FsZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBmaWx0ZXJMb2NhbGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBNYXAgaW5zdGFuY2UgdG8ga2VlcCB0aGUgZXhwYW5kZWQgcm93cyB3aGVyZSBrZXkgb2YgdGhlIG1hcCBpcyB0aGUgZGF0YSBrZXkgb2YgdGhlIHJvdy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBleHBhbmRlZFJvd0tleXM6IHsgW3M6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xuICAgIC8qKlxuICAgICAqIE1hcCBpbnN0YW5jZSB0byBrZWVwIHRoZSByb3dzIGJlaW5nIGVkaXRlZCB3aGVyZSBrZXkgb2YgdGhlIG1hcCBpcyB0aGUgZGF0YSBrZXkgb2YgdGhlIHJvdy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBlZGl0aW5nUm93S2V5czogeyBbczogc3RyaW5nXTogYm9vbGVhbiB9ID0ge307XG4gICAgLyoqXG4gICAgICogV2hldGhlciBtdWx0aXBsZSByb3dzIGNhbiBiZSBleHBhbmRlZCBhdCBhbnkgdGltZS4gVmFsaWQgdmFsdWVzIGFyZSBcIm11bHRpcGxlXCIgYW5kIFwic2luZ2xlXCIuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgcm93RXhwYW5kTW9kZTogJ211bHRpcGxlJyB8ICdzaW5nbGUnID0gJ211bHRpcGxlJztcbiAgICAvKipcbiAgICAgKiBFbmFibGVzIHNjcm9sbGFibGUgdGFibGVzLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzY3JvbGxhYmxlOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIE9yaWVudGF0aW9uIG9mIHRoZSBzY3JvbGxpbmcsIG9wdGlvbnMgYXJlIFwidmVydGljYWxcIiwgXCJob3Jpem9udGFsXCIgYW5kIFwiYm90aFwiLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqIEBkZXByZWNhdGVkIFByb3BlcnR5IGlzIG9ic2VsZXRlIHNpbmNlIHYxNC4yLjAuXG4gICAgICovXG4gICAgQElucHV0KCkgc2Nyb2xsRGlyZWN0aW9uOiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIHwgJ2JvdGgnID0gJ3ZlcnRpY2FsJztcbiAgICAvKipcbiAgICAgKiBUeXBlIG9mIHRoZSByb3cgZ3JvdXBpbmcsIHZhbGlkIHZhbHVlcyBhcmUgXCJzdWJoZWFkZXJcIiBhbmQgXCJyb3dzcGFuXCIuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgcm93R3JvdXBNb2RlOiAnc3ViaGVhZGVyJyB8ICdyb3dzcGFuJyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgdGhlIHNjcm9sbCB2aWV3cG9ydCBpbiBmaXhlZCBwaXhlbHMgb3IgdGhlIFwiZmxleFwiIGtleXdvcmQgZm9yIGEgZHluYW1pYyBzaXplLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHNjcm9sbEhlaWdodDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdGhlIGRhdGEgc2hvdWxkIGJlIGxvYWRlZCBvbiBkZW1hbmQgZHVyaW5nIHNjcm9sbC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgdmlydHVhbFNjcm9sbDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBIZWlnaHQgb2YgYSByb3cgdG8gdXNlIGluIGNhbGN1bGF0aW9ucyBvZiB2aXJ0dWFsIHNjcm9sbGluZy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSB2aXJ0dWFsU2Nyb2xsSXRlbVNpemU6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHVzZSB0aGUgc2Nyb2xsZXIgZmVhdHVyZS4gVGhlIHByb3BlcnRpZXMgb2Ygc2Nyb2xsZXIgY29tcG9uZW50IGNhbiBiZSB1c2VkIGxpa2UgYW4gb2JqZWN0IGluIGl0LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHZpcnR1YWxTY3JvbGxPcHRpb25zOiBTY3JvbGxlck9wdGlvbnMgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogVGhyZXNob2xkIGluIG1pbGxpc2Vjb25kcyB0byBkZWxheSBsYXp5IGxvYWRpbmcgZHVyaW5nIHNjcm9sbGluZy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSB2aXJ0dWFsU2Nyb2xsRGVsYXk6IG51bWJlciA9IDI1MDtcbiAgICAvKipcbiAgICAgKiBXaWR0aCBvZiB0aGUgZnJvemVuIGNvbHVtbnMgY29udGFpbmVyLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGZyb3plbldpZHRoOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyBpZiB0aGUgdGFibGUgaXMgcmVzcG9uc2l2ZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKiBAZGVwcmVjYXRlZCB0YWJsZSBpcyBhbHdheXMgcmVzcG9uc2l2ZSB3aXRoIHNjcm9sbGFibGUgYmVoYXZpb3IuXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IHJlc3BvbnNpdmUoKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzcG9uc2l2ZTtcbiAgICB9XG4gICAgc2V0IHJlc3BvbnNpdmUodmFsOiBib29sZWFuIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9yZXNwb25zaXZlID0gdmFsO1xuICAgICAgICBjb25zb2xlLndhcm4oJ3Jlc3BvbnNpdmUgcHJvcGVydHkgaXMgZGVwcmVjYXRlZCBhcyB0YWJsZSBpcyBhbHdheXMgcmVzcG9uc2l2ZSB3aXRoIHNjcm9sbGFibGUgYmVoYXZpb3IuJyk7XG4gICAgfVxuICAgIF9yZXNwb25zaXZlOiBib29sZWFuIHwgdW5kZWZpbmVkIHwgbnVsbDtcbiAgICAvKipcbiAgICAgKiBMb2NhbCBuZy10ZW1wbGF0ZSB2YXJpbGFibGUgb2YgYSBDb250ZXh0TWVudS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBjb250ZXh0TWVudTogYW55O1xuICAgIC8qKlxuICAgICAqIFdoZW4gZW5hYmxlZCwgY29sdW1ucyBjYW4gYmUgcmVzaXplZCB1c2luZyBkcmFnIGFuZCBkcm9wLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByZXNpemFibGVDb2x1bW5zOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIERlZmluZXMgd2hldGhlciB0aGUgb3ZlcmFsbCB0YWJsZSB3aWR0aCBzaG91bGQgY2hhbmdlIG9uIGNvbHVtbiByZXNpemUsIHZhbGlkIHZhbHVlcyBhcmUgXCJmaXRcIiBhbmQgXCJleHBhbmRcIi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBjb2x1bW5SZXNpemVNb2RlOiBzdHJpbmcgPSAnZml0JztcbiAgICAvKipcbiAgICAgKiBXaGVuIGVuYWJsZWQsIGNvbHVtbnMgY2FuIGJlIHJlb3JkZXJlZCB1c2luZyBkcmFnIGFuZCBkcm9wLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByZW9yZGVyYWJsZUNvbHVtbnM6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRGlzcGxheXMgYSBsb2FkZXIgdG8gaW5kaWNhdGUgZGF0YSBsb2FkIGlzIGluIHByb2dyZXNzLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBsb2FkaW5nOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFRoZSBpY29uIHRvIHNob3cgd2hpbGUgaW5kaWNhdGluZyBkYXRhIGxvYWQgaXMgaW4gcHJvZ3Jlc3MuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgbG9hZGluZ0ljb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIHNob3cgdGhlIGxvYWRpbmcgbWFzayB3aGVuIGxvYWRpbmcgcHJvcGVydHkgaXMgdHJ1ZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc2hvd0xvYWRlcjogYm9vbGVhbiA9IHRydWU7XG4gICAgLyoqXG4gICAgICogQWRkcyBob3ZlciBlZmZlY3QgdG8gcm93cyB3aXRob3V0IHRoZSBuZWVkIGZvciBzZWxlY3Rpb25Nb2RlLiBOb3RlIHRoYXQgdHIgZWxlbWVudHMgdGhhdCBjYW4gYmUgaG92ZXJlZCBuZWVkIHRvIGhhdmUgXCJjYXgtc2VsZWN0YWJsZS1yb3dcIiBjbGFzcyBmb3Igcm93SG92ZXIgdG8gd29yay5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgcm93SG92ZXI6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byB1c2UgdGhlIGRlZmF1bHQgc29ydGluZyBvciBhIGN1c3RvbSBvbmUgdXNpbmcgc29ydEZ1bmN0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBjdXN0b21Tb3J0OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gdXNlIHRoZSBpbml0aWFsIHNvcnQgYmFkZ2Ugb3Igbm90LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSBzaG93SW5pdGlhbFNvcnRCYWRnZTogYm9vbGVhbiA9IHRydWU7XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgY2VsbCB3aWR0aHMgc2NhbGUgYWNjb3JkaW5nIHRvIHRoZWlyIGNvbnRlbnQgb3Igbm90LiAgRGVwcmVjYXRlZDogIFRhYmxlIGxheW91dCBpcyBhbHdheXMgXCJhdXRvXCIuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGF1dG9MYXlvdXQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRXhwb3J0IGZ1bmN0aW9uLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGV4cG9ydEZ1bmN0aW9uOiBGdW5jdGlvbiB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBDdXN0b20gZXhwb3J0IGhlYWRlciBvZiB0aGUgY29sdW1uIHRvIGJlIGV4cG9ydGVkIGFzIENTVi5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBleHBvcnRIZWFkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBVbmlxdWUgaWRlbnRpZmllciBvZiBhIHN0YXRlZnVsIHRhYmxlIHRvIHVzZSBpbiBzdGF0ZSBzdG9yYWdlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHN0YXRlS2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB3aGVyZSBhIHN0YXRlZnVsIHRhYmxlIGtlZXBzIGl0cyBzdGF0ZSwgdmFsaWQgdmFsdWVzIGFyZSBcInNlc3Npb25cIiBmb3Igc2Vzc2lvblN0b3JhZ2UgYW5kIFwibG9jYWxcIiBmb3IgbG9jYWxTdG9yYWdlLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHN0YXRlU3RvcmFnZTogJ3Nlc3Npb24nIHwgJ2xvY2FsJyA9ICdzZXNzaW9uJztcbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBlZGl0aW5nIG1vZGUsIHZhbGlkIHZhbHVlcyBhcmUgXCJjZWxsXCIgYW5kIFwicm93XCIuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZWRpdE1vZGU6ICdjZWxsJyB8ICdyb3cnID0gJ2NlbGwnO1xuICAgIC8qKlxuICAgICAqIEZpZWxkIG5hbWUgdG8gdXNlIGluIHJvdyBncm91cGluZy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBncm91cFJvd3NCeTogYW55O1xuICAgIC8qKlxuICAgICAqIE9yZGVyIHRvIHNvcnQgd2hlbiBkZWZhdWx0IHJvdyBncm91cGluZyBpcyBlbmFibGVkLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCh7IHRyYW5zZm9ybTogbnVtYmVyQXR0cmlidXRlIH0pIGdyb3VwUm93c0J5T3JkZXI6IG51bWJlciA9IDE7XG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgcmVzcG9uc2l2ZSBtb2RlLCB2YWxpZCBvcHRpb25zIGFyZSBcInN0YWNrXCIgYW5kIFwic2Nyb2xsXCIuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgcmVzcG9uc2l2ZUxheW91dDogc3RyaW5nID0gJ3Njcm9sbCc7XG4gICAgLyoqXG4gICAgICogVGhlIGJyZWFrcG9pbnQgdG8gZGVmaW5lIHRoZSBtYXhpbXVtIHdpZHRoIGJvdW5kYXJ5IHdoZW4gdXNpbmcgc3RhY2sgcmVzcG9uc2l2ZSBsYXlvdXQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgYnJlYWtwb2ludDogc3RyaW5nID0gJzk2MHB4JztcbiAgICAvKipcbiAgICAgKiBMb2NhbGUgdG8gYmUgdXNlZCBpbiBwYWdpbmF0b3IgZm9ybWF0dGluZy5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwYWdpbmF0b3JMb2NhbGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAvKipcbiAgICAgKiBBbiBhcnJheSBvZiBvYmplY3RzIHRvIGRpc3BsYXkuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICovXG4gICAgQElucHV0KCkgZ2V0IHZhbHVlKCk6IGFueVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICAgIH1cbiAgICBzZXQgdmFsdWUodmFsOiBhbnlbXSkge1xuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgb2Ygb2JqZWN0cyB0byByZXByZXNlbnQgZHluYW1pYyBjb2x1bW5zLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBjb2x1bW5zKCk6IGFueVtdIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gICAgfVxuICAgIHNldCBjb2x1bW5zKGNvbHM6IGFueVtdIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2NvbHVtbnMgPSBjb2xzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBJbmRleCBvZiB0aGUgZmlyc3Qgcm93IHRvIGJlIGRpc3BsYXllZC5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBnZXQgZmlyc3QoKTogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maXJzdDtcbiAgICB9XG4gICAgc2V0IGZpcnN0KHZhbDogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9maXJzdCA9IHZhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSBwZXIgcGFnZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBnZXQgcm93cygpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93cztcbiAgICB9XG4gICAgc2V0IHJvd3ModmFsOiBudW1iZXIgfCB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fcm93cyA9IHZhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTnVtYmVyIG9mIHRvdGFsIHJlY29yZHMsIGRlZmF1bHRzIHRvIGxlbmd0aCBvZiB2YWx1ZSB3aGVuIG5vdCBkZWZpbmVkLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCB0b3RhbFJlY29yZHMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RvdGFsUmVjb3JkcztcbiAgICB9XG4gICAgc2V0IHRvdGFsUmVjb3Jkcyh2YWw6IG51bWJlcikge1xuICAgICAgICB0aGlzLl90b3RhbFJlY29yZHMgPSB2YWw7XG4gICAgICAgIHRoaXMudGFibGVTZXJ2aWNlLm9uVG90YWxSZWNvcmRzQ2hhbmdlKHRoaXMuX3RvdGFsUmVjb3Jkcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE5hbWUgb2YgdGhlIGZpZWxkIHRvIHNvcnQgZGF0YSBieSBkZWZhdWx0LlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBzb3J0RmllbGQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zb3J0RmllbGQ7XG4gICAgfVxuICAgIHNldCBzb3J0RmllbGQodmFsOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX3NvcnRGaWVsZCA9IHZhbDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogT3JkZXIgdG8gc29ydCB3aGVuIGRlZmF1bHQgc29ydGluZyBpcyBlbmFibGVkLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBzb3J0T3JkZXIoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NvcnRPcmRlcjtcbiAgICB9XG4gICAgc2V0IHNvcnRPcmRlcih2YWw6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9zb3J0T3JkZXIgPSB2YWw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFuIGFycmF5IG9mIFNvcnRNZXRhIG9iamVjdHMgdG8gc29ydCB0aGUgZGF0YSBieSBkZWZhdWx0IGluIG11bHRpcGxlIHNvcnQgbW9kZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBnZXQgbXVsdGlTb3J0TWV0YSgpOiBTb3J0TWV0YVtdIHwgdW5kZWZpbmVkIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tdWx0aVNvcnRNZXRhO1xuICAgIH1cbiAgICBzZXQgbXVsdGlTb3J0TWV0YSh2YWw6IFNvcnRNZXRhW10gfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgICAgIHRoaXMuX211bHRpU29ydE1ldGEgPSB2YWw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbGVjdGVkIHJvdyBpbiBzaW5nbGUgbW9kZSBvciBhbiBhcnJheSBvZiB2YWx1ZXMgaW4gbXVsdGlwbGUgbW9kZS5cbiAgICAgKiBAZ3JvdXAgUHJvcHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBnZXQgc2VsZWN0aW9uKCk6IGFueSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb247XG4gICAgfVxuICAgIHNldCBzZWxlY3Rpb24odmFsOiBhbnkpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uID0gdmFsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIGFsbCBkYXRhIGlzIHNlbGVjdGVkLlxuICAgICAqIEBncm91cCBQcm9wc1xuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCBzZWxlY3RBbGwoKTogYm9vbGVhbiB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uO1xuICAgIH1cbiAgICBzZXQgc2VsZWN0QWxsKHZhbDogYm9vbGVhbiB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uID0gdmFsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFbWl0cyB3aGVuIHRoZSBhbGwgb2YgdGhlIGl0ZW1zIHNlbGVjdGVkIG9yIHVuc2VsZWN0ZWQuXG4gICAgICogQHBhcmFtIHtUYWJsZVNlbGVjdEFsbENoYW5nZUV2ZW50fSBldmVudCAtIGN1c3RvbSAgYWxsIHNlbGVjdGlvbiBjaGFuZ2UgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIHNlbGVjdEFsbENoYW5nZTogRXZlbnRFbWl0dGVyPFRhYmxlU2VsZWN0QWxsQ2hhbmdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVNlbGVjdEFsbENoYW5nZUV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSBvbiBzZWxlY3Rpb24gY2hhbmdlZC5cbiAgICAgKiBAcGFyYW0ge2FueSB8IG51bGx9IHZhbHVlIC0gc2VsZWN0ZWQgZGF0YS5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55IHwgbnVsbD4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueSB8IG51bGw+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYSByb3cgaXMgc2VsZWN0ZWQuXG4gICAgICogQHBhcmFtIHtUYWJsZVJvd1NlbGVjdEV2ZW50fSBldmVudCAtIGN1c3RvbSBzZWxlY3QgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUm93U2VsZWN0OiBFdmVudEVtaXR0ZXI8VGFibGVSb3dTZWxlY3RFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlUm93U2VsZWN0RXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYSByb3cgaXMgdW5zZWxlY3RlZC5cbiAgICAgKiBAcGFyYW0ge1RhYmxlUm93VW5TZWxlY3RFdmVudH0gZXZlbnQgLSBjdXN0b20gdW5zZWxlY3QgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUm93VW5zZWxlY3Q6IEV2ZW50RW1pdHRlcjxUYWJsZVJvd1VuU2VsZWN0RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVJvd1VuU2VsZWN0RXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gcGFnaW5hdGlvbiBvY2N1cnMuXG4gICAgICogQHBhcmFtIHtUYWJsZVBhZ2VFdmVudH0gZXZlbnQgLSBjdXN0b20gcGFnaW5hdGlvbiBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25QYWdlOiBFdmVudEVtaXR0ZXI8VGFibGVQYWdlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVBhZ2VFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhIGNvbHVtbiBnZXRzIHNvcnRlZC5cbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IC0gc29ydCBtZXRhLlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblNvcnQ6IEV2ZW50RW1pdHRlcjx7IG11bHRpc29ydG1ldGE6IFNvcnRNZXRhW10gfSB8IGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgbXVsdGlzb3J0bWV0YTogU29ydE1ldGFbXSB9IHwgYW55PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGRhdGEgaXMgZmlsdGVyZWQuXG4gICAgICogQHBhcmFtIHtUYWJsZUZpbHRlckV2ZW50fSBldmVudCAtIGN1c3RvbSBmaWx0ZXJpbmcgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uRmlsdGVyOiBFdmVudEVtaXR0ZXI8VGFibGVGaWx0ZXJFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlRmlsdGVyRXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gcGFnaW5nLCBzb3J0aW5nIG9yIGZpbHRlcmluZyBoYXBwZW5zIGluIGxhenkgbW9kZS5cbiAgICAgKiBAcGFyYW0ge1RhYmxlTGF6eUxvYWRFdmVudH0gZXZlbnQgLSBjdXN0b20gbGF6eSBsb2FkaW5nIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkxhenlMb2FkOiBFdmVudEVtaXR0ZXI8VGFibGVMYXp5TG9hZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVMYXp5TG9hZEV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGEgcm93IGlzIGV4cGFuZGVkLlxuICAgICAqIEBwYXJhbSB7VGFibGVSb3dFeHBhbmRFdmVudH0gZXZlbnQgLSBjdXN0b20gcm93IGV4cGFuZCBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Sb3dFeHBhbmQ6IEV2ZW50RW1pdHRlcjxUYWJsZVJvd0V4cGFuZEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVSb3dFeHBhbmRFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhIHJvdyBpcyBjb2xsYXBzZWQuXG4gICAgICogQHBhcmFtIHtUYWJsZVJvd0NvbGxhcHNlRXZlbnR9IGV2ZW50IC0gY3VzdG9tIHJvdyBjb2xsYXBzZSBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Sb3dDb2xsYXBzZTogRXZlbnRFbWl0dGVyPFRhYmxlUm93Q29sbGFwc2VFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlUm93Q29sbGFwc2VFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhIHJvdyBpcyBzZWxlY3RlZCB3aXRoIHJpZ2h0IGNsaWNrLlxuICAgICAqIEBwYXJhbSB7VGFibGVDb250ZXh0TWVudVNlbGVjdEV2ZW50fSBldmVudCAtIGN1c3RvbSBjb250ZXh0IG1lbnUgc2VsZWN0IGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvbnRleHRNZW51U2VsZWN0OiBFdmVudEVtaXR0ZXI8VGFibGVDb250ZXh0TWVudVNlbGVjdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVDb250ZXh0TWVudVNlbGVjdEV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGEgY29sdW1uIGlzIHJlc2l6ZWQuXG4gICAgICogQHBhcmFtIHtUYWJsZUNvbFJlc2l6ZUV2ZW50fSBldmVudCAtIGN1c3RvbSBjb2x1bW4gcmVzaXplIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkNvbFJlc2l6ZTogRXZlbnRFbWl0dGVyPFRhYmxlQ29sUmVzaXplRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUNvbFJlc2l6ZUV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGEgY29sdW1uIGlzIHJlb3JkZXJlZC5cbiAgICAgKiBAcGFyYW0ge1RhYmxlQ29sdW1uUmVvcmRlckV2ZW50fSBldmVudCAtIGN1c3RvbSBjb2x1bW4gcmVvcmRlciBldmVudC5cbiAgICAgKiBAZ3JvdXAgRW1pdHNcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgb25Db2xSZW9yZGVyOiBFdmVudEVtaXR0ZXI8VGFibGVDb2x1bW5SZW9yZGVyRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUNvbHVtblJlb3JkZXJFdmVudD4oKTtcbiAgICAvKipcbiAgICAgKiBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiBhIHJvdyBpcyByZW9yZGVyZWQuXG4gICAgICogQHBhcmFtIHtUYWJsZVJvd1Jlb3JkZXJFdmVudH0gZXZlbnQgLSBjdXN0b20gcm93IHJlb3JkZXIgZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uUm93UmVvcmRlcjogRXZlbnRFbWl0dGVyPFRhYmxlUm93UmVvcmRlckV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVSb3dSZW9yZGVyRXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gYSBjZWxsIHN3aXRjaGVzIHRvIGVkaXQgbW9kZS5cbiAgICAgKiBAcGFyYW0ge1RhYmxlRWRpdEluaXRFdmVudH0gZXZlbnQgLSBjdXN0b20gZWRpdCBpbml0IGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkVkaXRJbml0OiBFdmVudEVtaXR0ZXI8VGFibGVFZGl0SW5pdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVFZGl0SW5pdEV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGNlbGwgZWRpdCBpcyBjb21wbGV0ZWQuXG4gICAgICogQHBhcmFtIHtUYWJsZUVkaXRDb21wbGV0ZUV2ZW50fSBldmVudCAtIGN1c3RvbSBlZGl0IGNvbXBsZXRlIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkVkaXRDb21wbGV0ZTogRXZlbnRFbWl0dGVyPFRhYmxlRWRpdENvbXBsZXRlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUVkaXRDb21wbGV0ZUV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIGNlbGwgZWRpdCBpcyBjYW5jZWxsZWQgd2l0aCBlc2NhcGUga2V5LlxuICAgICAqIEBwYXJhbSB7VGFibGVFZGl0Q2FuY2VsRXZlbnR9IGV2ZW50IC0gY3VzdG9tIGVkaXQgY2FuY2VsIGV2ZW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvbkVkaXRDYW5jZWw6IEV2ZW50RW1pdHRlcjxUYWJsZUVkaXRDYW5jZWxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRhYmxlRWRpdENhbmNlbEV2ZW50PigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIHN0YXRlIG9mIGhlYWRlciBjaGVja2JveCBjaGFuZ2VzLlxuICAgICAqIEBwYXJhbSB7VGFibGVIZWFkZXJDaGVja2JveFRvZ2dsZUV2ZW50fSBldmVudCAtIGN1c3RvbSBoZWFkZXIgY2hlY2tib3ggZXZlbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIG9uSGVhZGVyQ2hlY2tib3hUb2dnbGU6IEV2ZW50RW1pdHRlcjxUYWJsZUhlYWRlckNoZWNrYm94VG9nZ2xlRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZUhlYWRlckNoZWNrYm94VG9nZ2xlRXZlbnQ+KCk7XG4gICAgLyoqXG4gICAgICogQSBmdW5jdGlvbiB0byBpbXBsZW1lbnQgY3VzdG9tIHNvcnRpbmcsIHJlZmVyIHRvIHNvcnRpbmcgc2VjdGlvbiBmb3IgZGV0YWlscy5cbiAgICAgKiBAcGFyYW0ge2FueX0gYW55IC0gc29ydCBtZXRhLlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBzb3J0RnVuY3Rpb246IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgdG8gaW52b2tlIG9uIHBhZ2luYXRpb24uXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IG51bWJlciAtIGZpcnN0IGVsZW1lbnQuXG4gICAgICogQGdyb3VwIEVtaXRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIGZpcnN0Q2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSBvbiByb3dzIGNoYW5nZS5cbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIC0gUm93IGNvdW50LlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSByb3dzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB0YWJsZSBzdGF0ZSBpcyBzYXZlZC5cbiAgICAgKiBAcGFyYW0ge1RhYmxlU3RhdGV9IG9iamVjdCAtIHRhYmxlIHN0YXRlLlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblN0YXRlU2F2ZTogRXZlbnRFbWl0dGVyPFRhYmxlU3RhdGU+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVN0YXRlPigpO1xuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHRvIGludm9rZSB0YWJsZSBzdGF0ZSBpcyByZXN0b3JlZC5cbiAgICAgKiBAcGFyYW0ge1RhYmxlU3RhdGV9IG9iamVjdCAtIHRhYmxlIHN0YXRlLlxuICAgICAqIEBncm91cCBFbWl0c1xuICAgICAqL1xuICAgIEBPdXRwdXQoKSBvblN0YXRlUmVzdG9yZTogRXZlbnRFbWl0dGVyPFRhYmxlU3RhdGU+ID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVN0YXRlPigpO1xuXG4gICAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyVmlld0NoaWxkOiBOdWxsYWJsZTxFbGVtZW50UmVmPjtcblxuICAgIEBWaWV3Q2hpbGQoJ3Jlc2l6ZUhlbHBlcicpIHJlc2l6ZUhlbHBlclZpZXdDaGlsZDogTnVsbGFibGU8RWxlbWVudFJlZj47XG5cbiAgICBAVmlld0NoaWxkKCdyZW9yZGVySW5kaWNhdG9yVXAnKSByZW9yZGVySW5kaWNhdG9yVXBWaWV3Q2hpbGQ6IE51bGxhYmxlPEVsZW1lbnRSZWY+O1xuXG4gICAgQFZpZXdDaGlsZCgncmVvcmRlckluZGljYXRvckRvd24nKSByZW9yZGVySW5kaWNhdG9yRG93blZpZXdDaGlsZDogTnVsbGFibGU8RWxlbWVudFJlZj47XG5cbiAgICBAVmlld0NoaWxkKCd3cmFwcGVyJykgd3JhcHBlclZpZXdDaGlsZDogTnVsbGFibGU8RWxlbWVudFJlZj47XG5cbiAgICBAVmlld0NoaWxkKCd0YWJsZScpIHRhYmxlVmlld0NoaWxkOiBOdWxsYWJsZTxFbGVtZW50UmVmPjtcblxuICAgIEBWaWV3Q2hpbGQoJ3RoZWFkJykgdGFibGVIZWFkZXJWaWV3Q2hpbGQ6IE51bGxhYmxlPEVsZW1lbnRSZWY+O1xuXG4gICAgQFZpZXdDaGlsZCgndGZvb3QnKSB0YWJsZUZvb3RlclZpZXdDaGlsZDogTnVsbGFibGU8RWxlbWVudFJlZj47XG5cbiAgICBAVmlld0NoaWxkKCdzY3JvbGxlcicpIHNjcm9sbGVyOiBOdWxsYWJsZTxTY3JvbGxlcj47XG5cbiAgICBAQ29udGVudENoaWxkcmVuKENheFRlbXBsYXRlKSB0ZW1wbGF0ZXM6IE51bGxhYmxlPFF1ZXJ5TGlzdDxDYXhUZW1wbGF0ZT4+O1xuICAgIC8qKlxuICAgICAqIEluZGljYXRlcyB0aGUgaGVpZ2h0IG9mIHJvd3MgdG8gYmUgc2Nyb2xsZWQuXG4gICAgICogQGdyb3VwIFByb3BzXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIHZpcnR1YWxTY3JvbGxJdGVtU2l6ZSBwcm9wZXJ0eSBpbnN0ZWFkLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGdldCB2aXJ0dWFsUm93SGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl92aXJ0dWFsUm93SGVpZ2h0O1xuICAgIH1cbiAgICBzZXQgdmlydHVhbFJvd0hlaWdodCh2YWw6IG51bWJlcikge1xuICAgICAgICB0aGlzLl92aXJ0dWFsUm93SGVpZ2h0ID0gdmFsO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSB2aXJ0dWFsUm93SGVpZ2h0IHByb3BlcnR5IGlzIGRlcHJlY2F0ZWQuJyk7XG4gICAgfVxuICAgIF92aXJ0dWFsUm93SGVpZ2h0OiBudW1iZXIgPSAyODtcblxuICAgIF92YWx1ZTogYW55W10gPSBbXTtcblxuICAgIF9jb2x1bW5zOiBhbnlbXSB8IHVuZGVmaW5lZDtcblxuICAgIF90b3RhbFJlY29yZHM6IG51bWJlciA9IDA7XG5cbiAgICBfZmlyc3Q6IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQgPSAwO1xuXG4gICAgX3Jvd3M6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAgIGZpbHRlcmVkVmFsdWU6IGFueVtdIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuICAgIGhlYWRlclRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIGhlYWRlckdyb3VwZWRUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBib2R5VGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgbG9hZGluZ0JvZHlUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBjYXB0aW9uVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgZm9vdGVyVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgZm9vdGVyR3JvdXBlZFRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIHN1bW1hcnlUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBjb2xHcm91cFRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIGV4cGFuZGVkUm93VGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgZ3JvdXBIZWFkZXJUZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBncm91cEZvb3RlclRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIGZyb3plbkV4cGFuZGVkUm93VGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgZnJvemVuSGVhZGVyVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgZnJvemVuQm9keVRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIGZyb3plbkZvb3RlclRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIGZyb3plbkNvbEdyb3VwVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgZW1wdHlNZXNzYWdlVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgcGFnaW5hdG9yTGVmdFRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIHBhZ2luYXRvclJpZ2h0VGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgcGFnaW5hdG9yRHJvcGRvd25JdGVtVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgbG9hZGluZ0ljb25UZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICByZW9yZGVySW5kaWNhdG9yVXBJY29uVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgcmVvcmRlckluZGljYXRvckRvd25JY29uVGVtcGxhdGU6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgc29ydEljb25UZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBjaGVja2JveEljb25UZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBoZWFkZXJDaGVja2JveEljb25UZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBwYWdpbmF0b3JEcm9wZG93bkljb25UZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBwYWdpbmF0b3JGaXJzdFBhZ2VMaW5rSWNvblRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIHBhZ2luYXRvckxhc3RQYWdlTGlua0ljb25UZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBwYWdpbmF0b3JQcmV2aW91c1BhZ2VMaW5rSWNvblRlbXBsYXRlOiBOdWxsYWJsZTxUZW1wbGF0ZVJlZjxhbnk+PjtcblxuICAgIHBhZ2luYXRvck5leHRQYWdlTGlua0ljb25UZW1wbGF0ZTogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICBzZWxlY3Rpb25LZXlzOiBhbnkgPSB7fTtcblxuICAgIGxhc3RSZXNpemVySGVscGVyWDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICAgcmVvcmRlckljb25XaWR0aDogbnVtYmVyIHwgdW5kZWZpbmVkO1xuXG4gICAgcmVvcmRlckljb25IZWlnaHQ6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAgIGRyYWdnZWRDb2x1bW46IGFueTtcblxuICAgIGRyYWdnZWRSb3dJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuICAgIGRyb3BwZWRSb3dJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuICAgIHJvd0RyYWdnaW5nOiBib29sZWFuIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuICAgIGRyb3BQb3NpdGlvbjogbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuICAgIGVkaXRpbmdDZWxsOiBFbGVtZW50IHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuICAgIGVkaXRpbmdDZWxsRGF0YTogYW55O1xuXG4gICAgZWRpdGluZ0NlbGxGaWVsZDogYW55O1xuXG4gICAgZWRpdGluZ0NlbGxSb3dJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuICAgIHNlbGZDbGljazogYm9vbGVhbiB8IHVuZGVmaW5lZCB8IG51bGw7XG5cbiAgICBkb2N1bWVudEVkaXRMaXN0ZW5lcjogYW55O1xuXG4gICAgX211bHRpU29ydE1ldGE6IFNvcnRNZXRhW10gfCB1bmRlZmluZWQgfCBudWxsO1xuXG4gICAgX3NvcnRGaWVsZDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuICAgIF9zb3J0T3JkZXI6IG51bWJlciA9IDE7XG5cbiAgICBwcmV2ZW50U2VsZWN0aW9uU2V0dGVyUHJvcGFnYXRpb246IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICBfc2VsZWN0aW9uOiBhbnk7XG5cbiAgICBfc2VsZWN0QWxsOiBib29sZWFuIHwgbnVsbCA9IG51bGw7XG5cbiAgICBhbmNob3JSb3dJbmRleDogbnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuICAgIHJhbmdlUm93SW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuICAgIGZpbHRlclRpbWVvdXQ6IGFueTtcblxuICAgIGluaXRpYWxpemVkOiBib29sZWFuIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuICAgIHJvd1RvdWNoZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cbiAgICByZXN0b3JpbmdTb3J0OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgcmVzdG9yaW5nRmlsdGVyOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gICAgc3RhdGVSZXN0b3JlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAgIGNvbHVtbk9yZGVyU3RhdGVSZXN0b3JlZDogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuICAgIGNvbHVtbldpZHRoc1N0YXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgICB0YWJsZVdpZHRoU3RhdGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIG92ZXJsYXlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZDtcblxuICAgIHJlc2l6ZUNvbHVtbkVsZW1lbnQ6IGFueTtcblxuICAgIGNvbHVtblJlc2l6aW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICByb3dHcm91cEhlYWRlclN0eWxlT2JqZWN0OiBhbnkgPSB7fTtcblxuICAgIGlkOiBzdHJpbmcgPSBVbmlxdWVDb21wb25lbnRJZCgpO1xuXG4gICAgc3R5bGVFbGVtZW50OiBhbnk7XG5cbiAgICByZXNwb25zaXZlU3R5bGVFbGVtZW50OiBhbnk7XG5cbiAgICBwcml2YXRlIHdpbmRvdzogV2luZG93O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IERvY3VtZW50LFxuICAgICAgICBASW5qZWN0KFBMQVRGT1JNX0lEKSBwcml2YXRlIHBsYXRmb3JtSWQ6IGFueSxcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwdWJsaWMgZWw6IEVsZW1lbnRSZWYsXG4gICAgICAgIHB1YmxpYyB6b25lOiBOZ1pvbmUsXG4gICAgICAgIHB1YmxpYyB0YWJsZVNlcnZpY2U6IFRhYmxlU2VydmljZSxcbiAgICAgICAgcHVibGljIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHVibGljIGZpbHRlclNlcnZpY2U6IEZpbHRlclNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBvdmVybGF5U2VydmljZTogT3ZlcmxheVNlcnZpY2UsXG4gICAgICAgIHB1YmxpYyBjb25maWc6IGNheENvbmZpZyxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkb21TYW5pdGl6ZXI6IERvbVNhbml0aXplclxuICAgICkge1xuICAgICAgICB0aGlzLndpbmRvdyA9IHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXcgYXMgV2luZG93O1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5sYXp5ICYmIHRoaXMubGF6eUxvYWRPbkluaXQpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkxhenlMb2FkLmVtaXQodGhpcy5jcmVhdGVMYXp5TG9hZE1ldGFkYXRhKCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5yZXN0b3JpbmdGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmluZ0ZpbHRlciA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucmVzcG9uc2l2ZUxheW91dCA9PT0gJ3N0YWNrJykge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVSZXNwb25zaXZlU3R5bGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgKHRoaXMudGVtcGxhdGVzIGFzIFF1ZXJ5TGlzdDxDYXhUZW1wbGF0ZT4pLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIHN3aXRjaCAoaXRlbS5nZXRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdjYXB0aW9uJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYXB0aW9uVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2hlYWRlcic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVyVGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2hlYWRlcmdyb3VwZWQnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhlYWRlckdyb3VwZWRUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnYm9keSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYm9keVRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdsb2FkaW5nYm9keSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ0JvZHlUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZm9vdGVyJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb290ZXJUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZm9vdGVyZ3JvdXBlZCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9vdGVyR3JvdXBlZFRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdzdW1tYXJ5JzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5VGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbGdyb3VwJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2xHcm91cFRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdyb3dleHBhbnNpb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZGVkUm93VGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ2dyb3VwaGVhZGVyJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cEhlYWRlclRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdncm91cGZvb3Rlcic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBGb290ZXJUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZnJvemVuaGVhZGVyJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mcm96ZW5IZWFkZXJUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZnJvemVuYm9keSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnJvemVuQm9keVRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdmcm96ZW5mb290ZXInOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZyb3plbkZvb3RlclRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdmcm96ZW5jb2xncm91cCc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZnJvemVuQ29sR3JvdXBUZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZnJvemVucm93ZXhwYW5zaW9uJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mcm96ZW5FeHBhbmRlZFJvd1RlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdlbXB0eW1lc3NhZ2UnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtcHR5TWVzc2FnZVRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdwYWdpbmF0b3JsZWZ0JzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0b3JMZWZ0VGVtcGxhdGUgPSBpdGVtLnRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgJ3BhZ2luYXRvcnJpZ2h0JzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0b3JSaWdodFRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdwYWdpbmF0b3Jkcm9wZG93bmljb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRvckRyb3Bkb3duSWNvblRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdwYWdpbmF0b3Jkcm9wZG93bml0ZW0nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBhZ2luYXRvckRyb3Bkb3duSXRlbVRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdwYWdpbmF0b3JmaXJzdHBhZ2VsaW5raWNvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdG9yRmlyc3RQYWdlTGlua0ljb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAncGFnaW5hdG9ybGFzdHBhZ2VsaW5raWNvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdG9yTGFzdFBhZ2VMaW5rSWNvblRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdwYWdpbmF0b3JwcmV2aW91c3BhZ2VsaW5raWNvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdG9yUHJldmlvdXNQYWdlTGlua0ljb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAncGFnaW5hdG9ybmV4dHBhZ2VsaW5raWNvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdG9yTmV4dFBhZ2VMaW5rSWNvblRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdsb2FkaW5naWNvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ0ljb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAncmVvcmRlcmluZGljYXRvcnVwaWNvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVvcmRlckluZGljYXRvclVwSWNvblRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdyZW9yZGVyaW5kaWNhdG9yZG93bmljb24nOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlb3JkZXJJbmRpY2F0b3JEb3duSWNvblRlbXBsYXRlID0gaXRlbS50ZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlICdzb3J0aWNvbic6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc29ydEljb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnY2hlY2tib3hpY29uJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja2JveEljb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnaGVhZGVyY2hlY2tib3hpY29uJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJDaGVja2JveEljb25UZW1wbGF0ZSA9IGl0ZW0udGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3Nlcih0aGlzLnBsYXRmb3JtSWQpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1N0YXRlZnVsKCkgJiYgdGhpcy5yZXNpemFibGVDb2x1bW5zKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN0b3JlQ29sdW1uV2lkdGhzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhzaW1wbGVDaGFuZ2U6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKHNpbXBsZUNoYW5nZS52YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGF0ZWZ1bCgpICYmICF0aGlzLnN0YXRlUmVzdG9yZWQgJiYgaXNQbGF0Zm9ybUJyb3dzZXIodGhpcy5wbGF0Zm9ybUlkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZVN0YXRlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gc2ltcGxlQ2hhbmdlLnZhbHVlLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmxhenkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvdGFsUmVjb3JkcyA9IHRoaXMuX3ZhbHVlID8gdGhpcy5fdmFsdWUubGVuZ3RoIDogMDtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvcnRNb2RlID09ICdzaW5nbGUnICYmICh0aGlzLnNvcnRGaWVsZCB8fCB0aGlzLmdyb3VwUm93c0J5KSkgdGhpcy5zb3J0U2luZ2xlKCk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5zb3J0TW9kZSA9PSAnbXVsdGlwbGUnICYmICh0aGlzLm11bHRpU29ydE1ldGEgfHwgdGhpcy5ncm91cFJvd3NCeSkpIHRoaXMuc29ydE11bHRpcGxlKCk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5oYXNGaWx0ZXIoKSlcbiAgICAgICAgICAgICAgICAgICAgLy9zb3J0IGFscmVhZHkgZmlsdGVyc1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9maWx0ZXIoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50YWJsZVNlcnZpY2Uub25WYWx1ZUNoYW5nZShzaW1wbGVDaGFuZ2UudmFsdWUuY3VycmVudFZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaW1wbGVDaGFuZ2UuY29sdW1ucykge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzU3RhdGVmdWwoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbHVtbnMgPSBzaW1wbGVDaGFuZ2UuY29sdW1ucy5jdXJyZW50VmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZVNlcnZpY2Uub25Db2x1bW5zQ2hhbmdlKHNpbXBsZUNoYW5nZS5jb2x1bW5zLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9jb2x1bW5zICYmIHRoaXMuaXNTdGF0ZWZ1bCgpICYmIHRoaXMucmVvcmRlcmFibGVDb2x1bW5zICYmICF0aGlzLmNvbHVtbk9yZGVyU3RhdGVSZXN0b3JlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdG9yZUNvbHVtbk9yZGVyKCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlU2VydmljZS5vbkNvbHVtbnNDaGFuZ2UodGhpcy5fY29sdW1ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2ltcGxlQ2hhbmdlLnNvcnRGaWVsZCkge1xuICAgICAgICAgICAgdGhpcy5fc29ydEZpZWxkID0gc2ltcGxlQ2hhbmdlLnNvcnRGaWVsZC5jdXJyZW50VmFsdWU7XG5cbiAgICAgICAgICAgIC8vYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGxvYWQgcHJpb3IgdG8gbGF6eSBpbml0aWFsaXphdGlvbiBhdCBvbkluaXRcbiAgICAgICAgICAgIGlmICghdGhpcy5sYXp5IHx8IHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3J0TW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0U2luZ2xlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNpbXBsZUNoYW5nZS5ncm91cFJvd3NCeSkge1xuICAgICAgICAgICAgLy9hdm9pZCB0cmlnZ2VyaW5nIGxhenkgbG9hZCBwcmlvciB0byBsYXp5IGluaXRpYWxpemF0aW9uIGF0IG9uSW5pdFxuICAgICAgICAgICAgaWYgKCF0aGlzLmxhenkgfHwgdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvcnRNb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRTaW5nbGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2ltcGxlQ2hhbmdlLnNvcnRPcmRlcikge1xuICAgICAgICAgICAgdGhpcy5fc29ydE9yZGVyID0gc2ltcGxlQ2hhbmdlLnNvcnRPcmRlci5jdXJyZW50VmFsdWU7XG5cbiAgICAgICAgICAgIC8vYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGxvYWQgcHJpb3IgdG8gbGF6eSBpbml0aWFsaXphdGlvbiBhdCBvbkluaXRcbiAgICAgICAgICAgIGlmICghdGhpcy5sYXp5IHx8IHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zb3J0TW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0U2luZ2xlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNpbXBsZUNoYW5nZS5ncm91cFJvd3NCeU9yZGVyKSB7XG4gICAgICAgICAgICAvL2F2b2lkIHRyaWdnZXJpbmcgbGF6eSBsb2FkIHByaW9yIHRvIGxhenkgaW5pdGlhbGl6YXRpb24gYXQgb25Jbml0XG4gICAgICAgICAgICBpZiAoIXRoaXMubGF6eSB8fCB0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc29ydE1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc29ydFNpbmdsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaW1wbGVDaGFuZ2UubXVsdGlTb3J0TWV0YSkge1xuICAgICAgICAgICAgdGhpcy5fbXVsdGlTb3J0TWV0YSA9IHNpbXBsZUNoYW5nZS5tdWx0aVNvcnRNZXRhLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNvcnRNb2RlID09PSAnbXVsdGlwbGUnICYmICh0aGlzLmluaXRpYWxpemVkIHx8ICghdGhpcy5sYXp5ICYmICF0aGlzLnZpcnR1YWxTY3JvbGwpKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc29ydE11bHRpcGxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2ltcGxlQ2hhbmdlLnNlbGVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uID0gc2ltcGxlQ2hhbmdlLnNlbGVjdGlvbi5jdXJyZW50VmFsdWU7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5wcmV2ZW50U2VsZWN0aW9uU2V0dGVyUHJvcGFnYXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbktleXMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlU2VydmljZS5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wcmV2ZW50U2VsZWN0aW9uU2V0dGVyUHJvcGFnYXRpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzaW1wbGVDaGFuZ2Uuc2VsZWN0QWxsKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3RBbGwgPSBzaW1wbGVDaGFuZ2Uuc2VsZWN0QWxsLmN1cnJlbnRWYWx1ZTtcblxuICAgICAgICAgICAgaWYgKCF0aGlzLnByZXZlbnRTZWxlY3Rpb25TZXR0ZXJQcm9wYWdhdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uS2V5cygpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGVTZXJ2aWNlLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1N0YXRlZnVsKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlU3RhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnByZXZlbnRTZWxlY3Rpb25TZXR0ZXJQcm9wYWdhdGlvbiA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHByb2Nlc3NlZERhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcmVkVmFsdWUgfHwgdGhpcy52YWx1ZSB8fCBbXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9pbml0aWFsQ29sV2lkdGhzOiBudW1iZXJbXTtcblxuICAgIGRhdGFUb1JlbmRlcihkYXRhOiBhbnkpIHtcbiAgICAgICAgY29uc3QgX2RhdGEgPSBkYXRhIHx8IHRoaXMucHJvY2Vzc2VkRGF0YTtcblxuICAgICAgICBpZiAoX2RhdGEgJiYgdGhpcy5wYWdpbmF0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gdGhpcy5sYXp5ID8gMCA6IHRoaXMuZmlyc3Q7XG4gICAgICAgICAgICByZXR1cm4gX2RhdGEuc2xpY2UoZmlyc3QsIDxudW1iZXI+Zmlyc3QgKyA8bnVtYmVyPnRoaXMucm93cyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2RhdGE7XG4gICAgfVxuXG4gICAgdXBkYXRlU2VsZWN0aW9uS2V5cygpIHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YUtleSAmJiB0aGlzLl9zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uS2V5cyA9IHt9O1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5fc2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGRhdGEgb2YgdGhpcy5fc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uS2V5c1tTdHJpbmcoT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShkYXRhLCB0aGlzLmRhdGFLZXkpKV0gPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25LZXlzW1N0cmluZyhPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKHRoaXMuX3NlbGVjdGlvbiwgdGhpcy5kYXRhS2V5KSldID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUGFnZUNoYW5nZShldmVudDogVGFibGVQYWdlRXZlbnQpIHtcbiAgICAgICAgdGhpcy5maXJzdCA9IGV2ZW50LmZpcnN0O1xuICAgICAgICB0aGlzLnJvd3MgPSBldmVudC5yb3dzO1xuXG4gICAgICAgIHRoaXMub25QYWdlLmVtaXQoe1xuICAgICAgICAgICAgZmlyc3Q6IHRoaXMuZmlyc3QsXG4gICAgICAgICAgICByb3dzOiA8bnVtYmVyPnRoaXMucm93c1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodGhpcy5sYXp5KSB7XG4gICAgICAgICAgICB0aGlzLm9uTGF6eUxvYWQuZW1pdCh0aGlzLmNyZWF0ZUxhenlMb2FkTWV0YWRhdGEoKSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpcnN0Q2hhbmdlLmVtaXQodGhpcy5maXJzdCk7XG4gICAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93cyk7XG4gICAgICAgIHRoaXMudGFibGVTZXJ2aWNlLm9uVmFsdWVDaGFuZ2UodGhpcy52YWx1ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNTdGF0ZWZ1bCgpKSB7XG4gICAgICAgICAgICB0aGlzLnNhdmVTdGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hbmNob3JSb3dJbmRleCA9IG51bGw7XG5cbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNjcm9sbFRvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc29ydChldmVudDogYW55KSB7XG4gICAgICAgIGxldCBvcmlnaW5hbEV2ZW50ID0gZXZlbnQub3JpZ2luYWxFdmVudDtcblxuICAgICAgICBpZiAodGhpcy5zb3J0TW9kZSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgICAgICAgIHRoaXMuX3NvcnRPcmRlciA9IHRoaXMuc29ydEZpZWxkID09PSBldmVudC5maWVsZCA/IHRoaXMuc29ydE9yZGVyICogLTEgOiB0aGlzLmRlZmF1bHRTb3J0T3JkZXI7XG4gICAgICAgICAgICB0aGlzLl9zb3J0RmllbGQgPSBldmVudC5maWVsZDtcblxuICAgICAgICAgICAgaWYgKHRoaXMucmVzZXRQYWdlT25Tb3J0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmlyc3QgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RDaGFuZ2UuZW1pdCh0aGlzLl9maXJzdCk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zY3JvbGxhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzZXRTY3JvbGxUb3AoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc29ydFNpbmdsZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNvcnRNb2RlID09PSAnbXVsdGlwbGUnKSB7XG4gICAgICAgICAgICBsZXQgbWV0YUtleSA9ICg8S2V5Ym9hcmRFdmVudD5vcmlnaW5hbEV2ZW50KS5tZXRhS2V5IHx8ICg8S2V5Ym9hcmRFdmVudD5vcmlnaW5hbEV2ZW50KS5jdHJsS2V5O1xuICAgICAgICAgICAgbGV0IHNvcnRNZXRhID0gdGhpcy5nZXRTb3J0TWV0YSg8c3RyaW5nPmV2ZW50LmZpZWxkKTtcblxuICAgICAgICAgICAgaWYgKHNvcnRNZXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFtZXRhS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX211bHRpU29ydE1ldGEgPSBbeyBmaWVsZDogPHN0cmluZz5ldmVudC5maWVsZCwgb3JkZXI6IHNvcnRNZXRhLm9yZGVyICogLTEgfV07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVzZXRQYWdlT25Tb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9maXJzdCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0Q2hhbmdlLmVtaXQodGhpcy5fZmlyc3QpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zY3JvbGxhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNldFNjcm9sbFRvcCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc29ydE1ldGEub3JkZXIgPSBzb3J0TWV0YS5vcmRlciAqIC0xO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFtZXRhS2V5IHx8ICF0aGlzLm11bHRpU29ydE1ldGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbXVsdGlTb3J0TWV0YSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlc2V0UGFnZU9uU29ydCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlyc3QgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdENoYW5nZS5lbWl0KHRoaXMuX2ZpcnN0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAoPFNvcnRNZXRhW10+dGhpcy5fbXVsdGlTb3J0TWV0YSkucHVzaCh7IGZpZWxkOiA8c3RyaW5nPmV2ZW50LmZpZWxkLCBvcmRlcjogdGhpcy5kZWZhdWx0U29ydE9yZGVyIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNvcnRNdWx0aXBsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNTdGF0ZWZ1bCgpKSB7XG4gICAgICAgICAgICB0aGlzLnNhdmVTdGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hbmNob3JSb3dJbmRleCA9IG51bGw7XG4gICAgfVxuXG4gICAgc29ydFNpbmdsZSgpIHtcbiAgICAgICAgbGV0IGZpZWxkID0gdGhpcy5zb3J0RmllbGQgfHwgdGhpcy5ncm91cFJvd3NCeTtcbiAgICAgICAgbGV0IG9yZGVyID0gdGhpcy5zb3J0RmllbGQgPyB0aGlzLnNvcnRPcmRlciA6IHRoaXMuZ3JvdXBSb3dzQnlPcmRlcjtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBSb3dzQnkgJiYgdGhpcy5zb3J0RmllbGQgJiYgdGhpcy5ncm91cFJvd3NCeSAhPT0gdGhpcy5zb3J0RmllbGQpIHtcbiAgICAgICAgICAgIHRoaXMuX211bHRpU29ydE1ldGEgPSBbdGhpcy5nZXRHcm91cFJvd3NNZXRhKCksIHsgZmllbGQ6IHRoaXMuc29ydEZpZWxkLCBvcmRlcjogdGhpcy5zb3J0T3JkZXIgfV07XG4gICAgICAgICAgICB0aGlzLnNvcnRNdWx0aXBsZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpZWxkICYmIG9yZGVyKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZXN0b3JpbmdTb3J0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN0b3JpbmdTb3J0ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmxhenkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uTGF6eUxvYWQuZW1pdCh0aGlzLmNyZWF0ZUxhenlMb2FkTWV0YWRhdGEoKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jdXN0b21Tb3J0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc29ydEZ1bmN0aW9uLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU6IHRoaXMuc29ydE1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmRlcjogb3JkZXJcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZS5zb3J0KChkYXRhMSwgZGF0YTIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZTEgPSBPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKGRhdGExLCBmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUyID0gT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShkYXRhMiwgZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZTEgPT0gbnVsbCAmJiB2YWx1ZTIgIT0gbnVsbCkgcmVzdWx0ID0gLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZTEgIT0gbnVsbCAmJiB2YWx1ZTIgPT0gbnVsbCkgcmVzdWx0ID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlMSA9PSBudWxsICYmIHZhbHVlMiA9PSBudWxsKSByZXN1bHQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlMSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlMiA9PT0gJ3N0cmluZycpIHJlc3VsdCA9IHZhbHVlMS5sb2NhbGVDb21wYXJlKHZhbHVlMik7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHJlc3VsdCA9IHZhbHVlMSA8IHZhbHVlMiA/IC0xIDogdmFsdWUxID4gdmFsdWUyID8gMSA6IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmRlciAqIHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmFsdWUgPSBbLi4udGhpcy52YWx1ZV07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzRmlsdGVyKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZmlsdGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgc29ydE1ldGE6IFNvcnRNZXRhID0ge1xuICAgICAgICAgICAgICAgIGZpZWxkOiBmaWVsZCxcbiAgICAgICAgICAgICAgICBvcmRlcjogb3JkZXJcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMub25Tb3J0LmVtaXQoc29ydE1ldGEpO1xuICAgICAgICAgICAgdGhpcy50YWJsZVNlcnZpY2Uub25Tb3J0KHNvcnRNZXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNvcnRNdWx0aXBsZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBSb3dzQnkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5fbXVsdGlTb3J0TWV0YSkgdGhpcy5fbXVsdGlTb3J0TWV0YSA9IFt0aGlzLmdldEdyb3VwUm93c01ldGEoKV07XG4gICAgICAgICAgICBlbHNlIGlmICgoPFNvcnRNZXRhW10+dGhpcy5tdWx0aVNvcnRNZXRhKVswXS5maWVsZCAhPT0gdGhpcy5ncm91cFJvd3NCeSkgdGhpcy5fbXVsdGlTb3J0TWV0YSA9IFt0aGlzLmdldEdyb3VwUm93c01ldGEoKSwgLi4udGhpcy5fbXVsdGlTb3J0TWV0YV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tdWx0aVNvcnRNZXRhKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5sYXp5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkxhenlMb2FkLmVtaXQodGhpcy5jcmVhdGVMYXp5TG9hZE1ldGFkYXRhKCkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY3VzdG9tU29ydCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRGdW5jdGlvbi5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RlOiB0aGlzLnNvcnRNb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlTb3J0TWV0YTogdGhpcy5tdWx0aVNvcnRNZXRhXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWUuc29ydCgoZGF0YTEsIGRhdGEyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXNvcnRGaWVsZChkYXRhMSwgZGF0YTIsIDxTb3J0TWV0YVtdPnRoaXMubXVsdGlTb3J0TWV0YSwgMCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gWy4uLnRoaXMudmFsdWVdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmhhc0ZpbHRlcigpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2ZpbHRlcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5vblNvcnQuZW1pdCh7XG4gICAgICAgICAgICAgICAgbXVsdGlzb3J0bWV0YTogPFNvcnRNZXRhW10+dGhpcy5tdWx0aVNvcnRNZXRhXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudGFibGVTZXJ2aWNlLm9uU29ydCh0aGlzLm11bHRpU29ydE1ldGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbXVsdGlzb3J0RmllbGQoZGF0YTE6IGFueSwgZGF0YTI6IGFueSwgbXVsdGlTb3J0TWV0YTogU29ydE1ldGFbXSwgaW5kZXg6IG51bWJlcik6IGFueSB7XG4gICAgICAgIGNvbnN0IHZhbHVlMSA9IE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEoZGF0YTEsIG11bHRpU29ydE1ldGFbaW5kZXhdLmZpZWxkKTtcbiAgICAgICAgY29uc3QgdmFsdWUyID0gT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShkYXRhMiwgbXVsdGlTb3J0TWV0YVtpbmRleF0uZmllbGQpO1xuICAgICAgICBpZiAoT2JqZWN0VXRpbHMuY29tcGFyZSh2YWx1ZTEsIHZhbHVlMiwgdGhpcy5maWx0ZXJMb2NhbGUpID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbXVsdGlTb3J0TWV0YS5sZW5ndGggLSAxID4gaW5kZXggPyB0aGlzLm11bHRpc29ydEZpZWxkKGRhdGExLCBkYXRhMiwgbXVsdGlTb3J0TWV0YSwgaW5kZXggKyAxKSA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZVZhbHVlc09uU29ydCh2YWx1ZTEsIHZhbHVlMiwgbXVsdGlTb3J0TWV0YVtpbmRleF0ub3JkZXIpO1xuICAgIH1cblxuICAgIGNvbXBhcmVWYWx1ZXNPblNvcnQodmFsdWUxOiBhbnksIHZhbHVlMjogYW55LCBvcmRlcjogYW55KSB7XG4gICAgICAgIHJldHVybiBPYmplY3RVdGlscy5zb3J0KHZhbHVlMSwgdmFsdWUyLCBvcmRlciwgdGhpcy5maWx0ZXJMb2NhbGUsIHRoaXMuc29ydE9yZGVyKTtcbiAgICB9XG5cbiAgICBnZXRTb3J0TWV0YShmaWVsZDogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpU29ydE1ldGEgJiYgdGhpcy5tdWx0aVNvcnRNZXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm11bHRpU29ydE1ldGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tdWx0aVNvcnRNZXRhW2ldLmZpZWxkID09PSBmaWVsZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tdWx0aVNvcnRNZXRhW2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlzU29ydGVkKGZpZWxkOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuc29ydE1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zb3J0RmllbGQgJiYgdGhpcy5zb3J0RmllbGQgPT09IGZpZWxkO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc29ydE1vZGUgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgICAgIGxldCBzb3J0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpU29ydE1ldGEpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubXVsdGlTb3J0TWV0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tdWx0aVNvcnRNZXRhW2ldLmZpZWxkID09IGZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc29ydGVkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFuZGxlUm93Q2xpY2soZXZlbnQ6IGFueSkge1xuICAgICAgICBsZXQgdGFyZ2V0ID0gPEhUTUxFbGVtZW50PmV2ZW50Lm9yaWdpbmFsRXZlbnQudGFyZ2V0O1xuICAgICAgICBsZXQgdGFyZ2V0Tm9kZSA9IHRhcmdldC5ub2RlTmFtZTtcbiAgICAgICAgbGV0IHBhcmVudE5vZGUgPSB0YXJnZXQucGFyZW50RWxlbWVudCAmJiB0YXJnZXQucGFyZW50RWxlbWVudC5ub2RlTmFtZTtcbiAgICAgICAgaWYgKHRhcmdldE5vZGUgPT0gJ0lOUFVUJyB8fCB0YXJnZXROb2RlID09ICdCVVRUT04nIHx8IHRhcmdldE5vZGUgPT0gJ0EnIHx8IHBhcmVudE5vZGUgPT0gJ0lOUFVUJyB8fCBwYXJlbnROb2RlID09ICdCVVRUT04nIHx8IHBhcmVudE5vZGUgPT0gJ0EnIHx8IERvbUhhbmRsZXIuaGFzQ2xhc3MoZXZlbnQub3JpZ2luYWxFdmVudC50YXJnZXQsICdjYXgtY2xpY2thYmxlJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUpIHtcbiAgICAgICAgICAgIGxldCByb3dEYXRhID0gZXZlbnQucm93RGF0YTtcbiAgICAgICAgICAgIGxldCByb3dJbmRleCA9IGV2ZW50LnJvd0luZGV4O1xuXG4gICAgICAgICAgICB0aGlzLnByZXZlbnRTZWxlY3Rpb25TZXR0ZXJQcm9wYWdhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICBpZiAodGhpcy5pc011bHRpcGxlU2VsZWN0aW9uTW9kZSgpICYmIGV2ZW50Lm9yaWdpbmFsRXZlbnQuc2hpZnRLZXkgJiYgdGhpcy5hbmNob3JSb3dJbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgRG9tSGFuZGxlci5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJhbmdlUm93SW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uUmFuZ2UoZXZlbnQub3JpZ2luYWxFdmVudCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yYW5nZVJvd0luZGV4ID0gcm93SW5kZXg7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RSYW5nZShldmVudC5vcmlnaW5hbEV2ZW50LCByb3dJbmRleCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZCA9IHRoaXMuaXNTZWxlY3RlZChyb3dEYXRhKTtcblxuICAgICAgICAgICAgICAgIGlmICghc2VsZWN0ZWQgJiYgIXRoaXMuaXNSb3dTZWxlY3RhYmxlKHJvd0RhdGEsIHJvd0luZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IG1ldGFTZWxlY3Rpb24gPSB0aGlzLnJvd1RvdWNoZWQgPyBmYWxzZSA6IHRoaXMubWV0YUtleVNlbGVjdGlvbjtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YUtleVZhbHVlID0gdGhpcy5kYXRhS2V5ID8gU3RyaW5nKE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEocm93RGF0YSwgdGhpcy5kYXRhS2V5KSkgOiBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yUm93SW5kZXggPSByb3dJbmRleDtcbiAgICAgICAgICAgICAgICB0aGlzLnJhbmdlUm93SW5kZXggPSByb3dJbmRleDtcblxuICAgICAgICAgICAgICAgIGlmIChtZXRhU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBtZXRhS2V5ID0gZXZlbnQub3JpZ2luYWxFdmVudC5tZXRhS2V5IHx8IGV2ZW50Lm9yaWdpbmFsRXZlbnQuY3RybEtleTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQgJiYgbWV0YUtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVTZWxlY3Rpb25Nb2RlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uS2V5cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWxlY3Rpb25JbmRleCA9IHRoaXMuZmluZEluZGV4SW5TZWxlY3Rpb24ocm93RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb24uZmlsdGVyKCh2YWw6IGFueSwgaTogbnVtYmVyKSA9PiBpICE9IHNlbGVjdGlvbkluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YUtleVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNlbGVjdGlvbktleXNbZGF0YUtleVZhbHVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Sb3dVbnNlbGVjdC5lbWl0KHsgb3JpZ2luYWxFdmVudDogZXZlbnQub3JpZ2luYWxFdmVudCwgZGF0YTogcm93RGF0YSwgdHlwZTogJ3JvdycgfSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1NpbmdsZVNlbGVjdGlvbk1vZGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbiA9IHJvd0RhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChyb3dEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YUtleVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uS2V5cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbktleXNbZGF0YUtleVZhbHVlXSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzTXVsdGlwbGVTZWxlY3Rpb25Nb2RlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobWV0YUtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbiB8fCBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25LZXlzID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uID0gWy4uLnRoaXMuc2VsZWN0aW9uLCByb3dEYXRhXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YUtleVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uS2V5c1tkYXRhS2V5VmFsdWVdID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Sb3dTZWxlY3QuZW1pdCh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50Lm9yaWdpbmFsRXZlbnQsIGRhdGE6IHJvd0RhdGEsIHR5cGU6ICdyb3cnLCBpbmRleDogcm93SW5kZXggfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbktleXMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUm93VW5zZWxlY3QuZW1pdCh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50Lm9yaWdpbmFsRXZlbnQsIGRhdGE6IHJvd0RhdGEsIHR5cGU6ICdyb3cnLCBpbmRleDogcm93SW5kZXggfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbiA9IHJvd0RhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGlvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblJvd1NlbGVjdC5lbWl0KHsgb3JpZ2luYWxFdmVudDogZXZlbnQub3JpZ2luYWxFdmVudCwgZGF0YTogcm93RGF0YSwgdHlwZTogJ3JvdycsIGluZGV4OiByb3dJbmRleCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YUtleVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uS2V5cyA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbktleXNbZGF0YUtleVZhbHVlXSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ211bHRpcGxlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGVjdGlvbkluZGV4ID0gdGhpcy5maW5kSW5kZXhJblNlbGVjdGlvbihyb3dEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbi5maWx0ZXIoKHZhbDogYW55LCBpOiBudW1iZXIpID0+IGkgIT0gc2VsZWN0aW9uSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Sb3dVbnNlbGVjdC5lbWl0KHsgb3JpZ2luYWxFdmVudDogZXZlbnQub3JpZ2luYWxFdmVudCwgZGF0YTogcm93RGF0YSwgdHlwZTogJ3JvdycsIGluZGV4OiByb3dJbmRleCB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YUtleVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnNlbGVjdGlvbktleXNbZGF0YUtleVZhbHVlXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uID8gWy4uLnRoaXMuc2VsZWN0aW9uLCByb3dEYXRhXSA6IFtyb3dEYXRhXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUm93U2VsZWN0LmVtaXQoeyBvcmlnaW5hbEV2ZW50OiBldmVudC5vcmlnaW5hbEV2ZW50LCBkYXRhOiByb3dEYXRhLCB0eXBlOiAncm93JywgaW5kZXg6IHJvd0luZGV4IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhS2V5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25LZXlzW2RhdGFLZXlWYWx1ZV0gPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy50YWJsZVNlcnZpY2Uub25TZWxlY3Rpb25DaGFuZ2UoKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGF0ZWZ1bCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlU3RhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucm93VG91Y2hlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIGhhbmRsZVJvd1RvdWNoRW5kKGV2ZW50OiBFdmVudCkge1xuICAgICAgICB0aGlzLnJvd1RvdWNoZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGhhbmRsZVJvd1JpZ2h0Q2xpY2soZXZlbnQ6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5jb250ZXh0TWVudSkge1xuICAgICAgICAgICAgY29uc3Qgcm93RGF0YSA9IGV2ZW50LnJvd0RhdGE7XG4gICAgICAgICAgICBjb25zdCByb3dJbmRleCA9IGV2ZW50LnJvd0luZGV4O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0TWVudVNlbGVjdGlvbk1vZGUgPT09ICdzZXBhcmF0ZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51U2VsZWN0aW9uID0gcm93RGF0YTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51U2VsZWN0aW9uQ2hhbmdlLmVtaXQocm93RGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNvbnRleHRNZW51U2VsZWN0LmVtaXQoeyBvcmlnaW5hbEV2ZW50OiBldmVudC5vcmlnaW5hbEV2ZW50LCBkYXRhOiByb3dEYXRhLCBpbmRleDogZXZlbnQucm93SW5kZXggfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudS5zaG93KGV2ZW50Lm9yaWdpbmFsRXZlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGVTZXJ2aWNlLm9uQ29udGV4dE1lbnUocm93RGF0YSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29udGV4dE1lbnVTZWxlY3Rpb25Nb2RlID09PSAnam9pbnQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2ZW50U2VsZWN0aW9uU2V0dGVyUHJvcGFnYXRpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZCA9IHRoaXMuaXNTZWxlY3RlZChyb3dEYXRhKTtcbiAgICAgICAgICAgICAgICBsZXQgZGF0YUtleVZhbHVlID0gdGhpcy5kYXRhS2V5ID8gU3RyaW5nKE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEocm93RGF0YSwgdGhpcy5kYXRhS2V5KSkgOiBudWxsO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuaXNSb3dTZWxlY3RhYmxlKHJvd0RhdGEsIHJvd0luZGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNTaW5nbGVTZWxlY3Rpb25Nb2RlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uID0gcm93RGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQocm93RGF0YSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhS2V5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbktleXMgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbktleXNbZGF0YUtleVZhbHVlXSA9IDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc011bHRpcGxlU2VsZWN0aW9uTW9kZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbiA/IFsuLi50aGlzLnNlbGVjdGlvbiwgcm93RGF0YV0gOiBbcm93RGF0YV07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0aW9uKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFLZXlWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uS2V5c1tkYXRhS2V5VmFsdWVdID0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMudGFibGVTZXJ2aWNlLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudS5zaG93KGV2ZW50Lm9yaWdpbmFsRXZlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25Db250ZXh0TWVudVNlbGVjdC5lbWl0KHsgb3JpZ2luYWxFdmVudDogZXZlbnQsIGRhdGE6IHJvd0RhdGEsIGluZGV4OiBldmVudC5yb3dJbmRleCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNlbGVjdFJhbmdlKGV2ZW50OiBNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudCwgcm93SW5kZXg6IG51bWJlciwgaXNNZXRhS2V5U2VsZWN0aW9uPzogYm9vbGVhbiB8IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgcmFuZ2VTdGFydCwgcmFuZ2VFbmQ7XG5cbiAgICAgICAgaWYgKDxudW1iZXI+dGhpcy5hbmNob3JSb3dJbmRleCA+IHJvd0luZGV4KSB7XG4gICAgICAgICAgICByYW5nZVN0YXJ0ID0gcm93SW5kZXg7XG4gICAgICAgICAgICByYW5nZUVuZCA9IHRoaXMuYW5jaG9yUm93SW5kZXg7XG4gICAgICAgIH0gZWxzZSBpZiAoPG51bWJlcj50aGlzLmFuY2hvclJvd0luZGV4IDwgcm93SW5kZXgpIHtcbiAgICAgICAgICAgIHJhbmdlU3RhcnQgPSB0aGlzLmFuY2hvclJvd0luZGV4O1xuICAgICAgICAgICAgcmFuZ2VFbmQgPSByb3dJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJhbmdlU3RhcnQgPSByb3dJbmRleDtcbiAgICAgICAgICAgIHJhbmdlRW5kID0gcm93SW5kZXg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sYXp5ICYmIHRoaXMucGFnaW5hdG9yKSB7XG4gICAgICAgICAgICAocmFuZ2VTdGFydCBhcyBudW1iZXIpIC09IDxudW1iZXI+dGhpcy5maXJzdDtcbiAgICAgICAgICAgIChyYW5nZUVuZCBhcyBudW1iZXIpIC09IDxudW1iZXI+dGhpcy5maXJzdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByYW5nZVJvd3NEYXRhID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSA8bnVtYmVyPnJhbmdlU3RhcnQ7IGkgPD0gPG51bWJlcj5yYW5nZUVuZDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgcmFuZ2VSb3dEYXRhID0gdGhpcy5maWx0ZXJlZFZhbHVlID8gdGhpcy5maWx0ZXJlZFZhbHVlW2ldIDogdGhpcy52YWx1ZVtpXTtcbiAgICAgICAgICAgIGlmICghdGhpcy5pc1NlbGVjdGVkKHJhbmdlUm93RGF0YSkgJiYgIWlzTWV0YUtleVNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc1Jvd1NlbGVjdGFibGUocmFuZ2VSb3dEYXRhLCByb3dJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmFuZ2VSb3dzRGF0YS5wdXNoKHJhbmdlUm93RGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uID0gWy4uLnRoaXMuc2VsZWN0aW9uLCByYW5nZVJvd0RhdGFdO1xuICAgICAgICAgICAgICAgIGxldCBkYXRhS2V5VmFsdWUgPSB0aGlzLmRhdGFLZXkgPyBTdHJpbmcoT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShyYW5nZVJvd0RhdGEsIHRoaXMuZGF0YUtleSkpIDogbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YUtleVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uS2V5c1tkYXRhS2V5VmFsdWVdID0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGlvbik7XG4gICAgICAgIHRoaXMub25Sb3dTZWxlY3QuZW1pdCh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBkYXRhOiByYW5nZVJvd3NEYXRhLCB0eXBlOiAncm93JyB9KTtcbiAgICB9XG5cbiAgICBjbGVhclNlbGVjdGlvblJhbmdlKGV2ZW50OiBNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICBsZXQgcmFuZ2VTdGFydCwgcmFuZ2VFbmQ7XG4gICAgICAgIGxldCByYW5nZVJvd0luZGV4ID0gPG51bWJlcj50aGlzLnJhbmdlUm93SW5kZXg7XG4gICAgICAgIGxldCBhbmNob3JSb3dJbmRleCA9IDxudW1iZXI+dGhpcy5hbmNob3JSb3dJbmRleDtcblxuICAgICAgICBpZiAocmFuZ2VSb3dJbmRleCA+IGFuY2hvclJvd0luZGV4KSB7XG4gICAgICAgICAgICByYW5nZVN0YXJ0ID0gdGhpcy5hbmNob3JSb3dJbmRleDtcbiAgICAgICAgICAgIHJhbmdlRW5kID0gdGhpcy5yYW5nZVJvd0luZGV4O1xuICAgICAgICB9IGVsc2UgaWYgKHJhbmdlUm93SW5kZXggPCBhbmNob3JSb3dJbmRleCkge1xuICAgICAgICAgICAgcmFuZ2VTdGFydCA9IHRoaXMucmFuZ2VSb3dJbmRleDtcbiAgICAgICAgICAgIHJhbmdlRW5kID0gdGhpcy5hbmNob3JSb3dJbmRleDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJhbmdlU3RhcnQgPSB0aGlzLnJhbmdlUm93SW5kZXg7XG4gICAgICAgICAgICByYW5nZUVuZCA9IHRoaXMucmFuZ2VSb3dJbmRleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSA8bnVtYmVyPnJhbmdlU3RhcnQ7IGkgPD0gPG51bWJlcj5yYW5nZUVuZDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgcmFuZ2VSb3dEYXRhID0gdGhpcy52YWx1ZVtpXTtcbiAgICAgICAgICAgIGxldCBzZWxlY3Rpb25JbmRleCA9IHRoaXMuZmluZEluZGV4SW5TZWxlY3Rpb24ocmFuZ2VSb3dEYXRhKTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uLmZpbHRlcigodmFsOiBhbnksIGk6IG51bWJlcikgPT4gaSAhPSBzZWxlY3Rpb25JbmRleCk7XG4gICAgICAgICAgICBsZXQgZGF0YUtleVZhbHVlID0gdGhpcy5kYXRhS2V5ID8gU3RyaW5nKE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEocmFuZ2VSb3dEYXRhLCB0aGlzLmRhdGFLZXkpKSA6IG51bGw7XG4gICAgICAgICAgICBpZiAoZGF0YUtleVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMuc2VsZWN0aW9uS2V5c1tkYXRhS2V5VmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5vblJvd1Vuc2VsZWN0LmVtaXQoeyBvcmlnaW5hbEV2ZW50OiBldmVudCwgZGF0YTogcmFuZ2VSb3dEYXRhLCB0eXBlOiAncm93JyB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzU2VsZWN0ZWQocm93RGF0YTogYW55KSB7XG4gICAgICAgIGlmIChyb3dEYXRhICYmIHRoaXMuc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhS2V5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uS2V5c1tPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKHJvd0RhdGEsIHRoaXMuZGF0YUtleSldICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuc2VsZWN0aW9uKSkgcmV0dXJuIHRoaXMuZmluZEluZGV4SW5TZWxlY3Rpb24ocm93RGF0YSkgPiAtMTtcbiAgICAgICAgICAgICAgICBlbHNlIHJldHVybiB0aGlzLmVxdWFscyhyb3dEYXRhLCB0aGlzLnNlbGVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZmluZEluZGV4SW5TZWxlY3Rpb24ocm93RGF0YTogYW55KSB7XG4gICAgICAgIGxldCBpbmRleDogbnVtYmVyID0gLTE7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbiAmJiB0aGlzLnNlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3Rpb24ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lcXVhbHMocm93RGF0YSwgdGhpcy5zZWxlY3Rpb25baV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIGlzUm93U2VsZWN0YWJsZShkYXRhOiBhbnksIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMucm93U2VsZWN0YWJsZSAmJiAhdGhpcy5yb3dTZWxlY3RhYmxlKHsgZGF0YSwgaW5kZXggfSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHRvZ2dsZVJvd1dpdGhSYWRpbyhldmVudDogYW55LCByb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgdGhpcy5wcmV2ZW50U2VsZWN0aW9uU2V0dGVyUHJvcGFnYXRpb24gPSB0cnVlO1xuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbiAhPSByb3dEYXRhKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNSb3dTZWxlY3RhYmxlKHJvd0RhdGEsIGV2ZW50LnJvd0luZGV4KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uID0gcm93RGF0YTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3Rpb24pO1xuICAgICAgICAgICAgdGhpcy5vblJvd1NlbGVjdC5lbWl0KHsgb3JpZ2luYWxFdmVudDogZXZlbnQub3JpZ2luYWxFdmVudCwgaW5kZXg6IGV2ZW50LnJvd0luZGV4LCBkYXRhOiByb3dEYXRhLCB0eXBlOiAncmFkaW9idXR0b24nIH0pO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5kYXRhS2V5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25LZXlzID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25LZXlzW1N0cmluZyhPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKHJvd0RhdGEsIHRoaXMuZGF0YUtleSkpXSA9IDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGlvbik7XG4gICAgICAgICAgICB0aGlzLm9uUm93VW5zZWxlY3QuZW1pdCh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50Lm9yaWdpbmFsRXZlbnQsIGluZGV4OiBldmVudC5yb3dJbmRleCwgZGF0YTogcm93RGF0YSwgdHlwZTogJ3JhZGlvYnV0dG9uJyB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGFibGVTZXJ2aWNlLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNTdGF0ZWZ1bCgpKSB7XG4gICAgICAgICAgICB0aGlzLnNhdmVTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdG9nZ2xlUm93V2l0aENoZWNrYm94KGV2ZW50OiBhbnksIHJvd0RhdGE6IGFueSkge1xuICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uIHx8IFtdO1xuICAgICAgICBsZXQgc2VsZWN0ZWQgPSB0aGlzLmlzU2VsZWN0ZWQocm93RGF0YSk7XG4gICAgICAgIGxldCBkYXRhS2V5VmFsdWUgPSB0aGlzLmRhdGFLZXkgPyBTdHJpbmcoT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShyb3dEYXRhLCB0aGlzLmRhdGFLZXkpKSA6IG51bGw7XG4gICAgICAgIHRoaXMucHJldmVudFNlbGVjdGlvblNldHRlclByb3BhZ2F0aW9uID0gdHJ1ZTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIGxldCBzZWxlY3Rpb25JbmRleCA9IHRoaXMuZmluZEluZGV4SW5TZWxlY3Rpb24ocm93RGF0YSk7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbi5maWx0ZXIoKHZhbDogYW55LCBpOiBudW1iZXIpID0+IGkgIT0gc2VsZWN0aW9uSW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGlvbik7XG4gICAgICAgICAgICB0aGlzLm9uUm93VW5zZWxlY3QuZW1pdCh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50Lm9yaWdpbmFsRXZlbnQsIGluZGV4OiBldmVudC5yb3dJbmRleCwgZGF0YTogcm93RGF0YSwgdHlwZTogJ2NoZWNrYm94JyB9KTtcbiAgICAgICAgICAgIGlmIChkYXRhS2V5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy5zZWxlY3Rpb25LZXlzW2RhdGFLZXlWYWx1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNSb3dTZWxlY3RhYmxlKHJvd0RhdGEsIGV2ZW50LnJvd0luZGV4KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb24gPyBbLi4udGhpcy5zZWxlY3Rpb24sIHJvd0RhdGFdIDogW3Jvd0RhdGFdO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGlvbik7XG4gICAgICAgICAgICB0aGlzLm9uUm93U2VsZWN0LmVtaXQoeyBvcmlnaW5hbEV2ZW50OiBldmVudC5vcmlnaW5hbEV2ZW50LCBpbmRleDogZXZlbnQucm93SW5kZXgsIGRhdGE6IHJvd0RhdGEsIHR5cGU6ICdjaGVja2JveCcgfSk7XG4gICAgICAgICAgICBpZiAoZGF0YUtleVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25LZXlzW2RhdGFLZXlWYWx1ZV0gPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50YWJsZVNlcnZpY2Uub25TZWxlY3Rpb25DaGFuZ2UoKTtcblxuICAgICAgICBpZiAodGhpcy5pc1N0YXRlZnVsKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZVN0YXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b2dnbGVSb3dzV2l0aENoZWNrYm94KGV2ZW50OiBFdmVudCwgY2hlY2s6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdEFsbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxDaGFuZ2UuZW1pdCh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBjaGVja2VkOiBjaGVjayB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNlbGVjdGlvblBhZ2VPbmx5ID8gdGhpcy5kYXRhVG9SZW5kZXIodGhpcy5wcm9jZXNzZWREYXRhKSA6IHRoaXMucHJvY2Vzc2VkRGF0YTtcbiAgICAgICAgICAgIGxldCBzZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvblBhZ2VPbmx5ICYmIHRoaXMuX3NlbGVjdGlvbiA/IHRoaXMuX3NlbGVjdGlvbi5maWx0ZXIoKHM6IGFueSkgPT4gIWRhdGEuc29tZSgoZDogYW55KSA9PiB0aGlzLmVxdWFscyhzLCBkKSkpIDogW107XG5cbiAgICAgICAgICAgIGlmIChjaGVjaykge1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuZnJvemVuVmFsdWUgPyBbLi4uc2VsZWN0aW9uLCAuLi50aGlzLmZyb3plblZhbHVlLCAuLi5kYXRhXSA6IFsuLi5zZWxlY3Rpb24sIC4uLmRhdGFdO1xuICAgICAgICAgICAgICAgIHNlbGVjdGlvbiA9IHRoaXMucm93U2VsZWN0YWJsZSA/IHNlbGVjdGlvbi5maWx0ZXIoKGRhdGE6IGFueSwgaW5kZXg6IG51bWJlcikgPT4gdGhpcy5yb3dTZWxlY3RhYmxlKHsgZGF0YSwgaW5kZXggfSkpIDogc2VsZWN0aW9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24gPSBzZWxlY3Rpb247XG4gICAgICAgICAgICB0aGlzLnByZXZlbnRTZWxlY3Rpb25TZXR0ZXJQcm9wYWdhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbktleXMoKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5fc2VsZWN0aW9uKTtcbiAgICAgICAgICAgIHRoaXMudGFibGVTZXJ2aWNlLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgICAgICAgICB0aGlzLm9uSGVhZGVyQ2hlY2tib3hUb2dnbGUuZW1pdCh7IG9yaWdpbmFsRXZlbnQ6IGV2ZW50LCBjaGVja2VkOiBjaGVjayB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNTdGF0ZWZ1bCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlU3RhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVxdWFscyhkYXRhMTogYW55LCBkYXRhMjogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVTZWxlY3Rpb25CeSA9PT0gJ2VxdWFscycgPyBkYXRhMSA9PT0gZGF0YTIgOiBPYmplY3RVdGlscy5lcXVhbHMoZGF0YTEsIGRhdGEyLCB0aGlzLmRhdGFLZXkpO1xuICAgIH1cblxuICAgIC8qIExlZ2FjeSBGaWx0ZXJpbmcgZm9yIGN1c3RvbSBlbGVtZW50cyAqL1xuICAgIGZpbHRlcih2YWx1ZTogYW55LCBmaWVsZDogc3RyaW5nLCBtYXRjaE1vZGU6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJUaW1lb3V0KSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5maWx0ZXJUaW1lb3V0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXNGaWx0ZXJCbGFuayh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyc1tmaWVsZF0gPSB7IHZhbHVlOiB2YWx1ZSwgbWF0Y2hNb2RlOiBtYXRjaE1vZGUgfTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZpbHRlcnNbZmllbGRdKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5maWx0ZXJzW2ZpZWxkXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmlsdGVyVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZmlsdGVyKCk7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclRpbWVvdXQgPSBudWxsO1xuICAgICAgICB9LCB0aGlzLmZpbHRlckRlbGF5KTtcblxuICAgICAgICB0aGlzLmFuY2hvclJvd0luZGV4ID0gbnVsbDtcbiAgICB9XG5cbiAgICBmaWx0ZXJHbG9iYWwodmFsdWU6IGFueSwgbWF0Y2hNb2RlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5maWx0ZXIodmFsdWUsICdnbG9iYWwnLCBtYXRjaE1vZGUpO1xuICAgIH1cblxuICAgIGlzRmlsdGVyQmxhbmsoZmlsdGVyOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKGZpbHRlciAhPT0gbnVsbCAmJiBmaWx0ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKCh0eXBlb2YgZmlsdGVyID09PSAnc3RyaW5nJyAmJiBmaWx0ZXIudHJpbSgpLmxlbmd0aCA9PSAwKSB8fCAoQXJyYXkuaXNBcnJheShmaWx0ZXIpICYmIGZpbHRlci5sZW5ndGggPT0gMCkpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZSByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgX2ZpbHRlcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLnJlc3RvcmluZ0ZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5maXJzdCA9IDA7XG4gICAgICAgICAgICB0aGlzLmZpcnN0Q2hhbmdlLmVtaXQodGhpcy5maXJzdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5sYXp5KSB7XG4gICAgICAgICAgICB0aGlzLm9uTGF6eUxvYWQuZW1pdCh0aGlzLmNyZWF0ZUxhenlMb2FkTWV0YWRhdGEoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5oYXNGaWx0ZXIoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5hdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gdGhpcy52YWx1ZSA/IHRoaXMudmFsdWUubGVuZ3RoIDogMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBnbG9iYWxGaWx0ZXJGaWVsZHNBcnJheTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJzWydnbG9iYWwnXSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29sdW1ucyAmJiAhdGhpcy5nbG9iYWxGaWx0ZXJGaWVsZHMpIHRocm93IG5ldyBFcnJvcignR2xvYmFsIGZpbHRlcmluZyByZXF1aXJlcyBkeW5hbWljIGNvbHVtbnMgb3IgZ2xvYmFsRmlsdGVyRmllbGRzIHRvIGJlIGRlZmluZWQuJyk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgZ2xvYmFsRmlsdGVyRmllbGRzQXJyYXkgPSB0aGlzLmdsb2JhbEZpbHRlckZpZWxkcyB8fCB0aGlzLmNvbHVtbnM7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJlZFZhbHVlID0gW107XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxvY2FsTWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZ2xvYmFsTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxvY2FsRmlsdGVyZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBwcm9wIGluIHRoaXMuZmlsdGVycykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVycy5oYXNPd25Qcm9wZXJ0eShwcm9wKSAmJiBwcm9wICE9PSAnZ2xvYmFsJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsRmlsdGVyZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJGaWVsZCA9IHByb3A7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZpbHRlck1ldGEgPSB0aGlzLmZpbHRlcnNbZmlsdGVyRmllbGRdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyTWV0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbWV0YSBvZiBmaWx0ZXJNZXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbE1hdGNoID0gdGhpcy5leGVjdXRlTG9jYWxGaWx0ZXIoZmlsdGVyRmllbGQsIHRoaXMudmFsdWVbaV0sIG1ldGEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG1ldGEub3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLk9SICYmIGxvY2FsTWF0Y2gpIHx8IChtZXRhLm9wZXJhdG9yID09PSBGaWx0ZXJPcGVyYXRvci5BTkQgJiYgIWxvY2FsTWF0Y2gpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbE1hdGNoID0gdGhpcy5leGVjdXRlTG9jYWxGaWx0ZXIoZmlsdGVyRmllbGQsIHRoaXMudmFsdWVbaV0sIDxhbnk+ZmlsdGVyTWV0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbE1hdGNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcnNbJ2dsb2JhbCddICYmICFnbG9iYWxNYXRjaCAmJiBnbG9iYWxGaWx0ZXJGaWVsZHNBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBnbG9iYWxGaWx0ZXJGaWVsZHNBcnJheS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBnbG9iYWxGaWx0ZXJGaWVsZCA9IGdsb2JhbEZpbHRlckZpZWxkc0FycmF5W2pdLmZpZWxkIHx8IGdsb2JhbEZpbHRlckZpZWxkc0FycmF5W2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdsb2JhbE1hdGNoID0gKDxhbnk+dGhpcy5maWx0ZXJTZXJ2aWNlKS5maWx0ZXJzWyg8YW55PnRoaXMuZmlsdGVyc1snZ2xvYmFsJ10pLm1hdGNoTW9kZV0oT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YSh0aGlzLnZhbHVlW2ldLCBnbG9iYWxGaWx0ZXJGaWVsZCksICg8RmlsdGVyTWV0YWRhdGE+dGhpcy5maWx0ZXJzWydnbG9iYWwnXSkudmFsdWUsIHRoaXMuZmlsdGVyTG9jYWxlKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnbG9iYWxNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBsZXQgbWF0Y2hlczogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyc1snZ2xvYmFsJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBsb2NhbEZpbHRlcmVkID8gbG9jYWxGaWx0ZXJlZCAmJiBsb2NhbE1hdGNoICYmIGdsb2JhbE1hdGNoIDogZ2xvYmFsTWF0Y2g7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaGVzID0gbG9jYWxGaWx0ZXJlZCAmJiBsb2NhbE1hdGNoO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRWYWx1ZS5wdXNoKHRoaXMudmFsdWVbaV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVyZWRWYWx1ZS5sZW5ndGggPT09IHRoaXMudmFsdWUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5hdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gdGhpcy5maWx0ZXJlZFZhbHVlID8gdGhpcy5maWx0ZXJlZFZhbHVlLmxlbmd0aCA6IHRoaXMudmFsdWUgPyB0aGlzLnZhbHVlLmxlbmd0aCA6IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vbkZpbHRlci5lbWl0KHtcbiAgICAgICAgICAgIGZpbHRlcnM6IDx7IFtzOiBzdHJpbmddOiBGaWx0ZXJNZXRhZGF0YSB8IHVuZGVmaW5lZCB9PnRoaXMuZmlsdGVycyxcbiAgICAgICAgICAgIGZpbHRlcmVkVmFsdWU6IHRoaXMuZmlsdGVyZWRWYWx1ZSB8fCB0aGlzLnZhbHVlXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMudGFibGVTZXJ2aWNlLm9uVmFsdWVDaGFuZ2UodGhpcy52YWx1ZSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNTdGF0ZWZ1bCgpICYmICF0aGlzLnJlc3RvcmluZ0ZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5zYXZlU3RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnJlc3RvcmluZ0ZpbHRlcikge1xuICAgICAgICAgICAgdGhpcy5yZXN0b3JpbmdGaWx0ZXIgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldFNjcm9sbFRvcCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhlY3V0ZUxvY2FsRmlsdGVyKGZpZWxkOiBzdHJpbmcsIHJvd0RhdGE6IGFueSwgZmlsdGVyTWV0YTogRmlsdGVyTWV0YWRhdGEpOiBib29sZWFuIHtcbiAgICAgICAgbGV0IGZpbHRlclZhbHVlID0gZmlsdGVyTWV0YS52YWx1ZTtcbiAgICAgICAgbGV0IGZpbHRlck1hdGNoTW9kZSA9IGZpbHRlck1ldGEubWF0Y2hNb2RlIHx8IEZpbHRlck1hdGNoTW9kZS5TVEFSVFNfV0lUSDtcbiAgICAgICAgbGV0IGRhdGFGaWVsZFZhbHVlID0gT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShyb3dEYXRhLCBmaWVsZCk7XG4gICAgICAgIGxldCBmaWx0ZXJDb25zdHJhaW50ID0gKDxhbnk+dGhpcy5maWx0ZXJTZXJ2aWNlKS5maWx0ZXJzW2ZpbHRlck1hdGNoTW9kZV07XG5cbiAgICAgICAgcmV0dXJuIGZpbHRlckNvbnN0cmFpbnQoZGF0YUZpZWxkVmFsdWUsIGZpbHRlclZhbHVlLCB0aGlzLmZpbHRlckxvY2FsZSk7XG4gICAgfVxuXG4gICAgaGFzRmlsdGVyKCkge1xuICAgICAgICBsZXQgZW1wdHkgPSB0cnVlO1xuICAgICAgICBmb3IgKGxldCBwcm9wIGluIHRoaXMuZmlsdGVycykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZmlsdGVycy5oYXNPd25Qcm9wZXJ0eShwcm9wKSkge1xuICAgICAgICAgICAgICAgIGVtcHR5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gIWVtcHR5O1xuICAgIH1cblxuICAgIGNyZWF0ZUxhenlMb2FkTWV0YWRhdGEoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZpcnN0OiB0aGlzLmZpcnN0LFxuICAgICAgICAgICAgcm93czogdGhpcy5yb3dzLFxuICAgICAgICAgICAgc29ydEZpZWxkOiB0aGlzLnNvcnRGaWVsZCxcbiAgICAgICAgICAgIHNvcnRPcmRlcjogdGhpcy5zb3J0T3JkZXIsXG4gICAgICAgICAgICBmaWx0ZXJzOiB0aGlzLmZpbHRlcnMsXG4gICAgICAgICAgICBnbG9iYWxGaWx0ZXI6IHRoaXMuZmlsdGVycyAmJiB0aGlzLmZpbHRlcnNbJ2dsb2JhbCddID8gKDxGaWx0ZXJNZXRhZGF0YT50aGlzLmZpbHRlcnNbJ2dsb2JhbCddKS52YWx1ZSA6IG51bGwsXG4gICAgICAgICAgICBtdWx0aVNvcnRNZXRhOiB0aGlzLm11bHRpU29ydE1ldGEsXG4gICAgICAgICAgICBmb3JjZVVwZGF0ZTogKCkgPT4gdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKClcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuX3NvcnRGaWVsZCA9IG51bGw7XG4gICAgICAgIHRoaXMuX3NvcnRPcmRlciA9IHRoaXMuZGVmYXVsdFNvcnRPcmRlcjtcbiAgICAgICAgdGhpcy5fbXVsdGlTb3J0TWV0YSA9IG51bGw7XG4gICAgICAgIHRoaXMudGFibGVTZXJ2aWNlLm9uU29ydChudWxsKTtcblxuICAgICAgICB0aGlzLmNsZWFyRmlsdGVyVmFsdWVzKCk7XG5cbiAgICAgICAgdGhpcy5maWx0ZXJlZFZhbHVlID0gbnVsbDtcblxuICAgICAgICB0aGlzLmZpcnN0ID0gMDtcbiAgICAgICAgdGhpcy5maXJzdENoYW5nZS5lbWl0KHRoaXMuZmlyc3QpO1xuXG4gICAgICAgIGlmICh0aGlzLmxhenkpIHtcbiAgICAgICAgICAgIHRoaXMub25MYXp5TG9hZC5lbWl0KHRoaXMuY3JlYXRlTGF6eUxvYWRNZXRhZGF0YSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudG90YWxSZWNvcmRzID0gdGhpcy5fdmFsdWUgPyB0aGlzLl92YWx1ZS5sZW5ndGggOiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXJGaWx0ZXJWYWx1ZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgWywgZmlsdGVyTWV0YWRhdGFdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZmlsdGVycykpIHtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpbHRlck1ldGFkYXRhKSkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGZpbHRlciBvZiBmaWx0ZXJNZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyTWV0YWRhdGEpIHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJNZXRhZGF0YS52YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5jbGVhcigpO1xuICAgIH1cblxuICAgIGdldEV4cG9ydEhlYWRlcihjb2x1bW46IGFueSkge1xuICAgICAgICByZXR1cm4gY29sdW1uWzxzdHJpbmc+dGhpcy5leHBvcnRIZWFkZXJdIHx8IGNvbHVtbi5oZWFkZXIgfHwgY29sdW1uLmZpZWxkO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEYXRhIGV4cG9ydCBtZXRob2QuXG4gICAgICogQHBhcmFtIHtFeHBvcnRDU1ZPcHRpb25zfSBvYmplY3QgLSBFeHBvcnQgb3B0aW9ucy5cbiAgICAgKiBAZ3JvdXAgTWV0aG9kXG4gICAgICovXG4gICAgcHVibGljIGV4cG9ydENTVihvcHRpb25zPzogRXhwb3J0Q1NWT3B0aW9ucykge1xuICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgbGV0IGNzdiA9ICcnO1xuICAgICAgICBsZXQgY29sdW1ucyA9IHRoaXMuY29sdW1ucztcblxuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLnNlbGVjdGlvbk9ubHkpIHtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLnNlbGVjdGlvbiB8fCBbXTtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zICYmIG9wdGlvbnMuYWxsVmFsdWVzKSB7XG4gICAgICAgICAgICBkYXRhID0gdGhpcy52YWx1ZSB8fCBbXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLmZpbHRlcmVkVmFsdWUgfHwgdGhpcy52YWx1ZTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZnJvemVuVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YSA/IFsuLi50aGlzLmZyb3plblZhbHVlLCAuLi5kYXRhXSA6IHRoaXMuZnJvemVuVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBleHBvcnRhYmxlQ29sdW1uczogYW55W10gPSAoPGFueVtdPmNvbHVtbnMpLmZpbHRlcigoY29sdW1uKSA9PiBjb2x1bW4uZXhwb3J0YWJsZSAhPT0gZmFsc2UgJiYgY29sdW1uLmZpZWxkKTtcblxuICAgICAgICAvL2hlYWRlcnNcbiAgICAgICAgY3N2ICs9IGV4cG9ydGFibGVDb2x1bW5zLm1hcCgoY29sdW1uKSA9PiAnXCInICsgdGhpcy5nZXRFeHBvcnRIZWFkZXIoY29sdW1uKSArICdcIicpLmpvaW4odGhpcy5jc3ZTZXBhcmF0b3IpO1xuXG4gICAgICAgIC8vYm9keVxuICAgICAgICBjb25zdCBib2R5ID0gZGF0YVxuICAgICAgICAgICAgLm1hcCgocmVjb3JkOiBhbnkpID0+XG4gICAgICAgICAgICAgICAgZXhwb3J0YWJsZUNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY2VsbERhdGEgPSBPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKHJlY29yZCwgY29sdW1uLmZpZWxkKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGxEYXRhICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5leHBvcnRGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsRGF0YSA9IHRoaXMuZXhwb3J0RnVuY3Rpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogY2VsbERhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sdW1uLmZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBjZWxsRGF0YSA9IFN0cmluZyhjZWxsRGF0YSkucmVwbGFjZSgvXCIvZywgJ1wiXCInKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBjZWxsRGF0YSA9ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1wiJyArIGNlbGxEYXRhICsgJ1wiJztcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4odGhpcy5jc3ZTZXBhcmF0b3IpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuam9pbignXFxuJyk7XG5cbiAgICAgICAgaWYgKGJvZHkubGVuZ3RoKSB7XG4gICAgICAgICAgICBjc3YgKz0gJ1xcbicgKyBib2R5O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGJsb2IgPSBuZXcgQmxvYihbbmV3IFVpbnQ4QXJyYXkoWzB4ZWYsIDB4YmIsIDB4YmZdKSwgY3N2XSwge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQvY3N2O2NoYXJzZXQ9dXRmLTg7J1xuICAgICAgICB9KTtcblxuICAgICAgICBsZXQgbGluayA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBsaW5rLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LCBsaW5rKTtcbiAgICAgICAgaWYgKGxpbmsuZG93bmxvYWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbGluay5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpKTtcbiAgICAgICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdkb3dubG9hZCcsIHRoaXMuZXhwb3J0RmlsZW5hbWUgKyAnLmNzdicpO1xuICAgICAgICAgICAgbGluay5jbGljaygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY3N2ID0gJ2RhdGE6dGV4dC9jc3Y7Y2hhcnNldD11dGYtOCwnICsgY3N2O1xuICAgICAgICAgICAgdGhpcy53aW5kb3cub3BlbihlbmNvZGVVUkkoY3N2KSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLmRvY3VtZW50LmJvZHksIGxpbmspO1xuICAgIH1cblxuICAgIG9uTGF6eUl0ZW1Mb2FkKGV2ZW50OiBMYXp5TG9hZE1ldGEpIHtcbiAgICAgICAgdGhpcy5vbkxhenlMb2FkLmVtaXQoe1xuICAgICAgICAgICAgLi4udGhpcy5jcmVhdGVMYXp5TG9hZE1ldGFkYXRhKCksXG4gICAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICAgIHJvd3M6IDxudW1iZXI+ZXZlbnQubGFzdCAtIDxudW1iZXI+ZXZlbnQuZmlyc3RcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlc2V0cyBzY3JvbGwgdG8gdG9wLlxuICAgICAqIEBncm91cCBNZXRob2RcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVzZXRTY3JvbGxUb3AoKSB7XG4gICAgICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGwpIHRoaXMuc2Nyb2xsVG9WaXJ0dWFsSW5kZXgoMCk7XG4gICAgICAgIGVsc2UgdGhpcy5zY3JvbGxUbyh7IHRvcDogMCB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2Nyb2xscyB0byBnaXZlbiBpbmRleCB3aGVuIHVzaW5nIHZpcnR1YWwgc2Nyb2xsLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIGluZGV4IG9mIHRoZSBlbGVtZW50LlxuICAgICAqIEBncm91cCBNZXRob2RcbiAgICAgKi9cbiAgICBwdWJsaWMgc2Nyb2xsVG9WaXJ0dWFsSW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgICAgICB0aGlzLnNjcm9sbGVyICYmIHRoaXMuc2Nyb2xsZXIuc2Nyb2xsVG9JbmRleChpbmRleCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNjcm9sbHMgdG8gZ2l2ZW4gaW5kZXguXG4gICAgICogQHBhcmFtIHtTY3JvbGxUb09wdGlvbnN9IG9wdGlvbnMgLSBzY3JvbGwgb3B0aW9ucy5cbiAgICAgKiBAZ3JvdXAgTWV0aG9kXG4gICAgICovXG4gICAgcHVibGljIHNjcm9sbFRvKG9wdGlvbnM6IGFueSkge1xuICAgICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbGVyPy5zY3JvbGxUbyhvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLndyYXBwZXJWaWV3Q2hpbGQgJiYgdGhpcy53cmFwcGVyVmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLndyYXBwZXJWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5zY3JvbGxUbykge1xuICAgICAgICAgICAgICAgIHRoaXMud3JhcHBlclZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvKG9wdGlvbnMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLndyYXBwZXJWaWV3Q2hpbGQubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gb3B0aW9ucy5sZWZ0O1xuICAgICAgICAgICAgICAgIHRoaXMud3JhcHBlclZpZXdDaGlsZC5uYXRpdmVFbGVtZW50LnNjcm9sbFRvcCA9IG9wdGlvbnMudG9wO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlRWRpdGluZ0NlbGwoY2VsbDogYW55LCBkYXRhOiBhbnksIGZpZWxkOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5lZGl0aW5nQ2VsbCA9IGNlbGw7XG4gICAgICAgIHRoaXMuZWRpdGluZ0NlbGxEYXRhID0gZGF0YTtcbiAgICAgICAgdGhpcy5lZGl0aW5nQ2VsbEZpZWxkID0gZmllbGQ7XG4gICAgICAgIHRoaXMuZWRpdGluZ0NlbGxSb3dJbmRleCA9IGluZGV4O1xuICAgICAgICB0aGlzLmJpbmREb2N1bWVudEVkaXRMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIGlzRWRpdGluZ0NlbGxWYWxpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdGluZ0NlbGwgJiYgRG9tSGFuZGxlci5maW5kKHRoaXMuZWRpdGluZ0NlbGwsICcubmctaW52YWxpZC5uZy1kaXJ0eScpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBiaW5kRG9jdW1lbnRFZGl0TGlzdGVuZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5kb2N1bWVudEVkaXRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudEVkaXRMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKHRoaXMuZG9jdW1lbnQsICdjbGljaycsIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVkaXRpbmdDZWxsICYmICF0aGlzLnNlbGZDbGljayAmJiB0aGlzLmlzRWRpdGluZ0NlbGxWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIERvbUhhbmRsZXIucmVtb3ZlQ2xhc3ModGhpcy5lZGl0aW5nQ2VsbCwgJ2NheC1jZWxsLWVkaXRpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lZGl0aW5nQ2VsbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25FZGl0Q29tcGxldGUuZW1pdCh7IGZpZWxkOiB0aGlzLmVkaXRpbmdDZWxsRmllbGQsIGRhdGE6IHRoaXMuZWRpdGluZ0NlbGxEYXRhLCBvcmlnaW5hbEV2ZW50OiBldmVudCwgaW5kZXg6IDxudW1iZXI+dGhpcy5lZGl0aW5nQ2VsbFJvd0luZGV4IH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRpbmdDZWxsRmllbGQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVkaXRpbmdDZWxsRGF0YSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWRpdGluZ0NlbGxSb3dJbmRleCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5iaW5kRG9jdW1lbnRFZGl0TGlzdGVuZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vdmVybGF5U3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZkNsaWNrID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVuYmluZERvY3VtZW50RWRpdExpc3RlbmVyKCkge1xuICAgICAgICBpZiAodGhpcy5kb2N1bWVudEVkaXRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudEVkaXRMaXN0ZW5lcigpO1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudEVkaXRMaXN0ZW5lciA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbml0Um93RWRpdChyb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgbGV0IGRhdGFLZXlWYWx1ZSA9IFN0cmluZyhPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKHJvd0RhdGEsIHRoaXMuZGF0YUtleSkpO1xuICAgICAgICB0aGlzLmVkaXRpbmdSb3dLZXlzW2RhdGFLZXlWYWx1ZV0gPSB0cnVlO1xuICAgIH1cblxuICAgIHNhdmVSb3dFZGl0KHJvd0RhdGE6IGFueSwgcm93RWxlbWVudDogSFRNTFRhYmxlUm93RWxlbWVudCkge1xuICAgICAgICBpZiAoRG9tSGFuZGxlci5maW5kKHJvd0VsZW1lbnQsICcubmctaW52YWxpZC5uZy1kaXJ0eScpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgbGV0IGRhdGFLZXlWYWx1ZSA9IFN0cmluZyhPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKHJvd0RhdGEsIHRoaXMuZGF0YUtleSkpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuZWRpdGluZ1Jvd0tleXNbZGF0YUtleVZhbHVlXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhbmNlbFJvd0VkaXQocm93RGF0YTogYW55KSB7XG4gICAgICAgIGxldCBkYXRhS2V5VmFsdWUgPSBTdHJpbmcoT2JqZWN0VXRpbHMucmVzb2x2ZUZpZWxkRGF0YShyb3dEYXRhLCB0aGlzLmRhdGFLZXkpKTtcbiAgICAgICAgZGVsZXRlIHRoaXMuZWRpdGluZ1Jvd0tleXNbZGF0YUtleVZhbHVlXTtcbiAgICB9XG5cbiAgICB0b2dnbGVSb3cocm93RGF0YTogYW55LCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5kYXRhS2V5ICYmICF0aGlzLmdyb3VwUm93c0J5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RhdGFLZXkgb3IgZ3JvdXBSb3dzQnkgbXVzdCBiZSBkZWZpbmVkIHRvIHVzZSByb3cgZXhwYW5zaW9uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZGF0YUtleVZhbHVlID0gdGhpcy5ncm91cFJvd3NCeSA/IFN0cmluZyhPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKHJvd0RhdGEsIHRoaXMuZ3JvdXBSb3dzQnkpKSA6IFN0cmluZyhPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKHJvd0RhdGEsIHRoaXMuZGF0YUtleSkpO1xuXG4gICAgICAgIGlmICh0aGlzLmV4cGFuZGVkUm93S2V5c1tkYXRhS2V5VmFsdWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmV4cGFuZGVkUm93S2V5c1tkYXRhS2V5VmFsdWVdO1xuICAgICAgICAgICAgdGhpcy5vblJvd0NvbGxhcHNlLmVtaXQoe1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IDxFdmVudD5ldmVudCxcbiAgICAgICAgICAgICAgICBkYXRhOiByb3dEYXRhXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJvd0V4cGFuZE1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRlZFJvd0tleXMgPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5leHBhbmRlZFJvd0tleXNbZGF0YUtleVZhbHVlXSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLm9uUm93RXhwYW5kLmVtaXQoe1xuICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IDxFdmVudD5ldmVudCxcbiAgICAgICAgICAgICAgICBkYXRhOiByb3dEYXRhXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzU3RhdGVmdWwoKSkge1xuICAgICAgICAgICAgdGhpcy5zYXZlU3RhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzUm93RXhwYW5kZWQocm93RGF0YTogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdyb3VwUm93c0J5ID8gdGhpcy5leHBhbmRlZFJvd0tleXNbU3RyaW5nKE9iamVjdFV0aWxzLnJlc29sdmVGaWVsZERhdGEocm93RGF0YSwgdGhpcy5ncm91cFJvd3NCeSkpXSA9PT0gdHJ1ZSA6IHRoaXMuZXhwYW5kZWRSb3dLZXlzW1N0cmluZyhPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKHJvd0RhdGEsIHRoaXMuZGF0YUtleSkpXSA9PT0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpc1Jvd0VkaXRpbmcocm93RGF0YTogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRpbmdSb3dLZXlzW1N0cmluZyhPYmplY3RVdGlscy5yZXNvbHZlRmllbGREYXRhKHJvd0RhdGEsIHRoaXMuZGF0YUtleSkpXSA9PT0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpc1NpbmdsZVNlbGVjdGlvbk1vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGUnO1xuICAgIH1cblxuICAgIGlzTXVsdGlwbGVTZWxlY3Rpb25Nb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbXVsdGlwbGUnO1xuICAgIH1cblxuICAgIG9uQ29sdW1uUmVzaXplQmVnaW4oZXZlbnQ6IGFueSkge1xuICAgICAgICBsZXQgY29udGFpbmVyTGVmdCA9IERvbUhhbmRsZXIuZ2V0T2Zmc2V0KHRoaXMuY29udGFpbmVyVmlld0NoaWxkPy5uYXRpdmVFbGVtZW50KS5sZWZ0O1xuICAgICAgICB0aGlzLnJlc2l6ZUNvbHVtbkVsZW1lbnQgPSBldmVudC50YXJnZXQucGFyZW50RWxlbWVudDtcbiAgICAgICAgdGhpcy5jb2x1bW5SZXNpemluZyA9IHRydWU7XG4gICAgICAgIGlmIChldmVudC50eXBlID09ICd0b3VjaHN0YXJ0Jykge1xuICAgICAgICAgICAgdGhpcy5sYXN0UmVzaXplckhlbHBlclggPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYIC0gY29udGFpbmVyTGVmdCArIHRoaXMuY29udGFpbmVyVmlld0NoaWxkPy5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RSZXNpemVySGVscGVyWCA9IGV2ZW50LnBhZ2VYIC0gY29udGFpbmVyTGVmdCArIHRoaXMuY29udGFpbmVyVmlld0NoaWxkPy5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNvbHVtblJlc2l6ZShldmVudCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgb25Db2x1bW5SZXNpemUoZXZlbnQ6IGFueSkge1xuICAgICAgICBsZXQgY29udGFpbmVyTGVmdCA9IERvbUhhbmRsZXIuZ2V0T2Zmc2V0KHRoaXMuY29udGFpbmVyVmlld0NoaWxkPy5uYXRpdmVFbGVtZW50KS5sZWZ0O1xuICAgICAgICBEb21IYW5kbGVyLmFkZENsYXNzKHRoaXMuY29udGFpbmVyVmlld0NoaWxkPy5uYXRpdmVFbGVtZW50LCAnY2F4LXVuc2VsZWN0YWJsZS10ZXh0Jyk7XG4gICAgICAgICg8RWxlbWVudFJlZj50aGlzLnJlc2l6ZUhlbHBlclZpZXdDaGlsZCkubmF0aXZlRWxlbWVudC5zdHlsZS5oZWlnaHQgPSB0aGlzLmNvbnRhaW5lclZpZXdDaGlsZD8ubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQgKyAncHgnO1xuICAgICAgICAoPEVsZW1lbnRSZWY+dGhpcy5yZXNpemVIZWxwZXJWaWV3Q2hpbGQpLm5hdGl2ZUVsZW1lbnQuc3R5bGUudG9wID0gMCArICdweCc7XG4gICAgICAgIGlmIChldmVudC50eXBlID09ICd0b3VjaG1vdmUnKSB7XG4gICAgICAgICAgICAoPEVsZW1lbnRSZWY+dGhpcy5yZXNpemVIZWxwZXJWaWV3Q2hpbGQpLm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdCA9IGV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFggLSBjb250YWluZXJMZWZ0ICsgdGhpcy5jb250YWluZXJWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCArICdweCc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAoPEVsZW1lbnRSZWY+dGhpcy5yZXNpemVIZWxwZXJWaWV3Q2hpbGQpLm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdCA9IGV2ZW50LnBhZ2VYIC0gY29udGFpbmVyTGVmdCArIHRoaXMuY29udGFpbmVyVmlld0NoaWxkPy5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQgKyAncHgnO1xuICAgICAgICB9XG4gICAgICAgICg8RWxlbWVudFJlZj50aGlzLnJlc2l6ZUhlbHBlclZpZXdDaGlsZCkubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB9XG5cbiAgICBvbkNvbHVtblJlc2l6ZUVuZCgpIHtcbiAgICAgICAgbGV0IGRlbHRhID0gdGhpcy5yZXNpemVIZWxwZXJWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0TGVmdCAtIDxudW1iZXI+dGhpcy5sYXN0UmVzaXplckhlbHBlclg7XG4gICAgICAgIGxldCBjb2x1bW5XaWR0aCA9IHRoaXMucmVzaXplQ29sdW1uRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgICAgbGV0IG5ld0NvbHVtbldpZHRoID0gY29sdW1uV2lkdGggKyBkZWx0YTtcbiAgICAgICAgbGV0IG1pbldpZHRoID0gdGhpcy5yZXNpemVDb2x1bW5FbGVtZW50LnN0eWxlLm1pbldpZHRoLnJlcGxhY2UoL1teXFxkLl0vZywgJycpIHx8IDE1O1xuXG4gICAgICAgIGlmIChuZXdDb2x1bW5XaWR0aCA+PSBtaW5XaWR0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1uUmVzaXplTW9kZSA9PT0gJ2ZpdCcpIHtcbiAgICAgICAgICAgICAgICBsZXQgbmV4dENvbHVtbiA9IHRoaXMucmVzaXplQ29sdW1uRWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgbGV0IG5leHRDb2x1bW5XaWR0aCA9IG5leHRDb2x1bW4ub2Zmc2V0V2lkdGggLSBkZWx0YTtcblxuICAgICAgICAgICAgICAgIGlmIChuZXdDb2x1bW5XaWR0aCA+IDE1ICYmIG5leHRDb2x1bW5XaWR0aCA+IDE1KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzaXplVGFibGVDZWxscyhuZXdDb2x1bW5XaWR0aCwgbmV4dENvbHVtbldpZHRoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29sdW1uUmVzaXplTW9kZSA9PT0gJ2V4cGFuZCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbml0aWFsQ29sV2lkdGhzID0gdGhpcy5fdG90YWxUYWJsZVdpZHRoKCk7XG4gICAgICAgICAgICAgICAgbGV0IHRhYmxlV2lkdGggPSB0aGlzLnRhYmxlVmlld0NoaWxkPy5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICsgZGVsdGE7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNldFJlc2l6ZVRhYmxlV2lkdGgodGFibGVXaWR0aCArICdweCcpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzaXplVGFibGVDZWxscyhuZXdDb2x1bW5XaWR0aCwgbnVsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMub25Db2xSZXNpemUuZW1pdCh7XG4gICAgICAgICAgICAgICAgZWxlbWVudDogdGhpcy5yZXNpemVDb2x1bW5FbGVtZW50LFxuICAgICAgICAgICAgICAgIGRlbHRhOiBkZWx0YVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzU3RhdGVmdWwoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZVN0YXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAoPEVsZW1lbnRSZWY+dGhpcy5yZXNpemVIZWxwZXJWaWV3Q2hpbGQpLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgRG9tSGFuZGxlci5yZW1vdmVDbGFzcyh0aGlzLmNvbnRhaW5lclZpZXdDaGlsZD8ubmF0aXZlRWxlbWVudCwgJ2NheC11bnNlbGVjdGFibGUtdGV4dCcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3RvdGFsVGFibGVXaWR0aCgpOiBudW1iZXJbXSB7XG4gICAgICAgIGxldCB3aWR0aHMgPSBbXTtcbiAgICAgICAgY29uc3QgdGFibGVIZWFkID0gRG9tSGFuZGxlci5maW5kU2luZ2xlKHRoaXMuY29udGFpbmVyVmlld0NoaWxkLm5hdGl2ZUVsZW1lbnQsICcuY2F4LWRhdGF0YWJsZS10aGVhZCcpO1xuICAgICAgICBsZXQgaGVhZGVycyA9IERvbUhhbmRsZXIuZmluZCh0YWJsZUhlYWQsICd0ciA+IHRoJyk7XG4gICAgICAgIGhlYWRlcnMuZm9yRWFjaCgoaGVhZGVyKSA9PiB3aWR0aHMucHVzaChEb21IYW5kbGVyLmdldE91dGVyV2lkdGgoaGVhZGVyKSkpO1xuXG4gICAgICAgIHJldHVybiB3aWR0aHM7XG4gICAgfVxuXG4gICAgb25Db2x1bW5EcmFnU3RhcnQoZXZlbnQ6IGFueSwgY29sdW1uRWxlbWVudDogYW55KSB7XG4gICAgICAgIHRoaXMucmVvcmRlckljb25XaWR0aCA9IERvbUhhbmRsZXIuZ2V0SGlkZGVuRWxlbWVudE91dGVyV2lkdGgodGhpcy5yZW9yZGVySW5kaWNhdG9yVXBWaWV3Q2hpbGQ/Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLnJlb3JkZXJJY29uSGVpZ2h0ID0gRG9tSGFuZGxlci5nZXRIaWRkZW5FbGVtZW50T3V0ZXJIZWlnaHQodGhpcy5yZW9yZGVySW5kaWNhdG9yRG93blZpZXdDaGlsZD8ubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIHRoaXMuZHJhZ2dlZENvbHVtbiA9IGNvbHVtbkVsZW1lbnQ7XG4gICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKCd0ZXh0JywgJ2InKTsgLy8gRm9yIGZpcmVmb3hcbiAgICB9XG5cbiAgICBvbkNvbHVtbkRyYWdFbnRlcihldmVudDogYW55LCBkcm9wSGVhZGVyOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMucmVvcmRlcmFibGVDb2x1bW5zICYmIHRoaXMuZHJhZ2dlZENvbHVtbiAmJiBkcm9wSGVhZGVyKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgbGV0IGNvbnRhaW5lck9mZnNldCA9IERvbUhhbmRsZXIuZ2V0T2Zmc2V0KHRoaXMuY29udGFpbmVyVmlld0NoaWxkPy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgICAgIGxldCBkcm9wSGVhZGVyT2Zmc2V0ID0gRG9tSGFuZGxlci5nZXRPZmZzZXQoZHJvcEhlYWRlcik7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmRyYWdnZWRDb2x1bW4gIT0gZHJvcEhlYWRlcikge1xuICAgICAgICAgICAgICAgIGxldCBkcmFnSW5kZXggPSBEb21IYW5kbGVyLmluZGV4V2l0aGluR3JvdXAodGhpcy5kcmFnZ2VkQ29sdW1uLCAnY2F4cmVvcmRlcmFibGVjb2x1bW4nKTtcbiAgICAgICAgICAgICAgICBsZXQgZHJvcEluZGV4ID0gRG9tSGFuZGxlci5pbmRleFdpdGhpbkdyb3VwKGRyb3BIZWFkZXIsICdjYXhyZW9yZGVyYWJsZWNvbHVtbicpO1xuICAgICAgICAgICAgICAgIGxldCB0YXJnZXRMZWZ0ID0gZHJvcEhlYWRlck9mZnNldC5sZWZ0IC0gY29udGFpbmVyT2Zmc2V0LmxlZnQ7XG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldFRvcCA9IGNvbnRhaW5lck9mZnNldC50b3AgLSBkcm9wSGVhZGVyT2Zmc2V0LnRvcDtcbiAgICAgICAgICAgICAgICBsZXQgY29sdW1uQ2VudGVyID0gZHJvcEhlYWRlck9mZnNldC5sZWZ0ICsgZHJvcEhlYWRlci5vZmZzZXRXaWR0aCAvIDI7XG5cbiAgICAgICAgICAgICAgICAoPEVsZW1lbnRSZWY+dGhpcy5yZW9yZGVySW5kaWNhdG9yVXBWaWV3Q2hpbGQpLm5hdGl2ZUVsZW1lbnQuc3R5bGUudG9wID0gZHJvcEhlYWRlck9mZnNldC50b3AgLSBjb250YWluZXJPZmZzZXQudG9wIC0gKDxudW1iZXI+dGhpcy5yZW9yZGVySWNvbkhlaWdodCAtIDEpICsgJ3B4JztcbiAgICAgICAgICAgICAgICAoPEVsZW1lbnRSZWY+dGhpcy5yZW9yZGVySW5kaWNhdG9yRG93blZpZXdDaGlsZCkubmF0aXZlRWxlbWVudC5zdHlsZS50b3AgPSBkcm9wSGVhZGVyT2Zmc2V0LnRvcCAtIGNvbnRhaW5lck9mZnNldC50b3AgKyBkcm9wSGVhZGVyLm9mZnNldEhlaWdodCArICdweCc7XG5cbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQucGFnZVggPiBjb2x1bW5DZW50ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgKDxFbGVtZW50UmVmPnRoaXMucmVvcmRlckluZGljYXRvclVwVmlld0NoaWxkKS5uYXRpdmVFbGVtZW50LnN0eWxlLmxlZnQgPSB0YXJnZXRMZWZ0ICsgZHJvcEhlYWRlci5vZmZzZXRXaWR0aCAtIE1hdGguY2VpbCg8bnVtYmVyPnRoaXMucmVvcmRlckljb25XaWR0aCAvIDIpICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgKDxFbGVtZW50UmVmPnRoaXMucmVvcmRlckluZGljYXRvckRvd25WaWV3Q2hpbGQpLm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdCA9IHRhcmdldExlZnQgKyBkcm9wSGVhZGVyLm9mZnNldFdpZHRoIC0gTWF0aC5jZWlsKDxudW1iZXI+dGhpcy5yZW9yZGVySWNvbldpZHRoIC8gMikgKyAncHgnO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRyb3BQb3NpdGlvbiA9IDE7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgKDxFbGVtZW50UmVmPnRoaXMucmVvcmRlckluZGljYXRvclVwVmlld0NoaWxkKS5uYXRpdmVFbGVtZW50LnN0eWxlLmxlZnQgPSB0YXJnZXRMZWZ0IC0gTWF0aC5jZWlsKDxudW1iZXI+dGhpcy5yZW9yZGVySWNvbldpZHRoIC8gMikgKyAncHgnO1xuICAgICAgICAgICAgICAgICAgICAoPEVsZW1lbnRSZWY+dGhpcy5yZW9yZGVySW5kaWNhdG9yRG93blZpZXdDaGlsZCkubmF0aXZlRWxlbWVudC5zdHlsZS5sZWZ0ID0gdGFyZ2V0TGVmdCAtIE1hdGguY2VpbCg8bnVtYmVyPnRoaXMucmVvcmRlckljb25XaWR0aCAvIDIpICsgJ3B4JztcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kcm9wUG9zaXRpb24gPSAtMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKDxFbGVtZW50UmVmPnRoaXMucmVvcmRlckluZGljYXRvclVwVmlld0NoaWxkKS5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgICAgICg8RWxlbWVudFJlZj50aGlzLnJlb3JkZXJJbmRpY2F0b3JEb3duVmlld0NoaWxkKS5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICdub25lJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ29sdW1uRHJhZ0xlYXZlKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBpZiAodGhpcy5yZW9yZGVyYWJsZUNvbHVtbnMgJiYgdGhpcy5kcmFnZ2VkQ29sdW1uKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Db2x1bW5Ecm9wKGV2ZW50OiBFdmVudCwgZHJvcENvbHVtbjogYW55KSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmICh0aGlzLmRyYWdnZWRDb2x1bW4pIHtcbiAgICAgICAgICAgIGxldCBkcmFnSW5kZXggPSBEb21IYW5kbGVyLmluZGV4V2l0aGluR3JvdXAodGhpcy5kcmFnZ2VkQ29sdW1uLCAnY2F4cmVvcmRlcmFibGVjb2x1bW4nKTtcbiAgICAgICAgICAgIGxldCBkcm9wSW5kZXggPSBEb21IYW5kbGVyLmluZGV4V2l0aGluR3JvdXAoZHJvcENvbHVtbiwgJ2NheHJlb3JkZXJhYmxlY29sdW1uJyk7XG4gICAgICAgICAgICBsZXQgYWxsb3dEcm9wID0gZHJhZ0luZGV4ICE9IGRyb3BJbmRleDtcbiAgICAgICAgICAgIGlmIChhbGxvd0Ryb3AgJiYgKChkcm9wSW5kZXggLSBkcmFnSW5kZXggPT0gMSAmJiB0aGlzLmRyb3BQb3NpdGlvbiA9PT0gLTEpIHx8IChkcmFnSW5kZXggLSBkcm9wSW5kZXggPT0gMSAmJiB0aGlzLmRyb3BQb3NpdGlvbiA9PT0gMSkpKSB7XG4gICAgICAgICAgICAgICAgYWxsb3dEcm9wID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChhbGxvd0Ryb3AgJiYgZHJvcEluZGV4IDwgZHJhZ0luZGV4ICYmIHRoaXMuZHJvcFBvc2l0aW9uID09PSAxKSB7XG4gICAgICAgICAgICAgICAgZHJvcEluZGV4ID0gZHJvcEluZGV4ICsgMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGFsbG93RHJvcCAmJiBkcm9wSW5kZXggPiBkcmFnSW5kZXggJiYgdGhpcy5kcm9wUG9zaXRpb24gPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgZHJvcEluZGV4ID0gZHJvcEluZGV4IC0gMTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGFsbG93RHJvcCkge1xuICAgICAgICAgICAgICAgIE9iamVjdFV0aWxzLnJlb3JkZXJBcnJheSg8YW55W10+dGhpcy5jb2x1bW5zLCBkcmFnSW5kZXgsIGRyb3BJbmRleCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm9uQ29sUmVvcmRlci5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgZHJhZ0luZGV4OiBkcmFnSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGRyb3BJbmRleDogZHJvcEluZGV4LFxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnNcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzU3RhdGVmdWwoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zYXZlU3RhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnJlc2l6YWJsZUNvbHVtbnMgJiYgdGhpcy5yZXNpemVDb2x1bW5FbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgbGV0IHdpZHRoID0gdGhpcy5jb2x1bW5SZXNpemVNb2RlID09PSAnZXhwYW5kJyA/IHRoaXMuX2luaXRpYWxDb2xXaWR0aHMgOiB0aGlzLl90b3RhbFRhYmxlV2lkdGgoKTtcbiAgICAgICAgICAgICAgICBPYmplY3RVdGlscy5yZW9yZGVyQXJyYXkod2lkdGgsIGRyYWdJbmRleCArIDEsIGRyb3BJbmRleCArIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU3R5bGVFbGVtZW50KHdpZHRoLCBkcmFnSW5kZXgsIG51bGwsIG51bGwpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAoPEVsZW1lbnRSZWY+dGhpcy5yZW9yZGVySW5kaWNhdG9yVXBWaWV3Q2hpbGQpLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICg8RWxlbWVudFJlZj50aGlzLnJlb3JkZXJJbmRpY2F0b3JEb3duVmlld0NoaWxkKS5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICB0aGlzLmRyYWdnZWRDb2x1bW4uZHJhZ2dhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRyYWdnZWRDb2x1bW4gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5kcm9wUG9zaXRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzaXplVGFibGVDZWxscyhuZXdDb2x1bW5XaWR0aDogbnVtYmVyLCBuZXh0Q29sdW1uV2lkdGg6IG51bWJlciB8IG51bGwpIHtcbiAgICAgICAgbGV0IGNvbEluZGV4ID0gRG9tSGFuZGxlci5pbmRleCh0aGlzLnJlc2l6ZUNvbHVtbkVsZW1lbnQpO1xuICAgICAgICBsZXQgd2lkdGggPSB0aGlzLmNvbHVtblJlc2l6ZU1vZGUgPT09ICdleHBhbmQnID8gdGhpcy5faW5pdGlhbENvbFdpZHRocyA6IHRoaXMuX3RvdGFsVGFibGVXaWR0aCgpO1xuICAgICAgICB0aGlzLnVwZGF0ZVN0eWxlRWxlbWVudCh3aWR0aCwgY29sSW5kZXgsIG5ld0NvbHVtbldpZHRoLCBuZXh0Q29sdW1uV2lkdGgpO1xuICAgIH1cblxuICAgIHVwZGF0ZVN0eWxlRWxlbWVudCh3aWR0aDogbnVtYmVyW10sIGNvbEluZGV4OiBudW1iZXIsIG5ld0NvbHVtbldpZHRoOiBudW1iZXIsIG5leHRDb2x1bW5XaWR0aDogbnVtYmVyIHwgbnVsbCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3lTdHlsZUVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5jcmVhdGVTdHlsZUVsZW1lbnQoKTtcblxuICAgICAgICBsZXQgaW5uZXJIVE1MID0gJyc7XG4gICAgICAgIHdpZHRoLmZvckVhY2goKHdpZHRoLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgbGV0IGNvbFdpZHRoID0gaW5kZXggPT09IGNvbEluZGV4ID8gbmV3Q29sdW1uV2lkdGggOiBuZXh0Q29sdW1uV2lkdGggJiYgaW5kZXggPT09IGNvbEluZGV4ICsgMSA/IG5leHRDb2x1bW5XaWR0aCA6IHdpZHRoO1xuICAgICAgICAgICAgbGV0IHN0eWxlID0gYHdpZHRoOiAke2NvbFdpZHRofXB4ICFpbXBvcnRhbnQ7IG1heC13aWR0aDogJHtjb2xXaWR0aH1weCAhaW1wb3J0YW50O2A7XG4gICAgICAgICAgICBpbm5lckhUTUwgKz0gYFxuICAgICAgICAgICAgICAgICMke3RoaXMuaWR9LXRhYmxlID4gLmNheC1kYXRhdGFibGUtdGhlYWQgPiB0ciA+IHRoOm50aC1jaGlsZCgke2luZGV4ICsgMX0pLFxuICAgICAgICAgICAgICAgICMke3RoaXMuaWR9LXRhYmxlID4gLmNheC1kYXRhdGFibGUtdGJvZHkgPiB0ciA+IHRkOm50aC1jaGlsZCgke2luZGV4ICsgMX0pLFxuICAgICAgICAgICAgICAgICMke3RoaXMuaWR9LXRhYmxlID4gLmNheC1kYXRhdGFibGUtdGZvb3QgPiB0ciA+IHRkOm50aC1jaGlsZCgke2luZGV4ICsgMX0pIHtcbiAgICAgICAgICAgICAgICAgICAgJHtzdHlsZX1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBgO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLnN0eWxlRWxlbWVudCwgJ2lubmVySFRNTCcsIHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShpbm5lckhUTUwpKTtcbiAgICB9XG5cbiAgICBvblJvd0RyYWdTdGFydChldmVudDogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMucm93RHJhZ2dpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRyYWdnZWRSb3dJbmRleCA9IGluZGV4O1xuICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuc2V0RGF0YSgndGV4dCcsICdiJyk7IC8vIEZvciBmaXJlZm94XG4gICAgfVxuXG4gICAgb25Sb3dEcmFnT3ZlcihldmVudDogTW91c2VFdmVudCwgaW5kZXg6IG51bWJlciwgcm93RWxlbWVudDogYW55KSB7XG4gICAgICAgIGlmICh0aGlzLnJvd0RyYWdnaW5nICYmIHRoaXMuZHJhZ2dlZFJvd0luZGV4ICE9PSBpbmRleCkge1xuICAgICAgICAgICAgbGV0IHJvd1kgPSBEb21IYW5kbGVyLmdldE9mZnNldChyb3dFbGVtZW50KS50b3A7XG4gICAgICAgICAgICBsZXQgcGFnZVkgPSBldmVudC5wYWdlWTtcbiAgICAgICAgICAgIGxldCByb3dNaWRZID0gcm93WSArIERvbUhhbmRsZXIuZ2V0T3V0ZXJIZWlnaHQocm93RWxlbWVudCkgLyAyO1xuICAgICAgICAgICAgbGV0IHByZXZSb3dFbGVtZW50ID0gcm93RWxlbWVudC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuXG4gICAgICAgICAgICBpZiAocGFnZVkgPCByb3dNaWRZKSB7XG4gICAgICAgICAgICAgICAgRG9tSGFuZGxlci5yZW1vdmVDbGFzcyhyb3dFbGVtZW50LCAnY2F4LWRhdGF0YWJsZS1kcmFncG9pbnQtYm90dG9tJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRyb3BwZWRSb3dJbmRleCA9IGluZGV4O1xuICAgICAgICAgICAgICAgIGlmIChwcmV2Um93RWxlbWVudCkgRG9tSGFuZGxlci5hZGRDbGFzcyhwcmV2Um93RWxlbWVudCwgJ2NheC1kYXRhdGFibGUtZHJhZ3BvaW50LWJvdHRvbScpO1xuICAgICAgICAgICAgICAgIGVsc2UgRG9tSGFuZGxlci5hZGRDbGFzcyhyb3dFbGVtZW50LCAnY2F4LWRhdGF0YWJsZS1kcmFncG9pbnQtdG9wJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChwcmV2Um93RWxlbWVudCkgRG9tSGFuZGxlci5yZW1vdmVDbGFzcyhwcmV2Um93RWxlbWVudCwgJ2NheC1kYXRhdGFibGUtZHJhZ3BvaW50LWJvdHRvbScpO1xuICAgICAgICAgICAgICAgIGVsc2UgRG9tSGFuZGxlci5hZGRDbGFzcyhyb3dFbGVtZW50LCAnY2F4LWRhdGF0YWJsZS1kcmFncG9pbnQtdG9wJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmRyb3BwZWRSb3dJbmRleCA9IGluZGV4ICsgMTtcbiAgICAgICAgICAgICAgICBEb21IYW5kbGVyLmFkZENsYXNzKHJvd0VsZW1lbnQsICdjYXgtZGF0YXRhYmxlLWRyYWdwb2ludC1ib3R0b20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUm93RHJhZ0xlYXZlKGV2ZW50OiBFdmVudCwgcm93RWxlbWVudDogYW55KSB7XG4gICAgICAgIGxldCBwcmV2Um93RWxlbWVudCA9IHJvd0VsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZztcbiAgICAgICAgaWYgKHByZXZSb3dFbGVtZW50KSB7XG4gICAgICAgICAgICBEb21IYW5kbGVyLnJlbW92ZUNsYXNzKHByZXZSb3dFbGVtZW50LCAnY2F4LWRhdGF0YWJsZS1kcmFncG9pbnQtYm90dG9tJyk7XG4gICAgICAgIH1cblxuICAgICAgICBEb21IYW5kbGVyLnJlbW92ZUNsYXNzKHJvd0VsZW1lbnQsICdjYXgtZGF0YXRhYmxlLWRyYWdwb2ludC1ib3R0b20nKTtcbiAgICAgICAgRG9tSGFuZGxlci5yZW1vdmVDbGFzcyhyb3dFbGVtZW50LCAnY2F4LWRhdGF0YWJsZS1kcmFncG9pbnQtdG9wJyk7XG4gICAgfVxuXG4gICAgb25Sb3dEcmFnRW5kKGV2ZW50OiBFdmVudCkge1xuICAgICAgICB0aGlzLnJvd0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZHJhZ2dlZFJvd0luZGV4ID0gbnVsbDtcbiAgICAgICAgdGhpcy5kcm9wcGVkUm93SW5kZXggPSBudWxsO1xuICAgIH1cblxuICAgIG9uUm93RHJvcChldmVudDogRXZlbnQsIHJvd0VsZW1lbnQ6IGFueSkge1xuICAgICAgICBpZiAodGhpcy5kcm9wcGVkUm93SW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgbGV0IGRyb3BJbmRleCA9IDxudW1iZXI+dGhpcy5kcmFnZ2VkUm93SW5kZXggPiB0aGlzLmRyb3BwZWRSb3dJbmRleCA/IHRoaXMuZHJvcHBlZFJvd0luZGV4IDogdGhpcy5kcm9wcGVkUm93SW5kZXggPT09IDAgPyAwIDogdGhpcy5kcm9wcGVkUm93SW5kZXggLSAxO1xuICAgICAgICAgICAgT2JqZWN0VXRpbHMucmVvcmRlckFycmF5KHRoaXMudmFsdWUsIDxudW1iZXI+dGhpcy5kcmFnZ2VkUm93SW5kZXgsIGRyb3BJbmRleCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnZpcnR1YWxTY3JvbGwpIHtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBDaGVja1xuICAgICAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gWy4uLnRoaXMuX3ZhbHVlXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5vblJvd1Jlb3JkZXIuZW1pdCh7XG4gICAgICAgICAgICAgICAgZHJhZ0luZGV4OiA8bnVtYmVyPnRoaXMuZHJhZ2dlZFJvd0luZGV4LFxuICAgICAgICAgICAgICAgIGRyb3BJbmRleDogZHJvcEluZGV4XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvL2NsZWFudXBcbiAgICAgICAgdGhpcy5vblJvd0RyYWdMZWF2ZShldmVudCwgcm93RWxlbWVudCk7XG4gICAgICAgIHRoaXMub25Sb3dEcmFnRW5kKGV2ZW50KTtcbiAgICB9XG5cbiAgICBpc0VtcHR5KCkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuZmlsdGVyZWRWYWx1ZSB8fCB0aGlzLnZhbHVlO1xuICAgICAgICByZXR1cm4gZGF0YSA9PSBudWxsIHx8IGRhdGEubGVuZ3RoID09IDA7XG4gICAgfVxuXG4gICAgZ2V0QmxvY2thYmxlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF07XG4gICAgfVxuXG4gICAgZ2V0U3RvcmFnZSgpIHtcbiAgICAgICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5zdGF0ZVN0b3JhZ2UpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdsb2NhbCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cubG9jYWxTdG9yYWdlO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnc2Vzc2lvbic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3aW5kb3cuc2Vzc2lvblN0b3JhZ2U7XG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IodGhpcy5zdGF0ZVN0b3JhZ2UgKyAnIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciB0aGUgc3RhdGUgc3RvcmFnZSwgc3VwcG9ydGVkIHZhbHVlcyBhcmUgXCJsb2NhbFwiIGFuZCBcInNlc3Npb25cIi4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQnJvd3NlciBzdG9yYWdlIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIHNlcnZlciBzaWRlLicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNTdGF0ZWZ1bCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVLZXkgIT0gbnVsbDtcbiAgICB9XG5cbiAgICBzYXZlU3RhdGUoKSB7XG4gICAgICAgIGNvbnN0IHN0b3JhZ2UgPSB0aGlzLmdldFN0b3JhZ2UoKTtcbiAgICAgICAgbGV0IHN0YXRlOiBUYWJsZVN0YXRlID0ge307XG5cbiAgICAgICAgaWYgKHRoaXMucGFnaW5hdG9yKSB7XG4gICAgICAgICAgICBzdGF0ZS5maXJzdCA9IDxudW1iZXI+dGhpcy5maXJzdDtcbiAgICAgICAgICAgIHN0YXRlLnJvd3MgPSB0aGlzLnJvd3M7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zb3J0RmllbGQpIHtcbiAgICAgICAgICAgIHN0YXRlLnNvcnRGaWVsZCA9IHRoaXMuc29ydEZpZWxkO1xuICAgICAgICAgICAgc3RhdGUuc29ydE9yZGVyID0gdGhpcy5zb3J0T3JkZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5tdWx0aVNvcnRNZXRhKSB7XG4gICAgICAgICAgICBzdGF0ZS5tdWx0aVNvcnRNZXRhID0gdGhpcy5tdWx0aVNvcnRNZXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaGFzRmlsdGVyKCkpIHtcbiAgICAgICAgICAgIHN0YXRlLmZpbHRlcnMgPSB0aGlzLmZpbHRlcnM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5yZXNpemFibGVDb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLnNhdmVDb2x1bW5XaWR0aHMoc3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucmVvcmRlcmFibGVDb2x1bW5zKSB7XG4gICAgICAgICAgICB0aGlzLnNhdmVDb2x1bW5PcmRlcihzdGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIHN0YXRlLnNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZXhwYW5kZWRSb3dLZXlzKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN0YXRlLmV4cGFuZGVkUm93S2V5cyA9IHRoaXMuZXhwYW5kZWRSb3dLZXlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RvcmFnZS5zZXRJdGVtKDxzdHJpbmc+dGhpcy5zdGF0ZUtleSwgSlNPTi5zdHJpbmdpZnkoc3RhdGUpKTtcbiAgICAgICAgdGhpcy5vblN0YXRlU2F2ZS5lbWl0KHN0YXRlKTtcbiAgICB9XG5cbiAgICBjbGVhclN0YXRlKCkge1xuICAgICAgICBjb25zdCBzdG9yYWdlID0gdGhpcy5nZXRTdG9yYWdlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RhdGVLZXkpIHtcbiAgICAgICAgICAgIHN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLnN0YXRlS2V5KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc3RvcmVTdGF0ZSgpIHtcbiAgICAgICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuZ2V0U3RvcmFnZSgpO1xuICAgICAgICBjb25zdCBzdGF0ZVN0cmluZyA9IHN0b3JhZ2UuZ2V0SXRlbSg8c3RyaW5nPnRoaXMuc3RhdGVLZXkpO1xuICAgICAgICBjb25zdCBkYXRlRm9ybWF0ID0gL1xcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9LlxcZHszfVovO1xuICAgICAgICBjb25zdCByZXZpdmVyID0gZnVuY3Rpb24gKGtleTogYW55LCB2YWx1ZTogYW55KSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBkYXRlRm9ybWF0LnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChzdGF0ZVN0cmluZykge1xuICAgICAgICAgICAgbGV0IHN0YXRlOiBUYWJsZVN0YXRlID0gSlNPTi5wYXJzZShzdGF0ZVN0cmluZywgcmV2aXZlcik7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2luYXRvcikge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpcnN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdCA9IHN0YXRlLmZpcnN0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0Q2hhbmdlLmVtaXQodGhpcy5maXJzdCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucm93cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93cyA9IHN0YXRlLnJvd3M7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93c0NoYW5nZS5lbWl0KHRoaXMucm93cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc3RhdGUuc29ydEZpZWxkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN0b3JpbmdTb3J0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3J0RmllbGQgPSBzdGF0ZS5zb3J0RmllbGQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fc29ydE9yZGVyID0gPG51bWJlcj5zdGF0ZS5zb3J0T3JkZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZS5tdWx0aVNvcnRNZXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN0b3JpbmdTb3J0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tdWx0aVNvcnRNZXRhID0gc3RhdGUubXVsdGlTb3J0TWV0YTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHN0YXRlLmZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc3RvcmluZ0ZpbHRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJzID0gc3RhdGUuZmlsdGVycztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMucmVzaXphYmxlQ29sdW1ucykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uV2lkdGhzU3RhdGUgPSBzdGF0ZS5jb2x1bW5XaWR0aHM7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZVdpZHRoU3RhdGUgPSBzdGF0ZS50YWJsZVdpZHRoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5yZW9yZGVyYWJsZUNvbHVtbnMpIHtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnJlc3RvcmVDb2x1bW5PcmRlcigpO1xuICAgICAgICAgICAgLy8gfVxuXG4gICAgICAgICAgICBpZiAoc3RhdGUuZXhwYW5kZWRSb3dLZXlzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRlZFJvd0tleXMgPSBzdGF0ZS5leHBhbmRlZFJvd0tleXM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZS5zZWxlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUobnVsbCkudGhlbigoKSA9PiB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHN0YXRlLnNlbGVjdGlvbikpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YXRlUmVzdG9yZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICB0aGlzLm9uU3RhdGVSZXN0b3JlLmVtaXQoc3RhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2F2ZUNvbHVtbldpZHRocyhzdGF0ZTogYW55KSB7XG4gICAgICAgIGxldCB3aWR0aHM6IGFueVtdID0gW107XG4gICAgICAgIGxldCBoZWFkZXJzID0gW107XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyVmlld0NoaWxkPy5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgICAgICAgIGhlYWRlcnMgPSBEb21IYW5kbGVyLmZpbmQoY29udGFpbmVyLCAnLmNheC1kYXRhdGFibGUtdGhlYWQgPiB0ciA+IHRoJyk7XG4gICAgICAgIH1cblxuICAgICAgICBoZWFkZXJzLmZvckVhY2goKGhlYWRlcikgPT4gd2lkdGhzLnB1c2goRG9tSGFuZGxlci5nZXRPdXRlcldpZHRoKGhlYWRlcikpKTtcbiAgICAgICAgc3RhdGUuY29sdW1uV2lkdGhzID0gd2lkdGhzLmpvaW4oJywnKTtcblxuICAgICAgICBpZiAodGhpcy5jb2x1bW5SZXNpemVNb2RlID09PSAnZXhwYW5kJykge1xuICAgICAgICAgICAgc3RhdGUudGFibGVXaWR0aCA9IERvbUhhbmRsZXIuZ2V0T3V0ZXJXaWR0aCh0aGlzLnRhYmxlVmlld0NoaWxkPy5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFJlc2l6ZVRhYmxlV2lkdGgod2lkdGg6IHN0cmluZykge1xuICAgICAgICAoPEVsZW1lbnRSZWY+dGhpcy50YWJsZVZpZXdDaGlsZCkubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9IHdpZHRoO1xuICAgICAgICAoPEVsZW1lbnRSZWY+dGhpcy50YWJsZVZpZXdDaGlsZCkubmF0aXZlRWxlbWVudC5zdHlsZS5taW5XaWR0aCA9IHdpZHRoO1xuICAgIH1cblxuICAgIHJlc3RvcmVDb2x1bW5XaWR0aHMoKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbHVtbldpZHRoc1N0YXRlKSB7XG4gICAgICAgICAgICBsZXQgd2lkdGhzID0gdGhpcy5jb2x1bW5XaWR0aHNTdGF0ZS5zcGxpdCgnLCcpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5jb2x1bW5SZXNpemVNb2RlID09PSAnZXhwYW5kJyAmJiB0aGlzLnRhYmxlV2lkdGhTdGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0UmVzaXplVGFibGVXaWR0aCh0aGlzLnRhYmxlV2lkdGhTdGF0ZSArICdweCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoT2JqZWN0VXRpbHMuaXNOb3RFbXB0eSh3aWR0aHMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVTdHlsZUVsZW1lbnQoKTtcblxuICAgICAgICAgICAgICAgIGxldCBpbm5lckhUTUwgPSAnJztcbiAgICAgICAgICAgICAgICB3aWR0aHMuZm9yRWFjaCgod2lkdGgsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBzdHlsZSA9IGB3aWR0aDogJHt3aWR0aH1weCAhaW1wb3J0YW50OyBtYXgtd2lkdGg6ICR7d2lkdGh9cHggIWltcG9ydGFudGA7XG5cbiAgICAgICAgICAgICAgICAgICAgaW5uZXJIVE1MICs9IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICMke3RoaXMuaWR9LXRhYmxlID4gLmNheC1kYXRhdGFibGUtdGhlYWQgPiB0ciA+IHRoOm50aC1jaGlsZCgke2luZGV4ICsgMX0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgIyR7dGhpcy5pZH0tdGFibGUgPiAuY2F4LWRhdGF0YWJsZS10Ym9keSA+IHRyID4gdGQ6bnRoLWNoaWxkKCR7aW5kZXggKyAxfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAjJHt0aGlzLmlkfS10YWJsZSA+IC5jYXgtZGF0YXRhYmxlLXRmb290ID4gdHIgPiB0ZDpudGgtY2hpbGQoJHtpbmRleCArIDF9KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtzdHlsZX1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuc3R5bGVFbGVtZW50LnRleHRDb250ZW50ID0gaW5uZXJIVE1MO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2F2ZUNvbHVtbk9yZGVyKHN0YXRlOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICAgbGV0IGNvbHVtbk9yZGVyOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICAgICAgY29sdW1uT3JkZXIucHVzaChjb2x1bW4uZmllbGQgfHwgY29sdW1uLmtleSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgc3RhdGUuY29sdW1uT3JkZXIgPSBjb2x1bW5PcmRlcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlc3RvcmVDb2x1bW5PcmRlcigpIHtcbiAgICAgICAgY29uc3Qgc3RvcmFnZSA9IHRoaXMuZ2V0U3RvcmFnZSgpO1xuICAgICAgICBjb25zdCBzdGF0ZVN0cmluZyA9IHN0b3JhZ2UuZ2V0SXRlbSg8c3RyaW5nPnRoaXMuc3RhdGVLZXkpO1xuICAgICAgICBpZiAoc3RhdGVTdHJpbmcpIHtcbiAgICAgICAgICAgIGxldCBzdGF0ZTogVGFibGVTdGF0ZSA9IEpTT04ucGFyc2Uoc3RhdGVTdHJpbmcpO1xuICAgICAgICAgICAgbGV0IGNvbHVtbk9yZGVyID0gc3RhdGUuY29sdW1uT3JkZXI7XG5cbiAgICAgICAgICAgIGlmIChjb2x1bW5PcmRlcikge1xuICAgICAgICAgICAgICAgIGxldCByZW9yZGVyZWRDb2x1bW5zOiBhbnlbXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgY29sdW1uT3JkZXIubWFwKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbCA9IHRoaXMuZmluZENvbHVtbkJ5S2V5KGtleSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlb3JkZXJlZENvbHVtbnMucHVzaChjb2wpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5PcmRlclN0YXRlUmVzdG9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1ucyA9IHJlb3JkZXJlZENvbHVtbnM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmaW5kQ29sdW1uQnlLZXkoa2V5OiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICAgZm9yIChsZXQgY29sIG9mIHRoaXMuY29sdW1ucykge1xuICAgICAgICAgICAgICAgIGlmIChjb2wua2V5ID09PSBrZXkgfHwgY29sLmZpZWxkID09PSBrZXkpIHJldHVybiBjb2w7XG4gICAgICAgICAgICAgICAgZWxzZSBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY3JlYXRlU3R5bGVFbGVtZW50KCkge1xuICAgICAgICB0aGlzLnN0eWxlRWxlbWVudCA9IHRoaXMucmVuZGVyZXIuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgdGhpcy5zdHlsZUVsZW1lbnQudHlwZSA9ICd0ZXh0L2Nzcyc7XG4gICAgICAgIERvbUhhbmRsZXIuc2V0QXR0cmlidXRlKHRoaXMuc3R5bGVFbGVtZW50LCAnbm9uY2UnLCB0aGlzLmNvbmZpZz8uY3NwKCk/Lm5vbmNlKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmRvY3VtZW50LmhlYWQsIHRoaXMuc3R5bGVFbGVtZW50KTtcbiAgICB9XG5cbiAgICBnZXRHcm91cFJvd3NNZXRhKCkge1xuICAgICAgICByZXR1cm4geyBmaWVsZDogdGhpcy5ncm91cFJvd3NCeSwgb3JkZXI6IHRoaXMuZ3JvdXBSb3dzQnlPcmRlciB9O1xuICAgIH1cblxuICAgIGNyZWF0ZVJlc3BvbnNpdmVTdHlsZSgpIHtcbiAgICAgICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHRoaXMucGxhdGZvcm1JZCkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5yZXNwb25zaXZlU3R5bGVFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNwb25zaXZlU3R5bGVFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzcG9uc2l2ZVN0eWxlRWxlbWVudC50eXBlID0gJ3RleHQvY3NzJztcbiAgICAgICAgICAgICAgICBEb21IYW5kbGVyLnNldEF0dHJpYnV0ZSh0aGlzLnJlc3BvbnNpdmVTdHlsZUVsZW1lbnQsICdub25jZScsIHRoaXMuY29uZmlnPy5jc3AoKT8ubm9uY2UpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5kb2N1bWVudC5oZWFkLCB0aGlzLnJlc3BvbnNpdmVTdHlsZUVsZW1lbnQpO1xuXG4gICAgICAgICAgICAgICAgbGV0IGlubmVySFRNTCA9IGBcbiAgICBAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAke3RoaXMuYnJlYWtwb2ludH0pIHtcbiAgICAgICAgIyR7dGhpcy5pZH0tdGFibGUgPiAuY2F4LWRhdGF0YWJsZS10aGVhZCA+IHRyID4gdGgsXG4gICAgICAgICMke3RoaXMuaWR9LXRhYmxlID4gLmNheC1kYXRhdGFibGUtdGZvb3QgPiB0ciA+IHRkIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgICAgICAgfVxuXG4gICAgICAgICMke3RoaXMuaWR9LXRhYmxlID4gLmNheC1kYXRhdGFibGUtdGJvZHkgPiB0ciA+IHRkIHtcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICAgICAgfVxuXG4gICAgICAgICMke3RoaXMuaWR9LXRhYmxlID4gLmNheC1kYXRhdGFibGUtdGJvZHkgPiB0ciA+IHRkOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgICAgICAgICAgYm9yZGVyOiAwIG5vbmU7XG4gICAgICAgIH1cblxuICAgICAgICAjJHt0aGlzLmlkfS5jYXgtZGF0YXRhYmxlLWdyaWRsaW5lcyA+IC5jYXgtZGF0YXRhYmxlLXdyYXBwZXIgPiAuY2F4LWRhdGF0YWJsZS10YWJsZSA+IC5jYXgtZGF0YXRhYmxlLXRib2R5ID4gdHIgPiB0ZDpsYXN0LWNoaWxkIHtcbiAgICAgICAgICAgIGJvcmRlci10b3A6IDA7XG4gICAgICAgICAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgICAgICAgICBib3JkZXItbGVmdDogMDtcbiAgICAgICAgfVxuXG4gICAgICAgICMke3RoaXMuaWR9LXRhYmxlID4gLmNheC1kYXRhdGFibGUtdGJvZHkgPiB0ciA+IHRkID4gLmNheC1jb2x1bW4tdGl0bGUge1xuICAgICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYDtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KHRoaXMucmVzcG9uc2l2ZVN0eWxlRWxlbWVudCwgJ2lubmVySFRNTCcsIHRoaXMuZG9tU2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RTdHlsZShpbm5lckhUTUwpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3lSZXNwb25zaXZlU3R5bGUoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlc3BvbnNpdmVTdHlsZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2hpbGQodGhpcy5kb2N1bWVudC5oZWFkLCB0aGlzLnJlc3BvbnNpdmVTdHlsZUVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5yZXNwb25zaXZlU3R5bGVFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRlc3Ryb3lTdHlsZUVsZW1lbnQoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0eWxlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZCh0aGlzLmRvY3VtZW50LmhlYWQsIHRoaXMuc3R5bGVFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuc3R5bGVFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnVuYmluZERvY3VtZW50RWRpdExpc3RlbmVyKCk7XG4gICAgICAgIHRoaXMuZWRpdGluZ0NlbGwgPSBudWxsO1xuICAgICAgICB0aGlzLmluaXRpYWxpemVkID0gbnVsbDtcblxuICAgICAgICB0aGlzLmRlc3Ryb3lTdHlsZUVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95UmVzcG9uc2l2ZVN0eWxlKCk7XG4gICAgfVxuXG4gICAgZ2V0UGFnaW5hdG9yU3R5bGVDbGFzc2VzKGNsYXNzTmFtZT86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gW3RoaXMucGFnaW5hdG9yU3R5bGVDbGFzcywgY2xhc3NOYW1lXVxuICAgICAgICAgICAgLmZpbHRlcigoYykgPT4gISFjKVxuICAgICAgICAgICAgLmpvaW4oJyAnKVxuICAgICAgICAgICAgLnRyaW0oKTtcbiAgICB9XG59XG4iLCI8ZGl2XHJcbiAgICAjY29udGFpbmVyXHJcbiAgICBbbmdTdHlsZV09XCJzdHlsZVwiXHJcbiAgICBbY2xhc3NdPVwic3R5bGVDbGFzc1wiXHJcbiAgICBbbmdDbGFzc109XCJ7ICdjYXgtZGF0YXRhYmxlIGNheC1jb21wb25lbnQnOiB0cnVlLCAnY2F4LWRhdGF0YWJsZS1ob3ZlcmFibGUtcm93cyc6IHJvd0hvdmVyIHx8IHNlbGVjdGlvbk1vZGUsICdjYXgtZGF0YXRhYmxlLXNjcm9sbGFibGUnOiBzY3JvbGxhYmxlLCAnY2F4LWRhdGF0YWJsZS1mbGV4LXNjcm9sbGFibGUnOiBzY3JvbGxhYmxlICYmIHNjcm9sbEhlaWdodCA9PT0gJ2ZsZXgnIH1cIlxyXG4gICAgW2F0dHIuaWRdPVwiaWRcIlxyXG4+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY2F4LWRhdGF0YWJsZS1sb2FkaW5nLW92ZXJsYXkgY2F4LWNvbXBvbmVudC1vdmVybGF5XCIgKm5nSWY9XCJsb2FkaW5nICYmIHNob3dMb2FkZXJcIj5cclxuICAgICAgICA8aSAqbmdJZj1cImxvYWRpbmdJY29uXCIgW2NsYXNzXT1cIidjYXgtZGF0YXRhYmxlLWxvYWRpbmctaWNvbiAnICsgbG9hZGluZ0ljb25cIj48L2k+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsb2FkaW5nSWNvblwiPlxyXG4gICAgICAgICAgICA8U3Bpbm5lckljb24gKm5nSWY9XCIhbG9hZGluZ0ljb25UZW1wbGF0ZVwiIFtzcGluXT1cInRydWVcIiBbc3R5bGVDbGFzc109XCInY2F4LWRhdGF0YWJsZS1sb2FkaW5nLWljb24nXCIgLz5cclxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJsb2FkaW5nSWNvblRlbXBsYXRlXCIgY2xhc3M9XCJjYXgtZGF0YXRhYmxlLWxvYWRpbmctaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ0ljb25UZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cImNhcHRpb25UZW1wbGF0ZVwiIGNsYXNzPVwiY2F4LWRhdGF0YWJsZS1oZWFkZXJcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2FwdGlvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxjYXgtcGFnaW5hdG9yXHJcbiAgICAgICAgW3Jvd3NdPVwicm93c1wiXHJcbiAgICAgICAgW2ZpcnN0XT1cImZpcnN0XCJcclxuICAgICAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXHJcbiAgICAgICAgW3BhZ2VMaW5rU2l6ZV09XCJwYWdlTGlua3NcIlxyXG4gICAgICAgIFthbHdheXNTaG93XT1cImFsd2F5c1Nob3dQYWdpbmF0b3JcIlxyXG4gICAgICAgIChvblBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwicm93c1BlclBhZ2VPcHRpb25zXCJcclxuICAgICAgICAqbmdJZj1cInBhZ2luYXRvciAmJiAocGFnaW5hdG9yUG9zaXRpb24gPT09ICd0b3AnIHx8IHBhZ2luYXRvclBvc2l0aW9uID09ICdib3RoJylcIlxyXG4gICAgICAgIFt0ZW1wbGF0ZUxlZnRdPVwicGFnaW5hdG9yTGVmdFRlbXBsYXRlXCJcclxuICAgICAgICBbdGVtcGxhdGVSaWdodF09XCJwYWdpbmF0b3JSaWdodFRlbXBsYXRlXCJcclxuICAgICAgICBbZHJvcGRvd25BcHBlbmRUb109XCJwYWdpbmF0b3JEcm9wZG93bkFwcGVuZFRvXCJcclxuICAgICAgICBbZHJvcGRvd25TY3JvbGxIZWlnaHRdPVwicGFnaW5hdG9yRHJvcGRvd25TY3JvbGxIZWlnaHRcIlxyXG4gICAgICAgIFtjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlXT1cImN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGVcIlxyXG4gICAgICAgIFtzaG93Rmlyc3RMYXN0SWNvbl09XCJzaG93Rmlyc3RMYXN0SWNvblwiXHJcbiAgICAgICAgW2Ryb3Bkb3duSXRlbVRlbXBsYXRlXT1cInBhZ2luYXRvckRyb3Bkb3duSXRlbVRlbXBsYXRlXCJcclxuICAgICAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInNob3dDdXJyZW50UGFnZVJlcG9ydFwiXHJcbiAgICAgICAgW3Nob3dKdW1wVG9QYWdlRHJvcGRvd25dPVwic2hvd0p1bXBUb1BhZ2VEcm9wZG93blwiXHJcbiAgICAgICAgW3Nob3dKdW1wVG9QYWdlSW5wdXRdPVwic2hvd0p1bXBUb1BhZ2VJbnB1dFwiXHJcbiAgICAgICAgW3Nob3dQYWdlTGlua3NdPVwic2hvd1BhZ2VMaW5rc1wiXHJcbiAgICAgICAgW3N0eWxlQ2xhc3NdPVwiZ2V0UGFnaW5hdG9yU3R5bGVDbGFzc2VzKCdjYXgtcGFnaW5hdG9yLXRvcCcpXCJcclxuICAgICAgICBbbG9jYWxlXT1cInBhZ2luYXRvckxvY2FsZVwiXHJcbiAgICA+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGNheFRlbXBsYXRlPVwiZHJvcGRvd25pY29uXCIgKm5nSWY9XCJwYWdpbmF0b3JEcm9wZG93bkljb25UZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFnaW5hdG9yRHJvcGRvd25JY29uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgY2F4VGVtcGxhdGU9XCJmaXJzdHBhZ2VsaW5raWNvblwiICpuZ0lmPVwicGFnaW5hdG9yRmlyc3RQYWdlTGlua0ljb25UZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFnaW5hdG9yRmlyc3RQYWdlTGlua0ljb25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBjYXhUZW1wbGF0ZT1cInByZXZpb3VzcGFnZWxpbmtpY29uXCIgKm5nSWY9XCJwYWdpbmF0b3JQcmV2aW91c1BhZ2VMaW5rSWNvblRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYWdpbmF0b3JQcmV2aW91c1BhZ2VMaW5rSWNvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGNheFRlbXBsYXRlPVwibGFzdHBhZ2VsaW5raWNvblwiICpuZ0lmPVwicGFnaW5hdG9yTGFzdFBhZ2VMaW5rSWNvblRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYWdpbmF0b3JMYXN0UGFnZUxpbmtJY29uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgY2F4VGVtcGxhdGU9XCJuZXh0cGFnZWxpbmtpY29uXCIgKm5nSWY9XCJwYWdpbmF0b3JOZXh0UGFnZUxpbmtJY29uVGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2luYXRvck5leHRQYWdlTGlua0ljb25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2NheC1wYWdpbmF0b3I+XHJcblxyXG4gICAgPGRpdiAjd3JhcHBlciBjbGFzcz1cImNheC1kYXRhdGFibGUtd3JhcHBlclwiIFtuZ1N0eWxlXT1cInsgbWF4SGVpZ2h0OiB2aXJ0dWFsU2Nyb2xsID8gJycgOiBzY3JvbGxIZWlnaHQgfVwiPlxyXG4gICAgICAgIDxjYXgtc2Nyb2xsZXJcclxuICAgICAgICAgICAgI3Njcm9sbGVyXHJcbiAgICAgICAgICAgICpuZ0lmPVwidmlydHVhbFNjcm9sbFwiXHJcbiAgICAgICAgICAgIFtpdGVtc109XCJwcm9jZXNzZWREYXRhXCJcclxuICAgICAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXHJcbiAgICAgICAgICAgIFtzdHlsZV09XCJ7IGhlaWdodDogc2Nyb2xsSGVpZ2h0ICE9PSAnZmxleCcgPyBzY3JvbGxIZWlnaHQgOiB1bmRlZmluZWQgfVwiXHJcbiAgICAgICAgICAgIFtzY3JvbGxIZWlnaHRdPVwic2Nyb2xsSGVpZ2h0ICE9PSAnZmxleCcgPyB1bmRlZmluZWQgOiAnMTAwJSdcIlxyXG4gICAgICAgICAgICBbaXRlbVNpemVdPVwidmlydHVhbFNjcm9sbEl0ZW1TaXplIHx8IF92aXJ0dWFsUm93SGVpZ2h0XCJcclxuICAgICAgICAgICAgW3N0ZXBdPVwicm93c1wiXHJcbiAgICAgICAgICAgIFtkZWxheV09XCJsYXp5ID8gdmlydHVhbFNjcm9sbERlbGF5IDogMFwiXHJcbiAgICAgICAgICAgIFtpbmxpbmVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFthdXRvU2l6ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgW2xhenldPVwibGF6eVwiXHJcbiAgICAgICAgICAgIChvbkxhenlMb2FkKT1cIm9uTGF6eUl0ZW1Mb2FkKCRldmVudClcIlxyXG4gICAgICAgICAgICBbbG9hZGVyRGlzYWJsZWRdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgIFtzaG93U3BhY2VyXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgW3Nob3dMb2FkZXJdPVwibG9hZGluZ0JvZHlUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgIFtvcHRpb25zXT1cInZpcnR1YWxTY3JvbGxPcHRpb25zXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBjYXhUZW1wbGF0ZT1cImNvbnRlbnRcIiBsZXQtaXRlbXMgbGV0LXNjcm9sbGVyT3B0aW9ucz1cIm9wdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidWlsZEluVGFibGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBpdGVtcywgb3B0aW9uczogc2Nyb2xsZXJPcHRpb25zIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2NheC1zY3JvbGxlcj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXZpcnR1YWxTY3JvbGxcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImJ1aWxkSW5UYWJsZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHByb2Nlc3NlZERhdGEsIG9wdGlvbnM6IHsgY29sdW1ucyB9IH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICNidWlsZEluVGFibGUgbGV0LWl0ZW1zIGxldC1zY3JvbGxlck9wdGlvbnM9XCJvcHRpb25zXCI+XHJcbiAgICAgICAgICAgIDx0YWJsZVxyXG4gICAgICAgICAgICAgICAgI3RhYmxlXHJcbiAgICAgICAgICAgICAgICByb2xlPVwidGFibGVcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnY2F4LWRhdGF0YWJsZS10YWJsZSc6IHRydWUsICdjYXgtZGF0YXRhYmxlLXNjcm9sbGFibGUtdGFibGUnOiBzY3JvbGxhYmxlLCAnY2F4LWRhdGF0YWJsZS1yZXNpemFibGUtdGFibGUnOiByZXNpemFibGVDb2x1bW5zLCAnY2F4LWRhdGF0YWJsZS1yZXNpemFibGUtdGFibGUtZml0JzogcmVzaXphYmxlQ29sdW1ucyAmJiBjb2x1bW5SZXNpemVNb2RlID09PSAnZml0JyB9XCJcclxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJ0YWJsZVN0eWxlQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwidGFibGVTdHlsZVwiXHJcbiAgICAgICAgICAgICAgICBbYXR0ci5pZF09XCJpZCArICctdGFibGUnXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbEdyb3VwVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBzY3JvbGxlck9wdGlvbnMuY29sdW1ucyB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8dGhlYWQgcm9sZT1cInJvd2dyb3VwXCIgI3RoZWFkIGNsYXNzPVwiY2F4LWRhdGF0YWJsZS10aGVhZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJoZWFkZXJHcm91cGVkVGVtcGxhdGUgfHwgaGVhZGVyVGVtcGxhdGU7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBzY3JvbGxlck9wdGlvbnMuY29sdW1ucyB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgPHRib2R5XHJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cInJvd2dyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNheC1kYXRhdGFibGUtdGJvZHkgY2F4LWRhdGF0YWJsZS1mcm96ZW4tdGJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZnJvemVuVmFsdWUgfHwgZnJvemVuQm9keVRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZnJvemVuVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtmcm96ZW5Sb3dzXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwVGFibGVCb2R5XT1cInNjcm9sbGVyT3B0aW9ucy5jb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgICAgICBbcFRhYmxlQm9keVRlbXBsYXRlXT1cImZyb3plbkJvZHlUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Zyb3plbl09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgID48L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgPHRib2R5XHJcbiAgICAgICAgICAgICAgICAgICAgcm9sZT1cInJvd2dyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNheC1kYXRhdGFibGUtdGJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNjcm9sbGVyT3B0aW9ucy5jb250ZW50U3R5bGVDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwic2Nyb2xsZXJPcHRpb25zLmNvbnRlbnRTdHlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImRhdGFUb1JlbmRlcihzY3JvbGxlck9wdGlvbnMucm93cylcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwVGFibGVCb2R5XT1cInNjcm9sbGVyT3B0aW9ucy5jb2x1bW5zXCJcclxuICAgICAgICAgICAgICAgICAgICBbcFRhYmxlQm9keVRlbXBsYXRlXT1cImJvZHlUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Njcm9sbGVyT3B0aW9uc109XCJzY3JvbGxlck9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgPjwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8dGJvZHlcclxuICAgICAgICAgICAgICAgICAgICByb2xlPVwicm93Z3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2Nyb2xsZXJPcHRpb25zLnNwYWNlclN0eWxlXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7IGhlaWdodDogJ2NhbGMoJyArIHNjcm9sbGVyT3B0aW9ucy5zcGFjZXJTdHlsZS5oZWlnaHQgKyAnIC0gJyArIHNjcm9sbGVyT3B0aW9ucy5yb3dzLmxlbmd0aCAqIHNjcm9sbGVyT3B0aW9ucy5pdGVtU2l6ZSArICdweCknIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2F4LWRhdGF0YWJsZS1zY3JvbGxlci1zcGFjZXJcIlxyXG4gICAgICAgICAgICAgICAgPjwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICA8dGZvb3Qgcm9sZT1cInJvd2dyb3VwXCIgKm5nSWY9XCJmb290ZXJHcm91cGVkVGVtcGxhdGUgfHwgZm9vdGVyVGVtcGxhdGVcIiAjdGZvb3QgY2xhc3M9XCJjYXgtZGF0YXRhYmxlLXRmb290XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImZvb3Rlckdyb3VwZWRUZW1wbGF0ZSB8fCBmb290ZXJUZW1wbGF0ZTsgY29udGV4dDogeyAkaW1wbGljaXQ6IHNjcm9sbGVyT3B0aW9ucy5jb2x1bW5zIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvdGZvb3Q+XHJcbiAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxjYXgtcGFnaW5hdG9yXHJcbiAgICAgICAgW3Jvd3NdPVwicm93c1wiXHJcbiAgICAgICAgW2ZpcnN0XT1cImZpcnN0XCJcclxuICAgICAgICBbdG90YWxSZWNvcmRzXT1cInRvdGFsUmVjb3Jkc1wiXHJcbiAgICAgICAgW3BhZ2VMaW5rU2l6ZV09XCJwYWdlTGlua3NcIlxyXG4gICAgICAgIFthbHdheXNTaG93XT1cImFsd2F5c1Nob3dQYWdpbmF0b3JcIlxyXG4gICAgICAgIChvblBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgIFtyb3dzUGVyUGFnZU9wdGlvbnNdPVwicm93c1BlclBhZ2VPcHRpb25zXCJcclxuICAgICAgICAqbmdJZj1cInBhZ2luYXRvciAmJiAocGFnaW5hdG9yUG9zaXRpb24gPT09ICdib3R0b20nIHx8IHBhZ2luYXRvclBvc2l0aW9uID09ICdib3RoJylcIlxyXG4gICAgICAgIFt0ZW1wbGF0ZUxlZnRdPVwicGFnaW5hdG9yTGVmdFRlbXBsYXRlXCJcclxuICAgICAgICBbdGVtcGxhdGVSaWdodF09XCJwYWdpbmF0b3JSaWdodFRlbXBsYXRlXCJcclxuICAgICAgICBbZHJvcGRvd25BcHBlbmRUb109XCJwYWdpbmF0b3JEcm9wZG93bkFwcGVuZFRvXCJcclxuICAgICAgICBbZHJvcGRvd25TY3JvbGxIZWlnaHRdPVwicGFnaW5hdG9yRHJvcGRvd25TY3JvbGxIZWlnaHRcIlxyXG4gICAgICAgIFtjdXJyZW50UGFnZVJlcG9ydFRlbXBsYXRlXT1cImN1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGVcIlxyXG4gICAgICAgIFtzaG93Rmlyc3RMYXN0SWNvbl09XCJzaG93Rmlyc3RMYXN0SWNvblwiXHJcbiAgICAgICAgW2Ryb3Bkb3duSXRlbVRlbXBsYXRlXT1cInBhZ2luYXRvckRyb3Bkb3duSXRlbVRlbXBsYXRlXCJcclxuICAgICAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInNob3dDdXJyZW50UGFnZVJlcG9ydFwiXHJcbiAgICAgICAgW3Nob3dKdW1wVG9QYWdlRHJvcGRvd25dPVwic2hvd0p1bXBUb1BhZ2VEcm9wZG93blwiXHJcbiAgICAgICAgW3Nob3dKdW1wVG9QYWdlSW5wdXRdPVwic2hvd0p1bXBUb1BhZ2VJbnB1dFwiXHJcbiAgICAgICAgW3Nob3dQYWdlTGlua3NdPVwic2hvd1BhZ2VMaW5rc1wiXHJcbiAgICAgICAgW3N0eWxlQ2xhc3NdPVwiZ2V0UGFnaW5hdG9yU3R5bGVDbGFzc2VzKCdjYXgtcGFnaW5hdG9yLWJvdHRvbScpXCJcclxuICAgICAgICBbbG9jYWxlXT1cInBhZ2luYXRvckxvY2FsZVwiXHJcbiAgICA+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGNheFRlbXBsYXRlPVwiZHJvcGRvd25pY29uXCIgKm5nSWY9XCJwYWdpbmF0b3JEcm9wZG93bkljb25UZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFnaW5hdG9yRHJvcGRvd25JY29uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgY2F4VGVtcGxhdGU9XCJmaXJzdHBhZ2VsaW5raWNvblwiICpuZ0lmPVwicGFnaW5hdG9yRmlyc3RQYWdlTGlua0ljb25UZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicGFnaW5hdG9yRmlyc3RQYWdlTGlua0ljb25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBjYXhUZW1wbGF0ZT1cInByZXZpb3VzcGFnZWxpbmtpY29uXCIgKm5nSWY9XCJwYWdpbmF0b3JQcmV2aW91c1BhZ2VMaW5rSWNvblRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYWdpbmF0b3JQcmV2aW91c1BhZ2VMaW5rSWNvblRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGNheFRlbXBsYXRlPVwibGFzdHBhZ2VsaW5raWNvblwiICpuZ0lmPVwicGFnaW5hdG9yTGFzdFBhZ2VMaW5rSWNvblRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwYWdpbmF0b3JMYXN0UGFnZUxpbmtJY29uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICA8bmctdGVtcGxhdGUgY2F4VGVtcGxhdGU9XCJuZXh0cGFnZWxpbmtpY29uXCIgKm5nSWY9XCJwYWdpbmF0b3JOZXh0UGFnZUxpbmtJY29uVGVtcGxhdGVcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInBhZ2luYXRvck5leHRQYWdlTGlua0ljb25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2NheC1wYWdpbmF0b3I+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cInN1bW1hcnlUZW1wbGF0ZVwiIGNsYXNzPVwiY2F4LWRhdGF0YWJsZS1mb290ZXJcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3VtbWFyeVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2XHJcbiAgICAgICAgI3Jlc2l6ZUhlbHBlclxyXG4gICAgICAgIGNsYXNzPVwiY2F4LWNvbHVtbi1yZXNpemVyLWhlbHBlclwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdub25lJ1xyXG4gICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgKm5nSWY9XCJyZXNpemFibGVDb2x1bW5zXCJcclxuICAgID48L2Rpdj5cclxuICAgIDxzcGFuXHJcbiAgICAgICAgI3Jlb3JkZXJJbmRpY2F0b3JVcFxyXG4gICAgICAgIGNsYXNzPVwiY2F4LWRhdGF0YWJsZS1yZW9yZGVyLWluZGljYXRvci11cFwiXHJcbiAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdub25lJ1xyXG4gICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgKm5nSWY9XCJyZW9yZGVyYWJsZUNvbHVtbnNcIlxyXG4gICAgPlxyXG4gICAgICAgIDxBcnJvd0Rvd25JY29uICpuZ0lmPVwiIXJlb3JkZXJJbmRpY2F0b3JVcEljb25UZW1wbGF0ZVwiIC8+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVvcmRlckluZGljYXRvclVwSWNvblRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvc3Bhbj5cclxuICAgIDxzcGFuXHJcbiAgICAgICAgI3Jlb3JkZXJJbmRpY2F0b3JEb3duXHJcbiAgICAgICAgY2xhc3M9XCJjYXgtZGF0YXRhYmxlLXJlb3JkZXItaW5kaWNhdG9yLWRvd25cIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICBkaXNwbGF5OiAnbm9uZSdcclxuICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICpuZ0lmPVwicmVvcmRlcmFibGVDb2x1bW5zXCJcclxuICAgID5cclxuICAgICAgICA8QXJyb3dVcEljb24gKm5nSWY9XCIhcmVvcmRlckluZGljYXRvckRvd25JY29uVGVtcGxhdGVcIiAvPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInJlb3JkZXJJbmRpY2F0b3JEb3duSWNvblRlbXBsYXRlXCI+PC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvc3Bhbj5cclxuPC9kaXY+XHJcbiJdfQ==
|