desy-angular 14.2.0 → 15.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/fesm2022/desy-angular.mjs +1290 -821
- package/fesm2022/desy-angular.mjs.map +1 -1
- package/index.d.ts +3 -0
- package/lib/desy-forms/components/character-count/character-count.component.d.ts +1 -8
- package/lib/desy-forms/components/checkboxes/checkboxes-parent.component.d.ts +8 -0
- package/lib/desy-forms/components/checkboxes/checkboxes.component.d.ts +26 -0
- package/lib/desy-forms/components/date-input/date-input.component.d.ts +13 -7
- package/lib/desy-forms/components/datepicker/datepicker.component.d.ts +1 -5
- package/lib/desy-forms/components/fieldset/fieldset.component.d.ts +7 -0
- package/lib/desy-forms/components/file-upload/file-upload.component.d.ts +5 -0
- package/lib/desy-forms/components/input/input.component.d.ts +1 -4
- package/lib/desy-forms/components/input-group/input-group.component.d.ts +7 -0
- package/lib/desy-forms/components/label/label.component.d.ts +1 -2
- package/lib/desy-forms/components/radios/radios-parent.component.d.ts +8 -0
- package/lib/desy-forms/components/radios/radios.component.d.ts +26 -0
- package/lib/desy-forms/components/search-bar/search-bar.component.d.ts +1 -2
- package/lib/desy-forms/components/select/option/option.component.d.ts +1 -2
- package/lib/desy-forms/components/textarea/textarea.component.d.ts +1 -3
- package/lib/desy-forms/components/tree/tree-item/tree-item.component.d.ts +4 -0
- package/lib/desy-forms/components/tree/tree.component.d.ts +62 -2
- package/lib/desy-forms/directives/condition.directive.d.ts +5 -0
- package/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.d.ts +7 -0
- package/lib/desy-nav/components/menubar/menubar.component.d.ts +7 -0
- package/lib/desy-tables/components/table-advanced/table-advanced.component.d.ts +55 -0
- package/lib/desy-tables/directives/cell.directive.d.ts +3 -0
- package/lib/desy-tables/directives/row.directive.d.ts +7 -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 +8 -0
- package/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.d.ts +6 -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 +4 -0
- package/lib/shared/decorators/desy-content-child.decorator.d.ts +11 -0
- package/lib/shared/decorators/desy-on-input-change.decorator.d.ts +4 -0
- package/lib/shared/directives/content-change.directive.d.ts +4 -0
- package/lib/shared/directives/custom-inner-content.directive.d.ts +6 -0
- package/lib/shared/pipes/external-href.pipe.d.ts +4 -0
- package/lib/shared/utils/search-utils.d.ts +10 -0
- package/lib/shared/utils/string-utils.d.ts +7 -0
- package/package.json +9 -11
- package/esm2022/desy-angular.mjs +0 -2
- package/esm2022/lib/desy-angular.module.mjs +0 -76
- package/esm2022/lib/desy-buttons/components/button/button.component.mjs +0 -118
- package/esm2022/lib/desy-buttons/components/button-loader/button-loader.component.mjs +0 -66
- package/esm2022/lib/desy-buttons/components/dropdown/dropdown.component.mjs +0 -159
- package/esm2022/lib/desy-buttons/components/listbox/listbox-item/listbox-item.component.mjs +0 -39
- package/esm2022/lib/desy-buttons/components/listbox/listbox-label/listbox-label.component.mjs +0 -14
- package/esm2022/lib/desy-buttons/components/listbox/listbox.component.mjs +0 -334
- package/esm2022/lib/desy-buttons/components/pill/pill.component.mjs +0 -83
- package/esm2022/lib/desy-buttons/components/toggle/toggle-off-state/toggle-off-state.component.mjs +0 -17
- package/esm2022/lib/desy-buttons/components/toggle/toggle-on-state/toggle-on-state.component.mjs +0 -17
- package/esm2022/lib/desy-buttons/components/toggle/toggle.component.mjs +0 -62
- package/esm2022/lib/desy-buttons/desy-buttons.module.mjs +0 -70
- package/esm2022/lib/desy-buttons/interfaces/listbox-item-data.mjs +0 -2
- package/esm2022/lib/desy-buttons/interfaces/listbox-label-data.mjs +0 -2
- package/esm2022/lib/desy-commons/components/content/content.component.mjs +0 -14
- package/esm2022/lib/desy-commons/components/description/description.component.mjs +0 -19
- package/esm2022/lib/desy-commons/components/divider/divider.component.mjs +0 -16
- package/esm2022/lib/desy-commons/components/icon/icon.component.mjs +0 -16
- package/esm2022/lib/desy-commons/components/title/title.component.mjs +0 -17
- package/esm2022/lib/desy-commons/desy-commons.module.mjs +0 -24
- package/esm2022/lib/desy-commons/interfaces/content-data.mjs +0 -2
- package/esm2022/lib/desy-commons/interfaces/description-data.mjs +0 -2
- package/esm2022/lib/desy-commons/interfaces/divider-data.mjs +0 -2
- package/esm2022/lib/desy-commons/interfaces/icon-data.mjs +0 -2
- package/esm2022/lib/desy-commons/interfaces/index.mjs +0 -6
- package/esm2022/lib/desy-commons/interfaces/title-data.mjs +0 -2
- package/esm2022/lib/desy-forms/components/character-count/character-count.component.mjs +0 -156
- package/esm2022/lib/desy-forms/components/checkboxes/checkbox-item/checkbox-item.component.mjs +0 -191
- package/esm2022/lib/desy-forms/components/checkboxes/checkboxes-parent.component.mjs +0 -15
- package/esm2022/lib/desy-forms/components/checkboxes/checkboxes.component.mjs +0 -275
- package/esm2022/lib/desy-forms/components/date-input/date-input-day/date-input-day.component.mjs +0 -55
- package/esm2022/lib/desy-forms/components/date-input/date-input-divider/date-input-divider.component.mjs +0 -19
- package/esm2022/lib/desy-forms/components/date-input/date-input-item/date-input-item.component.mjs +0 -42
- package/esm2022/lib/desy-forms/components/date-input/date-input-month/date-input-month.component.mjs +0 -55
- package/esm2022/lib/desy-forms/components/date-input/date-input-year/date-input-year.component.mjs +0 -51
- package/esm2022/lib/desy-forms/components/date-input/date-input.component.mjs +0 -303
- package/esm2022/lib/desy-forms/components/datepicker/datepicker.component.mjs +0 -190
- package/esm2022/lib/desy-forms/components/datepicker/datepicker.pipe.mjs +0 -34
- package/esm2022/lib/desy-forms/components/error-message/error-message.component.mjs +0 -32
- package/esm2022/lib/desy-forms/components/fieldset/fieldset.component.mjs +0 -59
- package/esm2022/lib/desy-forms/components/fieldset/legend/legend.component.mjs +0 -34
- package/esm2022/lib/desy-forms/components/file-upload/file-upload.component.mjs +0 -78
- package/esm2022/lib/desy-forms/components/form-field/form-field.component.mjs +0 -127
- package/esm2022/lib/desy-forms/components/hint/hint.component.mjs +0 -30
- package/esm2022/lib/desy-forms/components/input/input.component.mjs +0 -110
- package/esm2022/lib/desy-forms/components/input-group/input-group-divider/input-group-divider.component.mjs +0 -20
- package/esm2022/lib/desy-forms/components/input-group/input-group-input/input-group-input.component.mjs +0 -59
- package/esm2022/lib/desy-forms/components/input-group/input-group-item/input-group-item.component.mjs +0 -42
- package/esm2022/lib/desy-forms/components/input-group/input-group-select/input-group-select.component.mjs +0 -51
- package/esm2022/lib/desy-forms/components/input-group/input-group.component.mjs +0 -232
- package/esm2022/lib/desy-forms/components/label/label.component.mjs +0 -39
- package/esm2022/lib/desy-forms/components/radios/radio-item/radio-item.component.mjs +0 -138
- package/esm2022/lib/desy-forms/components/radios/radios-parent.component.mjs +0 -15
- package/esm2022/lib/desy-forms/components/radios/radios.component.mjs +0 -286
- package/esm2022/lib/desy-forms/components/search-bar/search-bar.component.mjs +0 -65
- package/esm2022/lib/desy-forms/components/select/option/option.component.mjs +0 -22
- package/esm2022/lib/desy-forms/components/select/option-group/option-group.component.mjs +0 -18
- package/esm2022/lib/desy-forms/components/select/select-item/select-item.component.mjs +0 -14
- package/esm2022/lib/desy-forms/components/select/select.component.mjs +0 -94
- package/esm2022/lib/desy-forms/components/template-driven-wrapper/template-driven-wrapper.component.mjs +0 -12
- package/esm2022/lib/desy-forms/components/textarea/textarea.component.mjs +0 -86
- package/esm2022/lib/desy-forms/components/tree/interfaces/itree-item.mjs +0 -3
- package/esm2022/lib/desy-forms/components/tree/interfaces/quit-tree-item-focus-options.mjs +0 -2
- package/esm2022/lib/desy-forms/components/tree/tree-checkbox/tree-checkbox.component.mjs +0 -174
- package/esm2022/lib/desy-forms/components/tree/tree-item/tree-item.component.mjs +0 -381
- package/esm2022/lib/desy-forms/components/tree/tree-items-generator/tree-items-generator.component.mjs +0 -25
- package/esm2022/lib/desy-forms/components/tree/tree-sub/tree-sub.component.mjs +0 -16
- package/esm2022/lib/desy-forms/components/tree/tree.component.mjs +0 -362
- package/esm2022/lib/desy-forms/desy-forms.module.mjs +0 -223
- package/esm2022/lib/desy-forms/directives/condition.directive.mjs +0 -34
- package/esm2022/lib/desy-forms/interfaces/error-message-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/fieldset-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/hint-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/index.mjs +0 -13
- package/esm2022/lib/desy-forms/interfaces/item-checkbox-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/item-date-input-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/item-divider-date-input-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/item-divider-input-group-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/item-input-group-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/item-radio-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/item-radio-with-template-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/label-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/legend-data.mjs +0 -2
- package/esm2022/lib/desy-forms/interfaces/select-item-data.mjs +0 -2
- package/esm2022/lib/desy-modals/components/dialog/dialog.component.mjs +0 -155
- package/esm2022/lib/desy-modals/components/modal/modal-button-loader-primary/modal-button-loader-primary.component.mjs +0 -25
- package/esm2022/lib/desy-modals/components/modal/modal-button-loader-secondary/modal-button-loader-secondary.component.mjs +0 -23
- package/esm2022/lib/desy-modals/components/modal/modal-button-primary/modal-button-primary.component.mjs +0 -23
- package/esm2022/lib/desy-modals/components/modal/modal-button-secondary/modal-button-secondary.component.mjs +0 -23
- package/esm2022/lib/desy-modals/components/modal/modal.component.mjs +0 -192
- package/esm2022/lib/desy-modals/desy-modals.module.mjs +0 -50
- package/esm2022/lib/desy-modals/interfaces/dialog-options.mjs +0 -2
- package/esm2022/lib/desy-modals/interfaces/index.mjs +0 -7
- package/esm2022/lib/desy-modals/interfaces/modal-button-data.mjs +0 -2
- package/esm2022/lib/desy-modals/interfaces/modal-data.mjs +0 -2
- package/esm2022/lib/desy-modals/interfaces/modal-icon-data.mjs +0 -2
- package/esm2022/lib/desy-modals/interfaces/modal-options.mjs +0 -2
- package/esm2022/lib/desy-modals/interfaces/open-dialog-result.mjs +0 -2
- package/esm2022/lib/desy-modals/services/dialog.service.mjs +0 -114
- package/esm2022/lib/desy-nav/components/breadcrumbs/breadcrumbs-item/breadcrumbs-item.component.mjs +0 -16
- package/esm2022/lib/desy-nav/components/breadcrumbs/breadcrumbs.component.mjs +0 -53
- package/esm2022/lib/desy-nav/components/error-summary/error-summary-item/error-summary-item.component.mjs +0 -19
- package/esm2022/lib/desy-nav/components/error-summary/error-summary.component.mjs +0 -67
- package/esm2022/lib/desy-nav/components/footer/footer-meta/footer-meta-item/footer-meta-item.component.mjs +0 -25
- package/esm2022/lib/desy-nav/components/footer/footer-meta/footer-meta.component.mjs +0 -31
- package/esm2022/lib/desy-nav/components/footer/footer-navigation/footer-navigation-item/footer-navigation-item.component.mjs +0 -25
- package/esm2022/lib/desy-nav/components/footer/footer-navigation/footer-navigation.component.mjs +0 -21
- package/esm2022/lib/desy-nav/components/footer/footer.component.mjs +0 -91
- package/esm2022/lib/desy-nav/components/header/header-custom-navigation/header-custom-navigation.component.mjs +0 -15
- package/esm2022/lib/desy-nav/components/header/header-dropdown/header-dropdown.component.mjs +0 -46
- package/esm2022/lib/desy-nav/components/header/header-mobileText/header-mobile-text.component.mjs +0 -336
- package/esm2022/lib/desy-nav/components/header/header-navigation/header-navigation-item/header-navigation-item.component.mjs +0 -31
- package/esm2022/lib/desy-nav/components/header/header-navigation/header-navigation.component.mjs +0 -36
- package/esm2022/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-button/header-offcanvas-button.component.mjs +0 -20
- package/esm2022/lib/desy-nav/components/header/header-offcanvas/header-offcanvas-close-button/header-offcanvas-close-button.component.mjs +0 -15
- package/esm2022/lib/desy-nav/components/header/header-offcanvas/header-offcanvas.component.mjs +0 -93
- package/esm2022/lib/desy-nav/components/header/header-subnav/header-subnav.component.mjs +0 -41
- package/esm2022/lib/desy-nav/components/header/header.component.mjs +0 -119
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-custom-navigation/header-custom-navigation.component.mjs +0 -14
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-dropdown/header-advanced-dropdown.component.mjs +0 -38
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-logo/header-advanced-logo.component.mjs +0 -37
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-sub/header-advanced-sub.component.mjs +0 -42
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-subtitle/header-advanced-subtitle.component.mjs +0 -14
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-super/header-advanced-super.component.mjs +0 -42
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-title/header-advanced-title.component.mjs +0 -19
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced-title-container/header-advanced-title-container.component.mjs +0 -38
- package/esm2022/lib/desy-nav/components/header-advanced/header-advanced.component.mjs +0 -54
- package/esm2022/lib/desy-nav/components/header-mini/header-mini.component.mjs +0 -32
- package/esm2022/lib/desy-nav/components/links-list/links-list-icon-right/links-list-icon-right.component.mjs +0 -16
- package/esm2022/lib/desy-nav/components/links-list/links-list-item/links-list-item.component.mjs +0 -46
- package/esm2022/lib/desy-nav/components/links-list/links-list-item-sub/links-list-item-sub.component.mjs +0 -14
- package/esm2022/lib/desy-nav/components/links-list/links-list.component.mjs +0 -44
- package/esm2022/lib/desy-nav/components/menu-horizontal/menu-horizontal-item/menu-horizontal-item.component.mjs +0 -42
- package/esm2022/lib/desy-nav/components/menu-horizontal/menu-horizontal.component.mjs +0 -76
- package/esm2022/lib/desy-nav/components/menu-navigation/components/menu-navigation-item/menu-navigation-item.component.mjs +0 -55
- package/esm2022/lib/desy-nav/components/menu-navigation/components/menu-navigation-subitem/menu-navigation-subitem.component.mjs +0 -49
- package/esm2022/lib/desy-nav/components/menu-navigation/menu-navigation.component.mjs +0 -858
- package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical-item/menu-vertical-item.component.mjs +0 -44
- package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub/menu-vertical-item-sub.component.mjs +0 -18
- package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical-item-sub-item/menu-vertical-item-sub-item.component.mjs +0 -34
- package/esm2022/lib/desy-nav/components/menu-vertical/menu-vertical.component.mjs +0 -98
- package/esm2022/lib/desy-nav/components/menubar/components/menubar-item/menubar-item.component.mjs +0 -51
- package/esm2022/lib/desy-nav/components/menubar/components/menubar-label/menubar-label.component.mjs +0 -14
- package/esm2022/lib/desy-nav/components/menubar/components/menubar-subitem/menubar-subitem.component.mjs +0 -36
- package/esm2022/lib/desy-nav/components/menubar/components/menubar-subsubitem/menubar-subsubitem.component.mjs +0 -27
- package/esm2022/lib/desy-nav/components/menubar/directives/menubaritem.directive.mjs +0 -47
- package/esm2022/lib/desy-nav/components/menubar/menubar.component.mjs +0 -966
- package/esm2022/lib/desy-nav/components/nav/nav-item/nav-item.component.mjs +0 -43
- package/esm2022/lib/desy-nav/components/nav/nav.component.mjs +0 -115
- package/esm2022/lib/desy-nav/components/notification/notification-item/notification-item.component.mjs +0 -25
- package/esm2022/lib/desy-nav/components/notification/notification.component.mjs +0 -127
- package/esm2022/lib/desy-nav/components/skip-link/skip-link.component.mjs +0 -62
- package/esm2022/lib/desy-nav/desy-nav.module.mjs +0 -290
- package/esm2022/lib/desy-nav/directives/dynamic-heading.directive.mjs +0 -40
- package/esm2022/lib/desy-nav/interfaces/breadcrumbs.data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/error-summary-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/footer-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/footer-logo.mjs +0 -10
- package/esm2022/lib/desy-nav/interfaces/header-advanced-logo.mjs +0 -7
- package/esm2022/lib/desy-nav/interfaces/header-dropdown-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/header-mobile-text-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/header-navigation-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/header-navigation-item-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/header-offcanvas-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/header-skiplink-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/header-subnav-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/index.mjs +0 -21
- package/esm2022/lib/desy-nav/interfaces/menu-horizontal-item-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/menu-horizontal-item-event-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/menu-navigation-item-sub-item-sub-item.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/menu-navigation-item-sub-item.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/menu-navigation.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/menu-vertical-items-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/menu-vertical-sub-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/menu-vertical-sub-items-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/menubar-item-sub-item-sub-item.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/menubar-item-sub-item.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/menubar-item-sub.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/menubar-item.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/nav-item-event.data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/nav-item.data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/notification-items-data.mjs +0 -2
- package/esm2022/lib/desy-nav/interfaces/notification-options.mjs +0 -2
- package/esm2022/lib/desy-pagination/components/pagination/pagination.component.mjs +0 -242
- package/esm2022/lib/desy-pagination/components/pagination-item-perpage/pagination-item-perpage.component.mjs +0 -19
- package/esm2022/lib/desy-pagination/components/pagination-listbox-label/pagination-listbox-label.component.mjs +0 -17
- package/esm2022/lib/desy-pagination/desy-pagination.module.mjs +0 -25
- package/esm2022/lib/desy-pagination/interfaces/pagination-item.data.mjs +0 -2
- package/esm2022/lib/desy-tables/components/table/components/table-caption.component.mjs +0 -17
- package/esm2022/lib/desy-tables/components/table/components/table-cell.component.mjs +0 -23
- package/esm2022/lib/desy-tables/components/table/components/table-footer.component.mjs +0 -18
- package/esm2022/lib/desy-tables/components/table/components/table-header.component.mjs +0 -18
- package/esm2022/lib/desy-tables/components/table/components/table-row.component.mjs +0 -18
- package/esm2022/lib/desy-tables/components/table/table.component.mjs +0 -120
- package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-footer-cell.component.mjs +0 -23
- package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-footer.component.mjs +0 -27
- package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-header-cell.component.mjs +0 -56
- package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-header.component.mjs +0 -18
- package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-row-cell.component.mjs +0 -23
- package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-row.component.mjs +0 -27
- package/esm2022/lib/desy-tables/components/table-advanced/components/table-advanced-select.component.mjs +0 -28
- package/esm2022/lib/desy-tables/components/table-advanced/table-advanced.component.mjs +0 -516
- package/esm2022/lib/desy-tables/desy-tables.module.mjs +0 -100
- package/esm2022/lib/desy-tables/directives/cell.directive.mjs +0 -25
- package/esm2022/lib/desy-tables/directives/focus-clicked-cell.directive.mjs +0 -89
- package/esm2022/lib/desy-tables/directives/row.directive.mjs +0 -22
- package/esm2022/lib/desy-tables/interfaces/cell-data.mjs +0 -2
- package/esm2022/lib/desy-tables/interfaces/head-cell-data.mjs +0 -7
- package/esm2022/lib/desy-tables/interfaces/index.mjs +0 -5
- package/esm2022/lib/desy-tables/interfaces/recalculate-table-params.mjs +0 -2
- package/esm2022/lib/desy-tables/interfaces/row-data.mjs +0 -2
- package/esm2022/lib/desy-tables/interfaces/wrapper-data.mjs +0 -2
- package/esm2022/lib/desy-views/components/accordion/accordion-header/accordion-header.component.mjs +0 -17
- package/esm2022/lib/desy-views/components/accordion/accordion-item/accordion-item.component.mjs +0 -61
- package/esm2022/lib/desy-views/components/accordion/accordion.component.mjs +0 -447
- package/esm2022/lib/desy-views/components/accordion-history/accordion-history-item/accordion-history-item.component.mjs +0 -41
- package/esm2022/lib/desy-views/components/accordion-history/accordion-history.component.mjs +0 -20
- package/esm2022/lib/desy-views/components/accordion-history/accordion-item-hide-button/accordion-item-hide-button.component.mjs +0 -17
- package/esm2022/lib/desy-views/components/accordion-history/accordion-item-show-button/accordion-item-show-button.component.mjs +0 -17
- package/esm2022/lib/desy-views/components/alert/alert.component.mjs +0 -82
- package/esm2022/lib/desy-views/components/card/card-sectors/card-left.component.mjs +0 -21
- package/esm2022/lib/desy-views/components/card/card-sectors/card-right.component.mjs +0 -21
- package/esm2022/lib/desy-views/components/card/card-sectors/card-sub.component.mjs +0 -21
- package/esm2022/lib/desy-views/components/card/card-sectors/card-super.component.mjs +0 -21
- package/esm2022/lib/desy-views/components/card/card.component.mjs +0 -48
- package/esm2022/lib/desy-views/components/collapsible/collapsible.component.mjs +0 -66
- package/esm2022/lib/desy-views/components/description-list/definition/definition.component.mjs +0 -19
- package/esm2022/lib/desy-views/components/description-list/description-item/description-item.component.mjs +0 -36
- package/esm2022/lib/desy-views/components/description-list/description-list.component.mjs +0 -29
- package/esm2022/lib/desy-views/components/description-list/term/term.component.mjs +0 -19
- package/esm2022/lib/desy-views/components/details/details.component.mjs +0 -43
- package/esm2022/lib/desy-views/components/item/item-content-bottom/item-content-bottom.component.mjs +0 -17
- package/esm2022/lib/desy-views/components/item/item-content-right/item-content-right.component.mjs +0 -15
- package/esm2022/lib/desy-views/components/item/item-item/item-item.component.mjs +0 -15
- package/esm2022/lib/desy-views/components/item/item.component.mjs +0 -122
- package/esm2022/lib/desy-views/components/media-object/media-object-figure/media-object-figure.component.mjs +0 -12
- package/esm2022/lib/desy-views/components/media-object/media-object.component.mjs +0 -369
- package/esm2022/lib/desy-views/components/status/status.component.mjs +0 -366
- package/esm2022/lib/desy-views/components/status-item/status-item.component.mjs +0 -401
- package/esm2022/lib/desy-views/components/tabs/panel/panel.component.mjs +0 -19
- package/esm2022/lib/desy-views/components/tabs/tab-item/tab-item.component.mjs +0 -41
- package/esm2022/lib/desy-views/components/tabs/tabs.component.mjs +0 -446
- package/esm2022/lib/desy-views/components/tooltip/tooltip-content/tooltip-content.component.mjs +0 -12
- package/esm2022/lib/desy-views/components/tooltip/tooltip.component.mjs +0 -450
- package/esm2022/lib/desy-views/desy-views.module.mjs +0 -181
- package/esm2022/lib/desy-views/interfaces/accordion-header.data.mjs +0 -2
- package/esm2022/lib/desy-views/interfaces/accordion-item.data.mjs +0 -2
- package/esm2022/lib/desy-views/interfaces/alert-options.mjs +0 -2
- package/esm2022/lib/desy-views/interfaces/description-item.data.mjs +0 -2
- package/esm2022/lib/desy-views/interfaces/index.mjs +0 -11
- package/esm2022/lib/desy-views/interfaces/open-alert-result.mjs +0 -2
- package/esm2022/lib/desy-views/interfaces/status-data.mjs +0 -2
- package/esm2022/lib/desy-views/interfaces/status-icon-data.mjs +0 -2
- package/esm2022/lib/desy-views/interfaces/status-item-title-data.mjs +0 -2
- package/esm2022/lib/desy-views/interfaces/tabs-items-data.mjs +0 -2
- package/esm2022/lib/desy-views/interfaces/tabs-panel-data.mjs +0 -2
- package/esm2022/lib/desy-views/interfaces/term-definition.data.mjs +0 -2
- package/esm2022/lib/desy-views/services/alert.service.mjs +0 -88
- package/esm2022/lib/shared/components/accessibility/accessibility-attributes.mjs +0 -78
- package/esm2022/lib/shared/components/accessibility/accessibility.component.mjs +0 -164
- package/esm2022/lib/shared/components/accessibility-and-content-required/accessibility-and-content-required.component.mjs +0 -168
- package/esm2022/lib/shared/components/accessibility-and-text-or-html-required/accessibility-and-text-or-html-required.component.mjs +0 -165
- package/esm2022/lib/shared/components/content-base/content-base.component.mjs +0 -21
- package/esm2022/lib/shared/components/index.mjs +0 -7
- package/esm2022/lib/shared/components/spinner/spinner.component.mjs +0 -329
- package/esm2022/lib/shared/components/text-or-html-required/text-or-html-required.component.mjs +0 -18
- package/esm2022/lib/shared/decorators/desy-content-child.decorator.mjs +0 -34
- package/esm2022/lib/shared/decorators/desy-on-input-change.decorator.mjs +0 -15
- package/esm2022/lib/shared/directives/accessibility-directive.mjs +0 -54
- package/esm2022/lib/shared/directives/attribute-change.directive.mjs +0 -50
- package/esm2022/lib/shared/directives/click-outside.directive.mjs +0 -40
- package/esm2022/lib/shared/directives/content-change.directive.mjs +0 -41
- package/esm2022/lib/shared/directives/custom-inner-content.directive.mjs +0 -63
- package/esm2022/lib/shared/directives/inner-content.directive.mjs +0 -37
- package/esm2022/lib/shared/interfaces/accessibility-data.mjs +0 -2
- package/esm2022/lib/shared/pipes/external-href.pipe.mjs +0 -28
- package/esm2022/lib/shared/pipes/inner-html.pipe.mjs +0 -21
- package/esm2022/lib/shared/pipes/make-html-list.pipe.mjs +0 -20
- package/esm2022/lib/shared/shared.module.mjs +0 -86
- package/esm2022/lib/shared/sharedExternal.module.mjs +0 -20
- package/esm2022/lib/shared/utils/focus-utils.mjs +0 -50
- package/esm2022/lib/shared/utils/search-utils.mjs +0 -70
- package/esm2022/lib/shared/utils/string-utils.mjs +0 -13
- package/esm2022/public-api.mjs +0 -225
|
@@ -1,858 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, HostBinding, Input, Output, QueryList, ViewChild, ViewChildren, } from '@angular/core';
|
|
2
|
-
import { AccessibilityComponent } from '../../../shared/components';
|
|
3
|
-
import { MenubaritemDirective } from '../menubar/directives/menubaritem.directive';
|
|
4
|
-
import { MenuNavigationItemComponent } from './components/menu-navigation-item/menu-navigation-item.component';
|
|
5
|
-
import { MenuNavigationSubitemComponent } from './components/menu-navigation-subitem/menu-navigation-subitem.component';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
import * as i1 from "@angular/common";
|
|
8
|
-
import * as i2 from "@angular/router";
|
|
9
|
-
import * as i3 from "../../../shared/directives/attribute-change.directive";
|
|
10
|
-
import * as i4 from "../../../shared/directives/custom-inner-content.directive";
|
|
11
|
-
import * as i5 from "../../../shared/directives/accessibility-directive";
|
|
12
|
-
import * as i6 from "../menubar/directives/menubaritem.directive";
|
|
13
|
-
import * as i7 from "../../../shared/pipes/make-html-list.pipe";
|
|
14
|
-
export class MenuNavigationComponent extends AccessibilityComponent {
|
|
15
|
-
set items(items) {
|
|
16
|
-
this._items = items;
|
|
17
|
-
this.activeItemIfSubItemIsActive(items);
|
|
18
|
-
}
|
|
19
|
-
get items() {
|
|
20
|
-
return this._items;
|
|
21
|
-
}
|
|
22
|
-
constructor(changeDetectorRef) {
|
|
23
|
-
super();
|
|
24
|
-
this.changeDetectorRef = changeDetectorRef;
|
|
25
|
-
this.itemsChange = new EventEmitter();
|
|
26
|
-
this.activeItemChange = new EventEmitter();
|
|
27
|
-
this.activeSubItemChange = new EventEmitter();
|
|
28
|
-
this.cfg = true;
|
|
29
|
-
this.role = null;
|
|
30
|
-
this.ariaLabel = null;
|
|
31
|
-
this.ariaDescribedBy = null;
|
|
32
|
-
this.ariaLabelledBy = null;
|
|
33
|
-
this.ariaHidden = null;
|
|
34
|
-
this.ariaDisabled = null;
|
|
35
|
-
this.ariaControls = null;
|
|
36
|
-
this.ariaCurrent = null;
|
|
37
|
-
this.ariaLive = null;
|
|
38
|
-
this.ariaExpanded = null;
|
|
39
|
-
this.ariaErrorMessage = null;
|
|
40
|
-
this.ariaHasPopup = null;
|
|
41
|
-
this.ariaModal = null;
|
|
42
|
-
this.ariaChecked = null;
|
|
43
|
-
this.ariaPressed = null;
|
|
44
|
-
this.ariaReadonly = null;
|
|
45
|
-
this.ariaRequired = null;
|
|
46
|
-
this.ariaSelected = null;
|
|
47
|
-
this.ariaValuemin = null;
|
|
48
|
-
this.ariaValuemax = null;
|
|
49
|
-
this.ariaValuenow = null;
|
|
50
|
-
this.ariaValuetext = null;
|
|
51
|
-
this.ariaOrientation = null;
|
|
52
|
-
this.ariaLevel = null;
|
|
53
|
-
this.ariaMultiselectable = null;
|
|
54
|
-
this.ariaPlaceholder = null;
|
|
55
|
-
this.ariaPosinset = null;
|
|
56
|
-
this.ariaSetsize = null;
|
|
57
|
-
this.ariaSort = null;
|
|
58
|
-
this.ariaBusy = null;
|
|
59
|
-
this.ariaDropeffect = null;
|
|
60
|
-
this.ariaGrabbed = null;
|
|
61
|
-
this.ariaActivedescendant = null;
|
|
62
|
-
this.ariaAtomic = null;
|
|
63
|
-
this.ariaAutocomplete = null;
|
|
64
|
-
this.ariaBraillelabel = null;
|
|
65
|
-
this.ariaBrailleroledescription = null;
|
|
66
|
-
this.ariaColcount = null;
|
|
67
|
-
this.ariaColindex = null;
|
|
68
|
-
this.ariaColindextext = null;
|
|
69
|
-
this.ariaColspan = null;
|
|
70
|
-
this.ariaDescription = null;
|
|
71
|
-
this.ariaDetails = null;
|
|
72
|
-
this.ariaFlowto = null;
|
|
73
|
-
this.ariaInvalid = null;
|
|
74
|
-
this.ariaKeyshortcuts = null;
|
|
75
|
-
this.ariaOwns = null;
|
|
76
|
-
this.ariaRelevant = null;
|
|
77
|
-
this.ariaRoledescription = null;
|
|
78
|
-
this.ariaRowcount = null;
|
|
79
|
-
this.ariaRowindex = null;
|
|
80
|
-
this.ariaRowindextext = null;
|
|
81
|
-
this.ariaRowspan = null;
|
|
82
|
-
this.tabindex = null;
|
|
83
|
-
this.title = null;
|
|
84
|
-
this.alt = null;
|
|
85
|
-
this.lang = null;
|
|
86
|
-
this.accesskey = null;
|
|
87
|
-
this.autocomplete = null;
|
|
88
|
-
this.autofocus = null;
|
|
89
|
-
this.contenteditable = null;
|
|
90
|
-
this.dir = null;
|
|
91
|
-
this.draggable = null;
|
|
92
|
-
this.enterkeyhint = null;
|
|
93
|
-
this.hidden = null;
|
|
94
|
-
this.inputmode = null;
|
|
95
|
-
this.spellcheck = null;
|
|
96
|
-
this.translate = null;
|
|
97
|
-
this.ariaMultiline = null;
|
|
98
|
-
this.for = null;
|
|
99
|
-
this.form = null;
|
|
100
|
-
this.headers = null;
|
|
101
|
-
this.placeholder = null;
|
|
102
|
-
this.readonly = null;
|
|
103
|
-
this.required = null;
|
|
104
|
-
this.viewInit = false;
|
|
105
|
-
this.currentFocusItemIndex = 0;
|
|
106
|
-
}
|
|
107
|
-
ngOnChanges(changes) {
|
|
108
|
-
if (this.viewInit) {
|
|
109
|
-
this.checkChanges();
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
ngAfterViewInit() {
|
|
113
|
-
this.viewInit = true;
|
|
114
|
-
this.checkChanges();
|
|
115
|
-
this.itemComponentList.changes.subscribe((items) => this.activeItemIfSubItemIsActive(items.toArray()));
|
|
116
|
-
}
|
|
117
|
-
checkChanges() {
|
|
118
|
-
if (!this.menuItems) {
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
this.menuData = [];
|
|
122
|
-
this.getItems().forEach((_, index) => {
|
|
123
|
-
const itemData = {
|
|
124
|
-
open: false,
|
|
125
|
-
currentFocusSubItemIndex: 0,
|
|
126
|
-
currentFocusSubSubItemIndex: 0,
|
|
127
|
-
menuItem: this.menuItems.toArray()[index],
|
|
128
|
-
};
|
|
129
|
-
this.menuData.push(itemData);
|
|
130
|
-
});
|
|
131
|
-
if (this.viewInit) {
|
|
132
|
-
this.checkRequired();
|
|
133
|
-
}
|
|
134
|
-
const lastCurrentFocusItemIndex = this.currentFocusItemIndex;
|
|
135
|
-
const items = this.getItems();
|
|
136
|
-
if (items) {
|
|
137
|
-
while (!this.isItemFocusable(this.currentFocusItemIndex % items.length)) {
|
|
138
|
-
this.currentFocusItemIndex = (this.currentFocusItemIndex + items.length + 1) % items.length;
|
|
139
|
-
if (this.currentFocusItemIndex === lastCurrentFocusItemIndex) {
|
|
140
|
-
break;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
activeItemIfSubItemIsActive(items) {
|
|
146
|
-
items.forEach((item) => {
|
|
147
|
-
let subItems = this.getItemSubitems(item);
|
|
148
|
-
if (subItems instanceof MenuNavigationItemComponent) {
|
|
149
|
-
item.active = subItems.sub.items.filter((subItem) => subItem.active).length > 0;
|
|
150
|
-
}
|
|
151
|
-
else if (item?.sub?.items) {
|
|
152
|
-
item.active = item.sub.items.filter((subItem) => subItem.active).length > 0;
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
handleMenuFocusIn() {
|
|
157
|
-
this.isFocused = true;
|
|
158
|
-
this.changeDetectorRef.detectChanges();
|
|
159
|
-
}
|
|
160
|
-
handleMenuFocusOut(event) {
|
|
161
|
-
if (!this.menunavigation.nativeElement.contains(event.relatedTarget)) {
|
|
162
|
-
this.closeMenu();
|
|
163
|
-
}
|
|
164
|
-
this.isFocused = false;
|
|
165
|
-
this.changeDetectorRef.detectChanges();
|
|
166
|
-
}
|
|
167
|
-
handleMenuItemClick(event, itemIndex) {
|
|
168
|
-
if (this.hasPopupMenu(itemIndex)) {
|
|
169
|
-
event.preventDefault();
|
|
170
|
-
const isOpen = this.menuData[itemIndex].open;
|
|
171
|
-
this.closeMenu();
|
|
172
|
-
if (!isOpen) {
|
|
173
|
-
this.openMenu(itemIndex);
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
this.activateMenuItem(itemIndex);
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
handleMenuItemKeydown(event, itemIndex) {
|
|
181
|
-
switch (event.key) {
|
|
182
|
-
case 'Enter':
|
|
183
|
-
case ' ':
|
|
184
|
-
case 'ArrowDown':
|
|
185
|
-
if (this.hasPopupMenu(itemIndex)) {
|
|
186
|
-
this.openMenu(itemIndex);
|
|
187
|
-
setTimeout(() => this.focusFirstSubItem(itemIndex));
|
|
188
|
-
event.stopPropagation();
|
|
189
|
-
event.preventDefault();
|
|
190
|
-
}
|
|
191
|
-
break;
|
|
192
|
-
case 'Escape':
|
|
193
|
-
if (this.hasPopupMenu(itemIndex)) {
|
|
194
|
-
this.closeMenu(itemIndex);
|
|
195
|
-
}
|
|
196
|
-
event.stopPropagation();
|
|
197
|
-
event.preventDefault();
|
|
198
|
-
break;
|
|
199
|
-
case 'ArrowLeft':
|
|
200
|
-
this.focusNextAvailableItem(itemIndex, -1);
|
|
201
|
-
event.stopPropagation();
|
|
202
|
-
event.preventDefault();
|
|
203
|
-
break;
|
|
204
|
-
case 'ArrowRight':
|
|
205
|
-
this.focusNextAvailableItem(itemIndex, +1);
|
|
206
|
-
event.stopPropagation();
|
|
207
|
-
event.preventDefault();
|
|
208
|
-
break;
|
|
209
|
-
case 'ArrowUp':
|
|
210
|
-
if (this.hasPopupMenu(itemIndex)) {
|
|
211
|
-
this.openMenu(itemIndex);
|
|
212
|
-
setTimeout(() => this.focusLastSubItem(itemIndex));
|
|
213
|
-
}
|
|
214
|
-
event.stopPropagation();
|
|
215
|
-
event.preventDefault();
|
|
216
|
-
break;
|
|
217
|
-
case 'Home':
|
|
218
|
-
case 'PageUp':
|
|
219
|
-
if (this.hasPopupMenu(itemIndex)) {
|
|
220
|
-
this.closeMenu();
|
|
221
|
-
}
|
|
222
|
-
this.focusFirstItem();
|
|
223
|
-
event.stopPropagation();
|
|
224
|
-
event.preventDefault();
|
|
225
|
-
break;
|
|
226
|
-
case 'End':
|
|
227
|
-
case 'PageDown':
|
|
228
|
-
if (this.hasPopupMenu(itemIndex)) {
|
|
229
|
-
this.closeMenu();
|
|
230
|
-
}
|
|
231
|
-
this.focusLastItem();
|
|
232
|
-
event.stopPropagation();
|
|
233
|
-
event.preventDefault();
|
|
234
|
-
break;
|
|
235
|
-
default:
|
|
236
|
-
if (this.isPrintableChar(event.key)) {
|
|
237
|
-
this.focusItemByFirstChar(event.key);
|
|
238
|
-
event.stopPropagation();
|
|
239
|
-
event.preventDefault();
|
|
240
|
-
}
|
|
241
|
-
break;
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
handleMenuItemMouseOver(itemIndex) {
|
|
245
|
-
this.focusItem(itemIndex, true);
|
|
246
|
-
}
|
|
247
|
-
handlePopupMenuItemClick(itemIndex, subItemIndex, subSubItemIndex) {
|
|
248
|
-
this.activatePopupMenuItem(itemIndex, subItemIndex, subSubItemIndex);
|
|
249
|
-
this.focusItem(itemIndex);
|
|
250
|
-
this.closeMenu(itemIndex);
|
|
251
|
-
}
|
|
252
|
-
handlePopupMenuItemKeydown(event, itemIndex, subItemIndex, subSubItemIndex) {
|
|
253
|
-
const currentSubIndex = this.menuData[itemIndex].currentFocusSubItemIndex;
|
|
254
|
-
const currentSubSubIndex = this.menuData[itemIndex].currentFocusSubSubItemIndex;
|
|
255
|
-
const items = this.getItems();
|
|
256
|
-
switch (event.key) {
|
|
257
|
-
case ' ':
|
|
258
|
-
this.activatePopupMenuItem(itemIndex, subItemIndex, subSubItemIndex);
|
|
259
|
-
if (this.mustCloseAfterSelectPopupItem(itemIndex, subItemIndex, subSubItemIndex)) {
|
|
260
|
-
this.closeMenu(itemIndex);
|
|
261
|
-
this.focusItem(itemIndex);
|
|
262
|
-
}
|
|
263
|
-
event.stopPropagation();
|
|
264
|
-
event.preventDefault();
|
|
265
|
-
break;
|
|
266
|
-
case 'Enter':
|
|
267
|
-
this.activatePopupMenuItem(itemIndex, subItemIndex, subSubItemIndex);
|
|
268
|
-
this.closeMenu(itemIndex);
|
|
269
|
-
this.focusItem(itemIndex);
|
|
270
|
-
event.stopPropagation();
|
|
271
|
-
event.preventDefault();
|
|
272
|
-
break;
|
|
273
|
-
case 'Escape':
|
|
274
|
-
this.closeMenu(itemIndex);
|
|
275
|
-
this.focusItem(itemIndex);
|
|
276
|
-
event.stopPropagation();
|
|
277
|
-
event.preventDefault();
|
|
278
|
-
break;
|
|
279
|
-
case 'ArrowUp':
|
|
280
|
-
this.focusNextAvailableSubItem(itemIndex, currentSubIndex, currentSubSubIndex, -1);
|
|
281
|
-
event.stopPropagation();
|
|
282
|
-
event.preventDefault();
|
|
283
|
-
break;
|
|
284
|
-
case 'ArrowDown':
|
|
285
|
-
this.focusNextAvailableSubItem(itemIndex, currentSubIndex, currentSubSubIndex, +1);
|
|
286
|
-
event.stopPropagation();
|
|
287
|
-
event.preventDefault();
|
|
288
|
-
break;
|
|
289
|
-
case 'ArrowLeft':
|
|
290
|
-
this.closeMenu(itemIndex);
|
|
291
|
-
this.focusItem((itemIndex + items.length - 1) % items.length);
|
|
292
|
-
event.stopPropagation();
|
|
293
|
-
event.preventDefault();
|
|
294
|
-
break;
|
|
295
|
-
case 'ArrowRight':
|
|
296
|
-
this.closeMenu(itemIndex);
|
|
297
|
-
this.focusItem((itemIndex + items.length + 1) % items.length);
|
|
298
|
-
event.stopPropagation();
|
|
299
|
-
event.preventDefault();
|
|
300
|
-
break;
|
|
301
|
-
case 'Home':
|
|
302
|
-
case 'PageUp':
|
|
303
|
-
this.focusFirstSubItem(itemIndex);
|
|
304
|
-
event.stopPropagation();
|
|
305
|
-
event.preventDefault();
|
|
306
|
-
break;
|
|
307
|
-
case 'End':
|
|
308
|
-
case 'PageDown':
|
|
309
|
-
this.focusLastSubItem(itemIndex);
|
|
310
|
-
event.stopPropagation();
|
|
311
|
-
event.preventDefault();
|
|
312
|
-
break;
|
|
313
|
-
case 'Tab':
|
|
314
|
-
this.closeMenu(itemIndex);
|
|
315
|
-
this.focusItem(itemIndex);
|
|
316
|
-
break;
|
|
317
|
-
default:
|
|
318
|
-
if (this.isPrintableChar(event.key)) {
|
|
319
|
-
this.focusSubItemByFirstChar(itemIndex, event.key);
|
|
320
|
-
event.stopPropagation();
|
|
321
|
-
event.preventDefault();
|
|
322
|
-
}
|
|
323
|
-
break;
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
handlePopupMenuItemMouseOver(itemIndex, subItemIndex, subSubItemIndex) {
|
|
327
|
-
this.focusSubItem(itemIndex, subItemIndex, subSubItemIndex);
|
|
328
|
-
}
|
|
329
|
-
checkRequired() {
|
|
330
|
-
const items = this.getItems();
|
|
331
|
-
}
|
|
332
|
-
activateMenuItem(itemIndex) {
|
|
333
|
-
const items = this.getItems();
|
|
334
|
-
this.activeItemChange.emit(items[itemIndex]);
|
|
335
|
-
if (items[itemIndex] instanceof MenuNavigationItemComponent) {
|
|
336
|
-
items[itemIndex].selected.emit();
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
activatePopupMenuItem(itemIndex, subItemIndex, subSubItemIndex) {
|
|
340
|
-
const items = this.getItems();
|
|
341
|
-
const subItems = this.getItemSubitems(items[itemIndex]);
|
|
342
|
-
let item = subItems[subItemIndex];
|
|
343
|
-
this.itemsChange.emit(items);
|
|
344
|
-
this.activeSubItemChange.emit(item);
|
|
345
|
-
if (item instanceof MenuNavigationSubitemComponent) {
|
|
346
|
-
item.selected.emit();
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
mustCloseAfterSelectPopupItem(itemIndex, subItemIndex, subSubItemIndex) {
|
|
350
|
-
const items = this.getItems();
|
|
351
|
-
const subItems = this.getItemSubitems(items[itemIndex]);
|
|
352
|
-
let item = subItems[subItemIndex];
|
|
353
|
-
return item.role !== 'menuitemcheckbox' && item.role !== 'menuitemradio';
|
|
354
|
-
}
|
|
355
|
-
openMenu(itemIndex) {
|
|
356
|
-
const wasOpened = this.menuData[itemIndex].open;
|
|
357
|
-
this.menuData[itemIndex].open = true;
|
|
358
|
-
if (wasOpened) {
|
|
359
|
-
this.activateMenuItem(itemIndex);
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
closeMenu(itemIndex) {
|
|
363
|
-
if (itemIndex !== null && itemIndex !== undefined) {
|
|
364
|
-
this.menuData[itemIndex].open = false;
|
|
365
|
-
}
|
|
366
|
-
else {
|
|
367
|
-
this.menuData.forEach((item) => (item.open = false));
|
|
368
|
-
}
|
|
369
|
-
}
|
|
370
|
-
hasPopupMenu(itemIndex) {
|
|
371
|
-
const items = this.getItems();
|
|
372
|
-
const subItems = this.getItemSubitems(items[itemIndex]);
|
|
373
|
-
return items[itemIndex].sub && subItems && subItems.length > 0;
|
|
374
|
-
}
|
|
375
|
-
isPrintableChar(str) {
|
|
376
|
-
return str.length === 1 && !!str.match(/\S/);
|
|
377
|
-
}
|
|
378
|
-
focusItem(itemIndex, hover) {
|
|
379
|
-
const hasFocus = this.menunavigation.nativeElement.contains(document.activeElement);
|
|
380
|
-
const isOpen = this.menuData[this.currentFocusItemIndex].open;
|
|
381
|
-
if (!hover || hasFocus) {
|
|
382
|
-
this.menuData[itemIndex].menuItem.link.nativeElement.focus();
|
|
383
|
-
}
|
|
384
|
-
this.closeMenu();
|
|
385
|
-
if (isOpen && this.hasPopupMenu(itemIndex)) {
|
|
386
|
-
this.openMenu(itemIndex);
|
|
387
|
-
}
|
|
388
|
-
this.currentFocusItemIndex = itemIndex;
|
|
389
|
-
}
|
|
390
|
-
focusNextAvailableItem(fromItemIndex, step) {
|
|
391
|
-
let nextItem = fromItemIndex;
|
|
392
|
-
const items = this.getItems();
|
|
393
|
-
do {
|
|
394
|
-
nextItem = (nextItem + items.length + step) % items.length;
|
|
395
|
-
} while (!this.isItemFocusable(nextItem) && nextItem !== fromItemIndex);
|
|
396
|
-
if (nextItem !== fromItemIndex) {
|
|
397
|
-
this.focusItem(nextItem);
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
focusFirstItem() {
|
|
401
|
-
if (this.isItemFocusable(0)) {
|
|
402
|
-
this.focusItem(0);
|
|
403
|
-
}
|
|
404
|
-
else {
|
|
405
|
-
this.focusNextAvailableItem(0, +1);
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
focusLastItem() {
|
|
409
|
-
const items = this.getItems();
|
|
410
|
-
if (this.isItemFocusable(items.length - 1)) {
|
|
411
|
-
this.focusItem(items.length - 1);
|
|
412
|
-
}
|
|
413
|
-
else {
|
|
414
|
-
this.focusNextAvailableItem(items.length - 1, -1);
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
isItemFocusable(itemIndex) {
|
|
418
|
-
return !this.getItems()[itemIndex].disabled;
|
|
419
|
-
}
|
|
420
|
-
focusItemByFirstChar(char) {
|
|
421
|
-
const itemContents = this.menuItems.map((menuItem) => menuItem.itemContentWrapper.nativeElement.textContent);
|
|
422
|
-
let index = this.currentFocusItemIndex;
|
|
423
|
-
let foundIndex = -1;
|
|
424
|
-
do {
|
|
425
|
-
index = (index + itemContents.length + 1) % itemContents.length;
|
|
426
|
-
if (itemContents[index] &&
|
|
427
|
-
itemContents[index].trim().substr(0, 1).toLowerCase() === char.toLowerCase() &&
|
|
428
|
-
this.isItemFocusable(index)) {
|
|
429
|
-
foundIndex = index;
|
|
430
|
-
}
|
|
431
|
-
} while (foundIndex === -1 && index !== this.currentFocusItemIndex);
|
|
432
|
-
if (foundIndex >= 0) {
|
|
433
|
-
this.focusItem(foundIndex);
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
focusSubItem(itemIndex, subItemIndex, subSubItemIndex) {
|
|
437
|
-
if (this.menuData[itemIndex].menuItem.popupMenuItems.length > 0) {
|
|
438
|
-
const menuDataIndex = subItemIndex;
|
|
439
|
-
this.menuData[itemIndex].currentFocusSubItemIndex = subItemIndex;
|
|
440
|
-
this.menuData[itemIndex].currentFocusSubSubItemIndex = subSubItemIndex;
|
|
441
|
-
const elem = this.menuData[itemIndex].menuItem.popupMenuItems.toArray()[menuDataIndex].nativeElement;
|
|
442
|
-
if (elem) {
|
|
443
|
-
const aElem = elem.querySelector('a');
|
|
444
|
-
if (aElem) {
|
|
445
|
-
aElem.focus();
|
|
446
|
-
}
|
|
447
|
-
else {
|
|
448
|
-
elem.focus();
|
|
449
|
-
}
|
|
450
|
-
}
|
|
451
|
-
else {
|
|
452
|
-
console.error('No subitem to focus');
|
|
453
|
-
}
|
|
454
|
-
}
|
|
455
|
-
else {
|
|
456
|
-
console.error('No subitems');
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
focusNextAvailableSubItem(itemIndex, fromItemSubIndex, fromItemSubSubIndex, step) {
|
|
460
|
-
let nextSubIndex = fromItemSubIndex;
|
|
461
|
-
let nextSubSubIndex = fromItemSubSubIndex;
|
|
462
|
-
let allSubItemsChecked;
|
|
463
|
-
const items = this.getItems();
|
|
464
|
-
do {
|
|
465
|
-
const nextIndexes = this.getNextSubItemIndexes(items, itemIndex, nextSubIndex, nextSubSubIndex, step);
|
|
466
|
-
nextSubIndex = nextIndexes.subIndex;
|
|
467
|
-
nextSubSubIndex = nextIndexes.subSubIndex;
|
|
468
|
-
allSubItemsChecked = fromItemSubIndex === nextSubIndex && fromItemSubSubIndex === nextSubSubIndex;
|
|
469
|
-
} while (!this.isSubItemFocusable(itemIndex, nextSubIndex, nextSubSubIndex) && !allSubItemsChecked);
|
|
470
|
-
if (!allSubItemsChecked) {
|
|
471
|
-
this.focusSubItem(itemIndex, nextSubIndex, nextSubSubIndex);
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
focusFirstSubItem(itemIndex) {
|
|
475
|
-
let firstSubSubItem = null;
|
|
476
|
-
const items = this.getItems();
|
|
477
|
-
const subItems = this.getItemSubitems(items[itemIndex]);
|
|
478
|
-
if (subItems && subItems.length > 0) {
|
|
479
|
-
firstSubSubItem = 0;
|
|
480
|
-
}
|
|
481
|
-
if (this.isSubItemFocusable(itemIndex, 0, firstSubSubItem)) {
|
|
482
|
-
this.focusSubItem(itemIndex, 0, firstSubSubItem);
|
|
483
|
-
}
|
|
484
|
-
else {
|
|
485
|
-
this.focusNextAvailableSubItem(itemIndex, 0, firstSubSubItem, +1);
|
|
486
|
-
}
|
|
487
|
-
}
|
|
488
|
-
focusLastSubItem(itemIndex) {
|
|
489
|
-
const items = this.getItems();
|
|
490
|
-
const subItems = this.getItemSubitems(items[itemIndex]);
|
|
491
|
-
const lastItemIndex = subItems.length - 1;
|
|
492
|
-
const lastItem = subItems[lastItemIndex];
|
|
493
|
-
let lastSubSubItem = null;
|
|
494
|
-
if (this.isSubItemFocusable(itemIndex, lastItemIndex, lastSubSubItem)) {
|
|
495
|
-
this.focusSubItem(itemIndex, lastItemIndex, lastSubSubItem);
|
|
496
|
-
}
|
|
497
|
-
else {
|
|
498
|
-
this.focusNextAvailableSubItem(itemIndex, lastItemIndex, lastSubSubItem, -1);
|
|
499
|
-
}
|
|
500
|
-
}
|
|
501
|
-
isSubItemFocusable(itemIndex, subItemIndex, subSubItemIndex) {
|
|
502
|
-
const items = this.getItems();
|
|
503
|
-
const subItems = this.getItemSubitems(items[itemIndex]);
|
|
504
|
-
let item = subItems[subItemIndex];
|
|
505
|
-
let isFocusable = false;
|
|
506
|
-
if (item.role !== 'separator' && item.role !== 'none') {
|
|
507
|
-
isFocusable = true;
|
|
508
|
-
}
|
|
509
|
-
return isFocusable;
|
|
510
|
-
}
|
|
511
|
-
focusSubItemByFirstChar(itemIndex, char) {
|
|
512
|
-
const itemContents = this.menuItems
|
|
513
|
-
.toArray()[itemIndex].popupMenuItems.map((menuItem) => menuItem.nativeElement.textContent);
|
|
514
|
-
let subItemIndex = this.menuData[itemIndex].currentFocusSubItemIndex;
|
|
515
|
-
let subSubItemIndex = this.menuData[itemIndex].currentFocusSubSubItemIndex;
|
|
516
|
-
let foundSubIndex = -1;
|
|
517
|
-
let foundSubSubIndex = null;
|
|
518
|
-
let allSubItemsChecked = false;
|
|
519
|
-
const items = this.getItems();
|
|
520
|
-
do {
|
|
521
|
-
const nextIndexes = this.getNextSubItemIndexes(items, itemIndex, subItemIndex, subSubItemIndex, +1);
|
|
522
|
-
subItemIndex = nextIndexes.subIndex;
|
|
523
|
-
subSubItemIndex = nextIndexes.subSubIndex;
|
|
524
|
-
const index = subItemIndex;
|
|
525
|
-
if (itemContents[index] &&
|
|
526
|
-
itemContents[index].trim().substr(0, 1).toLowerCase() === char.toLowerCase() &&
|
|
527
|
-
this.isSubItemFocusable(itemIndex, subItemIndex, subSubItemIndex)) {
|
|
528
|
-
foundSubIndex = subItemIndex;
|
|
529
|
-
foundSubSubIndex = subSubItemIndex;
|
|
530
|
-
}
|
|
531
|
-
allSubItemsChecked =
|
|
532
|
-
this.menuData[itemIndex].currentFocusSubItemIndex === subItemIndex &&
|
|
533
|
-
this.menuData[itemIndex].currentFocusSubSubItemIndex === subSubItemIndex;
|
|
534
|
-
} while (foundSubIndex === -1 && !allSubItemsChecked);
|
|
535
|
-
if (foundSubIndex >= 0) {
|
|
536
|
-
this.focusSubItem(itemIndex, foundSubIndex, foundSubSubIndex);
|
|
537
|
-
}
|
|
538
|
-
}
|
|
539
|
-
getItems() {
|
|
540
|
-
let items;
|
|
541
|
-
if (this.itemComponentList && this.itemComponentList.length > 0) {
|
|
542
|
-
items = this.itemComponentList.toArray();
|
|
543
|
-
}
|
|
544
|
-
else {
|
|
545
|
-
items = this.items;
|
|
546
|
-
}
|
|
547
|
-
return items;
|
|
548
|
-
}
|
|
549
|
-
getItemSubitems(item) {
|
|
550
|
-
let subItems = [];
|
|
551
|
-
if (item instanceof MenuNavigationItemComponent) {
|
|
552
|
-
subItems = item.getSubItems();
|
|
553
|
-
}
|
|
554
|
-
if (!subItems || subItems.length === 0) {
|
|
555
|
-
subItems = item.sub ? item.sub.items : [];
|
|
556
|
-
}
|
|
557
|
-
return subItems;
|
|
558
|
-
}
|
|
559
|
-
getNextSubItemIndexes(items, itemIndex, nextSubIndex, nextSubSubIndex, step) {
|
|
560
|
-
const subItems = this.getItemSubitems(items[itemIndex]);
|
|
561
|
-
let checkNextSubItem = true;
|
|
562
|
-
if (checkNextSubItem) {
|
|
563
|
-
nextSubIndex = (nextSubIndex + step + subItems.length) % subItems.length;
|
|
564
|
-
}
|
|
565
|
-
return { subIndex: nextSubIndex, subSubIndex: nextSubSubIndex };
|
|
566
|
-
}
|
|
567
|
-
getIdPrefix() {
|
|
568
|
-
return this.idPrefix ? this.idPrefix : this.id + 'menunavigation-item';
|
|
569
|
-
}
|
|
570
|
-
getItemId(item, index) {
|
|
571
|
-
let id;
|
|
572
|
-
if (item) {
|
|
573
|
-
if (item.id) {
|
|
574
|
-
id = item.id;
|
|
575
|
-
}
|
|
576
|
-
else {
|
|
577
|
-
id = `${this.getIdPrefix()}-${++index}`;
|
|
578
|
-
}
|
|
579
|
-
}
|
|
580
|
-
return id;
|
|
581
|
-
}
|
|
582
|
-
getSubItemId(item, index, parentId) {
|
|
583
|
-
let id;
|
|
584
|
-
if (item) {
|
|
585
|
-
if (item.id) {
|
|
586
|
-
id = item.id;
|
|
587
|
-
}
|
|
588
|
-
else {
|
|
589
|
-
id = `sub-${parentId}-${++index}`;
|
|
590
|
-
}
|
|
591
|
-
}
|
|
592
|
-
return id;
|
|
593
|
-
}
|
|
594
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MenuNavigationComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
595
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MenuNavigationComponent, selector: "desy-menu-navigation", inputs: { idPrefix: "idPrefix", items: "items", classes: "classes", id: "id" }, outputs: { itemsChange: "itemsChange", activeItemChange: "activeItemChange", activeSubItemChange: "activeSubItemChange" }, host: { properties: { "class": "this.classes", "class.c-menu-navigation": "this.cfg", "attr.id": "this.id", "attr.role": "this.role", "attr.aria-label": "this.ariaLabel", "attr.aria-describedby": "this.ariaDescribedBy", "attr.aria-labelledby": "this.ariaLabelledBy", "attr.aria-hidden": "this.ariaHidden", "attr.aria-disabled": "this.ariaDisabled", "attr.aria-controls": "this.ariaControls", "attr.aria-current": "this.ariaCurrent", "attr.aria-live": "this.ariaLive", "attr.aria-expanded": "this.ariaExpanded", "attr.aria-errormessage": "this.ariaErrorMessage", "attr.aria-haspopup": "this.ariaHasPopup", "attr.aria-modal": "this.ariaModal", "attr.aria-checked": "this.ariaChecked", "attr.aria-pressed": "this.ariaPressed", "attr.aria-readonly": "this.ariaReadonly", "attr.aria-required": "this.ariaRequired", "attr.aria-selected": "this.ariaSelected", "attr.aria-valuemin": "this.ariaValuemin", "attr.aria-valuemax": "this.ariaValuemax", "attr.aria-valuenow": "this.ariaValuenow", "attr.aria-valuetext": "this.ariaValuetext", "attr.aria-orientation": "this.ariaOrientation", "attr.aria-level": "this.ariaLevel", "attr.aria-multiselectable": "this.ariaMultiselectable", "attr.aria-placeholder": "this.ariaPlaceholder", "attr.aria-posinset": "this.ariaPosinset", "attr.aria-setsize": "this.ariaSetsize", "attr.aria-sort": "this.ariaSort", "attr.aria-busy": "this.ariaBusy", "attr.aria-dropeffect": "this.ariaDropeffect", "attr.aria-grabbed": "this.ariaGrabbed", "attr.aria-activedescendant": "this.ariaActivedescendant", "attr.aria-atomic": "this.ariaAtomic", "attr.aria-autocomplete": "this.ariaAutocomplete", "attr.aria-braillelabel": "this.ariaBraillelabel", "attr.aria-brailleroledescription": "this.ariaBrailleroledescription", "attr.aria-colcount": "this.ariaColcount", "attr.aria-colindex": "this.ariaColindex", "attr.aria-colindextext": "this.ariaColindextext", "attr.aria-colspan": "this.ariaColspan", "attr.aria-description": "this.ariaDescription", "attr.aria-details": "this.ariaDetails", "attr.aria-flowto": "this.ariaFlowto", "attr.aria-invalid": "this.ariaInvalid", "attr.aria-keyshortcuts": "this.ariaKeyshortcuts", "attr.aria-owns": "this.ariaOwns", "attr.aria-relevant": "this.ariaRelevant", "attr.aria-roledescription": "this.ariaRoledescription", "attr.aria-rowcount": "this.ariaRowcount", "attr.aria-rowindex": "this.ariaRowindex", "attr.aria-rowindextext": "this.ariaRowindextext", "attr.aria-rowspan": "this.ariaRowspan", "attr.tabindex": "this.tabindex", "attr.title": "this.title", "attr.alt": "this.alt", "attr.lang": "this.lang", "attr.accesskey": "this.accesskey", "attr.autocomplete": "this.autocomplete", "attr.autofocus": "this.autofocus", "attr.contenteditable": "this.contenteditable", "attr.dir": "this.dir", "attr.draggable": "this.draggable", "attr.enterkeyhint": "this.enterkeyhint", "attr.hidden": "this.hidden", "attr.inputmode": "this.inputmode", "attr.spellcheck": "this.spellcheck", "attr.translate": "this.translate", "attr.aria-multiline": "this.ariaMultiline", "attr.for": "this.for", "attr.form": "this.form", "attr.headers": "this.headers", "attr.placeholder": "this.placeholder", "attr.readonly": "this.readonly", "attr.required": "this.required" } }, queries: [{ propertyName: "itemComponentList", predicate: MenuNavigationItemComponent }], viewQueries: [{ propertyName: "menunavigation", first: true, predicate: ["menunavigation"], descendants: true, read: ElementRef }, { propertyName: "menuItems", predicate: MenubaritemDirective, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<ul\n #menunavigation\n [id]=\"id + '-menu-navigation'\"\n class=\"flex flex-wrap gap-base\"\n (focusin)=\"handleMenuFocusIn()\"\n (focusout)=\"handleMenuFocusOut($event)\"\n [ngClass]=\"{ focus: isFocused }\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\">\n <ng-container *ngFor=\"let item of getItems(); index as itemIndex\">\n <li\n class=\"relative\"\n desyMenubaritem\n (contentChanged)=\"checkChanges()\">\n <a\n *ngIf=\"item.href\"\n #link\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [attributesToCheck]=\"'disabled'\"\n [attr.role]=\"item.disabled ? link : null\"\n [id]=\"getItemId(item, itemIndex)\"\n [target]=\"item.target\"\n [href]=\"item.href\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'c-menu-navigation__button--disabled': item.disabled,\n 'c-menu-navigation__button--primary': item.active,\n 'c-menu-navigation__button--has-selection': item.active,\n }\"\n [attr.title]=\"item.title ? item.title : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : item.ariaDisabled ? item.ariaDisabled : null\"\n [attr.aria-current]=\"item.disabled ? 'page' : item.ariaCurrent ? item.ariaCurrent : null\"\n [desyAppAccessibility]=\"item\"\n [attr.tabindex]=\"item.disabled ? -1 : itemIndex === currentFocusItemIndex ? 0 : -1\">\n <span\n class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\"\n #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text }\"></ng-container>\n </span>\n </a>\n <a\n *ngIf=\"!item.href && item.routerLink\"\n #link\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [attributesToCheck]=\"'disabled'\"\n [attr.role]=\"item.disabled ? link : null\"\n [id]=\"getItemId(item, itemIndex)\"\n [target]=\"item.target\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [fragment]=\"item.fragment\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'c-menu-navigation__button--disabled': item.disabled,\n 'c-menu-navigation__button--primary': item.active,\n 'c-menu-navigation__button--has-selection': item.active,\n }\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : item.ariaDisabled ? item.ariaDisabled : null\"\n [desyAppAccessibility]=\"item\"\n [attr.aria-current]=\"item.disabled ? 'page' : item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.tabindex]=\"item.disabled ? -1 : itemIndex === currentFocusItemIndex ? 0 : -1\">\n <span\n class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\"\n #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text }\"></ng-container>\n </span>\n </a>\n <button\n *ngIf=\"!item.href && !item.routerLink\"\n #link\n #itemContentWrapper\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [attributesToCheck]=\"'disabled'\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'c-menu-navigation__button--disabled': item.disabled,\n 'c-menu-navigation__button--primary': item.active,\n 'c-menu-navigation__button--has-selection': item.active,\n }\"\n [attr.aria-expanded]=\"item.sub ? (!!(menuData && menuData[itemIndex].open) ? true : false) : null\"\n [attr.aria-haspopup]=\"item.sub ? (!!(menuData && menuData[itemIndex].open) ? true : false) : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : item.ariaDisabled ? item.ariaDisabled : null\"\n [desyAppAccessibility]=\"item\"\n [attr.aria-controls]=\"item.sub ? (item.ariaControls ? item.ariaControls : id + '-sub-list') : null\"\n [attr.tabindex]=\"item.disabled ? -1 : itemIndex === currentFocusItemIndex ? 0 : -1\">\n <span\n *ngIf=\"item.active\"\n class=\"sr-only\">\n Item activo:\n </span>\n <span\n class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\"\n #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text }\"></ng-container>\n </span>\n <svg\n *ngIf=\"item.sub\"\n class=\"inline-block -mr-2 align-middle -my-px pointer-events-none\"\n viewBox=\"0 0 96 96\"\n aria-hidden=\"true\"\n fill=\"currentColor\"\n focusable=\"false\"\n width=\"1.5em\"\n height=\"1.5em\">\n <g>\n <path\n d=\"M46.71 58.037a1.823 1.823 0 002.581 0L62.048 45.28a1.823 1.823 0 00-1.29-3.113H35.243a1.823 1.823 0 00-1.291 3.113z\" />\n </g>\n </svg>\n </button>\n\n <div\n *ngIf=\"item.sub && getItemSubitems(item)\"\n class=\"c-menu-navigation__sub absolute bottom-0 left-0\">\n <ul\n [id]=\"id + '-sub-list'\"\n [style]=\"menuData && menuData[itemIndex].open ? 'display:block' : 'display:none'\"\n #popupMenu\n role=\"menu\"\n tabindex=\"-1\"\n [class]=\"\n item.sub.classes\n ? item.sub.classes\n : 'c-menu-navigation__tooltip w-max max-w-64 border border-neutral-base shadow-md bg-white text-sm'\n \"\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : item.sub.ariaLabel ? item.sub.ariaLabel : null\"\n [attr.aria-disabled]=\"item.sub.ariaDisabled ? item.sub.ariaDisabled : null\"\n [desyAppAccessibility]=\"item.sub\">\n <ng-container *ngFor=\"let subItem of getItemSubitems(item); index as subItemIndex\">\n <li\n #popupMenuItem\n tabindex=\"-1\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\">\n <a\n *ngIf=\"subItem.href\"\n #itemContentWrapper\n [href]=\"subItem.href\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [class]=\"\n [\n 'flex items-center px-base py-sm text-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black',\n subItem.classes,\n ] | makeHtmlList\n \"\n [ngClass]=\"{ 'pointer-events-none': subItem.disabled }\"\n [tabindex]=\"subItem.disabled ? -1 : null\"\n [attr.aria-current]=\"subItem.active ? 'page' : null\"\n [target]=\"subItem.target\">\n <strong\n class=\"font-bold\"\n *ngIf=\"subItem.active; else noActive\">\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </strong>\n <ng-template #noActive>\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </ng-template>\n <svg\n *ngIf=\"subItem.disabled\"\n viewBox=\"0 0 140 140\"\n height=\"1em\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"inline-block align-middle flex-initial ml-sm text-neutral-base fill-current\"\n aria-hidden=\"true\"\n focusable=\"false\">\n <path\n d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zM20 70a50 50 0 0174.8-43.4 2.51 2.51 0 011.23 1.84 2.48 2.48 0 01-.71 2.1L30.54 95.32a2.51 2.51 0 01-3.94-.52A49.63 49.63 0 0120 70zm100 0a50 50 0 01-74.8 43.4 2.51 2.51 0 01-1.23-1.84 2.48 2.48 0 01.71-2.1l64.78-64.78a2.51 2.51 0 013.94.52A49.63 49.63 0 01120 70z\" />\n </svg>\n </a>\n <a\n *ngIf=\"!subItem.href && subItem.routerLink\"\n #itemContentWrapper\n [routerLink]=\"subItem.routerLink\"\n [routerLinkActive]=\"subItem.routerLinkActiveClasses ? subItem.routerLinkActiveClasses : []\"\n [fragment]=\"subItem.fragment\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [class]=\"\n [\n 'flex items-center px-base py-sm text-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black',\n subItem.classes,\n ] | makeHtmlList\n \"\n [ngClass]=\"{ 'pointer-events-none': subItem.disabled }\"\n [tabindex]=\"subItem.disabled ? -1 : null\"\n [attr.aria-current]=\"subItem.active ? 'page' : null\"\n [target]=\"subItem.target\">\n <strong\n class=\"font-bold\"\n *ngIf=\"subItem.active; else noActive\">\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </strong>\n <ng-template #noActive>\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </ng-template>\n <svg\n *ngIf=\"subItem.disabled\"\n viewBox=\"0 0 140 140\"\n height=\"1em\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"inline-block align-middle flex-initial ml-sm text-neutral-base fill-current\"\n aria-hidden=\"true\"\n focusable=\"false\">\n <path\n d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zM20 70a50 50 0 0174.8-43.4 2.51 2.51 0 011.23 1.84 2.48 2.48 0 01-.71 2.1L30.54 95.32a2.51 2.51 0 01-3.94-.52A49.63 49.63 0 0120 70zm100 0a50 50 0 01-74.8 43.4 2.51 2.51 0 01-1.23-1.84 2.48 2.48 0 01.71-2.1l64.78-64.78a2.51 2.51 0 013.94.52A49.63 49.63 0 01120 70z\" />\n </svg>\n </a>\n </li>\n <li\n *ngIf=\"subItem.divider\"\n class=\"my-sm border-b border-neutral-base\">\n <div class=\"sr-only\">Separador</div>\n </li>\n </ng-container>\n </ul>\n </div>\n </li>\n <li\n #popupMenuItem\n *ngIf=\"item.divider\"\n [class]=\"item.divider.classes\"\n role=\"presentation\"\n aria-hidden=\"true\">\n <ng-container\n *desyCustomInnerContent=\"{\n component: item.divider,\n html: item.divider.html,\n text: item.divider.text,\n }\"></ng-container>\n </li>\n </ng-container>\n</ul>\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: i2.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i2.RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }, { kind: "directive", type: i3.AttributeChangeDirective, selector: "[desyAttributeChange]", inputs: ["attributesToCheck", "desyAttributeChangeEnabled"], outputs: ["desyAttributeChange", "desyAttributeChangeMutation"] }, { kind: "directive", type: i4.CustomInnerContentDirective, selector: "[desyCustomInnerContent]", inputs: ["desyCustomInnerContent"] }, { kind: "directive", type: i5.AccessibilityDirective, selector: "[desyAppAccessibility]", inputs: ["desyAppAccessibility"] }, { kind: "directive", type: i6.MenubaritemDirective, selector: "[desyMenubaritem]", outputs: ["contentChanged"] }, { kind: "pipe", type: i7.MakeHtmlListPipe, name: "makeHtmlList" }] }); }
|
|
596
|
-
}
|
|
597
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MenuNavigationComponent, decorators: [{
|
|
598
|
-
type: Component,
|
|
599
|
-
args: [{ selector: 'desy-menu-navigation', template: "<ul\n #menunavigation\n [id]=\"id + '-menu-navigation'\"\n class=\"flex flex-wrap gap-base\"\n (focusin)=\"handleMenuFocusIn()\"\n (focusout)=\"handleMenuFocusOut($event)\"\n [ngClass]=\"{ focus: isFocused }\"\n [attr.aria-label]=\"ariaLabel ? ariaLabel : null\">\n <ng-container *ngFor=\"let item of getItems(); index as itemIndex\">\n <li\n class=\"relative\"\n desyMenubaritem\n (contentChanged)=\"checkChanges()\">\n <a\n *ngIf=\"item.href\"\n #link\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [attributesToCheck]=\"'disabled'\"\n [attr.role]=\"item.disabled ? link : null\"\n [id]=\"getItemId(item, itemIndex)\"\n [target]=\"item.target\"\n [href]=\"item.href\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'c-menu-navigation__button--disabled': item.disabled,\n 'c-menu-navigation__button--primary': item.active,\n 'c-menu-navigation__button--has-selection': item.active,\n }\"\n [attr.title]=\"item.title ? item.title : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : item.ariaDisabled ? item.ariaDisabled : null\"\n [attr.aria-current]=\"item.disabled ? 'page' : item.ariaCurrent ? item.ariaCurrent : null\"\n [desyAppAccessibility]=\"item\"\n [attr.tabindex]=\"item.disabled ? -1 : itemIndex === currentFocusItemIndex ? 0 : -1\">\n <span\n class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\"\n #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text }\"></ng-container>\n </span>\n </a>\n <a\n *ngIf=\"!item.href && item.routerLink\"\n #link\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [attributesToCheck]=\"'disabled'\"\n [attr.role]=\"item.disabled ? link : null\"\n [id]=\"getItemId(item, itemIndex)\"\n [target]=\"item.target\"\n [routerLink]=\"item.routerLink\"\n [routerLinkActive]=\"item.routerLinkActiveClasses ? item.routerLinkActiveClasses : []\"\n [fragment]=\"item.fragment\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'c-menu-navigation__button--disabled': item.disabled,\n 'c-menu-navigation__button--primary': item.active,\n 'c-menu-navigation__button--has-selection': item.active,\n }\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : item.ariaDisabled ? item.ariaDisabled : null\"\n [desyAppAccessibility]=\"item\"\n [attr.aria-current]=\"item.disabled ? 'page' : item.ariaCurrent ? item.ariaCurrent : null\"\n [attr.tabindex]=\"item.disabled ? -1 : itemIndex === currentFocusItemIndex ? 0 : -1\">\n <span\n class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\"\n #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text }\"></ng-container>\n </span>\n </a>\n <button\n *ngIf=\"!item.href && !item.routerLink\"\n #link\n #itemContentWrapper\n (click)=\"handleMenuItemClick($event, itemIndex)\"\n (keydown)=\"handleMenuItemKeydown($event, itemIndex)\"\n (mouseover)=\"handleMenuItemMouseOver(itemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [attributesToCheck]=\"'disabled'\"\n [class]=\"['c-menu-navigation__button', item.classes] | makeHtmlList\"\n [ngClass]=\"{\n 'c-menu-navigation__button--disabled': item.disabled,\n 'c-menu-navigation__button--primary': item.active,\n 'c-menu-navigation__button--has-selection': item.active,\n }\"\n [attr.aria-expanded]=\"item.sub ? (!!(menuData && menuData[itemIndex].open) ? true : false) : null\"\n [attr.aria-haspopup]=\"item.sub ? (!!(menuData && menuData[itemIndex].open) ? true : false) : null\"\n [attr.disabled]=\"item.disabled ? item.disabled : null\"\n [attr.aria-disabled]=\"item.disabled ? item.disabled : item.ariaDisabled ? item.ariaDisabled : null\"\n [desyAppAccessibility]=\"item\"\n [attr.aria-controls]=\"item.sub ? (item.ariaControls ? item.ariaControls : id + '-sub-list') : null\"\n [attr.tabindex]=\"item.disabled ? -1 : itemIndex === currentFocusItemIndex ? 0 : -1\">\n <span\n *ngIf=\"item.active\"\n class=\"sr-only\">\n Item activo:\n </span>\n <span\n class=\"inline-flex self-center max-w-xs align-middle truncate pointer-events-none\"\n #itemContentWrapper>\n <ng-container *desyCustomInnerContent=\"{ component: item, html: item.html, text: item.text }\"></ng-container>\n </span>\n <svg\n *ngIf=\"item.sub\"\n class=\"inline-block -mr-2 align-middle -my-px pointer-events-none\"\n viewBox=\"0 0 96 96\"\n aria-hidden=\"true\"\n fill=\"currentColor\"\n focusable=\"false\"\n width=\"1.5em\"\n height=\"1.5em\">\n <g>\n <path\n d=\"M46.71 58.037a1.823 1.823 0 002.581 0L62.048 45.28a1.823 1.823 0 00-1.29-3.113H35.243a1.823 1.823 0 00-1.291 3.113z\" />\n </g>\n </svg>\n </button>\n\n <div\n *ngIf=\"item.sub && getItemSubitems(item)\"\n class=\"c-menu-navigation__sub absolute bottom-0 left-0\">\n <ul\n [id]=\"id + '-sub-list'\"\n [style]=\"menuData && menuData[itemIndex].open ? 'display:block' : 'display:none'\"\n #popupMenu\n role=\"menu\"\n tabindex=\"-1\"\n [class]=\"\n item.sub.classes\n ? item.sub.classes\n : 'c-menu-navigation__tooltip w-max max-w-64 border border-neutral-base shadow-md bg-white text-sm'\n \"\n [attr.aria-label]=\"item.ariaLabel ? item.ariaLabel : item.sub.ariaLabel ? item.sub.ariaLabel : null\"\n [attr.aria-disabled]=\"item.sub.ariaDisabled ? item.sub.ariaDisabled : null\"\n [desyAppAccessibility]=\"item.sub\">\n <ng-container *ngFor=\"let subItem of getItemSubitems(item); index as subItemIndex\">\n <li\n #popupMenuItem\n tabindex=\"-1\"\n [id]=\"getSubItemId(subItem, subItemIndex, getItemId(item, itemIndex))\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\">\n <a\n *ngIf=\"subItem.href\"\n #itemContentWrapper\n [href]=\"subItem.href\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [class]=\"\n [\n 'flex items-center px-base py-sm text-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black',\n subItem.classes,\n ] | makeHtmlList\n \"\n [ngClass]=\"{ 'pointer-events-none': subItem.disabled }\"\n [tabindex]=\"subItem.disabled ? -1 : null\"\n [attr.aria-current]=\"subItem.active ? 'page' : null\"\n [target]=\"subItem.target\">\n <strong\n class=\"font-bold\"\n *ngIf=\"subItem.active; else noActive\">\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </strong>\n <ng-template #noActive>\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </ng-template>\n <svg\n *ngIf=\"subItem.disabled\"\n viewBox=\"0 0 140 140\"\n height=\"1em\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"inline-block align-middle flex-initial ml-sm text-neutral-base fill-current\"\n aria-hidden=\"true\"\n focusable=\"false\">\n <path\n d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zM20 70a50 50 0 0174.8-43.4 2.51 2.51 0 011.23 1.84 2.48 2.48 0 01-.71 2.1L30.54 95.32a2.51 2.51 0 01-3.94-.52A49.63 49.63 0 0120 70zm100 0a50 50 0 01-74.8 43.4 2.51 2.51 0 01-1.23-1.84 2.48 2.48 0 01.71-2.1l64.78-64.78a2.51 2.51 0 013.94.52A49.63 49.63 0 01120 70z\" />\n </svg>\n </a>\n <a\n *ngIf=\"!subItem.href && subItem.routerLink\"\n #itemContentWrapper\n [routerLink]=\"subItem.routerLink\"\n [routerLinkActive]=\"subItem.routerLinkActiveClasses ? subItem.routerLinkActiveClasses : []\"\n [fragment]=\"subItem.fragment\"\n (click)=\"handlePopupMenuItemClick(itemIndex, subItemIndex)\"\n (mouseover)=\"handlePopupMenuItemMouseOver(itemIndex, subItemIndex)\"\n (keydown)=\"handlePopupMenuItemKeydown($event, itemIndex, subItemIndex)\"\n (desyAttributeChange)=\"checkChanges()\"\n [class]=\"\n [\n 'flex items-center px-base py-sm text-sm hover:bg-primary-base hover:text-white focus:bg-warning-base focus:outline-none focus:shadow-outline-focus focus:text-black',\n subItem.classes,\n ] | makeHtmlList\n \"\n [ngClass]=\"{ 'pointer-events-none': subItem.disabled }\"\n [tabindex]=\"subItem.disabled ? -1 : null\"\n [attr.aria-current]=\"subItem.active ? 'page' : null\"\n [target]=\"subItem.target\">\n <strong\n class=\"font-bold\"\n *ngIf=\"subItem.active; else noActive\">\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </strong>\n <ng-template #noActive>\n <ng-container\n *desyCustomInnerContent=\"{\n component: subItem,\n html: subItem.html,\n text: subItem.text,\n }\"></ng-container>\n </ng-template>\n <svg\n *ngIf=\"subItem.disabled\"\n viewBox=\"0 0 140 140\"\n height=\"1em\"\n width=\"1em\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class=\"inline-block align-middle flex-initial ml-sm text-neutral-base fill-current\"\n aria-hidden=\"true\"\n focusable=\"false\">\n <path\n d=\"M70 0a70 70 0 1070 70A70.08 70.08 0 0070 0zM20 70a50 50 0 0174.8-43.4 2.51 2.51 0 011.23 1.84 2.48 2.48 0 01-.71 2.1L30.54 95.32a2.51 2.51 0 01-3.94-.52A49.63 49.63 0 0120 70zm100 0a50 50 0 01-74.8 43.4 2.51 2.51 0 01-1.23-1.84 2.48 2.48 0 01.71-2.1l64.78-64.78a2.51 2.51 0 013.94.52A49.63 49.63 0 01120 70z\" />\n </svg>\n </a>\n </li>\n <li\n *ngIf=\"subItem.divider\"\n class=\"my-sm border-b border-neutral-base\">\n <div class=\"sr-only\">Separador</div>\n </li>\n </ng-container>\n </ul>\n </div>\n </li>\n <li\n #popupMenuItem\n *ngIf=\"item.divider\"\n [class]=\"item.divider.classes\"\n role=\"presentation\"\n aria-hidden=\"true\">\n <ng-container\n *desyCustomInnerContent=\"{\n component: item.divider,\n html: item.divider.html,\n text: item.divider.text,\n }\"></ng-container>\n </li>\n </ng-container>\n</ul>\n" }]
|
|
600
|
-
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { idPrefix: [{
|
|
601
|
-
type: Input
|
|
602
|
-
}], items: [{
|
|
603
|
-
type: Input
|
|
604
|
-
}], itemsChange: [{
|
|
605
|
-
type: Output
|
|
606
|
-
}], activeItemChange: [{
|
|
607
|
-
type: Output
|
|
608
|
-
}], activeSubItemChange: [{
|
|
609
|
-
type: Output
|
|
610
|
-
}], menunavigation: [{
|
|
611
|
-
type: ViewChild,
|
|
612
|
-
args: ['menunavigation', { read: ElementRef }]
|
|
613
|
-
}], menuItems: [{
|
|
614
|
-
type: ViewChildren,
|
|
615
|
-
args: [MenubaritemDirective]
|
|
616
|
-
}], itemComponentList: [{
|
|
617
|
-
type: ContentChildren,
|
|
618
|
-
args: [MenuNavigationItemComponent]
|
|
619
|
-
}], classes: [{
|
|
620
|
-
type: Input
|
|
621
|
-
}, {
|
|
622
|
-
type: HostBinding,
|
|
623
|
-
args: ['class']
|
|
624
|
-
}], cfg: [{
|
|
625
|
-
type: HostBinding,
|
|
626
|
-
args: ['class.c-menu-navigation']
|
|
627
|
-
}], id: [{
|
|
628
|
-
type: Input
|
|
629
|
-
}, {
|
|
630
|
-
type: HostBinding,
|
|
631
|
-
args: ['attr.id']
|
|
632
|
-
}], role: [{
|
|
633
|
-
type: HostBinding,
|
|
634
|
-
args: ['attr.role']
|
|
635
|
-
}], ariaLabel: [{
|
|
636
|
-
type: HostBinding,
|
|
637
|
-
args: ['attr.aria-label']
|
|
638
|
-
}], ariaDescribedBy: [{
|
|
639
|
-
type: HostBinding,
|
|
640
|
-
args: ['attr.aria-describedby']
|
|
641
|
-
}], ariaLabelledBy: [{
|
|
642
|
-
type: HostBinding,
|
|
643
|
-
args: ['attr.aria-labelledby']
|
|
644
|
-
}], ariaHidden: [{
|
|
645
|
-
type: HostBinding,
|
|
646
|
-
args: ['attr.aria-hidden']
|
|
647
|
-
}], ariaDisabled: [{
|
|
648
|
-
type: HostBinding,
|
|
649
|
-
args: ['attr.aria-disabled']
|
|
650
|
-
}], ariaControls: [{
|
|
651
|
-
type: HostBinding,
|
|
652
|
-
args: ['attr.aria-controls']
|
|
653
|
-
}], ariaCurrent: [{
|
|
654
|
-
type: HostBinding,
|
|
655
|
-
args: ['attr.aria-current']
|
|
656
|
-
}], ariaLive: [{
|
|
657
|
-
type: HostBinding,
|
|
658
|
-
args: ['attr.aria-live']
|
|
659
|
-
}], ariaExpanded: [{
|
|
660
|
-
type: HostBinding,
|
|
661
|
-
args: ['attr.aria-expanded']
|
|
662
|
-
}], ariaErrorMessage: [{
|
|
663
|
-
type: HostBinding,
|
|
664
|
-
args: ['attr.aria-errormessage']
|
|
665
|
-
}], ariaHasPopup: [{
|
|
666
|
-
type: HostBinding,
|
|
667
|
-
args: ['attr.aria-haspopup']
|
|
668
|
-
}], ariaModal: [{
|
|
669
|
-
type: HostBinding,
|
|
670
|
-
args: ['attr.aria-modal']
|
|
671
|
-
}], ariaChecked: [{
|
|
672
|
-
type: HostBinding,
|
|
673
|
-
args: ['attr.aria-checked']
|
|
674
|
-
}], ariaPressed: [{
|
|
675
|
-
type: HostBinding,
|
|
676
|
-
args: ['attr.aria-pressed']
|
|
677
|
-
}], ariaReadonly: [{
|
|
678
|
-
type: HostBinding,
|
|
679
|
-
args: ['attr.aria-readonly']
|
|
680
|
-
}], ariaRequired: [{
|
|
681
|
-
type: HostBinding,
|
|
682
|
-
args: ['attr.aria-required']
|
|
683
|
-
}], ariaSelected: [{
|
|
684
|
-
type: HostBinding,
|
|
685
|
-
args: ['attr.aria-selected']
|
|
686
|
-
}], ariaValuemin: [{
|
|
687
|
-
type: HostBinding,
|
|
688
|
-
args: ['attr.aria-valuemin']
|
|
689
|
-
}], ariaValuemax: [{
|
|
690
|
-
type: HostBinding,
|
|
691
|
-
args: ['attr.aria-valuemax']
|
|
692
|
-
}], ariaValuenow: [{
|
|
693
|
-
type: HostBinding,
|
|
694
|
-
args: ['attr.aria-valuenow']
|
|
695
|
-
}], ariaValuetext: [{
|
|
696
|
-
type: HostBinding,
|
|
697
|
-
args: ['attr.aria-valuetext']
|
|
698
|
-
}], ariaOrientation: [{
|
|
699
|
-
type: HostBinding,
|
|
700
|
-
args: ['attr.aria-orientation']
|
|
701
|
-
}], ariaLevel: [{
|
|
702
|
-
type: HostBinding,
|
|
703
|
-
args: ['attr.aria-level']
|
|
704
|
-
}], ariaMultiselectable: [{
|
|
705
|
-
type: HostBinding,
|
|
706
|
-
args: ['attr.aria-multiselectable']
|
|
707
|
-
}], ariaPlaceholder: [{
|
|
708
|
-
type: HostBinding,
|
|
709
|
-
args: ['attr.aria-placeholder']
|
|
710
|
-
}], ariaPosinset: [{
|
|
711
|
-
type: HostBinding,
|
|
712
|
-
args: ['attr.aria-posinset']
|
|
713
|
-
}], ariaSetsize: [{
|
|
714
|
-
type: HostBinding,
|
|
715
|
-
args: ['attr.aria-setsize']
|
|
716
|
-
}], ariaSort: [{
|
|
717
|
-
type: HostBinding,
|
|
718
|
-
args: ['attr.aria-sort']
|
|
719
|
-
}], ariaBusy: [{
|
|
720
|
-
type: HostBinding,
|
|
721
|
-
args: ['attr.aria-busy']
|
|
722
|
-
}], ariaDropeffect: [{
|
|
723
|
-
type: HostBinding,
|
|
724
|
-
args: ['attr.aria-dropeffect']
|
|
725
|
-
}], ariaGrabbed: [{
|
|
726
|
-
type: HostBinding,
|
|
727
|
-
args: ['attr.aria-grabbed']
|
|
728
|
-
}], ariaActivedescendant: [{
|
|
729
|
-
type: HostBinding,
|
|
730
|
-
args: ['attr.aria-activedescendant']
|
|
731
|
-
}], ariaAtomic: [{
|
|
732
|
-
type: HostBinding,
|
|
733
|
-
args: ['attr.aria-atomic']
|
|
734
|
-
}], ariaAutocomplete: [{
|
|
735
|
-
type: HostBinding,
|
|
736
|
-
args: ['attr.aria-autocomplete']
|
|
737
|
-
}], ariaBraillelabel: [{
|
|
738
|
-
type: HostBinding,
|
|
739
|
-
args: ['attr.aria-braillelabel']
|
|
740
|
-
}], ariaBrailleroledescription: [{
|
|
741
|
-
type: HostBinding,
|
|
742
|
-
args: ['attr.aria-brailleroledescription']
|
|
743
|
-
}], ariaColcount: [{
|
|
744
|
-
type: HostBinding,
|
|
745
|
-
args: ['attr.aria-colcount']
|
|
746
|
-
}], ariaColindex: [{
|
|
747
|
-
type: HostBinding,
|
|
748
|
-
args: ['attr.aria-colindex']
|
|
749
|
-
}], ariaColindextext: [{
|
|
750
|
-
type: HostBinding,
|
|
751
|
-
args: ['attr.aria-colindextext']
|
|
752
|
-
}], ariaColspan: [{
|
|
753
|
-
type: HostBinding,
|
|
754
|
-
args: ['attr.aria-colspan']
|
|
755
|
-
}], ariaDescription: [{
|
|
756
|
-
type: HostBinding,
|
|
757
|
-
args: ['attr.aria-description']
|
|
758
|
-
}], ariaDetails: [{
|
|
759
|
-
type: HostBinding,
|
|
760
|
-
args: ['attr.aria-details']
|
|
761
|
-
}], ariaFlowto: [{
|
|
762
|
-
type: HostBinding,
|
|
763
|
-
args: ['attr.aria-flowto']
|
|
764
|
-
}], ariaInvalid: [{
|
|
765
|
-
type: HostBinding,
|
|
766
|
-
args: ['attr.aria-invalid']
|
|
767
|
-
}], ariaKeyshortcuts: [{
|
|
768
|
-
type: HostBinding,
|
|
769
|
-
args: ['attr.aria-keyshortcuts']
|
|
770
|
-
}], ariaOwns: [{
|
|
771
|
-
type: HostBinding,
|
|
772
|
-
args: ['attr.aria-owns']
|
|
773
|
-
}], ariaRelevant: [{
|
|
774
|
-
type: HostBinding,
|
|
775
|
-
args: ['attr.aria-relevant']
|
|
776
|
-
}], ariaRoledescription: [{
|
|
777
|
-
type: HostBinding,
|
|
778
|
-
args: ['attr.aria-roledescription']
|
|
779
|
-
}], ariaRowcount: [{
|
|
780
|
-
type: HostBinding,
|
|
781
|
-
args: ['attr.aria-rowcount']
|
|
782
|
-
}], ariaRowindex: [{
|
|
783
|
-
type: HostBinding,
|
|
784
|
-
args: ['attr.aria-rowindex']
|
|
785
|
-
}], ariaRowindextext: [{
|
|
786
|
-
type: HostBinding,
|
|
787
|
-
args: ['attr.aria-rowindextext']
|
|
788
|
-
}], ariaRowspan: [{
|
|
789
|
-
type: HostBinding,
|
|
790
|
-
args: ['attr.aria-rowspan']
|
|
791
|
-
}], tabindex: [{
|
|
792
|
-
type: HostBinding,
|
|
793
|
-
args: ['attr.tabindex']
|
|
794
|
-
}], title: [{
|
|
795
|
-
type: HostBinding,
|
|
796
|
-
args: ['attr.title']
|
|
797
|
-
}], alt: [{
|
|
798
|
-
type: HostBinding,
|
|
799
|
-
args: ['attr.alt']
|
|
800
|
-
}], lang: [{
|
|
801
|
-
type: HostBinding,
|
|
802
|
-
args: ['attr.lang']
|
|
803
|
-
}], accesskey: [{
|
|
804
|
-
type: HostBinding,
|
|
805
|
-
args: ['attr.accesskey']
|
|
806
|
-
}], autocomplete: [{
|
|
807
|
-
type: HostBinding,
|
|
808
|
-
args: ['attr.autocomplete']
|
|
809
|
-
}], autofocus: [{
|
|
810
|
-
type: HostBinding,
|
|
811
|
-
args: ['attr.autofocus']
|
|
812
|
-
}], contenteditable: [{
|
|
813
|
-
type: HostBinding,
|
|
814
|
-
args: ['attr.contenteditable']
|
|
815
|
-
}], dir: [{
|
|
816
|
-
type: HostBinding,
|
|
817
|
-
args: ['attr.dir']
|
|
818
|
-
}], draggable: [{
|
|
819
|
-
type: HostBinding,
|
|
820
|
-
args: ['attr.draggable']
|
|
821
|
-
}], enterkeyhint: [{
|
|
822
|
-
type: HostBinding,
|
|
823
|
-
args: ['attr.enterkeyhint']
|
|
824
|
-
}], hidden: [{
|
|
825
|
-
type: HostBinding,
|
|
826
|
-
args: ['attr.hidden']
|
|
827
|
-
}], inputmode: [{
|
|
828
|
-
type: HostBinding,
|
|
829
|
-
args: ['attr.inputmode']
|
|
830
|
-
}], spellcheck: [{
|
|
831
|
-
type: HostBinding,
|
|
832
|
-
args: ['attr.spellcheck']
|
|
833
|
-
}], translate: [{
|
|
834
|
-
type: HostBinding,
|
|
835
|
-
args: ['attr.translate']
|
|
836
|
-
}], ariaMultiline: [{
|
|
837
|
-
type: HostBinding,
|
|
838
|
-
args: ['attr.aria-multiline']
|
|
839
|
-
}], for: [{
|
|
840
|
-
type: HostBinding,
|
|
841
|
-
args: ['attr.for']
|
|
842
|
-
}], form: [{
|
|
843
|
-
type: HostBinding,
|
|
844
|
-
args: ['attr.form']
|
|
845
|
-
}], headers: [{
|
|
846
|
-
type: HostBinding,
|
|
847
|
-
args: ['attr.headers']
|
|
848
|
-
}], placeholder: [{
|
|
849
|
-
type: HostBinding,
|
|
850
|
-
args: ['attr.placeholder']
|
|
851
|
-
}], readonly: [{
|
|
852
|
-
type: HostBinding,
|
|
853
|
-
args: ['attr.readonly']
|
|
854
|
-
}], required: [{
|
|
855
|
-
type: HostBinding,
|
|
856
|
-
args: ['attr.required']
|
|
857
|
-
}] } });
|
|
858
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1uYXZpZ2F0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc3ktYW5ndWxhci9zcmMvbGliL2Rlc3ktbmF2L2NvbXBvbmVudHMvbWVudS1uYXZpZ2F0aW9uL21lbnUtbmF2aWdhdGlvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXN5LWFuZ3VsYXIvc3JjL2xpYi9kZXN5LW5hdi9jb21wb25lbnRzL21lbnUtbmF2aWdhdGlvbi9tZW51LW5hdmlnYXRpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osV0FBVyxFQUNYLEtBQUssRUFFTCxNQUFNLEVBQ04sU0FBUyxFQUVULFNBQVMsRUFDVCxZQUFZLEdBQ2IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFHcEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDbkYsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDL0csT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sd0VBQXdFLENBQUM7Ozs7Ozs7OztBQU14SCxNQUFNLE9BQU8sdUJBQXdCLFNBQVEsc0JBQXNCO0lBR2pFLElBQ0ksS0FBSyxDQUFDLEtBQTJCO1FBQ25DLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQ0QsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUE4RkQsWUFBb0IsaUJBQW9DO1FB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QVc7dUJBQUMsY0FBYztnQkFDTSxXQUFXO3NCQUEzQyxXQUFXO3VCQUFDLGtCQUFrQjtnQkFDRCxRQUFRO3NCQUFyQyxXQUFXO3VCQUFDLGVBQWU7Z0JBQ0UsUUFBUTtzQkFBckMsV0FBVzt1QkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWNjZXNzaWJpbGl0eUNvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uL3NoYXJlZC9jb21wb25lbnRzJztcbmltcG9ydCB7IE1lbnVOYXZpZ2F0aW9uSXRlbVN1Ykl0ZW0sIE1lbnVOYXZpZ2F0aW9uSXRlbVN1Ykl0ZW1TdWJJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBNZW51TmF2aWdhdGlvbkl0ZW0gfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL21lbnUtbmF2aWdhdGlvbic7XG5pbXBvcnQgeyBNZW51YmFyaXRlbURpcmVjdGl2ZSB9IGZyb20gJy4uL21lbnViYXIvZGlyZWN0aXZlcy9tZW51YmFyaXRlbS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTWVudU5hdmlnYXRpb25JdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL21lbnUtbmF2aWdhdGlvbi1pdGVtL21lbnUtbmF2aWdhdGlvbi1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNZW51TmF2aWdhdGlvblN1Yml0ZW1Db21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvbWVudS1uYXZpZ2F0aW9uLXN1Yml0ZW0vbWVudS1uYXZpZ2F0aW9uLXN1Yml0ZW0uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGVzeS1tZW51LW5hdmlnYXRpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVudS1uYXZpZ2F0aW9uLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgTWVudU5hdmlnYXRpb25Db21wb25lbnQgZXh0ZW5kcyBBY2Nlc3NpYmlsaXR5Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcbiAgQElucHV0KCkgaWRQcmVmaXg6IHN0cmluZztcbiAgX2l0ZW1zOiBNZW51TmF2aWdhdGlvbkl0ZW1bXTtcbiAgQElucHV0KClcbiAgc2V0IGl0ZW1zKGl0ZW1zOiBNZW51TmF2aWdhdGlvbkl0ZW1bXSkge1xuICAgIHRoaXMuX2l0ZW1zID0gaXRlbXM7XG4gICAgdGhpcy5hY3RpdmVJdGVtSWZTdWJJdGVtSXNBY3RpdmUoaXRlbXMpO1xuICB9XG4gIGdldCBpdGVtcygpIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXM7XG4gIH1cbiAgQE91dHB1dCgpIGl0ZW1zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxNZW51TmF2aWdhdGlvbkl0ZW1bXT4oKTtcbiAgQE91dHB1dCgpIGFjdGl2ZUl0ZW1DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE1lbnVOYXZpZ2F0aW9uSXRlbT4oKTtcbiAgQE91dHB1dCgpIGFjdGl2ZVN1Ykl0ZW1DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE1lbnVOYXZpZ2F0aW9uSXRlbVN1Ykl0ZW0gfCBNZW51TmF2aWdhdGlvbkl0ZW1TdWJJdGVtU3ViSXRlbT4oKTtcblxuICBAVmlld0NoaWxkKCdtZW51bmF2aWdhdGlvbicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBtZW51bmF2aWdhdGlvbjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZHJlbihNZW51YmFyaXRlbURpcmVjdGl2ZSkgbWVudUl0ZW1zOiBRdWVyeUxpc3Q8TWVudWJhcml0ZW1EaXJlY3RpdmU+O1xuICBAQ29udGVudENoaWxkcmVuKE1lbnVOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudCkgaXRlbUNvbXBvbmVudExpc3Q6IFF1ZXJ5TGlzdDxNZW51TmF2aWdhdGlvbkl0ZW1Db21wb25lbnQ+O1xuXG4gIEBJbnB1dCgpIEBIb3N0QmluZGluZygnY2xhc3MnKSBjbGFzc2VzOiBhbnk7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYy1tZW51LW5hdmlnYXRpb24nKSBjZmcgPSB0cnVlO1xuICBASW5wdXQoKSBASG9zdEJpbmRpbmcoJ2F0dHIuaWQnKSBpZDogYW55O1xuXG4gIEBIb3N0QmluZGluZygnYXR0ci5yb2xlJykgcm9sZTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGFiZWwnKSBhcmlhTGFiZWw6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRlc2NyaWJlZGJ5JykgYXJpYURlc2NyaWJlZEJ5OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1sYWJlbGxlZGJ5JykgYXJpYUxhYmVsbGVkQnk6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWhpZGRlbicpIGFyaWFIaWRkZW46IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRpc2FibGVkJykgYXJpYURpc2FibGVkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1jb250cm9scycpIGFyaWFDb250cm9sczogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtY3VycmVudCcpIGFyaWFDdXJyZW50OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1saXZlJykgYXJpYUxpdmU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWV4cGFuZGVkJykgYXJpYUV4cGFuZGVkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1lcnJvcm1lc3NhZ2UnKSBhcmlhRXJyb3JNZXNzYWdlOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1oYXNwb3B1cCcpIGFyaWFIYXNQb3B1cDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbW9kYWwnKSBhcmlhTW9kYWw6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWNoZWNrZWQnKSBhcmlhQ2hlY2tlZDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcHJlc3NlZCcpIGFyaWFQcmVzc2VkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yZWFkb25seScpIGFyaWFSZWFkb25seTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcmVxdWlyZWQnKSBhcmlhUmVxdWlyZWQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXNlbGVjdGVkJykgYXJpYVNlbGVjdGVkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS12YWx1ZW1pbicpIGFyaWFWYWx1ZW1pbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtdmFsdWVtYXgnKSBhcmlhVmFsdWVtYXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXZhbHVlbm93JykgYXJpYVZhbHVlbm93OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS12YWx1ZXRleHQnKSBhcmlhVmFsdWV0ZXh0OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1vcmllbnRhdGlvbicpIGFyaWFPcmllbnRhdGlvbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtbGV2ZWwnKSBhcmlhTGV2ZWw6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLW11bHRpc2VsZWN0YWJsZScpIGFyaWFNdWx0aXNlbGVjdGFibGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXBsYWNlaG9sZGVyJykgYXJpYVBsYWNlaG9sZGVyOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1wb3NpbnNldCcpIGFyaWFQb3NpbnNldDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtc2V0c2l6ZScpIGFyaWFTZXRzaXplOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1zb3J0JykgYXJpYVNvcnQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWJ1c3knKSBhcmlhQnVzeTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZHJvcGVmZmVjdCcpIGFyaWFEcm9wZWZmZWN0OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1ncmFiYmVkJykgYXJpYUdyYWJiZWQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWFjdGl2ZWRlc2NlbmRhbnQnKSBhcmlhQWN0aXZlZGVzY2VuZGFudDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYXRvbWljJykgYXJpYUF0b21pYzogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYXV0b2NvbXBsZXRlJykgYXJpYUF1dG9jb21wbGV0ZTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYnJhaWxsZWxhYmVsJykgYXJpYUJyYWlsbGVsYWJlbDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtYnJhaWxsZXJvbGVkZXNjcmlwdGlvbicpIGFyaWFCcmFpbGxlcm9sZWRlc2NyaXB0aW9uOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1jb2xjb3VudCcpIGFyaWFDb2xjb3VudDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtY29saW5kZXgnKSBhcmlhQ29saW5kZXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWNvbGluZGV4dGV4dCcpIGFyaWFDb2xpbmRleHRleHQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWNvbHNwYW4nKSBhcmlhQ29sc3Bhbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpcHRpb24nKSBhcmlhRGVzY3JpcHRpb246IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRldGFpbHMnKSBhcmlhRGV0YWlsczogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZmxvd3RvJykgYXJpYUZsb3d0bzogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtaW52YWxpZCcpIGFyaWFJbnZhbGlkOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1rZXlzaG9ydGN1dHMnKSBhcmlhS2V5c2hvcnRjdXRzOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1vd25zJykgYXJpYU93bnM6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJlbGV2YW50JykgYXJpYVJlbGV2YW50OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yb2xlZGVzY3JpcHRpb24nKSBhcmlhUm9sZWRlc2NyaXB0aW9uOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1yb3djb3VudCcpIGFyaWFSb3djb3VudDogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtcm93aW5kZXgnKSBhcmlhUm93aW5kZXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJvd2luZGV4dGV4dCcpIGFyaWFSb3dpbmRleHRleHQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLXJvd3NwYW4nKSBhcmlhUm93c3Bhbjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnRhYmluZGV4JykgdGFiaW5kZXg6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci50aXRsZScpIHRpdGxlOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuYWx0JykgYWx0OiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIubGFuZycpIGxhbmc6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hY2Nlc3NrZXknKSBhY2Nlc3NrZXk6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hdXRvY29tcGxldGUnKSBhdXRvY29tcGxldGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hdXRvZm9jdXMnKSBhdXRvZm9jdXM6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5jb250ZW50ZWRpdGFibGUnKSBjb250ZW50ZWRpdGFibGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5kaXInKSBkaXI6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5kcmFnZ2FibGUnKSBkcmFnZ2FibGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5lbnRlcmtleWhpbnQnKSBlbnRlcmtleWhpbnQ6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5oaWRkZW4nKSBoaWRkZW46IGJvb2xlYW4gPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuaW5wdXRtb2RlJykgaW5wdXRtb2RlOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIuc3BlbGxjaGVjaycpIHNwZWxsY2hlY2s6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci50cmFuc2xhdGUnKSB0cmFuc2xhdGU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLW11bHRpbGluZScpIGFyaWFNdWx0aWxpbmU6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5mb3InKSBmb3I6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5mb3JtJykgZm9ybTogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmhlYWRlcnMnKSBoZWFkZXJzOiBzdHJpbmcgPSBudWxsO1xuICBASG9zdEJpbmRpbmcoJ2F0dHIucGxhY2Vob2xkZXInKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gbnVsbDtcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLnJlYWRvbmx5JykgcmVhZG9ubHk6IHN0cmluZyA9IG51bGw7XG4gIEBIb3N0QmluZGluZygnYXR0ci5yZXF1aXJlZCcpIHJlcXVpcmVkOiBzdHJpbmcgPSBudWxsO1xuXG4gIG1lbnVEYXRhOiBhbnlbXTtcbiAgdmlld0luaXQgPSBmYWxzZTtcbiAgaXNGb2N1c2VkOiBib29sZWFuO1xuICBjdXJyZW50Rm9jdXNJdGVtSW5kZXggPSAwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM/OiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmlld0luaXQpIHtcbiAgICAgIHRoaXMuY2hlY2tDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMudmlld0luaXQgPSB0cnVlO1xuICAgIHRoaXMuY2hlY2tDaGFuZ2VzKCk7XG4gICAgdGhpcy5pdGVtQ29tcG9uZW50TGlzdC5jaGFuZ2VzLnN1YnNjcmliZSgoaXRlbXMpID0+IHRoaXMuYWN0aXZlSXRlbUlmU3ViSXRlbUlzQWN0aXZlKGl0ZW1zLnRvQXJyYXkoKSkpO1xuICB9XG5cbiAgY2hlY2tDaGFuZ2VzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tZW51SXRlbXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLm1lbnVEYXRhID0gW107XG4gICAgdGhpcy5nZXRJdGVtcygpLmZvckVhY2goKF8sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBpdGVtRGF0YSA9IHtcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICAgIGN1cnJlbnRGb2N1c1N1Ykl0ZW1JbmRleDogMCxcbiAgICAgICAgY3VycmVudEZvY3VzU3ViU3ViSXRlbUluZGV4OiAwLFxuICAgICAgICBtZW51SXRlbTogdGhpcy5tZW51SXRlbXMudG9BcnJheSgpW2luZGV4XSxcbiAgICAgIH07XG4gICAgICB0aGlzLm1lbnVEYXRhLnB1c2goaXRlbURhdGEpO1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMudmlld0luaXQpIHtcbiAgICAgIHRoaXMuY2hlY2tSZXF1aXJlZCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGxhc3RDdXJyZW50Rm9jdXNJdGVtSW5kZXggPSB0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBpZiAoaXRlbXMpIHtcbiAgICAgIHdoaWxlICghdGhpcy5pc0l0ZW1Gb2N1c2FibGUodGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXggJSBpdGVtcy5sZW5ndGgpKSB7XG4gICAgICAgIHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4ID0gKHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4ICsgaXRlbXMubGVuZ3RoICsgMSkgJSBpdGVtcy5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleCA9PT0gbGFzdEN1cnJlbnRGb2N1c0l0ZW1JbmRleCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWN0aXZlSXRlbUlmU3ViSXRlbUlzQWN0aXZlKGl0ZW1zOiBNZW51TmF2aWdhdGlvbkl0ZW1bXSB8IE1lbnVOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudFtdKSB7XG4gICAgaXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgbGV0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbSk7XG4gICAgICBpZiAoc3ViSXRlbXMgaW5zdGFuY2VvZiBNZW51TmF2aWdhdGlvbkl0ZW1Db21wb25lbnQpIHtcbiAgICAgICAgaXRlbS5hY3RpdmUgPSBzdWJJdGVtcy5zdWIuaXRlbXMuZmlsdGVyKChzdWJJdGVtKSA9PiBzdWJJdGVtLmFjdGl2ZSkubGVuZ3RoID4gMDtcbiAgICAgIH0gZWxzZSBpZiAoaXRlbT8uc3ViPy5pdGVtcykge1xuICAgICAgICBpdGVtLmFjdGl2ZSA9IGl0ZW0uc3ViLml0ZW1zLmZpbHRlcigoc3ViSXRlbSkgPT4gc3ViSXRlbS5hY3RpdmUpLmxlbmd0aCA+IDA7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKlxuICAgKiBFdmVudG9zXG4gICAqL1xuXG4gIGhhbmRsZU1lbnVGb2N1c0luKCk6IHZvaWQge1xuICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIGhhbmRsZU1lbnVGb2N1c091dChldmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tZW51bmF2aWdhdGlvbi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgIH1cbiAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICB9XG5cbiAgaGFuZGxlTWVudUl0ZW1DbGljayhldmVudCwgaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNvbnN0IGlzT3BlbiA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5vcGVuO1xuICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICAgIGlmICghaXNPcGVuKSB7XG4gICAgICAgIHRoaXMub3Blbk1lbnUoaXRlbUluZGV4KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3RpdmF0ZU1lbnVJdGVtKGl0ZW1JbmRleCk7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTWVudUl0ZW1LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBpdGVtSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7XG4gICAgICBjYXNlICdFbnRlcic6XG4gICAgICBjYXNlICcgJzpcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIGlmICh0aGlzLmhhc1BvcHVwTWVudShpdGVtSW5kZXgpKSB7XG4gICAgICAgICAgdGhpcy5vcGVuTWVudShpdGVtSW5kZXgpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5mb2N1c0ZpcnN0U3ViSXRlbShpdGVtSW5kZXgpKTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFc2NhcGUnOlxuICAgICAgICBpZiAodGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZUl0ZW0oaXRlbUluZGV4LCAtMSk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlSXRlbShpdGVtSW5kZXgsICsxKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgICAgICB0aGlzLm9wZW5NZW51KGl0ZW1JbmRleCk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmZvY3VzTGFzdFN1Ykl0ZW0oaXRlbUluZGV4KSk7XG4gICAgICAgIH1cbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdIb21lJzpcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICAgIGlmICh0aGlzLmhhc1BvcHVwTWVudShpdGVtSW5kZXgpKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZU1lbnUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvY3VzRmlyc3RJdGVtKCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRW5kJzpcbiAgICAgIGNhc2UgJ1BhZ2VEb3duJzpcbiAgICAgICAgaWYgKHRoaXMuaGFzUG9wdXBNZW51KGl0ZW1JbmRleCkpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXNMYXN0SXRlbSgpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmICh0aGlzLmlzUHJpbnRhYmxlQ2hhcihldmVudC5rZXkpKSB7XG4gICAgICAgICAgdGhpcy5mb2N1c0l0ZW1CeUZpcnN0Q2hhcihldmVudC5rZXkpO1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzSXRlbShpdGVtSW5kZXgsIHRydWUpO1xuICB9XG5cbiAgaGFuZGxlUG9wdXBNZW51SXRlbUNsaWNrKGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5hY3RpdmF0ZVBvcHVwTWVudUl0ZW0oaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCk7XG4gICAgdGhpcy5mb2N1c0l0ZW0oaXRlbUluZGV4KTtcbiAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICB9XG5cbiAgaGFuZGxlUG9wdXBNZW51SXRlbUtleWRvd24oXG4gICAgZXZlbnQ6IEtleWJvYXJkRXZlbnQsXG4gICAgaXRlbUluZGV4OiBudW1iZXIsXG4gICAgc3ViSXRlbUluZGV4OiBudW1iZXIsXG4gICAgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRTdWJJbmRleCA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJJdGVtSW5kZXg7XG4gICAgY29uc3QgY3VycmVudFN1YlN1YkluZGV4ID0gdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1YlN1Ykl0ZW1JbmRleDtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBzd2l0Y2ggKGV2ZW50LmtleSkge1xuICAgICAgY2FzZSAnICc6XG4gICAgICAgIHRoaXMuYWN0aXZhdGVQb3B1cE1lbnVJdGVtKGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4LCBzdWJTdWJJdGVtSW5kZXgpO1xuICAgICAgICBpZiAodGhpcy5tdXN0Q2xvc2VBZnRlclNlbGVjdFBvcHVwSXRlbShpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4KSkge1xuICAgICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgICAgdGhpcy5mb2N1c0l0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgICAgdGhpcy5hY3RpdmF0ZVBvcHVwTWVudUl0ZW0oaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgsIHN1YlN1Ykl0ZW1JbmRleCk7XG4gICAgICAgIHRoaXMuY2xvc2VNZW51KGl0ZW1JbmRleCk7XG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKGl0ZW1JbmRleCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnRXNjYXBlJzpcbiAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVTdWJJdGVtKGl0ZW1JbmRleCwgY3VycmVudFN1YkluZGV4LCBjdXJyZW50U3ViU3ViSW5kZXgsIC0xKTtcbiAgICAgICAgLy8gdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCAoY3VycmVudFN1YkluZGV4ICsgbGlzdExlbmd0aCAtIDEpICUgbGlzdExlbmd0aCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgdGhpcy5mb2N1c05leHRBdmFpbGFibGVTdWJJdGVtKGl0ZW1JbmRleCwgY3VycmVudFN1YkluZGV4LCBjdXJyZW50U3ViU3ViSW5kZXgsICsxKTtcbiAgICAgICAgLy8gdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCAoY3VycmVudFN1YkluZGV4ICsgbGlzdExlbmd0aCArIDEpICUgbGlzdExlbmd0aCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oKGl0ZW1JbmRleCArIGl0ZW1zLmxlbmd0aCAtIDEpICUgaXRlbXMubGVuZ3RoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgdGhpcy5jbG9zZU1lbnUoaXRlbUluZGV4KTtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oKGl0ZW1JbmRleCArIGl0ZW1zLmxlbmd0aCArIDEpICUgaXRlbXMubGVuZ3RoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdIb21lJzpcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICAgIHRoaXMuZm9jdXNGaXJzdFN1Ykl0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdFbmQnOlxuICAgICAgY2FzZSAnUGFnZURvd24nOlxuICAgICAgICB0aGlzLmZvY3VzTGFzdFN1Ykl0ZW0oaXRlbUluZGV4KTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdUYWInOlxuICAgICAgICB0aGlzLmNsb3NlTWVudShpdGVtSW5kZXgpO1xuICAgICAgICB0aGlzLmZvY3VzSXRlbShpdGVtSW5kZXgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHRoaXMuaXNQcmludGFibGVDaGFyKGV2ZW50LmtleSkpIHtcbiAgICAgICAgICB0aGlzLmZvY3VzU3ViSXRlbUJ5Rmlyc3RDaGFyKGl0ZW1JbmRleCwgZXZlbnQua2V5KTtcbiAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZVBvcHVwTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4OiBudW1iZXIsIHN1Ykl0ZW1JbmRleDogbnVtYmVyLCBzdWJTdWJJdGVtSW5kZXg/OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmZvY3VzU3ViSXRlbShpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4KTtcbiAgfVxuXG4gIC8qXG4gICAqIENvbXVuZXNcbiAgICovXG5cbiAgY2hlY2tSZXF1aXJlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgfVxuXG4gIGFjdGl2YXRlTWVudUl0ZW0oaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICB0aGlzLmFjdGl2ZUl0ZW1DaGFuZ2UuZW1pdChpdGVtc1tpdGVtSW5kZXhdIGFzIE1lbnVOYXZpZ2F0aW9uSXRlbSk7XG4gICAgaWYgKGl0ZW1zW2l0ZW1JbmRleF0gaW5zdGFuY2VvZiBNZW51TmF2aWdhdGlvbkl0ZW1Db21wb25lbnQpIHtcbiAgICAgIChpdGVtc1tpdGVtSW5kZXhdIGFzIE1lbnVOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudCkuc2VsZWN0ZWQuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIGFjdGl2YXRlUG9wdXBNZW51SXRlbShpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIsIHN1YlN1Ykl0ZW1JbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGNvbnN0IHN1Ykl0ZW1zID0gdGhpcy5nZXRJdGVtU3ViaXRlbXMoaXRlbXNbaXRlbUluZGV4XSk7XG4gICAgbGV0IGl0ZW06IE1lbnVOYXZpZ2F0aW9uSXRlbVN1Ykl0ZW0gfCBNZW51TmF2aWdhdGlvbkl0ZW1TdWJJdGVtU3ViSXRlbSA9IHN1Ykl0ZW1zW3N1Ykl0ZW1JbmRleF07XG5cbiAgICB0aGlzLml0ZW1zQ2hhbmdlLmVtaXQoaXRlbXMpO1xuICAgIHRoaXMuYWN0aXZlU3ViSXRlbUNoYW5nZS5lbWl0KGl0ZW0gYXMgTWVudU5hdmlnYXRpb25JdGVtKTtcbiAgICBpZiAoaXRlbSBpbnN0YW5jZW9mIE1lbnVOYXZpZ2F0aW9uU3ViaXRlbUNvbXBvbmVudCkge1xuICAgICAgaXRlbS5zZWxlY3RlZC5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgbXVzdENsb3NlQWZ0ZXJTZWxlY3RQb3B1cEl0ZW0oaXRlbUluZGV4OiBudW1iZXIsIHN1Ykl0ZW1JbmRleDogbnVtYmVyLCBzdWJTdWJJdGVtSW5kZXg/OiBudW1iZXIpOiBib29sZWFuIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0SXRlbVN1Yml0ZW1zKGl0ZW1zW2l0ZW1JbmRleF0pO1xuICAgIGxldCBpdGVtOiBNZW51TmF2aWdhdGlvbkl0ZW1TdWJJdGVtIHwgTWVudU5hdmlnYXRpb25JdGVtU3ViSXRlbVN1Ykl0ZW0gPSBzdWJJdGVtc1tzdWJJdGVtSW5kZXhdO1xuXG4gICAgcmV0dXJuIGl0ZW0ucm9sZSAhPT0gJ21lbnVpdGVtY2hlY2tib3gnICYmIGl0ZW0ucm9sZSAhPT0gJ21lbnVpdGVtcmFkaW8nO1xuICB9XG5cbiAgb3Blbk1lbnUoaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCB3YXNPcGVuZWQgPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ub3BlbjtcbiAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ub3BlbiA9IHRydWU7XG4gICAgaWYgKHdhc09wZW5lZCkge1xuICAgICAgdGhpcy5hY3RpdmF0ZU1lbnVJdGVtKGl0ZW1JbmRleCk7XG4gICAgfVxuICB9XG5cbiAgY2xvc2VNZW51KGl0ZW1JbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGlmIChpdGVtSW5kZXggIT09IG51bGwgJiYgaXRlbUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5vcGVuID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubWVudURhdGEuZm9yRWFjaCgoaXRlbSkgPT4gKGl0ZW0ub3BlbiA9IGZhbHNlKSk7XG4gICAgfVxuICB9XG5cbiAgaGFzUG9wdXBNZW51KGl0ZW1JbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICByZXR1cm4gaXRlbXNbaXRlbUluZGV4XS5zdWIgJiYgc3ViSXRlbXMgJiYgc3ViSXRlbXMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIHByaXZhdGUgaXNQcmludGFibGVDaGFyKHN0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN0ci5sZW5ndGggPT09IDEgJiYgISFzdHIubWF0Y2goL1xcUy8pO1xuICB9XG5cbiAgLypcbiAgICogQ29tdW5lcyAtIGZvY3VzXG4gICAqL1xuXG4gIGZvY3VzSXRlbShpdGVtSW5kZXg6IG51bWJlciwgaG92ZXI/OiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3QgaGFzRm9jdXMgPSB0aGlzLm1lbnVuYXZpZ2F0aW9uLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gICAgY29uc3QgaXNPcGVuID0gdGhpcy5tZW51RGF0YVt0aGlzLmN1cnJlbnRGb2N1c0l0ZW1JbmRleF0ub3BlbjtcblxuICAgIGlmICghaG92ZXIgfHwgaGFzRm9jdXMpIHtcbiAgICAgIHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5tZW51SXRlbS5saW5rLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNsb3NlTWVudSgpO1xuICAgIGlmIChpc09wZW4gJiYgdGhpcy5oYXNQb3B1cE1lbnUoaXRlbUluZGV4KSkge1xuICAgICAgdGhpcy5vcGVuTWVudShpdGVtSW5kZXgpO1xuICAgIH1cblxuICAgIHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4ID0gaXRlbUluZGV4O1xuICB9XG5cbiAgZm9jdXNOZXh0QXZhaWxhYmxlSXRlbShmcm9tSXRlbUluZGV4OiBudW1iZXIsIHN0ZXA6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCBuZXh0SXRlbSA9IGZyb21JdGVtSW5kZXg7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgZG8ge1xuICAgICAgbmV4dEl0ZW0gPSAobmV4dEl0ZW0gKyBpdGVtcy5sZW5ndGggKyBzdGVwKSAlIGl0ZW1zLmxlbmd0aDtcbiAgICB9IHdoaWxlICghdGhpcy5pc0l0ZW1Gb2N1c2FibGUobmV4dEl0ZW0pICYmIG5leHRJdGVtICE9PSBmcm9tSXRlbUluZGV4KTtcblxuICAgIGlmIChuZXh0SXRlbSAhPT0gZnJvbUl0ZW1JbmRleCkge1xuICAgICAgdGhpcy5mb2N1c0l0ZW0obmV4dEl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzRmlyc3RJdGVtKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzSXRlbUZvY3VzYWJsZSgwKSkge1xuICAgICAgdGhpcy5mb2N1c0l0ZW0oMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlSXRlbSgwLCArMSk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNMYXN0SXRlbSgpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBpZiAodGhpcy5pc0l0ZW1Gb2N1c2FibGUoaXRlbXMubGVuZ3RoIC0gMSkpIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKGl0ZW1zLmxlbmd0aCAtIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvY3VzTmV4dEF2YWlsYWJsZUl0ZW0oaXRlbXMubGVuZ3RoIC0gMSwgLTEpO1xuICAgIH1cbiAgfVxuXG4gIGlzSXRlbUZvY3VzYWJsZShpdGVtSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy5nZXRJdGVtcygpW2l0ZW1JbmRleF0uZGlzYWJsZWQ7XG4gIH1cblxuICBmb2N1c0l0ZW1CeUZpcnN0Q2hhcihjaGFyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtQ29udGVudHM6IHN0cmluZ1tdID0gdGhpcy5tZW51SXRlbXMubWFwKFxuICAgICAgKG1lbnVJdGVtKSA9PiBtZW51SXRlbS5pdGVtQ29udGVudFdyYXBwZXIubmF0aXZlRWxlbWVudC50ZXh0Q29udGVudFxuICAgICk7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5jdXJyZW50Rm9jdXNJdGVtSW5kZXg7XG4gICAgbGV0IGZvdW5kSW5kZXggPSAtMTtcbiAgICBkbyB7XG4gICAgICBpbmRleCA9IChpbmRleCArIGl0ZW1Db250ZW50cy5sZW5ndGggKyAxKSAlIGl0ZW1Db250ZW50cy5sZW5ndGg7XG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW1Db250ZW50c1tpbmRleF0gJiZcbiAgICAgICAgaXRlbUNvbnRlbnRzW2luZGV4XS50cmltKCkuc3Vic3RyKDAsIDEpLnRvTG93ZXJDYXNlKCkgPT09IGNoYXIudG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICB0aGlzLmlzSXRlbUZvY3VzYWJsZShpbmRleClcbiAgICAgICkge1xuICAgICAgICBmb3VuZEluZGV4ID0gaW5kZXg7XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZm91bmRJbmRleCA9PT0gLTEgJiYgaW5kZXggIT09IHRoaXMuY3VycmVudEZvY3VzSXRlbUluZGV4KTtcblxuICAgIGlmIChmb3VuZEluZGV4ID49IDApIHtcbiAgICAgIHRoaXMuZm9jdXNJdGVtKGZvdW5kSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzU3ViSXRlbShpdGVtSW5kZXg6IG51bWJlciwgc3ViSXRlbUluZGV4OiBudW1iZXIsIHN1YlN1Ykl0ZW1JbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0ubWVudUl0ZW0ucG9wdXBNZW51SXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgbWVudURhdGFJbmRleCA9IHN1Ykl0ZW1JbmRleDtcbiAgICAgIHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5jdXJyZW50Rm9jdXNTdWJJdGVtSW5kZXggPSBzdWJJdGVtSW5kZXg7XG4gICAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViU3ViSXRlbUluZGV4ID0gc3ViU3ViSXRlbUluZGV4O1xuICAgICAgY29uc3QgZWxlbSA9IHRoaXMubWVudURhdGFbaXRlbUluZGV4XS5tZW51SXRlbS5wb3B1cE1lbnVJdGVtcy50b0FycmF5KClbbWVudURhdGFJbmRleF0ubmF0aXZlRWxlbWVudDtcbiAgICAgIGlmIChlbGVtKSB7XG4gICAgICAgIGNvbnN0IGFFbGVtID0gZWxlbS5xdWVyeVNlbGVjdG9yKCdhJyk7XG4gICAgICAgIGlmIChhRWxlbSkge1xuICAgICAgICAgIGFFbGVtLmZvY3VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZWxlbS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdObyBzdWJpdGVtIHRvIGZvY3VzJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHN1Yml0ZW1zJyk7XG4gICAgfVxuICB9XG5cbiAgZm9jdXNOZXh0QXZhaWxhYmxlU3ViSXRlbShcbiAgICBpdGVtSW5kZXg6IG51bWJlcixcbiAgICBmcm9tSXRlbVN1YkluZGV4OiBudW1iZXIsXG4gICAgZnJvbUl0ZW1TdWJTdWJJbmRleDogbnVtYmVyLFxuICAgIHN0ZXA6IG51bWJlclxuICApOiB2b2lkIHtcbiAgICBsZXQgbmV4dFN1YkluZGV4ID0gZnJvbUl0ZW1TdWJJbmRleDtcbiAgICBsZXQgbmV4dFN1YlN1YkluZGV4ID0gZnJvbUl0ZW1TdWJTdWJJbmRleDtcbiAgICBsZXQgYWxsU3ViSXRlbXNDaGVja2VkO1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5nZXRJdGVtcygpO1xuICAgIGRvIHtcbiAgICAgIGNvbnN0IG5leHRJbmRleGVzID0gdGhpcy5nZXROZXh0U3ViSXRlbUluZGV4ZXMoaXRlbXMsIGl0ZW1JbmRleCwgbmV4dFN1YkluZGV4LCBuZXh0U3ViU3ViSW5kZXgsIHN0ZXApO1xuICAgICAgbmV4dFN1YkluZGV4ID0gbmV4dEluZGV4ZXMuc3ViSW5kZXg7XG4gICAgICBuZXh0U3ViU3ViSW5kZXggPSBuZXh0SW5kZXhlcy5zdWJTdWJJbmRleDtcbiAgICAgIGFsbFN1Ykl0ZW1zQ2hlY2tlZCA9IGZyb21JdGVtU3ViSW5kZXggPT09IG5leHRTdWJJbmRleCAmJiBmcm9tSXRlbVN1YlN1YkluZGV4ID09PSBuZXh0U3ViU3ViSW5kZXg7XG4gICAgfSB3aGlsZSAoIXRoaXMuaXNTdWJJdGVtRm9jdXNhYmxlKGl0ZW1JbmRleCwgbmV4dFN1YkluZGV4LCBuZXh0U3ViU3ViSW5kZXgpICYmICFhbGxTdWJJdGVtc0NoZWNrZWQpO1xuXG4gICAgaWYgKCFhbGxTdWJJdGVtc0NoZWNrZWQpIHtcbiAgICAgIHRoaXMuZm9jdXNTdWJJdGVtKGl0ZW1JbmRleCwgbmV4dFN1YkluZGV4LCBuZXh0U3ViU3ViSW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzRmlyc3RTdWJJdGVtKGl0ZW1JbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgbGV0IGZpcnN0U3ViU3ViSXRlbSA9IG51bGw7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICBpZiAoc3ViSXRlbXMgJiYgc3ViSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgZmlyc3RTdWJTdWJJdGVtID0gMDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1N1Ykl0ZW1Gb2N1c2FibGUoaXRlbUluZGV4LCAwLCBmaXJzdFN1YlN1Ykl0ZW0pKSB7XG4gICAgICB0aGlzLmZvY3VzU3ViSXRlbShpdGVtSW5kZXgsIDAsIGZpcnN0U3ViU3ViSXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlU3ViSXRlbShpdGVtSW5kZXgsIDAsIGZpcnN0U3ViU3ViSXRlbSwgKzEpO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzTGFzdFN1Ykl0ZW0oaXRlbUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBjb25zdCBzdWJJdGVtcyA9IHRoaXMuZ2V0SXRlbVN1Yml0ZW1zKGl0ZW1zW2l0ZW1JbmRleF0pO1xuICAgIGNvbnN0IGxhc3RJdGVtSW5kZXggPSBzdWJJdGVtcy5sZW5ndGggLSAxO1xuICAgIGNvbnN0IGxhc3RJdGVtID0gc3ViSXRlbXNbbGFzdEl0ZW1JbmRleF07XG4gICAgbGV0IGxhc3RTdWJTdWJJdGVtID0gbnVsbDtcblxuICAgIGlmICh0aGlzLmlzU3ViSXRlbUZvY3VzYWJsZShpdGVtSW5kZXgsIGxhc3RJdGVtSW5kZXgsIGxhc3RTdWJTdWJJdGVtKSkge1xuICAgICAgdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCBsYXN0SXRlbUluZGV4LCBsYXN0U3ViU3ViSXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNOZXh0QXZhaWxhYmxlU3ViSXRlbShpdGVtSW5kZXgsIGxhc3RJdGVtSW5kZXgsIGxhc3RTdWJTdWJJdGVtLCAtMSk7XG4gICAgfVxuICB9XG5cbiAgaXNTdWJJdGVtRm9jdXNhYmxlKGl0ZW1JbmRleDogbnVtYmVyLCBzdWJJdGVtSW5kZXg6IG51bWJlciwgc3ViU3ViSXRlbUluZGV4PzogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEl0ZW1zKCk7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcbiAgICBsZXQgaXRlbTogTWVudU5hdmlnYXRpb25JdGVtU3ViSXRlbSB8IE1lbnVOYXZpZ2F0aW9uSXRlbVN1Ykl0ZW1TdWJJdGVtID0gc3ViSXRlbXNbc3ViSXRlbUluZGV4XTtcblxuICAgIGxldCBpc0ZvY3VzYWJsZSA9IGZhbHNlO1xuICAgIGlmIChpdGVtLnJvbGUgIT09ICdzZXBhcmF0b3InICYmIGl0ZW0ucm9sZSAhPT0gJ25vbmUnKSB7XG4gICAgICBpc0ZvY3VzYWJsZSA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBpc0ZvY3VzYWJsZTtcbiAgfVxuXG4gIGZvY3VzU3ViSXRlbUJ5Rmlyc3RDaGFyKGl0ZW1JbmRleDogbnVtYmVyLCBjaGFyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBpdGVtQ29udGVudHM6IHN0cmluZ1tdID0gdGhpcy5tZW51SXRlbXNcbiAgICAgIC50b0FycmF5KClcbiAgICAgIFtpdGVtSW5kZXhdLnBvcHVwTWVudUl0ZW1zLm1hcCgobWVudUl0ZW0pID0+IG1lbnVJdGVtLm5hdGl2ZUVsZW1lbnQudGV4dENvbnRlbnQpO1xuICAgIGxldCBzdWJJdGVtSW5kZXggPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViSXRlbUluZGV4O1xuICAgIGxldCBzdWJTdWJJdGVtSW5kZXggPSB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViU3ViSXRlbUluZGV4O1xuICAgIGxldCBmb3VuZFN1YkluZGV4ID0gLTE7XG4gICAgbGV0IGZvdW5kU3ViU3ViSW5kZXggPSBudWxsO1xuICAgIGxldCBhbGxTdWJJdGVtc0NoZWNrZWQgPSBmYWxzZTtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ2V0SXRlbXMoKTtcbiAgICBkbyB7XG4gICAgICBjb25zdCBuZXh0SW5kZXhlcyA9IHRoaXMuZ2V0TmV4dFN1Ykl0ZW1JbmRleGVzKGl0ZW1zLCBpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4LCArMSk7XG4gICAgICBzdWJJdGVtSW5kZXggPSBuZXh0SW5kZXhlcy5zdWJJbmRleDtcbiAgICAgIHN1YlN1Ykl0ZW1JbmRleCA9IG5leHRJbmRleGVzLnN1YlN1YkluZGV4O1xuICAgICAgY29uc3QgaW5kZXggPSBzdWJJdGVtSW5kZXg7XG4gICAgICBpZiAoXG4gICAgICAgIGl0ZW1Db250ZW50c1tpbmRleF0gJiZcbiAgICAgICAgaXRlbUNvbnRlbnRzW2luZGV4XS50cmltKCkuc3Vic3RyKDAsIDEpLnRvTG93ZXJDYXNlKCkgPT09IGNoYXIudG9Mb3dlckNhc2UoKSAmJlxuICAgICAgICB0aGlzLmlzU3ViSXRlbUZvY3VzYWJsZShpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleCwgc3ViU3ViSXRlbUluZGV4KVxuICAgICAgKSB7XG4gICAgICAgIGZvdW5kU3ViSW5kZXggPSBzdWJJdGVtSW5kZXg7XG4gICAgICAgIGZvdW5kU3ViU3ViSW5kZXggPSBzdWJTdWJJdGVtSW5kZXg7XG4gICAgICB9XG4gICAgICBhbGxTdWJJdGVtc0NoZWNrZWQgPVxuICAgICAgICB0aGlzLm1lbnVEYXRhW2l0ZW1JbmRleF0uY3VycmVudEZvY3VzU3ViSXRlbUluZGV4ID09PSBzdWJJdGVtSW5kZXggJiZcbiAgICAgICAgdGhpcy5tZW51RGF0YVtpdGVtSW5kZXhdLmN1cnJlbnRGb2N1c1N1YlN1Ykl0ZW1JbmRleCA9PT0gc3ViU3ViSXRlbUluZGV4O1xuICAgIH0gd2hpbGUgKGZvdW5kU3ViSW5kZXggPT09IC0xICYmICFhbGxTdWJJdGVtc0NoZWNrZWQpO1xuXG4gICAgaWYgKGZvdW5kU3ViSW5kZXggPj0gMCkge1xuICAgICAgdGhpcy5mb2N1c1N1Ykl0ZW0oaXRlbUluZGV4LCBmb3VuZFN1YkluZGV4LCBmb3VuZFN1YlN1YkluZGV4KTtcbiAgICB9XG4gIH1cblxuICAvKlxuICAgKiBNZXRvZG9zIHBhcmEgZmFjaWxpdGFyIGNvbnRlbmlkb1xuICAgKi9cblxuICBnZXRJdGVtcygpOiBNZW51TmF2aWdhdGlvbkl0ZW1bXSB8IE1lbnVOYXZpZ2F0aW9uSXRlbUNvbXBvbmVudFtdIHtcbiAgICBsZXQgaXRlbXM7XG4gICAgaWYgKHRoaXMuaXRlbUNvbXBvbmVudExpc3QgJiYgdGhpcy5pdGVtQ29tcG9uZW50TGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICBpdGVtcyA9IHRoaXMuaXRlbUNvbXBvbmVudExpc3QudG9BcnJheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpdGVtcyA9IHRoaXMuaXRlbXM7XG4gICAgfVxuICAgIHJldHVybiBpdGVtcztcbiAgfVxuXG4gIGdldEl0ZW1TdWJpdGVtcyhcbiAgICBpdGVtOiBNZW51TmF2aWdhdGlvbkl0ZW0gfCBNZW51TmF2aWdhdGlvbkl0ZW1Db21wb25lbnRcbiAgKTogTWVudU5hdmlnYXRpb25JdGVtU3ViSXRlbVtdIHwgTWVudU5hdmlnYXRpb25TdWJpdGVtQ29tcG9uZW50W10ge1xuICAgIGxldCBzdWJJdGVtcyA9IFtdO1xuICAgIGlmIChpdGVtIGluc3RhbmNlb2YgTWVudU5hdmlnYXRpb25JdGVtQ29tcG9uZW50KSB7XG4gICAgICBzdWJJdGVtcyA9IGl0ZW0uZ2V0U3ViSXRlbXMoKTtcbiAgICB9XG5cbiAgICBpZiAoIXN1Ykl0ZW1zIHx8IHN1Ykl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgc3ViSXRlbXMgPSBpdGVtLnN1YiA/IGl0ZW0uc3ViLml0ZW1zIDogW107XG4gICAgfVxuICAgIHJldHVybiBzdWJJdGVtcztcbiAgfVxuXG4gIGdldE5leHRTdWJJdGVtSW5kZXhlcyhcbiAgICBpdGVtcyxcbiAgICBpdGVtSW5kZXgsXG4gICAgbmV4dFN1YkluZGV4LFxuICAgIG5leHRTdWJTdWJJbmRleCxcbiAgICBzdGVwXG4gICk6IHsgc3ViSW5kZXg6IG51bWJlcjsgc3ViU3ViSW5kZXg/OiBudW1iZXIgfSB7XG4gICAgY29uc3Qgc3ViSXRlbXMgPSB0aGlzLmdldEl0ZW1TdWJpdGVtcyhpdGVtc1tpdGVtSW5kZXhdKTtcblxuICAgIGxldCBjaGVja05leHRTdWJJdGVtID0gdHJ1ZTtcbiAgICBpZiAoY2hlY2tOZXh0U3ViSXRlbSkge1xuICAgICAgbmV4dFN1YkluZGV4ID0gKG5leHRTdWJJbmRleCArIHN0ZXAgKyBzdWJJdGVtcy5sZW5ndGgpICUgc3ViSXRlbXMubGVuZ3RoO1xuICAgIH1cbiAgICByZXR1cm4geyBzdWJJbmRleDogbmV4dFN1YkluZGV4LCBzdWJTdWJJbmRleDogbmV4dFN1YlN1YkluZGV4IH07XG4gIH1cblxuICBnZXRJZFByZWZpeCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmlkUHJlZml4ID8gdGhpcy5pZFByZWZpeCA6IHRoaXMuaWQgKyAnbWVudW5hdmlnYXRpb24taXRlbSc7XG4gIH1cblxuICBnZXRJdGVtSWQoaXRlbSwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgbGV0IGlkOiBzdHJpbmc7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGlmIChpdGVtLmlkKSB7XG4gICAgICAgIGlkID0gaXRlbS5pZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlkID0gYCR7dGhpcy5nZXRJZFByZWZpeCgpfS0keysraW5kZXh9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGlkO1xuICB9XG5cbiAgZ2V0U3ViSXRlbUlkKGl0ZW0sIGluZGV4OiBudW1iZXIsIHBhcmVudElkOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBpZDogc3RyaW5nO1xuICAgIGlmIChpdGVtKSB7XG4gICAgICBpZiAoaXRlbS5pZCkge1xuICAgICAgICBpZCA9IGl0ZW0uaWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZCA9IGBzdWItJHtwYXJlbnRJZH0tJHsrK2luZGV4fWA7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpZDtcbiAgfVxufVxuIiwiPHVsXG4gICNtZW51bmF2aWdhdGlvblxuICBbaWRdPVwiaWQgKyAnLW1lbnUtbmF2aWdhdGlvbidcIlxuICBjbGFzcz1cImZsZXggZmxleC13cmFwIGdhcC1iYXNlXCJcbiAgKGZvY3VzaW4pPVwiaGFuZGxlTWVudUZvY3VzSW4oKVwiXG4gIChmb2N1c291dCk9XCJoYW5kbGVNZW51Rm9jdXNPdXQoJGV2ZW50KVwiXG4gIFtuZ0NsYXNzXT1cInsgZm9jdXM6IGlzRm9jdXNlZCB9XCJcbiAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWwgPyBhcmlhTGFiZWwgOiBudWxsXCI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZ2V0SXRlbXMoKTsgaW5kZXggYXMgaXRlbUluZGV4XCI+XG4gICAgPGxpXG4gICAgICBjbGFzcz1cInJlbGF0aXZlXCJcbiAgICAgIGRlc3lNZW51YmFyaXRlbVxuICAgICAgKGNvbnRlbnRDaGFuZ2VkKT1cImNoZWNrQ2hhbmdlcygpXCI+XG4gICAgICA8YVxuICAgICAgICAqbmdJZj1cIml0ZW0uaHJlZlwiXG4gICAgICAgICNsaW5rXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVNZW51SXRlbUNsaWNrKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAgIChrZXlkb3duKT1cImhhbmRsZU1lbnVJdGVtS2V5ZG93bigkZXZlbnQsIGl0ZW1JbmRleClcIlxuICAgICAgICAobW91c2VvdmVyKT1cImhhbmRsZU1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleClcIlxuICAgICAgICAoZGVzeUF0dHJpYnV0ZUNoYW5nZSk9XCJjaGVja0NoYW5nZXMoKVwiXG4gICAgICAgIFthdHRyaWJ1dGVzVG9DaGVja109XCInZGlzYWJsZWQnXCJcbiAgICAgICAgW2F0dHIucm9sZV09XCJpdGVtLmRpc2FibGVkID8gbGluayA6IG51bGxcIlxuICAgICAgICBbaWRdPVwiZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleClcIlxuICAgICAgICBbdGFyZ2V0XT1cIml0ZW0udGFyZ2V0XCJcbiAgICAgICAgW2hyZWZdPVwiaXRlbS5ocmVmXCJcbiAgICAgICAgW2NsYXNzXT1cIlsnYy1tZW51LW5hdmlnYXRpb25fX2J1dHRvbicsIGl0ZW0uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ2MtbWVudS1uYXZpZ2F0aW9uX19idXR0b24tLWRpc2FibGVkJzogaXRlbS5kaXNhYmxlZCxcbiAgICAgICAgICAnYy1tZW51LW5hdmlnYXRpb25fX2J1dHRvbi0tcHJpbWFyeSc6IGl0ZW0uYWN0aXZlLFxuICAgICAgICAgICdjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uLS1oYXMtc2VsZWN0aW9uJzogaXRlbS5hY3RpdmUsXG4gICAgICAgIH1cIlxuICAgICAgICBbYXR0ci50aXRsZV09XCJpdGVtLnRpdGxlID8gaXRlbS50aXRsZSA6IG51bGxcIlxuICAgICAgICBbYXR0ci5kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkID8gaXRlbS5kaXNhYmxlZCA6IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLWRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgPyBpdGVtLmRpc2FibGVkIDogaXRlbS5hcmlhRGlzYWJsZWQgPyBpdGVtLmFyaWFEaXNhYmxlZCA6IG51bGxcIlxuICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiaXRlbS5kaXNhYmxlZCA/ICdwYWdlJyA6IGl0ZW0uYXJpYUN1cnJlbnQgPyBpdGVtLmFyaWFDdXJyZW50IDogbnVsbFwiXG4gICAgICAgIFtkZXN5QXBwQWNjZXNzaWJpbGl0eV09XCJpdGVtXCJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiaXRlbS5kaXNhYmxlZCA/IC0xIDogaXRlbUluZGV4ID09PSBjdXJyZW50Rm9jdXNJdGVtSW5kZXggPyAwIDogLTFcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cImlubGluZS1mbGV4IHNlbGYtY2VudGVyIG1heC13LXhzIGFsaWduLW1pZGRsZSB0cnVuY2F0ZSBwb2ludGVyLWV2ZW50cy1ub25lXCJcbiAgICAgICAgICAjaXRlbUNvbnRlbnRXcmFwcGVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7IGNvbXBvbmVudDogaXRlbSwgaHRtbDogaXRlbS5odG1sLCB0ZXh0OiBpdGVtLnRleHQgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2E+XG4gICAgICA8YVxuICAgICAgICAqbmdJZj1cIiFpdGVtLmhyZWYgJiYgaXRlbS5yb3V0ZXJMaW5rXCJcbiAgICAgICAgI2xpbmtcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZU1lbnVJdGVtQ2xpY2soJGV2ZW50LCBpdGVtSW5kZXgpXCJcbiAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4KVwiXG4gICAgICAgIChkZXN5QXR0cmlidXRlQ2hhbmdlKT1cImNoZWNrQ2hhbmdlcygpXCJcbiAgICAgICAgW2F0dHJpYnV0ZXNUb0NoZWNrXT1cIidkaXNhYmxlZCdcIlxuICAgICAgICBbYXR0ci5yb2xlXT1cIml0ZW0uZGlzYWJsZWQgPyBsaW5rIDogbnVsbFwiXG4gICAgICAgIFtpZF09XCJnZXRJdGVtSWQoaXRlbSwgaXRlbUluZGV4KVwiXG4gICAgICAgIFt0YXJnZXRdPVwiaXRlbS50YXJnZXRcIlxuICAgICAgICBbcm91dGVyTGlua109XCJpdGVtLnJvdXRlckxpbmtcIlxuICAgICAgICBbcm91dGVyTGlua0FjdGl2ZV09XCJpdGVtLnJvdXRlckxpbmtBY3RpdmVDbGFzc2VzID8gaXRlbS5yb3V0ZXJMaW5rQWN0aXZlQ2xhc3NlcyA6IFtdXCJcbiAgICAgICAgW2ZyYWdtZW50XT1cIml0ZW0uZnJhZ21lbnRcIlxuICAgICAgICBbY2xhc3NdPVwiWydjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uJywgaXRlbS5jbGFzc2VzXSB8IG1ha2VIdG1sTGlzdFwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnYy1tZW51LW5hdmlnYXRpb25fX2J1dHRvbi0tZGlzYWJsZWQnOiBpdGVtLmRpc2FibGVkLFxuICAgICAgICAgICdjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uLS1wcmltYXJ5JzogaXRlbS5hY3RpdmUsXG4gICAgICAgICAgJ2MtbWVudS1uYXZpZ2F0aW9uX19idXR0b24tLWhhcy1zZWxlY3Rpb24nOiBpdGVtLmFjdGl2ZSxcbiAgICAgICAgfVwiXG4gICAgICAgIFthdHRyLmRpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWQgPyBpdGVtLmRpc2FibGVkIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZCA/IGl0ZW0uZGlzYWJsZWQgOiBpdGVtLmFyaWFEaXNhYmxlZCA/IGl0ZW0uYXJpYURpc2FibGVkIDogbnVsbFwiXG4gICAgICAgIFtkZXN5QXBwQWNjZXNzaWJpbGl0eV09XCJpdGVtXCJcbiAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cIml0ZW0uZGlzYWJsZWQgPyAncGFnZScgOiBpdGVtLmFyaWFDdXJyZW50ID8gaXRlbS5hcmlhQ3VycmVudCA6IG51bGxcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpdGVtLmRpc2FibGVkID8gLTEgOiBpdGVtSW5kZXggPT09IGN1cnJlbnRGb2N1c0l0ZW1JbmRleCA/IDAgOiAtMVwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWZsZXggc2VsZi1jZW50ZXIgbWF4LXcteHMgYWxpZ24tbWlkZGxlIHRydW5jYXRlIHBvaW50ZXItZXZlbnRzLW5vbmVcIlxuICAgICAgICAgICNpdGVtQ29udGVudFdyYXBwZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cInsgY29tcG9uZW50OiBpdGVtLCBodG1sOiBpdGVtLmh0bWwsIHRleHQ6IGl0ZW0udGV4dCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvYT5cbiAgICAgIDxidXR0b25cbiAgICAgICAgKm5nSWY9XCIhaXRlbS5ocmVmICYmICFpdGVtLnJvdXRlckxpbmtcIlxuICAgICAgICAjbGlua1xuICAgICAgICAjaXRlbUNvbnRlbnRXcmFwcGVyXG4gICAgICAgIChjbGljayk9XCJoYW5kbGVNZW51SXRlbUNsaWNrKCRldmVudCwgaXRlbUluZGV4KVwiXG4gICAgICAgIChrZXlkb3duKT1cImhhbmRsZU1lbnVJdGVtS2V5ZG93bigkZXZlbnQsIGl0ZW1JbmRleClcIlxuICAgICAgICAobW91c2VvdmVyKT1cImhhbmRsZU1lbnVJdGVtTW91c2VPdmVyKGl0ZW1JbmRleClcIlxuICAgICAgICAoZGVzeUF0dHJpYnV0ZUNoYW5nZSk9XCJjaGVja0NoYW5nZXMoKVwiXG4gICAgICAgIFthdHRyaWJ1dGVzVG9DaGVja109XCInZGlzYWJsZWQnXCJcbiAgICAgICAgW2NsYXNzXT1cIlsnYy1tZW51LW5hdmlnYXRpb25fX2J1dHRvbicsIGl0ZW0uY2xhc3Nlc10gfCBtYWtlSHRtbExpc3RcIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ2MtbWVudS1uYXZpZ2F0aW9uX19idXR0b24tLWRpc2FibGVkJzogaXRlbS5kaXNhYmxlZCxcbiAgICAgICAgICAnYy1tZW51LW5hdmlnYXRpb25fX2J1dHRvbi0tcHJpbWFyeSc6IGl0ZW0uYWN0aXZlLFxuICAgICAgICAgICdjLW1lbnUtbmF2aWdhdGlvbl9fYnV0dG9uLS1oYXMtc2VsZWN0aW9uJzogaXRlbS5hY3RpdmUsXG4gICAgICAgIH1cIlxuICAgICAgICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIml0ZW0uc3ViID8gKCEhKG1lbnVEYXRhICYmIG1lbnVEYXRhW2l0ZW1JbmRleF0ub3BlbikgPyB0cnVlIDogZmFsc2UpIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtaGFzcG9wdXBdPVwiaXRlbS5zdWIgPyAoISEobWVudURhdGEgJiYgbWVudURhdGFbaXRlbUluZGV4XS5vcGVuKSA/IHRydWUgOiBmYWxzZSkgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZCA/IGl0ZW0uZGlzYWJsZWQgOiBudWxsXCJcbiAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkID8gaXRlbS5kaXNhYmxlZCA6IGl0ZW0uYXJpYURpc2FibGVkID8gaXRlbS5hcmlhRGlzYWJsZWQgOiBudWxsXCJcbiAgICAgICAgW2Rlc3lBcHBBY2Nlc3NpYmlsaXR5XT1cIml0ZW1cIlxuICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIml0ZW0uc3ViID8gKGl0ZW0uYXJpYUNvbnRyb2xzID8gaXRlbS5hcmlhQ29udHJvbHMgOiBpZCArICctc3ViLWxpc3QnKSA6IG51bGxcIlxuICAgICAgICBbYXR0ci50YWJpbmRleF09XCJpdGVtLmRpc2FibGVkID8gLTEgOiBpdGVtSW5kZXggPT09IGN1cnJlbnRGb2N1c0l0ZW1JbmRleCA/IDAgOiAtMVwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICpuZ0lmPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgICAgIGNsYXNzPVwic3Itb25seVwiPlxuICAgICAgICAgIEl0ZW0gYWN0aXZvOlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJpbmxpbmUtZmxleCBzZWxmLWNlbnRlciBtYXgtdy14cyBhbGlnbi1taWRkbGUgdHJ1bmNhdGUgcG9pbnRlci1ldmVudHMtbm9uZVwiXG4gICAgICAgICAgI2l0ZW1Db250ZW50V3JhcHBlcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwieyBjb21wb25lbnQ6IGl0ZW0sIGh0bWw6IGl0ZW0uaHRtbCwgdGV4dDogaXRlbS50ZXh0IH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICA8c3ZnXG4gICAgICAgICAgKm5nSWY9XCJpdGVtLnN1YlwiXG4gICAgICAgICAgY2xhc3M9XCJpbmxpbmUtYmxvY2sgLW1yLTIgYWxpZ24tbWlkZGxlIC1teS1weCBwb2ludGVyLWV2ZW50cy1ub25lXCJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDk2IDk2XCJcbiAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIlxuICAgICAgICAgIGZvY3VzYWJsZT1cImZhbHNlXCJcbiAgICAgICAgICB3aWR0aD1cIjEuNWVtXCJcbiAgICAgICAgICBoZWlnaHQ9XCIxLjVlbVwiPlxuICAgICAgICAgIDxnPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZD1cIk00Ni43MSA1OC4wMzdhMS44MjMgMS44MjMgMCAwMDIuNTgxIDBMNjIuMDQ4IDQ1LjI4YTEuODIzIDEuODIzIDAgMDAtMS4yOS0zLjExM0gzNS4yNDNhMS44MjMgMS44MjMgMCAwMC0xLjI5MSAzLjExM3pcIiAvPlxuICAgICAgICAgIDwvZz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2J1dHRvbj5cblxuICAgICAgPGRpdlxuICAgICAgICAqbmdJZj1cIml0ZW0uc3ViICYmIGdldEl0ZW1TdWJpdGVtcyhpdGVtKVwiXG4gICAgICAgIGNsYXNzPVwiYy1tZW51LW5hdmlnYXRpb25fX3N1YiBhYnNvbHV0ZSBib3R0b20tMCBsZWZ0LTBcIj5cbiAgICAgICAgPHVsXG4gICAgICAgICAgW2lkXT1cImlkICsgJy1zdWItbGlzdCdcIlxuICAgICAgICAgIFtzdHlsZV09XCJtZW51RGF0YSAmJiBtZW51RGF0YVtpdGVtSW5kZXhdLm9wZW4gPyAnZGlzcGxheTpibG9jaycgOiAnZGlzcGxheTpub25lJ1wiXG4gICAgICAgICAgI3BvcHVwTWVudVxuICAgICAgICAgIHJvbGU9XCJtZW51XCJcbiAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICBpdGVtLnN1Yi5jbGFzc2VzXG4gICAgICAgICAgICAgID8gaXRlbS5zdWIuY2xhc3Nlc1xuICAgICAgICAgICAgICA6ICdjLW1lbnUtbmF2aWdhdGlvbl9fdG9vbHRpcCB3LW1heCBtYXgtdy02NCBib3JkZXIgYm9yZGVyLW5ldXRyYWwtYmFzZSBzaGFkb3ctbWQgYmctd2hpdGUgdGV4dC1zbSdcbiAgICAgICAgICBcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiaXRlbS5hcmlhTGFiZWwgPyBpdGVtLmFyaWFMYWJlbCA6IGl0ZW0uc3ViLmFyaWFMYWJlbCA/IGl0ZW0uc3ViLmFyaWFMYWJlbCA6IG51bGxcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiaXRlbS5zdWIuYXJpYURpc2FibGVkID8gaXRlbS5zdWIuYXJpYURpc2FibGVkIDogbnVsbFwiXG4gICAgICAgICAgW2Rlc3lBcHBBY2Nlc3NpYmlsaXR5XT1cIml0ZW0uc3ViXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3ViSXRlbSBvZiBnZXRJdGVtU3ViaXRlbXMoaXRlbSk7IGluZGV4IGFzIHN1Ykl0ZW1JbmRleFwiPlxuICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICNwb3B1cE1lbnVJdGVtXG4gICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICBbaWRdPVwiZ2V0U3ViSXRlbUlkKHN1Ykl0ZW0sIHN1Ykl0ZW1JbmRleCwgZ2V0SXRlbUlkKGl0ZW0sIGl0ZW1JbmRleCkpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1DbGljayhpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAobW91c2VvdmVyKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwiaGFuZGxlUG9wdXBNZW51SXRlbUtleWRvd24oJGV2ZW50LCBpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIj5cbiAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAqbmdJZj1cInN1Ykl0ZW0uaHJlZlwiXG4gICAgICAgICAgICAgICAgI2l0ZW1Db250ZW50V3JhcHBlclxuICAgICAgICAgICAgICAgIFtocmVmXT1cInN1Ykl0ZW0uaHJlZlwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1DbGljayhpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwiaGFuZGxlUG9wdXBNZW51SXRlbU1vdXNlT3ZlcihpdGVtSW5kZXgsIHN1Ykl0ZW1JbmRleClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1LZXlkb3duKCRldmVudCwgaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAoZGVzeUF0dHJpYnV0ZUNoYW5nZSk9XCJjaGVja0NoYW5nZXMoKVwiXG4gICAgICAgICAgICAgICAgW2NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAnZmxleCBpdGVtcy1jZW50ZXIgcHgtYmFzZSBweS1zbSB0ZXh0LXNtIGhvdmVyOmJnLXByaW1hcnktYmFzZSBob3Zlcjp0ZXh0LXdoaXRlIGZvY3VzOmJnLXdhcm5pbmctYmFzZSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6c2hhZG93LW91dGxpbmUtZm9jdXMgZm9jdXM6dGV4dC1ibGFjaycsXG4gICAgICAgICAgICAgICAgICAgIHN1Ykl0ZW0uY2xhc3NlcyxcbiAgICAgICAgICAgICAgICAgIF0gfCBtYWtlSHRtbExpc3RcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3BvaW50ZXItZXZlbnRzLW5vbmUnOiBzdWJJdGVtLmRpc2FibGVkIH1cIlxuICAgICAgICAgICAgICAgIFt0YWJpbmRleF09XCJzdWJJdGVtLmRpc2FibGVkID8gLTEgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwic3ViSXRlbS5hY3RpdmUgPyAncGFnZScgOiBudWxsXCJcbiAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cInN1Ykl0ZW0udGFyZ2V0XCI+XG4gICAgICAgICAgICAgICAgPHN0cm9uZ1xuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb250LWJvbGRcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdWJJdGVtLmFjdGl2ZTsgZWxzZSBub0FjdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cIntcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHN1Ykl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgaHRtbDogc3ViSXRlbS5odG1sLFxuICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHN1Ykl0ZW0udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbm9BY3RpdmU+XG4gICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwie1xuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudDogc3ViSXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICBodG1sOiBzdWJJdGVtLmh0bWwsXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dDogc3ViSXRlbS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cInN1Ykl0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAxNDAgMTQwXCJcbiAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjFlbVwiXG4gICAgICAgICAgICAgICAgICB3aWR0aD1cIjFlbVwiXG4gICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5saW5lLWJsb2NrIGFsaWduLW1pZGRsZSBmbGV4LWluaXRpYWwgbWwtc20gdGV4dC1uZXV0cmFsLWJhc2UgZmlsbC1jdXJyZW50XCJcbiAgICAgICAgICAgICAgICAgIGFyaWEtaGlkZGVuPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBmb2N1c2FibGU9XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgZD1cIk03MCAwYTcwIDcwIDAgMTA3MCA3MEE3MC4wOCA3MC4wOCAwIDAwNzAgMHpNMjAgNzBhNTAgNTAgMCAwMTc0LjgtNDMuNCAyLjUxIDIuNTEgMCAwMTEuMjMgMS44NCAyLjQ4IDIuNDggMCAwMS0uNzEgMi4xTDMwLjU0IDk1LjMyYTIuNTEgMi41MSAwIDAxLTMuOTQtLjUyQTQ5LjYzIDQ5LjYzIDAgMDEyMCA3MHptMTAwIDBhNTAgNTAgMCAwMS03NC44IDQzLjQgMi41MSAyLjUxIDAgMDEtMS4yMy0xLjg0IDIuNDggMi40OCAwIDAxLjcxLTIuMWw2NC43OC02NC43OGEyLjUxIDIuNTEgMCAwMTMuOTQuNTJBNDkuNjMgNDkuNjMgMCAwMTEyMCA3MHpcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhc3ViSXRlbS5ocmVmICYmIHN1Ykl0ZW0ucm91dGVyTGlua1wiXG4gICAgICAgICAgICAgICAgI2l0ZW1Db250ZW50V3JhcHBlclxuICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInN1Ykl0ZW0ucm91dGVyTGlua1wiXG4gICAgICAgICAgICAgICAgW3JvdXRlckxpbmtBY3RpdmVdPVwic3ViSXRlbS5yb3V0ZXJMaW5rQWN0aXZlQ2xhc3NlcyA/IHN1Ykl0ZW0ucm91dGVyTGlua0FjdGl2ZUNsYXNzZXMgOiBbXVwiXG4gICAgICAgICAgICAgICAgW2ZyYWdtZW50XT1cInN1Ykl0ZW0uZnJhZ21lbnRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVQb3B1cE1lbnVJdGVtQ2xpY2soaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAobW91c2VvdmVyKT1cImhhbmRsZVBvcHVwTWVudUl0ZW1Nb3VzZU92ZXIoaXRlbUluZGV4LCBzdWJJdGVtSW5kZXgpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJoYW5kbGVQb3B1cE1lbnVJdGVtS2V5ZG93bigkZXZlbnQsIGl0ZW1JbmRleCwgc3ViSXRlbUluZGV4KVwiXG4gICAgICAgICAgICAgICAgKGRlc3lBdHRyaWJ1dGVDaGFuZ2UpPVwiY2hlY2tDaGFuZ2VzKClcIlxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJcbiAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgJ2ZsZXggaXRlbXMtY2VudGVyIHB4LWJhc2UgcHktc20gdGV4dC1zbSBob3ZlcjpiZy1wcmltYXJ5LWJhc2UgaG92ZXI6dGV4dC13aGl0ZSBmb2N1czpiZy13YXJuaW5nLWJhc2UgZm9jdXM6b3V0bGluZS1ub25lIGZvY3VzOnNoYWRvdy1vdXRsaW5lLWZvY3VzIGZvY3VzOnRleHQtYmxhY2snLFxuICAgICAgICAgICAgICAgICAgICBzdWJJdGVtLmNsYXNzZXMsXG4gICAgICAgICAgICAgICAgICBdIHwgbWFrZUh0bWxMaXN0XG4gICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdwb2ludGVyLWV2ZW50cy1ub25lJzogc3ViSXRlbS5kaXNhYmxlZCB9XCJcbiAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwic3ViSXRlbS5kaXNhYmxlZCA/IC0xIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1jdXJyZW50XT1cInN1Ykl0ZW0uYWN0aXZlID8gJ3BhZ2UnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW3RhcmdldF09XCJzdWJJdGVtLnRhcmdldFwiPlxuICAgICAgICAgICAgICAgIDxzdHJvbmdcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9udC1ib2xkXCJcbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3ViSXRlbS5hY3RpdmU7IGVsc2Ugbm9BY3RpdmVcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKmRlc3lDdXN0b21Jbm5lckNvbnRlbnQ9XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50OiBzdWJJdGVtLFxuICAgICAgICAgICAgICAgICAgICAgIGh0bWw6IHN1Ykl0ZW0uaHRtbCxcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiBzdWJJdGVtLnRleHQsXG4gICAgICAgICAgICAgICAgICAgIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3N0cm9uZz5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vQWN0aXZlPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqZGVzeUN1c3RvbUlubmVyQ29udGVudD1cIntcbiAgICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IHN1Ykl0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgaHRtbDogc3ViSXRlbS5odG1sLFxuICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHN1Ykl0ZW0udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdWJJdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTQwIDE0MFwiXG4gICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIxZW1cIlxuICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxZW1cIlxuICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImlubGluZS1ibG9jayBhbGlnbi1taWRkbGUgZmxleC1pbml0aWFsIG1sLXNtIHRleHQtbmV1dHJhbC1iYXNlIGZpbGwtY3VycmVudFwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgZm9jdXNhYmxlPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgIGQ9XCJNNzAgMGE3MCA3MCAwIDEwNzAgNzBBNzAuMDggNzAuMDggMCAwMDcwIDB6TTIwIDcwYTUwIDUwIDAgMDE3NC44LTQzLjQgMi41MSAyLjUxIDAgMDExLjIzIDEuODQgMi40OCAyLjQ4IDAgMDEtLjcxIDIuMUwzMC41NCA5NS4zMmEyLjUxIDIuNTEgMCAwMS0zLjk0LS41MkE0OS42MyA0OS42MyAwIDAxMjAgNzB6bTEwMCAwYTUwIDUwIDAgMDEtNzQuOCA0My40IDIuNTEgMi41MSAwIDAxLTEuMjMtMS44NCAyLjQ4IDIuNDggMCAwMS43MS0yLjFsNjQuNzgtNjQuNzhhMi41MSAyLjUxIDAgMDEzLjk0LjUyQTQ5LjYzIDQ5LjYzIDAgMDExMjAgNzB6XCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAqbmdJZj1cInN1Ykl0ZW0uZGl2aWRlclwiXG4gICAgICAgICAgICAgIGNsYXNzPVwibXktc20gYm9yZGVyLWIgYm9yZGVyLW5ldXRyYWwtYmFzZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Itb25seVwiPlNlcGFyYWRvcjwvZGl2PlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgIDwvbGk+XG4gICAgPGxpXG4gICAgICAjcG9wdXBNZW51SXRlbVxuICAgICAgKm5nSWY9XCJpdGVtLmRpdmlkZXJcIlxuICAgICAgW2NsYXNzXT1cIml0ZW0uZGl2aWRlci5jbGFzc2VzXCJcbiAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpkZXN5Q3VzdG9tSW5uZXJDb250ZW50PVwie1xuICAgICAgICAgIGNvbXBvbmVudDogaXRlbS5kaXZpZGVyLFxuICAgICAgICAgIGh0bWw6IGl0ZW0uZGl2aWRlci5odG1sLFxuICAgICAgICAgIHRleHQ6IGl0ZW0uZGl2aWRlci50ZXh0LFxuICAgICAgICB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9saT5cbiAgPC9uZy1jb250YWluZXI+XG48L3VsPlxuIl19
|