@yuuvis/client-framework 2.0.0-beta.0 → 2.0.0-beta.11
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/actions/lib/actions/delete-action/delete/delete.component.d.ts +3 -3
- package/actions/lib/actions/delete-action/delete-action.d.ts +1 -1
- package/actions/lib/actions.service.d.ts +7 -3
- package/actions/lib/components/contextmenu/contextmenu.component.d.ts +3 -1
- package/autocomplete/README.md +3 -0
- package/autocomplete/index.d.ts +3 -0
- package/autocomplete/lib/autocomplete.component.d.ts +72 -0
- package/autocomplete/lib/autocomplete.interface.d.ts +4 -0
- package/autocomplete/lib/autocomplete.module.d.ts +7 -0
- package/common/index.d.ts +4 -4
- package/common/lib/common.module.d.ts +19 -0
- package/common/lib/common.utils.d.ts +2 -0
- package/common/lib/components/confirm/confirm.component.d.ts +7 -0
- package/common/lib/components/confirm/confirm.interface.d.ts +7 -0
- package/common/lib/components/confirm/confirm.service.d.ts +9 -0
- package/common/lib/components/dialog/dialog.component.d.ts +6 -0
- package/common/lib/components/dialog/dialog.options.d.ts +7 -0
- package/common/lib/components/index.d.ts +5 -0
- package/common/lib/directives/autofocus-child.directive.d.ts +13 -0
- package/common/lib/directives/autofocus-delayed.directive.d.ts +18 -0
- package/common/lib/directives/drag-scroll.directive.d.ts +20 -0
- package/common/lib/directives/index.d.ts +8 -4
- package/common/lib/directives/noop-value-accessor.directive.d.ts +2 -2
- package/common/lib/mat-form-field.abstract.d.ts +41 -0
- package/common/lib/services/index.d.ts +1 -1
- package/common/lib/services/layout-settings/layout-settings.service.d.ts +18 -0
- package/datepicker/README.md +3 -0
- package/datepicker/index.d.ts +5 -0
- package/datepicker/lib/calendar/calendar.component.d.ts +72 -0
- package/datepicker/lib/date-input/date-input-element/date-input-element.component.d.ts +43 -0
- package/datepicker/lib/date-input/date-input-hour-element/date-input-hour-element.component.d.ts +11 -0
- package/datepicker/lib/date-input/date-input.component.d.ts +61 -0
- package/datepicker/lib/datepicker-calendar/datepicker-calendar-trigger.component.d.ts +7 -0
- package/datepicker/lib/datepicker-calendar/datepicker-calendar.component.d.ts +12 -0
- package/datepicker/lib/datepicker.component.d.ts +80 -0
- package/datepicker/lib/datepicker.interface.d.ts +34 -0
- package/datepicker/lib/datepicker.module.d.ts +9 -0
- package/datepicker/lib/datepicker.service.d.ts +46 -0
- package/datepicker/lib/datepicker.utils.d.ts +23 -0
- package/datepicker/lib/time-input/time-input.component.d.ts +36 -0
- package/datepicker/lib/time-input/time-input.interface.d.ts +6 -0
- package/fesm2022/yuuvis-client-framework-actions.mjs +147 -105
- package/fesm2022/yuuvis-client-framework-actions.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-app-bar.mjs +7 -8
- package/fesm2022/yuuvis-client-framework-app-bar.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-autocomplete.mjs +210 -0
- package/fesm2022/yuuvis-client-framework-autocomplete.mjs.map +1 -0
- package/fesm2022/yuuvis-client-framework-clipboard.mjs +9 -9
- package/fesm2022/yuuvis-client-framework-clipboard.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-common.mjs +853 -780
- package/fesm2022/yuuvis-client-framework-common.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-datepicker.mjs +1688 -0
- package/fesm2022/yuuvis-client-framework-datepicker.mjs.map +1 -0
- package/fesm2022/yuuvis-client-framework-forms.mjs +945 -1157
- package/fesm2022/yuuvis-client-framework-forms.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-icons.mjs +85 -12
- package/fesm2022/yuuvis-client-framework-icons.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-list.mjs +81 -45
- package/fesm2022/yuuvis-client-framework-list.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-master-details.mjs +112 -0
- package/fesm2022/yuuvis-client-framework-master-details.mjs.map +1 -0
- package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs +60 -0
- package/fesm2022/yuuvis-client-framework-metadata-form-defaults.mjs.map +1 -0
- package/fesm2022/yuuvis-client-framework-metadata-form.mjs +125 -100
- package/fesm2022/yuuvis-client-framework-metadata-form.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-details.mjs +49 -59
- package/fesm2022/yuuvis-client-framework-object-details.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-flavor.mjs +188 -77
- package/fesm2022/yuuvis-client-framework-object-flavor.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-form.mjs +99 -184
- package/fesm2022/yuuvis-client-framework-object-form.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-preview.mjs +12 -12
- package/fesm2022/yuuvis-client-framework-object-preview.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-object-summary.mjs +46 -42
- package/fesm2022/yuuvis-client-framework-object-summary.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-overflow-menu.mjs +126 -0
- package/fesm2022/yuuvis-client-framework-overflow-menu.mjs.map +1 -0
- package/fesm2022/yuuvis-client-framework-pagination.mjs +7 -9
- package/fesm2022/yuuvis-client-framework-pagination.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-panel.mjs +8 -7
- package/fesm2022/yuuvis-client-framework-panel.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-popout.mjs +212 -0
- package/fesm2022/yuuvis-client-framework-popout.mjs.map +1 -0
- package/fesm2022/yuuvis-client-framework-renderer.mjs +99 -72
- package/fesm2022/yuuvis-client-framework-renderer.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-sequence-list.mjs +29 -112
- package/fesm2022/yuuvis-client-framework-sequence-list.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-simple-search.mjs +40 -21
- package/fesm2022/yuuvis-client-framework-simple-search.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-split-view.mjs +188 -0
- package/fesm2022/yuuvis-client-framework-split-view.mjs.map +1 -0
- package/fesm2022/yuuvis-client-framework-tile-list.mjs +100 -93
- package/fesm2022/yuuvis-client-framework-tile-list.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-tree.mjs +15 -15
- package/fesm2022/yuuvis-client-framework-tree.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework-upload-progress.mjs +16 -21
- package/fesm2022/yuuvis-client-framework-upload-progress.mjs.map +1 -1
- package/fesm2022/yuuvis-client-framework.mjs +4 -4
- package/fesm2022/yuuvis-client-framework.mjs.map +1 -1
- package/forms/index.d.ts +7 -1
- package/forms/lib/elements/catalog/catalog.component.d.ts +17 -56
- package/forms/lib/elements/data-grid/edit-table-data/edit-data.component.d.ts +5 -4
- package/forms/lib/elements/datetime/datetime.component.d.ts +19 -10
- package/forms/lib/elements/datetime-range/datetime-range.component.d.ts +12 -27
- package/forms/lib/elements/index.d.ts +0 -1
- package/forms/lib/elements/number/number.component.d.ts +21 -30
- package/forms/lib/elements/number-range/number-range.component.d.ts +12 -7
- package/forms/lib/elements/organization/organization.component.d.ts +23 -51
- package/forms/lib/elements/range-select-date/range-select-date.component.d.ts +12 -7
- package/forms/lib/elements/range-select-filesize/range-select-filesize.component.d.ts +12 -7
- package/forms/lib/elements/string/string.component.d.ts +15 -20
- package/forms/lib/forms.module.d.ts +8 -11
- package/icons/index.d.ts +1 -0
- package/icons/lib/icon.component.d.ts +20 -0
- package/lib/assets/i18n/de.json +7 -23
- package/lib/assets/i18n/en.json +10 -26
- package/list/index.d.ts +1 -0
- package/list/lib/list-item.directive.d.ts +5 -4
- package/list/lib/list.component.d.ts +6 -3
- package/list/lib/list.module.d.ts +8 -0
- package/master-details/README.md +3 -0
- package/master-details/index.d.ts +2 -0
- package/master-details/lib/master-details.component.d.ts +58 -0
- package/master-details/lib/master-details.interface.d.ts +7 -0
- package/master-details/lib/master-details.module.d.ts +7 -0
- package/metadata-form/index.d.ts +4 -1
- package/metadata-form/lib/metadata-form-field/metadata-form-field.component.d.ts +4 -17
- package/metadata-form/lib/metadata-form-field/metadata-form-field.interface.d.ts +11 -0
- package/metadata-form/lib/object-metadata-element-error.directive.d.ts +13 -0
- package/metadata-form/lib/object-metadata-element-label.directive.d.ts +10 -0
- package/metadata-form/lib/object-metadata-element-template.directive.d.ts +3 -3
- package/metadata-form-defaults/README.md +3 -0
- package/metadata-form-defaults/index.d.ts +2 -0
- package/metadata-form-defaults/lib/metadata-form-defaults.module.d.ts +7 -0
- package/object-details/lib/object-audit/object-audit.component.d.ts +3 -9
- package/object-details/lib/object-details.component.d.ts +0 -2
- package/object-details/lib/object-metadata/object-metadata.component.d.ts +4 -3
- package/object-details/lib/retention-badge/retention-badge.component.d.ts +0 -3
- package/object-flavor/index.d.ts +1 -0
- package/object-flavor/lib/abstract-apply-create-flavor/abstract-apply-create-flavor.component.d.ts +1 -2
- package/object-flavor/lib/abstract-apply-object-flavor/abstract-apply-object-flavor.component.d.ts +3 -2
- package/object-flavor/lib/default-apply-flavor/default-apply-flavor.component.d.ts +19 -0
- package/object-flavor/lib/flavor-chip/flavor-chip.component.d.ts +1 -1
- package/object-flavor/lib/object-flavor/object-flavor.component.d.ts +3 -6
- package/object-flavor/lib/object-flavor-picker/object-flavor-picker.component.d.ts +0 -1
- package/object-form/index.d.ts +1 -1
- package/object-form/lib/object-form-element/object-form-element.component.d.ts +2 -2
- package/object-form/lib/object-form-group/object-form-group.component.d.ts +1 -3
- package/object-form/lib/object-form.component.d.ts +2 -2
- package/object-form/lib/object-form.interface.d.ts +0 -44
- package/object-form/lib/object-form.module.d.ts +7 -0
- package/object-form/lib/object-form.service.d.ts +1 -2
- package/object-form/lib/object-form.utils.d.ts +1 -1
- package/object-summary/lib/object-summary/object-summary.component.d.ts +13 -15
- package/overflow-menu/README.md +3 -0
- package/overflow-menu/index.d.ts +3 -0
- package/overflow-menu/lib/overflow-menu.component.d.ts +31 -0
- package/overflow-menu/lib/overflow-menu.interface.d.ts +9 -0
- package/overflow-menu/lib/overflow-menu.module.d.ts +7 -0
- package/package.json +44 -70
- package/popout/README.md +3 -0
- package/popout/index.d.ts +3 -0
- package/popout/lib/popout.component.d.ts +58 -0
- package/popout/lib/popout.interface.d.ts +17 -0
- package/popout/lib/popout.module.d.ts +7 -0
- package/renderer/lib/property-renderer/abstract.renderer.d.ts +4 -4
- package/renderer/lib/property-renderer/icon.renderer.component.d.ts +2 -0
- package/renderer/lib/renderer.directive.d.ts +4 -3
- package/sequence-list/index.d.ts +0 -1
- package/sequence-list/lib/sequence-list.component.d.ts +0 -4
- package/simple-search/index.d.ts +0 -1
- package/simple-search/lib/simple-search/simple-search.component.d.ts +6 -10
- package/split-view/README.md +3 -0
- package/split-view/index.d.ts +4 -0
- package/split-view/lib/split-area.directive.d.ts +16 -0
- package/split-view/lib/split-view.component.d.ts +76 -0
- package/split-view/lib/split-view.interface.d.ts +10 -0
- package/split-view/lib/split-view.module.d.ts +8 -0
- package/styles/client-framework.scss +21 -67
- package/tile-list/lib/tile/tile.component.d.ts +1 -2
- package/tile-list/lib/tile-config/property-select/property-select.component.d.ts +0 -1
- package/tile-list/lib/tile-config/tile-config-trigger/tile-config-trigger.component.d.ts +1 -2
- package/tile-list/lib/tile-config/tile-config.component.d.ts +0 -3
- package/tile-list/lib/tile-list/tile-list.component.d.ts +5 -5
- package/upload-progress/lib/upload-progress/upload-progress-overlay/upload-progress-overlay.component.d.ts +0 -5
- package/upload-progress/lib/upload-progress/upload-progress.component.d.ts +0 -4
- package/common/lib/components/focus-indicator/focus-indicator.component.d.ts +0 -7
- package/common/lib/components/token-input/token-input.component.d.ts +0 -55
- package/common/lib/components/token-input/token-input.interface.d.ts +0 -8
- package/common/lib/services/error-messages/error-messages.service.d.ts +0 -7
- package/esm2022/actions/index.mjs +0 -7
- package/esm2022/actions/lib/actions/copy-action/copy-action.mjs +0 -31
- package/esm2022/actions/lib/actions/cut-action/cut-action.mjs +0 -30
- package/esm2022/actions/lib/actions/delete-action/delete/delete.component.mjs +0 -67
- package/esm2022/actions/lib/actions/delete-action/delete-action.mjs +0 -38
- package/esm2022/actions/lib/actions/download-action/download-action.mjs +0 -33
- package/esm2022/actions/lib/actions.icon.mjs +0 -8
- package/esm2022/actions/lib/actions.interface.mjs +0 -19
- package/esm2022/actions/lib/actions.module.mjs +0 -16
- package/esm2022/actions/lib/actions.service.mjs +0 -89
- package/esm2022/actions/lib/components/contextmenu/contextmenu.component.mjs +0 -27
- package/esm2022/actions/yuuvis-client-framework-actions.mjs +0 -5
- package/esm2022/app-bar/index.mjs +0 -2
- package/esm2022/app-bar/lib/app-bar.component.mjs +0 -89
- package/esm2022/app-bar/yuuvis-client-framework-app-bar.mjs +0 -5
- package/esm2022/clipboard/index.mjs +0 -2
- package/esm2022/clipboard/lib/clipboard.component.mjs +0 -48
- package/esm2022/clipboard/yuuvis-client-framework-clipboard.mjs +0 -5
- package/esm2022/common/index.mjs +0 -7
- package/esm2022/common/lib/components/focus-indicator/focus-indicator.component.mjs +0 -41
- package/esm2022/common/lib/components/token-input/token-input.component.mjs +0 -324
- package/esm2022/common/lib/components/token-input/token-input.interface.mjs +0 -2
- package/esm2022/common/lib/directives/busy-overlay.directive.mjs +0 -88
- package/esm2022/common/lib/directives/click-double.directive.mjs +0 -61
- package/esm2022/common/lib/directives/container-size.directive.mjs +0 -56
- package/esm2022/common/lib/directives/drag-select.directive.mjs +0 -114
- package/esm2022/common/lib/directives/file-drop-zone/file-drop-zone.directive.mjs +0 -153
- package/esm2022/common/lib/directives/file-drop-zone/file-drop-zone.interface.mjs +0 -2
- package/esm2022/common/lib/directives/focus-within.directive.mjs +0 -81
- package/esm2022/common/lib/directives/index.mjs +0 -9
- package/esm2022/common/lib/directives/light-dismiss.directive.mjs +0 -44
- package/esm2022/common/lib/directives/longpress.directive.mjs +0 -36
- package/esm2022/common/lib/directives/noop-value-accessor.directive.mjs +0 -42
- package/esm2022/common/lib/services/error-messages/error-messages.service.mjs +0 -68
- package/esm2022/common/lib/services/index.mjs +0 -2
- package/esm2022/common/yuuvis-client-framework-common.mjs +0 -5
- package/esm2022/forms/index.mjs +0 -24
- package/esm2022/forms/lib/elements/catalog/catalog.component.mjs +0 -118
- package/esm2022/forms/lib/elements/data-grid/data-grid/data-grid.component.mjs +0 -172
- package/esm2022/forms/lib/elements/data-grid/edit-table-data/edit-data.component.mjs +0 -95
- package/esm2022/forms/lib/elements/data-grid/model/data-grid.interface.mjs +0 -9
- package/esm2022/forms/lib/elements/datetime/datetime.component.mjs +0 -82
- package/esm2022/forms/lib/elements/datetime-range/datetime-range.component.mjs +0 -166
- package/esm2022/forms/lib/elements/index.mjs +0 -11
- package/esm2022/forms/lib/elements/number/number.component.mjs +0 -195
- package/esm2022/forms/lib/elements/number-range/number-range.component.mjs +0 -176
- package/esm2022/forms/lib/elements/organization/organization.component.mjs +0 -286
- package/esm2022/forms/lib/elements/range-select-date/date-range-picker/date-range-picker.component.mjs +0 -38
- package/esm2022/forms/lib/elements/range-select-date/range-select-date.component.mjs +0 -181
- package/esm2022/forms/lib/elements/range-select-date/range-select-date.interface.mjs +0 -2
- package/esm2022/forms/lib/elements/range-select-filesize/range-select-filesize.component.mjs +0 -98
- package/esm2022/forms/lib/elements/range-select-filesize/range-select-filesize.interface.mjs +0 -2
- package/esm2022/forms/lib/elements/string/string.component.mjs +0 -261
- package/esm2022/forms/lib/form-input/form-input.component.mjs +0 -88
- package/esm2022/forms/lib/forms.module.mjs +0 -58
- package/esm2022/forms/yuuvis-client-framework-forms.mjs +0 -5
- package/esm2022/icons/index.mjs +0 -4
- package/esm2022/icons/lib/icon.service.mjs +0 -59
- package/esm2022/icons/lib/icons.mjs +0 -32
- package/esm2022/icons/lib/object-type-icon/object-type-icon.component.mjs +0 -29
- package/esm2022/icons/yuuvis-client-framework-icons.mjs +0 -5
- package/esm2022/index.mjs +0 -2
- package/esm2022/lib/yuuvis-client-framework.module.mjs +0 -15
- package/esm2022/list/index.mjs +0 -3
- package/esm2022/list/lib/list-item.directive.mjs +0 -72
- package/esm2022/list/lib/list.component.mjs +0 -135
- package/esm2022/list/yuuvis-client-framework-list.mjs +0 -5
- package/esm2022/metadata-form/index.mjs +0 -4
- package/esm2022/metadata-form/lib/metadata-default-templates/metadata-default-templates.component.mjs +0 -32
- package/esm2022/metadata-form/lib/metadata-form-element-registry.service.mjs +0 -99
- package/esm2022/metadata-form/lib/metadata-form-field/metadata-form-field.component.mjs +0 -83
- package/esm2022/metadata-form/lib/object-metadata-element-template.directive.mjs +0 -52
- package/esm2022/metadata-form/yuuvis-client-framework-metadata-form.mjs +0 -5
- package/esm2022/object-details/index.mjs +0 -8
- package/esm2022/object-details/lib/object-audit/object-audit.component.mjs +0 -195
- package/esm2022/object-details/lib/object-details-shell/object-details-shell.component.mjs +0 -127
- package/esm2022/object-details/lib/object-details.component.mjs +0 -61
- package/esm2022/object-details/lib/object-metadata/form-section-group.pipe.mjs +0 -17
- package/esm2022/object-details/lib/object-metadata/object-metadata.component.mjs +0 -202
- package/esm2022/object-details/lib/object-metadata/object-metadata.interface.mjs +0 -2
- package/esm2022/object-details/lib/retention-badge/retention-badge.component.mjs +0 -27
- package/esm2022/object-details/yuuvis-client-framework-object-details.mjs +0 -5
- package/esm2022/object-flavor/index.mjs +0 -6
- package/esm2022/object-flavor/lib/abstract-apply-create-flavor/abstract-apply-create-flavor.component.mjs +0 -25
- package/esm2022/object-flavor/lib/abstract-apply-object-flavor/abstract-apply-object-flavor.component.mjs +0 -21
- package/esm2022/object-flavor/lib/flavor-chip/flavor-chip.component.mjs +0 -35
- package/esm2022/object-flavor/lib/object-flavor/object-flavor.component.mjs +0 -93
- package/esm2022/object-flavor/lib/object-flavor-picker/object-flavor-picker.component.mjs +0 -43
- package/esm2022/object-flavor/yuuvis-client-framework-object-flavor.mjs +0 -5
- package/esm2022/object-form/index.mjs +0 -5
- package/esm2022/object-form/lib/form-scripting.api.interface.mjs +0 -2
- package/esm2022/object-form/lib/form-scripting.service.mjs +0 -160
- package/esm2022/object-form/lib/object-form-element/object-form-element.component.mjs +0 -87
- package/esm2022/object-form/lib/object-form-extension.interface.mjs +0 -36
- package/esm2022/object-form/lib/object-form-group/object-form-group.component.mjs +0 -85
- package/esm2022/object-form/lib/object-form-script/form-scripting-element-extension/form-scripting-element-extension.component.mjs +0 -23
- package/esm2022/object-form/lib/object-form-script/object-form-script.service.mjs +0 -115
- package/esm2022/object-form/lib/object-form-script/object-form-scripting-scope.mjs +0 -251
- package/esm2022/object-form/lib/object-form-translate.service.mjs +0 -73
- package/esm2022/object-form/lib/object-form.component.mjs +0 -628
- package/esm2022/object-form/lib/object-form.interface.mjs +0 -9
- package/esm2022/object-form/lib/object-form.model.mjs +0 -20
- package/esm2022/object-form/lib/object-form.service.mjs +0 -130
- package/esm2022/object-form/lib/object-form.utils.mjs +0 -55
- package/esm2022/object-form/lib/object-form.validation.mjs +0 -48
- package/esm2022/object-form/yuuvis-client-framework-object-form.mjs +0 -5
- package/esm2022/object-preview/index.mjs +0 -3
- package/esm2022/object-preview/lib/components/index.mjs +0 -3
- package/esm2022/object-preview/lib/components/object-email-preview/object-email-preview.component.mjs +0 -45
- package/esm2022/object-preview/lib/components/object-preview/object-preview.component.mjs +0 -78
- package/esm2022/object-preview/lib/services/object-preview.service.mjs +0 -119
- package/esm2022/object-preview/yuuvis-client-framework-object-preview.mjs +0 -5
- package/esm2022/object-summary/index.mjs +0 -5
- package/esm2022/object-summary/lib/multi-object-summary/multi-object-summary.component.mjs +0 -33
- package/esm2022/object-summary/lib/object-summary/object-summary.component.mjs +0 -275
- package/esm2022/object-summary/lib/object-summary-data/object-summary-data.component.mjs +0 -80
- package/esm2022/object-summary/lib/object-summary.module.mjs +0 -15
- package/esm2022/object-summary/yuuvis-client-framework-object-summary.mjs +0 -5
- package/esm2022/pagination/index.mjs +0 -3
- package/esm2022/pagination/lib/pagination.component.mjs +0 -46
- package/esm2022/pagination/lib/pagination.interface.mjs +0 -2
- package/esm2022/pagination/yuuvis-client-framework-pagination.mjs +0 -5
- package/esm2022/panel/index.mjs +0 -2
- package/esm2022/panel/lib/panel.component.mjs +0 -20
- package/esm2022/panel/yuuvis-client-framework-panel.mjs +0 -5
- package/esm2022/renderer/index.mjs +0 -11
- package/esm2022/renderer/lib/property-renderer/abstract.renderer.mjs +0 -29
- package/esm2022/renderer/lib/property-renderer/datetime.renderer.mjs +0 -13
- package/esm2022/renderer/lib/property-renderer/decimal.renderer.component.mjs +0 -12
- package/esm2022/renderer/lib/property-renderer/filesize.renderer.component.mjs +0 -28
- package/esm2022/renderer/lib/property-renderer/icon.renderer.component.mjs +0 -23
- package/esm2022/renderer/lib/property-renderer/integer.renderer.component.mjs +0 -12
- package/esm2022/renderer/lib/property-renderer/organization.renderer.mjs +0 -19
- package/esm2022/renderer/lib/property-renderer/string.renderer.component.mjs +0 -12
- package/esm2022/renderer/lib/property-renderer/unknown.renderer.mjs +0 -12
- package/esm2022/renderer/lib/renderer.directive.mjs +0 -51
- package/esm2022/renderer/lib/services/renderer/renderer.interface.mjs +0 -2
- package/esm2022/renderer/lib/services/renderer/renderer.service.mjs +0 -84
- package/esm2022/renderer/yuuvis-client-framework-renderer.mjs +0 -5
- package/esm2022/sequence-list/index.mjs +0 -4
- package/esm2022/sequence-list/lib/due-date-picker/due-date-picker.component.mjs +0 -99
- package/esm2022/sequence-list/lib/sequence-list.component.mjs +0 -141
- package/esm2022/sequence-list/lib/sequence-list.interface.mjs +0 -2
- package/esm2022/sequence-list/yuuvis-client-framework-sequence-list.mjs +0 -5
- package/esm2022/simple-search/index.mjs +0 -3
- package/esm2022/simple-search/lib/simple-search/simple-search.component.mjs +0 -111
- package/esm2022/simple-search/lib/simple-search/simple-search.interface.mjs +0 -2
- package/esm2022/simple-search/yuuvis-client-framework-simple-search.mjs +0 -5
- package/esm2022/tile-list/index.mjs +0 -11
- package/esm2022/tile-list/lib/tile/tile.component.mjs +0 -53
- package/esm2022/tile-list/lib/tile-config/action-select/action-select.component.mjs +0 -25
- package/esm2022/tile-list/lib/tile-config/icon-select/icon-select.component.mjs +0 -33
- package/esm2022/tile-list/lib/tile-config/property-select/property-select.component.mjs +0 -91
- package/esm2022/tile-list/lib/tile-config/tile-config-tile/tile-config-tile.component.mjs +0 -66
- package/esm2022/tile-list/lib/tile-config/tile-config-trigger/tile-config-trigger.component.mjs +0 -46
- package/esm2022/tile-list/lib/tile-config/tile-config.component.mjs +0 -156
- package/esm2022/tile-list/lib/tile-extension/directive/tile-extension.directive.mjs +0 -37
- package/esm2022/tile-list/lib/tile-extension/extensions/email.extension.mjs +0 -42
- package/esm2022/tile-list/lib/tile-extension/tile-extension.service.mjs +0 -35
- package/esm2022/tile-list/lib/tile-list/tile-list.component.mjs +0 -510
- package/esm2022/tile-list/lib/tile-list/tile-list.interface.mjs +0 -2
- package/esm2022/tile-list/yuuvis-client-framework-tile-list.mjs +0 -5
- package/esm2022/token-search/index.mjs +0 -3
- package/esm2022/token-search/token-search.component.mjs +0 -78
- package/esm2022/token-search/token-search.interface.mjs +0 -2
- package/esm2022/token-search/yuuvis-client-framework-token-search.mjs +0 -5
- package/esm2022/tree/index.mjs +0 -3
- package/esm2022/tree/lib/tree-node/tree-node.component.mjs +0 -65
- package/esm2022/tree/lib/tree.component.mjs +0 -148
- package/esm2022/tree/lib/tree.interface.mjs +0 -2
- package/esm2022/tree/lib/tree.service.mjs +0 -95
- package/esm2022/tree/yuuvis-client-framework-tree.mjs +0 -5
- package/esm2022/upload-progress/index.mjs +0 -2
- package/esm2022/upload-progress/lib/upload-progress/upload-progress-overlay/upload-progress-overlay.component.mjs +0 -49
- package/esm2022/upload-progress/lib/upload-progress/upload-progress.component.mjs +0 -37
- package/esm2022/upload-progress/yuuvis-client-framework-upload-progress.mjs +0 -5
- package/esm2022/user-avatar/index.mjs +0 -3
- package/esm2022/user-avatar/lib/user-avatar.component.mjs +0 -69
- package/esm2022/user-avatar/lib/user-avatar.module.mjs +0 -24
- package/esm2022/user-avatar/yuuvis-client-framework-user-avatar.mjs +0 -5
- package/esm2022/yuuvis-client-framework.mjs +0 -5
- package/fesm2022/yuuvis-client-framework-token-search.mjs +0 -85
- package/fesm2022/yuuvis-client-framework-token-search.mjs.map +0 -1
- package/fesm2022/yuuvis-client-framework-user-avatar.mjs +0 -96
- package/fesm2022/yuuvis-client-framework-user-avatar.mjs.map +0 -1
- package/forms/lib/form-input/form-input.component.d.ts +0 -48
- package/object-form/lib/object-form-translate.service.d.ts +0 -15
- package/object-form/lib/object-form.model.d.ts +0 -18
- package/sequence-list/lib/due-date-picker/due-date-picker.component.d.ts +0 -28
- package/simple-search/lib/simple-search/simple-search.interface.d.ts +0 -4
- package/token-search/README.md +0 -3
- package/token-search/index.d.ts +0 -2
- package/token-search/token-search.component.d.ts +0 -22
- package/token-search/token-search.interface.d.ts +0 -4
- package/user-avatar/README.md +0 -3
- package/user-avatar/index.d.ts +0 -2
- package/user-avatar/lib/user-avatar.component.d.ts +0 -44
- package/user-avatar/lib/user-avatar.module.d.ts +0 -8
- /package/{metadata-form → metadata-form-defaults}/lib/metadata-default-templates/metadata-default-templates.component.d.ts +0 -0
|
@@ -1,510 +0,0 @@
|
|
|
1
|
-
import { NgClass, NgStyle } from '@angular/common';
|
|
2
|
-
import { Component, DestroyRef, ElementRef, HostBinding, HostListener, computed, contentChild, effect, inject, input, output, signal, untracked, viewChildren } from '@angular/core';
|
|
3
|
-
import { BaseObjectTypeField, DeviceService, DmsObject, EventService, ObjectConfigService, SearchService, SystemService, TranslateModule, YuvEventType } from '@yuuvis/client-core';
|
|
4
|
-
import { ClickDoubleDirective, DragSelectDirective, DragSelectItemDirective } from '@yuuvis/client-framework/common';
|
|
5
|
-
import { TileComponent } from '../tile/tile.component';
|
|
6
|
-
import { ActiveDescendantKeyManager } from '@angular/cdk/a11y';
|
|
7
|
-
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
8
|
-
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
9
|
-
import { ReactiveFormsModule } from '@angular/forms';
|
|
10
|
-
import { YUV_ICONS } from '@yuuvis/client-framework/icons';
|
|
11
|
-
import { PaginationComponent } from '@yuuvis/client-framework/pagination';
|
|
12
|
-
import { YvcIconModule } from '@yuuvis/components/icon';
|
|
13
|
-
import { YvcOverlayModule } from '@yuuvis/components/overlay';
|
|
14
|
-
import { finalize, Subscription } from 'rxjs';
|
|
15
|
-
import { ListItemDirective } from '@yuuvis/client-framework/list';
|
|
16
|
-
import * as i0 from "@angular/core";
|
|
17
|
-
/**
|
|
18
|
-
* List that renders the result of a search query as object config based tiles. It also contains a component to
|
|
19
|
-
* set up that configuration.
|
|
20
|
-
*
|
|
21
|
-
* ## Paging
|
|
22
|
-
* If the search result contains more items than the page size, the list will show a
|
|
23
|
-
* pagination control to navigate inbetween the pages.
|
|
24
|
-
*
|
|
25
|
-
* ## Staggered animation
|
|
26
|
-
* Adding a class of `staggered` to the `yuv-tile-list` component will animate
|
|
27
|
-
* the tiles in a staggered way (only if the user has not set up the OS to not
|
|
28
|
-
* play animation).
|
|
29
|
-
*/
|
|
30
|
-
export class TileListComponent {
|
|
31
|
-
#objectConfigService;
|
|
32
|
-
#system;
|
|
33
|
-
#searchService;
|
|
34
|
-
#destroyRef;
|
|
35
|
-
#device;
|
|
36
|
-
#elRef;
|
|
37
|
-
#events;
|
|
38
|
-
#listItemsEffect;
|
|
39
|
-
#openContextMenu;
|
|
40
|
-
#contextFlag;
|
|
41
|
-
onContextMenu(event) {
|
|
42
|
-
event.preventDefault();
|
|
43
|
-
if (this.#contextFlag()) {
|
|
44
|
-
this.#contextFlag.set(false);
|
|
45
|
-
return;
|
|
46
|
-
}
|
|
47
|
-
setTimeout(() => {
|
|
48
|
-
this.ctxMenu.emit({ event, selection: this.selection() });
|
|
49
|
-
}, 200);
|
|
50
|
-
}
|
|
51
|
-
onMouseDown(event) {
|
|
52
|
-
// TODO: Clicking on the scrollbar also resets selection ... need to find a different way
|
|
53
|
-
// (event.target as HTMLElement).parentElement?.tagName === 'YUV-TILE-LIST' && this.#select(-1);
|
|
54
|
-
if (event.button === 2) {
|
|
55
|
-
this.#contextFlag.set(true);
|
|
56
|
-
this.onContextMenu(event);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
onCopy(event) {
|
|
60
|
-
event.preventDefault();
|
|
61
|
-
if (this._selection.length)
|
|
62
|
-
this.copy.emit(this._selectionToTileData());
|
|
63
|
-
}
|
|
64
|
-
onCut(event) {
|
|
65
|
-
event.preventDefault();
|
|
66
|
-
if (this._selection.length)
|
|
67
|
-
this.cut.emit(this._selectionToTileData());
|
|
68
|
-
}
|
|
69
|
-
onKeydown(event) {
|
|
70
|
-
switch (event.code) {
|
|
71
|
-
case 'Escape': {
|
|
72
|
-
this.clearSelection();
|
|
73
|
-
break;
|
|
74
|
-
}
|
|
75
|
-
case 'Enter': {
|
|
76
|
-
// same as double click
|
|
77
|
-
const aii = this._keyManager.activeItemIndex !== null ? this._keyManager.activeItemIndex : -1;
|
|
78
|
-
if (aii >= 0) {
|
|
79
|
-
this.itemDblClick.emit(this.items[aii]);
|
|
80
|
-
}
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
|
-
case 'Space': {
|
|
84
|
-
// same as single click
|
|
85
|
-
const aii = this._keyManager.activeItemIndex !== null ? this._keyManager.activeItemIndex : -1;
|
|
86
|
-
if (aii >= 0) {
|
|
87
|
-
this.select(this.items[aii], event);
|
|
88
|
-
}
|
|
89
|
-
break;
|
|
90
|
-
}
|
|
91
|
-
default: {
|
|
92
|
-
this._keyManager?.onKeydown(event);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
#_busyEffect;
|
|
97
|
-
#query;
|
|
98
|
-
#executeQueryEffect;
|
|
99
|
-
constructor() {
|
|
100
|
-
this.#objectConfigService = inject(ObjectConfigService);
|
|
101
|
-
this.#system = inject(SystemService);
|
|
102
|
-
this.#searchService = inject(SearchService);
|
|
103
|
-
this.#destroyRef = inject(DestroyRef);
|
|
104
|
-
this.#device = inject(DeviceService);
|
|
105
|
-
this.#elRef = inject(ElementRef);
|
|
106
|
-
this.#events = inject(EventService);
|
|
107
|
-
this.emptyContent = contentChild('empty');
|
|
108
|
-
this.isTouchDevice = this.#device.isTouchEnabled;
|
|
109
|
-
this.tiles = viewChildren(TileComponent);
|
|
110
|
-
this.listItems = viewChildren(ListItemDirective);
|
|
111
|
-
this.#listItemsEffect = effect(() => {
|
|
112
|
-
if (this._keyManager)
|
|
113
|
-
this._keyManager.destroy();
|
|
114
|
-
this._keyManager = new ActiveDescendantKeyManager(this.listItems() || []).withWrap();
|
|
115
|
-
});
|
|
116
|
-
this.searchResultSubscription = new Subscription();
|
|
117
|
-
this.#openContextMenu = signal(null);
|
|
118
|
-
this.#contextFlag = signal(false);
|
|
119
|
-
this._busy = signal(false);
|
|
120
|
-
this.#_busyEffect = effect(() => {
|
|
121
|
-
this.busy.emit(this._busy());
|
|
122
|
-
});
|
|
123
|
-
this._selection = [];
|
|
124
|
-
this.selectedTile = signal([]);
|
|
125
|
-
this.empytIcon = signal(YUV_ICONS.trash);
|
|
126
|
-
/**
|
|
127
|
-
* The ID of the selected list item
|
|
128
|
-
*/
|
|
129
|
-
this.selection = signal([]);
|
|
130
|
-
/**
|
|
131
|
-
* Tile configurations are stored globally for all apps. If you want a
|
|
132
|
-
* separate config for your app/component you can specify a bucket. A bucket
|
|
133
|
-
* is basically an ID where your custom tile config will be stored and
|
|
134
|
-
* retrieved. Buckets should be unique so be sure to use a unique namespace.
|
|
135
|
-
*/
|
|
136
|
-
this.bucket = input();
|
|
137
|
-
/**
|
|
138
|
-
* Sets up the ability to select multile tiles
|
|
139
|
-
*/
|
|
140
|
-
this.multiselect = input(false);
|
|
141
|
-
this.options = input(undefined);
|
|
142
|
-
this.flavor = input();
|
|
143
|
-
this.flavorEffect = effect(() => {
|
|
144
|
-
const f = this.flavor();
|
|
145
|
-
if (f)
|
|
146
|
-
this.applyFlavor(f);
|
|
147
|
-
});
|
|
148
|
-
/**
|
|
149
|
-
* The search query to be executed
|
|
150
|
-
*/
|
|
151
|
-
this.query = input();
|
|
152
|
-
// Items to be preselected (TODO: remove after refactoring ???)
|
|
153
|
-
this.preselect = input();
|
|
154
|
-
this.highlights = input([]);
|
|
155
|
-
this.highlightStyles = computed(() => {
|
|
156
|
-
const x = {};
|
|
157
|
-
(this.highlights() || []).forEach((highlight) => {
|
|
158
|
-
highlight.ids.forEach((id) => {
|
|
159
|
-
if (!x[id])
|
|
160
|
-
x[id] = {};
|
|
161
|
-
x[id] = { ...x[id], ...highlight.cssStyles };
|
|
162
|
-
});
|
|
163
|
-
});
|
|
164
|
-
return x;
|
|
165
|
-
});
|
|
166
|
-
/**
|
|
167
|
-
* Emitted when a list item has been selected
|
|
168
|
-
*/
|
|
169
|
-
this.itemSelect = output();
|
|
170
|
-
this.copy = output();
|
|
171
|
-
this.cut = output();
|
|
172
|
-
this.busy = output();
|
|
173
|
-
this.queryResult = output();
|
|
174
|
-
/**
|
|
175
|
-
* Emitted when selected items changed. If 'multiselect' input is set to true, this will
|
|
176
|
-
* emit the whole selection, while 'itemSelect' will only emit the item that currently
|
|
177
|
-
* has bee added to the selection.
|
|
178
|
-
*/
|
|
179
|
-
this.selectionChange = output();
|
|
180
|
-
/**
|
|
181
|
-
* Emitted when a list item has been doubleclicked
|
|
182
|
-
*/
|
|
183
|
-
this.itemDblClick = output();
|
|
184
|
-
this.ctxMenu = output();
|
|
185
|
-
// the items rendered in the list
|
|
186
|
-
this.items = [];
|
|
187
|
-
this.searchExecuted = false;
|
|
188
|
-
this.#executeQueryEffect = effect(() => {
|
|
189
|
-
// execute the query each time it changes
|
|
190
|
-
this.#query = this.query();
|
|
191
|
-
if (this.#query && this.oc)
|
|
192
|
-
untracked(() => {
|
|
193
|
-
this._executeQuery(this.#query || undefined);
|
|
194
|
-
this.empytIcon.set(YUV_ICONS.refresh);
|
|
195
|
-
});
|
|
196
|
-
});
|
|
197
|
-
this.#events
|
|
198
|
-
.on(YuvEventType.DMS_OBJECT_UPDATED)
|
|
199
|
-
.pipe(takeUntilDestroyed())
|
|
200
|
-
.subscribe((e) => {
|
|
201
|
-
const dmsObject = e.data;
|
|
202
|
-
// check if the updated object is part of the list
|
|
203
|
-
this.items.findIndex((item) => item.id === dmsObject.id) >= 0 && this.updateTileList([dmsObject]);
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
contextMenuHandler(event, index) {
|
|
207
|
-
if (!coerceBooleanProperty(this.tiles()[index].elRef.nativeElement.ariaSelected)) {
|
|
208
|
-
this._selectByIndex(index, event);
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
select(i, evt) {
|
|
212
|
-
const idx = this.items.findIndex((item) => item.id === i.id);
|
|
213
|
-
this._selectByIndex(idx, evt);
|
|
214
|
-
}
|
|
215
|
-
onDragSelectChange(sel) {
|
|
216
|
-
if (this._keyManager.activeItemIndex !== -1)
|
|
217
|
-
this._keyManager.setActiveItem(-1);
|
|
218
|
-
this._selection = sel;
|
|
219
|
-
this._selection.sort();
|
|
220
|
-
this.listItems().forEach((item, i) => (item.selected = this._selection.includes(i)));
|
|
221
|
-
}
|
|
222
|
-
onDragSelect(sel) {
|
|
223
|
-
this.#elRef.nativeElement.focus();
|
|
224
|
-
this._selection = sel;
|
|
225
|
-
this._keyManager.setActiveItem(sel[0] || 0);
|
|
226
|
-
const tiles = this._selectionToTileData();
|
|
227
|
-
this.selectionChange.emit(tiles);
|
|
228
|
-
}
|
|
229
|
-
_selectByIndex(idx, evt) {
|
|
230
|
-
this._keyManager.setActiveItem(idx);
|
|
231
|
-
this.#select(idx, evt?.shiftKey, evt?.ctrlKey);
|
|
232
|
-
}
|
|
233
|
-
refresh() {
|
|
234
|
-
if (this.#query) {
|
|
235
|
-
if (this.pagination) {
|
|
236
|
-
this.goToPage(this.pagination.page);
|
|
237
|
-
}
|
|
238
|
-
else
|
|
239
|
-
this._executeQuery(this.query() || undefined);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
applyFlavor(flavor) {
|
|
243
|
-
this.appliedFlavor = this.appliedFlavor?.id === flavor.id ? undefined : flavor;
|
|
244
|
-
if (this._rawResult)
|
|
245
|
-
this.items = this._mapSearchResult(this._rawResult);
|
|
246
|
-
}
|
|
247
|
-
clearSelection(silent = false) {
|
|
248
|
-
if (this._selection.length) {
|
|
249
|
-
this._selection = [];
|
|
250
|
-
this._keyManager.setActiveItem(-1);
|
|
251
|
-
this.listItems().forEach((item, i) => (item.selected = false));
|
|
252
|
-
if (!silent)
|
|
253
|
-
this.selectionChange.emit([]);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
selectNext() {
|
|
257
|
-
if (this._lastSelection) {
|
|
258
|
-
let i = this._lastSelection + 1;
|
|
259
|
-
if (i > this.items.length)
|
|
260
|
-
i = 0;
|
|
261
|
-
this.#select(i);
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
selectPrev() {
|
|
265
|
-
if (this._lastSelection) {
|
|
266
|
-
let i = this._lastSelection - 1;
|
|
267
|
-
if (i < 0)
|
|
268
|
-
i = this.items.length - 1;
|
|
269
|
-
this.#select(this._lastSelection - 1);
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
goToPage(page) {
|
|
273
|
-
if (!this.#query)
|
|
274
|
-
return;
|
|
275
|
-
this._busy.set(true);
|
|
276
|
-
this.#searchService
|
|
277
|
-
.getPage(this.#query, page)
|
|
278
|
-
.pipe(finalize(() => this._busy.set(false)))
|
|
279
|
-
.subscribe({
|
|
280
|
-
next: (res) => {
|
|
281
|
-
this.#setupPagination(res);
|
|
282
|
-
this.items = this._mapSearchResult(res);
|
|
283
|
-
},
|
|
284
|
-
error: (err) => {
|
|
285
|
-
// TODO: how should errors be handles in case hat loading pages fail
|
|
286
|
-
}
|
|
287
|
-
});
|
|
288
|
-
}
|
|
289
|
-
#select(index, shiftKey = false, ctrlKey = false) {
|
|
290
|
-
this.#elRef.nativeElement.focus();
|
|
291
|
-
if (index === -1)
|
|
292
|
-
this._selection = [];
|
|
293
|
-
else {
|
|
294
|
-
if (this.multiselect()) {
|
|
295
|
-
this._selection = this._selection.filter((i) => i !== index);
|
|
296
|
-
if (ctrlKey) {
|
|
297
|
-
// if ctrl key add to selection
|
|
298
|
-
this._selection.push(index);
|
|
299
|
-
}
|
|
300
|
-
else if (shiftKey) {
|
|
301
|
-
// add range
|
|
302
|
-
if (this._lastSelection !== undefined) {
|
|
303
|
-
const startIndex = this._lastSelection < index ? this._lastSelection : index;
|
|
304
|
-
const endIndex = this._lastSelection > index ? this._lastSelection : index;
|
|
305
|
-
for (let i = startIndex; i <= endIndex; i++) {
|
|
306
|
-
this._selection.push(i);
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
else {
|
|
310
|
-
this._selection = [index];
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
else {
|
|
314
|
-
this._selection = [index];
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
else
|
|
318
|
-
this._selection = [index];
|
|
319
|
-
this._selection = [...new Set(this._selection)];
|
|
320
|
-
}
|
|
321
|
-
this._lastSelection = this._selection.length === 0 ? undefined : index;
|
|
322
|
-
this._selection.sort();
|
|
323
|
-
this.listItems().forEach((item, i) => (item.selected = this._selection.includes(i)));
|
|
324
|
-
const tiles = this._selectionToTileData();
|
|
325
|
-
this.selectionChange.emit(tiles);
|
|
326
|
-
tiles.length === 1 && this.itemSelect.emit(tiles[0]);
|
|
327
|
-
this.selectedTile.set(this._selection.map((idx) => this.items[idx]));
|
|
328
|
-
}
|
|
329
|
-
_selectionToTileData() {
|
|
330
|
-
return this._selection.map((idx) => this.items[idx]);
|
|
331
|
-
}
|
|
332
|
-
_executeQuery(q) {
|
|
333
|
-
if (q && this.#system.system) {
|
|
334
|
-
this.searchExecuted = false;
|
|
335
|
-
// reset items to avoid old data being shown while new stuff is loaded
|
|
336
|
-
this.items = [];
|
|
337
|
-
// q.fields = Object.keys(this.#system.system.allFields);
|
|
338
|
-
q.fields = undefined;
|
|
339
|
-
this._busy.set(true);
|
|
340
|
-
this.searchResultSubscription = this.#searchService
|
|
341
|
-
.search(q)
|
|
342
|
-
.pipe(finalize(() => this._busy.set(false)))
|
|
343
|
-
.subscribe({
|
|
344
|
-
next: (res) => {
|
|
345
|
-
this.#setupPagination(res);
|
|
346
|
-
this.items = this._mapSearchResult(res);
|
|
347
|
-
this.queryResult.emit({ totalCount: res.items.length });
|
|
348
|
-
const preselect = this.preselect();
|
|
349
|
-
if (preselect) {
|
|
350
|
-
preselect.forEach((id) => {
|
|
351
|
-
const idx = this.items.findIndex((item) => item.id === id);
|
|
352
|
-
if (idx >= 0)
|
|
353
|
-
this._selectByIndex(idx);
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
|
-
},
|
|
357
|
-
error: (err) => console.error(err)
|
|
358
|
-
});
|
|
359
|
-
}
|
|
360
|
-
}
|
|
361
|
-
#setupPagination(searchResult) {
|
|
362
|
-
this.pagination = undefined;
|
|
363
|
-
if (this.#query && searchResult.totalNumItems > (this.#query.size || SearchService.DEFAULT_QUERY_SIZE)) {
|
|
364
|
-
this.pagination = {
|
|
365
|
-
total: searchResult.totalNumItems,
|
|
366
|
-
pages: Math.ceil(searchResult.totalNumItems / (this.#query?.size || SearchService.DEFAULT_QUERY_SIZE)),
|
|
367
|
-
page: (!this.#query?.from ? 0 : this.#query.from / (this.#query?.size || SearchService.DEFAULT_QUERY_SIZE)) + 1
|
|
368
|
-
};
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
#mapToTileData(objects) {
|
|
372
|
-
return objects.map((dmsObject) => {
|
|
373
|
-
const sots = dmsObject.sots || [];
|
|
374
|
-
let oc = this.oc[dmsObject.objectTypeId];
|
|
375
|
-
// check if result oitem matches virtual config type
|
|
376
|
-
const cfgTypes = this.options()?.configTypes || [];
|
|
377
|
-
cfgTypes.forEach((cft) => {
|
|
378
|
-
const matchesType = !cft.objectType || cft.objectType === dmsObject.objectTypeId;
|
|
379
|
-
const matchesSOTs = !cft.sots || !cft.sots.length || cft.sots.every((sot) => sots.includes(sot));
|
|
380
|
-
if (matchesType && matchesSOTs)
|
|
381
|
-
oc = this.oc[cft.id];
|
|
382
|
-
});
|
|
383
|
-
// only apply a flavor if the object has that SOT
|
|
384
|
-
const ownAppliedFlavor = this.appliedFlavor && sots.includes(this.appliedFlavor.sot) && this.oc[this.appliedFlavor.sot];
|
|
385
|
-
if (ownAppliedFlavor) {
|
|
386
|
-
oc = this.oc[this.appliedFlavor.id];
|
|
387
|
-
}
|
|
388
|
-
if (!oc)
|
|
389
|
-
oc = this.#objectConfigService.getDefaultConfig(dmsObject.objectTypeId);
|
|
390
|
-
const tli = {
|
|
391
|
-
objectTypeId: dmsObject.objectTypeId,
|
|
392
|
-
id: dmsObject.id,
|
|
393
|
-
actions: oc.actions,
|
|
394
|
-
badges: oc.badges,
|
|
395
|
-
instanceData: dmsObject.data,
|
|
396
|
-
dmsObject,
|
|
397
|
-
title: oc.title ? this.#getResolvedObjectConfigItem(oc.title.propertyName, dmsObject.data) : { propertyName: '', value: '' }
|
|
398
|
-
};
|
|
399
|
-
tli.icon = oc.icon
|
|
400
|
-
? {
|
|
401
|
-
rendererType: 'icon',
|
|
402
|
-
propertyName: 'custom',
|
|
403
|
-
value: oc.icon.svg
|
|
404
|
-
}
|
|
405
|
-
: {
|
|
406
|
-
rendererType: 'icon',
|
|
407
|
-
propertyName: BaseObjectTypeField.OBJECT_TYPE_ID,
|
|
408
|
-
value: ownAppliedFlavor && this.appliedFlavor ? this.appliedFlavor.sot : dmsObject.objectTypeId
|
|
409
|
-
};
|
|
410
|
-
if (oc.description)
|
|
411
|
-
tli.description = this.#getResolvedObjectConfigItem(oc.description.propertyName, dmsObject.data);
|
|
412
|
-
if (oc.meta)
|
|
413
|
-
tli.meta = this.#getResolvedObjectConfigItem(oc.meta.propertyName, dmsObject.data);
|
|
414
|
-
if (oc.aside)
|
|
415
|
-
tli.aside = this.#getResolvedObjectConfigItem(oc.aside.propertyName, dmsObject.data);
|
|
416
|
-
return tli;
|
|
417
|
-
});
|
|
418
|
-
}
|
|
419
|
-
_mapSearchResult(res) {
|
|
420
|
-
this.searchExecuted = true;
|
|
421
|
-
this._rawResult = res;
|
|
422
|
-
return this.oc ? this.#mapToTileData(res.items.map((i) => new DmsObject(i))) : [];
|
|
423
|
-
}
|
|
424
|
-
#getResolvedObjectConfigItem(propertyName, instanceData) {
|
|
425
|
-
const item = {
|
|
426
|
-
propertyName: propertyName,
|
|
427
|
-
value: instanceData[propertyName]
|
|
428
|
-
};
|
|
429
|
-
// Meta data are considered properties that start with the property name followed by an underscore.
|
|
430
|
-
// Organization fields for example have an additional property 'xyz_title' that contains the resolved
|
|
431
|
-
// name of a user while the value itself is the users ID.
|
|
432
|
-
const metaData = Object.keys(instanceData)
|
|
433
|
-
.filter((key) => key.startsWith(propertyName + '_'))
|
|
434
|
-
.map((key) => ({ [key.substring(key.indexOf('_') + 1)]: instanceData[key] }));
|
|
435
|
-
// If there are meta data properties, they'll be merged into a Record where the
|
|
436
|
-
// key is the property name without the underscore and the actual properties name.
|
|
437
|
-
// So { 'xyz_title': 'John Doe' } will be merged into { title: 'John Doe' }
|
|
438
|
-
if (metaData.length) {
|
|
439
|
-
const meta = metaData.reduce((acc, cur) => ({ ...acc, ...cur }), {});
|
|
440
|
-
item.meta = meta;
|
|
441
|
-
}
|
|
442
|
-
return item;
|
|
443
|
-
}
|
|
444
|
-
updateTileList(listItems) {
|
|
445
|
-
listItems.forEach((item) => {
|
|
446
|
-
const idx = this.items.findIndex((listItem) => listItem.id === item.id);
|
|
447
|
-
if (idx >= 0 && this.oc) {
|
|
448
|
-
const mappedTileData = this.#mapToTileData([item]);
|
|
449
|
-
this.items[idx] = mappedTileData[0];
|
|
450
|
-
}
|
|
451
|
-
});
|
|
452
|
-
}
|
|
453
|
-
ngOnInit() {
|
|
454
|
-
this.#objectConfigService
|
|
455
|
-
.getObjectConfigs$(this.bucket() || '', true)
|
|
456
|
-
.pipe(takeUntilDestroyed(this.#destroyRef))
|
|
457
|
-
.subscribe({
|
|
458
|
-
next: (res) => {
|
|
459
|
-
this.oc = res;
|
|
460
|
-
const q = this.query();
|
|
461
|
-
q && this._executeQuery(q);
|
|
462
|
-
}
|
|
463
|
-
});
|
|
464
|
-
}
|
|
465
|
-
ngOnDestroy() {
|
|
466
|
-
this._keyManager?.destroy();
|
|
467
|
-
this.searchResultSubscription.unsubscribe();
|
|
468
|
-
}
|
|
469
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TileListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
470
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: TileListComponent, isStandalone: true, selector: "yuv-tile-list", inputs: { bucket: { classPropertyName: "bucket", publicName: "bucket", isSignal: true, isRequired: false, transformFunction: null }, multiselect: { classPropertyName: "multiselect", publicName: "multiselect", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null }, flavor: { classPropertyName: "flavor", publicName: "flavor", isSignal: true, isRequired: false, transformFunction: null }, query: { classPropertyName: "query", publicName: "query", isSignal: true, isRequired: false, transformFunction: null }, preselect: { classPropertyName: "preselect", publicName: "preselect", isSignal: true, isRequired: false, transformFunction: null }, highlights: { classPropertyName: "highlights", publicName: "highlights", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemSelect: "itemSelect", copy: "copy", cut: "cut", busy: "busy", queryResult: "queryResult", selectionChange: "selectionChange", itemDblClick: "itemDblClick", ctxMenu: "ctxMenu" }, host: { attributes: { "tabindex": "0", "role": "listbox" }, listeners: { "contextmenu": "onContextMenu($event)", "mousedown": "onMouseDown($event)", "keydown.control.c": "onCopy($event)", "keydown.control.x": "onCut($event)", "keydown": "onKeydown($event)" }, properties: { "class.pagination": "this.pagination" } }, providers: [], queries: [{ propertyName: "emptyContent", first: true, predicate: ["empty"], descendants: true, isSignal: true }], viewQueries: [{ propertyName: "tiles", predicate: TileComponent, descendants: true, isSignal: true }, { propertyName: "listItems", predicate: ListItemDirective, descendants: true, isSignal: true }], ngImport: i0, template: "<div\n class=\"tiles\"\n [yuvDragSelect]=\"{ disabled: !this.multiselect() || isTouchDevice }\"\n (dragSelectChange)=\"onDragSelectChange($event)\"\n (dragSelect)=\"onDragSelect($event)\"\n>\n @for (i of items; track i.id) {\n <yuv-tile\n yuvDragSelectItem\n yuvListItem\n [style.--i]=\"$index\"\n [attr.aria-selected]=\"selection().includes(i.id)\"\n (click.single)=\"select(i, $event)\"\n (click.double)=\"itemDblClick.emit(i)\"\n [ngClass]=\"{ selected: selection().includes(i.id), last: $last }\"\n [actionContext]=\"options()?.actionContext\"\n [tile]=\"i\"\n [ngStyle]=\"highlightStyles()[i.id]\"\n (contextmenu)=\"contextMenuHandler($event, $index)\"\n ></yuv-tile>\n } @empty {\n <div class=\"empyt-list\">\n @if (searchExecuted && emptyContent()) {\n <ng-content></ng-content>\n }\n </div>\n }\n <div class=\"offset\" (click)=\"clearSelection()\"></div>\n</div>\n@if (pagination) {\n <yuv-pagination [pagination]=\"pagination\" (pageChange)=\"goToPage($event)\"></yuv-pagination>\n}\n", styles: [":host{--_tile-hover-background: var(--tile-hover-background, var(--item-focus-background-color));--_tile-selected-background: var(--tile-selected-background, var(--item-selected-background-color));--_tile-selected-icon-fill: var(--tile-selected-icon-fill, var(--color-accent));--tile-gap: 0px;--tile-border: none;--tile-border-width: 1px;--tile-icon-size: initial;--tile-slot-padding: 2px;--staggered-animation-duration: .2s;--paging-button-size: 18px;--paging-margin: calc(var(--app-pane-padding) / 2);--paging-padding: calc(var(--app-pane-padding) / 4);display:grid;grid-template-rows:1fr auto var(--paging-margin);grid-template-columns:var(--paging-margin) 1fr var(--paging-margin)}:host.pagination yuv-tile.last{margin-block-end:calc(var(--paging-margin) * 2 + var(--paging-padding) * 2 + var(--paging-button-size))}:host .tiles{grid-column:1/-1;grid-row:1/-1;overflow-y:auto;display:flex;flex-flow:column}:host .tiles yuv-tile{flex:0 0 auto}:host .tiles .offset{flex:1 1 auto}:host yuv-pagination{z-index:2;grid-column:2/-2;grid-row:2/-2;border:1px solid var(--panel-divider-color);animation:fade-in-up .2s ease-in-out forwards}:host yuv-tile{cursor:pointer}:host yuv-tile:not(.last){border:var(--tile-border);border-width:var(--tile-border-width);margin-block-end:var(--tile-gap)}:host yuv-tile:hover,:host yuv-tile[aria-current=true]{--tile-background: var(--_tile-hover-background)}:host yuv-tile[aria-selected=true]{--tile-background: var(--_tile-selected-background);--tile-icon-fill: var(--_tile-selected-icon-fill)}:host .empyt-list{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}@keyframes fade-in-up{0%{opacity:0;transform:translateY(var(--paging-margin))}to{opacity:1;transform:translateY(0)}}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: TileComponent, selector: "yuv-tile", inputs: ["tile", "actionContext"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: YvcOverlayModule }, { kind: "component", type: PaginationComponent, selector: "yuv-pagination", inputs: ["pagination"], outputs: ["pageChange"] }, { kind: "ngmodule", type: YvcIconModule }, { kind: "directive", type: ListItemDirective, selector: "[yuvListItem]", inputs: ["disabled", "active", "selected"] }, { kind: "directive", type: ClickDoubleDirective, selector: "[click.single],[click.double]", inputs: ["debounceTime"], outputs: ["click.double", "click.single"] }, { kind: "directive", type: DragSelectDirective, selector: "[yuvDragSelect]", inputs: ["yuvDragSelect"], outputs: ["dragSelectChange", "dragSelect"] }, { kind: "directive", type: DragSelectItemDirective, selector: "[yuvDragSelectItem]" }] }); }
|
|
471
|
-
}
|
|
472
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TileListComponent, decorators: [{
|
|
473
|
-
type: Component,
|
|
474
|
-
args: [{ selector: 'yuv-tile-list', standalone: true, providers: [], imports: [
|
|
475
|
-
NgClass,
|
|
476
|
-
NgStyle,
|
|
477
|
-
TileComponent,
|
|
478
|
-
TranslateModule,
|
|
479
|
-
ReactiveFormsModule,
|
|
480
|
-
YvcOverlayModule,
|
|
481
|
-
PaginationComponent,
|
|
482
|
-
YvcIconModule,
|
|
483
|
-
ListItemDirective,
|
|
484
|
-
ClickDoubleDirective,
|
|
485
|
-
DragSelectDirective,
|
|
486
|
-
DragSelectItemDirective
|
|
487
|
-
], host: {
|
|
488
|
-
tabindex: '0',
|
|
489
|
-
role: 'listbox'
|
|
490
|
-
}, template: "<div\n class=\"tiles\"\n [yuvDragSelect]=\"{ disabled: !this.multiselect() || isTouchDevice }\"\n (dragSelectChange)=\"onDragSelectChange($event)\"\n (dragSelect)=\"onDragSelect($event)\"\n>\n @for (i of items; track i.id) {\n <yuv-tile\n yuvDragSelectItem\n yuvListItem\n [style.--i]=\"$index\"\n [attr.aria-selected]=\"selection().includes(i.id)\"\n (click.single)=\"select(i, $event)\"\n (click.double)=\"itemDblClick.emit(i)\"\n [ngClass]=\"{ selected: selection().includes(i.id), last: $last }\"\n [actionContext]=\"options()?.actionContext\"\n [tile]=\"i\"\n [ngStyle]=\"highlightStyles()[i.id]\"\n (contextmenu)=\"contextMenuHandler($event, $index)\"\n ></yuv-tile>\n } @empty {\n <div class=\"empyt-list\">\n @if (searchExecuted && emptyContent()) {\n <ng-content></ng-content>\n }\n </div>\n }\n <div class=\"offset\" (click)=\"clearSelection()\"></div>\n</div>\n@if (pagination) {\n <yuv-pagination [pagination]=\"pagination\" (pageChange)=\"goToPage($event)\"></yuv-pagination>\n}\n", styles: [":host{--_tile-hover-background: var(--tile-hover-background, var(--item-focus-background-color));--_tile-selected-background: var(--tile-selected-background, var(--item-selected-background-color));--_tile-selected-icon-fill: var(--tile-selected-icon-fill, var(--color-accent));--tile-gap: 0px;--tile-border: none;--tile-border-width: 1px;--tile-icon-size: initial;--tile-slot-padding: 2px;--staggered-animation-duration: .2s;--paging-button-size: 18px;--paging-margin: calc(var(--app-pane-padding) / 2);--paging-padding: calc(var(--app-pane-padding) / 4);display:grid;grid-template-rows:1fr auto var(--paging-margin);grid-template-columns:var(--paging-margin) 1fr var(--paging-margin)}:host.pagination yuv-tile.last{margin-block-end:calc(var(--paging-margin) * 2 + var(--paging-padding) * 2 + var(--paging-button-size))}:host .tiles{grid-column:1/-1;grid-row:1/-1;overflow-y:auto;display:flex;flex-flow:column}:host .tiles yuv-tile{flex:0 0 auto}:host .tiles .offset{flex:1 1 auto}:host yuv-pagination{z-index:2;grid-column:2/-2;grid-row:2/-2;border:1px solid var(--panel-divider-color);animation:fade-in-up .2s ease-in-out forwards}:host yuv-tile{cursor:pointer}:host yuv-tile:not(.last){border:var(--tile-border);border-width:var(--tile-border-width);margin-block-end:var(--tile-gap)}:host yuv-tile:hover,:host yuv-tile[aria-current=true]{--tile-background: var(--_tile-hover-background)}:host yuv-tile[aria-selected=true]{--tile-background: var(--_tile-selected-background);--tile-icon-fill: var(--_tile-selected-icon-fill)}:host .empyt-list{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%}@keyframes fade-in-up{0%{opacity:0;transform:translateY(var(--paging-margin))}to{opacity:1;transform:translateY(0)}}\n"] }]
|
|
491
|
-
}], ctorParameters: () => [], propDecorators: { onContextMenu: [{
|
|
492
|
-
type: HostListener,
|
|
493
|
-
args: ['contextmenu', ['$event']]
|
|
494
|
-
}], onMouseDown: [{
|
|
495
|
-
type: HostListener,
|
|
496
|
-
args: ['mousedown', ['$event']]
|
|
497
|
-
}], onCopy: [{
|
|
498
|
-
type: HostListener,
|
|
499
|
-
args: ['keydown.control.c', ['$event']]
|
|
500
|
-
}], onCut: [{
|
|
501
|
-
type: HostListener,
|
|
502
|
-
args: ['keydown.control.x', ['$event']]
|
|
503
|
-
}], onKeydown: [{
|
|
504
|
-
type: HostListener,
|
|
505
|
-
args: ['keydown', ['$event']]
|
|
506
|
-
}], pagination: [{
|
|
507
|
-
type: HostBinding,
|
|
508
|
-
args: ['class.pagination']
|
|
509
|
-
}] } });
|
|
510
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvdGlsZS1saXN0L3NyYy9saWIvdGlsZS1saXN0L3RpbGUtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3l1dXZpcy9jbGllbnQtZnJhbWV3b3JrL3RpbGUtbGlzdC9zcmMvbGliL3RpbGUtbGlzdC90aWxlLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFHWixRQUFRLEVBQ1IsWUFBWSxFQUNaLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGFBQWEsRUFDYixTQUFTLEVBQ1QsWUFBWSxFQUVaLG1CQUFtQixFQUluQixhQUFhLEVBQ2IsYUFBYSxFQUNiLGVBQWUsRUFFZixZQUFZLEVBQ2IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsbUJBQW1CLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNySCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdkQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzNELE9BQU8sRUFBYyxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBRXRGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUU5RCxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7QUFFbEU7Ozs7Ozs7Ozs7OztHQVlHO0FBMEJILE1BQU0sT0FBTyxpQkFBaUI7SUFDNUIsb0JBQW9CLENBQStCO0lBQ25ELE9BQU8sQ0FBeUI7SUFDaEMsY0FBYyxDQUF5QjtJQUN2QyxXQUFXLENBQXNCO0lBQ2pDLE9BQU8sQ0FBeUI7SUFDaEMsTUFBTSxDQUFzQjtJQUM1QixPQUFPLENBQXdCO0lBUS9CLGdCQUFnQixDQUdiO0lBSUgsZ0JBQWdCLENBQThDO0lBQzlELFlBQVksQ0FBaUI7SUFHN0IsYUFBYSxDQUFDLEtBQWdDO1FBQzVDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN2QixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzdCLE9BQU87UUFDVCxDQUFDO1FBRUQsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzVELENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7SUFHRCxXQUFXLENBQUMsS0FBaUI7UUFDM0IseUZBQXlGO1FBQ3pGLGdHQUFnRztRQUNoRyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM1QixDQUFDO0lBQ0gsQ0FBQztJQUdELE1BQU0sQ0FBQyxLQUFvQjtRQUN6QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU07WUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxLQUFLLENBQUMsS0FBb0I7UUFDeEIsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNO1lBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsU0FBUyxDQUFDLEtBQW9CO1FBQzVCLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ25CLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDZCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU07WUFDUixDQUFDO1lBQ0QsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNiLHVCQUF1QjtnQkFDdkIsTUFBTSxHQUFHLEdBQVcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RHLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO29CQUNiLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDMUMsQ0FBQztnQkFDRCxNQUFNO1lBQ1IsQ0FBQztZQUNELEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDYix1QkFBdUI7Z0JBQ3ZCLE1BQU0sR0FBRyxHQUFXLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN0RyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDYixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3RDLENBQUM7Z0JBQ0QsTUFBTTtZQUNSLENBQUM7WUFDRCxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNSLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JDLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUtELFlBQVksQ0FFVDtJQWtGSCxNQUFNLENBQXNCO0lBQzVCLG1CQUFtQixDQVFoQjtJQUVIO1FBeExBLHlCQUFvQixHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ25ELFlBQU8sR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDaEMsbUJBQWMsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsWUFBTyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoQyxXQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzVCLFlBQU8sR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFL0IsaUJBQVksR0FBRyxZQUFZLENBQWEsT0FBTyxDQUFDLENBQUM7UUFDakQsa0JBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQztRQUU1QyxVQUFLLEdBQUcsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXBDLGNBQVMsR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUM1QyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQzdCLElBQUksSUFBSSxDQUFDLFdBQVc7Z0JBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNqRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksMEJBQTBCLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZGLENBQUMsQ0FBQyxDQUFDO1FBRUgsNkJBQXdCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUU5QyxxQkFBZ0IsR0FBRyxNQUFNLENBQStCLElBQUksQ0FBQyxDQUFDO1FBQzlELGlCQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBa0U3QixVQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RCLGlCQUFZLEdBQUcsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMvQixDQUFDLENBQUMsQ0FBQztRQUlLLGVBQVUsR0FBYSxFQUFFLENBQUM7UUFHbEMsaUJBQVksR0FBRyxNQUFNLENBQWEsRUFBRSxDQUFDLENBQUM7UUFDdEMsY0FBUyxHQUFHLE1BQU0sQ0FBUyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUM7O1dBRUc7UUFDSCxjQUFTLEdBQUcsTUFBTSxDQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDOzs7OztXQUtHO1FBQ0gsV0FBTSxHQUFHLEtBQUssRUFBVSxDQUFDO1FBQ3pCOztXQUVHO1FBQ0gsZ0JBQVcsR0FBRyxLQUFLLENBQVUsS0FBSyxDQUFDLENBQUM7UUFFcEMsWUFBTyxHQUFHLEtBQUssQ0FBb0MsU0FBUyxDQUFDLENBQUM7UUFFOUQsV0FBTSxHQUFHLEtBQUssRUFBZ0IsQ0FBQztRQUUvQixpQkFBWSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDekIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQztnQkFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdCLENBQUMsQ0FBQyxDQUFDO1FBRUg7O1dBRUc7UUFDSCxVQUFLLEdBQUcsS0FBSyxFQUFzQixDQUFDO1FBRXBDLCtEQUErRDtRQUMvRCxjQUFTLEdBQUcsS0FBSyxFQUFZLENBQUM7UUFFOUIsZUFBVSxHQUFHLEtBQUssQ0FBNkIsRUFBRSxDQUFDLENBQUM7UUFDbkQsb0JBQWUsR0FBRyxRQUFRLENBQTBDLEdBQUcsRUFBRTtZQUN2RSxNQUFNLENBQUMsR0FBNEMsRUFBRSxDQUFDO1lBQ3RELENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO2dCQUM5QyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO29CQUMzQixJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQzt3QkFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUN2QixDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDL0MsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUNILE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7UUFFSDs7V0FFRztRQUNILGVBQVUsR0FBRyxNQUFNLEVBQVksQ0FBQztRQUNoQyxTQUFJLEdBQUcsTUFBTSxFQUFjLENBQUM7UUFDNUIsUUFBRyxHQUFHLE1BQU0sRUFBYyxDQUFDO1FBQzNCLFNBQUksR0FBRyxNQUFNLEVBQVcsQ0FBQztRQUN6QixnQkFBVyxHQUFHLE1BQU0sRUFBMEIsQ0FBQztRQUUvQzs7OztXQUlHO1FBQ0gsb0JBQWUsR0FBRyxNQUFNLEVBQWMsQ0FBQztRQUV2Qzs7V0FFRztRQUNILGlCQUFZLEdBQUcsTUFBTSxFQUFZLENBQUM7UUFFbEMsWUFBTyxHQUFHLE1BQU0sRUFBd0QsQ0FBQztRQUV6RSxpQ0FBaUM7UUFDakMsVUFBSyxHQUFlLEVBQUUsQ0FBQztRQUV2QixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUd2Qix3QkFBbUIsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ2hDLHlDQUF5QztZQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMzQixJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEVBQUU7Z0JBQ3hCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ2IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxDQUFDO29CQUM3QyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFHRCxJQUFJLENBQUMsT0FBTzthQUNULEVBQUUsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUM7YUFDbkMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7YUFDMUIsU0FBUyxDQUFDLENBQUMsQ0FBVyxFQUFFLEVBQUU7WUFDekIsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQWlCLENBQUM7WUFDdEMsa0RBQWtEO1lBQ2xELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDcEcsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBaUIsRUFBRSxLQUFhO1FBQ2pELElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ2pGLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUM7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLENBQVcsRUFBRSxHQUErQjtRQUNqRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELGtCQUFrQixDQUFDLEdBQWE7UUFDOUIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsS0FBSyxDQUFDLENBQUM7WUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWhGLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQXVCLEVBQUUsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xILENBQUM7SUFFRCxZQUFZLENBQUMsR0FBYTtRQUN4QixJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztRQUN0QixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDNUMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVPLGNBQWMsQ0FBQyxHQUFXLEVBQUUsR0FBZ0M7UUFDbEUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RDLENBQUM7O2dCQUFNLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7SUFDSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE1BQW9CO1FBQzlCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDL0UsSUFBSSxJQUFJLENBQUMsVUFBVTtZQUFFLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsY0FBYyxDQUFDLE1BQU0sR0FBRyxLQUFLO1FBQzNCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25DLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUF1QixFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDMUYsSUFBSSxDQUFDLE1BQU07Z0JBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0MsQ0FBQztJQUNILENBQUM7SUFFRCxVQUFVO1FBQ1IsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO2dCQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQztJQUNELFVBQVU7UUFDUixJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztZQUNoQyxJQUFJLENBQUMsR0FBRyxDQUFDO2dCQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUSxDQUFDLElBQVk7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUN6QixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQixJQUFJLENBQUMsY0FBYzthQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUM7YUFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2FBQzNDLFNBQVMsQ0FBQztZQUNULElBQUksRUFBRSxDQUFDLEdBQWlCLEVBQUUsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxDQUFDO1lBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2Isb0VBQW9FO1lBQ3RFLENBQUM7U0FDRixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsT0FBTyxDQUFDLEtBQWEsRUFBRSxRQUFRLEdBQUcsS0FBSyxFQUFFLE9BQU8sR0FBRyxLQUFLO1FBQ3RELElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2xDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQztZQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO2FBQ2xDLENBQUM7WUFDSixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7Z0JBQzdELElBQUksT0FBTyxFQUFFLENBQUM7b0JBQ1osK0JBQStCO29CQUMvQixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUIsQ0FBQztxQkFBTSxJQUFJLFFBQVEsRUFBRSxDQUFDO29CQUNwQixZQUFZO29CQUNaLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxTQUFTLEVBQUUsQ0FBQzt3QkFDdEMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQzt3QkFDN0UsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQzt3QkFDM0UsS0FBSyxJQUFJLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDOzRCQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDMUIsQ0FBQztvQkFDSCxDQUFDO3lCQUFNLENBQUM7d0JBQ04sSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUM1QixDQUFDO2dCQUNILENBQUM7cUJBQU0sQ0FBQztvQkFDTixJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzVCLENBQUM7WUFDSCxDQUFDOztnQkFBTSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUN2RSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRXZCLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUF1QixFQUFFLENBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNoSCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVPLGFBQWEsQ0FBQyxDQUEwQjtRQUM5QyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1lBQzVCLHNFQUFzRTtZQUN0RSxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNoQix5REFBeUQ7WUFDekQsQ0FBQyxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7WUFDckIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckIsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxjQUFjO2lCQUNoRCxNQUFNLENBQUMsQ0FBQyxDQUFDO2lCQUNULElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztpQkFDM0MsU0FBUyxDQUFDO2dCQUNULElBQUksRUFBRSxDQUFDLEdBQWlCLEVBQUUsRUFBRTtvQkFDMUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDeEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxVQUFVLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO29CQUV4RCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7b0JBQ25DLElBQUksU0FBUyxFQUFFLENBQUM7d0JBQ2QsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFOzRCQUN2QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQzs0QkFDM0QsSUFBSSxHQUFHLElBQUksQ0FBQztnQ0FBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUN6QyxDQUFDLENBQUMsQ0FBQztvQkFDTCxDQUFDO2dCQUNILENBQUM7Z0JBQ0QsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQzthQUNuQyxDQUFDLENBQUM7UUFDUCxDQUFDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLFlBQTBCO1FBQ3pDLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO1FBQzVCLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxZQUFZLENBQUMsYUFBYSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksYUFBYSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztZQUN2RyxJQUFJLENBQUMsVUFBVSxHQUFHO2dCQUNoQixLQUFLLEVBQUUsWUFBWSxDQUFDLGFBQWE7Z0JBQ2pDLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksSUFBSSxhQUFhLENBQUMsa0JBQWtCLENBQUMsQ0FBQztnQkFDdEcsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxJQUFJLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQzthQUNoSCxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRCxjQUFjLENBQUMsT0FBb0I7UUFDakMsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDL0IsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7WUFFbEMsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUcsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7WUFFMUMsb0RBQW9EO1lBQ3BELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDO1lBRW5ELFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDdkIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLFlBQVksQ0FBQztnQkFDakYsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFFakcsSUFBSSxXQUFXLElBQUksV0FBVztvQkFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEQsQ0FBQyxDQUFDLENBQUM7WUFFSCxpREFBaUQ7WUFDakQsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDekgsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNyQixFQUFFLEdBQUcsSUFBSSxDQUFDLEVBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLENBQUM7WUFFRCxJQUFJLENBQUMsRUFBRTtnQkFBRSxFQUFFLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUVqRixNQUFNLEdBQUcsR0FBYTtnQkFDcEIsWUFBWSxFQUFFLFNBQVMsQ0FBQyxZQUFZO2dCQUNwQyxFQUFFLEVBQUUsU0FBUyxDQUFDLEVBQUU7Z0JBQ2hCLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTztnQkFDbkIsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNO2dCQUNqQixZQUFZLEVBQUUsU0FBUyxDQUFDLElBQUk7Z0JBQzVCLFNBQVM7Z0JBQ1QsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO2FBQzdILENBQUM7WUFFRixHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQyxJQUFJO2dCQUNoQixDQUFDLENBQUM7b0JBQ0UsWUFBWSxFQUFFLE1BQU07b0JBQ3BCLFlBQVksRUFBRSxRQUFRO29CQUN0QixLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHO2lCQUNuQjtnQkFDSCxDQUFDLENBQUM7b0JBQ0UsWUFBWSxFQUFFLE1BQU07b0JBQ3BCLFlBQVksRUFBRSxtQkFBbUIsQ0FBQyxjQUFjO29CQUNoRCxLQUFLLEVBQUUsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxZQUFZO2lCQUNoRyxDQUFDO1lBQ04sSUFBSSxFQUFFLENBQUMsV0FBVztnQkFBRSxHQUFHLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDckgsSUFBSSxFQUFFLENBQUMsSUFBSTtnQkFBRSxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEcsSUFBSSxFQUFFLENBQUMsS0FBSztnQkFBRSxHQUFHLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFbkcsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxHQUFpQjtRQUN4QyxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3BGLENBQUM7SUFFRCw0QkFBNEIsQ0FBQyxZQUFvQixFQUFFLFlBQXFDO1FBQ3RGLE1BQU0sSUFBSSxHQUE2QjtZQUNyQyxZQUFZLEVBQUUsWUFBWTtZQUMxQixLQUFLLEVBQUUsWUFBWSxDQUFDLFlBQVksQ0FBQztTQUNsQyxDQUFDO1FBQ0YsbUdBQW1HO1FBQ25HLHFHQUFxRztRQUNyRyx5REFBeUQ7UUFDekQsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7YUFDdkMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFlBQVksR0FBRyxHQUFHLENBQUMsQ0FBQzthQUNuRCxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUVoRiwrRUFBK0U7UUFDL0Usa0ZBQWtGO1FBQ2xGLDJFQUEyRTtRQUMzRSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNuQixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsY0FBYyxDQUFDLFNBQXNCO1FBQ25DLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN6QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDeEUsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDeEIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLG9CQUFvQjthQUN0QixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLElBQUksQ0FBQzthQUM1QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQzFDLFNBQVMsQ0FBQztZQUNULElBQUksRUFBRSxDQUFDLEdBQXVCLEVBQUUsRUFBRTtnQkFDaEMsSUFBSSxDQUFDLEVBQUUsR0FBRyxHQUFHLENBQUM7Z0JBQ2QsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUN2QixDQUFDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3QixDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUM5QyxDQUFDOytHQXZkVSxpQkFBaUI7bUdBQWpCLGlCQUFpQix1OENBdEJqQixFQUFFLHVLQWtDUSxhQUFhLCtFQUVULGlCQUFpQixnRUN2RzVDLGdrQ0FnQ0Esa3hERHFDSSxPQUFPLG9GQUNQLE9BQU8sMkVBQ1AsYUFBYSx1RkFDYixlQUFlLDhCQUNmLG1CQUFtQiw4QkFDbkIsZ0JBQWdCLCtCQUNoQixtQkFBbUIsMkdBQ25CLGFBQWEsK0JBQ2IsaUJBQWlCLHNHQUNqQixvQkFBb0IsK0lBQ3BCLG1CQUFtQixvSUFDbkIsdUJBQXVCOzs0RkFTZCxpQkFBaUI7a0JBekI3QixTQUFTOytCQUNFLGVBQWUsY0FDYixJQUFJLGFBQ0wsRUFBRSxXQUNKO3dCQUNQLE9BQU87d0JBQ1AsT0FBTzt3QkFDUCxhQUFhO3dCQUNiLGVBQWU7d0JBQ2YsbUJBQW1CO3dCQUNuQixnQkFBZ0I7d0JBQ2hCLG1CQUFtQjt3QkFDbkIsYUFBYTt3QkFDYixpQkFBaUI7d0JBQ2pCLG9CQUFvQjt3QkFDcEIsbUJBQW1CO3dCQUNuQix1QkFBdUI7cUJBQ3hCLFFBR0s7d0JBQ0osUUFBUSxFQUFFLEdBQUc7d0JBQ2IsSUFBSSxFQUFFLFNBQVM7cUJBQ2hCO3dEQTRCRCxhQUFhO3NCQURaLFlBQVk7dUJBQUMsYUFBYSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWN2QyxXQUFXO3NCQURWLFlBQVk7dUJBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVdyQyxNQUFNO3NCQURMLFlBQVk7dUJBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTTdDLEtBQUs7c0JBREosWUFBWTt1QkFBQyxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNN0MsU0FBUztzQkFEUixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFxQ0YsVUFBVTtzQkFBMUMsV0FBVzt1QkFBQyxrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0NsYXNzLCBOZ1N0eWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRGVzdHJveVJlZixcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lcixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIGNvbXB1dGVkLFxuICBjb250ZW50Q2hpbGQsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgb3V0cHV0LFxuICBzaWduYWwsXG4gIHVudHJhY2tlZCxcbiAgdmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmFzZU9iamVjdFR5cGVGaWVsZCxcbiAgRGV2aWNlU2VydmljZSxcbiAgRG1zT2JqZWN0LFxuICBFdmVudFNlcnZpY2UsXG4gIE9iamVjdENvbmZpZ1JlY29yZCxcbiAgT2JqZWN0Q29uZmlnU2VydmljZSxcbiAgUmVzb2x2ZWRPYmplY3RDb25maWdJdGVtLFxuICBTZWFyY2hRdWVyeSxcbiAgU2VhcmNoUmVzdWx0LFxuICBTZWFyY2hTZXJ2aWNlLFxuICBTeXN0ZW1TZXJ2aWNlLFxuICBUcmFuc2xhdGVNb2R1bGUsXG4gIFl1dkV2ZW50LFxuICBZdXZFdmVudFR5cGVcbn0gZnJvbSAnQHl1dXZpcy9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBDbGlja0RvdWJsZURpcmVjdGl2ZSwgRHJhZ1NlbGVjdERpcmVjdGl2ZSwgRHJhZ1NlbGVjdEl0ZW1EaXJlY3RpdmUgfSBmcm9tICdAeXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvY29tbW9uJztcbmltcG9ydCB7IFRpbGVDb21wb25lbnQgfSBmcm9tICcuLi90aWxlL3RpbGUuY29tcG9uZW50JztcblxuaW1wb3J0IHsgQWN0aXZlRGVzY2VuZGFudEtleU1hbmFnZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFlVVl9JQ09OUyB9IGZyb20gJ0B5dXV2aXMvY2xpZW50LWZyYW1ld29yay9pY29ucyc7XG5pbXBvcnQgeyBQYWdpbmF0aW9uLCBQYWdpbmF0aW9uQ29tcG9uZW50IH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtZnJhbWV3b3JrL3BhZ2luYXRpb24nO1xuaW1wb3J0IHsgT2JqZWN0Rmxhdm9yIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtc2hlbGwtY29yZSc7XG5pbXBvcnQgeyBZdmNJY29uTW9kdWxlIH0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL2ljb24nO1xuaW1wb3J0IHsgWXZjT3ZlcmxheU1vZHVsZSB9IGZyb20gJ0B5dXV2aXMvY29tcG9uZW50cy9vdmVybGF5JztcbmltcG9ydCB7IFRpbGVEYXRhLCBUaWxlTGlzdENvbmZpZ09wdGlvbnMsIFRpbGVMaXN0SGlnaGxpZ2h0IH0gZnJvbSAnLi90aWxlLWxpc3QuaW50ZXJmYWNlJztcbmltcG9ydCB7IGZpbmFsaXplLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExpc3RJdGVtRGlyZWN0aXZlIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtZnJhbWV3b3JrL2xpc3QnO1xuXG4vKipcbiAqIExpc3QgdGhhdCByZW5kZXJzIHRoZSByZXN1bHQgb2YgYSBzZWFyY2ggcXVlcnkgYXMgb2JqZWN0IGNvbmZpZyBiYXNlZCB0aWxlcy4gSXQgYWxzbyBjb250YWlucyBhIGNvbXBvbmVudCB0b1xuICogc2V0IHVwIHRoYXQgY29uZmlndXJhdGlvbi5cbiAqXG4gKiAjIyBQYWdpbmdcbiAqIElmIHRoZSBzZWFyY2ggcmVzdWx0IGNvbnRhaW5zIG1vcmUgaXRlbXMgdGhhbiB0aGUgcGFnZSBzaXplLCB0aGUgbGlzdCB3aWxsIHNob3cgYVxuICogcGFnaW5hdGlvbiBjb250cm9sIHRvIG5hdmlnYXRlIGluYmV0d2VlbiB0aGUgcGFnZXMuXG4gKlxuICogIyMgU3RhZ2dlcmVkIGFuaW1hdGlvblxuICogQWRkaW5nIGEgY2xhc3Mgb2YgYHN0YWdnZXJlZGAgdG8gdGhlIGB5dXYtdGlsZS1saXN0YCBjb21wb25lbnQgd2lsbCBhbmltYXRlXG4gKiB0aGUgdGlsZXMgaW4gYSBzdGFnZ2VyZWQgd2F5IChvbmx5IGlmIHRoZSB1c2VyIGhhcyBub3Qgc2V0IHVwIHRoZSBPUyB0byBub3RcbiAqIHBsYXkgYW5pbWF0aW9uKS5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAneXV2LXRpbGUtbGlzdCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHByb3ZpZGVyczogW10sXG4gIGltcG9ydHM6IFtcbiAgICBOZ0NsYXNzLFxuICAgIE5nU3R5bGUsXG4gICAgVGlsZUNvbXBvbmVudCxcbiAgICBUcmFuc2xhdGVNb2R1bGUsXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICBZdmNPdmVybGF5TW9kdWxlLFxuICAgIFBhZ2luYXRpb25Db21wb25lbnQsXG4gICAgWXZjSWNvbk1vZHVsZSxcbiAgICBMaXN0SXRlbURpcmVjdGl2ZSxcbiAgICBDbGlja0RvdWJsZURpcmVjdGl2ZSxcbiAgICBEcmFnU2VsZWN0RGlyZWN0aXZlLFxuICAgIERyYWdTZWxlY3RJdGVtRGlyZWN0aXZlXG4gIF0sXG4gIHRlbXBsYXRlVXJsOiAnLi90aWxlLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vdGlsZS1saXN0LmNvbXBvbmVudC5zY3NzJyxcbiAgaG9zdDoge1xuICAgIHRhYmluZGV4OiAnMCcsXG4gICAgcm9sZTogJ2xpc3Rib3gnXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgVGlsZUxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gICNvYmplY3RDb25maWdTZXJ2aWNlID0gaW5qZWN0KE9iamVjdENvbmZpZ1NlcnZpY2UpO1xuICAjc3lzdGVtID0gaW5qZWN0KFN5c3RlbVNlcnZpY2UpO1xuICAjc2VhcmNoU2VydmljZSA9IGluamVjdChTZWFyY2hTZXJ2aWNlKTtcbiAgI2Rlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICNkZXZpY2UgPSBpbmplY3QoRGV2aWNlU2VydmljZSk7XG4gICNlbFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgI2V2ZW50cyA9IGluamVjdChFdmVudFNlcnZpY2UpO1xuXG4gIGVtcHR5Q29udGVudCA9IGNvbnRlbnRDaGlsZDxFbGVtZW50UmVmPignZW1wdHknKTtcbiAgaXNUb3VjaERldmljZSA9IHRoaXMuI2RldmljZS5pc1RvdWNoRW5hYmxlZDtcblxuICB0aWxlcyA9IHZpZXdDaGlsZHJlbihUaWxlQ29tcG9uZW50KTtcblxuICBsaXN0SXRlbXMgPSB2aWV3Q2hpbGRyZW4oTGlzdEl0ZW1EaXJlY3RpdmUpO1xuICAjbGlzdEl0ZW1zRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBpZiAodGhpcy5fa2V5TWFuYWdlcikgdGhpcy5fa2V5TWFuYWdlci5kZXN0cm95KCk7XG4gICAgdGhpcy5fa2V5TWFuYWdlciA9IG5ldyBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlcih0aGlzLmxpc3RJdGVtcygpIHx8IFtdKS53aXRoV3JhcCgpO1xuICB9KTtcblxuICBzZWFyY2hSZXN1bHRTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgI29wZW5Db250ZXh0TWVudSA9IHNpZ25hbDx7IGV2ZW50OiBNb3VzZUV2ZW50IH0gfCBudWxsPihudWxsKTtcbiAgI2NvbnRleHRGbGFnID0gc2lnbmFsKGZhbHNlKTtcblxuICBASG9zdExpc3RlbmVyKCdjb250ZXh0bWVudScsIFsnJGV2ZW50J10pXG4gIG9uQ29udGV4dE1lbnUoZXZlbnQ6IE1vdXNlRXZlbnQgfCBQb2ludGVyRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICh0aGlzLiNjb250ZXh0RmxhZygpKSB7XG4gICAgICB0aGlzLiNjb250ZXh0RmxhZy5zZXQoZmFsc2UpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jdHhNZW51LmVtaXQoeyBldmVudCwgc2VsZWN0aW9uOiB0aGlzLnNlbGVjdGlvbigpIH0pO1xuICAgIH0sIDIwMCk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKVxuICBvbk1vdXNlRG93bihldmVudDogTW91c2VFdmVudCkge1xuICAgIC8vIFRPRE86IENsaWNraW5nIG9uIHRoZSBzY3JvbGxiYXIgYWxzbyByZXNldHMgc2VsZWN0aW9uIC4uLiBuZWVkIHRvIGZpbmQgYSBkaWZmZXJlbnQgd2F5XG4gICAgLy8gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkucGFyZW50RWxlbWVudD8udGFnTmFtZSA9PT0gJ1lVVi1USUxFLUxJU1QnICYmIHRoaXMuI3NlbGVjdCgtMSk7XG4gICAgaWYgKGV2ZW50LmJ1dHRvbiA9PT0gMikge1xuICAgICAgdGhpcy4jY29udGV4dEZsYWcuc2V0KHRydWUpO1xuICAgICAgdGhpcy5vbkNvbnRleHRNZW51KGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmNvbnRyb2wuYycsIFsnJGV2ZW50J10pXG4gIG9uQ29weShldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKHRoaXMuX3NlbGVjdGlvbi5sZW5ndGgpIHRoaXMuY29weS5lbWl0KHRoaXMuX3NlbGVjdGlvblRvVGlsZURhdGEoKSk7XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5jb250cm9sLngnLCBbJyRldmVudCddKVxuICBvbkN1dChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKHRoaXMuX3NlbGVjdGlvbi5sZW5ndGgpIHRoaXMuY3V0LmVtaXQodGhpcy5fc2VsZWN0aW9uVG9UaWxlRGF0YSgpKTtcbiAgfVxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgc3dpdGNoIChldmVudC5jb2RlKSB7XG4gICAgICBjYXNlICdFc2NhcGUnOiB7XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdFbnRlcic6IHtcbiAgICAgICAgLy8gc2FtZSBhcyBkb3VibGUgY2xpY2tcbiAgICAgICAgY29uc3QgYWlpOiBudW1iZXIgPSB0aGlzLl9rZXlNYW5hZ2VyLmFjdGl2ZUl0ZW1JbmRleCAhPT0gbnVsbCA/IHRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4IDogLTE7XG4gICAgICAgIGlmIChhaWkgPj0gMCkge1xuICAgICAgICAgIHRoaXMuaXRlbURibENsaWNrLmVtaXQodGhpcy5pdGVtc1thaWldKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNhc2UgJ1NwYWNlJzoge1xuICAgICAgICAvLyBzYW1lIGFzIHNpbmdsZSBjbGlja1xuICAgICAgICBjb25zdCBhaWk6IG51bWJlciA9IHRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4ICE9PSBudWxsID8gdGhpcy5fa2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXggOiAtMTtcbiAgICAgICAgaWYgKGFpaSA+PSAwKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3QodGhpcy5pdGVtc1thaWldLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHRoaXMuX2tleU1hbmFnZXI/Lm9uS2V5ZG93bihldmVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfa2V5TWFuYWdlciE6IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPExpc3RJdGVtRGlyZWN0aXZlPjtcblxuICBfYnVzeSA9IHNpZ25hbChmYWxzZSk7XG4gICNfYnVzeUVmZmVjdCA9IGVmZmVjdCgoKSA9PiB7XG4gICAgdGhpcy5idXN5LmVtaXQodGhpcy5fYnVzeSgpKTtcbiAgfSk7XG4gIHByaXZhdGUgb2M/OiBPYmplY3RDb25maWdSZWNvcmQ7XG4gIC8vIHN0YXRlIG9mIHBhZ2luYXRpb25cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5wYWdpbmF0aW9uJykgcGFnaW5hdGlvbj86IFBhZ2luYXRpb247XG4gIHByaXZhdGUgX3NlbGVjdGlvbjogbnVtYmVyW10gPSBbXTtcbiAgcHJpdmF0ZSBfbGFzdFNlbGVjdGlvbj86IG51bWJlcjtcblxuICBzZWxlY3RlZFRpbGUgPSBzaWduYWw8VGlsZURhdGFbXT4oW10pO1xuICBlbXB5dEljb24gPSBzaWduYWw8c3RyaW5nPihZVVZfSUNPTlMudHJhc2gpO1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBzZWxlY3RlZCBsaXN0IGl0ZW1cbiAgICovXG4gIHNlbGVjdGlvbiA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuICAvKipcbiAgICogVGlsZSBjb25maWd1cmF0aW9ucyBhcmUgc3RvcmVkIGdsb2JhbGx5IGZvciBhbGwgYXBwcy4gSWYgeW91IHdhbnQgYVxuICAgKiBzZXBhcmF0ZSBjb25maWcgZm9yIHlvdXIgYXBwL2NvbXBvbmVudCB5b3UgY2FuIHNwZWNpZnkgYSBidWNrZXQuIEEgYnVja2V0XG4gICAqIGlzIGJhc2ljYWxseSBhbiBJRCB3aGVyZSB5b3VyIGN1c3RvbSB0aWxlIGNvbmZpZyB3aWxsIGJlIHN0b3JlZCBhbmRcbiAgICogcmV0cmlldmVkLiBCdWNrZXRzIHNob3VsZCBiZSB1bmlxdWUgc28gYmUgc3VyZSB0byB1c2UgYSB1bmlxdWUgbmFtZXNwYWNlLlxuICAgKi9cbiAgYnVja2V0ID0gaW5wdXQ8c3RyaW5nPigpO1xuICAvKipcbiAgICogU2V0cyB1cCB0aGUgYWJpbGl0eSB0byBzZWxlY3QgbXVsdGlsZSB0aWxlc1xuICAgKi9cbiAgbXVsdGlzZWxlY3QgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgb3B0aW9ucyA9IGlucHV0PFRpbGVMaXN0Q29uZmlnT3B0aW9ucyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICBmbGF2b3IgPSBpbnB1dDxPYmplY3RGbGF2b3I+KCk7XG5cbiAgZmxhdm9yRWZmZWN0ID0gZWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBmID0gdGhpcy5mbGF2b3IoKTtcbiAgICBpZiAoZikgdGhpcy5hcHBseUZsYXZvcihmKTtcbiAgfSk7XG4gIGFwcGxpZWRGbGF2b3I/OiBPYmplY3RGbGF2b3I7XG4gIC8qKlxuICAgKiBUaGUgc2VhcmNoIHF1ZXJ5IHRvIGJlIGV4ZWN1dGVkXG4gICAqL1xuICBxdWVyeSA9IGlucHV0PFNlYXJjaFF1ZXJ5IHwgbnVsbD4oKTtcblxuICAvLyBJdGVtcyB0byBiZSBwcmVzZWxlY3RlZCAoVE9ETzogcmVtb3ZlIGFmdGVyIHJlZmFjdG9yaW5nID8/PylcbiAgcHJlc2VsZWN0ID0gaW5wdXQ8c3RyaW5nW10+KCk7XG5cbiAgaGlnaGxpZ2h0cyA9IGlucHV0PFRpbGVMaXN0SGlnaGxpZ2h0W10gfCBudWxsPihbXSk7XG4gIGhpZ2hsaWdodFN0eWxlcyA9IGNvbXB1dGVkPFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pj4oKCkgPT4ge1xuICAgIGNvbnN0IHg6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9IHt9O1xuICAgICh0aGlzLmhpZ2hsaWdodHMoKSB8fCBbXSkuZm9yRWFjaCgoaGlnaGxpZ2h0KSA9PiB7XG4gICAgICBoaWdobGlnaHQuaWRzLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgIGlmICgheFtpZF0pIHhbaWRdID0ge307XG4gICAgICAgIHhbaWRdID0geyAuLi54W2lkXSwgLi4uaGlnaGxpZ2h0LmNzc1N0eWxlcyB9O1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHg7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gYSBsaXN0IGl0ZW0gaGFzIGJlZW4gc2VsZWN0ZWRcbiAgICovXG4gIGl0ZW1TZWxlY3QgPSBvdXRwdXQ8VGlsZURhdGE+KCk7XG4gIGNvcHkgPSBvdXRwdXQ8VGlsZURhdGFbXT4oKTtcbiAgY3V0ID0gb3V0cHV0PFRpbGVEYXRhW10+KCk7XG4gIGJ1c3kgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcbiAgcXVlcnlSZXN1bHQgPSBvdXRwdXQ8eyB0b3RhbENvdW50OiBudW1iZXIgfT4oKTtcblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIHNlbGVjdGVkIGl0ZW1zIGNoYW5nZWQuIElmICdtdWx0aXNlbGVjdCcgaW5wdXQgaXMgc2V0IHRvIHRydWUsIHRoaXMgd2lsbFxuICAgKiBlbWl0IHRoZSB3aG9sZSBzZWxlY3Rpb24sIHdoaWxlICdpdGVtU2VsZWN0JyB3aWxsIG9ubHkgZW1pdCB0aGUgaXRlbSB0aGF0IGN1cnJlbnRseVxuICAgKiBoYXMgYmVlIGFkZGVkIHRvIHRoZSBzZWxlY3Rpb24uXG4gICAqL1xuICBzZWxlY3Rpb25DaGFuZ2UgPSBvdXRwdXQ8VGlsZURhdGFbXT4oKTtcblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGEgbGlzdCBpdGVtIGhhcyBiZWVuIGRvdWJsZWNsaWNrZWRcbiAgICovXG4gIGl0ZW1EYmxDbGljayA9IG91dHB1dDxUaWxlRGF0YT4oKTtcblxuICBjdHhNZW51ID0gb3V0cHV0PHsgZXZlbnQ6IE1vdXNlRXZlbnQgfCBQb2ludGVyRXZlbnQ7IHNlbGVjdGlvbjogYW55IH0+KCk7XG5cbiAgLy8gdGhlIGl0ZW1zIHJlbmRlcmVkIGluIHRoZSBsaXN0XG4gIGl0ZW1zOiBUaWxlRGF0YVtdID0gW107XG4gIHByaXZhdGUgX3Jhd1Jlc3VsdD86IFNlYXJjaFJlc3VsdDtcbiAgc2VhcmNoRXhlY3V0ZWQgPSBmYWxzZTtcblxuICAjcXVlcnk/OiBTZWFyY2hRdWVyeSB8IG51bGw7XG4gICNleGVjdXRlUXVlcnlFZmZlY3QgPSBlZmZlY3QoKCkgPT4ge1xuICAgIC8vIGV4ZWN1dGUgdGhlIHF1ZXJ5IGVhY2ggdGltZSBpdCBjaGFuZ2VzXG4gICAgdGhpcy4jcXVlcnkgPSB0aGlzLnF1ZXJ5KCk7XG4gICAgaWYgKHRoaXMuI3F1ZXJ5ICYmIHRoaXMub2MpXG4gICAgICB1bnRyYWNrZWQoKCkgPT4ge1xuICAgICAgICB0aGlzLl9leGVjdXRlUXVlcnkodGhpcy4jcXVlcnkgfHwgdW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy5lbXB5dEljb24uc2V0KFlVVl9JQ09OUy5yZWZyZXNoKTtcbiAgICAgIH0pO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLiNldmVudHNcbiAgICAgIC5vbihZdXZFdmVudFR5cGUuRE1TX09CSkVDVF9VUERBVEVEKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAuc3Vic2NyaWJlKChlOiBZdXZFdmVudCkgPT4ge1xuICAgICAgICBjb25zdCBkbXNPYmplY3QgPSBlLmRhdGEgYXMgRG1zT2JqZWN0O1xuICAgICAgICAvLyBjaGVjayBpZiB0aGUgdXBkYXRlZCBvYmplY3QgaXMgcGFydCBvZiB0aGUgbGlzdFxuICAgICAgICB0aGlzLml0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gZG1zT2JqZWN0LmlkKSA+PSAwICYmIHRoaXMudXBkYXRlVGlsZUxpc3QoW2Rtc09iamVjdF0pO1xuICAgICAgfSk7XG4gIH1cblxuICBjb250ZXh0TWVudUhhbmRsZXIoZXZlbnQ6IE1vdXNlRXZlbnQsIGluZGV4OiBudW1iZXIpIHtcbiAgICBpZiAoIWNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh0aGlzLnRpbGVzKClbaW5kZXhdLmVsUmVmLm5hdGl2ZUVsZW1lbnQuYXJpYVNlbGVjdGVkKSkge1xuICAgICAgdGhpcy5fc2VsZWN0QnlJbmRleChpbmRleCwgZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdChpOiBUaWxlRGF0YSwgZXZ0OiBNb3VzZUV2ZW50IHwgS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IGlkeCA9IHRoaXMuaXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmlkID09PSBpLmlkKTtcbiAgICB0aGlzLl9zZWxlY3RCeUluZGV4KGlkeCwgZXZ0KTtcbiAgfVxuXG4gIG9uRHJhZ1NlbGVjdENoYW5nZShzZWw6IG51bWJlcltdKSB7XG4gICAgaWYgKHRoaXMuX2tleU1hbmFnZXIuYWN0aXZlSXRlbUluZGV4ICE9PSAtMSkgdGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKC0xKTtcblxuICAgIHRoaXMuX3NlbGVjdGlvbiA9IHNlbDtcbiAgICB0aGlzLl9zZWxlY3Rpb24uc29ydCgpO1xuICAgIHRoaXMubGlzdEl0ZW1zKCkuZm9yRWFjaCgoaXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUsIGk6IG51bWJlcikgPT4gKGl0ZW0uc2VsZWN0ZWQgPSB0aGlzLl9zZWxlY3Rpb24uaW5jbHVkZXMoaSkpKTtcbiAgfVxuXG4gIG9uRHJhZ1NlbGVjdChzZWw6IG51bWJlcltdKSB7XG4gICAgdGhpcy4jZWxSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIHRoaXMuX3NlbGVjdGlvbiA9IHNlbDtcbiAgICB0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oc2VsWzBdIHx8IDApO1xuICAgIGNvbnN0IHRpbGVzID0gdGhpcy5fc2VsZWN0aW9uVG9UaWxlRGF0YSgpO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGlsZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2VsZWN0QnlJbmRleChpZHg6IG51bWJlciwgZXZ0PzogTW91c2VFdmVudCB8IEtleWJvYXJkRXZlbnQpIHtcbiAgICB0aGlzLl9rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0oaWR4KTtcbiAgICB0aGlzLiNzZWxlY3QoaWR4LCBldnQ/LnNoaWZ0S2V5LCBldnQ/LmN0cmxLZXkpO1xuICB9XG5cbiAgcmVmcmVzaCgpIHtcbiAgICBpZiAodGhpcy4jcXVlcnkpIHtcbiAgICAgIGlmICh0aGlzLnBhZ2luYXRpb24pIHtcbiAgICAgICAgdGhpcy5nb1RvUGFnZSh0aGlzLnBhZ2luYXRpb24ucGFnZSk7XG4gICAgICB9IGVsc2UgdGhpcy5fZXhlY3V0ZVF1ZXJ5KHRoaXMucXVlcnkoKSB8fCB1bmRlZmluZWQpO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5Rmxhdm9yKGZsYXZvcjogT2JqZWN0Rmxhdm9yKSB7XG4gICAgdGhpcy5hcHBsaWVkRmxhdm9yID0gdGhpcy5hcHBsaWVkRmxhdm9yPy5pZCA9PT0gZmxhdm9yLmlkID8gdW5kZWZpbmVkIDogZmxhdm9yO1xuICAgIGlmICh0aGlzLl9yYXdSZXN1bHQpIHRoaXMuaXRlbXMgPSB0aGlzLl9tYXBTZWFyY2hSZXN1bHQodGhpcy5fcmF3UmVzdWx0KTtcbiAgfVxuXG4gIGNsZWFyU2VsZWN0aW9uKHNpbGVudCA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuX3NlbGVjdGlvbi5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbiA9IFtdO1xuICAgICAgdGhpcy5fa2V5TWFuYWdlci5zZXRBY3RpdmVJdGVtKC0xKTtcbiAgICAgIHRoaXMubGlzdEl0ZW1zKCkuZm9yRWFjaCgoaXRlbTogTGlzdEl0ZW1EaXJlY3RpdmUsIGk6IG51bWJlcikgPT4gKGl0ZW0uc2VsZWN0ZWQgPSBmYWxzZSkpO1xuICAgICAgaWYgKCFzaWxlbnQpIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQoW10pO1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdE5leHQoKSB7XG4gICAgaWYgKHRoaXMuX2xhc3RTZWxlY3Rpb24pIHtcbiAgICAgIGxldCBpID0gdGhpcy5fbGFzdFNlbGVjdGlvbiArIDE7XG4gICAgICBpZiAoaSA+IHRoaXMuaXRlbXMubGVuZ3RoKSBpID0gMDtcbiAgICAgIHRoaXMuI3NlbGVjdChpKTtcbiAgICB9XG4gIH1cbiAgc2VsZWN0UHJldigpIHtcbiAgICBpZiAodGhpcy5fbGFzdFNlbGVjdGlvbikge1xuICAgICAgbGV0IGkgPSB0aGlzLl9sYXN0U2VsZWN0aW9uIC0gMTtcbiAgICAgIGlmIChpIDwgMCkgaSA9IHRoaXMuaXRlbXMubGVuZ3RoIC0gMTtcbiAgICAgIHRoaXMuI3NlbGVjdCh0aGlzLl9sYXN0U2VsZWN0aW9uIC0gMSk7XG4gICAgfVxuICB9XG5cbiAgZ29Ub1BhZ2UocGFnZTogbnVtYmVyKSB7XG4gICAgaWYgKCF0aGlzLiNxdWVyeSkgcmV0dXJuO1xuICAgIHRoaXMuX2J1c3kuc2V0KHRydWUpO1xuICAgIHRoaXMuI3NlYXJjaFNlcnZpY2VcbiAgICAgIC5nZXRQYWdlKHRoaXMuI3F1ZXJ5LCBwYWdlKVxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gdGhpcy5fYnVzeS5zZXQoZmFsc2UpKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBTZWFyY2hSZXN1bHQpID0+IHtcbiAgICAgICAgICB0aGlzLiNzZXR1cFBhZ2luYXRpb24ocmVzKTtcbiAgICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5fbWFwU2VhcmNoUmVzdWx0KHJlcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgLy8gVE9ETzogaG93IHNob3VsZCBlcnJvcnMgYmUgaGFuZGxlcyBpbiBjYXNlIGhhdCBsb2FkaW5nIHBhZ2VzIGZhaWxcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAjc2VsZWN0KGluZGV4OiBudW1iZXIsIHNoaWZ0S2V5ID0gZmFsc2UsIGN0cmxLZXkgPSBmYWxzZSkge1xuICAgIHRoaXMuI2VsUmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICBpZiAoaW5kZXggPT09IC0xKSB0aGlzLl9zZWxlY3Rpb24gPSBbXTtcbiAgICBlbHNlIHtcbiAgICAgIGlmICh0aGlzLm11bHRpc2VsZWN0KCkpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uID0gdGhpcy5fc2VsZWN0aW9uLmZpbHRlcigoaSkgPT4gaSAhPT0gaW5kZXgpO1xuICAgICAgICBpZiAoY3RybEtleSkge1xuICAgICAgICAgIC8vIGlmIGN0cmwga2V5IGFkZCB0byBzZWxlY3Rpb25cbiAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24ucHVzaChpbmRleCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2hpZnRLZXkpIHtcbiAgICAgICAgICAvLyBhZGQgcmFuZ2VcbiAgICAgICAgICBpZiAodGhpcy5fbGFzdFNlbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy5fbGFzdFNlbGVjdGlvbiA8IGluZGV4ID8gdGhpcy5fbGFzdFNlbGVjdGlvbiA6IGluZGV4O1xuICAgICAgICAgICAgY29uc3QgZW5kSW5kZXggPSB0aGlzLl9sYXN0U2VsZWN0aW9uID4gaW5kZXggPyB0aGlzLl9sYXN0U2VsZWN0aW9uIDogaW5kZXg7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbi5wdXNoKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24gPSBbaW5kZXhdO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3Rpb24gPSBbaW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgdGhpcy5fc2VsZWN0aW9uID0gW2luZGV4XTtcbiAgICAgIHRoaXMuX3NlbGVjdGlvbiA9IFsuLi5uZXcgU2V0KHRoaXMuX3NlbGVjdGlvbildO1xuICAgIH1cbiAgICB0aGlzLl9sYXN0U2VsZWN0aW9uID0gdGhpcy5fc2VsZWN0aW9uLmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IGluZGV4O1xuICAgIHRoaXMuX3NlbGVjdGlvbi5zb3J0KCk7XG5cbiAgICB0aGlzLmxpc3RJdGVtcygpLmZvckVhY2goKGl0ZW06IExpc3RJdGVtRGlyZWN0aXZlLCBpOiBudW1iZXIpID0+IChpdGVtLnNlbGVjdGVkID0gdGhpcy5fc2VsZWN0aW9uLmluY2x1ZGVzKGkpKSk7XG4gICAgY29uc3QgdGlsZXMgPSB0aGlzLl9zZWxlY3Rpb25Ub1RpbGVEYXRhKCk7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdCh0aWxlcyk7XG4gICAgdGlsZXMubGVuZ3RoID09PSAxICYmIHRoaXMuaXRlbVNlbGVjdC5lbWl0KHRpbGVzWzBdKTtcbiAgICB0aGlzLnNlbGVjdGVkVGlsZS5zZXQodGhpcy5fc2VsZWN0aW9uLm1hcCgoaWR4KSA9PiB0aGlzLml0ZW1zW2lkeF0pKTtcbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdGlvblRvVGlsZURhdGEoKTogVGlsZURhdGFbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbi5tYXAoKGlkeCkgPT4gdGhpcy5pdGVtc1tpZHhdKTtcbiAgfVxuXG4gIHByaXZhdGUgX2V4ZWN1dGVRdWVyeShxOiBTZWFyY2hRdWVyeSB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChxICYmIHRoaXMuI3N5c3RlbS5zeXN0ZW0pIHtcbiAgICAgIHRoaXMuc2VhcmNoRXhlY3V0ZWQgPSBmYWxzZTtcbiAgICAgIC8vIHJlc2V0IGl0ZW1zIHRvIGF2b2lkIG9sZCBkYXRhIGJlaW5nIHNob3duIHdoaWxlIG5ldyBzdHVmZiBpcyBsb2FkZWRcbiAgICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICAgIC8vIHEuZmllbGRzID0gT2JqZWN0LmtleXModGhpcy4jc3lzdGVtLnN5c3RlbS5hbGxGaWVsZHMpO1xuICAgICAgcS5maWVsZHMgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9idXN5LnNldCh0cnVlKTtcbiAgICAgIHRoaXMuc2VhcmNoUmVzdWx0U3Vic2NyaXB0aW9uID0gdGhpcy4jc2VhcmNoU2VydmljZVxuICAgICAgICAuc2VhcmNoKHEpXG4gICAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+IHRoaXMuX2J1c3kuc2V0KGZhbHNlKSkpXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChyZXM6IFNlYXJjaFJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy4jc2V0dXBQYWdpbmF0aW9uKHJlcyk7XG4gICAgICAgICAgICB0aGlzLml0ZW1zID0gdGhpcy5fbWFwU2VhcmNoUmVzdWx0KHJlcyk7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5UmVzdWx0LmVtaXQoeyB0b3RhbENvdW50OiByZXMuaXRlbXMubGVuZ3RoIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBwcmVzZWxlY3QgPSB0aGlzLnByZXNlbGVjdCgpO1xuICAgICAgICAgICAgaWYgKHByZXNlbGVjdCkge1xuICAgICAgICAgICAgICBwcmVzZWxlY3QuZm9yRWFjaCgoaWQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpZHggPSB0aGlzLml0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gaWQpO1xuICAgICAgICAgICAgICAgIGlmIChpZHggPj0gMCkgdGhpcy5fc2VsZWN0QnlJbmRleChpZHgpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiBjb25zb2xlLmVycm9yKGVycilcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgI3NldHVwUGFnaW5hdGlvbihzZWFyY2hSZXN1bHQ6IFNlYXJjaFJlc3VsdCkge1xuICAgIHRoaXMucGFnaW5hdGlvbiA9IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy4jcXVlcnkgJiYgc2VhcmNoUmVzdWx0LnRvdGFsTnVtSXRlbXMgPiAodGhpcy4jcXVlcnkuc2l6ZSB8fCBTZWFyY2hTZXJ2aWNlLkRFRkFVTFRfUVVFUllfU0laRSkpIHtcbiAgICAgIHRoaXMucGFnaW5hdGlvbiA9IHtcbiAgICAgICAgdG90YWw6IHNlYXJjaFJlc3VsdC50b3RhbE51bUl0ZW1zLFxuICAgICAgICBwYWdlczogTWF0aC5jZWlsKHNlYXJjaFJlc3VsdC50b3RhbE51bUl0ZW1zIC8gKHRoaXMuI3F1ZXJ5Py5zaXplIHx8IFNlYXJjaFNlcnZpY2UuREVGQVVMVF9RVUVSWV9TSVpFKSksXG4gICAgICAgIHBhZ2U6ICghdGhpcy4jcXVlcnk/LmZyb20gPyAwIDogdGhpcy4jcXVlcnkuZnJvbSAvICh0aGlzLiNxdWVyeT8uc2l6ZSB8fCBTZWFyY2hTZXJ2aWNlLkRFRkFVTFRfUVVFUllfU0laRSkpICsgMVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAjbWFwVG9UaWxlRGF0YShvYmplY3RzOiBEbXNPYmplY3RbXSk6IFRpbGVEYXRhW10ge1xuICAgIHJldHVybiBvYmplY3RzLm1hcCgoZG1zT2JqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzb3RzID0gZG1zT2JqZWN0LnNvdHMgfHwgW107XG5cbiAgICAgIGxldCBvYyA9IHRoaXMub2MhW2Rtc09iamVjdC5vYmplY3RUeXBlSWRdO1xuXG4gICAgICAvLyBjaGVjayBpZiByZXN1bHQgb2l0ZW0gbWF0Y2hlcyB2aXJ0dWFsIGNvbmZpZyB0eXBlXG4gICAgICBjb25zdCBjZmdUeXBlcyA9IHRoaXMub3B0aW9ucygpPy5jb25maWdUeXBlcyB8fCBbXTtcblxuICAgICAgY2ZnVHlwZXMuZm9yRWFjaCgoY2Z0KSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoZXNUeXBlID0gIWNmdC5vYmplY3RUeXBlIHx8IGNmdC5vYmplY3RUeXBlID09PSBkbXNPYmplY3Qub2JqZWN0VHlwZUlkO1xuICAgICAgICBjb25zdCBtYXRjaGVzU09UcyA9ICFjZnQuc290cyB8fCAhY2Z0LnNvdHMubGVuZ3RoIHx8IGNmdC5zb3RzLmV2ZXJ5KChzb3QpID0+IHNvdHMuaW5jbHVkZXMoc290KSk7XG5cbiAgICAgICAgaWYgKG1hdGNoZXNUeXBlICYmIG1hdGNoZXNTT1RzKSBvYyA9IHRoaXMub2MhW2NmdC5pZF07XG4gICAgICB9KTtcblxuICAgICAgLy8gb25seSBhcHBseSBhIGZsYXZvciBpZiB0aGUgb2JqZWN0IGhhcyB0aGF0IFNPVFxuICAgICAgY29uc3Qgb3duQXBwbGllZEZsYXZvciA9IHRoaXMuYXBwbGllZEZsYXZvciAmJiBzb3RzLmluY2x1ZGVzKHRoaXMuYXBwbGllZEZsYXZvci5zb3QpICYmIHRoaXMub2MhW3RoaXMuYXBwbGllZEZsYXZvci5zb3RdO1xuICAgICAgaWYgKG93bkFwcGxpZWRGbGF2b3IpIHtcbiAgICAgICAgb2MgPSB0aGlzLm9jIVt0aGlzLmFwcGxpZWRGbGF2b3IhLmlkXTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFvYykgb2MgPSB0aGlzLiNvYmplY3RDb25maWdTZXJ2aWNlLmdldERlZmF1bHRDb25maWcoZG1zT2JqZWN0Lm9iamVjdFR5cGVJZCk7XG5cbiAgICAgIGNvbnN0IHRsaTogVGlsZURhdGEgPSB7XG4gICAgICAgIG9iamVjdFR5cGVJZDogZG1zT2JqZWN0Lm9iamVjdFR5cGVJZCxcbiAgICAgICAgaWQ6IGRtc09iamVjdC5pZCxcbiAgICAgICAgYWN0aW9uczogb2MuYWN0aW9ucyxcbiAgICAgICAgYmFkZ2VzOiBvYy5iYWRnZXMsXG4gICAgICAgIGluc3RhbmNlRGF0YTogZG1zT2JqZWN0LmRhdGEsXG4gICAgICAgIGRtc09iamVjdCxcbiAgICAgICAgdGl0bGU6IG9jLnRpdGxlID8gdGhpcy4jZ2V0UmVzb2x2ZWRPYmplY3RDb25maWdJdGVtKG9jLnRpdGxlLnByb3BlcnR5TmFtZSwgZG1zT2JqZWN0LmRhdGEpIDogeyBwcm9wZXJ0eU5hbWU6ICcnLCB2YWx1ZTogJycgfVxuICAgICAgfTtcblxuICAgICAgdGxpLmljb24gPSBvYy5pY29uXG4gICAgICAgID8ge1xuICAgICAgICAgICAgcmVuZGVyZXJUeXBlOiAnaWNvbicsXG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWU6ICdjdXN0b20nLFxuICAgICAgICAgICAgdmFsdWU6IG9jLmljb24uc3ZnXG4gICAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIHJlbmRlcmVyVHlwZTogJ2ljb24nLFxuICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBCYXNlT2JqZWN0VHlwZUZpZWxkLk9CSkVDVF9UWVBFX0lELFxuICAgICAgICAgICAgdmFsdWU6IG93bkFwcGxpZWRGbGF2b3IgJiYgdGhpcy5hcHBsaWVkRmxhdm9yID8gdGhpcy5hcHBsaWVkRmxhdm9yLnNvdCA6IGRtc09iamVjdC5vYmplY3RUeXBlSWRcbiAgICAgICAgICB9O1xuICAgICAgaWYgKG9jLmRlc2NyaXB0aW9uKSB0bGkuZGVzY3JpcHRpb24gPSB0aGlzLiNnZXRSZXNvbHZlZE9iamVjdENvbmZpZ0l0ZW0ob2MuZGVzY3JpcHRpb24ucHJvcGVydHlOYW1lLCBkbXNPYmplY3QuZGF0YSk7XG4gICAgICBpZiAob2MubWV0YSkgdGxpLm1ldGEgPSB0aGlzLiNnZXRSZXNvbHZlZE9iamVjdENvbmZpZ0l0ZW0ob2MubWV0YS5wcm9wZXJ0eU5hbWUsIGRtc09iamVjdC5kYXRhKTtcbiAgICAgIGlmIChvYy5hc2lkZSkgdGxpLmFzaWRlID0gdGhpcy4jZ2V0UmVzb2x2ZWRPYmplY3RDb25maWdJdGVtKG9jLmFzaWRlLnByb3BlcnR5TmFtZSwgZG1zT2JqZWN0LmRhdGEpO1xuXG4gICAgICByZXR1cm4gdGxpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWFwU2VhcmNoUmVzdWx0KHJlczogU2VhcmNoUmVzdWx0KTogVGlsZURhdGFbXSB7XG4gICAgdGhpcy5zZWFyY2hFeGVjdXRlZCA9IHRydWU7XG4gICAgdGhpcy5fcmF3UmVzdWx0ID0gcmVzO1xuICAgIHJldHVybiB0aGlzLm9jID8gdGhpcy4jbWFwVG9UaWxlRGF0YShyZXMuaXRlbXMubWFwKChpKSA9PiBuZXcgRG1zT2JqZWN0KGkpKSkgOiBbXTtcbiAgfVxuXG4gICNnZXRSZXNvbHZlZE9iamVjdENvbmZpZ0l0ZW0ocHJvcGVydHlOYW1lOiBzdHJpbmcsIGluc3RhbmNlRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBSZXNvbHZlZE9iamVjdENvbmZpZ0l0ZW0ge1xuICAgIGNvbnN0IGl0ZW06IFJlc29sdmVkT2JqZWN0Q29uZmlnSXRlbSA9IHtcbiAgICAgIHByb3BlcnR5TmFtZTogcHJvcGVydHlOYW1lLFxuICAgICAgdmFsdWU6IGluc3RhbmNlRGF0YVtwcm9wZXJ0eU5hbWVdXG4gICAgfTtcbiAgICAvLyBNZXRhIGRhdGEgYXJlIGNvbnNpZGVyZWQgcHJvcGVydGllcyB0aGF0IHN0YXJ0IHdpdGggdGhlIHByb3BlcnR5IG5hbWUgZm9sbG93ZWQgYnkgYW4gdW5kZXJzY29yZS5cbiAgICAvLyBPcmdhbml6YXRpb24gZmllbGRzIGZvciBleGFtcGxlIGhhdmUgYW4gYWRkaXRpb25hbCBwcm9wZXJ0eSAneHl6X3RpdGxlJyB0aGF0IGNvbnRhaW5zIHRoZSByZXNvbHZlZFxuICAgIC8vIG5hbWUgb2YgYSB1c2VyIHdoaWxlIHRoZSB2YWx1ZSBpdHNlbGYgaXMgdGhlIHVzZXJzIElELlxuICAgIGNvbnN0IG1ldGFEYXRhID0gT2JqZWN0LmtleXMoaW5zdGFuY2VEYXRhKVxuICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkuc3RhcnRzV2l0aChwcm9wZXJ0eU5hbWUgKyAnXycpKVxuICAgICAgLm1hcCgoa2V5KSA9PiAoeyBba2V5LnN1YnN0cmluZyhrZXkuaW5kZXhPZignXycpICsgMSldOiBpbnN0YW5jZURhdGFba2V5XSB9KSk7XG5cbiAgICAvLyBJZiB0aGVyZSBhcmUgbWV0YSBkYXRhIHByb3BlcnRpZXMsIHRoZXknbGwgYmUgbWVyZ2VkIGludG8gYSBSZWNvcmQgd2hlcmUgdGhlXG4gICAgLy8ga2V5IGlzIHRoZSBwcm9wZXJ0eSBuYW1lIHdpdGhvdXQgdGhlIHVuZGVyc2NvcmUgYW5kIHRoZSBhY3R1YWwgcHJvcGVydGllcyBuYW1lLlxuICAgIC8vIFNvIHsgJ3h5el90aXRsZSc6ICdKb2huIERvZScgfSB3aWxsIGJlIG1lcmdlZCBpbnRvIHsgdGl0bGU6ICdKb2huIERvZScgfVxuICAgIGlmIChtZXRhRGF0YS5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IG1ldGEgPSBtZXRhRGF0YS5yZWR1Y2UoKGFjYywgY3VyKSA9PiAoeyAuLi5hY2MsIC4uLmN1ciB9KSwge30pO1xuICAgICAgaXRlbS5tZXRhID0gbWV0YTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuXG4gIHVwZGF0ZVRpbGVMaXN0KGxpc3RJdGVtczogRG1zT2JqZWN0W10pIHtcbiAgICBsaXN0SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgaWR4ID0gdGhpcy5pdGVtcy5maW5kSW5kZXgoKGxpc3RJdGVtKSA9PiBsaXN0SXRlbS5pZCA9PT0gaXRlbS5pZCk7XG4gICAgICBpZiAoaWR4ID49IDAgJiYgdGhpcy5vYykge1xuICAgICAgICBjb25zdCBtYXBwZWRUaWxlRGF0YSA9IHRoaXMuI21hcFRvVGlsZURhdGEoW2l0ZW1dKTtcbiAgICAgICAgdGhpcy5pdGVtc1tpZHhdID0gbWFwcGVkVGlsZURhdGFbMF07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLiNvYmplY3RDb25maWdTZXJ2aWNlXG4gICAgICAuZ2V0T2JqZWN0Q29uZmlncyQodGhpcy5idWNrZXQoKSB8fCAnJywgdHJ1ZSlcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLiNkZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBPYmplY3RDb25maWdSZWNvcmQpID0+IHtcbiAgICAgICAgICB0aGlzLm9jID0gcmVzO1xuICAgICAgICAgIGNvbnN0IHEgPSB0aGlzLnF1ZXJ5KCk7XG4gICAgICAgICAgcSAmJiB0aGlzLl9leGVjdXRlUXVlcnkocSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fa2V5TWFuYWdlcj8uZGVzdHJveSgpO1xuICAgIHRoaXMuc2VhcmNoUmVzdWx0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cbn1cbiIsIjxkaXZcbiAgY2xhc3M9XCJ0aWxlc1wiXG4gIFt5dXZEcmFnU2VsZWN0XT1cInsgZGlzYWJsZWQ6ICF0aGlzLm11bHRpc2VsZWN0KCkgfHwgaXNUb3VjaERldmljZSB9XCJcbiAgKGRyYWdTZWxlY3RDaGFuZ2UpPVwib25EcmFnU2VsZWN0Q2hhbmdlKCRldmVudClcIlxuICAoZHJhZ1NlbGVjdCk9XCJvbkRyYWdTZWxlY3QoJGV2ZW50KVwiXG4+XG4gIEBmb3IgKGkgb2YgaXRlbXM7IHRyYWNrIGkuaWQpIHtcbiAgICA8eXV2LXRpbGVcbiAgICAgIHl1dkRyYWdTZWxlY3RJdGVtXG4gICAgICB5dXZMaXN0SXRlbVxuICAgICAgW3N0eWxlLi0taV09XCIkaW5kZXhcIlxuICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJzZWxlY3Rpb24oKS5pbmNsdWRlcyhpLmlkKVwiXG4gICAgICAoY2xpY2suc2luZ2xlKT1cInNlbGVjdChpLCAkZXZlbnQpXCJcbiAgICAgIChjbGljay5kb3VibGUpPVwiaXRlbURibENsaWNrLmVtaXQoaSlcIlxuICAgICAgW25nQ2xhc3NdPVwieyBzZWxlY3RlZDogc2VsZWN0aW9uKCkuaW5jbHVkZXMoaS5pZCksIGxhc3Q6ICRsYXN0IH1cIlxuICAgICAgW2FjdGlvbkNvbnRleHRdPVwib3B0aW9ucygpPy5hY3Rpb25Db250ZXh0XCJcbiAgICAgIFt0aWxlXT1cImlcIlxuICAgICAgW25nU3R5bGVdPVwiaGlnaGxpZ2h0U3R5bGVzKClbaS5pZF1cIlxuICAgICAgKGNvbnRleHRtZW51KT1cImNvbnRleHRNZW51SGFuZGxlcigkZXZlbnQsICRpbmRleClcIlxuICAgID48L3l1di10aWxlPlxuICB9IEBlbXB0eSB7XG4gICAgPGRpdiBjbGFzcz1cImVtcHl0LWxpc3RcIj5cbiAgICAgIEBpZiAoc2VhcmNoRXhlY3V0ZWQgJiYgZW1wdHlDb250ZW50KCkpIHtcbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG4gIDxkaXYgY2xhc3M9XCJvZmZzZXRcIiAoY2xpY2spPVwiY2xlYXJTZWxlY3Rpb24oKVwiPjwvZGl2PlxuPC9kaXY+XG5AaWYgKHBhZ2luYXRpb24pIHtcbiAgPHl1di1wYWdpbmF0aW9uIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIiAocGFnZUNoYW5nZSk9XCJnb1RvUGFnZSgkZXZlbnQpXCI+PC95dXYtcGFnaW5hdGlvbj5cbn1cbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlsZS1saXN0LmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMveXV1dmlzL2NsaWVudC1mcmFtZXdvcmsvdGlsZS1saXN0L3NyYy9saWIvdGlsZS1saXN0L3RpbGUtbGlzdC5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERtc09iamVjdCwgUmVzb2x2ZWRPYmplY3RDb25maWcsIFZpcnR1YWxPYmplY3RUeXBlIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBBY3Rpb25Db250ZXh0IH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtZnJhbWV3b3JrL2FjdGlvbnMnO1xuaW1wb3J0IHsgT2JqZWN0Rmxhdm9yIH0gZnJvbSAnQHl1dXZpcy9jbGllbnQtc2hlbGwtY29yZSc7XG5cbi8vIElucHV0IGRhdGEgZm9yIGEgdGlsZS4gTWFwcyBvYmplY3QgY29uZmlnIHRvIHRoZSB0aWxlcyBzbG90c1xuZXhwb3J0IHR5cGUgVGlsZURhdGEgPSBSZXNvbHZlZE9iamVjdENvbmZpZyAmIHtkbXNPYmplY3Q6IERtc09iamVjdH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGlsZUxpc3RDb25maWdPcHRpb25zIHtcbiAgLyoqXG4gICAqIExpc3Qgb2YgdHlwZXMgdG8gYmUgYXZhaWxhYmxlIGluIHRpbGUtY29uZmlnXG4gICovXG4gIGNvbmZpZ1R5cGVzOiBWaXJ0dWFsT2JqZWN0VHlwZVtdO1xuICAvLyBPYmplY3QgZmxhdm9ycyBtYWRlIGF2YWlsYmxlIGZvciBjb25maWd1cmF0aW9uXG4gIGNvbmZpZ0ZsYXZvcnM/OiBPYmplY3RGbGF2b3JbXTtcbiAgYWN0aW9uQ29udGV4dD86IEFjdGlvbkNvbnRleHQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGlsZUxpc3RIaWdobGlnaHQge1xuICAvLyBjc3MgY2xhc3MgdG8gYmUgYXBwbGllZCB0byB0aGUgdGlsZVxuICBjc3NTdHlsZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAvLyBpZHMgb2YgdGhlIHRpbGVzIHRvIGJlIGhpZ2hsaWdodGVkXG4gIGlkczogc3RyaW5nW107XG59Il19
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './index';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieXV1dmlzLWNsaWVudC1mcmFtZXdvcmstdGlsZS1saXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy95dXV2aXMvY2xpZW50LWZyYW1ld29yay90aWxlLWxpc3Qvc3JjL3l1dXZpcy1jbGllbnQtZnJhbWV3b3JrLXRpbGUtbGlzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export * from './token-search.component';
|
|
2
|
-
export * from './token-search.interface';
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3l1dXZpcy9jbGllbnQtZnJhbWV3b3JrL3Rva2VuLXNlYXJjaC9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywwQkFBMEIsQ0FBQTtBQUN4QyxjQUFjLDBCQUEwQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi90b2tlbi1zZWFyY2guY29tcG9uZW50J1xuZXhwb3J0ICogZnJvbSAnLi90b2tlbi1zZWFyY2guaW50ZXJmYWNlJ1xuIl19
|