@fundamental-ngx/platform 0.47.4 → 0.48.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -28
- package/esm2022/approval-flow/approval-flow-add-node/approval-flow-add-node.component.mjs +6 -11
- package/esm2022/approval-flow/approval-flow-approver-details/approval-flow-approver-details.component.mjs +6 -8
- package/esm2022/approval-flow/approval-flow-messages/approval-flow-messages.component.mjs +5 -6
- package/esm2022/approval-flow/approval-flow-node/approval-flow-drop-zone.directive.mjs +5 -5
- package/esm2022/approval-flow/approval-flow-node/approval-flow-node.component.mjs +8 -11
- package/esm2022/approval-flow/approval-flow-select-type/approval-flow-select-type.component.mjs +6 -8
- package/esm2022/approval-flow/approval-flow-team-list/approval-flow-team-list.component.mjs +5 -7
- package/esm2022/approval-flow/approval-flow-toolbar-actions/approval-flow-toolbar-actions.component.mjs +5 -6
- package/esm2022/approval-flow/approval-flow-user-details/approval-flow-user-details.component.mjs +6 -6
- package/esm2022/approval-flow/approval-flow-user-list/approval-flow-user-list.component.mjs +6 -7
- package/esm2022/approval-flow/approval-flow.component.mjs +8 -10
- package/esm2022/approval-flow/approval-flow.module.mjs +4 -4
- package/esm2022/approval-flow/services/approval-flow-add-node-view.service.mjs +3 -3
- package/esm2022/button/button.component.mjs +5 -5
- package/esm2022/button/button.module.mjs +4 -4
- package/esm2022/dynamic-page/directives/dynamic-page-header-subtitle.directive.mjs +3 -3
- package/esm2022/dynamic-page/directives/dynamic-page-header-title.directive.mjs +3 -3
- package/esm2022/dynamic-page/dynamic-page-content/dynamic-page-content-host.component.mjs +5 -5
- package/esm2022/dynamic-page/dynamic-page-content/dynamic-page-content.component.mjs +5 -5
- package/esm2022/dynamic-page/dynamic-page-footer/dynamic-page-footer.component.mjs +3 -3
- package/esm2022/dynamic-page/dynamic-page-header/actions/global-actions/dynamic-page-global-actions.component.mjs +3 -3
- package/esm2022/dynamic-page/dynamic-page-header/actions/layout-actions/dynamic-page-layout-actions.component.mjs +3 -3
- package/esm2022/dynamic-page/dynamic-page-header/header/dynamic-page-header.component.mjs +4 -4
- package/esm2022/dynamic-page/dynamic-page-header/key-info/dynamic-page-key-info.component.mjs +3 -3
- package/esm2022/dynamic-page/dynamic-page-header/title/dynamic-page-title-image.component.mjs +3 -3
- package/esm2022/dynamic-page/dynamic-page-header/title/dynamic-page-title.component.mjs +3 -3
- package/esm2022/dynamic-page/dynamic-page.component.mjs +8 -10
- package/esm2022/dynamic-page/dynamic-page.config.mjs +4 -4
- package/esm2022/dynamic-page/dynamic-page.module.mjs +4 -4
- package/esm2022/dynamic-page/dynamic-page.service.mjs +3 -3
- package/esm2022/feed-input/feed-input.component.mjs +6 -7
- package/esm2022/feed-input/feed-input.module.mjs +4 -4
- package/esm2022/form/auto-complete/auto-complete.directive.mjs +5 -5
- package/esm2022/form/auto-complete/auto-complete.module.mjs +4 -4
- package/esm2022/form/checkbox/checkbox.component.mjs +6 -6
- package/esm2022/form/checkbox/checkbox.module.mjs +4 -4
- package/esm2022/form/checkbox-group/checkbox-group.component.mjs +8 -8
- package/esm2022/form/checkbox-group/checkbox-group.module.mjs +4 -4
- package/esm2022/form/combobox/combobox/combobox.component.mjs +9 -11
- package/esm2022/form/combobox/combobox-mobile/combobox/combobox-mobile.component.mjs +13 -15
- package/esm2022/form/combobox/combobox-mobile/combobox-mobile.module.mjs +4 -4
- package/esm2022/form/combobox/combobox.config.mjs +4 -4
- package/esm2022/form/combobox/combobox.module.mjs +4 -4
- package/esm2022/form/combobox/commons/base-combobox.mjs +8 -6
- package/esm2022/form/combobox/directives/combobox-item.directive.mjs +15 -15
- package/esm2022/form/date-picker/date-picker.component.mjs +6 -6
- package/esm2022/form/date-picker/date-picker.module.mjs +4 -4
- package/esm2022/form/datetime-picker/datetime-picker.component.mjs +6 -6
- package/esm2022/form/datetime-picker/datetime-picker.module.mjs +4 -4
- package/esm2022/form/form-generator/base-dynamic-form-generator-control.mjs +3 -3
- package/esm2022/form/form-generator/controls/dynamic-form-generator-checkbox/dynamic-form-generator-checkbox.component.mjs +4 -4
- package/esm2022/form/form-generator/controls/dynamic-form-generator-datepicker/dynamic-form-generator-datepicker.component.mjs +4 -4
- package/esm2022/form/form-generator/controls/dynamic-form-generator-editor/dynamic-form-generator-editor.component.mjs +4 -4
- package/esm2022/form/form-generator/controls/dynamic-form-generator-input/dynamic-form-generator-input.component.mjs +6 -7
- package/esm2022/form/form-generator/controls/dynamic-form-generator-multi-input/dynamic-form-generator-multi-input.component.mjs +4 -4
- package/esm2022/form/form-generator/controls/dynamic-form-generator-object-status/dynamic-form-generator-object-status.component.mjs +3 -3
- package/esm2022/form/form-generator/controls/dynamic-form-generator-radio/dynamic-form-generator-radio.component.mjs +4 -4
- package/esm2022/form/form-generator/controls/dynamic-form-generator-select/dynamic-form-generator-select.component.mjs +4 -4
- package/esm2022/form/form-generator/controls/dynamic-form-generator-switch/dynamic-form-generator-switch.component.mjs +4 -4
- package/esm2022/form/form-generator/dynamic-form-control-field.directive.mjs +5 -5
- package/esm2022/form/form-generator/dynamic-form-control.directive.mjs +6 -6
- package/esm2022/form/form-generator/fdp-form-generator.module.mjs +4 -4
- package/esm2022/form/form-generator/form-generator/form-generator.component.mjs +9 -11
- package/esm2022/form/form-generator/form-generator-components-accessor.service.mjs +3 -3
- package/esm2022/form/form-generator/form-generator-field/form-generator-field.component.mjs +7 -8
- package/esm2022/form/form-generator/form-generator.service.mjs +5 -5
- package/esm2022/form/form-generator/pipes/get-hint-options.pipe.mjs +5 -5
- package/esm2022/form/form-generator/pipes/get-ordered-form-controls.pipe.mjs +3 -3
- package/esm2022/form/form-group/fdp-form.module.mjs +4 -4
- package/esm2022/form/form-group/form-field/form-field.component.mjs +10 -10
- package/esm2022/form/form-group/form-field-error/form-field-error-description.directive.mjs +6 -6
- package/esm2022/form/form-group/form-field-error/form-field-error-heading.directive.mjs +6 -6
- package/esm2022/form/form-group/form-field-error/form-field-error.directive.mjs +5 -5
- package/esm2022/form/form-group/form-field-extras/form-field-extras.component.mjs +3 -3
- package/esm2022/form/form-group/form-field-group/form-field-group.component.mjs +6 -6
- package/esm2022/form/form-group/form-group-header/form-group-header.component.mjs +6 -6
- package/esm2022/form/form-group/form-group.component.mjs +8 -10
- package/esm2022/form/form-group/pipes/field-group-row-value.pipe.mjs +3 -3
- package/esm2022/form/form-group/services/form-field-layout.service.mjs +5 -5
- package/esm2022/form/index.mjs +1 -3
- package/esm2022/form/input/fdp-input.module.mjs +4 -4
- package/esm2022/form/input/input.component.mjs +6 -6
- package/esm2022/form/input-group/addon-body.component.mjs +5 -5
- package/esm2022/form/input-group/addon.component.mjs +5 -5
- package/esm2022/form/input-group/input-group.component.mjs +12 -12
- package/esm2022/form/input-group/input-group.config.mjs +4 -4
- package/esm2022/form/input-group/input-group.module.mjs +4 -4
- package/esm2022/form/input-group/input.component.mjs +3 -3
- package/esm2022/form/input-message-group-with-template/input-message-group-with-template.component.mjs +7 -7
- package/esm2022/form/multi-combobox/commons/base-multi-combobox.mjs +6 -6
- package/esm2022/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +10 -12
- package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox/multi-combobox-mobile.component.mjs +8 -9
- package/esm2022/form/multi-combobox/multi-combobox-mobile/multi-combobox-mobile.module.mjs +4 -4
- package/esm2022/form/multi-combobox/multi-combobox.config.mjs +4 -4
- package/esm2022/form/multi-combobox/multi-combobox.module.mjs +4 -4
- package/esm2022/form/multi-input/base-multi-input.mjs +6 -6
- package/esm2022/form/multi-input/multi-input-mobile/multi-input-mobile.component.mjs +12 -12
- package/esm2022/form/multi-input/multi-input-mobile/multi-input-mobile.module.mjs +4 -4
- package/esm2022/form/multi-input/multi-input.component.mjs +9 -11
- package/esm2022/form/multi-input/multi-input.config.mjs +4 -4
- package/esm2022/form/multi-input/multi-input.module.mjs +4 -4
- package/esm2022/form/radio-group/radio/radio.component.mjs +8 -8
- package/esm2022/form/radio-group/radio-group.component.mjs +8 -8
- package/esm2022/form/radio-group/radio-group.module.mjs +4 -4
- package/esm2022/form/select/commons/base-select.mjs +6 -6
- package/esm2022/form/select/select/select.component.mjs +8 -8
- package/esm2022/form/select/select.config.mjs +4 -4
- package/esm2022/form/select/select.module.mjs +4 -4
- package/esm2022/form/step-input/base.step-input.mjs +5 -5
- package/esm2022/form/step-input/number/number-step-input.component.mjs +9 -10
- package/esm2022/form/step-input/step-input-action-button.mjs +3 -3
- package/esm2022/form/step-input/step-input-control.directive.mjs +6 -6
- package/esm2022/form/step-input/step-input-decrement.directive.mjs +5 -5
- package/esm2022/form/step-input/step-input-increment.directive.mjs +5 -5
- package/esm2022/form/step-input/step-input.config.mjs +3 -3
- package/esm2022/form/step-input/step-input.module.mjs +4 -4
- package/esm2022/form/switch/switch/switch.component.mjs +6 -6
- package/esm2022/form/switch/switch/switch.config.mjs +3 -3
- package/esm2022/form/switch/switch.module.mjs +4 -4
- package/esm2022/form/text-area/text-area.component.mjs +8 -9
- package/esm2022/form/text-area/text-area.config.mjs +3 -3
- package/esm2022/form/text-area/text-area.module.mjs +4 -4
- package/esm2022/form/time-picker/time-picker.component.mjs +6 -6
- package/esm2022/form/time-picker/time-picker.module.mjs +4 -4
- package/esm2022/fundamental-ngx.module.mjs +14 -33
- package/esm2022/icon-tab-bar/components/closable-icon-tab-bar.class.mjs +3 -3
- package/esm2022/icon-tab-bar/components/icon-tab-bar-base.class.mjs +5 -9
- package/esm2022/icon-tab-bar/components/icon-tab-bar-filter-type/icon-tab-bar-filter-type.component.mjs +6 -8
- package/esm2022/icon-tab-bar/components/icon-tab-bar-icon-type/icon-tab-bar-icon-type.component.mjs +6 -8
- package/esm2022/icon-tab-bar/components/icon-tab-bar-process-type/icon-tab-bar-process-type.component.mjs +5 -8
- package/esm2022/icon-tab-bar/components/icon-tab-bar-text-type/icon-tab-bar-text-type.component.mjs +7 -9
- package/esm2022/icon-tab-bar/components/popovers/icon-tab-bar-popover/icon-tab-bar-popover.component.mjs +6 -15
- package/esm2022/icon-tab-bar/components/popovers/icon-tab-bar-popover-base.class.mjs +5 -9
- package/esm2022/icon-tab-bar/components/popovers/text-type-popover/text-type-popover.component.mjs +6 -8
- package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-container.directive.mjs +5 -5
- package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-item.directive.mjs +5 -5
- package/esm2022/icon-tab-bar/directives/dnd/icon-bar-dnd-list.directive.mjs +5 -5
- package/esm2022/icon-tab-bar/icon-tab-bar.component.mjs +8 -9
- package/esm2022/icon-tab-bar/icon-tab-bar.module.mjs +4 -4
- package/esm2022/index.mjs +8 -12
- package/esm2022/info-label/info-label.component.mjs +5 -5
- package/esm2022/info-label/info-label.module.mjs +4 -4
- package/esm2022/link/link.component.mjs +5 -5
- package/esm2022/link/link.module.mjs +4 -4
- package/esm2022/list/action-list-item/action-list-item.component.mjs +3 -3
- package/esm2022/list/action-list-item/action-list-item.module.mjs +4 -4
- package/esm2022/list/base-list-item.mjs +11 -11
- package/esm2022/list/display-list-item/display-list-item.component.mjs +6 -7
- package/esm2022/list/display-list-item/display-list-item.module.mjs +4 -4
- package/esm2022/list/free-content-list-item/free-content-list-item.component.mjs +4 -4
- package/esm2022/list/list-group-footer.component.mjs +3 -3
- package/esm2022/list/list-group-header.component.mjs +3 -3
- package/esm2022/list/list.component.mjs +9 -11
- package/esm2022/list/list.config.mjs +3 -3
- package/esm2022/list/list.module.mjs +4 -4
- package/esm2022/list/load-more-content.directive.mjs +4 -4
- package/esm2022/list/object-list-item/object-list-item-row.component.mjs +4 -4
- package/esm2022/list/object-list-item/object-list-item.component.mjs +6 -7
- package/esm2022/list/object-list-item/object-list-item.module.mjs +4 -4
- package/esm2022/list/standard-list-item/standard-list-item.component.mjs +6 -7
- package/esm2022/list/standard-list-item/standard-list-item.module.mjs +4 -4
- package/esm2022/menu/menu-item.component.mjs +7 -7
- package/esm2022/menu/menu-trigger.directive.mjs +6 -6
- package/esm2022/menu/menu.component.mjs +6 -6
- package/esm2022/menu/menu.module.mjs +4 -4
- package/esm2022/menu-button/menu-button.component.mjs +5 -5
- package/esm2022/menu-button/menu-button.module.mjs +4 -4
- package/esm2022/message-popover/components/message-popover-form-wrapper/message-popover-form-wrapper.component.mjs +6 -6
- package/esm2022/message-popover/components/message-view/message-view.component.mjs +8 -10
- package/esm2022/message-popover/directives/message-popover-form-item.directive.mjs +6 -6
- package/esm2022/message-popover/message-popover.component.mjs +7 -9
- package/esm2022/message-popover/platform-message-popover.module.mjs +4 -4
- package/esm2022/object-marker/object-marker.component.mjs +6 -7
- package/esm2022/object-marker/object-marker.module.mjs +4 -4
- package/esm2022/object-status/object-status.component.mjs +8 -8
- package/esm2022/object-status/object-status.module.mjs +4 -4
- package/esm2022/page-footer/page-footer.component.mjs +6 -6
- package/esm2022/page-footer/page-footer.module.mjs +4 -4
- package/esm2022/panel/panel-actions.component.mjs +3 -3
- package/esm2022/panel/panel-content/panel-content.component.mjs +4 -4
- package/esm2022/panel/panel.component.mjs +5 -5
- package/esm2022/panel/panel.config.mjs +4 -4
- package/esm2022/panel/panel.module.mjs +4 -4
- package/esm2022/search-field/search-field-mobile/search-field/search-field-mobile.component.mjs +8 -9
- package/esm2022/search-field/search-field-mobile/search-field-mobile.module.mjs +4 -4
- package/esm2022/search-field/search-field.component.mjs +16 -18
- package/esm2022/search-field/search-field.module.mjs +4 -4
- package/esm2022/settings-generator/controls/theme-selector-list/theme-selector-list.component.mjs +9 -16
- package/esm2022/settings-generator/layouts/base-settings-generator-layout.mjs +3 -3
- package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-icon/settings-generator-sidebar-icon.component.mjs +5 -6
- package/esm2022/settings-generator/layouts/settings-generator-sidebar-layout/settings-generator-sidebar-layout.component.mjs +6 -9
- package/esm2022/settings-generator/settings-generator-content/settings-generator-content.component.mjs +6 -8
- package/esm2022/settings-generator/settings-generator-content/settings-generator-section/settings-generator-section.component.mjs +7 -7
- package/esm2022/settings-generator/settings-generator-layout-accessor.service.mjs +3 -3
- package/esm2022/settings-generator/settings-generator.component.mjs +9 -9
- package/esm2022/settings-generator/settings-generator.module.mjs +4 -4
- package/esm2022/settings-generator/settings-generator.service.mjs +4 -4
- package/esm2022/shared/base.mjs +5 -5
- package/esm2022/shared/form/base.input.mjs +6 -6
- package/esm2022/shared/form/collection-base.input.mjs +6 -6
- package/esm2022/shared/form/inline-layout-collection-base.input.mjs +13 -13
- package/esm2022/shared/pipes/convert-bytes/convert-bytes.pipe.mjs +3 -3
- package/esm2022/shared/pipes/pipe.module.mjs +4 -4
- package/esm2022/shared/platform.config.mjs +3 -3
- package/esm2022/slider/slider.component.mjs +6 -6
- package/esm2022/slider/slider.module.mjs +4 -4
- package/esm2022/smart-filter-bar/components/smart-filter-bar-condition-field/base-smart-filter-bar-condition-field.mjs +4 -4
- package/esm2022/smart-filter-bar/components/smart-filter-bar-condition-field/smart-filter-bar-condition-field.component.mjs +4 -4
- package/esm2022/smart-filter-bar/components/smart-filter-bar-conditions-dialog/smart-filter-bar-conditions-dialog.component.mjs +6 -9
- package/esm2022/smart-filter-bar/components/smart-filter-bar-settings-dialog/smart-filter-bar-settings-dialog.component.mjs +7 -9
- package/esm2022/smart-filter-bar/directives/smart-filter-bar-field-definition.directive.mjs +3 -3
- package/esm2022/smart-filter-bar/directives/smart-filter-bar-subject.directive.mjs +5 -5
- package/esm2022/smart-filter-bar/directives/smart-filter-bar-toolbar-item.directive.mjs +4 -4
- package/esm2022/smart-filter-bar/smart-filter-bar.class.mjs +3 -3
- package/esm2022/smart-filter-bar/smart-filter-bar.component.mjs +8 -10
- package/esm2022/smart-filter-bar/smart-filter-bar.module.mjs +4 -4
- package/esm2022/smart-filter-bar/smart-filter-bar.service.mjs +4 -4
- package/esm2022/split-menu-button/split-menu-button.component.mjs +6 -6
- package/esm2022/split-menu-button/split-menu-button.module.mjs +4 -4
- package/esm2022/table/components/no-data-wrapper/no-data-wrapper.component.mjs +3 -3
- package/esm2022/table/components/reset-button/reset-button.component.mjs +5 -5
- package/esm2022/table/components/table-cell-header-popover/table-cell-header-popover.component.mjs +6 -8
- package/esm2022/table/components/table-column/table-column.component.mjs +6 -6
- package/esm2022/table/components/table-column-resizer/table-column-resizer.component.mjs +6 -6
- package/esm2022/table/components/table-editable-cell/table-editable-cell.component.mjs +5 -15
- package/esm2022/table/components/table-group-row/table-group-row.component.mjs +7 -7
- package/esm2022/table/components/table-header-cell-content/table-header-cell-content.component.mjs +6 -6
- package/esm2022/table/components/table-header-row/table-header-row.component.mjs +11 -13
- package/esm2022/table/components/table-p13-dialog/columns/columns.component.mjs +7 -9
- package/esm2022/table/components/table-p13-dialog/filtering/filter-rule.component.mjs +9 -11
- package/esm2022/table/components/table-p13-dialog/filtering/filtering.component.mjs +6 -9
- package/esm2022/table/components/table-p13-dialog/grouping/grouping.component.mjs +6 -8
- package/esm2022/table/components/table-p13-dialog/sorting/sorting.component.mjs +9 -11
- package/esm2022/table/components/table-p13-dialog/table-p13-columns.component.mjs +3 -3
- package/esm2022/table/components/table-p13-dialog/table-p13-dialog.component.mjs +5 -5
- package/esm2022/table/components/table-p13-dialog/table-p13-filter.component.mjs +3 -3
- package/esm2022/table/components/table-p13-dialog/table-p13-group.component.mjs +3 -3
- package/esm2022/table/components/table-p13-dialog/table-p13-sort.component.mjs +3 -3
- package/esm2022/table/components/table-popping-row/table-popping-row.component.mjs +7 -9
- package/esm2022/table/components/table-row/table-row.component.mjs +8 -12
- package/esm2022/table/components/table-toolbar/table-toolbar-actions.component.mjs +3 -3
- package/esm2022/table/components/table-toolbar/table-toolbar-left-actions.component.mjs +3 -3
- package/esm2022/table/components/table-toolbar/table-toolbar.component.mjs +7 -8
- package/esm2022/table/components/table-view-settings-dialog/filtering/filter-custom.component.mjs +6 -6
- package/esm2022/table/components/table-view-settings-dialog/filtering/filter-multi-select.component.mjs +5 -6
- package/esm2022/table/components/table-view-settings-dialog/filtering/filter-single-select.component.mjs +5 -14
- package/esm2022/table/components/table-view-settings-dialog/filtering/filter-step.component.mjs +5 -8
- package/esm2022/table/components/table-view-settings-dialog/filtering/filters-list-step.component.mjs +5 -7
- package/esm2022/table/components/table-view-settings-dialog/filtering/filters.component.mjs +7 -10
- package/esm2022/table/components/table-view-settings-dialog/grouping/grouping.component.mjs +6 -8
- package/esm2022/table/components/table-view-settings-dialog/sorting/sorting.component.mjs +6 -9
- package/esm2022/table/components/table-view-settings-dialog/table-view-settings-dialog.component.mjs +5 -5
- package/esm2022/table/components/table-view-settings-dialog/table-view-settings-filter.component.mjs +3 -3
- package/esm2022/table/table.component.mjs +9 -14
- package/esm2022/table/table.module.mjs +4 -4
- package/esm2022/table-helpers/directives/platform-table-column-responsive.directive.mjs +6 -6
- package/esm2022/table-helpers/directives/table-cell-header-popover.directive.mjs +4 -4
- package/esm2022/table-helpers/directives/table-cell-resizable.directive.mjs +5 -5
- package/esm2022/table-helpers/directives/table-cell-selectable.directive.mjs +3 -3
- package/esm2022/table-helpers/directives/table-cell.directive.mjs +16 -16
- package/esm2022/table-helpers/directives/table-data-source.directive.mjs +3 -3
- package/esm2022/table-helpers/directives/table-draggable.directive.mjs +3 -3
- package/esm2022/table-helpers/directives/table-header-resizer.directive.mjs +3 -3
- package/esm2022/table-helpers/directives/table-header.directive.mjs +7 -7
- package/esm2022/table-helpers/directives/table-initial-state.directive.mjs +3 -3
- package/esm2022/table-helpers/directives/table-scrollable.directive.mjs +4 -4
- package/esm2022/table-helpers/directives/table-view-settings-filter-custom.directive.mjs +4 -4
- package/esm2022/table-helpers/directives/table-virtual-scroll.directive.mjs +3 -3
- package/esm2022/table-helpers/enums/collection-filter.enum.mjs +16 -1
- package/esm2022/table-helpers/pipes/cell-styles.pipe.mjs +3 -3
- package/esm2022/table-helpers/pipes/column-resizable-side.pipe.mjs +3 -3
- package/esm2022/table-helpers/pipes/column-sorting-direction.pipe.mjs +3 -3
- package/esm2022/table-helpers/pipes/row-classes.pipe.mjs +3 -3
- package/esm2022/table-helpers/pipes/selection-cell-styles.pipe.mjs +3 -3
- package/esm2022/table-helpers/services/table-column-resize.service.mjs +5 -5
- package/esm2022/table-helpers/services/table-responsive.service.mjs +5 -5
- package/esm2022/table-helpers/services/table-row.service.mjs +3 -3
- package/esm2022/table-helpers/services/table-scroll-dispatcher.service.mjs +3 -3
- package/esm2022/table-helpers/services/table.service.mjs +3 -3
- package/esm2022/table-helpers/table-helpers.module.mjs +4 -4
- package/esm2022/value-help-dialog/components/base-tab/vhd-base-tab.component.mjs +5 -5
- package/esm2022/value-help-dialog/components/define-tab/define-tab.component.mjs +6 -10
- package/esm2022/value-help-dialog/components/select-tab/select-tab.component.mjs +13 -15
- package/esm2022/value-help-dialog/components/value-help-dialog-filter/value-help-dialog-filter.component.mjs +3 -3
- package/esm2022/value-help-dialog/directives/condition-count-message.directive.mjs +5 -5
- package/esm2022/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +12 -17
- package/esm2022/value-help-dialog/value-help-dialog.module.mjs +4 -4
- package/esm2022/variant-management/components/manage-variant-item/manage-variant-item.component.mjs +5 -5
- package/esm2022/variant-management/components/manage-variants-dialog/manage-variants-dialog.component.mjs +6 -8
- package/esm2022/variant-management/components/variant-management-wrapper/variant-management-wrapper.component.mjs +3 -3
- package/esm2022/variant-management/directives/variant-management-dirty-label.directive.mjs +4 -4
- package/esm2022/variant-management/variant-management.component.mjs +8 -10
- package/esm2022/variant-management/variant-management.module.mjs +4 -4
- package/esm2022/wizard-generator/base-wizard-generator.mjs +5 -5
- package/esm2022/wizard-generator/components/dialog-wizard-generator/dialog-wizard-generator.component.mjs +7 -8
- package/esm2022/wizard-generator/components/wizard-body/wizard-body.component.mjs +7 -9
- package/esm2022/wizard-generator/components/wizard-generator/wizard-generator.component.mjs +6 -7
- package/esm2022/wizard-generator/components/wizard-generator-step/wizard-generator-step.component.mjs +6 -7
- package/esm2022/wizard-generator/components/wizard-summary-step/wizard-summary-section/wizard-summary-section.component.mjs +5 -6
- package/esm2022/wizard-generator/components/wizard-summary-step/wizard-summary-step.component.mjs +7 -7
- package/esm2022/wizard-generator/directives/wizard-generator-finish-button.directive.mjs +3 -3
- package/esm2022/wizard-generator/directives/wizard-generator-go-next-button.directive.mjs +3 -3
- package/esm2022/wizard-generator/directives/wizard-generator-review-button.directive.mjs +3 -3
- package/esm2022/wizard-generator/directives/wizard-generator-summary-step.directive.mjs +3 -3
- package/esm2022/wizard-generator/wizard-dialog-generator.service.mjs +4 -4
- package/esm2022/wizard-generator/wizard-generator.module.mjs +4 -4
- package/esm2022/wizard-generator/wizard-generator.service.mjs +4 -4
- package/fesm2022/fundamental-ngx-platform-approval-flow.mjs +62 -74
- package/fesm2022/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-button.mjs +8 -8
- package/fesm2022/fundamental-ngx-platform-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs +54 -56
- package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-feed-input.mjs +9 -10
- package/fesm2022/fundamental-ngx-platform-feed-input.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-form.mjs +444 -602
- package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs +59 -87
- package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-info-label.mjs +8 -8
- package/fesm2022/fundamental-ngx-platform-info-label.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-link.mjs +8 -8
- package/fesm2022/fundamental-ngx-platform-link.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-list.mjs +73 -78
- package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-menu-button.mjs +8 -8
- package/fesm2022/fundamental-ngx-platform-menu-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-menu.mjs +20 -20
- package/fesm2022/fundamental-ngx-platform-menu.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-message-popover.mjs +29 -33
- package/fesm2022/fundamental-ngx-platform-message-popover.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-object-marker.mjs +9 -10
- package/fesm2022/fundamental-ngx-platform-object-marker.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-object-status.mjs +12 -12
- package/fesm2022/fundamental-ngx-platform-object-status.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-page-footer.mjs +9 -9
- package/fesm2022/fundamental-ngx-platform-page-footer.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-panel.mjs +19 -19
- package/fesm2022/fundamental-ngx-platform-panel.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-search-field.mjs +29 -32
- package/fesm2022/fundamental-ngx-platform-search-field.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-settings-generator.mjs +45 -56
- package/fesm2022/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-shared.mjs +36 -36
- package/fesm2022/fundamental-ngx-platform-shared.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-slider.mjs +9 -9
- package/fesm2022/fundamental-ngx-platform-slider.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs +48 -53
- package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs +9 -9
- package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-table-helpers.mjs +115 -100
- package/fesm2022/fundamental-ngx-platform-table-helpers.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-table.mjs +168 -218
- package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +41 -52
- package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-variant-management.mjs +28 -31
- package/fesm2022/fundamental-ngx-platform-variant-management.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs +58 -61
- package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform.mjs +19 -42
- package/fesm2022/fundamental-ngx-platform.mjs.map +1 -1
- package/form/combobox/combobox-mobile/combobox/combobox-mobile.component.d.ts +2 -2
- package/form/form-group/form-group.component.d.ts +1 -1
- package/form/index.d.ts +0 -2
- package/form/input-group/input-group.component.d.ts +2 -2
- package/form/multi-combobox/multi-combobox/multi-combobox.component.d.ts +1 -1
- package/form/multi-input/multi-input-mobile/multi-input-mobile.component.d.ts +2 -2
- package/fundamental-ngx-platform-v0.48.0-rc.1.tgz +0 -0
- package/fundamental-ngx.module.d.ts +27 -31
- package/icon-tab-bar/components/icon-tab-bar-base.class.d.ts +0 -2
- package/icon-tab-bar/components/popovers/icon-tab-bar-popover-base.class.d.ts +0 -2
- package/index.d.ts +7 -11
- package/list/list.component.d.ts +1 -1
- package/package.json +4 -28
- package/page-footer/page-footer.component.d.ts +1 -1
- package/schematics/ng-add/index.js +1 -1
- package/settings-generator/settings-generator-content/settings-generator-section/settings-generator-section.component.d.ts +1 -1
- package/settings-generator/settings-generator.component.d.ts +2 -2
- package/table/components/table-p13-dialog/filtering/filter-rule.component.d.ts +2 -0
- package/table/table.component.d.ts +1 -1
- package/table-helpers/enums/collection-filter.enum.d.ts +2 -0
- package/value-help-dialog/components/select-tab/select-tab.component.d.ts +1 -1
- package/value-help-dialog/value-help-dialog/value-help-dialog.component.d.ts +1 -1
- package/wizard-generator/components/wizard-generator-step/wizard-generator-step.component.d.ts +2 -2
- package/wizard-generator/components/wizard-summary-step/wizard-summary-step.component.d.ts +2 -2
- package/action-bar/README.md +0 -25
- package/action-bar/action-bar.component.d.ts +0 -36
- package/action-bar/action-bar.module.d.ts +0 -8
- package/action-bar/index.d.ts +0 -2
- package/action-button-group/README.md +0 -25
- package/action-button-group/action-button-group.component.d.ts +0 -11
- package/action-button-group/action-button-group.module.d.ts +0 -7
- package/action-button-group/index.d.ts +0 -2
- package/esm2022/action-bar/action-bar.component.mjs +0 -64
- package/esm2022/action-bar/action-bar.module.mjs +0 -17
- package/esm2022/action-bar/fundamental-ngx-platform-action-bar.mjs +0 -5
- package/esm2022/action-bar/index.mjs +0 -3
- package/esm2022/action-button-group/action-button-group.component.mjs +0 -21
- package/esm2022/action-button-group/action-button-group.module.mjs +0 -16
- package/esm2022/action-button-group/fundamental-ngx-platform-action-button-group.mjs +0 -5
- package/esm2022/action-button-group/index.mjs +0 -3
- package/esm2022/form/platform-file-uploader/platform-file-uploader.component.mjs +0 -143
- package/esm2022/form/platform-file-uploader/platform-file-uploader.module.mjs +0 -16
- package/esm2022/thumbnail/fundamental-ngx-platform-thumbnail.mjs +0 -5
- package/esm2022/thumbnail/index.mjs +0 -6
- package/esm2022/thumbnail/thumbnail-details/thumbnail-details.component.mjs +0 -166
- package/esm2022/thumbnail/thumbnail-image/thumbnail-image.component.mjs +0 -100
- package/esm2022/thumbnail/thumbnail.component.mjs +0 -148
- package/esm2022/thumbnail/thumbnail.interfaces.mjs +0 -2
- package/esm2022/thumbnail/thumbnail.module.mjs +0 -19
- package/esm2022/upload-collection/dialogs/move-to/move-to.component.mjs +0 -148
- package/esm2022/upload-collection/dialogs/new-folder/new-folder.component.mjs +0 -69
- package/esm2022/upload-collection/directives/upload-collection-dragndrop.directive.mjs +0 -138
- package/esm2022/upload-collection/domain/upload-collection-data-provider.mjs +0 -106
- package/esm2022/upload-collection/domain/upload-collection-data-source.mjs +0 -95
- package/esm2022/upload-collection/fundamental-ngx-platform-upload-collection.mjs +0 -5
- package/esm2022/upload-collection/helpers/generate-message-stripe-data.mjs +0 -20
- package/esm2022/upload-collection/index.mjs +0 -12
- package/esm2022/upload-collection/models/upload-collection.models.mjs +0 -58
- package/esm2022/upload-collection/services/files-validator.service.mjs +0 -68
- package/esm2022/upload-collection/upload-collection/upload-collection-data-provider-test.mjs +0 -280
- package/esm2022/upload-collection/upload-collection/upload-collection.component.mjs +0 -926
- package/esm2022/upload-collection/upload-collection.module.mjs +0 -33
- package/fesm2022/fundamental-ngx-platform-action-bar.mjs +0 -85
- package/fesm2022/fundamental-ngx-platform-action-bar.mjs.map +0 -1
- package/fesm2022/fundamental-ngx-platform-action-button-group.mjs +0 -41
- package/fesm2022/fundamental-ngx-platform-action-button-group.mjs.map +0 -1
- package/fesm2022/fundamental-ngx-platform-thumbnail.mjs +0 -418
- package/fesm2022/fundamental-ngx-platform-thumbnail.mjs.map +0 -1
- package/fesm2022/fundamental-ngx-platform-upload-collection.mjs +0 -1893
- package/fesm2022/fundamental-ngx-platform-upload-collection.mjs.map +0 -1
- package/form/platform-file-uploader/platform-file-uploader.component.d.ts +0 -69
- package/form/platform-file-uploader/platform-file-uploader.module.d.ts +0 -7
- package/fundamental-ngx-platform-v0.47.4.tgz +0 -0
- package/thumbnail/README.md +0 -25
- package/thumbnail/index.d.ts +0 -5
- package/thumbnail/thumbnail-details/thumbnail-details.component.d.ts +0 -57
- package/thumbnail/thumbnail-image/thumbnail-image.component.d.ts +0 -48
- package/thumbnail/thumbnail.component.d.ts +0 -73
- package/thumbnail/thumbnail.interfaces.d.ts +0 -12
- package/thumbnail/thumbnail.module.d.ts +0 -9
- package/upload-collection/README.md +0 -25
- package/upload-collection/dialogs/move-to/move-to.component.d.ts +0 -57
- package/upload-collection/dialogs/new-folder/new-folder.component.d.ts +0 -26
- package/upload-collection/directives/upload-collection-dragndrop.directive.d.ts +0 -64
- package/upload-collection/domain/upload-collection-data-provider.d.ts +0 -46
- package/upload-collection/domain/upload-collection-data-source.d.ts +0 -49
- package/upload-collection/helpers/generate-message-stripe-data.d.ts +0 -3
- package/upload-collection/index.d.ts +0 -11
- package/upload-collection/models/upload-collection.models.d.ts +0 -225
- package/upload-collection/services/files-validator.service.d.ts +0 -18
- package/upload-collection/upload-collection/upload-collection-data-provider-test.d.ts +0 -36
- package/upload-collection/upload-collection/upload-collection.component.d.ts +0 -259
- package/upload-collection/upload-collection.module.d.ts +0 -11
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component, ContentChild, Input, TemplateRef, ViewEncapsulation } from '@angular/core';
|
|
2
|
-
import { FormInputMessageGroupComponent } from '@fundamental-ngx/core/form';
|
|
3
|
-
import { PopoverBodyComponent, PopoverControlComponent, PopoverComponent } from '@fundamental-ngx/core/popover';
|
|
4
2
|
import { NgTemplateOutlet } from '@angular/common';
|
|
3
|
+
import { FormInputMessageGroupComponent } from '@fundamental-ngx/core/form';
|
|
4
|
+
import { PopoverBodyComponent, PopoverComponent, PopoverControlComponent } from '@fundamental-ngx/core/popover';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
/**
|
|
7
7
|
* This extends core implementation to support richer extensibility and instead of relying
|
|
@@ -30,16 +30,16 @@ export class InputMessageGroupWithTemplate extends FormInputMessageGroupComponen
|
|
|
30
30
|
}
|
|
31
31
|
];
|
|
32
32
|
}
|
|
33
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
34
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
33
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: InputMessageGroupWithTemplate, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
34
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.4", type: InputMessageGroupWithTemplate, isStandalone: true, selector: "fdp-input-message-group", inputs: { triggers: "triggers" }, queries: [{ propertyName: "triggerItemTemplate", first: true, predicate: ["triggerItem"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<fd-popover\n #popover\n (isOpenChange)=\"openChanged($event)\"\n additionalBodyClass=\"fd-popover__body--input-message-group\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n [closeOnEscapeKey]=\"closeOnEscapeKey\"\n [fillControlMode]=\"fillControlMode\"\n [isOpen]=\"isOpen\"\n [placement]=\"placement\"\n [triggers]=\"triggers\"\n [disableScrollbar]=\"true\"\n class=\"fd-form-input-message-group fd-popover--input-message-group\"\n>\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"triggerItemTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body>\n <ng-content></ng-content>\n </fd-popover-body>\n</fd-popover>\n", styles: [".fd-popover-container-custom--message{flex-grow:1}.fd-popover-container-custom{border:none}.fd-popover__control{cursor:auto!important}fdp-input-message-group .fd-popover-custom{display:inline}fdp-input-message-group .fd-datetime .fd-popover-custom{display:inline-block}.fd-popover__body.fd-popover__body--input-message-group{margin-top:0!important;z-index:999}\n"], dependencies: [{ kind: "component", type: PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "component", type: PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
35
35
|
}
|
|
36
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
36
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: InputMessageGroupWithTemplate, decorators: [{
|
|
37
37
|
type: Component,
|
|
38
|
-
args: [{ selector: 'fdp-input-message-group', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [PopoverComponent, PopoverControlComponent, NgTemplateOutlet, PopoverBodyComponent], template: "<fd-popover\n #popover\n (isOpenChange)=\"openChanged($event)\"\n additionalBodyClass=\"fd-popover__body--input-message-group\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n [closeOnEscapeKey]=\"closeOnEscapeKey\"\n [fillControlMode]=\"fillControlMode\"\n [isOpen]=\"isOpen\"\n [placement]=\"placement\"\n [triggers]=\"triggers\"\n [disableScrollbar]=\"true\"\n class=\"fd-form-input-message-group fd-popover--input-message-group\"\n>\n <fd-popover-control>\n <ng-
|
|
38
|
+
args: [{ selector: 'fdp-input-message-group', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [PopoverComponent, PopoverControlComponent, NgTemplateOutlet, PopoverBodyComponent], template: "<fd-popover\n #popover\n (isOpenChange)=\"openChanged($event)\"\n additionalBodyClass=\"fd-popover__body--input-message-group\"\n [closeOnOutsideClick]=\"closeOnOutsideClick\"\n [closeOnEscapeKey]=\"closeOnEscapeKey\"\n [fillControlMode]=\"fillControlMode\"\n [isOpen]=\"isOpen\"\n [placement]=\"placement\"\n [triggers]=\"triggers\"\n [disableScrollbar]=\"true\"\n class=\"fd-form-input-message-group fd-popover--input-message-group\"\n>\n <fd-popover-control>\n <ng-template [ngTemplateOutlet]=\"triggerItemTemplate\"></ng-template>\n </fd-popover-control>\n <fd-popover-body>\n <ng-content></ng-content>\n </fd-popover-body>\n</fd-popover>\n", styles: [".fd-popover-container-custom--message{flex-grow:1}.fd-popover-container-custom{border:none}.fd-popover__control{cursor:auto!important}fdp-input-message-group .fd-popover-custom{display:inline}fdp-input-message-group .fd-datetime .fd-popover-custom{display:inline-block}.fd-popover__body.fd-popover__body--input-message-group{margin-top:0!important;z-index:999}\n"] }]
|
|
39
39
|
}], propDecorators: { triggers: [{
|
|
40
40
|
type: Input
|
|
41
41
|
}], triggerItemTemplate: [{
|
|
42
42
|
type: ContentChild,
|
|
43
43
|
args: ['triggerItem', { static: false }]
|
|
44
44
|
}] } });
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtbWVzc2FnZS1ncm91cC13aXRoLXRlbXBsYXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9mb3JtL2lucHV0LW1lc3NhZ2UtZ3JvdXAtd2l0aC10ZW1wbGF0ZS9pbnB1dC1tZXNzYWdlLWdyb3VwLXdpdGgtdGVtcGxhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9wbGF0Zm9ybS9zcmMvbGliL2Zvcm0vaW5wdXQtbWVzc2FnZS1ncm91cC13aXRoLXRlbXBsYXRlL2lucHV0LW1lc3NhZ2UtZ3JvdXAtd2l0aC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ25ELE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVFLE9BQU8sRUFDSCxvQkFBb0IsRUFDcEIsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUUxQixNQUFNLCtCQUErQixDQUFDOztBQUV2Qzs7Ozs7R0FLRztBQVVILGtFQUFrRTtBQUNsRSxNQUFNLE9BQU8sNkJBQThCLFNBQVEsOEJBQThCO0lBVmpGOztRQVdJOzs7V0FHRztRQUVILGFBQVEsR0FBK0I7WUFDbkM7Z0JBQ0ksT0FBTyxFQUFFLFNBQVM7Z0JBQ2xCLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixXQUFXLEVBQUUsS0FBSzthQUNyQjtZQUNEO2dCQUNJLE9BQU8sRUFBRSxVQUFVO2dCQUNuQixVQUFVLEVBQUUsS0FBSztnQkFDakIsV0FBVyxFQUFFLElBQUk7YUFDcEI7U0FDSixDQUFDO0tBTUw7OEdBdkJZLDZCQUE2QjtrR0FBN0IsNkJBQTZCLDRQQzNCMUMsaXNCQW9CQSxvYURJYyxnQkFBZ0Isc0lBQUUsdUJBQXVCLG1GQUFFLGdCQUFnQixvSkFBRSxvQkFBb0I7OzJGQUdsRiw2QkFBNkI7a0JBVnpDLFNBQVM7K0JBQ0kseUJBQXlCLGlCQUdwQixpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUCxDQUFDLGdCQUFnQixFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLG9CQUFvQixDQUFDOzhCQVM1RixRQUFRO3NCQURQLEtBQUs7Z0JBaUJOLG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBJbnB1dCwgVGVtcGxhdGVSZWYsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRm9ybUlucHV0TWVzc2FnZUdyb3VwQ29tcG9uZW50IH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2Zvcm0nO1xuaW1wb3J0IHtcbiAgICBQb3BvdmVyQm9keUNvbXBvbmVudCxcbiAgICBQb3BvdmVyQ29tcG9uZW50LFxuICAgIFBvcG92ZXJDb250cm9sQ29tcG9uZW50LFxuICAgIFRyaWdnZXJDb25maWdcbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3BvcG92ZXInO1xuXG4vKipcbiAqIFRoaXMgZXh0ZW5kcyBjb3JlIGltcGxlbWVudGF0aW9uICB0byBzdXBwb3J0IHJpY2hlciBleHRlbnNpYmlsaXR5IGFuZCBpbnN0ZWFkIG9mIHJlbHlpbmdcbiAqIG9ubHkgb24gbmctY29udGVudCBzZWxlY3RvciB0aGlzIHdpbGwgYWxsb3cgeW91IHRvIHB1dCBhbnkgY29udGVudCBhcyB0cmlnZ2VyLlxuICpcbiAqIExldCdzIHRoaW5rIG9mIHVcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZHAtaW5wdXQtbWVzc2FnZS1ncm91cCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2lucHV0LW1lc3NhZ2UtZ3JvdXAtd2l0aC10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2lucHV0LW1lc3NhZ2UtZ3JvdXAtd2l0aC10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcycsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtQb3BvdmVyQ29tcG9uZW50LCBQb3BvdmVyQ29udHJvbENvbXBvbmVudCwgTmdUZW1wbGF0ZU91dGxldCwgUG9wb3ZlckJvZHlDb21wb25lbnRdXG59KVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9jb21wb25lbnQtY2xhc3Mtc3VmZml4XG5leHBvcnQgY2xhc3MgSW5wdXRNZXNzYWdlR3JvdXBXaXRoVGVtcGxhdGUgZXh0ZW5kcyBGb3JtSW5wdXRNZXNzYWdlR3JvdXBDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqIFRvIGFsbG93IHVzZXIgdG8gZGV0ZXJtaW5lIHdoYXQgZXZlbnQgaGUgd2FudHMgdG8gdHJpZ2dlciB0aGUgbWVzc2FnZXMgdG8gc2hvd1xuICAgICAqIEFjY2VwdHMgYW55IFtIVE1MIERPTSBFdmVudHNdKGh0dHBzOi8vd3d3Lnczc2Nob29scy5jb20vanNyZWYvZG9tX29ial9ldmVudC5hc3ApLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdHJpZ2dlcnM6IChzdHJpbmcgfCBUcmlnZ2VyQ29uZmlnKVtdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICB0cmlnZ2VyOiAnZm9jdXNpbicsXG4gICAgICAgICAgICBvcGVuQWN0aW9uOiB0cnVlLFxuICAgICAgICAgICAgY2xvc2VBY3Rpb246IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHRyaWdnZXI6ICdmb2N1c291dCcsXG4gICAgICAgICAgICBvcGVuQWN0aW9uOiBmYWxzZSxcbiAgICAgICAgICAgIGNsb3NlQWN0aW9uOiB0cnVlXG4gICAgICAgIH1cbiAgICBdO1xuICAgIC8qKlxuICAgICAqIEN1c3RvbSB0cmlnZ2VyIGVsZW1lbnQuXG4gICAgICovXG4gICAgQENvbnRlbnRDaGlsZCgndHJpZ2dlckl0ZW0nLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgICB0cmlnZ2VySXRlbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xufVxuIiwiPGZkLXBvcG92ZXJcbiAgICAjcG9wb3ZlclxuICAgIChpc09wZW5DaGFuZ2UpPVwib3BlbkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgYWRkaXRpb25hbEJvZHlDbGFzcz1cImZkLXBvcG92ZXJfX2JvZHktLWlucHV0LW1lc3NhZ2UtZ3JvdXBcIlxuICAgIFtjbG9zZU9uT3V0c2lkZUNsaWNrXT1cImNsb3NlT25PdXRzaWRlQ2xpY2tcIlxuICAgIFtjbG9zZU9uRXNjYXBlS2V5XT1cImNsb3NlT25Fc2NhcGVLZXlcIlxuICAgIFtmaWxsQ29udHJvbE1vZGVdPVwiZmlsbENvbnRyb2xNb2RlXCJcbiAgICBbaXNPcGVuXT1cImlzT3BlblwiXG4gICAgW3BsYWNlbWVudF09XCJwbGFjZW1lbnRcIlxuICAgIFt0cmlnZ2Vyc109XCJ0cmlnZ2Vyc1wiXG4gICAgW2Rpc2FibGVTY3JvbGxiYXJdPVwidHJ1ZVwiXG4gICAgY2xhc3M9XCJmZC1mb3JtLWlucHV0LW1lc3NhZ2UtZ3JvdXAgZmQtcG9wb3Zlci0taW5wdXQtbWVzc2FnZS1ncm91cFwiXG4+XG4gICAgPGZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRyaWdnZXJJdGVtVGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgIDwvZmQtcG9wb3Zlci1jb250cm9sPlxuICAgIDxmZC1wb3BvdmVyLWJvZHk+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICA8L2ZkLXBvcG92ZXItYm9keT5cbjwvZmQtcG9wb3Zlcj5cbiJdfQ==
|
|
@@ -696,12 +696,12 @@ export class BaseMultiCombobox extends CollectionBaseInput {
|
|
|
696
696
|
}
|
|
697
697
|
});
|
|
698
698
|
}
|
|
699
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
700
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
699
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: BaseMultiCombobox, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.NgControl, optional: true, self: true }, { token: i1.ControlContainer, optional: true, skipSelf: true }, { token: i1.NgForm, optional: true, skipSelf: true }, { token: i2.DialogConfig, optional: true }, { token: i3.MultiComboboxConfig }, { token: FD_FORM_FIELD, host: true, optional: true, skipSelf: true }, { token: FD_FORM_FIELD_CONTROL, host: true, optional: true, skipSelf: true }, { token: MAP_LIMIT }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
700
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.4", type: BaseMultiCombobox, inputs: { selectedItems: "selectedItems", maxHeight: "maxHeight", buttonFocusable: "buttonFocusable", dataSource: "dataSource", autoComplete: "autoComplete", entityClass: "entityClass", mobile: "mobile", mobileConfig: "mobileConfig", group: "group", groupKey: "groupKey", secondaryKey: "secondaryKey", showSecondaryText: "showSecondaryText", secondaryTextAlignment: "secondaryTextAlignment", autoResize: "autoResize", value: "value", fillControlMode: "fillControlMode", addonIconTitle: "addonIconTitle", invalidEntryMessage: "invalidEntryMessage", limitless: "limitless", openDropdownOnAddOnClicked: "openDropdownOnAddOnClicked" }, outputs: { selectionChange: "selectionChange", isOpenChange: "isOpenChange", onDataRequested: "onDataRequested", onDataReceived: "onDataReceived", addOnButtonClicked: "addOnButtonClicked" }, queries: [{ propertyName: "customTemplates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "listComponent", first: true, predicate: ListComponent, descendants: true }, { propertyName: "searchInputElement", first: true, predicate: ["searchInputElement"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0 }); }
|
|
701
701
|
}
|
|
702
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
702
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.4", ngImport: i0, type: BaseMultiCombobox, decorators: [{
|
|
703
703
|
type: Directive
|
|
704
|
-
}], ctorParameters:
|
|
704
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.NgControl, decorators: [{
|
|
705
705
|
type: Optional
|
|
706
706
|
}, {
|
|
707
707
|
type: Self
|
|
@@ -736,7 +736,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
|
|
|
736
736
|
}] }, { type: undefined, decorators: [{
|
|
737
737
|
type: Inject,
|
|
738
738
|
args: [MAP_LIMIT]
|
|
739
|
-
}] }]
|
|
739
|
+
}] }], propDecorators: { selectedItems: [{
|
|
740
740
|
type: Input
|
|
741
741
|
}], maxHeight: [{
|
|
742
742
|
type: Input
|
|
@@ -796,4 +796,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.7", ngImpor
|
|
|
796
796
|
type: ContentChildren,
|
|
797
797
|
args: [TemplateDirective]
|
|
798
798
|
}] } });
|
|
799
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tdWx0aS1jb21ib2JveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9mb3JtL211bHRpLWNvbWJvYm94L2NvbW1vbnMvYmFzZS1tdWx0aS1jb21ib2JveC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsR0FBRyxFQUNILFNBQVMsRUFDVCxPQUFPLEVBQ1AsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBQ0wsR0FBRyxFQUNILFFBQVEsRUFDWCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLElBQUksRUFDSixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxJQUFJLEVBRUosUUFBUSxFQUVSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJFLE9BQU8sS0FBSyxNQUFNLGlCQUFpQixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2pELE9BQU8sRUFHSCxPQUFPLEVBRVAsYUFBYSxFQUNiLGlCQUFpQixFQUNwQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0s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c0JBRFgsS0FBSztnQkFLTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBS04sc0JBQXNCO3NCQURyQixLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFLRixLQUFLO3NCQURSLEtBQUs7Z0JBZU4sZUFBZTtzQkFEZCxLQUFLO2dCQUtOLGNBQWM7c0JBRGIsS0FBSztnQkFLTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBS04sU0FBUztzQkFEUixLQUFLO2dCQUtOLDBCQUEwQjtzQkFEekIsS0FBSztnQkFLTixlQUFlO3NCQURkLE1BQU07Z0JBS1AsWUFBWTtzQkFEWCxNQUFNO2dCQUtHLGVBQWU7c0JBQXhCLE1BQU07Z0JBSUcsY0FBYztzQkFBdkIsTUFBTTtnQkFJUCxrQkFBa0I7c0JBRGpCLE1BQU07Z0JBS1AsYUFBYTtzQkFEWixTQUFTO3VCQUFDLGFBQWE7Z0JBS3hCLGtCQUFrQjtzQkFEakIsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBS3JELGVBQWU7c0JBRGQsZUFBZTt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFMVCxcbiAgICBCQUNLU1BBQ0UsXG4gICAgQ09OVFJPTCxcbiAgICBET1dOX0FSUk9XLFxuICAgIEVOVEVSLFxuICAgIEVTQ0FQRSxcbiAgICBMRUZUX0FSUk9XLFxuICAgIFJJR0hUX0FSUk9XLFxuICAgIFNISUZULFxuICAgIFRBQixcbiAgICBVUF9BUlJPV1xufSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdCxcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0aW9uVG9rZW4sXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNlbGYsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBTa2lwU2VsZixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyLCBOZ0NvbnRyb2wsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb21FdmVudCwgaXNPYnNlcnZhYmxlLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBza2lwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEZvcm1TdGF0ZXMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIENvbnRlbnREZW5zaXR5LFxuICAgIEZvY3VzRXNjYXBlRGlyZWN0aW9uLFxuICAgIEtleVV0aWwsXG4gICAgTnVsbGFibGUsXG4gICAgUmFuZ2VTZWxlY3RvcixcbiAgICBUZW1wbGF0ZURpcmVjdGl2ZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBEaWFsb2dDb25maWcgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IExpc3RDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGlzdCc7XG5pbXBvcnQgeyBNb2JpbGVNb2RlQ29uZmlnIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL21vYmlsZS1tb2RlJztcbmltcG9ydCB7IFBvcG92ZXJGaWxsTW9kZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuaW1wb3J0IHtcbiAgICBBcnJheU11bHRpQ29tYm9Cb3hEYXRhU291cmNlLFxuICAgIGNvZXJjZUFycmF5U2FmZSxcbiAgICBDb2xsZWN0aW9uQmFzZUlucHV0LFxuICAgIGlzRGF0YVNvdXJjZSxcbiAgICBpc0Z1bmN0aW9uLFxuICAgIGlzSnNPYmplY3QsXG4gICAgaXNPcHRpb25JdGVtLFxuICAgIGlzU2VsZWN0YWJsZU9wdGlvbkl0ZW0sXG4gICAgaXNTdHJpbmcsXG4gICAgTWF0Y2hpbmdCeSxcbiAgICBNYXRjaGluZ1N0cmF0ZWd5LFxuICAgIE11bHRpQ29tYm9Cb3hEYXRhU291cmNlLFxuICAgIE9ic2VydmFibGVNdWx0aUNvbWJvQm94RGF0YVNvdXJjZSxcbiAgICBQbGF0Zm9ybUZvcm1GaWVsZCxcbiAgICBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2wsXG4gICAgU2VsZWN0YWJsZU9wdGlvbkl0ZW1cbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuXG5pbXBvcnQgeyBGRF9GT1JNX0ZJRUxELCBGRF9GT1JNX0ZJRUxEX0NPTlRST0wgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQgeyBUZXh0QWxpZ25tZW50IH0gZnJvbSAnLi4vLi4vY29tYm9ib3gnO1xuaW1wb3J0IHsgTXVsdGlDb21ib2JveENvbmZpZyB9IGZyb20gJy4uL211bHRpLWNvbWJvYm94LmNvbmZpZyc7XG5cbmV4cG9ydCBjb25zdCBNQVBfTElNSVQgPSBuZXcgSW5qZWN0aW9uVG9rZW48bnVtYmVyPignTWFwIGxpbWl04omlJywgeyBmYWN0b3J5OiAoKSA9PiAxMiB9KTtcblxuZXhwb3J0IHR5cGUgRmRwTXVsdGlDb21ib2JveERhdGFTb3VyY2U8VD4gPSBNdWx0aUNvbWJvQm94RGF0YVNvdXJjZTxUPiB8IE9ic2VydmFibGU8VFtdPiB8IFRbXTtcblxuZXhwb3J0IGNsYXNzIE11bHRpQ29tYm9ib3hTZWxlY3Rpb25DaGFuZ2VFdmVudCB7XG4gICAgLyoqXG4gICAgICogTXVsdGkgQ29tYm9ib3ggc2VsZWN0aW9uIGNoYW5nZSBldmVudFxuICAgICAqIEBwYXJhbSBzb3VyY2UgTXVsdGkgQ29tYm9ib3ggY29tcG9uZW50XG4gICAgICogQHBhcmFtIHNlbGVjdGVkSXRlbXMgU2VsZWN0ZWQgaXRlbXNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHNvdXJjZTogQmFzZU11bHRpQ29tYm9ib3gsXG4gICAgICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBTZWxlY3RhYmxlT3B0aW9uSXRlbVsndmFsdWUnXSAvLyBDb250YWlucyBzZWxlY3RlZCBpdGVtc1xuICAgICkge31cbn1cblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZU11bHRpQ29tYm9ib3ggZXh0ZW5kcyBDb2xsZWN0aW9uQmFzZUlucHV0IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKiBQcm92aWRlcyBzZWxlY3RlZCBpdGVtcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGVkSXRlbXM6IGFueVtdID0gW107XG5cbiAgICAvKiogUHJvdmlkZXMgbWF4aW11bSBoZWlnaHQgZm9yIHRoZSBvcHRpb25QYW5lbC4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1heEhlaWdodCA9ICcyNTBweCc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIEFkZE9uIEJ1dHRvbiBzaG91bGQgYmUgZm9jdXNhYmxlXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYnV0dG9uRm9jdXNhYmxlID0gZmFsc2U7XG5cbiAgICAvKiogRGF0YXNvdXJjZSBmb3Igc3VnZ2VzdGlvbiBsaXN0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRhdGFTb3VyY2UodmFsdWU6IEZkcE11bHRpQ29tYm9ib3hEYXRhU291cmNlPGFueT4pIHt9XG4gICAgZ2V0IGRhdGFTb3VyY2UoKTogRmRwTXVsdGlDb21ib2JveERhdGFTb3VyY2U8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSBhdXRvY29tcGxldGUgc2hvdWxkIGJlIGVuYWJsZWQ7IEVuYWJsZWQgYnkgZGVmYXVsdC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGF1dG9Db21wbGV0ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUT0RPOiBOYW1lIG9mIHRoZSBlbnRpdHkgZm9yIHdoaWNoIERhdGFQcm92aWRlciB3aWxsIGJlIGxvYWRlZC4gWW91IGNhbiBlaXRoZXIgcGFzcyBsaXN0IG9mXG4gICAgICogaXRlbXMgb3IgdXNlIHRoaXMgZW50aXR5Q2xhc3MgYW5kIGludGVybmFsbHkgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gbG9va3VwIHRvIHNvbWUgcmVnaXN0cnlcbiAgICAgKiBhbmQgcmV0cmlldmUgdGhlIGJlc3QgbWF0Y2hpbmcgRGF0YVByb3ZpZGVyIHRoYXQgaXMgc2V0IG9uIGFwcGxpY2F0aW9uIGxldmVsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBlbnRpdHlDbGFzczogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIG11bHRpLWNvbWJvYm94IHNob3VsZCBiZSBidWlsdCBvbiBtb2JpbGUgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZSA9IGZhbHNlO1xuXG4gICAgLyoqIE11bHRpIENvbWJvYm94IE1vYmlsZSBDb25maWd1cmF0aW9uLCBpdCdzIGFwcGxpZWQgb25seSwgd2hlbiBtb2JpbGUgaXMgZW5hYmxlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZUNvbmZpZzogTW9iaWxlTW9kZUNvbmZpZztcblxuICAgIC8qKiBUZWxscyB0aGUgbXVsdGktY29tYm9ib3ggaWYgd2UgbmVlZCB0byBncm91cCBpdGVtcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGdyb3VwID0gZmFsc2U7XG5cbiAgICAvKiogQSBmaWVsZCBuYW1lIHRvIHVzZSB0byBncm91cCBkYXRhIGJ5IChzdXBwb3J0IGRvdHRlZCBub3RhdGlvbikuICovXG4gICAgQElucHV0KClcbiAgICBncm91cEtleTogc3RyaW5nO1xuXG4gICAgLyoqIFRoZSBmaWVsZCB0byBzaG93IGRhdGEgaW4gc2Vjb25kYXJ5IGNvbHVtbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlY29uZGFyeUtleTogc3RyaW5nO1xuXG4gICAgLyoqIFNob3cgdGhlIHNlY29uZCBjb2x1bW4gKGFwcGxpY2FibGUgZm9yIHR3byBjb2x1bW5zIGxheW91dCkuICovXG4gICAgQElucHV0KClcbiAgICBzaG93U2Vjb25kYXJ5VGV4dCA9IGZhbHNlO1xuXG4gICAgLyoqIEhvcml6b250YWxseSBhbGlnbiB0ZXh0IGluc2lkZSB0aGUgc2Vjb25kIGNvbHVtbiAoYXBwbGljYWJsZSBmb3IgdHdvIGNvbHVtbnMgbGF5b3V0KS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlY29uZGFyeVRleHRBbGlnbm1lbnQ6IFRleHRBbGlnbm1lbnQgPSAncmlnaHQnO1xuXG4gICAgLyoqIFR1cm5zIG9uL29mZiBBZGp1c3RhYmxlIFdpZHRoIGZlYXR1cmUuICovXG4gICAgQElucHV0KClcbiAgICBhdXRvUmVzaXplID0gZmFsc2U7XG5cbiAgICAvKiogVmFsdWUgb2YgdGhlIG11bHRpIGNvbWJvYm94ICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgICBzdXBlci5zZXRWYWx1ZSh2YWx1ZSwgdHJ1ZSk7XG4gICAgfVxuICAgIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcmVzZXQgb3B0aW9ucyBmb3IgdGhlIFNlbGVjdCBib2R5IHdpZHRoLCB3aGF0ZXZlciBpcyBjaG9zZW4sIHRoZSBib2R5IGhhcyBhIDYwMHB4IGxpbWl0LlxuICAgICAqICogYGF0LWxlYXN0YCB3aWxsIGFwcGx5IGEgbWluaW11bSB3aWR0aCB0byB0aGUgYm9keSBlcXVpdmFsZW50IHRvIHRoZSB3aWR0aCBvZiB0aGUgY29udHJvbC4gLSBEZWZhdWx0XG4gICAgICogKiBgZXF1YWxgIHdpbGwgYXBwbHkgYSB3aWR0aCB0byB0aGUgYm9keSBlcXVpdmFsZW50IHRvIHRoZSB3aWR0aCBvZiB0aGUgY29udHJvbC5cbiAgICAgKiAqICdmaXQtY29udGVudCcgd2lsbCBhcHBseSB3aWR0aCBuZWVkZWQgdG8gcHJvcGVybHkgZGlzcGxheSBpdGVtcyBpbnNpZGUsIGluZGVwZW5kZW50IG9mIGNvbnRyb2wuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmaWxsQ29udHJvbE1vZGU6IFBvcG92ZXJGaWxsTW9kZSA9ICdhdC1sZWFzdCc7XG5cbiAgICAvKiogU2V0cyB0aXRsZSBhdHRyaWJ1dGUgdG8gYWRkb24gYnV0dG9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWRkb25JY29uVGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBTZXRzIGludmFsaWQgZW50cnkgbWVzc2FnZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGludmFsaWRFbnRyeU1lc3NhZ2UgPSAnSW52YWxpZCBlbnRyeSc7XG5cbiAgICAvKiogVHVybnMgbGltaXRsZXNzIG1vZGUsIE9OIG9yIE9GRiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbGltaXRsZXNzOiBib29sZWFuO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gb3BlbiB0aGUgZHJvcGRvd24gd2hlbiB0aGUgYWRkb24gYnV0dG9uIGlzIGNsaWNrZWQuICovXG4gICAgQElucHV0KClcbiAgICBvcGVuRHJvcGRvd25PbkFkZE9uQ2xpY2tlZCA9IHRydWU7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGl0ZW0gaXMgc2VsZWN0ZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxNdWx0aUNvbWJvYm94U2VsZWN0aW9uQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiBFbWl0cyBldmVudCB3aGVuIHRoZSBtZW51IGlzIG9wZW5lZC9jbG9zZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgaXNPcGVuQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGEgbG9hZGluZyBpcyBzdGFydGVkLiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIEBPdXRwdXQoKSBvbkRhdGFSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGEgbG9hZGluZyBpcyBmaW5pc2hlZC4gKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICBAT3V0cHV0KCkgb25EYXRhUmVjZWl2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRW1pdHMgZXZlbnQgd2hlbiB0aGUgYWRkb24gYnV0dG9uIGlzIGNsaWNrZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgYWRkT25CdXR0b25DbGlja2VkOiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChMaXN0Q29tcG9uZW50KVxuICAgIGxpc3RDb21wb25lbnQ6IExpc3RDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NlYXJjaElucHV0RWxlbWVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHNlYXJjaElucHV0RWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgICBjdXN0b21UZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxUZW1wbGF0ZURpcmVjdGl2ZT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ3VzdG9tIE9wdGlvbiBpdGVtIFRlbXBsYXRlLlxuICAgICAqL1xuICAgIG9wdGlvbkl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDdXN0b20gR3JvdXAgSGVhZGVyIGl0ZW0gVGVtcGxhdGUuXG4gICAgICovXG4gICAgZ3JvdXBJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ3VzdG9tIFNlY29uZGFyeSBpdGVtIFRlbXBsYXRlLlxuICAgICAqL1xuICAgIHNlY29uZGFyeUl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDdXN0b20gU2VsZWN0ZWQgb3B0aW9uIGl0ZW0gVGVtcGxhdGUuXG4gICAgICovXG4gICAgc2VsZWN0ZWRJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jb250ZW50RGVuc2l0eTogQ29udGVudERlbnNpdHkgPSB0aGlzLm11bHRpQ29tYm9ib3hDb25maWcuY29udGVudERlbnNpdHk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGxpc3RUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBTZXQgdGhlIGlucHV0IHRleHQgb2YgdGhlIGlucHV0LiAqL1xuICAgIHNldCBpbnB1dFRleHQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9pbnB1dFRleHRWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfVxuXG4gICAgLyoqIEdldCB0aGUgaW5wdXQgdGV4dCBvZiB0aGUgaW5wdXQuICovXG4gICAgZ2V0IGlucHV0VGV4dCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRUZXh0VmFsdWUgfHwgJyc7XG4gICAgfVxuXG4gICAgLyoqIElzIGVtcHR5IHNlYXJjaCBmaWVsZC4gKi9cbiAgICBnZXQgaXNFbXB0eVZhbHVlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dFRleHQudHJpbSgpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBpc0dyb3VwKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISEodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwS2V5KTtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0aGUgTXVsdGkgSW5wdXQgaXMgb3BlbmVkLiAqL1xuICAgIGlzT3BlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExpc3Qgb2YgbWF0Y2hlZCBzdWdnZXN0aW9uc1xuICAgICAqL1xuICAgIF9zdWdnZXN0aW9uczogU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBHcm91cGVkIHN1Z2dlc3Rpb25zIG1hcHBlZCB0byBhcnJheS5cbiAgICAgKi9cbiAgICBfZmxhdFN1Z2dlc3Rpb25zOiBTZWxlY3RhYmxlT3B0aW9uSXRlbVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9mdWxsRmxhdFN1Z2dlc3Rpb25zOiBTZWxlY3RhYmxlT3B0aW9uSXRlbVtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTGlzdCBvZiBzZWxlY3RlZCBzdWdnZXN0aW9uc1xuICAgICAqL1xuICAgIF9zZWxlY3RlZFN1Z2dlc3Rpb25zOiBTZWxlY3RhYmxlT3B0aW9uSXRlbVtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1heCB3aWR0aCBvZiBsaXN0IGNvbnRhaW5lclxuICAgICAqL1xuICAgIG1heFdpZHRoOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWluIHdpZHRoIG9mIGxpc3QgY29udGFpbmVyXG4gICAgICovXG4gICAgbWluV2lkdGg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBOZWVkIGZvciBvcGVuaW5nIG1vYmlsZSB2ZXJzaW9uXG4gICAgICovXG4gICAgb3BlbkNoYW5nZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNlbGVjdGVkU2hvd24kID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfZGF0YVNvdXJjZTogRmRwTXVsdGlDb21ib2JveERhdGFTb3VyY2U8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5wdXRUZXh0VmFsdWU6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcHJldmlvdXNJbnB1dFRleHQ6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbWF0Y2hpbmdTdHJhdGVneTogTWF0Y2hpbmdTdHJhdGVneSA9IHRoaXMubXVsdGlDb21ib2JveENvbmZpZy5tYXRjaGluZ1N0cmF0ZWd5O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2VsZW1lbnQ6IEhUTUxFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogS2V5cywgdGhhdCB3b24ndCB0cmlnZ2VyIHRoZSBwb3BvdmVyJ3Mgb3BlbiBzdGF0ZSwgd2hlbiBkaXNwYXRjaGVkIG9uIHNlYXJjaCBpbnB1dC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ub25PcGVuaW5nS2V5czogbnVtYmVyW10gPSBbXG4gICAgICAgIEJBQ0tTUEFDRSxcbiAgICAgICAgRVNDQVBFLFxuICAgICAgICBFTlRFUixcbiAgICAgICAgQ09OVFJPTCxcbiAgICAgICAgVEFCLFxuICAgICAgICBTSElGVCxcbiAgICAgICAgVVBfQVJST1csXG4gICAgICAgIFJJR0hUX0FSUk9XLFxuICAgICAgICBET1dOX0FSUk9XLFxuICAgICAgICBMRUZUX0FSUk9XLFxuICAgICAgICBBTFRcbiAgICBdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90aW1lclN1YiQ6IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcHJldmlvdXNTdGF0ZT86IEZvcm1TdGF0ZXM7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ByZXZpb3VzU3RhdGVNZXNzYWdlOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3JhbmdlU2VsZWN0b3IgPSBuZXcgUmFuZ2VTZWxlY3RvcigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kaXNwbGF5Rm4gPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiB0aGlzLmRpc3BsYXlWYWx1ZSh2YWx1ZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlY29uZGFyeUZuID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4ge1xuICAgICAgICBpZiAoaXNPcHRpb25JdGVtKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnNlY29uZGFyeVRleHQgPz8gJyc7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNKc09iamVjdCh2YWx1ZSkgJiYgdGhpcy5zZWNvbmRhcnlLZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gdGhpcy5vYmplY3RHZXQodmFsdWUsIHRoaXMuc2Vjb25kYXJ5S2V5KTtcblxuICAgICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oY3VycmVudEl0ZW0pID8gY3VycmVudEl0ZW0oKSA6IGN1cnJlbnRJdGVtO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSByZWFkb25seSBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgcmVhZG9ubHkgbmdGb3JtOiBOZ0Zvcm0sXG4gICAgICAgIEBPcHRpb25hbCgpIHJlYWRvbmx5IGRpYWxvZ0NvbmZpZzogRGlhbG9nQ29uZmlnLFxuICAgICAgICBwcm90ZWN0ZWQgbXVsdGlDb21ib2JveENvbmZpZzogTXVsdGlDb21ib2JveENvbmZpZyxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgQEhvc3QoKSBASW5qZWN0KEZEX0ZPUk1fRklFTEQpIGZvcm1GaWVsZDogUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIEBIb3N0KCkgQEluamVjdChGRF9GT1JNX0ZJRUxEX0NPTlRST0wpIGZvcm1Db250cm9sOiBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2wsXG4gICAgICAgIEBJbmplY3QoTUFQX0xJTUlUKSBwcml2YXRlIF9tYXBMaW1pdDogbnVtYmVyXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9jZCwgZWxlbWVudFJlZiwgbmdDb250cm9sLCBjb250cm9sQ29udGFpbmVyLCBuZ0Zvcm0sIGZvcm1GaWVsZCwgZm9ybUNvbnRyb2wpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRhU291cmNlQ2hhbmdlID0gY2hhbmdlc1snZGF0YVNvdXJjZSddO1xuXG4gICAgICAgIGlmIChkYXRhU291cmNlQ2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplRGF0YVNvdXJjZShkYXRhU291cmNlQ2hhbmdlLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5pdFdpbmRvd1Jlc2l6ZSgpO1xuICAgICAgICB0aGlzLl9hc3NpZ25DdXN0b21UZW1wbGF0ZXMoKTtcbiAgICAgICAgdGhpcy5fcHJldmlvdXNJbnB1dFRleHQgPSB0aGlzLmlucHV0VGV4dDtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcblxuICAgICAgICBpZiAoaXNEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgICh0aGlzLmRhdGFTb3VyY2UgYXMgTXVsdGlDb21ib0JveERhdGFTb3VyY2U8YW55PikuY2xvc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9kc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdG8gc2V0IGlucHV0IHRleHQgYXMgaXRlbSBsYWJlbC5cbiAgICAgKi9cbiAgICBhYnN0cmFjdCBzZXRJbnB1dFRleHRGcm9tT3B0aW9uSXRlbShpdGVtOiBTZWxlY3RhYmxlT3B0aW9uSXRlbSk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG9nZ2xlIGl0ZW0gc2VsZWN0aW9uLlxuICAgICAqL1xuICAgIGFic3RyYWN0IHRvZ2dsZVNlbGVjdGlvbihpdGVtOiBTZWxlY3RhYmxlT3B0aW9uSXRlbSk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG9nZ2xlIGl0ZW0gc2VsZWN0aW9uIGJ5IGlucHV0IHRleHQgdmFsdWUuXG4gICAgICovXG4gICAgYWJzdHJhY3QgdG9nZ2xlU2VsZWN0aW9uQnlJbnB1dFRleHQoKTogdm9pZDtcblxuICAgIC8qKiB3cml0ZSB2YWx1ZSBmb3IgQ29udHJvbFZhbHVlQWNjZXNzb3IgKi9cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gY29lcmNlQXJyYXlTYWZlKHZhbHVlKTtcbiAgICAgICAgc3VwZXIud3JpdGVWYWx1ZSh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgICB0aGlzLl9zZXRTZWxlY3RlZFN1Z2dlc3Rpb25zKCk7XG4gICAgICAgIHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcG9wb3Zlck9wZW5DaGFuZ2VIYW5kbGUoaXNPcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gaXNPcGVuO1xuICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLnJlc2V0KCk7XG4gICAgICAgIHRoaXMuX29uT3BlbkNoYW5nZSh0aGlzLmlzT3Blbik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25PcGVuQ2hhbmdlKGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1NZXNzYWdlLl9wb3BvdmVyLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb3JtTWVzc2FnZS5fcG9wb3Zlci5zZXRJZ25vcmVUcmlnZ2Vycyhpc09wZW4pO1xuICAgIH1cblxuICAgIC8qKiBPcGVucyB0aGUgc2VsZWN0IHBvcG92ZXIgYm9keS4gKi9cbiAgICBvcGVuKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlLmVtaXQodGhpcy5pc09wZW4pO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQ2xvc2VzIHRoZSBzZWxlY3QgcG9wb3ZlciBib2R5LiAqL1xuICAgIGNsb3NlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLnJlc2V0KCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTaG93biQubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuX2ZvY3VzVG9TZWFyY2hGaWVsZCgpO1xuXG4gICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlLmVtaXQodGhpcy5pc09wZW4pO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNob3dMaXN0KGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4gIT09IGlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBpc09wZW47XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy5vcGVuQ2hhbmdlLm5leHQoaXNPcGVuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVGVybUNoYW5nZWQoJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZWFyY2hUZXJtQ2hhbmdlZCh0ZXh0OiBzdHJpbmcgPSB0aGlzLmlucHV0VGV4dCk6IHZvaWQge1xuICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIG1hcC5zZXQoJ3F1ZXJ5JywgdGV4dCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmxpbWl0bGVzcykge1xuICAgICAgICAgICAgbWFwLnNldCgnbGltaXQnLCB0aGlzLl9tYXBMaW1pdCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRzLm1hdGNoKG1hcCk7XG5cbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIENsaWNrIG9uIEJ1dHRvblxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvblByaW1hcnlCdXR0b25DbGljayhpc09wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVGVybUNoYW5nZWQoJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3BlbkRyb3Bkb3duT25BZGRPbkNsaWNrZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0xpc3QoIWlzT3Blbik7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0xpc3QoZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgS2V5ZG93biBvbiBJbnB1dFxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbklucHV0S2V5ZG93bkhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dMaXN0KHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5pc09wZW4gJiYgdGhpcy5saXN0Q29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50LnNldEl0ZW1BY3RpdmUoMCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nob29zZU90aGVySXRlbSgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVVBfQVJST1cpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICB0aGlzLl9jaG9vc2VPdGhlckl0ZW0oLTEpO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBFTlRFUikpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlU2VsZWN0aW9uQnlJbnB1dFRleHQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRVNDQVBFKSkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICAgIHRoaXMuc2hvd0xpc3QoZmFsc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKCFLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgWy4uLnRoaXMuX25vbk9wZW5pbmdLZXlzLCBDT05UUk9MXSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0xpc3QodHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCBhY2NlcHRlZEtleXMgPSAhS2V5VXRpbC5pc0tleVR5cGUoZXZlbnQsICdhbHBoYWJldGljYWwnKSAmJiAhS2V5VXRpbC5pc0tleVR5cGUoZXZlbnQsICdudW1lcmljJyk7XG4gICAgICAgICAgICBpZiAoYWNjZXB0ZWRLZXlzKSB7XG4gICAgICAgICAgICAgICAgLy8gU2V0VGltZW91dCBpcyBuZWVkZWQgZm9yIGlucHV0IHRvIHJlY2VpdmUgbmV3IHZhbHVlLlxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0VtcHR5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudD8uc2V0SXRlbUFjdGl2ZSgwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCBwYXNzZWQgdG8gbGlzdCBjb21wb25lbnQgKi9cbiAgICBoYW5kbGVMaXN0Rm9jdXNFc2NhcGUoZGlyZWN0aW9uOiBGb2N1c0VzY2FwZURpcmVjdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAndXAnKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0byBlbWl0IGNoYW5nZSBldmVudFxuICAgICAqL1xuICAgIF9lbWl0Q2hhbmdlRXZlbnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IE11bHRpQ29tYm9ib3hTZWxlY3Rpb25DaGFuZ2VFdmVudCh0aGlzLCB0aGlzLnZhbHVlKTtcblxuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGNoYW5nZSB0aGUgdmFsdWUgb2YgYSBjb250cm9sLlxuICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gYmUgYXBwbGllZFxuICAgICAqIEBwYXJhbSBlbWl0T25DaGFuZ2Ugd2hldGhlciB0byBlbWl0IFwib25DaGFuZ2VcIiBldmVudC5cbiAgICAgKiBTaG91bGQgYmUgXCJmYWxzZVwiLCBpZiB0aGUgY2hhbmdlIGlzIG1hZGUgcHJvZ3JhbW1hdGljYWxseSAoaW50ZXJuYWxseSkgYnkgdGhlIGNvbnRyb2wsIFwidHJ1ZVwiIG90aGVyd2lzZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzZXRWYWx1ZSh2YWx1ZTogYW55LCBlbWl0T25DaGFuZ2UgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IGNvZXJjZUFycmF5U2FmZSh2YWx1ZSk7XG4gICAgICAgIHN1cGVyLnNldFZhbHVlKHRoaXMuc2VsZWN0ZWRJdGVtcywgZW1pdE9uQ2hhbmdlKTtcbiAgICAgICAgdGhpcy5fc2V0U2VsZWN0ZWRTdWdnZXN0aW9ucygpO1xuICAgICAgICB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfc2V0U2VsZWN0ZWRTdWdnZXN0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucyA9IFtdO1xuXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEl0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkSXRlbXNbaV07XG4gICAgICAgICAgICBjb25zdCBmaW5kZXIgPSAoaXRlbTogU2VsZWN0YWJsZU9wdGlvbkl0ZW0pOiBib29sZWFuID0+XG4gICAgICAgICAgICAgICAgaXRlbS5sYWJlbCA9PT0gc2VsZWN0ZWRJdGVtIHx8IGl0ZW0udmFsdWUgPT09IHNlbGVjdGVkSXRlbTtcbiAgICAgICAgICAgIGNvbnN0IGlkRnJvbUZ1bGxGbGF0U3VnZ2VzdGlvbnMgPSB0aGlzLl9mdWxsRmxhdFN1Z2dlc3Rpb25zLmZpbmRJbmRleChmaW5kZXIpO1xuICAgICAgICAgICAgY29uc3QgaWRGcm9tU3VnZ2VzdGlvbnMgPSAodGhpcy5fc3VnZ2VzdGlvbnMgfHwgW10pLmZpbmRJbmRleChmaW5kZXIpO1xuICAgICAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gTWF0aC5tYXgoaWRGcm9tRnVsbEZsYXRTdWdnZXN0aW9ucywgaWRGcm9tU3VnZ2VzdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGlkRnJvbUZ1bGxGbGF0U3VnZ2VzdGlvbnMgIT09IC0xID8gdGhpcy5fZnVsbEZsYXRTdWdnZXN0aW9ucyA6IHRoaXMuX3N1Z2dlc3Rpb25zO1xuICAgICAgICAgICAgaWYgKGlkRnJvbUZ1bGxGbGF0U3VnZ2VzdGlvbnMgPT09IC0xICYmIGlkRnJvbVN1Z2dlc3Rpb25zID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnZlcnRUb09wdGlvbkl0ZW1zKFtzZWxlY3RlZEl0ZW1dKS5mb3JFYWNoKChvcHRpb25JdGVtOiBTZWxlY3RhYmxlT3B0aW9uSXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25JdGVtLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucy5wdXNoKG9wdGlvbkl0ZW0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLl9zdWdnZXN0aW9ucyAmJlxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24gPT09IHRoaXMuX3N1Z2dlc3Rpb25zICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuX2Z1bGxGbGF0U3VnZ2VzdGlvbnMuaW5jbHVkZXMoY29sbGVjdGlvbltpdGVtSW5kZXhdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbEZsYXRTdWdnZXN0aW9ucy5wdXNoKGNvbGxlY3Rpb25baXRlbUluZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbUluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFN1Z2dlc3Rpb25zLnB1c2goY29sbGVjdGlvbltpdGVtSW5kZXhdKTtcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uW2l0ZW1JbmRleF0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIGdldCBkcygpOiBNdWx0aUNvbWJvQm94RGF0YVNvdXJjZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZSBhcyBNdWx0aUNvbWJvQm94RGF0YVNvdXJjZTxhbnk+O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9mb2N1c1RvU2VhcmNoRmllbGQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBwaWNrcyBvdGhlciB2YWx1ZSBtb3ZlZCBmcm9tIGN1cnJlbnQgb25lIGJ5IG9mZnNldCwgY2FsbGVkIG9ubHkgd2hlbiBNdWx0aSBDb21ib2JveCBpcyBjbG9zZWQgKi9cbiAgICBwcml2YXRlIF9jaG9vc2VPdGhlckl0ZW0ob2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnM/Lmxlbmd0aCA9PT0gdGhpcy5fZmxhdFN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFRleHQgPSAnJztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGl2ZVZhbHVlID0gdGhpcy5fZ2V0U2VsZWN0SXRlbUJ5SW5wdXRWYWx1ZSh0aGlzLmlucHV0VGV4dCk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZmxhdFN1Z2dlc3Rpb25zLmZpbmRJbmRleCgodmFsdWUpID0+IHZhbHVlID09PSBhY3RpdmVWYWx1ZSk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gIXRoaXMuaW5wdXRUZXh0ICYmIG9mZnNldCA9PT0gLTEgPyB0aGlzLl9mbGF0U3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSA6IGluZGV4ICsgb2Zmc2V0O1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fZmxhdFN1Z2dlc3Rpb25zW3Bvc2l0aW9uXTtcblxuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dFRleHRGcm9tT3B0aW9uSXRlbShpdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPSB0aGlzLl9zZWxlY3RlZFN1Z2dlc3Rpb25zLmZpbmRJbmRleCgodmFsdWUpID0+IHZhbHVlLmxhYmVsID09PSBpdGVtPy5sYWJlbCk7XG4gICAgICAgIGlmIChzZWxlY3RlZEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5fY2hvb3NlT3RoZXJJdGVtKG9mZnNldCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfZ2V0U2VsZWN0SXRlbUJ5SW5wdXRWYWx1ZShkaXNwbGF5VmFsdWU6IHN0cmluZyk6IFNlbGVjdGFibGVPcHRpb25JdGVtIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZsYXRTdWdnZXN0aW9ucy5maW5kKCh2YWx1ZSkgPT4gdmFsdWUubGFiZWwgPT09IGRpc3BsYXlWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiAgTWFwIGdyb3VwZWQgdmFsdWVzIHRvIGFycmF5LiAqL1xuICAgIHByb3RlY3RlZCBfZmxhdHRlbkdyb3VwcyhpdGVtczogU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXSk6IFNlbGVjdGFibGVPcHRpb25JdGVtW10ge1xuICAgICAgICByZXR1cm4gaXRlbXMucmVkdWNlKChyZXN1bHQsIGl0ZW0pID0+IHJlc3VsdC5jb25jYXQoaXRlbS5jaGlsZHJlbiA/PyBbXSksIDxTZWxlY3RhYmxlT3B0aW9uSXRlbVtdPltdKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxpemVEYXRhU291cmNlKGRzOiBGZHBNdWx0aUNvbWJvYm94RGF0YVNvdXJjZTxhbnk+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1Z2dlc3Rpb25zID0gW107XG4gICAgICAgIHRoaXMuX2ZsYXRTdWdnZXN0aW9ucyA9IFtdO1xuXG4gICAgICAgIGlmIChpc0RhdGFTb3VyY2UodGhpcy5kYXRhU291cmNlKSkge1xuICAgICAgICAgICAgKHRoaXMuZGF0YVNvdXJjZSBhcyBNdWx0aUNvbWJvQm94RGF0YVNvdXJjZTxhbnk+KS5jbG9zZSgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fZHNTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBDb252ZXJ0IHdoYXRldmVyIGNvbWVzIGluIGFzIERhdGFTb3VyY2Ugc28gd2UgY2FuIHdvcmsgd2l0aCBpdCBpZGVudGljYWxseVxuICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gdGhpcy5fb3BlbkRhdGFTdHJlYW0oZHMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb3BlbkRhdGFTdHJlYW0oZHM6IEZkcE11bHRpQ29tYm9ib3hEYXRhU291cmNlPGFueT4pOiBNdWx0aUNvbWJvQm94RGF0YVNvdXJjZTxhbnk+IHtcbiAgICAgICAgY29uc3QgaW5pdERhdGFTb3VyY2UgPSB0aGlzLl90b0RhdGFTdHJlYW0oZHMpO1xuICAgICAgICBsZXQgaXNJbml0RGF0YVNvdXJjZSA9IHRydWU7XG5cbiAgICAgICAgaWYgKGluaXREYXRhU291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgW2RhdGFTb3VyY2VdIHNvdXJjZSBkaWQgbm90IG1hdGNoIGFuIGFycmF5LCBPYnNlcnZhYmxlLCBvciBEYXRhU291cmNlYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpbml0RGF0YVNvdXJjZS5saW1pdGxlc3MgPSB0aGlzLmxpbWl0bGVzcztcblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhpcyBpcyBzaW5nbGUgcG9pbnQgb2YgZGF0YSBlbnRyeSB0byB0aGUgY29tcG9uZW50LiBXZSBkb250IHdhbnQgdG8gc2V0IGRhdGEgb24gZGlmZmVyZW50XG4gICAgICAgICAqIHBsYWNlcy4gSWYgYW55IG5ldyBkYXRhIGNvbWVzIGluIGVpdGhlciB5b3UgZG8gYSBzZWFyY2ggYW5kIHlvdSB3YW50IHRvIHBhc3MgaW5pdGlhbCBkYXRhXG4gICAgICAgICAqIGl0cyBoZXJlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIGNvbnN0IGRzU3ViID0gaW5pdERhdGFTb3VyY2VcbiAgICAgICAgICAgIC5vcGVuKClcbiAgICAgICAgICAgIC5waXBlKHNraXAoMSksIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzaW5nRW1wdHlEYXRhKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZpb3VzSW5wdXRUZXh0ID0gdGhpcy5pbnB1dFRleHQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbnMgPSB0aGlzLl9jb252ZXJ0VG9PcHRpb25JdGVtcyhkYXRhKS5tYXAoKG9wdGlvbkl0ZW06IFNlbGVjdGFibGVPcHRpb25JdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudCA9IHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZEl0ZW06IFNlbGVjdGFibGVPcHRpb25JdGVtKSA9PiBzZWxlY3RlZEl0ZW0uaWQgPT09IG9wdGlvbkl0ZW0uaWRcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uSXRlbS5zZWxlY3RlZCA9IHNlbGVjdGVkRWxlbWVudC5zZWxlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uSXRlbTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZsYXRTdWdnZXN0aW9ucyA9IHRoaXMuaXNHcm91cCA/IHRoaXMuX2ZsYXR0ZW5Hcm91cHModGhpcy5fc3VnZ2VzdGlvbnMpIDogdGhpcy5fc3VnZ2VzdGlvbnM7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNJbml0RGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mdWxsRmxhdFN1Z2dlc3Rpb25zID0gdGhpcy5fZmxhdFN1Z2dlc3Rpb25zO1xuICAgICAgICAgICAgICAgICAgICBpc0luaXREYXRhU291cmNlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRTdWdnZXN0aW9uc0xlbmd0aCA9IHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFN1Z2dlc3Rpb25zTGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGVkU3VnZ2VzdGlvbnNMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRTdWdnZXN0aW9uID0gdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuX3N1Z2dlc3Rpb25zLmZpbmRJbmRleCgoaXRlbSkgPT4gZXF1YWwoaXRlbS52YWx1ZSwgc2VsZWN0ZWRTdWdnZXN0aW9uLnZhbHVlKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbnNbaWR4XS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCdpbml0RGF0YVNvdXJjZS5vcGVuKCkuJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoZHNTdWIpO1xuXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLmFkZChpbml0RGF0YVNvdXJjZS5vbkRhdGFSZXF1ZXN0ZWQoKS5zdWJzY3JpYmUodGhpcy5vbkRhdGFSZXF1ZXN0ZWQpKTtcbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24uYWRkKGluaXREYXRhU291cmNlLm9uRGF0YVJlY2VpdmVkKCkuc3Vic2NyaWJlKHRoaXMub25EYXRhUmVjZWl2ZWQpKTtcblxuICAgICAgICBpbml0RGF0YVNvdXJjZS5kYXRhUHJvdmlkZXIuc2V0TG9va3VwS2V5KHRoaXMubG9va3VwS2V5KTtcbiAgICAgICAgY29uc3QgbWF0Y2hpbmdCeTogTWF0Y2hpbmdCeSA9IHtcbiAgICAgICAgICAgIGZpcnN0Qnk6IHRoaXMuX2Rpc3BsYXlGblxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLnNlY29uZGFyeUtleSkge1xuICAgICAgICAgICAgbWF0Y2hpbmdCeS5zZWNvbmRhcnlCeSA9IHRoaXMuX3NlY29uZGFyeUZuO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5pdERhdGFTb3VyY2UuZGF0YVByb3ZpZGVyLnNldE1hdGNoaW5nQnkobWF0Y2hpbmdCeSk7XG4gICAgICAgIGluaXREYXRhU291cmNlLmRhdGFQcm92aWRlci5zZXRNYXRjaGluZ1N0cmF0ZWd5KHRoaXMuX21hdGNoaW5nU3RyYXRlZ3kpO1xuXG4gICAgICAgIC8vIGluaXRpYWwgZGF0YSBmZXRjaFxuICAgICAgICBjb25zdCBtYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIG1hcC5zZXQoJ3F1ZXJ5JywgJyonKTtcblxuICAgICAgICBpZiAoIXRoaXMubGltaXRsZXNzKSB7XG4gICAgICAgICAgICBtYXAuc2V0KCdsaW1pdCcsIE1BUF9MSU1JVCk7XG4gICAgICAgIH1cblxuICAgICAgICBpbml0RGF0YVNvdXJjZS5tYXRjaChtYXApO1xuXG4gICAgICAgIHJldHVybiBpbml0RGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Byb2Nlc3NpbmdFbXB0eURhdGEoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLmlucHV0VGV4dCA9IHRoaXMuX3ByZXZpb3VzSW5wdXRUZXh0O1xuXG4gICAgICAgIHRoaXMuX3NldEludmFsaWRFbnRyeSgpO1xuXG4gICAgICAgIGlmICh0aGlzLl90aW1lclN1YiQpIHtcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyU3ViJC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdGltZXJTdWIkID0gdGltZXIoMzAwMCkuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3Vuc2V0SW52YWxpZEVudHJ5KCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0SW52YWxpZEVudHJ5KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fcHJldmlvdXNTdGF0ZSB8fCB0aGlzLl9wcmV2aW91c1N0YXRlTWVzc2FnZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcHJldmlvdXNTdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnZXJyb3InO1xuXG4gICAgICAgIHRoaXMuX3ByZXZpb3VzU3RhdGVNZXNzYWdlID0gdGhpcy5zdGF0ZU1lc3NhZ2U7XG4gICAgICAgIHRoaXMuc3RhdGVNZXNzYWdlID0gdGhpcy5pbnZhbGlkRW50cnlNZXNzYWdlO1xuXG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdW5zZXRJbnZhbGlkRW50cnkoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLl9wcmV2aW91c1N0YXRlO1xuICAgICAgICB0aGlzLl9wcmV2aW91c1N0YXRlID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMuc3RhdGVNZXNzYWdlID0gdGhpcy5fcHJldmlvdXNTdGF0ZU1lc3NhZ2U7XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzU3RhdGVNZXNzYWdlID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG9EYXRhU3RyZWFtKHNvdXJjZTogRmRwTXVsdGlDb21ib2JveERhdGFTb3VyY2U8YW55Pik6IE11bHRpQ29tYm9Cb3hEYXRhU291cmNlPGFueT4gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoaXNEYXRhU291cmNlKHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UgYXMgTXVsdGlDb21ib0JveERhdGFTb3VyY2U8YW55PjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlNdWx0aUNvbWJvQm94RGF0YVNvdXJjZTxhbnk+KHNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZU11bHRpQ29tYm9Cb3hEYXRhU291cmNlPGFueT4oc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0V2luZG93UmVzaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9nZXRPcHRpb25zTGlzdFdpZHRoKCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmF1dG9SZXNpemUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2dldE9wdGlvbnNMaXN0V2lkdGgoKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRPcHRpb25zTGlzdFdpZHRoKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgICAgICAgY29uc3QgcmVjdCA9ICh0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2ZkLWlucHV0LWdyb3VwJykgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBzY3JvbGxCYXJXaWR0aCA9IGJvZHkub2Zmc2V0V2lkdGggLSBib2R5LmNsaWVudFdpZHRoO1xuICAgICAgICB0aGlzLm1heFdpZHRoID0gdGhpcy5hdXRvUmVzaXplID8gd2luZG93LmlubmVyV2lkdGggLSBzY3JvbGxCYXJXaWR0aCAtIHJlY3QubGVmdCA6IHRoaXMubWluV2lkdGg7XG4gICAgICAgIHRoaXMubWluV2lkdGggPSByZWN0LndpZHRoIC0gMjtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBvcmlnaW5hbCBkYXRhIHRvIFNlbGVjdGFibGVPcHRpb25JdGVtcyBJbnRlcmZhY2VcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY29udmVydFRvT3B0aW9uSXRlbXMoaXRlbXM6IGFueVtdKTogU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1swXTtcblxuICAgICAgICBjb25zdCBlbGVtZW50VHlwZUlzT3B0aW9uSXRlbSA9IGlzU2VsZWN0YWJsZU9wdGlvbkl0ZW0oaXRlbSk7XG4gICAgICAgIGlmIChlbGVtZW50VHlwZUlzT3B0aW9uSXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zIGFzIFNlbGVjdGFibGVPcHRpb25JdGVtW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGVtZW50VHlwZUlzT2JqZWN0ID0gaXNKc09iamVjdChpdGVtKTtcbiAgICAgICAgaWYgKGVsZW1lbnRUeXBlSXNPYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0T2JqZWN0c1RvT3B0aW9uSXRlbXMoaXRlbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGVJc1N0cmluZyA9IGlzU3RyaW5nKGl0ZW0pO1xuICAgICAgICBpZiAoZWxlbWVudFR5cGVJc1N0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRQcmltaXRpdmVUb09wdGlvbkl0ZW1zKGl0ZW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGRhdGEgdG8gU2VsZWN0YWJsZU9wdGlvbkl0ZW1zIEludGVyZmFjZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jb252ZXJ0T2JqZWN0c1RvT3B0aW9uSXRlbXMoaXRlbXM6IGFueVtdKTogU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXSB7XG4gICAgICAgIGlmICh0aGlzLmlzR3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0T2JqZWN0c1RvR3JvdXBPcHRpb25JdGVtcyhpdGVtcyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93U2Vjb25kYXJ5VGV4dCAmJiB0aGlzLnNlY29uZGFyeUtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRPYmplY3RzVG9TZWNvbmRhcnlPcHRpb25JdGVtcyhpdGVtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydE9iamVjdHNUb0RlZmF1bHRPcHRpb25JdGVtcyhpdGVtcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IG9iamVjdFtdIGRhdGEgdG8gR3JvdXAgT3B0aW9uSXRlbXMgSW50ZXJmYWNlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfY29udmVydE9iamVjdHNUb0dyb3VwT3B0aW9uSXRlbXM8Sz4oaXRlbXM6IEtbXSk6IFNlbGVjdGFibGVPcHRpb25JdGVtW10ge1xuICAgICAgICBjb25zdCBncm91cDogeyBba2V5OiBzdHJpbmddOiBLW10gfSA9IHt9O1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGtleVZhbHVlID0gaXRlbVt0aGlzLmdyb3VwS2V5XTtcbiAgICAgICAgICAgIGlmICgha2V5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFncm91cFtrZXlWYWx1ZV0pIHtcbiAgICAgICAgICAgICAgICBncm91cFtrZXlWYWx1ZV0gPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ3JvdXBba2V5VmFsdWVdLnB1c2goaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZ3JvdXApLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RJdGVtOiBTZWxlY3RhYmxlT3B0aW9uSXRlbSA9IHtcbiAgICAgICAgICAgICAgICBsYWJlbDoga2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICAgIGlzR3JvdXA6IHRydWVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRHcm91cCA9IGdyb3VwW2tleV07XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dTZWNvbmRhcnlUZXh0ICYmIHRoaXMuc2Vjb25kYXJ5S2V5KSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0SXRlbS5jaGlsZHJlbiA9IHRoaXMuX2NvbnZlcnRPYmplY3RzVG9TZWNvbmRhcnlPcHRpb25JdGVtcyhjdXJyZW50R3JvdXApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RJdGVtLmNoaWxkcmVuID0gdGhpcy5fY29udmVydE9iamVjdHNUb0RlZmF1bHRPcHRpb25JdGVtcyhjdXJyZW50R3JvdXApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0SXRlbTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBvYmplY3RbXSBkYXRhIHRvIFNlY29uZGFyeSBTZWxlY3RhYmxlT3B0aW9uSXRlbXMgSW50ZXJmYWNlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2NvbnZlcnRPYmplY3RzVG9TZWNvbmRhcnlPcHRpb25JdGVtczxLPihpdGVtczogS1tdKTogU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdEl0ZW1zOiBTZWxlY3RhYmxlT3B0aW9uSXRlbVtdID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtc1tpXTtcbiAgICAgICAgICAgIHNlbGVjdEl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmRpc3BsYXlWYWx1ZSh2YWx1ZSksXG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMubG9va3VwVmFsdWUodmFsdWUpLFxuICAgICAgICAgICAgICAgIHNlY29uZGFyeVRleHQ6IHRoaXMub2JqZWN0R2V0KHZhbHVlLCB0aGlzLnNlY29uZGFyeUtleSksXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWRJdGVtcz8uaW5jbHVkZXModmFsdWUpIHx8IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZWxlY3RJdGVtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IFByaW1pdGl2ZSBkYXRhKEJvb2xlYW4sIFN0cmluZywgTnVtYmVyKSB0byBTZWxlY3RhYmxlT3B0aW9uSXRlbXMgSW50ZXJmYWNlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2NvbnZlcnRQcmltaXRpdmVUb09wdGlvbkl0ZW1zKGl0ZW1zOiBhbnlbXSk6IFNlbGVjdGFibGVPcHRpb25JdGVtW10ge1xuICAgICAgICBjb25zdCBzZWxlY3RJdGVtczogU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgc2VsZWN0SXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHZhbHVlLFxuICAgICAgICAgICAgICAgIGlkOiB0aGlzLmxvb2t1cFZhbHVlKHZhbHVlKSxcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZEl0ZW1zPy5pbmNsdWRlcyh2YWx1ZSkgfHwgZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdEl0ZW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgb2JqZWN0W10gdG8gU2VsZWN0YWJsZU9wdGlvbkl0ZW1zIEludGVyZmFjZSAoRGVmYXVsdClcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY29udmVydE9iamVjdHNUb0RlZmF1bHRPcHRpb25JdGVtcyhpdGVtczogYW55W10pOiBTZWxlY3RhYmxlT3B0aW9uSXRlbVtdIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0SXRlbXM6IFNlbGVjdGFibGVPcHRpb25JdGVtW10gPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgc2VsZWN0SXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZGlzcGxheVZhbHVlKHZhbHVlKSxcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5sb29rdXBWYWx1ZSh2YWx1ZSksXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWRJdGVtcz8uaW5jbHVkZXModmFsdWUpIHx8IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZWxlY3RJdGVtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQXNzaWduIGN1c3RvbSB0ZW1wbGF0ZXNcbiAgICAgKi9cbiAgICBwcml2YXRlIF9hc3NpZ25DdXN0b21UZW1wbGF0ZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzLmZvckVhY2goKHRlbXBsYXRlKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRlbXBsYXRlLm5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdvcHRpb25JdGVtVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbkl0ZW1UZW1wbGF0ZSA9IHRlbXBsYXRlLnRlbXBsYXRlUmVmO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdncm91cEl0ZW1UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBJdGVtVGVtcGxhdGUgPSB0ZW1wbGF0ZS50ZW1wbGF0ZVJlZjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc2Vjb25kYXJ5SXRlbVRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWNvbmRhcnlJdGVtVGVtcGxhdGUgPSB0ZW1wbGF0ZS50ZW1wbGF0ZVJlZjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc2VsZWN0ZWRJdGVtVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbVRlbXBsYXRlID0gdGVtcGxhdGUudGVtcGxhdGVSZWY7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
|
799
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tdWx0aS1jb21ib2JveC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvcGxhdGZvcm0vc3JjL2xpYi9mb3JtL211bHRpLWNvbWJvYm94L2NvbW1vbnMvYmFzZS1tdWx0aS1jb21ib2JveC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsR0FBRyxFQUNILFNBQVMsRUFDVCxPQUFPLEVBQ1AsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sVUFBVSxFQUNWLFdBQVcsRUFDWCxLQUFLLEVBQ0wsR0FBRyxFQUNILFFBQVEsRUFDWCxNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLElBQUksRUFDSixNQUFNLEVBQ04sY0FBYyxFQUNkLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxJQUFJLEVBRUosUUFBUSxFQUVSLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJFLE9BQU8sS0FBSyxNQUFNLGlCQUFpQixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRyxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2pELE9BQU8sRUFHSCxPQUFPLEVBRVAsYUFBYSxFQUNiLGlCQUFpQixFQUNwQixNQUFNLDRCQUE0QixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0s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c0JBRFgsS0FBSztnQkFLTixpQkFBaUI7c0JBRGhCLEtBQUs7Z0JBS04sc0JBQXNCO3NCQURyQixLQUFLO2dCQUtOLFVBQVU7c0JBRFQsS0FBSztnQkFLRixLQUFLO3NCQURSLEtBQUs7Z0JBZU4sZUFBZTtzQkFEZCxLQUFLO2dCQUtOLGNBQWM7c0JBRGIsS0FBSztnQkFLTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBS04sU0FBUztzQkFEUixLQUFLO2dCQUtOLDBCQUEwQjtzQkFEekIsS0FBSztnQkFLTixlQUFlO3NCQURkLE1BQU07Z0JBS1AsWUFBWTtzQkFEWCxNQUFNO2dCQUtHLGVBQWU7c0JBQXhCLE1BQU07Z0JBSUcsY0FBYztzQkFBdkIsTUFBTTtnQkFJUCxrQkFBa0I7c0JBRGpCLE1BQU07Z0JBS1AsYUFBYTtzQkFEWixTQUFTO3VCQUFDLGFBQWE7Z0JBS3hCLGtCQUFrQjtzQkFEakIsU0FBUzt1QkFBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBS3JELGVBQWU7c0JBRGQsZUFBZTt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFMVCxcbiAgICBCQUNLU1BBQ0UsXG4gICAgQ09OVFJPTCxcbiAgICBET1dOX0FSUk9XLFxuICAgIEVOVEVSLFxuICAgIEVTQ0FQRSxcbiAgICBMRUZUX0FSUk9XLFxuICAgIFJJR0hUX0FSUk9XLFxuICAgIFNISUZULFxuICAgIFRBQixcbiAgICBVUF9BUlJPV1xufSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdCxcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0aW9uVG9rZW4sXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPcHRpb25hbCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNlbGYsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBTa2lwU2VsZixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sQ29udGFpbmVyLCBOZ0NvbnRyb2wsIE5nRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbCc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb21FdmVudCwgaXNPYnNlcnZhYmxlLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBza2lwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEZvcm1TdGF0ZXMgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQge1xuICAgIENvbnRlbnREZW5zaXR5LFxuICAgIEZvY3VzRXNjYXBlRGlyZWN0aW9uLFxuICAgIEtleVV0aWwsXG4gICAgTnVsbGFibGUsXG4gICAgUmFuZ2VTZWxlY3RvcixcbiAgICBUZW1wbGF0ZURpcmVjdGl2ZVxufSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBEaWFsb2dDb25maWcgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvZGlhbG9nJztcbmltcG9ydCB7IExpc3RDb21wb25lbnQgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvbGlzdCc7XG5pbXBvcnQgeyBNb2JpbGVNb2RlQ29uZmlnIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL21vYmlsZS1tb2RlJztcbmltcG9ydCB7IFBvcG92ZXJGaWxsTW9kZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuaW1wb3J0IHtcbiAgICBBcnJheU11bHRpQ29tYm9Cb3hEYXRhU291cmNlLFxuICAgIGNvZXJjZUFycmF5U2FmZSxcbiAgICBDb2xsZWN0aW9uQmFzZUlucHV0LFxuICAgIGlzRGF0YVNvdXJjZSxcbiAgICBpc0Z1bmN0aW9uLFxuICAgIGlzSnNPYmplY3QsXG4gICAgaXNPcHRpb25JdGVtLFxuICAgIGlzU2VsZWN0YWJsZU9wdGlvbkl0ZW0sXG4gICAgaXNTdHJpbmcsXG4gICAgTWF0Y2hpbmdCeSxcbiAgICBNYXRjaGluZ1N0cmF0ZWd5LFxuICAgIE11bHRpQ29tYm9Cb3hEYXRhU291cmNlLFxuICAgIE9ic2VydmFibGVNdWx0aUNvbWJvQm94RGF0YVNvdXJjZSxcbiAgICBQbGF0Zm9ybUZvcm1GaWVsZCxcbiAgICBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2wsXG4gICAgU2VsZWN0YWJsZU9wdGlvbkl0ZW1cbn0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9wbGF0Zm9ybS9zaGFyZWQnO1xuXG5pbXBvcnQgeyBGRF9GT1JNX0ZJRUxELCBGRF9GT1JNX0ZJRUxEX0NPTlRST0wgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay9mb3Jtcyc7XG5pbXBvcnQgeyBUZXh0QWxpZ25tZW50IH0gZnJvbSAnLi4vLi4vY29tYm9ib3gnO1xuaW1wb3J0IHsgTXVsdGlDb21ib2JveENvbmZpZyB9IGZyb20gJy4uL211bHRpLWNvbWJvYm94LmNvbmZpZyc7XG5cbmV4cG9ydCBjb25zdCBNQVBfTElNSVQgPSBuZXcgSW5qZWN0aW9uVG9rZW48bnVtYmVyPignTWFwIGxpbWl04omlJywgeyBmYWN0b3J5OiAoKSA9PiAxMiB9KTtcblxuZXhwb3J0IHR5cGUgRmRwTXVsdGlDb21ib2JveERhdGFTb3VyY2U8VD4gPSBNdWx0aUNvbWJvQm94RGF0YVNvdXJjZTxUPiB8IE9ic2VydmFibGU8VFtdPiB8IFRbXTtcblxuZXhwb3J0IGNsYXNzIE11bHRpQ29tYm9ib3hTZWxlY3Rpb25DaGFuZ2VFdmVudCB7XG4gICAgLyoqXG4gICAgICogTXVsdGkgQ29tYm9ib3ggc2VsZWN0aW9uIGNoYW5nZSBldmVudFxuICAgICAqIEBwYXJhbSBzb3VyY2UgTXVsdGkgQ29tYm9ib3ggY29tcG9uZW50XG4gICAgICogQHBhcmFtIHNlbGVjdGVkSXRlbXMgU2VsZWN0ZWQgaXRlbXNcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHNvdXJjZTogQmFzZU11bHRpQ29tYm9ib3gsXG4gICAgICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW1zOiBTZWxlY3RhYmxlT3B0aW9uSXRlbVsndmFsdWUnXSAvLyBDb250YWlucyBzZWxlY3RlZCBpdGVtc1xuICAgICkge31cbn1cblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZU11bHRpQ29tYm9ib3ggZXh0ZW5kcyBDb2xsZWN0aW9uQmFzZUlucHV0IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKiBQcm92aWRlcyBzZWxlY3RlZCBpdGVtcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGVkSXRlbXM6IGFueVtdID0gW107XG5cbiAgICAvKiogUHJvdmlkZXMgbWF4aW11bSBoZWlnaHQgZm9yIHRoZSBvcHRpb25QYW5lbC4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1heEhlaWdodCA9ICcyNTBweCc7XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIEFkZE9uIEJ1dHRvbiBzaG91bGQgYmUgZm9jdXNhYmxlXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYnV0dG9uRm9jdXNhYmxlID0gZmFsc2U7XG5cbiAgICAvKiogRGF0YXNvdXJjZSBmb3Igc3VnZ2VzdGlvbiBsaXN0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGRhdGFTb3VyY2UodmFsdWU6IEZkcE11bHRpQ29tYm9ib3hEYXRhU291cmNlPGFueT4pIHt9XG4gICAgZ2V0IGRhdGFTb3VyY2UoKTogRmRwTXVsdGlDb21ib2JveERhdGFTb3VyY2U8YW55PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSBhdXRvY29tcGxldGUgc2hvdWxkIGJlIGVuYWJsZWQ7IEVuYWJsZWQgYnkgZGVmYXVsdC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGF1dG9Db21wbGV0ZSA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUT0RPOiBOYW1lIG9mIHRoZSBlbnRpdHkgZm9yIHdoaWNoIERhdGFQcm92aWRlciB3aWxsIGJlIGxvYWRlZC4gWW91IGNhbiBlaXRoZXIgcGFzcyBsaXN0IG9mXG4gICAgICogaXRlbXMgb3IgdXNlIHRoaXMgZW50aXR5Q2xhc3MgYW5kIGludGVybmFsbHkgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gbG9va3VwIHRvIHNvbWUgcmVnaXN0cnlcbiAgICAgKiBhbmQgcmV0cmlldmUgdGhlIGJlc3QgbWF0Y2hpbmcgRGF0YVByb3ZpZGVyIHRoYXQgaXMgc2V0IG9uIGFwcGxpY2F0aW9uIGxldmVsXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBlbnRpdHlDbGFzczogc3RyaW5nO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIG11bHRpLWNvbWJvYm94IHNob3VsZCBiZSBidWlsdCBvbiBtb2JpbGUgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZSA9IGZhbHNlO1xuXG4gICAgLyoqIE11bHRpIENvbWJvYm94IE1vYmlsZSBDb25maWd1cmF0aW9uLCBpdCdzIGFwcGxpZWQgb25seSwgd2hlbiBtb2JpbGUgaXMgZW5hYmxlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZUNvbmZpZzogTW9iaWxlTW9kZUNvbmZpZztcblxuICAgIC8qKiBUZWxscyB0aGUgbXVsdGktY29tYm9ib3ggaWYgd2UgbmVlZCB0byBncm91cCBpdGVtcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIGdyb3VwID0gZmFsc2U7XG5cbiAgICAvKiogQSBmaWVsZCBuYW1lIHRvIHVzZSB0byBncm91cCBkYXRhIGJ5IChzdXBwb3J0IGRvdHRlZCBub3RhdGlvbikuICovXG4gICAgQElucHV0KClcbiAgICBncm91cEtleTogc3RyaW5nO1xuXG4gICAgLyoqIFRoZSBmaWVsZCB0byBzaG93IGRhdGEgaW4gc2Vjb25kYXJ5IGNvbHVtbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlY29uZGFyeUtleTogc3RyaW5nO1xuXG4gICAgLyoqIFNob3cgdGhlIHNlY29uZCBjb2x1bW4gKGFwcGxpY2FibGUgZm9yIHR3byBjb2x1bW5zIGxheW91dCkuICovXG4gICAgQElucHV0KClcbiAgICBzaG93U2Vjb25kYXJ5VGV4dCA9IGZhbHNlO1xuXG4gICAgLyoqIEhvcml6b250YWxseSBhbGlnbiB0ZXh0IGluc2lkZSB0aGUgc2Vjb25kIGNvbHVtbiAoYXBwbGljYWJsZSBmb3IgdHdvIGNvbHVtbnMgbGF5b3V0KS4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNlY29uZGFyeVRleHRBbGlnbm1lbnQ6IFRleHRBbGlnbm1lbnQgPSAncmlnaHQnO1xuXG4gICAgLyoqIFR1cm5zIG9uL29mZiBBZGp1c3RhYmxlIFdpZHRoIGZlYXR1cmUuICovXG4gICAgQElucHV0KClcbiAgICBhdXRvUmVzaXplID0gZmFsc2U7XG5cbiAgICAvKiogVmFsdWUgb2YgdGhlIG11bHRpIGNvbWJvYm94ICovXG4gICAgQElucHV0KClcbiAgICBzZXQgdmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgICBzdXBlci5zZXRWYWx1ZSh2YWx1ZSwgdHJ1ZSk7XG4gICAgfVxuICAgIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0VmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcmVzZXQgb3B0aW9ucyBmb3IgdGhlIFNlbGVjdCBib2R5IHdpZHRoLCB3aGF0ZXZlciBpcyBjaG9zZW4sIHRoZSBib2R5IGhhcyBhIDYwMHB4IGxpbWl0LlxuICAgICAqICogYGF0LWxlYXN0YCB3aWxsIGFwcGx5IGEgbWluaW11bSB3aWR0aCB0byB0aGUgYm9keSBlcXVpdmFsZW50IHRvIHRoZSB3aWR0aCBvZiB0aGUgY29udHJvbC4gLSBEZWZhdWx0XG4gICAgICogKiBgZXF1YWxgIHdpbGwgYXBwbHkgYSB3aWR0aCB0byB0aGUgYm9keSBlcXVpdmFsZW50IHRvIHRoZSB3aWR0aCBvZiB0aGUgY29udHJvbC5cbiAgICAgKiAqICdmaXQtY29udGVudCcgd2lsbCBhcHBseSB3aWR0aCBuZWVkZWQgdG8gcHJvcGVybHkgZGlzcGxheSBpdGVtcyBpbnNpZGUsIGluZGVwZW5kZW50IG9mIGNvbnRyb2wuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBmaWxsQ29udHJvbE1vZGU6IFBvcG92ZXJGaWxsTW9kZSA9ICdhdC1sZWFzdCc7XG5cbiAgICAvKiogU2V0cyB0aXRsZSBhdHRyaWJ1dGUgdG8gYWRkb24gYnV0dG9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYWRkb25JY29uVGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBTZXRzIGludmFsaWQgZW50cnkgbWVzc2FnZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGludmFsaWRFbnRyeU1lc3NhZ2UgPSAnSW52YWxpZCBlbnRyeSc7XG5cbiAgICAvKiogVHVybnMgbGltaXRsZXNzIG1vZGUsIE9OIG9yIE9GRiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbGltaXRsZXNzOiBib29sZWFuO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gb3BlbiB0aGUgZHJvcGRvd24gd2hlbiB0aGUgYWRkb24gYnV0dG9uIGlzIGNsaWNrZWQuICovXG4gICAgQElucHV0KClcbiAgICBvcGVuRHJvcGRvd25PbkFkZE9uQ2xpY2tlZCA9IHRydWU7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGl0ZW0gaXMgc2VsZWN0ZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxNdWx0aUNvbWJvYm94U2VsZWN0aW9uQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiBFbWl0cyBldmVudCB3aGVuIHRoZSBtZW51IGlzIG9wZW5lZC9jbG9zZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgaXNPcGVuQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGEgbG9hZGluZyBpcyBzdGFydGVkLiAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8tb3V0cHV0LW9uLXByZWZpeFxuICAgIEBPdXRwdXQoKSBvbkRhdGFSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRXZlbnQgZW1pdHRlZCB3aGVuIGRhdGEgbG9hZGluZyBpcyBmaW5pc2hlZC4gKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L25vLW91dHB1dC1vbi1wcmVmaXhcbiAgICBAT3V0cHV0KCkgb25EYXRhUmVjZWl2ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRW1pdHMgZXZlbnQgd2hlbiB0aGUgYWRkb24gYnV0dG9uIGlzIGNsaWNrZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgYWRkT25CdXR0b25DbGlja2VkOiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxFdmVudD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChMaXN0Q29tcG9uZW50KVxuICAgIGxpc3RDb21wb25lbnQ6IExpc3RDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ3NlYXJjaElucHV0RWxlbWVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxuICAgIHNlYXJjaElucHV0RWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgICBjdXN0b21UZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxUZW1wbGF0ZURpcmVjdGl2ZT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ3VzdG9tIE9wdGlvbiBpdGVtIFRlbXBsYXRlLlxuICAgICAqL1xuICAgIG9wdGlvbkl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDdXN0b20gR3JvdXAgSGVhZGVyIGl0ZW0gVGVtcGxhdGUuXG4gICAgICovXG4gICAgZ3JvdXBJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQ3VzdG9tIFNlY29uZGFyeSBpdGVtIFRlbXBsYXRlLlxuICAgICAqL1xuICAgIHNlY29uZGFyeUl0ZW1UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDdXN0b20gU2VsZWN0ZWQgb3B0aW9uIGl0ZW0gVGVtcGxhdGUuXG4gICAgICovXG4gICAgc2VsZWN0ZWRJdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jb250ZW50RGVuc2l0eTogQ29udGVudERlbnNpdHkgPSB0aGlzLm11bHRpQ29tYm9ib3hDb25maWcuY29udGVudERlbnNpdHk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGxpc3RUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBTZXQgdGhlIGlucHV0IHRleHQgb2YgdGhlIGlucHV0LiAqL1xuICAgIHNldCBpbnB1dFRleHQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9pbnB1dFRleHRWYWx1ZSA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgfVxuXG4gICAgLyoqIEdldCB0aGUgaW5wdXQgdGV4dCBvZiB0aGUgaW5wdXQuICovXG4gICAgZ2V0IGlucHV0VGV4dCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5wdXRUZXh0VmFsdWUgfHwgJyc7XG4gICAgfVxuXG4gICAgLyoqIElzIGVtcHR5IHNlYXJjaCBmaWVsZC4gKi9cbiAgICBnZXQgaXNFbXB0eVZhbHVlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pbnB1dFRleHQudHJpbSgpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGdldCBpc0dyb3VwKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISEodGhpcy5ncm91cCAmJiB0aGlzLmdyb3VwS2V5KTtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0aGUgTXVsdGkgSW5wdXQgaXMgb3BlbmVkLiAqL1xuICAgIGlzT3BlbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIExpc3Qgb2YgbWF0Y2hlZCBzdWdnZXN0aW9uc1xuICAgICAqL1xuICAgIF9zdWdnZXN0aW9uczogU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXTtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBHcm91cGVkIHN1Z2dlc3Rpb25zIG1hcHBlZCB0byBhcnJheS5cbiAgICAgKi9cbiAgICBfZmxhdFN1Z2dlc3Rpb25zOiBTZWxlY3RhYmxlT3B0aW9uSXRlbVtdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9mdWxsRmxhdFN1Z2dlc3Rpb25zOiBTZWxlY3RhYmxlT3B0aW9uSXRlbVtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTGlzdCBvZiBzZWxlY3RlZCBzdWdnZXN0aW9uc1xuICAgICAqL1xuICAgIF9zZWxlY3RlZFN1Z2dlc3Rpb25zOiBTZWxlY3RhYmxlT3B0aW9uSXRlbVtdO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1heCB3aWR0aCBvZiBsaXN0IGNvbnRhaW5lclxuICAgICAqL1xuICAgIG1heFdpZHRoOiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogTWluIHdpZHRoIG9mIGxpc3QgY29udGFpbmVyXG4gICAgICovXG4gICAgbWluV2lkdGg6IG51bWJlcjtcblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBOZWVkIGZvciBvcGVuaW5nIG1vYmlsZSB2ZXJzaW9uXG4gICAgICovXG4gICAgb3BlbkNoYW5nZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNlbGVjdGVkU2hvd24kID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfZGF0YVNvdXJjZTogRmRwTXVsdGlDb21ib2JveERhdGFTb3VyY2U8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaW5wdXRUZXh0VmFsdWU6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcHJldmlvdXNJbnB1dFRleHQ6IHN0cmluZztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbWF0Y2hpbmdTdHJhdGVneTogTWF0Y2hpbmdTdHJhdGVneSA9IHRoaXMubXVsdGlDb21ib2JveENvbmZpZy5tYXRjaGluZ1N0cmF0ZWd5O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2VsZW1lbnQ6IEhUTUxFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogS2V5cywgdGhhdCB3b24ndCB0cmlnZ2VyIHRoZSBwb3BvdmVyJ3Mgb3BlbiBzdGF0ZSwgd2hlbiBkaXNwYXRjaGVkIG9uIHNlYXJjaCBpbnB1dC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9ub25PcGVuaW5nS2V5czogbnVtYmVyW10gPSBbXG4gICAgICAgIEJBQ0tTUEFDRSxcbiAgICAgICAgRVNDQVBFLFxuICAgICAgICBFTlRFUixcbiAgICAgICAgQ09OVFJPTCxcbiAgICAgICAgVEFCLFxuICAgICAgICBTSElGVCxcbiAgICAgICAgVVBfQVJST1csXG4gICAgICAgIFJJR0hUX0FSUk9XLFxuICAgICAgICBET1dOX0FSUk9XLFxuICAgICAgICBMRUZUX0FSUk9XLFxuICAgICAgICBBTFRcbiAgICBdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90aW1lclN1YiQ6IFN1YnNjcmlwdGlvbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcHJldmlvdXNTdGF0ZT86IEZvcm1TdGF0ZXM7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3ByZXZpb3VzU3RhdGVNZXNzYWdlOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3JhbmdlU2VsZWN0b3IgPSBuZXcgUmFuZ2VTZWxlY3RvcigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kaXNwbGF5Rm4gPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiB0aGlzLmRpc3BsYXlWYWx1ZSh2YWx1ZSk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlY29uZGFyeUZuID0gKHZhbHVlOiBhbnkpOiBzdHJpbmcgPT4ge1xuICAgICAgICBpZiAoaXNPcHRpb25JdGVtKHZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnNlY29uZGFyeVRleHQgPz8gJyc7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNKc09iamVjdCh2YWx1ZSkgJiYgdGhpcy5zZWNvbmRhcnlLZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gdGhpcy5vYmplY3RHZXQodmFsdWUsIHRoaXMuc2Vjb25kYXJ5S2V5KTtcblxuICAgICAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oY3VycmVudEl0ZW0pID8gY3VycmVudEl0ZW0oKSA6IGN1cnJlbnRJdGVtO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNlbGYoKSByZWFkb25seSBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lcixcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgcmVhZG9ubHkgbmdGb3JtOiBOZ0Zvcm0sXG4gICAgICAgIEBPcHRpb25hbCgpIHJlYWRvbmx5IGRpYWxvZ0NvbmZpZzogRGlhbG9nQ29uZmlnLFxuICAgICAgICBwcm90ZWN0ZWQgbXVsdGlDb21ib2JveENvbmZpZzogTXVsdGlDb21ib2JveENvbmZpZyxcbiAgICAgICAgQE9wdGlvbmFsKCkgQFNraXBTZWxmKCkgQEhvc3QoKSBASW5qZWN0KEZEX0ZPUk1fRklFTEQpIGZvcm1GaWVsZDogUGxhdGZvcm1Gb3JtRmllbGQsXG4gICAgICAgIEBPcHRpb25hbCgpIEBTa2lwU2VsZigpIEBIb3N0KCkgQEluamVjdChGRF9GT1JNX0ZJRUxEX0NPTlRST0wpIGZvcm1Db250cm9sOiBQbGF0Zm9ybUZvcm1GaWVsZENvbnRyb2wsXG4gICAgICAgIEBJbmplY3QoTUFQX0xJTUlUKSBwcml2YXRlIF9tYXBMaW1pdDogbnVtYmVyXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9jZCwgZWxlbWVudFJlZiwgbmdDb250cm9sLCBjb250cm9sQ29udGFpbmVyLCBuZ0Zvcm0sIGZvcm1GaWVsZCwgZm9ybUNvbnRyb2wpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBjb25zdCBkYXRhU291cmNlQ2hhbmdlID0gY2hhbmdlc1snZGF0YVNvdXJjZSddO1xuXG4gICAgICAgIGlmIChkYXRhU291cmNlQ2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbml0aWFsaXplRGF0YVNvdXJjZShkYXRhU291cmNlQ2hhbmdlLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5pdFdpbmRvd1Jlc2l6ZSgpO1xuICAgICAgICB0aGlzLl9hc3NpZ25DdXN0b21UZW1wbGF0ZXMoKTtcbiAgICAgICAgdGhpcy5fcHJldmlvdXNJbnB1dFRleHQgPSB0aGlzLmlucHV0VGV4dDtcbiAgICAgICAgc3VwZXIubmdBZnRlclZpZXdJbml0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcblxuICAgICAgICBpZiAoaXNEYXRhU291cmNlKHRoaXMuZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgICh0aGlzLmRhdGFTb3VyY2UgYXMgTXVsdGlDb21ib0JveERhdGFTb3VyY2U8YW55PikuY2xvc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9kc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdG8gc2V0IGlucHV0IHRleHQgYXMgaXRlbSBsYWJlbC5cbiAgICAgKi9cbiAgICBhYnN0cmFjdCBzZXRJbnB1dFRleHRGcm9tT3B0aW9uSXRlbShpdGVtOiBTZWxlY3RhYmxlT3B0aW9uSXRlbSk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG9nZ2xlIGl0ZW0gc2VsZWN0aW9uLlxuICAgICAqL1xuICAgIGFic3RyYWN0IHRvZ2dsZVNlbGVjdGlvbihpdGVtOiBTZWxlY3RhYmxlT3B0aW9uSXRlbSk6IHZvaWQ7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVG9nZ2xlIGl0ZW0gc2VsZWN0aW9uIGJ5IGlucHV0IHRleHQgdmFsdWUuXG4gICAgICovXG4gICAgYWJzdHJhY3QgdG9nZ2xlU2VsZWN0aW9uQnlJbnB1dFRleHQoKTogdm9pZDtcblxuICAgIC8qKiB3cml0ZSB2YWx1ZSBmb3IgQ29udHJvbFZhbHVlQWNjZXNzb3IgKi9cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gY29lcmNlQXJyYXlTYWZlKHZhbHVlKTtcbiAgICAgICAgc3VwZXIud3JpdGVWYWx1ZSh0aGlzLnNlbGVjdGVkSXRlbXMpO1xuICAgICAgICB0aGlzLl9zZXRTZWxlY3RlZFN1Z2dlc3Rpb25zKCk7XG4gICAgICAgIHRoaXMuX2VtaXRDaGFuZ2VFdmVudCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcG9wb3Zlck9wZW5DaGFuZ2VIYW5kbGUoaXNPcGVuOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gaXNPcGVuO1xuICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLnJlc2V0KCk7XG4gICAgICAgIHRoaXMuX29uT3BlbkNoYW5nZSh0aGlzLmlzT3Blbik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25PcGVuQ2hhbmdlKGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1NZXNzYWdlLl9wb3BvdmVyLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb3JtTWVzc2FnZS5fcG9wb3Zlci5zZXRJZ25vcmVUcmlnZ2Vycyhpc09wZW4pO1xuICAgIH1cblxuICAgIC8qKiBPcGVucyB0aGUgc2VsZWN0IHBvcG92ZXIgYm9keS4gKi9cbiAgICBvcGVuKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlLmVtaXQodGhpcy5pc09wZW4pO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQ2xvc2VzIHRoZSBzZWxlY3QgcG9wb3ZlciBib2R5LiAqL1xuICAgIGNsb3NlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yYW5nZVNlbGVjdG9yLnJlc2V0KCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTaG93biQubmV4dChmYWxzZSk7XG4gICAgICAgIHRoaXMuaW5wdXRUZXh0ID0gJyc7XG4gICAgICAgIHRoaXMuX2ZvY3VzVG9TZWFyY2hGaWVsZCgpO1xuXG4gICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlLmVtaXQodGhpcy5pc09wZW4pO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNob3dMaXN0KGlzT3BlbjogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4gIT09IGlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5pc09wZW4gPSBpc09wZW47XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgICAgICAgICAgdGhpcy5vcGVuQ2hhbmdlLm5leHQoaXNPcGVuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVGVybUNoYW5nZWQoJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBzZWFyY2hUZXJtQ2hhbmdlZCh0ZXh0OiBzdHJpbmcgPSB0aGlzLmlucHV0VGV4dCk6IHZvaWQge1xuICAgICAgICBpZiAodGV4dCkge1xuICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIG1hcC5zZXQoJ3F1ZXJ5JywgdGV4dCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmxpbWl0bGVzcykge1xuICAgICAgICAgICAgbWFwLnNldCgnbGltaXQnLCB0aGlzLl9tYXBMaW1pdCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmRzLm1hdGNoKG1hcCk7XG5cbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlIENsaWNrIG9uIEJ1dHRvblxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvblByaW1hcnlCdXR0b25DbGljayhpc09wZW46IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoVGVybUNoYW5nZWQoJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMub3BlbkRyb3Bkb3duT25BZGRPbkNsaWNrZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0xpc3QoIWlzT3Blbik7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0xpc3QoZmFsc2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGUgS2V5ZG93biBvbiBJbnB1dFxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBvbklucHV0S2V5ZG93bkhhbmRsZXIoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dMaXN0KHRydWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5pc09wZW4gJiYgdGhpcy5saXN0Q29tcG9uZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5saXN0Q29tcG9uZW50LnNldEl0ZW1BY3RpdmUoMCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nob29zZU90aGVySXRlbSgxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgVVBfQVJST1cpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICB0aGlzLl9jaG9vc2VPdGhlckl0ZW0oLTEpO1xuICAgICAgICB9IGVsc2UgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBFTlRFUikpIHtcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlU2VsZWN0aW9uQnlJbnB1dFRleHQoKTtcbiAgICAgICAgfSBlbHNlIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRVNDQVBFKSkge1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgICAgIHRoaXMuc2hvd0xpc3QoZmFsc2UpO1xuICAgICAgICB9IGVsc2UgaWYgKCFLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgWy4uLnRoaXMuX25vbk9wZW5pbmdLZXlzLCBDT05UUk9MXSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0xpc3QodHJ1ZSk7XG4gICAgICAgICAgICBjb25zdCBhY2NlcHRlZEtleXMgPSAhS2V5VXRpbC5pc0tleVR5cGUoZXZlbnQsICdhbHBoYWJldGljYWwnKSAmJiAhS2V5VXRpbC5pc0tleVR5cGUoZXZlbnQsICdudW1lcmljJyk7XG4gICAgICAgICAgICBpZiAoYWNjZXB0ZWRLZXlzKSB7XG4gICAgICAgICAgICAgICAgLy8gU2V0VGltZW91dCBpcyBuZWVkZWQgZm9yIGlucHV0IHRvIHJlY2VpdmUgbmV3IHZhbHVlLlxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0VtcHR5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdENvbXBvbmVudD8uc2V0SXRlbUFjdGl2ZSgwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCBwYXNzZWQgdG8gbGlzdCBjb21wb25lbnQgKi9cbiAgICBoYW5kbGVMaXN0Rm9jdXNFc2NhcGUoZGlyZWN0aW9uOiBGb2N1c0VzY2FwZURpcmVjdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAndXAnKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0RWxlbWVudD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIE1ldGhvZCB0byBlbWl0IGNoYW5nZSBldmVudFxuICAgICAqL1xuICAgIF9lbWl0Q2hhbmdlRXZlbnQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IE11bHRpQ29tYm9ib3hTZWxlY3Rpb25DaGFuZ2VFdmVudCh0aGlzLCB0aGlzLnZhbHVlKTtcblxuICAgICAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVc2VkIHRvIGNoYW5nZSB0aGUgdmFsdWUgb2YgYSBjb250cm9sLlxuICAgICAqIEBwYXJhbSB2YWx1ZSB0aGUgdmFsdWUgdG8gYmUgYXBwbGllZFxuICAgICAqIEBwYXJhbSBlbWl0T25DaGFuZ2Ugd2hldGhlciB0byBlbWl0IFwib25DaGFuZ2VcIiBldmVudC5cbiAgICAgKiBTaG91bGQgYmUgXCJmYWxzZVwiLCBpZiB0aGUgY2hhbmdlIGlzIG1hZGUgcHJvZ3JhbW1hdGljYWxseSAoaW50ZXJuYWxseSkgYnkgdGhlIGNvbnRyb2wsIFwidHJ1ZVwiIG90aGVyd2lzZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBzZXRWYWx1ZSh2YWx1ZTogYW55LCBlbWl0T25DaGFuZ2UgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IGNvZXJjZUFycmF5U2FmZSh2YWx1ZSk7XG4gICAgICAgIHN1cGVyLnNldFZhbHVlKHRoaXMuc2VsZWN0ZWRJdGVtcywgZW1pdE9uQ2hhbmdlKTtcbiAgICAgICAgdGhpcy5fc2V0U2VsZWN0ZWRTdWdnZXN0aW9ucygpO1xuICAgICAgICB0aGlzLl9lbWl0Q2hhbmdlRXZlbnQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfc2V0U2VsZWN0ZWRTdWdnZXN0aW9ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucyA9IFtdO1xuXG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEl0ZW1zPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW0gPSB0aGlzLnNlbGVjdGVkSXRlbXNbaV07XG4gICAgICAgICAgICBjb25zdCBmaW5kZXIgPSAoaXRlbTogU2VsZWN0YWJsZU9wdGlvbkl0ZW0pOiBib29sZWFuID0+XG4gICAgICAgICAgICAgICAgaXRlbS5sYWJlbCA9PT0gc2VsZWN0ZWRJdGVtIHx8IGl0ZW0udmFsdWUgPT09IHNlbGVjdGVkSXRlbTtcbiAgICAgICAgICAgIGNvbnN0IGlkRnJvbUZ1bGxGbGF0U3VnZ2VzdGlvbnMgPSB0aGlzLl9mdWxsRmxhdFN1Z2dlc3Rpb25zLmZpbmRJbmRleChmaW5kZXIpO1xuICAgICAgICAgICAgY29uc3QgaWRGcm9tU3VnZ2VzdGlvbnMgPSAodGhpcy5fc3VnZ2VzdGlvbnMgfHwgW10pLmZpbmRJbmRleChmaW5kZXIpO1xuICAgICAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gTWF0aC5tYXgoaWRGcm9tRnVsbEZsYXRTdWdnZXN0aW9ucywgaWRGcm9tU3VnZ2VzdGlvbnMpO1xuICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IGlkRnJvbUZ1bGxGbGF0U3VnZ2VzdGlvbnMgIT09IC0xID8gdGhpcy5fZnVsbEZsYXRTdWdnZXN0aW9ucyA6IHRoaXMuX3N1Z2dlc3Rpb25zO1xuICAgICAgICAgICAgaWYgKGlkRnJvbUZ1bGxGbGF0U3VnZ2VzdGlvbnMgPT09IC0xICYmIGlkRnJvbVN1Z2dlc3Rpb25zID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnZlcnRUb09wdGlvbkl0ZW1zKFtzZWxlY3RlZEl0ZW1dKS5mb3JFYWNoKChvcHRpb25JdGVtOiBTZWxlY3RhYmxlT3B0aW9uSXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25JdGVtLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9ucy5wdXNoKG9wdGlvbkl0ZW0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLl9zdWdnZXN0aW9ucyAmJlxuICAgICAgICAgICAgICAgIGNvbGxlY3Rpb24gPT09IHRoaXMuX3N1Z2dlc3Rpb25zICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuX2Z1bGxGbGF0U3VnZ2VzdGlvbnMuaW5jbHVkZXMoY29sbGVjdGlvbltpdGVtSW5kZXhdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbEZsYXRTdWdnZXN0aW9ucy5wdXNoKGNvbGxlY3Rpb25baXRlbUluZGV4XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbUluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZFN1Z2dlc3Rpb25zLnB1c2goY29sbGVjdGlvbltpdGVtSW5kZXhdKTtcbiAgICAgICAgICAgICAgICBjb2xsZWN0aW9uW2l0ZW1JbmRleF0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIGdldCBkcygpOiBNdWx0aUNvbWJvQm94RGF0YVNvdXJjZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZSBhcyBNdWx0aUNvbWJvQm94RGF0YVNvdXJjZTxhbnk+O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJvdGVjdGVkIF9mb2N1c1RvU2VhcmNoRmllbGQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiBNZXRob2QgdGhhdCBwaWNrcyBvdGhlciB2YWx1ZSBtb3ZlZCBmcm9tIGN1cnJlbnQgb25lIGJ5IG9mZnNldCwgY2FsbGVkIG9ubHkgd2hlbiBNdWx0aSBDb21ib2JveCBpcyBjbG9zZWQgKi9cbiAgICBwcml2YXRlIF9jaG9vc2VPdGhlckl0ZW0ob2Zmc2V0OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnM/Lmxlbmd0aCA9PT0gdGhpcy5fZmxhdFN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFRleHQgPSAnJztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGl2ZVZhbHVlID0gdGhpcy5fZ2V0U2VsZWN0SXRlbUJ5SW5wdXRWYWx1ZSh0aGlzLmlucHV0VGV4dCk7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZmxhdFN1Z2dlc3Rpb25zLmZpbmRJbmRleCgodmFsdWUpID0+IHZhbHVlID09PSBhY3RpdmVWYWx1ZSk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gIXRoaXMuaW5wdXRUZXh0ICYmIG9mZnNldCA9PT0gLTEgPyB0aGlzLl9mbGF0U3VnZ2VzdGlvbnMubGVuZ3RoIC0gMSA6IGluZGV4ICsgb2Zmc2V0O1xuICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fZmxhdFN1Z2dlc3Rpb25zW3Bvc2l0aW9uXTtcblxuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dFRleHRGcm9tT3B0aW9uSXRlbShpdGVtKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSW5kZXggPSB0aGlzLl9zZWxlY3RlZFN1Z2dlc3Rpb25zLmZpbmRJbmRleCgodmFsdWUpID0+IHZhbHVlLmxhYmVsID09PSBpdGVtPy5sYWJlbCk7XG4gICAgICAgIGlmIChzZWxlY3RlZEluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgdGhpcy5fY2hvb3NlT3RoZXJJdGVtKG9mZnNldCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByb3RlY3RlZCBfZ2V0U2VsZWN0SXRlbUJ5SW5wdXRWYWx1ZShkaXNwbGF5VmFsdWU6IHN0cmluZyk6IFNlbGVjdGFibGVPcHRpb25JdGVtIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZsYXRTdWdnZXN0aW9ucy5maW5kKCh2YWx1ZSkgPT4gdmFsdWUubGFiZWwgPT09IGRpc3BsYXlWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW5cbiAgICAgKiAgTWFwIGdyb3VwZWQgdmFsdWVzIHRvIGFycmF5LiAqL1xuICAgIHByb3RlY3RlZCBfZmxhdHRlbkdyb3VwcyhpdGVtczogU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXSk6IFNlbGVjdGFibGVPcHRpb25JdGVtW10ge1xuICAgICAgICByZXR1cm4gaXRlbXMucmVkdWNlKChyZXN1bHQsIGl0ZW0pID0+IHJlc3VsdC5jb25jYXQoaXRlbS5jaGlsZHJlbiA/PyBbXSksIDxTZWxlY3RhYmxlT3B0aW9uSXRlbVtdPltdKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2luaXRpYWxpemVEYXRhU291cmNlKGRzOiBGZHBNdWx0aUNvbWJvYm94RGF0YVNvdXJjZTxhbnk+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1Z2dlc3Rpb25zID0gW107XG4gICAgICAgIHRoaXMuX2ZsYXRTdWdnZXN0aW9ucyA9IFtdO1xuXG4gICAgICAgIGlmIChpc0RhdGFTb3VyY2UodGhpcy5kYXRhU291cmNlKSkge1xuICAgICAgICAgICAgKHRoaXMuZGF0YVNvdXJjZSBhcyBNdWx0aUNvbWJvQm94RGF0YVNvdXJjZTxhbnk+KS5jbG9zZSgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fZHNTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBDb252ZXJ0IHdoYXRldmVyIGNvbWVzIGluIGFzIERhdGFTb3VyY2Ugc28gd2UgY2FuIHdvcmsgd2l0aCBpdCBpZGVudGljYWxseVxuICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gdGhpcy5fb3BlbkRhdGFTdHJlYW0oZHMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb3BlbkRhdGFTdHJlYW0oZHM6IEZkcE11bHRpQ29tYm9ib3hEYXRhU291cmNlPGFueT4pOiBNdWx0aUNvbWJvQm94RGF0YVNvdXJjZTxhbnk+IHtcbiAgICAgICAgY29uc3QgaW5pdERhdGFTb3VyY2UgPSB0aGlzLl90b0RhdGFTdHJlYW0oZHMpO1xuICAgICAgICBsZXQgaXNJbml0RGF0YVNvdXJjZSA9IHRydWU7XG5cbiAgICAgICAgaWYgKGluaXREYXRhU291cmNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgW2RhdGFTb3VyY2VdIHNvdXJjZSBkaWQgbm90IG1hdGNoIGFuIGFycmF5LCBPYnNlcnZhYmxlLCBvciBEYXRhU291cmNlYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpbml0RGF0YVNvdXJjZS5saW1pdGxlc3MgPSB0aGlzLmxpbWl0bGVzcztcblxuICAgICAgICAvKipcbiAgICAgICAgICogVGhpcyBpcyBzaW5nbGUgcG9pbnQgb2YgZGF0YSBlbnRyeSB0byB0aGUgY29tcG9uZW50LiBXZSBkb250IHdhbnQgdG8gc2V0IGRhdGEgb24gZGlmZmVyZW50XG4gICAgICAgICAqIHBsYWNlcy4gSWYgYW55IG5ldyBkYXRhIGNvbWVzIGluIGVpdGhlciB5b3UgZG8gYSBzZWFyY2ggYW5kIHlvdSB3YW50IHRvIHBhc3MgaW5pdGlhbCBkYXRhXG4gICAgICAgICAqIGl0cyBoZXJlLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIGNvbnN0IGRzU3ViID0gaW5pdERhdGFTb3VyY2VcbiAgICAgICAgICAgIC5vcGVuKClcbiAgICAgICAgICAgIC5waXBlKHNraXAoMSksIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95ZWQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9wcm9jZXNzaW5nRW1wdHlEYXRhKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3ByZXZpb3VzSW5wdXRUZXh0ID0gdGhpcy5pbnB1dFRleHQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbnMgPSB0aGlzLl9jb252ZXJ0VG9PcHRpb25JdGVtcyhkYXRhKS5tYXAoKG9wdGlvbkl0ZW06IFNlbGVjdGFibGVPcHRpb25JdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudCA9IHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RlZEl0ZW06IFNlbGVjdGFibGVPcHRpb25JdGVtKSA9PiBzZWxlY3RlZEl0ZW0uaWQgPT09IG9wdGlvbkl0ZW0uaWRcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uSXRlbS5zZWxlY3RlZCA9IHNlbGVjdGVkRWxlbWVudC5zZWxlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9uSXRlbTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2ZsYXRTdWdnZXN0aW9ucyA9IHRoaXMuaXNHcm91cCA/IHRoaXMuX2ZsYXR0ZW5Hcm91cHModGhpcy5fc3VnZ2VzdGlvbnMpIDogdGhpcy5fc3VnZ2VzdGlvbnM7XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNJbml0RGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9mdWxsRmxhdFN1Z2dlc3Rpb25zID0gdGhpcy5fZmxhdFN1Z2dlc3Rpb25zO1xuICAgICAgICAgICAgICAgICAgICBpc0luaXREYXRhU291cmNlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRTdWdnZXN0aW9uc0xlbmd0aCA9IHRoaXMuX3NlbGVjdGVkU3VnZ2VzdGlvbnMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3RlZFN1Z2dlc3Rpb25zTGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGVkU3VnZ2VzdGlvbnNMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRTdWdnZXN0aW9uID0gdGhpcy5fc2VsZWN0ZWRTdWdnZXN0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuX3N1Z2dlc3Rpb25zLmZpbmRJbmRleCgoaXRlbSkgPT4gZXF1YWwoaXRlbS52YWx1ZSwgc2VsZWN0ZWRTdWdnZXN0aW9uLnZhbHVlKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3VnZ2VzdGlvbnNbaWR4XS5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCdpbml0RGF0YVNvdXJjZS5vcGVuKCkuJyk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9kc1N1YnNjcmlwdGlvbi5hZGQoZHNTdWIpO1xuXG4gICAgICAgIHRoaXMuX2RzU3Vic2NyaXB0aW9uLmFkZChpbml0RGF0YVNvdXJjZS5vbkRhdGFSZXF1ZXN0ZWQoKS5zdWJzY3JpYmUodGhpcy5vbkRhdGFSZXF1ZXN0ZWQpKTtcbiAgICAgICAgdGhpcy5fZHNTdWJzY3JpcHRpb24uYWRkKGluaXREYXRhU291cmNlLm9uRGF0YVJlY2VpdmVkKCkuc3Vic2NyaWJlKHRoaXMub25EYXRhUmVjZWl2ZWQpKTtcblxuICAgICAgICBpbml0RGF0YVNvdXJjZS5kYXRhUHJvdmlkZXIuc2V0TG9va3VwS2V5KHRoaXMubG9va3VwS2V5KTtcbiAgICAgICAgY29uc3QgbWF0Y2hpbmdCeTogTWF0Y2hpbmdCeSA9IHtcbiAgICAgICAgICAgIGZpcnN0Qnk6IHRoaXMuX2Rpc3BsYXlGblxuICAgICAgICB9O1xuXG4gICAgICAgIGlmICh0aGlzLnNlY29uZGFyeUtleSkge1xuICAgICAgICAgICAgbWF0Y2hpbmdCeS5zZWNvbmRhcnlCeSA9IHRoaXMuX3NlY29uZGFyeUZuO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5pdERhdGFTb3VyY2UuZGF0YVByb3ZpZGVyLnNldE1hdGNoaW5nQnkobWF0Y2hpbmdCeSk7XG4gICAgICAgIGluaXREYXRhU291cmNlLmRhdGFQcm92aWRlci5zZXRNYXRjaGluZ1N0cmF0ZWd5KHRoaXMuX21hdGNoaW5nU3RyYXRlZ3kpO1xuXG4gICAgICAgIC8vIGluaXRpYWwgZGF0YSBmZXRjaFxuICAgICAgICBjb25zdCBtYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIG1hcC5zZXQoJ3F1ZXJ5JywgJyonKTtcblxuICAgICAgICBpZiAoIXRoaXMubGltaXRsZXNzKSB7XG4gICAgICAgICAgICBtYXAuc2V0KCdsaW1pdCcsIE1BUF9MSU1JVCk7XG4gICAgICAgIH1cblxuICAgICAgICBpbml0RGF0YVNvdXJjZS5tYXRjaChtYXApO1xuXG4gICAgICAgIHJldHVybiBpbml0RGF0YVNvdXJjZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Byb2Nlc3NpbmdFbXB0eURhdGEoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLmlucHV0VGV4dCA9IHRoaXMuX3ByZXZpb3VzSW5wdXRUZXh0O1xuXG4gICAgICAgIHRoaXMuX3NldEludmFsaWRFbnRyeSgpO1xuXG4gICAgICAgIGlmICh0aGlzLl90aW1lclN1YiQpIHtcbiAgICAgICAgICAgIHRoaXMuX3RpbWVyU3ViJC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdGltZXJTdWIkID0gdGltZXIoMzAwMCkuc3Vic2NyaWJlKCgpID0+IHRoaXMuX3Vuc2V0SW52YWxpZEVudHJ5KCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0SW52YWxpZEVudHJ5KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fcHJldmlvdXNTdGF0ZSB8fCB0aGlzLl9wcmV2aW91c1N0YXRlTWVzc2FnZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcHJldmlvdXNTdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAnZXJyb3InO1xuXG4gICAgICAgIHRoaXMuX3ByZXZpb3VzU3RhdGVNZXNzYWdlID0gdGhpcy5zdGF0ZU1lc3NhZ2U7XG4gICAgICAgIHRoaXMuc3RhdGVNZXNzYWdlID0gdGhpcy5pbnZhbGlkRW50cnlNZXNzYWdlO1xuXG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdW5zZXRJbnZhbGlkRW50cnkoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLl9wcmV2aW91c1N0YXRlO1xuICAgICAgICB0aGlzLl9wcmV2aW91c1N0YXRlID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMuc3RhdGVNZXNzYWdlID0gdGhpcy5fcHJldmlvdXNTdGF0ZU1lc3NhZ2U7XG4gICAgICAgIHRoaXMuX3ByZXZpb3VzU3RhdGVNZXNzYWdlID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdG9EYXRhU3RyZWFtKHNvdXJjZTogRmRwTXVsdGlDb21ib2JveERhdGFTb3VyY2U8YW55Pik6IE11bHRpQ29tYm9Cb3hEYXRhU291cmNlPGFueT4gfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoaXNEYXRhU291cmNlKHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UgYXMgTXVsdGlDb21ib0JveERhdGFTb3VyY2U8YW55PjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQXJyYXlNdWx0aUNvbWJvQm94RGF0YVNvdXJjZTxhbnk+KHNvdXJjZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHNvdXJjZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZU11bHRpQ29tYm9Cb3hEYXRhU291cmNlPGFueT4oc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pbml0V2luZG93UmVzaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9nZXRPcHRpb25zTGlzdFdpZHRoKCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmF1dG9SZXNpemUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3llZCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2dldE9wdGlvbnNMaXN0V2lkdGgoKSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRPcHRpb25zTGlzdFdpZHRoKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuYm9keTtcbiAgICAgICAgY29uc3QgcmVjdCA9ICh0aGlzLl9lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2ZkLWlucHV0LWdyb3VwJykgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBzY3JvbGxCYXJXaWR0aCA9IGJvZHkub2Zmc2V0V2lkdGggLSBib2R5LmNsaWVudFdpZHRoO1xuICAgICAgICB0aGlzLm1heFdpZHRoID0gdGhpcy5hdXRvUmVzaXplID8gd2luZG93LmlubmVyV2lkdGggLSBzY3JvbGxCYXJXaWR0aCAtIHJlY3QubGVmdCA6IHRoaXMubWluV2lkdGg7XG4gICAgICAgIHRoaXMubWluV2lkdGggPSByZWN0LndpZHRoIC0gMjtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBvcmlnaW5hbCBkYXRhIHRvIFNlbGVjdGFibGVPcHRpb25JdGVtcyBJbnRlcmZhY2VcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY29udmVydFRvT3B0aW9uSXRlbXMoaXRlbXM6IGFueVtdKTogU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1swXTtcblxuICAgICAgICBjb25zdCBlbGVtZW50VHlwZUlzT3B0aW9uSXRlbSA9IGlzU2VsZWN0YWJsZU9wdGlvbkl0ZW0oaXRlbSk7XG4gICAgICAgIGlmIChlbGVtZW50VHlwZUlzT3B0aW9uSXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zIGFzIFNlbGVjdGFibGVPcHRpb25JdGVtW107XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGVtZW50VHlwZUlzT2JqZWN0ID0gaXNKc09iamVjdChpdGVtKTtcbiAgICAgICAgaWYgKGVsZW1lbnRUeXBlSXNPYmplY3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0T2JqZWN0c1RvT3B0aW9uSXRlbXMoaXRlbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZWxlbWVudFR5cGVJc1N0cmluZyA9IGlzU3RyaW5nKGl0ZW0pO1xuICAgICAgICBpZiAoZWxlbWVudFR5cGVJc1N0cmluZykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRQcmltaXRpdmVUb09wdGlvbkl0ZW1zKGl0ZW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGRhdGEgdG8gU2VsZWN0YWJsZU9wdGlvbkl0ZW1zIEludGVyZmFjZVxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBwcml2YXRlIF9jb252ZXJ0T2JqZWN0c1RvT3B0aW9uSXRlbXMoaXRlbXM6IGFueVtdKTogU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXSB7XG4gICAgICAgIGlmICh0aGlzLmlzR3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb252ZXJ0T2JqZWN0c1RvR3JvdXBPcHRpb25JdGVtcyhpdGVtcyk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5zaG93U2Vjb25kYXJ5VGV4dCAmJiB0aGlzLnNlY29uZGFyeUtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NvbnZlcnRPYmplY3RzVG9TZWNvbmRhcnlPcHRpb25JdGVtcyhpdGVtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29udmVydE9iamVjdHNUb0RlZmF1bHRPcHRpb25JdGVtcyhpdGVtcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IG9iamVjdFtdIGRhdGEgdG8gR3JvdXAgT3B0aW9uSXRlbXMgSW50ZXJmYWNlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByb3RlY3RlZCBfY29udmVydE9iamVjdHNUb0dyb3VwT3B0aW9uSXRlbXM8Sz4oaXRlbXM6IEtbXSk6IFNlbGVjdGFibGVPcHRpb25JdGVtW10ge1xuICAgICAgICBjb25zdCBncm91cDogeyBba2V5OiBzdHJpbmddOiBLW10gfSA9IHt9O1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSBpdGVtc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IGtleVZhbHVlID0gaXRlbVt0aGlzLmdyb3VwS2V5XTtcbiAgICAgICAgICAgIGlmICgha2V5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFncm91cFtrZXlWYWx1ZV0pIHtcbiAgICAgICAgICAgICAgICBncm91cFtrZXlWYWx1ZV0gPSBbXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ3JvdXBba2V5VmFsdWVdLnB1c2goaXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZ3JvdXApLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RJdGVtOiBTZWxlY3RhYmxlT3B0aW9uSXRlbSA9IHtcbiAgICAgICAgICAgICAgICBsYWJlbDoga2V5LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgICAgICAgIGlzR3JvdXA6IHRydWVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRHcm91cCA9IGdyb3VwW2tleV07XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNob3dTZWNvbmRhcnlUZXh0ICYmIHRoaXMuc2Vjb25kYXJ5S2V5KSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0SXRlbS5jaGlsZHJlbiA9IHRoaXMuX2NvbnZlcnRPYmplY3RzVG9TZWNvbmRhcnlPcHRpb25JdGVtcyhjdXJyZW50R3JvdXApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RJdGVtLmNoaWxkcmVuID0gdGhpcy5fY29udmVydE9iamVjdHNUb0RlZmF1bHRPcHRpb25JdGVtcyhjdXJyZW50R3JvdXApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gc2VsZWN0SXRlbTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBvYmplY3RbXSBkYXRhIHRvIFNlY29uZGFyeSBTZWxlY3RhYmxlT3B0aW9uSXRlbXMgSW50ZXJmYWNlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2NvbnZlcnRPYmplY3RzVG9TZWNvbmRhcnlPcHRpb25JdGVtczxLPihpdGVtczogS1tdKTogU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdEl0ZW1zOiBTZWxlY3RhYmxlT3B0aW9uSXRlbVtdID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpdGVtc1tpXTtcbiAgICAgICAgICAgIHNlbGVjdEl0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmRpc3BsYXlWYWx1ZSh2YWx1ZSksXG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMubG9va3VwVmFsdWUodmFsdWUpLFxuICAgICAgICAgICAgICAgIHNlY29uZGFyeVRleHQ6IHRoaXMub2JqZWN0R2V0KHZhbHVlLCB0aGlzLnNlY29uZGFyeUtleSksXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWRJdGVtcz8uaW5jbHVkZXModmFsdWUpIHx8IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZWxlY3RJdGVtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IFByaW1pdGl2ZSBkYXRhKEJvb2xlYW4sIFN0cmluZywgTnVtYmVyKSB0byBTZWxlY3RhYmxlT3B0aW9uSXRlbXMgSW50ZXJmYWNlXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIHByaXZhdGUgX2NvbnZlcnRQcmltaXRpdmVUb09wdGlvbkl0ZW1zKGl0ZW1zOiBhbnlbXSk6IFNlbGVjdGFibGVPcHRpb25JdGVtW10ge1xuICAgICAgICBjb25zdCBzZWxlY3RJdGVtczogU2VsZWN0YWJsZU9wdGlvbkl0ZW1bXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgc2VsZWN0SXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHZhbHVlLFxuICAgICAgICAgICAgICAgIGlkOiB0aGlzLmxvb2t1cFZhbHVlKHZhbHVlKSxcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZEl0ZW1zPy5pbmNsdWRlcyh2YWx1ZSkgfHwgZmFsc2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNlbGVjdEl0ZW1zO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgb2JqZWN0W10gdG8gU2VsZWN0YWJsZU9wdGlvbkl0ZW1zIEludGVyZmFjZSAoRGVmYXVsdClcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgcHJpdmF0ZSBfY29udmVydE9iamVjdHNUb0RlZmF1bHRPcHRpb25JdGVtcyhpdGVtczogYW55W10pOiBTZWxlY3RhYmxlT3B0aW9uSXRlbVtdIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0SXRlbXM6IFNlbGVjdGFibGVPcHRpb25JdGVtW10gPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGl0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1zW2ldO1xuICAgICAgICAgICAgc2VsZWN0SXRlbXMucHVzaCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZGlzcGxheVZhbHVlKHZhbHVlKSxcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5sb29rdXBWYWx1ZSh2YWx1ZSksXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHRoaXMuc2VsZWN0ZWRJdGVtcz8uaW5jbHVkZXModmFsdWUpIHx8IGZhbHNlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZWxlY3RJdGVtcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogQXNzaWduIGN1c3RvbSB0ZW1wbGF0ZXNcbiAgICAgKi9cbiAgICBwcml2YXRlIF9hc3NpZ25DdXN0b21UZW1wbGF0ZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY3VzdG9tVGVtcGxhdGVzLmZvckVhY2goKHRlbXBsYXRlKSA9PiB7XG4gICAgICAgICAgICBzd2l0Y2ggKHRlbXBsYXRlLm5hbWUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdvcHRpb25JdGVtVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbkl0ZW1UZW1wbGF0ZSA9IHRlbXBsYXRlLnRlbXBsYXRlUmVmO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdncm91cEl0ZW1UZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBJdGVtVGVtcGxhdGUgPSB0ZW1wbGF0ZS50ZW1wbGF0ZVJlZjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc2Vjb25kYXJ5SXRlbVRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWNvbmRhcnlJdGVtVGVtcGxhdGUgPSB0ZW1wbGF0ZS50ZW1wbGF0ZVJlZjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc2VsZWN0ZWRJdGVtVGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbVRlbXBsYXRlID0gdGVtcGxhdGUudGVtcGxhdGVSZWY7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|