desy-angular 6.0.2 → 7.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/esm2020/desy-angular.mjs +5 -0
- package/esm2020/lib/desy-angular.module.mjs +75 -0
- package/esm2020/lib/desy-buttons/components/button/button.component.mjs +115 -0
- package/esm2020/lib/desy-buttons/components/button-loader/button-loader.component.mjs +63 -0
- package/esm2020/lib/desy-buttons/components/dropdown/dropdown.component.mjs +126 -0
- package/esm2020/lib/desy-buttons/components/listbox/listbox-item/listbox-item.component.mjs +32 -0
- package/esm2020/lib/desy-buttons/components/listbox/listbox-label/listbox-label.component.mjs +14 -0
- package/esm2020/lib/desy-buttons/components/listbox/listbox.component.mjs +291 -0
- package/esm2020/lib/desy-buttons/components/pill/pill.component.mjs +80 -0
- package/esm2020/lib/desy-buttons/components/toggle/toggle-off-state/toggle-off-state.component.mjs +17 -0
- package/esm2020/lib/desy-buttons/components/toggle/toggle-on-state/toggle-on-state.component.mjs +17 -0
- package/esm2020/lib/desy-buttons/components/toggle/toggle.component.mjs +59 -0
- package/{esm2015/lib/desy-buttons/desy-buttons.module.js → esm2020/lib/desy-buttons/desy-buttons.module.mjs} +64 -35
- package/esm2020/lib/desy-commons/components/content/content.component.mjs +14 -0
- package/esm2020/lib/desy-commons/components/description/description.component.mjs +19 -0
- package/esm2020/lib/desy-commons/components/divider/divider.component.mjs +16 -0
- package/esm2020/lib/desy-commons/components/icon/icon.component.mjs +16 -0
- package/esm2020/lib/desy-commons/components/title/title.component.mjs +17 -0
- package/esm2020/lib/desy-commons/desy-commons.module.mjs +53 -0
- package/esm2020/lib/desy-forms/components/character-count/character-count.component.mjs +130 -0
- package/esm2020/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.mjs +240 -0
- package/esm2020/lib/desy-forms/components/checkboxes/checkboxes.component.mjs +264 -0
- package/esm2020/lib/desy-forms/components/date-input/date-input-day/date-input-day.component.mjs +52 -0
- package/esm2020/lib/desy-forms/components/date-input/date-input-divider/date-input-divider.component.mjs +19 -0
- package/esm2020/lib/desy-forms/components/date-input/date-input-item/date-input-item.component.mjs +16 -0
- package/esm2020/lib/desy-forms/components/date-input/date-input-month/date-input-month.component.mjs +52 -0
- package/esm2020/lib/desy-forms/components/date-input/date-input-year/date-input-year.component.mjs +48 -0
- package/esm2020/lib/desy-forms/components/date-input/date-input.component.mjs +266 -0
- package/esm2020/lib/desy-forms/components/error-message/error-message.component.mjs +31 -0
- package/esm2020/lib/desy-forms/components/fieldset/fieldset.component.mjs +56 -0
- package/esm2020/lib/desy-forms/components/fieldset/legend/legend.component.mjs +23 -0
- package/esm2020/lib/desy-forms/components/file-upload/file-upload.component.mjs +72 -0
- package/esm2020/lib/desy-forms/components/form-field/form-field.component.mjs +124 -0
- package/esm2020/lib/desy-forms/components/hint/hint.component.mjs +29 -0
- package/esm2020/lib/desy-forms/components/input/input.component.mjs +99 -0
- package/esm2020/lib/desy-forms/components/input-group/input-group-divider/input-group-divider.component.mjs +20 -0
- package/esm2020/lib/desy-forms/components/input-group/input-group-input/input-group-input.component.mjs +53 -0
- package/esm2020/lib/desy-forms/components/input-group/input-group-item/input-group-item.component.mjs +16 -0
- package/esm2020/lib/desy-forms/components/input-group/input-group-select/input-group-select.component.mjs +45 -0
- package/esm2020/lib/desy-forms/components/input-group/input-group.component.mjs +223 -0
- package/esm2020/lib/desy-forms/components/label/label.component.mjs +38 -0
- package/esm2020/lib/desy-forms/components/radios/radio-item/radio-item.component.mjs +185 -0
- package/esm2020/lib/desy-forms/components/radios/radios.component.mjs +270 -0
- package/esm2020/lib/desy-forms/components/search-bar/search-bar.component.mjs +66 -0
- package/esm2020/lib/desy-forms/components/select/option/option.component.mjs +22 -0
- package/esm2020/lib/desy-forms/components/select/option-group/option-group.component.mjs +18 -0
- package/esm2020/lib/desy-forms/components/select/select-item/select-item.component.mjs +14 -0
- package/esm2020/lib/desy-forms/components/select/select.component.mjs +93 -0
- package/esm2020/lib/desy-forms/components/template-driven-wrapper/template-driven-wrapper.component.mjs +12 -0
- package/esm2020/lib/desy-forms/components/textarea/textarea.component.mjs +86 -0
- package/esm2020/lib/desy-forms/components/tree/tree-checkbox/tree-checkbox.component.mjs +167 -0
- package/esm2020/lib/desy-forms/components/tree/tree-item/tree-item.component.mjs +397 -0
- package/esm2020/lib/desy-forms/components/tree/tree-items-generator/tree-items-generator.component.mjs +25 -0
- package/esm2020/lib/desy-forms/components/tree/tree-sub/tree-sub.component.mjs +15 -0
- package/esm2020/lib/desy-forms/components/tree/tree.component.mjs +425 -0
- package/esm2020/lib/desy-forms/desy-forms.module.mjs +209 -0
- package/esm2020/lib/desy-forms/directives/condition.directive.mjs +34 -0
- package/{esm2015/lib/desy-forms/interfaces/select-item-data.js → esm2020/lib/desy-forms/interfaces/select-item-data.mjs} +1 -1
- package/esm2020/lib/desy-forms/models/checkbox-service-item.component.mjs +9 -0
- package/esm2020/lib/desy-forms/models/radio-service-item.component.mjs +9 -0
- package/esm2020/lib/desy-forms/services/checkbox.service.mjs +61 -0
- package/esm2020/lib/desy-forms/services/radio.service.mjs +53 -0
- package/esm2020/lib/desy-modals/components/dialog/dialog.component.mjs +130 -0
- package/esm2020/lib/desy-modals/components/modal/modal-button-loader-primary/modal-button-loader-primary.component.mjs +25 -0
- package/esm2020/lib/desy-modals/components/modal/modal-button-loader-secondary/modal-button-loader-secondary.component.mjs +23 -0
- package/esm2020/lib/desy-modals/components/modal/modal-button-primary/modal-button-primary.component.mjs +23 -0
- package/esm2020/lib/desy-modals/components/modal/modal-button-secondary/modal-button-secondary.component.mjs +23 -0
- package/esm2020/lib/desy-modals/components/modal/modal.component.mjs +178 -0
- package/esm2020/lib/desy-modals/desy-modals.module.mjs +62 -0
- package/esm2020/lib/desy-modals/services/dialog.service.mjs +114 -0
- package/esm2020/lib/desy-nav/components/breadcrumbs/breadcrumbs-item/breadcrumbs-item.component.mjs +16 -0
- package/esm2020/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.mjs +47 -0
- package/esm2020/lib/desy-nav/components/error-summary/error-summary-item/error-summary-item.component.mjs +19 -0
- package/esm2020/lib/desy-nav/components/error-summary/error-summary.component.mjs +62 -0
- package/esm2020/lib/desy-nav/components/footer/footer-meta/footer-meta-item/footer-meta-item.component.mjs +21 -0
- package/esm2020/lib/desy-nav/components/footer/footer-meta/footer-meta.component.mjs +30 -0
- package/esm2020/lib/desy-nav/components/footer/footer-navigation/footer-navigation-item/footer-navigation-item.component.mjs +21 -0
- package/esm2020/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.mjs +19 -0
- package/esm2020/lib/desy-nav/components/footer/footer.component.mjs +71 -0
- package/esm2020/lib/desy-nav/components/header/header-custom-navigation/header-custom-navigation.component.mjs +15 -0
- package/esm2020/lib/desy-nav/components/header/header-dropdown/header-dropdown.component.mjs +45 -0
- package/esm2020/lib/desy-nav/components/header/header-navigation/header-navigation-item/header-navigation-item.component.mjs +27 -0
- package/esm2020/lib/desy-nav/components/header/header-navigation/header-navigation.component.mjs +36 -0
- package/esm2020/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.mjs +20 -0
- package/esm2020/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component.mjs +15 -0
- package/esm2020/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.mjs +95 -0
- package/esm2020/lib/desy-nav/components/header/header-subnav/header-subnav.component.mjs +41 -0
- package/esm2020/lib/desy-nav/components/header/header.component.mjs +103 -0
- package/esm2020/lib/desy-nav/components/menu-horizontal/menu-horizontal-item/menu-horizontal-item.component.mjs +40 -0
- package/esm2020/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.mjs +79 -0
- package/esm2020/lib/desy-nav/components/menu-navigation/components/menu-navigation-item/menu-navigation-item.component.mjs +49 -0
- package/esm2020/lib/desy-nav/components/menu-navigation/components/menu-navigation-subitem/menu-navigation-subitem.component.mjs +43 -0
- package/esm2020/lib/desy-nav/components/menu-navigation/menu-navigation.component.mjs +616 -0
- package/esm2020/lib/desy-nav/components/menu-vertical/menu-vertical-item/menu-vertical-item.component.mjs +45 -0
- package/esm2020/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub/menu-vertical-item-sub.component.mjs +18 -0
- package/esm2020/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component.mjs +34 -0
- package/esm2020/lib/desy-nav/components/menu-vertical/menu-vertical.component.mjs +113 -0
- package/esm2020/lib/desy-nav/components/menubar/components/menubar-item/menubar-item.component.mjs +51 -0
- package/esm2020/lib/desy-nav/components/menubar/components/menubar-label/menubar-label.component.mjs +14 -0
- package/esm2020/lib/desy-nav/components/menubar/components/menubar-subitem/menubar-subitem.component.mjs +36 -0
- package/esm2020/lib/desy-nav/components/menubar/components/menubar-subsubitem/menubar-subsubitem.component.mjs +27 -0
- package/esm2020/lib/desy-nav/components/menubar/directives/menubaritem.directive.mjs +45 -0
- package/esm2020/lib/desy-nav/components/menubar/menubar.component.mjs +727 -0
- package/esm2020/lib/desy-nav/components/nav/nav-item/nav-item.component.mjs +41 -0
- package/esm2020/lib/desy-nav/components/nav/nav.component.mjs +116 -0
- package/esm2020/lib/desy-nav/components/notification/notification-item/notification-item.component.mjs +25 -0
- package/esm2020/lib/desy-nav/components/notification/notification.component.mjs +141 -0
- package/esm2020/lib/desy-nav/components/skip-link/skip-link.component.mjs +37 -0
- package/esm2020/lib/desy-nav/desy-nav.module.mjs +221 -0
- package/{esm2015/lib/desy-nav/interfaces/menu-horizontal-item-data.js → esm2020/lib/desy-nav/interfaces/menu-horizontal-item-data.mjs} +1 -1
- package/{esm2015/lib/desy-nav/interfaces/menu-horizontal-item-event-data.js → esm2020/lib/desy-nav/interfaces/menu-horizontal-item-event-data.mjs} +1 -1
- package/esm2020/lib/desy-nav/interfaces/menu-navigation-item-sub-item.mjs +2 -0
- package/esm2020/lib/desy-pagination/components/pagination/pagination.component.mjs +167 -0
- package/esm2020/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.mjs +19 -0
- package/esm2020/lib/desy-pagination/components/pagination-listbox-label/pagination-listbox-label.component.mjs +17 -0
- package/esm2020/lib/desy-pagination/desy-pagination.module.mjs +46 -0
- package/esm2020/lib/desy-tables/components/table/components/table-caption.component.mjs +17 -0
- package/esm2020/lib/desy-tables/components/table/components/table-cell.component.mjs +23 -0
- package/esm2020/lib/desy-tables/components/table/components/table-header.component.mjs +18 -0
- package/esm2020/lib/desy-tables/components/table/components/table-row.component.mjs +18 -0
- package/esm2020/lib/desy-tables/components/table/table.component.mjs +78 -0
- package/esm2020/lib/desy-tables/components/table-advanced/components/table-advanced-header-cell.component.mjs +47 -0
- package/esm2020/lib/desy-tables/components/table-advanced/components/table-advanced-header.component.mjs +18 -0
- package/esm2020/lib/desy-tables/components/table-advanced/components/table-advanced-row-cell.component.mjs +23 -0
- package/esm2020/lib/desy-tables/components/table-advanced/components/table-advanced-row.component.mjs +27 -0
- package/esm2020/lib/desy-tables/components/table-advanced/components/table-advanced-select.component.mjs +28 -0
- package/esm2020/lib/desy-tables/components/table-advanced/table-advanced.component.mjs +342 -0
- package/esm2020/lib/desy-tables/desy-tables.module.mjs +102 -0
- package/esm2020/lib/desy-tables/directives/cell.directive.mjs +28 -0
- package/esm2020/lib/desy-tables/directives/focus-clicked-cell.directive.mjs +81 -0
- package/esm2020/lib/desy-tables/directives/row.directive.mjs +29 -0
- package/esm2020/lib/desy-tables/interfaces/head-cell-data.mjs +7 -0
- package/esm2020/lib/desy-views/components/accordion/accordion-header/accordion-header.component.mjs +17 -0
- package/esm2020/lib/desy-views/components/accordion/accordion-item/accordion-item.component.mjs +57 -0
- package/esm2020/lib/desy-views/components/accordion/accordion.component.mjs +198 -0
- package/esm2020/lib/desy-views/components/accordion-history/accordion-history-item/accordion-history-item.component.mjs +39 -0
- package/esm2020/lib/desy-views/components/accordion-history/accordion-history.component.mjs +19 -0
- package/esm2020/lib/desy-views/components/accordion-history/accordion-item-hide-button/accordion-item-hide-button.component.mjs +17 -0
- package/esm2020/lib/desy-views/components/accordion-history/accordion-item-show-button/accordion-item-show-button.component.mjs +17 -0
- package/esm2020/lib/desy-views/components/alert/alert.component.mjs +81 -0
- package/esm2020/lib/desy-views/components/collapsible/collapsible.component.mjs +81 -0
- package/esm2020/lib/desy-views/components/description-list/definition/definition.component.mjs +19 -0
- package/esm2020/lib/desy-views/components/description-list/description-item/description-item.component.mjs +34 -0
- package/esm2020/lib/desy-views/components/description-list/description-list.component.mjs +28 -0
- package/esm2020/lib/desy-views/components/description-list/term/term.component.mjs +19 -0
- package/esm2020/lib/desy-views/components/details/details.component.mjs +31 -0
- package/esm2020/lib/desy-views/components/item/item-content-bottom/item-content-bottom.component.mjs +17 -0
- package/esm2020/lib/desy-views/components/item/item-content-right/item-content-right.component.mjs +15 -0
- package/esm2020/lib/desy-views/components/item/item-item/item-item.component.mjs +15 -0
- package/esm2020/lib/desy-views/components/item/item.component.mjs +121 -0
- package/esm2020/lib/desy-views/components/media-object/media-object-figure/media-object-figure.component.mjs +12 -0
- package/esm2020/lib/desy-views/components/media-object/media-object.component.mjs +115 -0
- package/esm2020/lib/desy-views/components/spinner/spinner.component.mjs +77 -0
- package/esm2020/lib/desy-views/components/status/status.component.mjs +97 -0
- package/esm2020/lib/desy-views/components/status-item/status-item.component.mjs +143 -0
- package/esm2020/lib/desy-views/components/tabs/panel/panel.component.mjs +19 -0
- package/esm2020/lib/desy-views/components/tabs/tab-item/tab-item.component.mjs +37 -0
- package/esm2020/lib/desy-views/components/tabs/tabs.component.mjs +199 -0
- package/esm2020/lib/desy-views/components/tooltip/tooltip-content/tooltip-content.component.mjs +12 -0
- package/esm2020/lib/desy-views/components/tooltip/tooltip.component.mjs +202 -0
- package/esm2020/lib/desy-views/desy-views.module.mjs +175 -0
- package/{esm2015/lib/desy-views/interfaces/accordion-item.data.js → esm2020/lib/desy-views/interfaces/accordion-item.data.mjs} +1 -1
- package/esm2020/lib/desy-views/interfaces/tabs-items-data.mjs +2 -0
- package/esm2020/lib/desy-views/services/alert.service.mjs +88 -0
- package/esm2020/lib/shared/components/accessibility/accessibility.component.mjs +45 -0
- package/esm2020/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.mjs +44 -0
- package/esm2020/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.mjs +41 -0
- package/esm2020/lib/shared/components/content-base/content-base.component.mjs +24 -0
- package/esm2020/lib/shared/components/text-or-html-required/text-or-html-required.component.mjs +18 -0
- package/esm2020/lib/shared/directives/attribute-change.directive.mjs +45 -0
- package/esm2020/lib/shared/directives/click-outside.directive.mjs +40 -0
- package/esm2020/lib/shared/directives/content-change.directive.mjs +45 -0
- package/esm2020/lib/shared/directives/custom-inner-content.directive.mjs +60 -0
- package/esm2020/lib/shared/directives/inner-content.directive.mjs +37 -0
- package/esm2020/lib/shared/pipes/external-href.pipe.mjs +32 -0
- package/esm2020/lib/shared/pipes/inner-html.pipe.mjs +20 -0
- package/esm2020/lib/shared/pipes/make-html-list.pipe.mjs +20 -0
- package/esm2020/lib/shared/shared.module.mjs +99 -0
- package/esm2020/public-api.mjs +221 -0
- package/fesm2015/desy-angular.mjs +11752 -0
- package/fesm2015/desy-angular.mjs.map +1 -0
- package/fesm2020/desy-angular.mjs +11731 -0
- package/fesm2020/desy-angular.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/desy-angular.module.d.ts +12 -0
- package/lib/desy-buttons/components/button/button.component.d.ts +7 -2
- package/lib/desy-buttons/components/button-loader/button-loader.component.d.ts +7 -1
- package/lib/desy-buttons/components/dropdown/dropdown.component.d.ts +3 -0
- package/lib/desy-buttons/components/listbox/listbox-item/listbox-item.component.d.ts +3 -0
- package/lib/desy-buttons/components/listbox/listbox-label/listbox-label.component.d.ts +3 -0
- package/lib/desy-buttons/components/listbox/listbox.component.d.ts +5 -2
- package/lib/desy-buttons/components/pill/pill.component.d.ts +7 -2
- package/lib/desy-buttons/components/toggle/toggle-off-state/toggle-off-state.component.d.ts +3 -0
- package/lib/desy-buttons/components/toggle/toggle-on-state/toggle-on-state.component.d.ts +3 -0
- package/lib/desy-buttons/components/toggle/toggle.component.d.ts +3 -0
- package/lib/desy-buttons/desy-buttons.module.d.ts +18 -0
- package/lib/desy-commons/components/content/content.component.d.ts +3 -0
- package/lib/desy-commons/components/description/description.component.d.ts +3 -0
- package/lib/desy-commons/components/divider/divider.component.d.ts +3 -0
- package/lib/desy-commons/components/icon/icon.component.d.ts +3 -0
- package/lib/desy-commons/components/title/title.component.d.ts +3 -0
- package/lib/desy-commons/desy-commons.module.d.ts +12 -0
- package/lib/desy-forms/components/character-count/character-count.component.d.ts +3 -0
- package/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.d.ts +6 -3
- package/lib/desy-forms/components/checkboxes/checkboxes.component.d.ts +11 -10
- package/lib/desy-forms/components/date-input/date-input-day/date-input-day.component.d.ts +3 -0
- package/lib/desy-forms/components/date-input/date-input-divider/date-input-divider.component.d.ts +3 -0
- package/lib/desy-forms/components/date-input/date-input-item/date-input-item.component.d.ts +3 -0
- package/lib/desy-forms/components/date-input/date-input-month/date-input-month.component.d.ts +3 -0
- package/lib/desy-forms/components/date-input/date-input-year/date-input-year.component.d.ts +3 -0
- package/lib/desy-forms/components/date-input/date-input.component.d.ts +8 -3
- package/lib/desy-forms/components/error-message/error-message.component.d.ts +3 -0
- package/lib/desy-forms/components/fieldset/fieldset.component.d.ts +3 -0
- package/lib/desy-forms/components/fieldset/legend/legend.component.d.ts +7 -1
- package/lib/desy-forms/components/file-upload/file-upload.component.d.ts +4 -1
- package/lib/desy-forms/components/form-field/form-field.component.d.ts +3 -0
- package/lib/desy-forms/components/hint/hint.component.d.ts +3 -0
- package/lib/desy-forms/components/input/input.component.d.ts +4 -0
- package/lib/desy-forms/components/input-group/input-group-divider/input-group-divider.component.d.ts +3 -0
- package/lib/desy-forms/components/input-group/input-group-input/input-group-input.component.d.ts +3 -0
- package/lib/desy-forms/components/input-group/input-group-item/input-group-item.component.d.ts +3 -0
- package/lib/desy-forms/components/input-group/input-group-select/input-group-select.component.d.ts +3 -0
- package/lib/desy-forms/components/input-group/input-group.component.d.ts +5 -1
- package/lib/desy-forms/components/label/label.component.d.ts +7 -2
- package/lib/desy-forms/components/radios/radio-item/radio-item.component.d.ts +6 -3
- package/lib/desy-forms/components/radios/radios.component.d.ts +11 -10
- package/lib/desy-forms/components/search-bar/search-bar.component.d.ts +4 -0
- package/lib/desy-forms/components/select/option/option.component.d.ts +3 -0
- package/lib/desy-forms/components/select/option-group/option-group.component.d.ts +3 -0
- package/lib/desy-forms/components/select/select-item/select-item.component.d.ts +3 -0
- package/lib/desy-forms/components/select/select.component.d.ts +4 -0
- package/lib/desy-forms/components/template-driven-wrapper/template-driven-wrapper.component.d.ts +3 -0
- package/lib/desy-forms/components/textarea/textarea.component.d.ts +4 -1
- package/lib/desy-forms/components/tree/tree-checkbox/tree-checkbox.component.d.ts +4 -1
- package/lib/desy-forms/components/tree/tree-item/tree-item.component.d.ts +9 -6
- package/lib/desy-forms/components/tree/tree-items-generator/tree-items-generator.component.d.ts +3 -0
- package/lib/desy-forms/components/tree/tree-sub/tree-sub.component.d.ts +3 -0
- package/lib/desy-forms/components/tree/tree.component.d.ts +3 -0
- package/lib/desy-forms/desy-forms.module.d.ts +45 -0
- package/lib/desy-forms/directives/condition.directive.d.ts +3 -0
- package/lib/desy-forms/interfaces/select-item-data.d.ts +3 -0
- package/lib/desy-forms/models/checkbox-service-item.component.d.ts +13 -0
- package/lib/desy-forms/models/radio-service-item.component.d.ts +12 -0
- package/lib/desy-forms/services/checkbox.service.d.ts +14 -0
- package/lib/desy-forms/services/radio.service.d.ts +13 -0
- package/lib/desy-modals/components/dialog/dialog.component.d.ts +5 -2
- package/lib/desy-modals/components/modal/modal-button-loader-primary/modal-button-loader-primary.component.d.ts +3 -0
- package/lib/desy-modals/components/modal/modal-button-loader-secondary/modal-button-loader-secondary.component.d.ts +3 -0
- package/lib/desy-modals/components/modal/modal-button-primary/modal-button-primary.component.d.ts +3 -0
- package/lib/desy-modals/components/modal/modal-button-secondary/modal-button-secondary.component.d.ts +3 -0
- package/lib/desy-modals/components/modal/modal.component.d.ts +3 -0
- package/lib/desy-modals/desy-modals.module.d.ts +14 -0
- package/lib/desy-modals/services/dialog.service.d.ts +3 -0
- package/lib/desy-nav/components/breadcrumbs/breadcrumbs-item/breadcrumbs-item.component.d.ts +3 -0
- package/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.d.ts +3 -0
- package/lib/desy-nav/components/error-summary/error-summary-item/error-summary-item.component.d.ts +3 -0
- package/lib/desy-nav/components/error-summary/error-summary.component.d.ts +3 -0
- package/lib/desy-nav/components/footer/footer-meta/footer-meta-item/footer-meta-item.component.d.ts +3 -0
- package/lib/desy-nav/components/footer/footer-meta/footer-meta.component.d.ts +3 -0
- package/lib/desy-nav/components/footer/footer-navigation/footer-navigation-item/footer-navigation-item.component.d.ts +3 -0
- package/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.d.ts +3 -0
- package/lib/desy-nav/components/footer/footer.component.d.ts +3 -0
- package/lib/desy-nav/components/header/header-custom-navigation/header-custom-navigation.component.d.ts +3 -0
- package/lib/desy-nav/components/header/header-dropdown/header-dropdown.component.d.ts +3 -0
- package/lib/desy-nav/components/header/header-navigation/header-navigation-item/header-navigation-item.component.d.ts +3 -0
- package/lib/desy-nav/components/header/header-navigation/header-navigation.component.d.ts +3 -0
- package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.d.ts +3 -0
- package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component.d.ts +3 -0
- package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.d.ts +3 -0
- package/lib/desy-nav/components/header/header-subnav/header-subnav.component.d.ts +3 -0
- package/lib/desy-nav/components/header/header.component.d.ts +3 -0
- package/lib/desy-nav/components/menu-horizontal/menu-horizontal-item/menu-horizontal-item.component.d.ts +3 -0
- package/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.d.ts +3 -0
- package/lib/desy-nav/components/menu-navigation/components/menu-navigation-item/menu-navigation-item.component.d.ts +3 -0
- package/lib/desy-nav/components/menu-navigation/components/menu-navigation-subitem/menu-navigation-subitem.component.d.ts +3 -0
- package/lib/desy-nav/components/menu-navigation/menu-navigation.component.d.ts +3 -0
- package/lib/desy-nav/components/menu-vertical/menu-vertical-item/menu-vertical-item.component.d.ts +3 -0
- package/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub/menu-vertical-item-sub.component.d.ts +3 -0
- package/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component.d.ts +3 -0
- package/lib/desy-nav/components/menu-vertical/menu-vertical.component.d.ts +3 -0
- package/lib/desy-nav/components/menubar/components/menubar-item/menubar-item.component.d.ts +3 -0
- package/lib/desy-nav/components/menubar/components/menubar-label/menubar-label.component.d.ts +3 -0
- package/lib/desy-nav/components/menubar/components/menubar-subitem/menubar-subitem.component.d.ts +3 -0
- package/lib/desy-nav/components/menubar/components/menubar-subsubitem/menubar-subsubitem.component.d.ts +3 -0
- package/lib/desy-nav/components/menubar/directives/menubaritem.directive.d.ts +3 -0
- package/lib/desy-nav/components/menubar/menubar.component.d.ts +3 -0
- package/lib/desy-nav/components/nav/nav-item/nav-item.component.d.ts +3 -0
- package/lib/desy-nav/components/nav/nav.component.d.ts +6 -3
- package/lib/desy-nav/components/notification/notification-item/notification-item.component.d.ts +3 -0
- package/lib/desy-nav/components/notification/notification.component.d.ts +3 -0
- package/lib/desy-nav/components/skip-link/skip-link.component.d.ts +3 -0
- package/lib/desy-nav/desy-nav.module.d.ts +46 -0
- package/lib/desy-nav/interfaces/menu-horizontal-item-data.d.ts +1 -0
- package/lib/desy-nav/interfaces/menu-horizontal-item-event-data.d.ts +1 -0
- package/lib/desy-nav/interfaces/menu-navigation-item-sub-item.d.ts +8 -0
- package/lib/desy-pagination/components/pagination/pagination.component.d.ts +3 -0
- package/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.d.ts +3 -0
- package/lib/desy-pagination/components/pagination-listbox-label/pagination-listbox-label.component.d.ts +3 -0
- package/lib/desy-pagination/desy-pagination.module.d.ts +11 -0
- package/lib/desy-tables/components/table/components/table-caption.component.d.ts +3 -0
- package/lib/desy-tables/components/table/components/table-cell.component.d.ts +3 -0
- package/lib/desy-tables/components/table/components/table-header.component.d.ts +3 -0
- package/lib/desy-tables/components/table/components/table-row.component.d.ts +3 -0
- package/lib/desy-tables/components/table/table.component.d.ts +4 -1
- package/lib/desy-tables/components/table-advanced/components/table-advanced-header-cell.component.d.ts +3 -0
- package/lib/desy-tables/components/table-advanced/components/table-advanced-header.component.d.ts +3 -0
- package/lib/desy-tables/components/table-advanced/components/table-advanced-row-cell.component.d.ts +3 -0
- package/lib/desy-tables/components/table-advanced/components/table-advanced-row.component.d.ts +3 -0
- package/lib/desy-tables/components/table-advanced/components/table-advanced-select.component.d.ts +3 -0
- package/lib/desy-tables/components/table-advanced/table-advanced.component.d.ts +6 -3
- package/lib/desy-tables/desy-tables.module.d.ts +23 -0
- package/lib/desy-tables/directives/cell.directive.d.ts +3 -0
- package/lib/desy-tables/directives/focus-clicked-cell.directive.d.ts +3 -0
- package/lib/desy-tables/directives/row.directive.d.ts +3 -0
- package/lib/desy-tables/interfaces/head-cell-data.d.ts +2 -0
- package/lib/desy-views/components/accordion/accordion-header/accordion-header.component.d.ts +3 -0
- package/lib/desy-views/components/accordion/accordion-item/accordion-item.component.d.ts +3 -0
- package/lib/desy-views/components/accordion/accordion.component.d.ts +3 -0
- package/lib/desy-views/components/accordion-history/accordion-history-item/accordion-history-item.component.d.ts +3 -0
- package/lib/desy-views/components/accordion-history/accordion-history.component.d.ts +3 -0
- package/lib/desy-views/components/accordion-history/accordion-item-hide-button/accordion-item-hide-button.component.d.ts +3 -0
- package/lib/desy-views/components/accordion-history/accordion-item-show-button/accordion-item-show-button.component.d.ts +3 -0
- package/lib/desy-views/components/alert/alert.component.d.ts +4 -1
- package/lib/desy-views/components/collapsible/collapsible.component.d.ts +5 -1
- package/lib/desy-views/components/description-list/definition/definition.component.d.ts +3 -0
- package/lib/desy-views/components/description-list/description-item/description-item.component.d.ts +3 -0
- package/lib/desy-views/components/description-list/description-list.component.d.ts +3 -0
- package/lib/desy-views/components/description-list/term/term.component.d.ts +3 -0
- package/lib/desy-views/components/details/details.component.d.ts +7 -1
- package/lib/desy-views/components/item/item-content-bottom/item-content-bottom.component.d.ts +3 -0
- package/lib/desy-views/components/item/item-content-right/item-content-right.component.d.ts +3 -0
- package/lib/desy-views/components/item/item-item/item-item.component.d.ts +3 -0
- package/lib/desy-views/components/item/item.component.d.ts +4 -1
- package/lib/desy-views/components/media-object/media-object-figure/media-object-figure.component.d.ts +3 -0
- package/lib/desy-views/components/media-object/media-object.component.d.ts +3 -0
- package/lib/desy-views/components/spinner/spinner.component.d.ts +3 -0
- package/lib/desy-views/components/status/status.component.d.ts +7 -2
- package/lib/desy-views/components/status-item/status-item.component.d.ts +3 -0
- package/lib/desy-views/components/tabs/panel/panel.component.d.ts +3 -0
- package/lib/desy-views/components/tabs/tab-item/tab-item.component.d.ts +3 -0
- package/lib/desy-views/components/tabs/tabs.component.d.ts +9 -3
- package/lib/desy-views/components/tooltip/tooltip-content/tooltip-content.component.d.ts +3 -0
- package/lib/desy-views/components/tooltip/tooltip.component.d.ts +3 -0
- package/lib/desy-views/desy-views.module.d.ts +37 -0
- package/lib/desy-views/interfaces/accordion-item.data.d.ts +1 -0
- package/lib/desy-views/interfaces/tabs-items-data.d.ts +2 -0
- package/lib/desy-views/services/alert.service.d.ts +3 -0
- package/lib/shared/components/accessibility/accessibility.component.d.ts +3 -0
- package/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.d.ts +4 -1
- package/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.d.ts +3 -0
- package/lib/shared/components/content-base/content-base.component.d.ts +3 -0
- package/lib/shared/components/text-or-html-required/text-or-html-required.component.d.ts +3 -0
- package/lib/shared/directives/attribute-change.directive.d.ts +3 -0
- package/lib/shared/directives/click-outside.directive.d.ts +3 -0
- package/lib/shared/directives/content-change.directive.d.ts +3 -0
- package/lib/shared/directives/custom-inner-content.directive.d.ts +3 -0
- package/lib/shared/directives/inner-content.directive.d.ts +3 -0
- package/lib/shared/pipes/external-href.pipe.d.ts +3 -0
- package/lib/shared/pipes/inner-html.pipe.d.ts +3 -0
- package/lib/shared/pipes/make-html-list.pipe.d.ts +3 -0
- package/lib/shared/shared.module.d.ts +19 -0
- package/package.json +33 -20
- package/public-api.d.ts +24 -0
- package/bundles/desy-angular.umd.js +0 -10918
- package/bundles/desy-angular.umd.js.map +0 -1
- package/bundles/desy-angular.umd.min.js +0 -2
- package/bundles/desy-angular.umd.min.js.map +0 -1
- package/desy-angular.d.ts +0 -51
- package/desy-angular.metadata.json +0 -1
- package/esm2015/desy-angular.js +0 -52
- package/esm2015/lib/desy-angular.module.js +0 -38
- package/esm2015/lib/desy-buttons/components/button/button.component.js +0 -92
- package/esm2015/lib/desy-buttons/components/button-loader/button-loader.component.js +0 -50
- package/esm2015/lib/desy-buttons/components/dropdown/dropdown.component.js +0 -111
- package/esm2015/lib/desy-buttons/components/listbox/listbox-item/listbox-item.component.js +0 -26
- package/esm2015/lib/desy-buttons/components/listbox/listbox-label/listbox-label.component.js +0 -14
- package/esm2015/lib/desy-buttons/components/listbox/listbox.component.js +0 -265
- package/esm2015/lib/desy-buttons/components/pill/pill.component.js +0 -64
- package/esm2015/lib/desy-buttons/components/toggle/toggle-off-state/toggle-off-state.component.js +0 -15
- package/esm2015/lib/desy-buttons/components/toggle/toggle-on-state/toggle-on-state.component.js +0 -15
- package/esm2015/lib/desy-buttons/components/toggle/toggle.component.js +0 -44
- package/esm2015/lib/desy-commons/components/content/content.component.js +0 -14
- package/esm2015/lib/desy-commons/components/description/description.component.js +0 -15
- package/esm2015/lib/desy-commons/components/divider/divider.component.js +0 -15
- package/esm2015/lib/desy-commons/components/icon/icon.component.js +0 -15
- package/esm2015/lib/desy-commons/components/title/title.component.js +0 -14
- package/esm2015/lib/desy-commons/desy-commons.module.js +0 -36
- package/esm2015/lib/desy-forms/components/character-count/character-count.component.js +0 -109
- package/esm2015/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.js +0 -188
- package/esm2015/lib/desy-forms/components/checkboxes/checkboxes.component.js +0 -226
- package/esm2015/lib/desy-forms/components/date-input/date-input-day/date-input-day.component.js +0 -38
- package/esm2015/lib/desy-forms/components/date-input/date-input-divider/date-input-divider.component.js +0 -19
- package/esm2015/lib/desy-forms/components/date-input/date-input-item/date-input-item.component.js +0 -13
- package/esm2015/lib/desy-forms/components/date-input/date-input-month/date-input-month.component.js +0 -38
- package/esm2015/lib/desy-forms/components/date-input/date-input-year/date-input-year.component.js +0 -36
- package/esm2015/lib/desy-forms/components/date-input/date-input.component.js +0 -222
- package/esm2015/lib/desy-forms/components/error-message/error-message.component.js +0 -28
- package/esm2015/lib/desy-forms/components/fieldset/fieldset.component.js +0 -44
- package/esm2015/lib/desy-forms/components/fieldset/legend/legend.component.js +0 -16
- package/esm2015/lib/desy-forms/components/file-upload/file-upload.component.js +0 -51
- package/esm2015/lib/desy-forms/components/form-field/form-field.component.js +0 -103
- package/esm2015/lib/desy-forms/components/hint/hint.component.js +0 -27
- package/esm2015/lib/desy-forms/components/input/input.component.js +0 -67
- package/esm2015/lib/desy-forms/components/input-group/input-group-divider/input-group-divider.component.js +0 -20
- package/esm2015/lib/desy-forms/components/input-group/input-group-input/input-group-input.component.js +0 -39
- package/esm2015/lib/desy-forms/components/input-group/input-group-item/input-group-item.component.js +0 -13
- package/esm2015/lib/desy-forms/components/input-group/input-group-select/input-group-select.component.js +0 -35
- package/esm2015/lib/desy-forms/components/input-group/input-group.component.js +0 -179
- package/esm2015/lib/desy-forms/components/label/label.component.js +0 -30
- package/esm2015/lib/desy-forms/components/radios/radio-item/radio-item.component.js +0 -144
- package/esm2015/lib/desy-forms/components/radios/radios.component.js +0 -233
- package/esm2015/lib/desy-forms/components/search-bar/search-bar.component.js +0 -45
- package/esm2015/lib/desy-forms/components/select/option/option.component.js +0 -17
- package/esm2015/lib/desy-forms/components/select/option-group/option-group.component.js +0 -17
- package/esm2015/lib/desy-forms/components/select/select-item/select-item.component.js +0 -14
- package/esm2015/lib/desy-forms/components/select/select.component.js +0 -64
- package/esm2015/lib/desy-forms/components/template-driven-wrapper/template-driven-wrapper.component.js +0 -12
- package/esm2015/lib/desy-forms/components/textarea/textarea.component.js +0 -60
- package/esm2015/lib/desy-forms/components/tree/tree-checkbox/tree-checkbox.component.js +0 -151
- package/esm2015/lib/desy-forms/components/tree/tree-item/tree-item.component.js +0 -370
- package/esm2015/lib/desy-forms/components/tree/tree-items-generator/tree-items-generator.component.js +0 -25
- package/esm2015/lib/desy-forms/components/tree/tree-sub/tree-sub.component.js +0 -14
- package/esm2015/lib/desy-forms/components/tree/tree.component.js +0 -408
- package/esm2015/lib/desy-forms/desy-forms.module.js +0 -130
- package/esm2015/lib/desy-forms/directives/condition.directive.js +0 -32
- package/esm2015/lib/desy-modals/components/dialog/dialog.component.js +0 -121
- package/esm2015/lib/desy-modals/components/modal/modal-button-loader-primary/modal-button-loader-primary.component.js +0 -20
- package/esm2015/lib/desy-modals/components/modal/modal-button-loader-secondary/modal-button-loader-secondary.component.js +0 -19
- package/esm2015/lib/desy-modals/components/modal/modal-button-primary/modal-button-primary.component.js +0 -19
- package/esm2015/lib/desy-modals/components/modal/modal-button-secondary/modal-button-secondary.component.js +0 -19
- package/esm2015/lib/desy-modals/components/modal/modal.component.js +0 -145
- package/esm2015/lib/desy-modals/desy-modals.module.js +0 -41
- package/esm2015/lib/desy-modals/services/dialog.service.js +0 -117
- package/esm2015/lib/desy-nav/components/breadcrumbs/breadcrumbs-item/breadcrumbs-item.component.js +0 -15
- package/esm2015/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.js +0 -42
- package/esm2015/lib/desy-nav/components/error-summary/error-summary-item/error-summary-item.component.js +0 -15
- package/esm2015/lib/desy-nav/components/error-summary/error-summary.component.js +0 -46
- package/esm2015/lib/desy-nav/components/footer/footer-meta/footer-meta-item/footer-meta-item.component.js +0 -16
- package/esm2015/lib/desy-nav/components/footer/footer-meta/footer-meta.component.js +0 -23
- package/esm2015/lib/desy-nav/components/footer/footer-navigation/footer-navigation-item/footer-navigation-item.component.js +0 -16
- package/esm2015/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.js +0 -16
- package/esm2015/lib/desy-nav/components/footer/footer.component.js +0 -52
- package/esm2015/lib/desy-nav/components/header/header-custom-navigation/header-custom-navigation.component.js +0 -11
- package/esm2015/lib/desy-nav/components/header/header-dropdown/header-dropdown.component.js +0 -36
- package/esm2015/lib/desy-nav/components/header/header-navigation/header-navigation-item/header-navigation-item.component.js +0 -19
- package/esm2015/lib/desy-nav/components/header/header-navigation/header-navigation.component.js +0 -29
- package/esm2015/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.js +0 -22
- package/esm2015/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component.js +0 -11
- package/esm2015/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.js +0 -88
- package/esm2015/lib/desy-nav/components/header/header-subnav/header-subnav.component.js +0 -34
- package/esm2015/lib/desy-nav/components/header/header.component.js +0 -66
- package/esm2015/lib/desy-nav/components/menu-horizontal/menu-horizontal-item/menu-horizontal-item.component.js +0 -28
- package/esm2015/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.js +0 -68
- package/esm2015/lib/desy-nav/components/menu-navigation/components/menu-navigation-item/menu-navigation-item.component.js +0 -35
- package/esm2015/lib/desy-nav/components/menu-navigation/components/menu-navigation-subitem/menu-navigation-subitem.component.js +0 -31
- package/esm2015/lib/desy-nav/components/menu-navigation/menu-navigation.component.js +0 -568
- package/esm2015/lib/desy-nav/components/menu-vertical/menu-vertical-item/menu-vertical-item.component.js +0 -32
- package/esm2015/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub/menu-vertical-item-sub.component.js +0 -16
- package/esm2015/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component.js +0 -24
- package/esm2015/lib/desy-nav/components/menu-vertical/menu-vertical.component.js +0 -89
- package/esm2015/lib/desy-nav/components/menubar/components/menubar-item/menubar-item.component.js +0 -36
- package/esm2015/lib/desy-nav/components/menubar/components/menubar-label/menubar-label.component.js +0 -14
- package/esm2015/lib/desy-nav/components/menubar/components/menubar-subitem/menubar-subitem.component.js +0 -29
- package/esm2015/lib/desy-nav/components/menubar/components/menubar-subsubitem/menubar-subsubitem.component.js +0 -23
- package/esm2015/lib/desy-nav/components/menubar/directives/menubaritem.directive.js +0 -37
- package/esm2015/lib/desy-nav/components/menubar/menubar.component.js +0 -672
- package/esm2015/lib/desy-nav/components/nav/nav-item/nav-item.component.js +0 -30
- package/esm2015/lib/desy-nav/components/nav/nav.component.js +0 -105
- package/esm2015/lib/desy-nav/components/notification/notification-item/notification-item.component.js +0 -18
- package/esm2015/lib/desy-nav/components/notification/notification.component.js +0 -102
- package/esm2015/lib/desy-nav/components/skip-link/skip-link.component.js +0 -33
- package/esm2015/lib/desy-nav/desy-nav.module.js +0 -136
- package/esm2015/lib/desy-nav/interfaces/menu-navigation-item-sub-item.js +0 -2
- package/esm2015/lib/desy-pagination/components/pagination/pagination.component.js +0 -138
- package/esm2015/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.js +0 -15
- package/esm2015/lib/desy-pagination/components/pagination-listbox-label/pagination-listbox-label.component.js +0 -14
- package/esm2015/lib/desy-pagination/desy-pagination.module.js +0 -31
- package/esm2015/lib/desy-tables/components/table/components/table-caption.component.js +0 -14
- package/esm2015/lib/desy-tables/components/table/components/table-cell.component.js +0 -17
- package/esm2015/lib/desy-tables/components/table/components/table-header.component.js +0 -14
- package/esm2015/lib/desy-tables/components/table/components/table-row.component.js +0 -14
- package/esm2015/lib/desy-tables/components/table/table.component.js +0 -55
- package/esm2015/lib/desy-tables/components/table-advanced/components/table-advanced-header-cell.component.js +0 -33
- package/esm2015/lib/desy-tables/components/table-advanced/components/table-advanced-header.component.js +0 -14
- package/esm2015/lib/desy-tables/components/table-advanced/components/table-advanced-row-cell.component.js +0 -17
- package/esm2015/lib/desy-tables/components/table-advanced/components/table-advanced-row.component.js +0 -20
- package/esm2015/lib/desy-tables/components/table-advanced/components/table-advanced-select.component.js +0 -22
- package/esm2015/lib/desy-tables/components/table-advanced/table-advanced.component.js +0 -316
- package/esm2015/lib/desy-tables/desy-tables.module.js +0 -64
- package/esm2015/lib/desy-tables/directives/cell.directive.js +0 -26
- package/esm2015/lib/desy-tables/directives/focus-clicked-cell.directive.js +0 -78
- package/esm2015/lib/desy-tables/directives/row.directive.js +0 -24
- package/esm2015/lib/desy-tables/interfaces/head-cell-data.js +0 -7
- package/esm2015/lib/desy-views/components/accordion/accordion-header/accordion-header.component.js +0 -14
- package/esm2015/lib/desy-views/components/accordion/accordion-item/accordion-item.component.js +0 -43
- package/esm2015/lib/desy-views/components/accordion/accordion.component.js +0 -153
- package/esm2015/lib/desy-views/components/accordion-history/accordion-history-item/accordion-history-item.component.js +0 -31
- package/esm2015/lib/desy-views/components/accordion-history/accordion-history.component.js +0 -15
- package/esm2015/lib/desy-views/components/accordion-history/accordion-item-hide-button/accordion-item-hide-button.component.js +0 -14
- package/esm2015/lib/desy-views/components/accordion-history/accordion-item-show-button/accordion-item-show-button.component.js +0 -14
- package/esm2015/lib/desy-views/components/alert/alert.component.js +0 -75
- package/esm2015/lib/desy-views/components/collapsible/collapsible.component.js +0 -55
- package/esm2015/lib/desy-views/components/description-list/definition/definition.component.js +0 -15
- package/esm2015/lib/desy-views/components/description-list/description-item/description-item.component.js +0 -26
- package/esm2015/lib/desy-views/components/description-list/description-list.component.js +0 -22
- package/esm2015/lib/desy-views/components/description-list/term/term.component.js +0 -15
- package/esm2015/lib/desy-views/components/details/details.component.js +0 -20
- package/esm2015/lib/desy-views/components/item/item-content-bottom/item-content-bottom.component.js +0 -14
- package/esm2015/lib/desy-views/components/item/item-content-right/item-content-right.component.js +0 -11
- package/esm2015/lib/desy-views/components/item/item-item/item-item.component.js +0 -11
- package/esm2015/lib/desy-views/components/item/item.component.js +0 -87
- package/esm2015/lib/desy-views/components/media-object/media-object-figure/media-object-figure.component.js +0 -11
- package/esm2015/lib/desy-views/components/media-object/media-object.component.js +0 -67
- package/esm2015/lib/desy-views/components/spinner/spinner.component.js +0 -45
- package/esm2015/lib/desy-views/components/status/status.component.js +0 -58
- package/esm2015/lib/desy-views/components/status-item/status-item.component.js +0 -86
- package/esm2015/lib/desy-views/components/tabs/panel/panel.component.js +0 -15
- package/esm2015/lib/desy-views/components/tabs/tab-item/tab-item.component.js +0 -28
- package/esm2015/lib/desy-views/components/tabs/tabs.component.js +0 -150
- package/esm2015/lib/desy-views/components/tooltip/tooltip-content/tooltip-content.component.js +0 -11
- package/esm2015/lib/desy-views/components/tooltip/tooltip.component.js +0 -155
- package/esm2015/lib/desy-views/desy-views.module.js +0 -108
- package/esm2015/lib/desy-views/interfaces/tabs-items-data.js +0 -2
- package/esm2015/lib/desy-views/services/alert.service.js +0 -89
- package/esm2015/lib/shared/components/accessibility/accessibility.component.js +0 -29
- package/esm2015/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.js +0 -27
- package/esm2015/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.js +0 -26
- package/esm2015/lib/shared/components/content-base/content-base.component.js +0 -20
- package/esm2015/lib/shared/components/text-or-html-required/text-or-html-required.component.js +0 -14
- package/esm2015/lib/shared/directives/attribute-change.directive.js +0 -43
- package/esm2015/lib/shared/directives/click-outside.directive.js +0 -35
- package/esm2015/lib/shared/directives/content-change.directive.js +0 -43
- package/esm2015/lib/shared/directives/custom-inner-content.directive.js +0 -62
- package/esm2015/lib/shared/directives/inner-content.directive.js +0 -34
- package/esm2015/lib/shared/pipes/external-href.pipe.js +0 -28
- package/esm2015/lib/shared/pipes/inner-html.pipe.js +0 -19
- package/esm2015/lib/shared/pipes/make-html-list.pipe.js +0 -16
- package/esm2015/lib/shared/shared.module.js +0 -62
- package/esm2015/public-api.js +0 -197
- package/fesm2015/desy-angular.js +0 -9650
- package/fesm2015/desy-angular.js.map +0 -1
- /package/{esm2015/lib/desy-buttons/interfaces/listbox-item-data.js → esm2020/lib/desy-buttons/interfaces/listbox-item-data.mjs} +0 -0
- /package/{esm2015/lib/desy-buttons/interfaces/listbox-label-data.js → esm2020/lib/desy-buttons/interfaces/listbox-label-data.mjs} +0 -0
- /package/{esm2015/lib/desy-commons/interfaces/content-data.js → esm2020/lib/desy-commons/interfaces/content-data.mjs} +0 -0
- /package/{esm2015/lib/desy-commons/interfaces/description-data.js → esm2020/lib/desy-commons/interfaces/description-data.mjs} +0 -0
- /package/{esm2015/lib/desy-commons/interfaces/divider-data.js → esm2020/lib/desy-commons/interfaces/divider-data.mjs} +0 -0
- /package/{esm2015/lib/desy-commons/interfaces/icon-data.js → esm2020/lib/desy-commons/interfaces/icon-data.mjs} +0 -0
- /package/{esm2015/lib/desy-commons/interfaces/index.js → esm2020/lib/desy-commons/interfaces/index.mjs} +0 -0
- /package/{esm2015/lib/desy-commons/interfaces/title-data.js → esm2020/lib/desy-commons/interfaces/title-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/components/tree/interfaces/itree-item.js → esm2020/lib/desy-forms/components/tree/interfaces/itree-item.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/components/tree/interfaces/quit-tree-item-focus-options.js → esm2020/lib/desy-forms/components/tree/interfaces/quit-tree-item-focus-options.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/accesibility-data.js → esm2020/lib/desy-forms/interfaces/accesibility-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/error-message-data.js → esm2020/lib/desy-forms/interfaces/error-message-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/fieldset-data.js → esm2020/lib/desy-forms/interfaces/fieldset-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/hint-data.js → esm2020/lib/desy-forms/interfaces/hint-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/index.js → esm2020/lib/desy-forms/interfaces/index.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/item-checkbox-data.js → esm2020/lib/desy-forms/interfaces/item-checkbox-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/item-date-input-data.js → esm2020/lib/desy-forms/interfaces/item-date-input-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/item-divider-date-input-data.js → esm2020/lib/desy-forms/interfaces/item-divider-date-input-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/item-divider-input-group-data.js → esm2020/lib/desy-forms/interfaces/item-divider-input-group-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/item-input-group-data.js → esm2020/lib/desy-forms/interfaces/item-input-group-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/item-radio-data.js → esm2020/lib/desy-forms/interfaces/item-radio-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/item-radio-with-template-data.js → esm2020/lib/desy-forms/interfaces/item-radio-with-template-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/label-data.js → esm2020/lib/desy-forms/interfaces/label-data.mjs} +0 -0
- /package/{esm2015/lib/desy-forms/interfaces/legend-data.js → esm2020/lib/desy-forms/interfaces/legend-data.mjs} +0 -0
- /package/{esm2015/lib/desy-modals/interfaces/dialog-options.js → esm2020/lib/desy-modals/interfaces/dialog-options.mjs} +0 -0
- /package/{esm2015/lib/desy-modals/interfaces/index.js → esm2020/lib/desy-modals/interfaces/index.mjs} +0 -0
- /package/{esm2015/lib/desy-modals/interfaces/modal-button-data.js → esm2020/lib/desy-modals/interfaces/modal-button-data.mjs} +0 -0
- /package/{esm2015/lib/desy-modals/interfaces/modal-data.js → esm2020/lib/desy-modals/interfaces/modal-data.mjs} +0 -0
- /package/{esm2015/lib/desy-modals/interfaces/modal-icon-data.js → esm2020/lib/desy-modals/interfaces/modal-icon-data.mjs} +0 -0
- /package/{esm2015/lib/desy-modals/interfaces/modal-options.js → esm2020/lib/desy-modals/interfaces/modal-options.mjs} +0 -0
- /package/{esm2015/lib/desy-modals/interfaces/open-dialog-result.js → esm2020/lib/desy-modals/interfaces/open-dialog-result.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/breadcrumbs.data.js → esm2020/lib/desy-nav/interfaces/breadcrumbs.data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/error-summary-data.js → esm2020/lib/desy-nav/interfaces/error-summary-data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/footer-data.js → esm2020/lib/desy-nav/interfaces/footer-data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/header-dropdown-data.js → esm2020/lib/desy-nav/interfaces/header-dropdown-data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/header-navigation-data.js → esm2020/lib/desy-nav/interfaces/header-navigation-data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/header-navigation-item-data.js → esm2020/lib/desy-nav/interfaces/header-navigation-item-data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/header-offcanvas-data.js → esm2020/lib/desy-nav/interfaces/header-offcanvas-data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/header-subnav-data.js → esm2020/lib/desy-nav/interfaces/header-subnav-data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/index.js → esm2020/lib/desy-nav/interfaces/index.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/menu-navigation-item-sub-item-sub-item.js → esm2020/lib/desy-nav/interfaces/menu-navigation-item-sub-item-sub-item.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/menu-navigation.js → esm2020/lib/desy-nav/interfaces/menu-navigation.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/menu-vertical-items-data.js → esm2020/lib/desy-nav/interfaces/menu-vertical-items-data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/menu-vertical-sub-data.js → esm2020/lib/desy-nav/interfaces/menu-vertical-sub-data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/menu-vertical-sub-items-data.js → esm2020/lib/desy-nav/interfaces/menu-vertical-sub-items-data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/menubar-item-sub-item-sub-item.js → esm2020/lib/desy-nav/interfaces/menubar-item-sub-item-sub-item.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/menubar-item-sub-item.js → esm2020/lib/desy-nav/interfaces/menubar-item-sub-item.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/menubar-item-sub.js → esm2020/lib/desy-nav/interfaces/menubar-item-sub.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/menubar-item.js → esm2020/lib/desy-nav/interfaces/menubar-item.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/nav-item-event.data.js → esm2020/lib/desy-nav/interfaces/nav-item-event.data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/nav-item.data.js → esm2020/lib/desy-nav/interfaces/nav-item.data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/notification-items-data.js → esm2020/lib/desy-nav/interfaces/notification-items-data.mjs} +0 -0
- /package/{esm2015/lib/desy-nav/interfaces/notification-options.js → esm2020/lib/desy-nav/interfaces/notification-options.mjs} +0 -0
- /package/{esm2015/lib/desy-pagination/interfaces/index.js → esm2020/lib/desy-pagination/interfaces/index.mjs} +0 -0
- /package/{esm2015/lib/desy-pagination/interfaces/pagination-item.data.js → esm2020/lib/desy-pagination/interfaces/pagination-item.data.mjs} +0 -0
- /package/{esm2015/lib/desy-tables/interfaces/cell-data.js → esm2020/lib/desy-tables/interfaces/cell-data.mjs} +0 -0
- /package/{esm2015/lib/desy-tables/interfaces/index.js → esm2020/lib/desy-tables/interfaces/index.mjs} +0 -0
- /package/{esm2015/lib/desy-tables/interfaces/recalculate-table-params.js → esm2020/lib/desy-tables/interfaces/recalculate-table-params.mjs} +0 -0
- /package/{esm2015/lib/desy-tables/interfaces/row-data.js → esm2020/lib/desy-tables/interfaces/row-data.mjs} +0 -0
- /package/{esm2015/lib/desy-tables/interfaces/wrapper-data.js → esm2020/lib/desy-tables/interfaces/wrapper-data.mjs} +0 -0
- /package/{esm2015/lib/desy-views/interfaces/accordion-header.data.js → esm2020/lib/desy-views/interfaces/accordion-header.data.mjs} +0 -0
- /package/{esm2015/lib/desy-views/interfaces/alert-options.js → esm2020/lib/desy-views/interfaces/alert-options.mjs} +0 -0
- /package/{esm2015/lib/desy-views/interfaces/description-item.data.js → esm2020/lib/desy-views/interfaces/description-item.data.mjs} +0 -0
- /package/{esm2015/lib/desy-views/interfaces/index.js → esm2020/lib/desy-views/interfaces/index.mjs} +0 -0
- /package/{esm2015/lib/desy-views/interfaces/open-alert-result.js → esm2020/lib/desy-views/interfaces/open-alert-result.mjs} +0 -0
- /package/{esm2015/lib/desy-views/interfaces/status-data.js → esm2020/lib/desy-views/interfaces/status-data.mjs} +0 -0
- /package/{esm2015/lib/desy-views/interfaces/status-icon-data.js → esm2020/lib/desy-views/interfaces/status-icon-data.mjs} +0 -0
- /package/{esm2015/lib/desy-views/interfaces/status-item-title-data.js → esm2020/lib/desy-views/interfaces/status-item-title-data.mjs} +0 -0
- /package/{esm2015/lib/desy-views/interfaces/tabs-panel-data.js → esm2020/lib/desy-views/interfaces/tabs-panel-data.mjs} +0 -0
- /package/{esm2015/lib/desy-views/interfaces/term-definition.data.js → esm2020/lib/desy-views/interfaces/term-definition.data.mjs} +0 -0
- /package/{esm2015/lib/shared/components/index.js → esm2020/lib/shared/components/index.mjs} +0 -0
- /package/{esm2015/lib/shared/decorators/desy-content-child.decorator.js → esm2020/lib/shared/decorators/desy-content-child.decorator.mjs} +0 -0
- /package/{esm2015/lib/shared/decorators/desy-on-input-change.decorator.js → esm2020/lib/shared/decorators/desy-on-input-change.decorator.mjs} +0 -0
- /package/{esm2015/lib/shared/interfaces/accesibility-data.js → esm2020/lib/shared/interfaces/accesibility-data.mjs} +0 -0
- /package/{esm2015/lib/shared/utils/focus-utils.js → esm2020/lib/shared/utils/focus-utils.mjs} +0 -0
- /package/{esm2015/lib/shared/utils/search-utils.js → esm2020/lib/shared/utils/search-utils.mjs} +0 -0
- /package/{esm2015/lib/shared/utils/string-utils.js → esm2020/lib/shared/utils/string-utils.mjs} +0 -0
|
@@ -0,0 +1,342 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { Component, ContentChildren, EventEmitter, Input, Output, ViewChildren } from '@angular/core';
|
|
3
|
+
import { AccessibilityComponent } from '../../../shared/components';
|
|
4
|
+
import { SearchUtils } from '../../../shared/utils/search-utils';
|
|
5
|
+
import { OrderBy } from '../../interfaces';
|
|
6
|
+
import { TableCaptionComponent } from '../table/components/table-caption.component';
|
|
7
|
+
import { TableAdvancedHeaderComponent } from './components/table-advanced-header.component';
|
|
8
|
+
import { TableAdvancedRowComponent } from './components/table-advanced-row.component';
|
|
9
|
+
import { RowDirective } from '../../directives/row.directive';
|
|
10
|
+
import { DesyContentChild } from '../../../shared/decorators/desy-content-child.decorator';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "@angular/common";
|
|
13
|
+
import * as i2 from "@angular/forms";
|
|
14
|
+
import * as i3 from "../../../shared/directives/custom-inner-content.directive";
|
|
15
|
+
import * as i4 from "../../../desy-forms/components/select/select.component";
|
|
16
|
+
import * as i5 from "../../../desy-forms/components/search-bar/search-bar.component";
|
|
17
|
+
import * as i6 from "../../directives/focus-clicked-cell.directive";
|
|
18
|
+
import * as i7 from "../../directives/cell.directive";
|
|
19
|
+
import * as i8 from "../../directives/row.directive";
|
|
20
|
+
import * as i9 from "../../../shared/pipes/make-html-list.pipe";
|
|
21
|
+
export class TableAdvancedComponent extends AccessibilityComponent {
|
|
22
|
+
constructor(el, changeDetector) {
|
|
23
|
+
super();
|
|
24
|
+
this.el = el;
|
|
25
|
+
this.changeDetector = changeDetector;
|
|
26
|
+
this.rowsChange = new EventEmitter();
|
|
27
|
+
this.rowsChecked = new EventEmitter();
|
|
28
|
+
this.recalculateTable = new EventEmitter();
|
|
29
|
+
this.orderByType = OrderBy;
|
|
30
|
+
}
|
|
31
|
+
ngAfterViewInit() {
|
|
32
|
+
const elemntsFocus = this.el.nativeElement.querySelector('[tabindex]');
|
|
33
|
+
if (elemntsFocus) {
|
|
34
|
+
elemntsFocus.setAttribute('tabindex', '0');
|
|
35
|
+
}
|
|
36
|
+
this.recalculateVisibleElements();
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Refresca las filas visibles tras realizarse una búsqueda o una ordenación
|
|
40
|
+
*/
|
|
41
|
+
recalculateVisibleElements() {
|
|
42
|
+
const recalculateParams = this.buildRecalculateParams();
|
|
43
|
+
// Si se captura el evento recalculateTable se deja al usuario la responsabilidad de filtrar y ordenar los elementos.
|
|
44
|
+
if (this.recalculateTable.observers.length > 0) {
|
|
45
|
+
this.recalculateTable.emit(recalculateParams);
|
|
46
|
+
this.changeDetector.markForCheck();
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
// Se deben mostrar todas las filas temporalmente para poder aplicar el filtro y la ordenación sobre el contenido insertado
|
|
50
|
+
this.visibleRows = this.getRows();
|
|
51
|
+
this.changeDetector.detectChanges();
|
|
52
|
+
// Se aplica el filtro y la ordenación
|
|
53
|
+
let rowData = this.filterRows(recalculateParams, this.rowData.toArray());
|
|
54
|
+
rowData = this.sortRows(recalculateParams, rowData);
|
|
55
|
+
this.visibleRows = rowData.map(r => r.desyRow);
|
|
56
|
+
this.changeDetector.detectChanges();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Construye los parámetros necesarios para recalcular la tabla, indicando los filtros y la ordenación
|
|
61
|
+
*/
|
|
62
|
+
buildRecalculateParams() {
|
|
63
|
+
const params = {
|
|
64
|
+
filters: [],
|
|
65
|
+
sort: null
|
|
66
|
+
};
|
|
67
|
+
const head = this.getHeaderCells();
|
|
68
|
+
if (head) {
|
|
69
|
+
head.forEach((headerCell, headerCellIndex) => {
|
|
70
|
+
if (headerCell.hasFilter && headerCell.activeFilter) {
|
|
71
|
+
params.filters.push({ columnIndex: headerCellIndex, filterText: headerCell.valueFilter });
|
|
72
|
+
}
|
|
73
|
+
if (headerCell.hasSelect && headerCell.activeSelect) {
|
|
74
|
+
params.filters.push({ columnIndex: headerCellIndex, filterText: headerCell.valueSelect });
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
const orderByColumnIndex = head.findIndex(cell => cell.orderBy && cell.orderBy !== OrderBy.none);
|
|
78
|
+
params.sort = (orderByColumnIndex >= 0) ? { columnIndex: orderByColumnIndex, order: head[orderByColumnIndex].orderBy } : null;
|
|
79
|
+
}
|
|
80
|
+
return params;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* funciones de recoger ids, y caracteristicas
|
|
84
|
+
*/
|
|
85
|
+
hasFilters() {
|
|
86
|
+
const head = this.getHeaderCells();
|
|
87
|
+
return head ? head.findIndex(cell => (cell.hasFilter) || (cell.hasSelect)) >= 0 : false;
|
|
88
|
+
}
|
|
89
|
+
getHeaderCells() {
|
|
90
|
+
return this.headerComponent && this.headerComponent.cells.length > 0 ? this.headerComponent.cells.toArray() : this.head;
|
|
91
|
+
}
|
|
92
|
+
getRows() {
|
|
93
|
+
let rows = [];
|
|
94
|
+
if (this.rowComponentList.length > 0) {
|
|
95
|
+
rows = this.rowComponentList.toArray();
|
|
96
|
+
}
|
|
97
|
+
else if (this.rows) {
|
|
98
|
+
rows = this.rows;
|
|
99
|
+
}
|
|
100
|
+
return rows;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Si se sobreescribe el comportamiento por defecto de filtrado y ordenación, se utilizarán las indicadas desde fuera del
|
|
104
|
+
* componente (ya sea por parámetro o por contenido).
|
|
105
|
+
* Si no se sobreescribe, devuelve las filas calculadas.
|
|
106
|
+
*/
|
|
107
|
+
getVisibleRows() {
|
|
108
|
+
return this.recalculateTable.observers.length > 0 ? this.getRows() : this.visibleRows;
|
|
109
|
+
}
|
|
110
|
+
getIdPrefix() {
|
|
111
|
+
return this.idPrefix ? this.idPrefix : 'id-table-row';
|
|
112
|
+
}
|
|
113
|
+
getIdHeader(index) {
|
|
114
|
+
return this.getIdPrefix() + '-header-' + index;
|
|
115
|
+
}
|
|
116
|
+
getIdRowCheckbox(index) {
|
|
117
|
+
return this.getIdPrefix() + '-checkbox-' + index;
|
|
118
|
+
}
|
|
119
|
+
getIdHeaderFilter(index) {
|
|
120
|
+
return this.getIdPrefix() + '-header-filter-' + index;
|
|
121
|
+
}
|
|
122
|
+
getIdHeaderSelect(index) {
|
|
123
|
+
return this.getIdPrefix() + '-header-select-' + index;
|
|
124
|
+
}
|
|
125
|
+
getCaptionClass() {
|
|
126
|
+
return this.captionComponent ? this.captionComponent.classes : this.captionClasses;
|
|
127
|
+
}
|
|
128
|
+
getStringOrderBy(orderBy) {
|
|
129
|
+
if (orderBy === OrderBy.asc) {
|
|
130
|
+
return 'ascending';
|
|
131
|
+
}
|
|
132
|
+
else if (orderBy === OrderBy.desc) {
|
|
133
|
+
return 'descending';
|
|
134
|
+
}
|
|
135
|
+
else if (orderBy === OrderBy.none) {
|
|
136
|
+
return 'none';
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
getSelectForItem(item) {
|
|
140
|
+
return item.selectComponent ? item.selectComponent : null;
|
|
141
|
+
}
|
|
142
|
+
getItemSelectOptions(item) {
|
|
143
|
+
return item.selectItemComponentList && item.selectItemComponentList.length > 0 ?
|
|
144
|
+
item.selectItemComponentList.toArray() : item.items;
|
|
145
|
+
}
|
|
146
|
+
getContentComponent(item) {
|
|
147
|
+
return item.contentComponent ? item.contentComponent : null;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* checks
|
|
151
|
+
*/
|
|
152
|
+
handleCheckboxChange(row) {
|
|
153
|
+
if (row instanceof TableAdvancedRowComponent) {
|
|
154
|
+
row.checkedChange.emit(row.checked);
|
|
155
|
+
}
|
|
156
|
+
this.notifyCheckedChange();
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Permite desmarcar todas las filas
|
|
160
|
+
*/
|
|
161
|
+
uncheckAll() {
|
|
162
|
+
this.getRows().forEach(r => {
|
|
163
|
+
const mustEmit = r.checked && r instanceof TableAdvancedRowComponent;
|
|
164
|
+
r.checked = false;
|
|
165
|
+
if (mustEmit) {
|
|
166
|
+
r.checkedChange.emit(r.checked);
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
this.notifyCheckedChange();
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Notifica cambios en las filas
|
|
173
|
+
*/
|
|
174
|
+
notifyCheckedChange() {
|
|
175
|
+
if (this.rowComponentList.length === 0) {
|
|
176
|
+
this.rowsChange.emit(this.rows);
|
|
177
|
+
}
|
|
178
|
+
const rowChecks = {};
|
|
179
|
+
this.getRows().forEach(r => rowChecks[r.id] = !!r.checked); // Se aplican también a las no visibles
|
|
180
|
+
this.rowsChecked.emit(rowChecks);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* busqueda
|
|
184
|
+
*/
|
|
185
|
+
handleInputSearch(item) {
|
|
186
|
+
if (item.hasFilter) { // si tiene buscador
|
|
187
|
+
item.activeFilter = !!item.valueFilter;
|
|
188
|
+
this.uncheckAll();
|
|
189
|
+
}
|
|
190
|
+
if (item.hasSelect) { //Si tiene seleccionable
|
|
191
|
+
item.activeSelect = !!item.valueSelect;
|
|
192
|
+
this.uncheckAll();
|
|
193
|
+
}
|
|
194
|
+
this.recalculateVisibleElements();
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Se filtran las filas según lo especificado en la barra de búsqueda de cada columna.
|
|
198
|
+
* Si no hay búsqueda sse devuelven todas las filas.
|
|
199
|
+
* @param recalculateParams parametros para recalcular los elementos visibles
|
|
200
|
+
* @param rows lista con todas las filas
|
|
201
|
+
* @return lista de filas filtrada
|
|
202
|
+
*/
|
|
203
|
+
filterRows(recalculateParams, rows) {
|
|
204
|
+
let filteredRows = rows;
|
|
205
|
+
recalculateParams.filters.forEach(filter => {
|
|
206
|
+
filteredRows = filteredRows.filter(row => SearchUtils.containsAnyWordFrom(row.getCell(filter.columnIndex).getContent(), filter.filterText));
|
|
207
|
+
});
|
|
208
|
+
return filteredRows;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* ordenacion
|
|
212
|
+
*/
|
|
213
|
+
/**
|
|
214
|
+
* Permite indicar que se debe ordenar la tabla
|
|
215
|
+
* @param index indice de la columna
|
|
216
|
+
*/
|
|
217
|
+
handleSortByColumn(index) {
|
|
218
|
+
const head = this.getHeaderCells();
|
|
219
|
+
if (head) {
|
|
220
|
+
head.forEach((cell, cellIndex) => {
|
|
221
|
+
if (cell.orderBy) {
|
|
222
|
+
cell.orderBy = cellIndex === index ? this.getNextDirection(cell) : OrderBy.none;
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
this.recalculateVisibleElements();
|
|
227
|
+
}
|
|
228
|
+
/**
|
|
229
|
+
* Ordena las filas indicadas según la columna especificada en la cabecera
|
|
230
|
+
* @param recalculateParams parametros para recalcular los elementos visibles
|
|
231
|
+
* @param rows filas de la tabla a ordenar
|
|
232
|
+
* @return mismas filas pero ordenadas por la columna indicada
|
|
233
|
+
*/
|
|
234
|
+
sortRows(recalculateParams, rows) {
|
|
235
|
+
let sortedRows = rows;
|
|
236
|
+
if (recalculateParams.sort) {
|
|
237
|
+
const columnIndex = recalculateParams.sort.columnIndex;
|
|
238
|
+
const isAsc = recalculateParams.sort.order === OrderBy.asc;
|
|
239
|
+
sortedRows = rows.sort((a, b) => this.compareCellContent(a.getCell(columnIndex), b.getCell(columnIndex), isAsc));
|
|
240
|
+
}
|
|
241
|
+
return sortedRows;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Compara el contenido de dos celdas. Este se invierte si el orden especificado es descendente.
|
|
245
|
+
*/
|
|
246
|
+
compareCellContent(a, b, isAsc) {
|
|
247
|
+
let result;
|
|
248
|
+
const aComparable = this.cleanCurrency(a.getContent());
|
|
249
|
+
const bComparable = this.cleanCurrency(b.getContent());
|
|
250
|
+
if (isNaN(+aComparable) && isNaN(+bComparable)) { // son textos
|
|
251
|
+
result = aComparable.localeCompare(bComparable, 'es', { sensitivity: 'base', ignorePunctuation: true });
|
|
252
|
+
}
|
|
253
|
+
else { // son numeros
|
|
254
|
+
result = aComparable.localeCompare(bComparable, undefined, { numeric: true });
|
|
255
|
+
}
|
|
256
|
+
return result * (isAsc ? 1 : -1);
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* se calcula la ordenación nueva
|
|
260
|
+
*/
|
|
261
|
+
getNextDirection(item) {
|
|
262
|
+
if (item.orderBy === OrderBy.none || item.orderBy === OrderBy.desc) {
|
|
263
|
+
return OrderBy.asc;
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
return OrderBy.desc;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* si es una cantidad de dinero se quita € para poder comparar los numeros
|
|
271
|
+
*/
|
|
272
|
+
cleanCurrency(txt) {
|
|
273
|
+
if (/[\d.,]+[\€]/g.test(txt)) {
|
|
274
|
+
txt = txt.replace(/€/g, '');
|
|
275
|
+
}
|
|
276
|
+
return txt;
|
|
277
|
+
}
|
|
278
|
+
selectFilter(item, itemValue) {
|
|
279
|
+
item.valueChange.emit(itemValue);
|
|
280
|
+
const head = this.getHeaderCells();
|
|
281
|
+
const rows = this.getRows();
|
|
282
|
+
if (head && rows) {
|
|
283
|
+
head.forEach((cell, cellIndex) => {
|
|
284
|
+
});
|
|
285
|
+
rows.forEach(row => {
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
TableAdvancedComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TableAdvancedComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
291
|
+
TableAdvancedComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.7", type: TableAdvancedComponent, selector: "desy-table-advanced", inputs: { rows: "rows", head: "head", caption: "caption", captionClasses: "captionClasses", firstCellIsHeader: "firstCellIsHeader", hasCheckboxes: "hasCheckboxes", idPrefix: "idPrefix", classes: "classes", checkboxClasses: "checkboxClasses", id: "id", wrapper: "wrapper" }, outputs: { rowsChange: "rowsChange", rowsChecked: "rowsChecked", recalculateTable: "recalculateTable" }, queries: [{ propertyName: "captionComponent", predicate: TableCaptionComponent }, { propertyName: "headerComponent", predicate: TableAdvancedHeaderComponent }, { propertyName: "rowComponentList", predicate: TableAdvancedRowComponent }], viewQueries: [{ propertyName: "rowData", predicate: RowDirective, descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-template #tableContent>\n <table role=\"grid\"\n [class]=\"['c-table-advanced border-t-2 border-b-2 border-neutral-base', classes] | makeHtmlList\"\n [attr.id]=\"id ? id : null\"\n [attr.role]=\"role ? role : null\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby]=\"ariaDescribedBy ? ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"ariaLabelledBy ? ariaLabelledBy : null\"\n [attr.aria-hidden]=\"ariaHidden ? ariaHidden : null\"\n [attr.aria-disabled]=\"ariaDisabled ? ariaDisabled : null\"\n [attr.aria-controls]=\"ariaControls ? ariaControls : null\"\n [attr.aria-current]=\"ariaCurrent ? ariaCurrent : null\"\n [attr.aria-live]=\"ariaLive ? ariaLive : null\"\n [attr.aria-expanded]=\"ariaExpanded ? ariaExpanded : null\"\n [attr.aria-errormessage]=\"ariaErrorMessage ? ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"ariaHasPopup ? ariaHasPopup : null\"\n [attr.tabindex]=\"tabindex ? tabindex : null\">\n <caption *ngIf=\"caption || captionComponent\" [class]=\"getCaptionClass()\">\n <ng-container *desyCustomInnerContent=\"{ component: captionComponent, text: caption ? caption : null }\"></ng-container>\n </caption>\n <thead *ngIf=\"getHeaderCells()\">\n <tr class=\"border-t border-neutral-base divide-x divide-neutral-base\">\n <th *ngIf=\"hasCheckboxes\" scope=\"col\" [class]=\"['align-top px-base py-xs', checkboxClasses] | makeHtmlList\">\n <span class=\"sr-only\">Seleccionar fila</span>\n </th>\n <th scope=\"col\" *ngFor=\"let item of getHeaderCells(); index as iHeader\" [id]=\"getIdHeader(iHeader)\"\n [attr.aria-sort]=\"item.orderBy ? getStringOrderBy(item.orderBy) : null\"\n [class]=\"['align-top px-base py-sm border-neutral-base border-b-0 text-left text-sm font-normal text-neutral-dark', item.classes] | makeHtmlList\"\n [attr.colspan]=\"item.colspan ? item.colspan : null\"\n [attr.rowspan]=\"item.rowspan ? item.rowspan : null\"\n [attr.role]=\"item.role ? item.role : null\"\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : null\"\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"item.ariaLabelledBy ? item.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"item.ariaHidden ? item.ariaHidden : null\"\n [attr.aria-disabled]=\"item.ariaDisabled ? item.ariaDisabled : null\"\n [attr.aria-controls]=\"item.ariaControls ? item.ariaControls : null\"\n [attr.aria-current]=\"item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.aria-live]=\"item.ariaLive ? item.ariaLive : null\"\n [attr.aria-expanded]=\"item.ariaExpanded ? item.ariaExpanded : null\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage ? item.ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"item.ariaHasPopup ? item.ariaHasPopup : null\"\n [attr.tabindex]=\"item.tabindex ? item.tabindex : null\">\n\n <span *ngIf=\"item.orderBy\" class=\"inline-block relative\" (click)=\"handleSortByColumn(iHeader)\" desyFocusClickedCell\n [attr.tabindex]=\"item.orderBy ? -1 : null\"\n [attr.role]=\"item.orderBy ? 'button' : null\">\n <ng-container *ngIf=\"item.text\">{{item.text}}</ng-container>\n <ng-container *ngIf=\"item.contentComponent\">\n <ng-container *desyCustomInnerContent=\"{ component: item.contentComponent }\"></ng-container>\n </ng-container>\n <span class=\"c-table-advanced__order\" *ngIf=\"item.orderBy\">\n <span class=\"sr-only\">Pulsa para ordenar por esta columna</span>\n <span class=\"c-table-advanced__ascending\" *ngIf=\"item.orderBy === orderByType.asc\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" aria-hidden=\"true\" width=\"1em\" height=\"1em\"><path d=\"M112.07 37.93l-35-35a10 10 0 00-14.14 0l-35 35a10 10 0 0014.14 14.14l13.66-13.66A2.5 2.5 0 0160 40.18V130a10 10 0 0020 0V40.18a2.5 2.5 0 014.27-1.77l13.66 13.66a10 10 0 0014.14-14.14z\" fill=\"currentColor\"/></svg>\n </span>\n <span class=\"c-table-advanced__descending\" *ngIf=\"item.orderBy === orderByType.desc\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" aria-hidden=\"true\" width=\"1em\" height=\"1em\"><path d=\"M27.93 102.07l35 35a10 10 0 0014.14 0l35-35a10 10 0 00-14.14-14.14l-13.66 13.66A2.5 2.5 0 0180 99.82V10a10 10 0 00-20 0v89.82a2.5 2.5 0 01-4.27 1.77L42.07 87.93a10 10 0 00-14.14 14.14z\" fill=\"currentColor\"/></svg>\n </span>\n <span class=\"c-table-advanced__none\" *ngIf=\"item.orderBy === orderByType.none\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" class=\"text-neutral-base\" aria-hidden=\"true\" width=\"1em\" height=\"1em\"><path d=\"M94.7 97.2l-17.2 17.19V25.61L94.7 42.8a7.5 7.5 0 0010.6-10.6l-30-30a7.49 7.49 0 00-10.6 0l-30 30a7.5 7.5 0 0010.6 10.6l17.2-17.19v88.78L45.3 97.2a7.5 7.5 0 10-10.6 10.6l30 30a7.48 7.48 0 0010.6 0l30-30a7.5 7.5 0 00-10.6-10.6z\" fill=\"currentColor\"/></svg>\n </span>\n </span>\n </span>\n\n <span *ngIf=\"!item.orderBy\" class=\"inline-block relative\">\n <ng-container *ngIf=\"item.text\">{{item.text}}</ng-container>\n <ng-container *ngIf=\"item.contentComponent\">\n <ng-container *desyCustomInnerContent=\"{ component: item.contentComponent }\"></ng-container>\n </ng-container>\n </span>\n </th>\n </tr>\n </thead>\n\n <tbody>\n <tr class=\"divide-x divide-neutral-base\" *ngIf=\"hasFilters()\">\n <td *ngIf=\"hasCheckboxes\" [ngClass]=\"checkboxClasses\"></td>\n <td tabindex=\"-1\" *ngFor=\"let item of getHeaderCells(); index as iHead\" desyFocusClickedCell\n [class]=\"['align-top px-base pb-sm border-neutral-base border-b-0 text-left text-sm font-normal text-neutral-dark', item.classes] | makeHtmlList\">\n <ng-container *ngIf=\"item.hasSelect && getSelectForItem(item) !== null\">\n <ng-container *ngTemplateOutlet=\"tableSelect; context: {selectable: getSelectForItem(item)}\"></ng-container>\n <ng-template #tableSelect let-selectable=\"selectable\">\n <desy-select [id]=\"getIdHeaderSelect(iHead)\"\n [labelData]=\"{ text: 'Filtrar en esta columna', classes: 'sr-only' }\"\n [classes]=\"selectable.classes ? selectable.classes : 'c-select--sm w-full mt-0'\"\n [formGroupClasses]=\"selectable.formGroupClasses ? selectable.formGroupClasses : 'mb-0'\"\n [name]=\"selectable.name\"\n [items]=\"getItemSelectOptions(selectable)\"\n [disabled]=\"selectable.disabled\"\n [describedBy]=\"getIdHeaderSelect(iHead)\"\n\n [(ngModel)]=\"item.valueSelect\" (ngModelChange)=\"handleInputSearch(item)\"\n\n [role]=\"selectable.role\"\n [ariaLabel]=\"selectable.ariaLabel\"\n [ariaDescribedBy]=\"selectable.ariaDescribedBy\"\n [ariaLabelledBy]=\"selectable.ariaLabelledBy\"\n [ariaHidden]=\"selectable.ariaHidden\"\n [ariaDisabled]=\"selectable.ariaDisabled\"\n [ariaControls]=\"selectable.ariaControls\"\n [ariaCurrent]=\"selectable.ariaCurrent\"\n [ariaLive]=\"selectable.ariaLive\"\n [ariaExpanded]=\"selectable.ariaExpanded\"\n [ariaErrorMessage]=\"selectable.ariaErrorMessage\"\n [ariaHasPopup]=\"selectable.ariaHasPopup\"\n [tabindex]=\"selectable.tabindex\">\n </desy-select>\n </ng-template>\n </ng-container>\n\n <div *ngIf=\"item.hasSelect && item.hasFilter\" class=\"pb-sm\"></div>\n\n <desy-search-bar *ngIf=\"item.hasFilter\"\n [(ngModel)]=\"item.valueFilter\" [ngModelOptions]=\"{standalone: true}\"\n (clickEvent)=\"handleInputSearch(item)\"\n (ngModelChange)=\"handleInputSearch(item)\"\n labelText=\"Buscar en esta columna\"\n [id]=\"getIdHeaderFilter(iHead)\"\n placeholder=\"Buscar\"\n [classes]=\"['c-input--sm', item.filterClasses] | makeHtmlList\"\n buttonClasses=\"m-xs p-0.5 text-xs\"\n [describedBy]=\"getIdHeader(iHead)\"> </desy-search-bar>\n </td>\n </tr>\n\n\n <tr *ngFor=\"let row of getVisibleRows(); index as iRow\" class=\"border-t border-b border-neutral-base hover:bg-neutral-lighter\"\n [desyRow]=\"row\"\n [ngClass]=\"{'bg-neutral-light': hasCheckboxes && row.checked }\">\n <td *ngIf=\"hasCheckboxes\" desyFocusClickedCell [class]=\"['px-base py-sm', checkboxClasses] | makeHtmlList\"\n tabindex=\"-1\" >\n <div class=\"c-checkboxes c-checkboxes--sm\">\n <div>\n <div class=\"relative flex items-start\">\n <div class=\"flex items-center mx-sm\">\n <input type=\"checkbox\" class=\"w-6 h-6 transition duration-150 ease-in-out border-black focus:border-black focus:shadow-outline-focus-input focus:ring-4 focus:ring-offset-0 focus:ring-warning-base disabled:bg-neutral-light disabled:border-neutral-base text-primary-base\"\n [(ngModel)]=\"row.checked\" (ngModelChange)=\"handleCheckboxChange(row)\"\n [id]=\"getIdRowCheckbox(iRow)\"\n [name]=\"getIdRowCheckbox(iRow)\"\n [attr.aria-label]=\"'Fila ' + iRow\">\n </div>\n <div class=\"pt-0.5 leading-5\">\n <label class=\"sr-only block text-sm -mt-1\" [for]=\"getIdRowCheckbox(iRow)\">Selecciona fila {{ iRow }}</label>\n </div>\n </div>\n </div>\n </div>\n </td>\n <ng-container *ngFor=\"let cell of row.cellsList; first as isFirstCell; index as columnIndex\">\n <th *ngIf=\"firstCellIsHeader && isFirstCell; else elseTd\" scope=\"row\"\n [class]=\"['px-base py-xs border-neutral-base border-b-0 border-r text-left font-normal text-sm text-neutral-dark', cell.classes] | makeHtmlList\"\n desyCell [row]=\"row\" [rowIndex]=\"iRow\" [columnIndex]=\"columnIndex\"\n [attr.colspan]=\"cell.colspan ? cell.colspan : null\"\n [attr.rowspan]=\"cell.rowspan ? cell.rowspan : null\"\n [attr.id]=\"cell.id ? cell.id : null\"\n [attr.role]=\"cell.role ? cell.role : null\"\n [attr.aria-label]=\"cell.ariaLabel ? cell.ariaLabel : null\"\n [attr.aria-describedby]=\"cell.ariaDescribedBy ? cell.ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"cell.ariaLabelledBy ? cell.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"cell.ariaHidden ? cell.ariaHidden : null\"\n [attr.aria-disabled]=\"cell.ariaDisabled ? cell.ariaDisabled : null\"\n [attr.aria-controls]=\"cell.ariaControls ? cell.ariaControls : null\"\n [attr.aria-current]=\"cell.ariaCurrent ? cell.ariaCurrent : null\"\n [attr.aria-live]=\"cell.ariaLive ? cell.ariaLive : null\"\n [attr.aria-expanded]=\"cell.ariaExpanded ? cell.ariaExpanded : null\"\n [attr.aria-errormessage]=\"cell.ariaErrorMessage ? cell.ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"cell.ariaHasPopup ? cell.ariaHasPopup : null\"\n [attr.tabindex]=\"cell.tabindex ? cell.tabindex : null\">\n <ng-container *desyCustomInnerContent=\"{ component: cell, html: cell.html, text: cell.text }\"></ng-container>\n </th>\n <ng-template #elseTd>\n <td tabindex=\"-1\" desyFocusClickedCell\n [class]=\"['px-base py-sm', cell.classes] | makeHtmlList\"\n desyCell [row]=\"row\" [rowIndex]=\"iRow\" [columnIndex]=\"columnIndex\"\n [attr.colspan]=\"cell.colspan ? cell.colspan : null\"\n [attr.rowspan]=\"cell.rowspan ? cell.rowspan : null\"\n [attr.id]=\"cell.id ? cell.id : null\"\n [attr.role]=\"cell.role ? cell.role : null\"\n [attr.aria-label]=\"cell.ariaLabel ? cell.ariaLabel : null\"\n [attr.aria-describedby]=\"cell.ariaDescribedBy ? cell.ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"cell.ariaLabelledBy ? cell.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"cell.ariaHidden ? cell.ariaHidden : null\"\n [attr.aria-disabled]=\"cell.ariaDisabled ? cell.ariaDisabled : null\"\n [attr.aria-controls]=\"cell.ariaControls ? cell.ariaControls : null\"\n [attr.aria-current]=\"cell.ariaCurrent ? cell.ariaCurrent : null\"\n [attr.aria-live]=\"cell.ariaLive ? cell.ariaLive : null\"\n [attr.aria-expanded]=\"cell.ariaExpanded ? cell.ariaExpanded : null\"\n [attr.aria-errormessage]=\"cell.ariaErrorMessage ? cell.ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"cell.ariaHasPopup ? cell.ariaHasPopup : null\"\n [attr.tabindex]=\"cell.tabindex ? cell.tabindex : -1\">\n <ng-container *desyCustomInnerContent=\"{ component: cell, html: cell.html, text: cell.text }\"></ng-container>\n </td>\n </ng-template>\n </ng-container>\n </tr>\n </tbody>\n </table>\n</ng-template>\n\n<div *ngIf=\"wrapper; else tableContent\" [class]=\"wrapper.classes\">\n <ng-container *ngTemplateOutlet=\"tableContent\"></ng-container>\n</div>\n", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.CustomInnerContentDirective, selector: "[desyCustomInnerContent]", inputs: ["desyCustomInnerContent"] }, { kind: "component", type: i4.SelectComponent, selector: "desy-select", inputs: ["name", "items", "describedBy", "formGroupClasses", "classes"] }, { kind: "component", type: i5.SearchBarComponent, selector: "desy-search-bar", inputs: ["describedBy", "classes", "buttonClasses", "placeholder"], outputs: ["clickEvent"] }, { kind: "directive", type: i6.FocusClickedCellDirective, selector: "[desyFocusClickedCell]" }, { kind: "directive", type: i7.CellDirective, selector: "[desyCell]", inputs: ["row", "rowIndex", "columnIndex"] }, { kind: "directive", type: i8.RowDirective, selector: "[desyRow]", inputs: ["desyRow"] }, { kind: "pipe", type: i9.MakeHtmlListPipe, name: "makeHtmlList" }] });
|
|
292
|
+
__decorate([
|
|
293
|
+
DesyContentChild()
|
|
294
|
+
], TableAdvancedComponent.prototype, "captionComponent", void 0);
|
|
295
|
+
__decorate([
|
|
296
|
+
DesyContentChild()
|
|
297
|
+
], TableAdvancedComponent.prototype, "headerComponent", void 0);
|
|
298
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImport: i0, type: TableAdvancedComponent, decorators: [{
|
|
299
|
+
type: Component,
|
|
300
|
+
args: [{ selector: 'desy-table-advanced', template: "<ng-template #tableContent>\n <table role=\"grid\"\n [class]=\"['c-table-advanced border-t-2 border-b-2 border-neutral-base', classes] | makeHtmlList\"\n [attr.id]=\"id ? id : null\"\n [attr.role]=\"role ? role : null\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\"\n [attr.aria-describedby]=\"ariaDescribedBy ? ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"ariaLabelledBy ? ariaLabelledBy : null\"\n [attr.aria-hidden]=\"ariaHidden ? ariaHidden : null\"\n [attr.aria-disabled]=\"ariaDisabled ? ariaDisabled : null\"\n [attr.aria-controls]=\"ariaControls ? ariaControls : null\"\n [attr.aria-current]=\"ariaCurrent ? ariaCurrent : null\"\n [attr.aria-live]=\"ariaLive ? ariaLive : null\"\n [attr.aria-expanded]=\"ariaExpanded ? ariaExpanded : null\"\n [attr.aria-errormessage]=\"ariaErrorMessage ? ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"ariaHasPopup ? ariaHasPopup : null\"\n [attr.tabindex]=\"tabindex ? tabindex : null\">\n <caption *ngIf=\"caption || captionComponent\" [class]=\"getCaptionClass()\">\n <ng-container *desyCustomInnerContent=\"{ component: captionComponent, text: caption ? caption : null }\"></ng-container>\n </caption>\n <thead *ngIf=\"getHeaderCells()\">\n <tr class=\"border-t border-neutral-base divide-x divide-neutral-base\">\n <th *ngIf=\"hasCheckboxes\" scope=\"col\" [class]=\"['align-top px-base py-xs', checkboxClasses] | makeHtmlList\">\n <span class=\"sr-only\">Seleccionar fila</span>\n </th>\n <th scope=\"col\" *ngFor=\"let item of getHeaderCells(); index as iHeader\" [id]=\"getIdHeader(iHeader)\"\n [attr.aria-sort]=\"item.orderBy ? getStringOrderBy(item.orderBy) : null\"\n [class]=\"['align-top px-base py-sm border-neutral-base border-b-0 text-left text-sm font-normal text-neutral-dark', item.classes] | makeHtmlList\"\n [attr.colspan]=\"item.colspan ? item.colspan : null\"\n [attr.rowspan]=\"item.rowspan ? item.rowspan : null\"\n [attr.role]=\"item.role ? item.role : null\"\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : null\"\n [attr.aria-describedby]=\"item.ariaDescribedBy ? item.ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"item.ariaLabelledBy ? item.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"item.ariaHidden ? item.ariaHidden : null\"\n [attr.aria-disabled]=\"item.ariaDisabled ? item.ariaDisabled : null\"\n [attr.aria-controls]=\"item.ariaControls ? item.ariaControls : null\"\n [attr.aria-current]=\"item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.aria-live]=\"item.ariaLive ? item.ariaLive : null\"\n [attr.aria-expanded]=\"item.ariaExpanded ? item.ariaExpanded : null\"\n [attr.aria-errormessage]=\"item.ariaErrorMessage ? item.ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"item.ariaHasPopup ? item.ariaHasPopup : null\"\n [attr.tabindex]=\"item.tabindex ? item.tabindex : null\">\n\n <span *ngIf=\"item.orderBy\" class=\"inline-block relative\" (click)=\"handleSortByColumn(iHeader)\" desyFocusClickedCell\n [attr.tabindex]=\"item.orderBy ? -1 : null\"\n [attr.role]=\"item.orderBy ? 'button' : null\">\n <ng-container *ngIf=\"item.text\">{{item.text}}</ng-container>\n <ng-container *ngIf=\"item.contentComponent\">\n <ng-container *desyCustomInnerContent=\"{ component: item.contentComponent }\"></ng-container>\n </ng-container>\n <span class=\"c-table-advanced__order\" *ngIf=\"item.orderBy\">\n <span class=\"sr-only\">Pulsa para ordenar por esta columna</span>\n <span class=\"c-table-advanced__ascending\" *ngIf=\"item.orderBy === orderByType.asc\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" aria-hidden=\"true\" width=\"1em\" height=\"1em\"><path d=\"M112.07 37.93l-35-35a10 10 0 00-14.14 0l-35 35a10 10 0 0014.14 14.14l13.66-13.66A2.5 2.5 0 0160 40.18V130a10 10 0 0020 0V40.18a2.5 2.5 0 014.27-1.77l13.66 13.66a10 10 0 0014.14-14.14z\" fill=\"currentColor\"/></svg>\n </span>\n <span class=\"c-table-advanced__descending\" *ngIf=\"item.orderBy === orderByType.desc\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" aria-hidden=\"true\" width=\"1em\" height=\"1em\"><path d=\"M27.93 102.07l35 35a10 10 0 0014.14 0l35-35a10 10 0 00-14.14-14.14l-13.66 13.66A2.5 2.5 0 0180 99.82V10a10 10 0 00-20 0v89.82a2.5 2.5 0 01-4.27 1.77L42.07 87.93a10 10 0 00-14.14 14.14z\" fill=\"currentColor\"/></svg>\n </span>\n <span class=\"c-table-advanced__none\" *ngIf=\"item.orderBy === orderByType.none\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 140 140\" class=\"text-neutral-base\" aria-hidden=\"true\" width=\"1em\" height=\"1em\"><path d=\"M94.7 97.2l-17.2 17.19V25.61L94.7 42.8a7.5 7.5 0 0010.6-10.6l-30-30a7.49 7.49 0 00-10.6 0l-30 30a7.5 7.5 0 0010.6 10.6l17.2-17.19v88.78L45.3 97.2a7.5 7.5 0 10-10.6 10.6l30 30a7.48 7.48 0 0010.6 0l30-30a7.5 7.5 0 00-10.6-10.6z\" fill=\"currentColor\"/></svg>\n </span>\n </span>\n </span>\n\n <span *ngIf=\"!item.orderBy\" class=\"inline-block relative\">\n <ng-container *ngIf=\"item.text\">{{item.text}}</ng-container>\n <ng-container *ngIf=\"item.contentComponent\">\n <ng-container *desyCustomInnerContent=\"{ component: item.contentComponent }\"></ng-container>\n </ng-container>\n </span>\n </th>\n </tr>\n </thead>\n\n <tbody>\n <tr class=\"divide-x divide-neutral-base\" *ngIf=\"hasFilters()\">\n <td *ngIf=\"hasCheckboxes\" [ngClass]=\"checkboxClasses\"></td>\n <td tabindex=\"-1\" *ngFor=\"let item of getHeaderCells(); index as iHead\" desyFocusClickedCell\n [class]=\"['align-top px-base pb-sm border-neutral-base border-b-0 text-left text-sm font-normal text-neutral-dark', item.classes] | makeHtmlList\">\n <ng-container *ngIf=\"item.hasSelect && getSelectForItem(item) !== null\">\n <ng-container *ngTemplateOutlet=\"tableSelect; context: {selectable: getSelectForItem(item)}\"></ng-container>\n <ng-template #tableSelect let-selectable=\"selectable\">\n <desy-select [id]=\"getIdHeaderSelect(iHead)\"\n [labelData]=\"{ text: 'Filtrar en esta columna', classes: 'sr-only' }\"\n [classes]=\"selectable.classes ? selectable.classes : 'c-select--sm w-full mt-0'\"\n [formGroupClasses]=\"selectable.formGroupClasses ? selectable.formGroupClasses : 'mb-0'\"\n [name]=\"selectable.name\"\n [items]=\"getItemSelectOptions(selectable)\"\n [disabled]=\"selectable.disabled\"\n [describedBy]=\"getIdHeaderSelect(iHead)\"\n\n [(ngModel)]=\"item.valueSelect\" (ngModelChange)=\"handleInputSearch(item)\"\n\n [role]=\"selectable.role\"\n [ariaLabel]=\"selectable.ariaLabel\"\n [ariaDescribedBy]=\"selectable.ariaDescribedBy\"\n [ariaLabelledBy]=\"selectable.ariaLabelledBy\"\n [ariaHidden]=\"selectable.ariaHidden\"\n [ariaDisabled]=\"selectable.ariaDisabled\"\n [ariaControls]=\"selectable.ariaControls\"\n [ariaCurrent]=\"selectable.ariaCurrent\"\n [ariaLive]=\"selectable.ariaLive\"\n [ariaExpanded]=\"selectable.ariaExpanded\"\n [ariaErrorMessage]=\"selectable.ariaErrorMessage\"\n [ariaHasPopup]=\"selectable.ariaHasPopup\"\n [tabindex]=\"selectable.tabindex\">\n </desy-select>\n </ng-template>\n </ng-container>\n\n <div *ngIf=\"item.hasSelect && item.hasFilter\" class=\"pb-sm\"></div>\n\n <desy-search-bar *ngIf=\"item.hasFilter\"\n [(ngModel)]=\"item.valueFilter\" [ngModelOptions]=\"{standalone: true}\"\n (clickEvent)=\"handleInputSearch(item)\"\n (ngModelChange)=\"handleInputSearch(item)\"\n labelText=\"Buscar en esta columna\"\n [id]=\"getIdHeaderFilter(iHead)\"\n placeholder=\"Buscar\"\n [classes]=\"['c-input--sm', item.filterClasses] | makeHtmlList\"\n buttonClasses=\"m-xs p-0.5 text-xs\"\n [describedBy]=\"getIdHeader(iHead)\"> </desy-search-bar>\n </td>\n </tr>\n\n\n <tr *ngFor=\"let row of getVisibleRows(); index as iRow\" class=\"border-t border-b border-neutral-base hover:bg-neutral-lighter\"\n [desyRow]=\"row\"\n [ngClass]=\"{'bg-neutral-light': hasCheckboxes && row.checked }\">\n <td *ngIf=\"hasCheckboxes\" desyFocusClickedCell [class]=\"['px-base py-sm', checkboxClasses] | makeHtmlList\"\n tabindex=\"-1\" >\n <div class=\"c-checkboxes c-checkboxes--sm\">\n <div>\n <div class=\"relative flex items-start\">\n <div class=\"flex items-center mx-sm\">\n <input type=\"checkbox\" class=\"w-6 h-6 transition duration-150 ease-in-out border-black focus:border-black focus:shadow-outline-focus-input focus:ring-4 focus:ring-offset-0 focus:ring-warning-base disabled:bg-neutral-light disabled:border-neutral-base text-primary-base\"\n [(ngModel)]=\"row.checked\" (ngModelChange)=\"handleCheckboxChange(row)\"\n [id]=\"getIdRowCheckbox(iRow)\"\n [name]=\"getIdRowCheckbox(iRow)\"\n [attr.aria-label]=\"'Fila ' + iRow\">\n </div>\n <div class=\"pt-0.5 leading-5\">\n <label class=\"sr-only block text-sm -mt-1\" [for]=\"getIdRowCheckbox(iRow)\">Selecciona fila {{ iRow }}</label>\n </div>\n </div>\n </div>\n </div>\n </td>\n <ng-container *ngFor=\"let cell of row.cellsList; first as isFirstCell; index as columnIndex\">\n <th *ngIf=\"firstCellIsHeader && isFirstCell; else elseTd\" scope=\"row\"\n [class]=\"['px-base py-xs border-neutral-base border-b-0 border-r text-left font-normal text-sm text-neutral-dark', cell.classes] | makeHtmlList\"\n desyCell [row]=\"row\" [rowIndex]=\"iRow\" [columnIndex]=\"columnIndex\"\n [attr.colspan]=\"cell.colspan ? cell.colspan : null\"\n [attr.rowspan]=\"cell.rowspan ? cell.rowspan : null\"\n [attr.id]=\"cell.id ? cell.id : null\"\n [attr.role]=\"cell.role ? cell.role : null\"\n [attr.aria-label]=\"cell.ariaLabel ? cell.ariaLabel : null\"\n [attr.aria-describedby]=\"cell.ariaDescribedBy ? cell.ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"cell.ariaLabelledBy ? cell.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"cell.ariaHidden ? cell.ariaHidden : null\"\n [attr.aria-disabled]=\"cell.ariaDisabled ? cell.ariaDisabled : null\"\n [attr.aria-controls]=\"cell.ariaControls ? cell.ariaControls : null\"\n [attr.aria-current]=\"cell.ariaCurrent ? cell.ariaCurrent : null\"\n [attr.aria-live]=\"cell.ariaLive ? cell.ariaLive : null\"\n [attr.aria-expanded]=\"cell.ariaExpanded ? cell.ariaExpanded : null\"\n [attr.aria-errormessage]=\"cell.ariaErrorMessage ? cell.ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"cell.ariaHasPopup ? cell.ariaHasPopup : null\"\n [attr.tabindex]=\"cell.tabindex ? cell.tabindex : null\">\n <ng-container *desyCustomInnerContent=\"{ component: cell, html: cell.html, text: cell.text }\"></ng-container>\n </th>\n <ng-template #elseTd>\n <td tabindex=\"-1\" desyFocusClickedCell\n [class]=\"['px-base py-sm', cell.classes] | makeHtmlList\"\n desyCell [row]=\"row\" [rowIndex]=\"iRow\" [columnIndex]=\"columnIndex\"\n [attr.colspan]=\"cell.colspan ? cell.colspan : null\"\n [attr.rowspan]=\"cell.rowspan ? cell.rowspan : null\"\n [attr.id]=\"cell.id ? cell.id : null\"\n [attr.role]=\"cell.role ? cell.role : null\"\n [attr.aria-label]=\"cell.ariaLabel ? cell.ariaLabel : null\"\n [attr.aria-describedby]=\"cell.ariaDescribedBy ? cell.ariaDescribedBy : null\"\n [attr.aria-labelledby]=\"cell.ariaLabelledBy ? cell.ariaLabelledBy : null\"\n [attr.aria-hidden]=\"cell.ariaHidden ? cell.ariaHidden : null\"\n [attr.aria-disabled]=\"cell.ariaDisabled ? cell.ariaDisabled : null\"\n [attr.aria-controls]=\"cell.ariaControls ? cell.ariaControls : null\"\n [attr.aria-current]=\"cell.ariaCurrent ? cell.ariaCurrent : null\"\n [attr.aria-live]=\"cell.ariaLive ? cell.ariaLive : null\"\n [attr.aria-expanded]=\"cell.ariaExpanded ? cell.ariaExpanded : null\"\n [attr.aria-errormessage]=\"cell.ariaErrorMessage ? cell.ariaErrorMessage : null\"\n [attr.aria-haspopup]=\"cell.ariaHasPopup ? cell.ariaHasPopup : null\"\n [attr.tabindex]=\"cell.tabindex ? cell.tabindex : -1\">\n <ng-container *desyCustomInnerContent=\"{ component: cell, html: cell.html, text: cell.text }\"></ng-container>\n </td>\n </ng-template>\n </ng-container>\n </tr>\n </tbody>\n </table>\n</ng-template>\n\n<div *ngIf=\"wrapper; else tableContent\" [class]=\"wrapper.classes\">\n <ng-container *ngTemplateOutlet=\"tableContent\"></ng-container>\n</div>\n" }]
|
|
301
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { rows: [{
|
|
302
|
+
type: Input
|
|
303
|
+
}], head: [{
|
|
304
|
+
type: Input
|
|
305
|
+
}], caption: [{
|
|
306
|
+
type: Input
|
|
307
|
+
}], captionClasses: [{
|
|
308
|
+
type: Input
|
|
309
|
+
}], firstCellIsHeader: [{
|
|
310
|
+
type: Input
|
|
311
|
+
}], hasCheckboxes: [{
|
|
312
|
+
type: Input
|
|
313
|
+
}], idPrefix: [{
|
|
314
|
+
type: Input
|
|
315
|
+
}], classes: [{
|
|
316
|
+
type: Input
|
|
317
|
+
}], checkboxClasses: [{
|
|
318
|
+
type: Input
|
|
319
|
+
}], id: [{
|
|
320
|
+
type: Input
|
|
321
|
+
}], wrapper: [{
|
|
322
|
+
type: Input
|
|
323
|
+
}], captionComponent: [{
|
|
324
|
+
type: ContentChildren,
|
|
325
|
+
args: [TableCaptionComponent]
|
|
326
|
+
}], headerComponent: [{
|
|
327
|
+
type: ContentChildren,
|
|
328
|
+
args: [TableAdvancedHeaderComponent]
|
|
329
|
+
}], rowComponentList: [{
|
|
330
|
+
type: ContentChildren,
|
|
331
|
+
args: [TableAdvancedRowComponent]
|
|
332
|
+
}], rowData: [{
|
|
333
|
+
type: ViewChildren,
|
|
334
|
+
args: [RowDirective]
|
|
335
|
+
}], rowsChange: [{
|
|
336
|
+
type: Output
|
|
337
|
+
}], rowsChecked: [{
|
|
338
|
+
type: Output
|
|
339
|
+
}], recalculateTable: [{
|
|
340
|
+
type: Output
|
|
341
|
+
}] } });
|
|
342
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtYWR2YW5jZWQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZGVzeS1hbmd1bGFyL3NyYy9saWIvZGVzeS10YWJsZXMvY29tcG9uZW50cy90YWJsZS1hZHZhbmNlZC90YWJsZS1hZHZhbmNlZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LXRhYmxlcy9jb21wb25lbnRzL3RhYmxlLWFkdmFuY2VkL3RhYmxlLWFkdmFuY2VkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBR0wsU0FBUyxFQUNULGVBQWUsRUFFZixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFFTixZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLHNCQUFzQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDbEUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG9DQUFvQyxDQUFDO0FBQy9ELE9BQU8sRUFBb0IsT0FBTyxFQUF1QixNQUFNLGtCQUFrQixDQUFDO0FBQ2xGLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDZDQUE2QyxDQUFDO0FBRWxGLE9BQU8sRUFBQyw0QkFBNEIsRUFBQyxNQUFNLDhDQUE4QyxDQUFDO0FBQzFGLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBRXBGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQ0FBZ0MsQ0FBQztBQUU1RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5REFBeUQsQ0FBQzs7Ozs7Ozs7Ozs7QUFRekYsTUFBTSxPQUFPLHNCQUF1QixTQUFRLHNCQUFzQjtJQWlDaEUsWUFBb0IsRUFBYyxFQUFVLGNBQWlDO1FBQzNFLEtBQUssRUFBRSxDQUFDO1FBRFUsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUFVLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQVJuRSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNoQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDakMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQTBCLENBQUM7UUFHeEUsZ0JBQVcsR0FBRyxPQUFPLENBQUM7SUFLdEIsQ0FBQztJQUVELGVBQWU7UUFDYixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDdkUsSUFBSSxZQUFZLEVBQUU7WUFDaEIsWUFBWSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDNUM7UUFDRCxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCwwQkFBMEI7UUFDeEIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUV4RCxxSEFBcUg7UUFDckgsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQzlDLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDcEM7YUFBTTtZQUVMLDJIQUEySDtZQUMzSCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBRXBDLHNDQUFzQztZQUN0QyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUN6RSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUEwQyxDQUFDO1lBQ3hGLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDckM7SUFFSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxzQkFBc0I7UUFDNUIsTUFBTSxNQUFNLEdBQUc7WUFDYixPQUFPLEVBQUUsRUFBRTtZQUNYLElBQUksRUFBRSxJQUFJO1NBQ1gsQ0FBQztRQUVGLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQTRELENBQUM7UUFDN0YsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLGVBQWUsRUFBRSxFQUFFO2dCQUMzQyxJQUFJLFVBQVUsQ0FBQyxTQUFTLElBQUksVUFBVSxDQUFDLFlBQVksRUFBRTtvQkFDbkQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztpQkFDM0Y7Z0JBQ0QsSUFBRyxVQUFVLENBQUMsU0FBUyxJQUFJLFVBQVUsQ0FBQyxZQUFZLEVBQUM7b0JBQ2pELE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7aUJBQzNGO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pHLE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7U0FDL0g7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7O09BRUc7SUFFSCxVQUFVO1FBQ1IsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztJQUMxRixDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU8sSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztJQUMxSCxDQUFDO0lBRUQsT0FBTztRQUNMLElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUNkLElBQUksSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDcEMsSUFBSSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUN4QzthQUFNLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNwQixJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztTQUNsQjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxjQUFjO1FBQ1osT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUN4RixDQUFDO0lBRUQsV0FBVztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO0lBQ3hELENBQUM7SUFFRCxXQUFXLENBQUMsS0FBYTtRQUN2QixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQ2pELENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFhO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDbkQsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQWE7UUFDN0IsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO0lBQ3hELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFhO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFdBQVcsRUFBRSxHQUFHLGlCQUFpQixHQUFHLEtBQUssQ0FBQztJQUN4RCxDQUFDO0lBRUQsZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQ3JGLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxPQUFnQjtRQUMvQixJQUFJLE9BQU8sS0FBSyxPQUFPLENBQUMsR0FBRyxFQUFDO1lBQzFCLE9BQU8sV0FBVyxDQUFDO1NBQ3BCO2FBQU0sSUFBSSxPQUFPLEtBQUssT0FBTyxDQUFDLElBQUksRUFBQztZQUNsQyxPQUFPLFlBQVksQ0FBQztTQUNyQjthQUFNLElBQUksT0FBTyxLQUFLLE9BQU8sQ0FBQyxJQUFJLEVBQUM7WUFDbEMsT0FBTyxNQUFNLENBQUM7U0FDZjtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUFTO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzVELENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxJQUFrQztRQUNyRCxPQUFPLElBQUksQ0FBQyx1QkFBdUIsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzlFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN4RCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsSUFBc0M7UUFDeEQsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzlELENBQUM7SUFHRDs7T0FFRztJQUNILG9CQUFvQixDQUFDLEdBQXNDO1FBQ3pELElBQUksR0FBRyxZQUFZLHlCQUF5QixFQUFFO1lBQzVDLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNyQztRQUNELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFRDs7T0FFRztJQUNLLFVBQVU7UUFDaEIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUN6QixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsWUFBWSx5QkFBeUIsQ0FBQztZQUNyRSxDQUFDLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNsQixJQUFJLFFBQVEsRUFBRTtnQkFDWCxDQUErQixDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ2hFO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSyxtQkFBbUI7UUFDekIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDakM7UUFFRCxNQUFNLFNBQVMsR0FBUSxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLHVDQUF1QztRQUNuRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBR0Q7O09BRUc7SUFDSCxpQkFBaUIsQ0FBQyxJQUF1QjtRQUN2QyxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxvQkFBb0I7WUFDeEMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUN2QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDbkI7UUFDRCxJQUFHLElBQUksQ0FBQyxTQUFTLEVBQUMsRUFBRSx3QkFBd0I7WUFDMUMsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUN2QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7U0FDbkI7UUFFRCxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssVUFBVSxDQUFDLGlCQUF5QyxFQUFFLElBQW9CO1FBQ2hGLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQztRQUN4QixpQkFBaUIsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3pDLFlBQVksR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQ3ZDLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN0RyxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7T0FFRztJQUVIOzs7T0FHRztJQUNILGtCQUFrQixDQUFDLEtBQWE7UUFDOUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ25DLElBQUksSUFBSSxFQUFFO1lBQ1IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUUsRUFBRTtnQkFDL0IsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztpQkFDakY7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUdEOzs7OztPQUtHO0lBQ0ssUUFBUSxDQUFDLGlCQUF5QyxFQUFFLElBQW9CO1FBQzlFLElBQUksVUFBVSxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLGlCQUFpQixDQUFDLElBQUksRUFBRTtZQUMxQixNQUFNLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ3ZELE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLEdBQUcsQ0FBQztZQUMzRCxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUM5QixJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDbkY7UUFFRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDO0lBRUQ7O09BRUc7SUFDSCxrQkFBa0IsQ0FBQyxDQUFnQixFQUFFLENBQWdCLEVBQUUsS0FBYztRQUNuRSxJQUFJLE1BQU0sQ0FBQztRQUNYLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDdkQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUV2RCxJQUFJLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxFQUFHLEVBQUUsYUFBYTtZQUM5RCxNQUFNLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1NBQ3pHO2FBQUksRUFBRSxjQUFjO1lBQ25CLE1BQU0sR0FBRyxXQUFXLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUMvRTtRQUVELE9BQU8sTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0JBQWdCLENBQUMsSUFBdUI7UUFDOUMsSUFBSSxJQUFJLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ2xFLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQztTQUNwQjthQUFNO1lBQ0wsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDO1NBQ3JCO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssYUFBYSxDQUFDLEdBQVc7UUFDL0IsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzVCLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztTQUM3QjtRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFrQyxFQUFFLFNBQWM7UUFDN0QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFakMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ25DLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUM1QixJQUFJLElBQUksSUFBSSxJQUFJLEVBQUU7WUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQXNDLEVBQUUsU0FBUyxFQUFFLEVBQUU7WUFDbkUsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ25CLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDOzttSEFoVlUsc0JBQXNCO3VHQUF0QixzQkFBc0IsdWRBaUJoQixxQkFBcUIsa0RBR3JCLDRCQUE0QixtREFFNUIseUJBQXlCLHlEQUM1QixZQUFZLHVFQ3RENUIsOG5lQTJNQTtBRDNKRTtJQURDLGdCQUFnQixFQUFFO2dFQUM2RDtBQUdoRjtJQURDLGdCQUFnQixFQUFFOytEQUMwRTsyRkFwQmxGLHNCQUFzQjtrQkFKbEMsU0FBUzsrQkFDRSxxQkFBcUI7aUlBS3RCLElBQUk7c0JBQVosS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUlrQyxnQkFBZ0I7c0JBQXZELGVBQWU7dUJBQUMscUJBQXFCO2dCQUdTLGVBQWU7c0JBQTdELGVBQWU7dUJBQUMsNEJBQTRCO2dCQUVELGdCQUFnQjtzQkFBM0QsZUFBZTt1QkFBQyx5QkFBeUI7Z0JBQ2QsT0FBTztzQkFBbEMsWUFBWTt1QkFBQyxZQUFZO2dCQUVoQixVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGVudENvbXBvbmVudCB9IGZyb20gJy4vLi4vLi4vLi4vZGVzeS1jb21tb25zL2NvbXBvbmVudHMvY29udGVudC9jb250ZW50LmNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0FjY2Vzc2liaWxpdHlDb21wb25lbnR9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzJztcbmltcG9ydCB7U2VhcmNoVXRpbHN9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC91dGlscy9zZWFyY2gtdXRpbHMnO1xuaW1wb3J0IHtIZWFkQ2VsbE1vZGVsRGF0YSwgT3JkZXJCeSwgUm93RGF0YSwgV3JhcHBlckRhdGF9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtUYWJsZUNhcHRpb25Db21wb25lbnR9IGZyb20gJy4uL3RhYmxlL2NvbXBvbmVudHMvdGFibGUtY2FwdGlvbi5jb21wb25lbnQnO1xuaW1wb3J0IHtUYWJsZUFkdmFuY2VkSGVhZGVyQ2VsbENvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlLWFkdmFuY2VkLWhlYWRlci1jZWxsLmNvbXBvbmVudCc7XG5pbXBvcnQge1RhYmxlQWR2YW5jZWRIZWFkZXJDb21wb25lbnR9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS1hZHZhbmNlZC1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7VGFibGVBZHZhbmNlZFJvd0NvbXBvbmVudH0gZnJvbSAnLi9jb21wb25lbnRzL3RhYmxlLWFkdmFuY2VkLXJvdy5jb21wb25lbnQnO1xuaW1wb3J0IHtDZWxsRGlyZWN0aXZlfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL2NlbGwuZGlyZWN0aXZlJztcbmltcG9ydCB7Um93RGlyZWN0aXZlfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL3Jvdy5kaXJlY3RpdmUnO1xuaW1wb3J0IHtSZWNhbGN1bGF0ZVRhYmxlUGFyYW1zfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3JlY2FsY3VsYXRlLXRhYmxlLXBhcmFtcyc7XG5pbXBvcnQge0Rlc3lDb250ZW50Q2hpbGR9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9kZWNvcmF0b3JzL2Rlc3ktY29udGVudC1jaGlsZC5kZWNvcmF0b3InO1xuaW1wb3J0IHsgVGFibGVBZHZhbmNlZFNlbGVjdENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy90YWJsZS1hZHZhbmNlZC1zZWxlY3QuY29tcG9uZW50JztcbmltcG9ydCB7IFNlbGVjdEl0ZW1EYXRhIH0gZnJvbSAnLi4vLi4vLi4vZGVzeS1mb3Jtcy9pbnRlcmZhY2VzL3NlbGVjdC1pdGVtLWRhdGEnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkZXN5LXRhYmxlLWFkdmFuY2VkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLWFkdmFuY2VkLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUFkdmFuY2VkQ29tcG9uZW50IGV4dGVuZHMgQWNjZXNzaWJpbGl0eUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuXG4gIEBJbnB1dCgpIHJvd3M6IFJvd0RhdGFbXTsgLy8gb3JpZ2luYWwgZGF0YVxuICBASW5wdXQoKSBoZWFkOiBIZWFkQ2VsbE1vZGVsRGF0YVtdO1xuXG4gIEBJbnB1dCgpIGNhcHRpb246IHN0cmluZztcbiAgQElucHV0KCkgY2FwdGlvbkNsYXNzZXM6IHN0cmluZztcbiAgQElucHV0KCkgZmlyc3RDZWxsSXNIZWFkZXI6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGhhc0NoZWNrYm94ZXM6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlkUHJlZml4OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGNsYXNzZXM6IHN0cmluZztcbiAgQElucHV0KCkgY2hlY2tib3hDbGFzc2VzOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlkOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHdyYXBwZXI6IFdyYXBwZXJEYXRhO1xuXG5cbiAgQERlc3lDb250ZW50Q2hpbGQoKVxuICBAQ29udGVudENoaWxkcmVuKFRhYmxlQ2FwdGlvbkNvbXBvbmVudCkgY2FwdGlvbkNvbXBvbmVudDogVGFibGVDYXB0aW9uQ29tcG9uZW50O1xuXG4gIEBEZXN5Q29udGVudENoaWxkKClcbiAgQENvbnRlbnRDaGlsZHJlbihUYWJsZUFkdmFuY2VkSGVhZGVyQ29tcG9uZW50KSBoZWFkZXJDb21wb25lbnQ6IFRhYmxlQWR2YW5jZWRIZWFkZXJDb21wb25lbnQ7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihUYWJsZUFkdmFuY2VkUm93Q29tcG9uZW50KSByb3dDb21wb25lbnRMaXN0OiBRdWVyeUxpc3Q8VGFibGVBZHZhbmNlZFJvd0NvbXBvbmVudD47XG4gIEBWaWV3Q2hpbGRyZW4oUm93RGlyZWN0aXZlKSByb3dEYXRhOiBRdWVyeUxpc3Q8Um93RGlyZWN0aXZlPjtcblxuICBAT3V0cHV0KCkgcm93c0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHJvd3NDaGVja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcmVjYWxjdWxhdGVUYWJsZSA9IG5ldyBFdmVudEVtaXR0ZXI8UmVjYWxjdWxhdGVUYWJsZVBhcmFtcz4oKTtcblxuICB2aXNpYmxlUm93czogUm93RGF0YVtdfFRhYmxlQWR2YW5jZWRSb3dDb21wb25lbnRbXTtcbiAgb3JkZXJCeVR5cGUgPSBPcmRlckJ5O1xuICBpc1Jlc2V0OiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtbnRzRm9jdXMgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW3RhYmluZGV4XScpO1xuICAgIGlmIChlbGVtbnRzRm9jdXMpIHtcbiAgICAgIGVsZW1udHNGb2N1cy5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICB9XG4gICAgdGhpcy5yZWNhbGN1bGF0ZVZpc2libGVFbGVtZW50cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZnJlc2NhIGxhcyBmaWxhcyB2aXNpYmxlcyB0cmFzIHJlYWxpemFyc2UgdW5hIGLDunNxdWVkYSBvIHVuYSBvcmRlbmFjacOzblxuICAgKi9cbiAgcmVjYWxjdWxhdGVWaXNpYmxlRWxlbWVudHMoKTogdm9pZCB7XG4gICAgY29uc3QgcmVjYWxjdWxhdGVQYXJhbXMgPSB0aGlzLmJ1aWxkUmVjYWxjdWxhdGVQYXJhbXMoKTtcblxuICAgIC8vIFNpIHNlIGNhcHR1cmEgZWwgZXZlbnRvIHJlY2FsY3VsYXRlVGFibGUgc2UgZGVqYSBhbCB1c3VhcmlvIGxhIHJlc3BvbnNhYmlsaWRhZCBkZSBmaWx0cmFyIHkgb3JkZW5hciBsb3MgZWxlbWVudG9zLlxuICAgIGlmICh0aGlzLnJlY2FsY3VsYXRlVGFibGUub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucmVjYWxjdWxhdGVUYWJsZS5lbWl0KHJlY2FsY3VsYXRlUGFyYW1zKTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfSBlbHNlIHtcblxuICAgICAgLy8gU2UgZGViZW4gbW9zdHJhciB0b2RhcyBsYXMgZmlsYXMgdGVtcG9yYWxtZW50ZSBwYXJhIHBvZGVyIGFwbGljYXIgZWwgZmlsdHJvIHkgbGEgb3JkZW5hY2nDs24gc29icmUgZWwgY29udGVuaWRvIGluc2VydGFkb1xuICAgICAgdGhpcy52aXNpYmxlUm93cyA9IHRoaXMuZ2V0Um93cygpO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgIC8vIFNlIGFwbGljYSBlbCBmaWx0cm8geSBsYSBvcmRlbmFjacOzblxuICAgICAgbGV0IHJvd0RhdGEgPSB0aGlzLmZpbHRlclJvd3MocmVjYWxjdWxhdGVQYXJhbXMsIHRoaXMucm93RGF0YS50b0FycmF5KCkpO1xuICAgICAgcm93RGF0YSA9IHRoaXMuc29ydFJvd3MocmVjYWxjdWxhdGVQYXJhbXMsIHJvd0RhdGEpO1xuICAgICAgdGhpcy52aXNpYmxlUm93cyA9IHJvd0RhdGEubWFwKHIgPT4gci5kZXN5Um93KSBhcyBSb3dEYXRhW118VGFibGVBZHZhbmNlZFJvd0NvbXBvbmVudFtdO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogQ29uc3RydXllIGxvcyBwYXLDoW1ldHJvcyBuZWNlc2FyaW9zIHBhcmEgcmVjYWxjdWxhciBsYSB0YWJsYSwgaW5kaWNhbmRvIGxvcyBmaWx0cm9zIHkgbGEgb3JkZW5hY2nDs25cbiAgICovXG4gIHByaXZhdGUgYnVpbGRSZWNhbGN1bGF0ZVBhcmFtcygpOiBSZWNhbGN1bGF0ZVRhYmxlUGFyYW1zIHtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBmaWx0ZXJzOiBbXSxcbiAgICAgIHNvcnQ6IG51bGxcbiAgICB9O1xuXG4gICAgY29uc3QgaGVhZCA9IHRoaXMuZ2V0SGVhZGVyQ2VsbHMoKSBhcyAoSGVhZENlbGxNb2RlbERhdGF8VGFibGVBZHZhbmNlZEhlYWRlckNlbGxDb21wb25lbnQpW107XG4gICAgaWYgKGhlYWQpIHtcbiAgICAgIGhlYWQuZm9yRWFjaCgoaGVhZGVyQ2VsbCwgaGVhZGVyQ2VsbEluZGV4KSA9PiB7XG4gICAgICAgIGlmIChoZWFkZXJDZWxsLmhhc0ZpbHRlciAmJiBoZWFkZXJDZWxsLmFjdGl2ZUZpbHRlcikge1xuICAgICAgICAgIHBhcmFtcy5maWx0ZXJzLnB1c2goeyBjb2x1bW5JbmRleDogaGVhZGVyQ2VsbEluZGV4LCBmaWx0ZXJUZXh0OiBoZWFkZXJDZWxsLnZhbHVlRmlsdGVyIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmKGhlYWRlckNlbGwuaGFzU2VsZWN0ICYmIGhlYWRlckNlbGwuYWN0aXZlU2VsZWN0KXtcbiAgICAgICAgICBwYXJhbXMuZmlsdGVycy5wdXNoKHsgY29sdW1uSW5kZXg6IGhlYWRlckNlbGxJbmRleCwgZmlsdGVyVGV4dDogaGVhZGVyQ2VsbC52YWx1ZVNlbGVjdCB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG9yZGVyQnlDb2x1bW5JbmRleCA9IGhlYWQuZmluZEluZGV4KGNlbGwgPT4gY2VsbC5vcmRlckJ5ICYmIGNlbGwub3JkZXJCeSAhPT0gT3JkZXJCeS5ub25lKTtcbiAgICAgIHBhcmFtcy5zb3J0ID0gKG9yZGVyQnlDb2x1bW5JbmRleCA+PSAwKSA/IHsgY29sdW1uSW5kZXg6IG9yZGVyQnlDb2x1bW5JbmRleCwgb3JkZXI6IGhlYWRbb3JkZXJCeUNvbHVtbkluZGV4XS5vcmRlckJ5IH0gOiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxuICAvKipcbiAgICogZnVuY2lvbmVzIGRlIHJlY29nZXIgaWRzLCB5IGNhcmFjdGVyaXN0aWNhc1xuICAgKi9cblxuICBoYXNGaWx0ZXJzKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhlYWQgPSB0aGlzLmdldEhlYWRlckNlbGxzKCk7XG4gICAgcmV0dXJuIGhlYWQgPyBoZWFkLmZpbmRJbmRleChjZWxsID0+IChjZWxsLmhhc0ZpbHRlcikgfHwgKGNlbGwuaGFzU2VsZWN0KSkgPj0gMCA6IGZhbHNlO1xuICB9XG5cbiAgZ2V0SGVhZGVyQ2VsbHMoKTogSGVhZENlbGxNb2RlbERhdGFbXXxUYWJsZUFkdmFuY2VkSGVhZGVyQ2VsbENvbXBvbmVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5oZWFkZXJDb21wb25lbnQgJiYgdGhpcy5oZWFkZXJDb21wb25lbnQuY2VsbHMubGVuZ3RoID4gMCA/IHRoaXMuaGVhZGVyQ29tcG9uZW50LmNlbGxzLnRvQXJyYXkoKSA6IHRoaXMuaGVhZDtcbiAgfVxuXG4gIGdldFJvd3MoKXtcbiAgICBsZXQgcm93cyA9IFtdO1xuICAgIGlmICh0aGlzLnJvd0NvbXBvbmVudExpc3QubGVuZ3RoID4gMCkge1xuICAgICAgcm93cyA9IHRoaXMucm93Q29tcG9uZW50TGlzdC50b0FycmF5KCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnJvd3MpIHtcbiAgICAgIHJvd3MgPSB0aGlzLnJvd3M7XG4gICAgfVxuICAgIHJldHVybiByb3dzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNpIHNlIHNvYnJlZXNjcmliZSAgZWwgY29tcG9ydGFtaWVudG8gcG9yIGRlZmVjdG8gZGUgZmlsdHJhZG8geSBvcmRlbmFjacOzbiwgc2UgdXRpbGl6YXLDoW4gbGFzIGluZGljYWRhcyBkZXNkZSBmdWVyYSBkZWxcbiAgICogY29tcG9uZW50ZSAoeWEgc2VhIHBvciBwYXLDoW1ldHJvIG8gcG9yIGNvbnRlbmlkbykuXG4gICAqIFNpIG5vIHNlIHNvYnJlZXNjcmliZSwgZGV2dWVsdmUgbGFzIGZpbGFzIGNhbGN1bGFkYXMuXG4gICAqL1xuICBnZXRWaXNpYmxlUm93cygpe1xuICAgIHJldHVybiB0aGlzLnJlY2FsY3VsYXRlVGFibGUub2JzZXJ2ZXJzLmxlbmd0aCA+IDAgPyB0aGlzLmdldFJvd3MoKSA6IHRoaXMudmlzaWJsZVJvd3M7XG4gIH1cblxuICBnZXRJZFByZWZpeCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkUHJlZml4ID8gdGhpcy5pZFByZWZpeCA6ICdpZC10YWJsZS1yb3cnO1xuICB9XG5cbiAgZ2V0SWRIZWFkZXIoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SWRQcmVmaXgoKSArICctaGVhZGVyLScgKyBpbmRleDtcbiAgfVxuXG4gIGdldElkUm93Q2hlY2tib3goaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SWRQcmVmaXgoKSArICctY2hlY2tib3gtJyArIGluZGV4O1xuICB9XG5cbiAgZ2V0SWRIZWFkZXJGaWx0ZXIoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SWRQcmVmaXgoKSArICctaGVhZGVyLWZpbHRlci0nICsgaW5kZXg7XG4gIH1cblxuICBnZXRJZEhlYWRlclNlbGVjdChpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJZFByZWZpeCgpICsgJy1oZWFkZXItc2VsZWN0LScgKyBpbmRleDtcbiAgfVxuXG4gIGdldENhcHRpb25DbGFzcygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNhcHRpb25Db21wb25lbnQgPyB0aGlzLmNhcHRpb25Db21wb25lbnQuY2xhc3NlcyA6IHRoaXMuY2FwdGlvbkNsYXNzZXM7XG4gIH1cblxuICBnZXRTdHJpbmdPcmRlckJ5KG9yZGVyQnk6IE9yZGVyQnkpOiBzdHJpbmcge1xuICAgIGlmIChvcmRlckJ5ID09PSBPcmRlckJ5LmFzYyl7XG4gICAgICByZXR1cm4gJ2FzY2VuZGluZyc7XG4gICAgfSBlbHNlIGlmIChvcmRlckJ5ID09PSBPcmRlckJ5LmRlc2Mpe1xuICAgICAgcmV0dXJuICdkZXNjZW5kaW5nJztcbiAgICB9IGVsc2UgaWYgKG9yZGVyQnkgPT09IE9yZGVyQnkubm9uZSl7XG4gICAgICByZXR1cm4gJ25vbmUnO1xuICAgIH1cbiAgfVxuXG4gIGdldFNlbGVjdEZvckl0ZW0oaXRlbTogYW55KTogVGFibGVBZHZhbmNlZFNlbGVjdENvbXBvbmVudHtcbiAgICByZXR1cm4gaXRlbS5zZWxlY3RDb21wb25lbnQgPyBpdGVtLnNlbGVjdENvbXBvbmVudCA6IG51bGw7XG4gIH1cblxuICBnZXRJdGVtU2VsZWN0T3B0aW9ucyhpdGVtOiBUYWJsZUFkdmFuY2VkU2VsZWN0Q29tcG9uZW50KTogU2VsZWN0SXRlbURhdGFbXSB7XG4gICAgcmV0dXJuIGl0ZW0uc2VsZWN0SXRlbUNvbXBvbmVudExpc3QgJiYgaXRlbS5zZWxlY3RJdGVtQ29tcG9uZW50TGlzdC5sZW5ndGggPiAwID9cbiAgICAgIGl0ZW0uc2VsZWN0SXRlbUNvbXBvbmVudExpc3QudG9BcnJheSgpIDogaXRlbS5pdGVtcztcbiAgfVxuXG4gIGdldENvbnRlbnRDb21wb25lbnQoaXRlbTogVGFibGVBZHZhbmNlZEhlYWRlckNlbGxDb21wb25lbnQpOiBDb250ZW50Q29tcG9uZW50e1xuICAgIHJldHVybiBpdGVtLmNvbnRlbnRDb21wb25lbnQgPyBpdGVtLmNvbnRlbnRDb21wb25lbnQgOiBudWxsO1xuICB9XG5cblxuICAvKipcbiAgICogY2hlY2tzXG4gICAqL1xuICBoYW5kbGVDaGVja2JveENoYW5nZShyb3c6IFJvd0RhdGF8VGFibGVBZHZhbmNlZFJvd0NvbXBvbmVudCk6IHZvaWQge1xuICAgIGlmIChyb3cgaW5zdGFuY2VvZiBUYWJsZUFkdmFuY2VkUm93Q29tcG9uZW50KSB7XG4gICAgICByb3cuY2hlY2tlZENoYW5nZS5lbWl0KHJvdy5jaGVja2VkKTtcbiAgICB9XG4gICAgdGhpcy5ub3RpZnlDaGVja2VkQ2hhbmdlKCk7XG4gIH1cblxuICAvKipcbiAgICogUGVybWl0ZSBkZXNtYXJjYXIgdG9kYXMgbGFzIGZpbGFzXG4gICAqL1xuICBwcml2YXRlIHVuY2hlY2tBbGwoKTogdm9pZHtcbiAgICB0aGlzLmdldFJvd3MoKS5mb3JFYWNoKHIgPT4ge1xuICAgICAgY29uc3QgbXVzdEVtaXQgPSByLmNoZWNrZWQgJiYgciBpbnN0YW5jZW9mIFRhYmxlQWR2YW5jZWRSb3dDb21wb25lbnQ7XG4gICAgICByLmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgIGlmIChtdXN0RW1pdCkge1xuICAgICAgICAociBhcyBUYWJsZUFkdmFuY2VkUm93Q29tcG9uZW50KS5jaGVja2VkQ2hhbmdlLmVtaXQoci5jaGVja2VkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm5vdGlmeUNoZWNrZWRDaGFuZ2UoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBOb3RpZmljYSBjYW1iaW9zIGVuIGxhcyBmaWxhc1xuICAgKi9cbiAgcHJpdmF0ZSBub3RpZnlDaGVja2VkQ2hhbmdlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJvd0NvbXBvbmVudExpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnJvd3NDaGFuZ2UuZW1pdCh0aGlzLnJvd3MpO1xuICAgIH1cblxuICAgIGNvbnN0IHJvd0NoZWNrczogYW55ID0ge307XG4gICAgdGhpcy5nZXRSb3dzKCkuZm9yRWFjaChyID0+IHJvd0NoZWNrc1tyLmlkXSA9ICEhci5jaGVja2VkKTsgLy8gU2UgYXBsaWNhbiB0YW1iacOpbiBhIGxhcyBubyB2aXNpYmxlc1xuICAgIHRoaXMucm93c0NoZWNrZWQuZW1pdChyb3dDaGVja3MpO1xuICB9XG5cblxuICAvKipcbiAgICogYnVzcXVlZGFcbiAgICovXG4gIGhhbmRsZUlucHV0U2VhcmNoKGl0ZW06IEhlYWRDZWxsTW9kZWxEYXRhKTogdm9pZCB7XG4gICAgaWYgKGl0ZW0uaGFzRmlsdGVyKSB7IC8vIHNpIHRpZW5lIGJ1c2NhZG9yXG4gICAgICBpdGVtLmFjdGl2ZUZpbHRlciA9ICEhaXRlbS52YWx1ZUZpbHRlcjtcbiAgICAgIHRoaXMudW5jaGVja0FsbCgpO1xuICAgIH1cbiAgICBpZihpdGVtLmhhc1NlbGVjdCl7IC8vU2kgdGllbmUgc2VsZWNjaW9uYWJsZVxuICAgICAgaXRlbS5hY3RpdmVTZWxlY3QgPSAhIWl0ZW0udmFsdWVTZWxlY3Q7XG4gICAgICB0aGlzLnVuY2hlY2tBbGwoKTtcbiAgICB9XG5cbiAgICB0aGlzLnJlY2FsY3VsYXRlVmlzaWJsZUVsZW1lbnRzKCk7XG4gIH1cblxuICAvKipcbiAgICogU2UgZmlsdHJhbiBsYXMgZmlsYXMgc2Vnw7puIGxvIGVzcGVjaWZpY2FkbyBlbiBsYSBiYXJyYSBkZSBiw7pzcXVlZGEgZGUgY2FkYSBjb2x1bW5hLlxuICAgKiBTaSBubyBoYXkgYsO6c3F1ZWRhIHNzZSBkZXZ1ZWx2ZW4gdG9kYXMgbGFzIGZpbGFzLlxuICAgKiBAcGFyYW0gcmVjYWxjdWxhdGVQYXJhbXMgcGFyYW1ldHJvcyBwYXJhIHJlY2FsY3VsYXIgbG9zIGVsZW1lbnRvcyB2aXNpYmxlc1xuICAgKiBAcGFyYW0gcm93cyBsaXN0YSBjb24gdG9kYXMgbGFzIGZpbGFzXG4gICAqIEByZXR1cm4gbGlzdGEgZGUgZmlsYXMgZmlsdHJhZGFcbiAgICovXG4gIHByaXZhdGUgZmlsdGVyUm93cyhyZWNhbGN1bGF0ZVBhcmFtczogUmVjYWxjdWxhdGVUYWJsZVBhcmFtcywgcm93czogUm93RGlyZWN0aXZlW10pOiBSb3dEaXJlY3RpdmVbXSB7XG4gICAgbGV0IGZpbHRlcmVkUm93cyA9IHJvd3M7XG4gICAgcmVjYWxjdWxhdGVQYXJhbXMuZmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICBmaWx0ZXJlZFJvd3MgPSBmaWx0ZXJlZFJvd3MuZmlsdGVyKHJvdyA9PlxuICAgICAgICBTZWFyY2hVdGlscy5jb250YWluc0FueVdvcmRGcm9tKHJvdy5nZXRDZWxsKGZpbHRlci5jb2x1bW5JbmRleCkuZ2V0Q29udGVudCgpLCBmaWx0ZXIuZmlsdGVyVGV4dCkpO1xuICAgIH0pO1xuICAgIHJldHVybiBmaWx0ZXJlZFJvd3M7XG4gIH1cblxuICAvKipcbiAgICogb3JkZW5hY2lvblxuICAgKi9cblxuICAvKipcbiAgICogUGVybWl0ZSBpbmRpY2FyIHF1ZSBzZSBkZWJlIG9yZGVuYXIgbGEgdGFibGFcbiAgICogQHBhcmFtIGluZGV4IGluZGljZSBkZSBsYSBjb2x1bW5hXG4gICAqL1xuICBoYW5kbGVTb3J0QnlDb2x1bW4oaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGhlYWQgPSB0aGlzLmdldEhlYWRlckNlbGxzKCk7XG4gICAgaWYgKGhlYWQpIHtcbiAgICAgIGhlYWQuZm9yRWFjaCgoY2VsbCwgY2VsbEluZGV4KSA9PiB7XG4gICAgICAgIGlmIChjZWxsLm9yZGVyQnkpIHtcbiAgICAgICAgICBjZWxsLm9yZGVyQnkgPSBjZWxsSW5kZXggPT09IGluZGV4ID8gdGhpcy5nZXROZXh0RGlyZWN0aW9uKGNlbGwpIDogT3JkZXJCeS5ub25lO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLnJlY2FsY3VsYXRlVmlzaWJsZUVsZW1lbnRzKCk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBPcmRlbmEgbGFzIGZpbGFzIGluZGljYWRhcyBzZWfDum4gbGEgY29sdW1uYSBlc3BlY2lmaWNhZGEgZW4gbGEgY2FiZWNlcmFcbiAgICogQHBhcmFtIHJlY2FsY3VsYXRlUGFyYW1zIHBhcmFtZXRyb3MgcGFyYSByZWNhbGN1bGFyIGxvcyBlbGVtZW50b3MgdmlzaWJsZXNcbiAgICogQHBhcmFtIHJvd3MgZmlsYXMgZGUgbGEgdGFibGEgYSBvcmRlbmFyXG4gICAqIEByZXR1cm4gbWlzbWFzIGZpbGFzIHBlcm8gb3JkZW5hZGFzIHBvciBsYSBjb2x1bW5hIGluZGljYWRhXG4gICAqL1xuICBwcml2YXRlIHNvcnRSb3dzKHJlY2FsY3VsYXRlUGFyYW1zOiBSZWNhbGN1bGF0ZVRhYmxlUGFyYW1zLCByb3dzOiBSb3dEaXJlY3RpdmVbXSk6IFJvd0RpcmVjdGl2ZVtdIHtcbiAgICBsZXQgc29ydGVkUm93cyA9IHJvd3M7XG4gICAgaWYgKHJlY2FsY3VsYXRlUGFyYW1zLnNvcnQpIHtcbiAgICAgIGNvbnN0IGNvbHVtbkluZGV4ID0gcmVjYWxjdWxhdGVQYXJhbXMuc29ydC5jb2x1bW5JbmRleDtcbiAgICAgIGNvbnN0IGlzQXNjID0gcmVjYWxjdWxhdGVQYXJhbXMuc29ydC5vcmRlciA9PT0gT3JkZXJCeS5hc2M7XG4gICAgICBzb3J0ZWRSb3dzID0gcm93cy5zb3J0KChhLCBiKSA9PlxuICAgICAgICB0aGlzLmNvbXBhcmVDZWxsQ29udGVudChhLmdldENlbGwoY29sdW1uSW5kZXgpLCBiLmdldENlbGwoY29sdW1uSW5kZXgpLCBpc0FzYykpO1xuICAgIH1cblxuICAgIHJldHVybiBzb3J0ZWRSb3dzO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmEgZWwgY29udGVuaWRvIGRlIGRvcyBjZWxkYXMuIEVzdGUgc2UgaW52aWVydGUgc2kgZWwgb3JkZW4gZXNwZWNpZmljYWRvIGVzIGRlc2NlbmRlbnRlLlxuICAgKi9cbiAgY29tcGFyZUNlbGxDb250ZW50KGE6IENlbGxEaXJlY3RpdmUsIGI6IENlbGxEaXJlY3RpdmUsIGlzQXNjOiBib29sZWFuKTogbnVtYmVye1xuICAgIGxldCByZXN1bHQ7XG4gICAgY29uc3QgYUNvbXBhcmFibGUgPSB0aGlzLmNsZWFuQ3VycmVuY3koYS5nZXRDb250ZW50KCkpO1xuICAgIGNvbnN0IGJDb21wYXJhYmxlID0gdGhpcy5jbGVhbkN1cnJlbmN5KGIuZ2V0Q29udGVudCgpKTtcblxuICAgIGlmIChpc05hTigrYUNvbXBhcmFibGUpICYmIGlzTmFOKCtiQ29tcGFyYWJsZSkgKSB7IC8vIHNvbiB0ZXh0b3NcbiAgICAgIHJlc3VsdCA9IGFDb21wYXJhYmxlLmxvY2FsZUNvbXBhcmUoYkNvbXBhcmFibGUsICdlcycsIHsgc2Vuc2l0aXZpdHk6ICdiYXNlJywgaWdub3JlUHVuY3R1YXRpb246IHRydWUgfSk7XG4gICAgfWVsc2V7IC8vIHNvbiBudW1lcm9zXG4gICAgICByZXN1bHQgPSBhQ29tcGFyYWJsZS5sb2NhbGVDb21wYXJlKGJDb21wYXJhYmxlLCB1bmRlZmluZWQsIHsgbnVtZXJpYzogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0ICogKGlzQXNjID8gMSA6IC0xKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBzZSBjYWxjdWxhIGxhIG9yZGVuYWNpw7NuIG51ZXZhXG4gICAqL1xuICBwcml2YXRlIGdldE5leHREaXJlY3Rpb24oaXRlbTogSGVhZENlbGxNb2RlbERhdGEpOiBPcmRlckJ5IHtcbiAgICBpZiAoaXRlbS5vcmRlckJ5ID09PSBPcmRlckJ5Lm5vbmUgfHwgaXRlbS5vcmRlckJ5ID09PSBPcmRlckJ5LmRlc2MpIHtcbiAgICAgIHJldHVybiBPcmRlckJ5LmFzYztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE9yZGVyQnkuZGVzYztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogc2kgZXMgdW5hIGNhbnRpZGFkIGRlIGRpbmVybyBzZSBxdWl0YSDigqwgcGFyYSBwb2RlciBjb21wYXJhciBsb3MgbnVtZXJvc1xuICAgKi9cbiAgcHJpdmF0ZSBjbGVhbkN1cnJlbmN5KHR4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoL1tcXGQuLF0rW1xc4oKsXS9nLnRlc3QodHh0KSkge1xuICAgICAgdHh0ID0gdHh0LnJlcGxhY2UoL+KCrC9nLCAnJyk7XG4gICAgfVxuICAgIHJldHVybiB0eHQ7XG4gIH1cblxuICBzZWxlY3RGaWx0ZXIoaXRlbTogVGFibGVBZHZhbmNlZFNlbGVjdENvbXBvbmVudCwgaXRlbVZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICBpdGVtLnZhbHVlQ2hhbmdlLmVtaXQoaXRlbVZhbHVlKTtcblxuICAgIGNvbnN0IGhlYWQgPSB0aGlzLmdldEhlYWRlckNlbGxzKCk7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuZ2V0Um93cygpO1xuICAgIGlmIChoZWFkICYmIHJvd3MpIHtcbiAgICAgIGhlYWQuZm9yRWFjaCgoY2VsbDogVGFibGVBZHZhbmNlZEhlYWRlckNlbGxDb21wb25lbnQsIGNlbGxJbmRleCkgPT4ge1xuICAgICAgfSk7XG4gICAgICByb3dzLmZvckVhY2gocm93ID0+IHtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIiwiPG5nLXRlbXBsYXRlICN0YWJsZUNvbnRlbnQ+XG4gIDx0YWJsZSByb2xlPVwiZ3JpZFwiXG4gICAgICAgICAgW2NsYXNzXT1cIlsnYy10YWJsZS1hZHZhbmNlZCBib3JkZXItdC0yIGJvcmRlci1iLTIgYm9yZGVyLW5ldXRyYWwtYmFzZScsIGNsYXNzZXNdIHwgbWFrZUh0bWxMaXN0XCJcbiAgICAgICAgICBbYXR0ci5pZF09XCJpZCA/IGlkIDogbnVsbFwiXG4gICAgICAgICAgW2F0dHIucm9sZV09XCJyb2xlID8gcm9sZSA6IG51bGxcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsID8gYXJpYUxhYmVsIDogbnVsbFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJhcmlhRGVzY3JpYmVkQnkgPyBhcmlhRGVzY3JpYmVkQnkgOiBudWxsXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnkgPyBhcmlhTGFiZWxsZWRCeSA6IG51bGxcIlxuICAgICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cImFyaWFIaWRkZW4gPyBhcmlhSGlkZGVuIDogbnVsbFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJhcmlhRGlzYWJsZWQgPyBhcmlhRGlzYWJsZWQgOiBudWxsXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImFyaWFDb250cm9scyA/IGFyaWFDb250cm9scyA6IG51bGxcIlxuICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJhcmlhQ3VycmVudCA/IGFyaWFDdXJyZW50IDogbnVsbFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1saXZlXT1cImFyaWFMaXZlID8gYXJpYUxpdmUgOiBudWxsXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImFyaWFFeHBhbmRlZCA/IGFyaWFFeHBhbmRlZCA6IG51bGxcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZXJyb3JtZXNzYWdlXT1cImFyaWFFcnJvck1lc3NhZ2UgPyBhcmlhRXJyb3JNZXNzYWdlIDogbnVsbFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1oYXNwb3B1cF09XCJhcmlhSGFzUG9wdXAgPyBhcmlhSGFzUG9wdXAgOiBudWxsXCJcbiAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJ0YWJpbmRleCA/IHRhYmluZGV4IDogbnVsbFwiPlxuICAgICAgPGNhcHRpb24gKm5nSWY9XCJjYXB0aW9uIHx8IGNhcHRpb25Db21wb25lbnRcIiBbY2xhc3NdPVwiZ2V0Q2FwdGlvbkNsYXNzKClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBjYXB0aW9uQ29tcG9uZW50LCB0ZXh0OiBjYXB0aW9uID8gY2FwdGlvbiA6IG51bGwgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgPC9jYXB0aW9uPlxuICAgICAgPHRoZWFkICpuZ0lmPVwiZ2V0SGVhZGVyQ2VsbHMoKVwiPlxuICAgICAgICAgIDx0ciBjbGFzcz1cImJvcmRlci10IGJvcmRlci1uZXV0cmFsLWJhc2UgZGl2aWRlLXggZGl2aWRlLW5ldXRyYWwtYmFzZVwiPlxuICAgICAgICAgICAgICA8dGggKm5nSWY9XCJoYXNDaGVja2JveGVzXCIgc2NvcGU9XCJjb2xcIiBbY2xhc3NdPVwiWydhbGlnbi10b3AgcHgtYmFzZSBweS14cycsIGNoZWNrYm94Q2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPlNlbGVjY2lvbmFyIGZpbGE8L3NwYW4+XG4gICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEhlYWRlckNlbGxzKCk7IGluZGV4IGFzIGlIZWFkZXJcIiBbaWRdPVwiZ2V0SWRIZWFkZXIoaUhlYWRlcilcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtc29ydF09XCJpdGVtLm9yZGVyQnkgPyBnZXRTdHJpbmdPcmRlckJ5KGl0ZW0ub3JkZXJCeSkgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiWydhbGlnbi10b3AgcHgtYmFzZSBweS1zbSBib3JkZXItbmV1dHJhbC1iYXNlIGJvcmRlci1iLTAgdGV4dC1sZWZ0IHRleHQtc20gZm9udC1ub3JtYWwgdGV4dC1uZXV0cmFsLWRhcmsnLCBpdGVtLmNsYXNzZXNdIHwgbWFrZUh0bWxMaXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jb2xzcGFuXT1cIml0ZW0uY29sc3BhbiA/IGl0ZW0uY29sc3BhbiAgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5yb3dzcGFuXT1cIml0ZW0ucm93c3BhbiA/IGl0ZW0ucm93c3BhbiAgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5yb2xlXT1cIml0ZW0ucm9sZSA/IGl0ZW0ucm9sZSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXRlbS5hcmlhTGFiZWwgPyBpdGVtLmFyaWFMYWJlbCA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaXRlbS5hcmlhRGVzY3JpYmVkQnkgPyBpdGVtLmFyaWFEZXNjcmliZWRCeSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpdGVtLmFyaWFMYWJlbGxlZEJ5ID8gaXRlbS5hcmlhTGFiZWxsZWRCeSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cIml0ZW0uYXJpYUhpZGRlbiA/IGl0ZW0uYXJpYUhpZGRlbiA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5hcmlhRGlzYWJsZWQgPyBpdGVtLmFyaWFEaXNhYmxlZCA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtY29udHJvbHNdPVwiaXRlbS5hcmlhQ29udHJvbHMgPyBpdGVtLmFyaWFDb250cm9scyA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJpdGVtLmFyaWFDdXJyZW50ID8gaXRlbS5hcmlhQ3VycmVudCA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGl2ZV09XCJpdGVtLmFyaWFMaXZlID8gaXRlbS5hcmlhTGl2ZSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZXhwYW5kZWRdPVwiaXRlbS5hcmlhRXhwYW5kZWQgPyBpdGVtLmFyaWFFeHBhbmRlZCA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZXJyb3JtZXNzYWdlXT1cIml0ZW0uYXJpYUVycm9yTWVzc2FnZSA/IGl0ZW0uYXJpYUVycm9yTWVzc2FnZSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiaXRlbS5hcmlhSGFzUG9wdXAgPyBpdGVtLmFyaWFIYXNQb3B1cCA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cIml0ZW0udGFiaW5kZXggPyBpdGVtLnRhYmluZGV4IDogbnVsbFwiPlxuXG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0ub3JkZXJCeVwiIGNsYXNzPVwiaW5saW5lLWJsb2NrIHJlbGF0aXZlXCIgKGNsaWNrKT1cImhhbmRsZVNvcnRCeUNvbHVtbihpSGVhZGVyKVwiIGRlc3lGb2N1c0NsaWNrZWRDZWxsXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpdGVtLm9yZGVyQnkgPyAtMSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIucm9sZV09XCJpdGVtLm9yZGVyQnkgPyAnYnV0dG9uJyA6IG51bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0udGV4dFwiPnt7aXRlbS50ZXh0fX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uY29udGVudENvbXBvbmVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogaXRlbS5jb250ZW50Q29tcG9uZW50IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYy10YWJsZS1hZHZhbmNlZF9fb3JkZXJcIiAqbmdJZj1cIml0ZW0ub3JkZXJCeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+UHVsc2EgcGFyYSBvcmRlbmFyIHBvciBlc3RhIGNvbHVtbmE8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImMtdGFibGUtYWR2YW5jZWRfX2FzY2VuZGluZ1wiICpuZ0lmPVwiaXRlbS5vcmRlckJ5ID09PSBvcmRlckJ5VHlwZS5hc2NcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAxNDAgMTQwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgd2lkdGg9XCIxZW1cIiBoZWlnaHQ9XCIxZW1cIj48cGF0aCBkPVwiTTExMi4wNyAzNy45M2wtMzUtMzVhMTAgMTAgMCAwMC0xNC4xNCAwbC0zNSAzNWExMCAxMCAwIDAwMTQuMTQgMTQuMTRsMTMuNjYtMTMuNjZBMi41IDIuNSAwIDAxNjAgNDAuMThWMTMwYTEwIDEwIDAgMDAyMCAwVjQwLjE4YTIuNSAyLjUgMCAwMTQuMjctMS43N2wxMy42NiAxMy42NmExMCAxMCAwIDAwMTQuMTQtMTQuMTR6XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiLz48L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYy10YWJsZS1hZHZhbmNlZF9fZGVzY2VuZGluZ1wiICpuZ0lmPVwiaXRlbS5vcmRlckJ5ID09PSBvcmRlckJ5VHlwZS5kZXNjXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTQwIDE0MFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHdpZHRoPVwiMWVtXCIgaGVpZ2h0PVwiMWVtXCI+PHBhdGggZD1cIk0yNy45MyAxMDIuMDdsMzUgMzVhMTAgMTAgMCAwMDE0LjE0IDBsMzUtMzVhMTAgMTAgMCAwMC0xNC4xNC0xNC4xNGwtMTMuNjYgMTMuNjZBMi41IDIuNSAwIDAxODAgOTkuODJWMTBhMTAgMTAgMCAwMC0yMCAwdjg5LjgyYTIuNSAyLjUgMCAwMS00LjI3IDEuNzdMNDIuMDcgODcuOTNhMTAgMTAgMCAwMC0xNC4xNCAxNC4xNHpcIiBmaWxsPVwiY3VycmVudENvbG9yXCIvPjwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjLXRhYmxlLWFkdmFuY2VkX19ub25lXCIgICpuZ0lmPVwiaXRlbS5vcmRlckJ5ID09PSBvcmRlckJ5VHlwZS5ub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMTQwIDE0MFwiIGNsYXNzPVwidGV4dC1uZXV0cmFsLWJhc2VcIiBhcmlhLWhpZGRlbj1cInRydWVcIiB3aWR0aD1cIjFlbVwiIGhlaWdodD1cIjFlbVwiPjxwYXRoIGQ9XCJNOTQuNyA5Ny4ybC0xNy4yIDE3LjE5VjI1LjYxTDk0LjcgNDIuOGE3LjUgNy41IDAgMDAxMC42LTEwLjZsLTMwLTMwYTcuNDkgNy40OSAwIDAwLTEwLjYgMGwtMzAgMzBhNy41IDcuNSAwIDAwMTAuNiAxMC42bDE3LjItMTcuMTl2ODguNzhMNDUuMyA5Ny4yYTcuNSA3LjUgMCAxMC0xMC42IDEwLjZsMzAgMzBhNy40OCA3LjQ4IDAgMDAxMC42IDBsMzAtMzBhNy41IDcuNSAwIDAwLTEwLjYtMTAuNnpcIiBmaWxsPVwiY3VycmVudENvbG9yXCIvPjwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWl0ZW0ub3JkZXJCeVwiIGNsYXNzPVwiaW5saW5lLWJsb2NrIHJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLnRleHRcIj57e2l0ZW0udGV4dH19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLmNvbnRlbnRDb21wb25lbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IGl0ZW0uY29udGVudENvbXBvbmVudCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgIDwvdHI+XG4gICAgICA8L3RoZWFkPlxuXG4gICAgICA8dGJvZHk+XG4gICAgICAgICAgPHRyIGNsYXNzPVwiZGl2aWRlLXggZGl2aWRlLW5ldXRyYWwtYmFzZVwiICpuZ0lmPVwiaGFzRmlsdGVycygpXCI+XG4gICAgICAgICAgICAgIDx0ZCAqbmdJZj1cImhhc0NoZWNrYm94ZXNcIiBbbmdDbGFzc109XCJjaGVja2JveENsYXNzZXNcIj48L3RkPlxuICAgICAgICAgICAgICA8dGQgdGFiaW5kZXg9XCItMVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldEhlYWRlckNlbGxzKCk7IGluZGV4IGFzIGlIZWFkXCIgZGVzeUZvY3VzQ2xpY2tlZENlbGxcbiAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJbJ2FsaWduLXRvcCBweC1iYXNlIHBiLXNtIGJvcmRlci1uZXV0cmFsLWJhc2UgYm9yZGVyLWItMCB0ZXh0LWxlZnQgdGV4dC1zbSBmb250LW5vcm1hbCB0ZXh0LW5ldXRyYWwtZGFyaycsIGl0ZW0uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLmhhc1NlbGVjdCAmJiBnZXRTZWxlY3RGb3JJdGVtKGl0ZW0pICE9PSBudWxsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJsZVNlbGVjdDsgY29udGV4dDoge3NlbGVjdGFibGU6IGdldFNlbGVjdEZvckl0ZW0oaXRlbSl9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGFibGVTZWxlY3QgbGV0LXNlbGVjdGFibGU9XCJzZWxlY3RhYmxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGRlc3ktc2VsZWN0IFtpZF09XCJnZXRJZEhlYWRlclNlbGVjdChpSGVhZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsRGF0YV09XCJ7IHRleHQ6ICdGaWx0cmFyIGVuIGVzdGEgY29sdW1uYScsIGNsYXNzZXM6ICdzci1vbmx5JyB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc2VzXT1cInNlbGVjdGFibGUuY2xhc3NlcyA/IHNlbGVjdGFibGUuY2xhc3NlcyA6ICdjLXNlbGVjdC0tc20gdy1mdWxsIG10LTAnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtR3JvdXBDbGFzc2VzXT1cInNlbGVjdGFibGUuZm9ybUdyb3VwQ2xhc3NlcyA/IHNlbGVjdGFibGUuZm9ybUdyb3VwQ2xhc3NlcyA6ICdtYi0wJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJzZWxlY3RhYmxlLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImdldEl0ZW1TZWxlY3RPcHRpb25zKHNlbGVjdGFibGUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzZWxlY3RhYmxlLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkZXNjcmliZWRCeV09XCJnZXRJZEhlYWRlclNlbGVjdChpSGVhZClcIlxuXG4gICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cIml0ZW0udmFsdWVTZWxlY3RcIiAobmdNb2RlbENoYW5nZSk9XCJoYW5kbGVJbnB1dFNlYXJjaChpdGVtKVwiXG5cbiAgICAgICAgICAgICAgICAgICAgICAgIFtyb2xlXT1cInNlbGVjdGFibGUucm9sZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXJpYUxhYmVsXT1cInNlbGVjdGFibGUuYXJpYUxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthcmlhRGVzY3JpYmVkQnldPVwic2VsZWN0YWJsZS5hcmlhRGVzY3JpYmVkQnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FyaWFMYWJlbGxlZEJ5XT1cInNlbGVjdGFibGUuYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FyaWFIaWRkZW5dPVwic2VsZWN0YWJsZS5hcmlhSGlkZGVuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthcmlhRGlzYWJsZWRdPVwic2VsZWN0YWJsZS5hcmlhRGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FyaWFDb250cm9sc109XCJzZWxlY3RhYmxlLmFyaWFDb250cm9sc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXJpYUN1cnJlbnRdPVwic2VsZWN0YWJsZS5hcmlhQ3VycmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXJpYUxpdmVdPVwic2VsZWN0YWJsZS5hcmlhTGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXJpYUV4cGFuZGVkXT1cInNlbGVjdGFibGUuYXJpYUV4cGFuZGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthcmlhRXJyb3JNZXNzYWdlXT1cInNlbGVjdGFibGUuYXJpYUVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXJpYUhhc1BvcHVwXT1cInNlbGVjdGFibGUuYXJpYUhhc1BvcHVwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJzZWxlY3RhYmxlLnRhYmluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kZXN5LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXRlbS5oYXNTZWxlY3QgJiYgaXRlbS5oYXNGaWx0ZXJcIiBjbGFzcz1cInBiLXNtXCI+PC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxkZXN5LXNlYXJjaC1iYXIgKm5nSWY9XCJpdGVtLmhhc0ZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS52YWx1ZUZpbHRlclwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2tFdmVudCk9XCJoYW5kbGVJbnB1dFNlYXJjaChpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImhhbmRsZUlucHV0U2VhcmNoKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxUZXh0PVwiQnVzY2FyIGVuIGVzdGEgY29sdW1uYVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRJZEhlYWRlckZpbHRlcihpSGVhZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkJ1c2NhclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc2VzXT1cIlsnYy1pbnB1dC0tc20nLCBpdGVtLmZpbHRlckNsYXNzZXNdIHwgbWFrZUh0bWxMaXN0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0dG9uQ2xhc3Nlcz1cIm0teHMgcC0wLjUgdGV4dC14c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkZXNjcmliZWRCeV09XCJnZXRJZEhlYWRlcihpSGVhZClcIj4gPC9kZXN5LXNlYXJjaC1iYXI+XG4gICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgPC90cj5cblxuXG4gICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCByb3cgb2YgZ2V0VmlzaWJsZVJvd3MoKTsgaW5kZXggYXMgaVJvd1wiIGNsYXNzPVwiYm9yZGVyLXQgYm9yZGVyLWIgYm9yZGVyLW5ldXRyYWwtYmFzZSBob3ZlcjpiZy1uZXV0cmFsLWxpZ2h0ZXJcIlxuICAgICAgICAgICAgICBbZGVzeVJvd109XCJyb3dcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2JnLW5ldXRyYWwtbGlnaHQnOiBoYXNDaGVja2JveGVzICYmIHJvdy5jaGVja2VkIH1cIj5cbiAgICAgICAgICAgICAgPHRkICpuZ0lmPVwiaGFzQ2hlY2tib3hlc1wiIGRlc3lGb2N1c0NsaWNrZWRDZWxsIFtjbGFzc109XCJbJ3B4LWJhc2UgcHktc20nLCBjaGVja2JveENsYXNzZXNdIHwgbWFrZUh0bWxMaXN0XCJcbiAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIiA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImMtY2hlY2tib3hlcyBjLWNoZWNrYm94ZXMtLXNtXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgZmxleCBpdGVtcy1zdGFydFwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBteC1zbVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGNsYXNzPVwidy02IGgtNiB0cmFuc2l0aW9uIGR1cmF0aW9uLTE1MCBlYXNlLWluLW91dCBib3JkZXItYmxhY2sgZm9jdXM6Ym9yZGVyLWJsYWNrIGZvY3VzOnNoYWRvdy1vdXRsaW5lLWZvY3VzLWlucHV0IGZvY3VzOnJpbmctNCBmb2N1czpyaW5nLW9mZnNldC0wIGZvY3VzOnJpbmctd2FybmluZy1iYXNlIGRpc2FibGVkOmJnLW5ldXRyYWwtbGlnaHQgZGlzYWJsZWQ6Ym9yZGVyLW5ldXRyYWwtYmFzZSB0ZXh0LXByaW1hcnktYmFzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJyb3cuY2hlY2tlZFwiIChuZ01vZGVsQ2hhbmdlKT1cImhhbmRsZUNoZWNrYm94Q2hhbmdlKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJnZXRJZFJvd0NoZWNrYm94KGlSb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV09XCJnZXRJZFJvd0NoZWNrYm94KGlSb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidGaWxhICcgKyBpUm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInB0LTAuNSBsZWFkaW5nLTVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInNyLW9ubHkgYmxvY2sgdGV4dC1zbSAtbXQtMVwiIFtmb3JdPVwiZ2V0SWRSb3dDaGVja2JveChpUm93KVwiPlNlbGVjY2lvbmEgZmlsYSB7eyBpUm93IH19PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2VsbCBvZiByb3cuY2VsbHNMaXN0OyBmaXJzdCBhcyBpc0ZpcnN0Q2VsbDsgaW5kZXggYXMgY29sdW1uSW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgIDx0aCAqbmdJZj1cImZpcnN0Q2VsbElzSGVhZGVyICYmIGlzRmlyc3RDZWxsOyBlbHNlIGVsc2VUZFwiIHNjb3BlPVwicm93XCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiWydweC1iYXNlIHB5LXhzIGJvcmRlci1uZXV0cmFsLWJhc2UgYm9yZGVyLWItMCBib3JkZXItciB0ZXh0LWxlZnQgZm9udC1ub3JtYWwgdGV4dC1zbSB0ZXh0LW5ldXRyYWwtZGFyaycsIGNlbGwuY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICAgICAgICAgICAgICAgIGRlc3lDZWxsIFtyb3ddPVwicm93XCIgW3Jvd0luZGV4XT1cImlSb3dcIiBbY29sdW1uSW5kZXhdPVwiY29sdW1uSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY2VsbC5jb2xzcGFuID8gY2VsbC5jb2xzcGFuICA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnJvd3NwYW5dPVwiY2VsbC5yb3dzcGFuID8gY2VsbC5yb3dzcGFuICA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImNlbGwuaWQgPyBjZWxsLmlkIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2F0dHIucm9sZV09XCJjZWxsLnJvbGUgPyBjZWxsLnJvbGUgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImNlbGwuYXJpYUxhYmVsID8gY2VsbC5hcmlhTGFiZWwgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImNlbGwuYXJpYURlc2NyaWJlZEJ5ID8gY2VsbC5hcmlhRGVzY3JpYmVkQnkgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiY2VsbC5hcmlhTGFiZWxsZWRCeSA/IGNlbGwuYXJpYUxhYmVsbGVkQnkgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWhpZGRlbl09XCJjZWxsLmFyaWFIaWRkZW4gPyBjZWxsLmFyaWFIaWRkZW4gOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImNlbGwuYXJpYURpc2FibGVkID8gY2VsbC5hcmlhRGlzYWJsZWQgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cImNlbGwuYXJpYUNvbnRyb2xzID8gY2VsbC5hcmlhQ29udHJvbHMgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiY2VsbC5hcmlhQ3VycmVudCA/IGNlbGwuYXJpYUN1cnJlbnQgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxpdmVdPVwiY2VsbC5hcmlhTGl2ZSA/IGNlbGwuYXJpYUxpdmUgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cImNlbGwuYXJpYUV4cGFuZGVkID8gY2VsbC5hcmlhRXhwYW5kZWQgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWVycm9ybWVzc2FnZV09XCJjZWxsLmFyaWFFcnJvck1lc3NhZ2UgPyBjZWxsLmFyaWFFcnJvck1lc3NhZ2UgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cImNlbGwuYXJpYUhhc1BvcHVwID8gY2VsbC5hcmlhSGFzUG9wdXAgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXR0ci50YWJpbmRleF09XCJjZWxsLnRhYmluZGV4ID8gY2VsbC50YWJpbmRleCA6IG51bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBjZWxsLCBodG1sOiBjZWxsLmh0bWwsIHRleHQ6IGNlbGwudGV4dCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNlbHNlVGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPHRkIHRhYmluZGV4PVwiLTFcIiBkZXN5Rm9jdXNDbGlja2VkQ2VsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiWydweC1iYXNlIHB5LXNtJywgY2VsbC5jbGFzc2VzXSB8IG1ha2VIdG1sTGlzdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3lDZWxsIFtyb3ddPVwicm93XCIgW3Jvd0luZGV4XT1cImlSb3dcIiBbY29sdW1uSW5kZXhdPVwiY29sdW1uSW5kZXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5jb2xzcGFuXT1cImNlbGwuY29sc3BhbiA/IGNlbGwuY29sc3BhbiAgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIucm93c3Bhbl09XCJjZWxsLnJvd3NwYW4gPyBjZWxsLnJvd3NwYW4gIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmlkXT1cImNlbGwuaWQgPyBjZWxsLmlkIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnJvbGVdPVwiY2VsbC5yb2xlID8gY2VsbC5yb2xlIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiY2VsbC5hcmlhTGFiZWwgPyBjZWxsLmFyaWFMYWJlbCA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XT1cImNlbGwuYXJpYURlc2NyaWJlZEJ5ID8gY2VsbC5hcmlhRGVzY3JpYmVkQnkgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImNlbGwuYXJpYUxhYmVsbGVkQnkgPyBjZWxsLmFyaWFMYWJlbGxlZEJ5IDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtaGlkZGVuXT1cImNlbGwuYXJpYUhpZGRlbiA/IGNlbGwuYXJpYUhpZGRlbiA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cImNlbGwuYXJpYURpc2FibGVkID8gY2VsbC5hcmlhRGlzYWJsZWQgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jb250cm9sc109XCJjZWxsLmFyaWFDb250cm9scyA/IGNlbGwuYXJpYUNvbnRyb2xzIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtY3VycmVudF09XCJjZWxsLmFyaWFDdXJyZW50ID8gY2VsbC5hcmlhQ3VycmVudCA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxpdmVdPVwiY2VsbC5hcmlhTGl2ZSA/IGNlbGwuYXJpYUxpdmUgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJjZWxsLmFyaWFFeHBhbmRlZCA/IGNlbGwuYXJpYUV4cGFuZGVkIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZXJyb3JtZXNzYWdlXT1cImNlbGwuYXJpYUVycm9yTWVzc2FnZSA/IGNlbGwuYXJpYUVycm9yTWVzc2FnZSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWhhc3BvcHVwXT1cImNlbGwuYXJpYUhhc1BvcHVwID8gY2VsbC5hcmlhSGFzUG9wdXAgOiBudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiY2VsbC50YWJpbmRleCA/IGNlbGwudGFiaW5kZXggOiAtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBjZWxsLCBodG1sOiBjZWxsLmh0bWwsIHRleHQ6IGNlbGwudGV4dCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvdHI+XG4gICAgICA8L3Rib2R5PlxuICA8L3RhYmxlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiAqbmdJZj1cIndyYXBwZXI7IGVsc2UgdGFibGVDb250ZW50XCIgW2NsYXNzXT1cIndyYXBwZXIuY2xhc3Nlc1wiPlxuICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFibGVDb250ZW50XCI+PC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==
|