ontimize-web-ngx 15.5.1 → 15.6.0-next.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/esm2020/lib/components/app-header/o-app-header.component.mjs +4 -4
- package/esm2020/lib/components/app-header/o-app-header.module.mjs +5 -5
- package/esm2020/lib/components/app-sidenav/image/o-app-sidenav-image.component.mjs +4 -4
- package/esm2020/lib/components/app-sidenav/menu-group/o-app-sidenav-menu-group.component.mjs +4 -4
- package/esm2020/lib/components/app-sidenav/menu-item/o-app-sidenav-menu-item.component.mjs +4 -4
- package/esm2020/lib/components/app-sidenav/o-app-sidenav.component.mjs +4 -4
- package/esm2020/lib/components/app-sidenav/o-app-sidenav.module.mjs +5 -5
- package/esm2020/lib/components/bar-menu/locale-menu-item/o-locale-bar-menu-item.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/menu-group/o-bar-menu-group.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/menu-item/o-bar-menu-item.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/menu-nested/o-bar-menu-nested.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/menu-separator/o-bar-menu-separator.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/o-bar-menu-base.class.mjs +4 -4
- package/esm2020/lib/components/bar-menu/o-bar-menu.component.mjs +4 -4
- package/esm2020/lib/components/bar-menu/o-bar-menu.module.mjs +5 -5
- package/esm2020/lib/components/bar-menu/o-base-menu-item.class.mjs +4 -4
- package/esm2020/lib/components/breadcrumb/o-breadcrumb.component.mjs +4 -4
- package/esm2020/lib/components/breadcrumb/o-breadcrumb.module.mjs +5 -5
- package/esm2020/lib/components/button/o-button.component.mjs +4 -4
- package/esm2020/lib/components/button/o-button.module.mjs +5 -5
- package/esm2020/lib/components/button-toggle/o-button-toggle-group/o-button-toggle-group.component.mjs +4 -4
- package/esm2020/lib/components/button-toggle/o-button-toggle.component.mjs +4 -4
- package/esm2020/lib/components/button-toggle/o-button-toggle.module.mjs +5 -5
- package/esm2020/lib/components/card-menu-item/o-card-menu-item.component.mjs +4 -4
- package/esm2020/lib/components/card-menu-item/o-card-menu-item.module.mjs +5 -5
- package/esm2020/lib/components/container/column/o-column.component.mjs +4 -4
- package/esm2020/lib/components/container/column/o-column.module.mjs +5 -5
- package/esm2020/lib/components/container/column-collapsible/o-column-collapsible.component.mjs +4 -4
- package/esm2020/lib/components/container/column-collapsible/o-column-collapsible.module.mjs +5 -5
- package/esm2020/lib/components/container/o-container-collapsible-component.class.mjs +4 -4
- package/esm2020/lib/components/container/o-container-component.class.mjs +4 -4
- package/esm2020/lib/components/container/row/o-row.component.mjs +4 -4
- package/esm2020/lib/components/container/row/o-row.module.mjs +5 -5
- package/esm2020/lib/components/container/row-collapsible/o-row-collapsible.component.mjs +4 -4
- package/esm2020/lib/components/container/row-collapsible/o-row-collapsible.module.mjs +5 -5
- package/esm2020/lib/components/contextmenu/context-menu/o-context-menu-content.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/context-menu/o-wrapper-content-menu/o-wrapper-content-menu.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/context-menu-group/o-context-menu-group.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/context-menu-item/o-context-menu-item.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/context-menu-separator/o-context-menu-separator.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/o-content-menu-base-item.class.mjs +4 -4
- package/esm2020/lib/components/contextmenu/o-context-menu-overlay.service.mjs +4 -4
- package/esm2020/lib/components/contextmenu/o-context-menu.component.mjs +4 -4
- package/esm2020/lib/components/contextmenu/o-context-menu.directive.mjs +4 -4
- package/esm2020/lib/components/contextmenu/o-context-menu.module.mjs +5 -5
- package/esm2020/lib/components/contextmenu/o-context-menu.service.mjs +4 -4
- package/esm2020/lib/components/dual-list-selector/dual-list-selector-item/date/o-dual-list-selector-date-item.component.mjs +4 -4
- package/esm2020/lib/components/dual-list-selector/o-dual-list-selector.component.mjs +4 -4
- package/esm2020/lib/components/dual-list-selector/o-dual-list-selector.module.mjs +5 -5
- package/esm2020/lib/components/expandable-container/o-expandable-container.component.mjs +4 -4
- package/esm2020/lib/components/expandable-container/o-expandable-container.module.mjs +5 -5
- package/esm2020/lib/components/filter-builder/filter-builder-menu/filter-builder-menu.component.mjs +4 -4
- package/esm2020/lib/components/filter-builder/o-filter-builder-clear.directive.mjs +4 -4
- package/esm2020/lib/components/filter-builder/o-filter-builder-query.directive.mjs +4 -4
- package/esm2020/lib/components/filter-builder/o-filter-builder.component.mjs +4 -4
- package/esm2020/lib/components/filter-builder/o-filter-builder.module.mjs +5 -5
- package/esm2020/lib/components/form/guards/o-form-can-deactivate.guard.mjs +4 -4
- package/esm2020/lib/components/form/navigation/o-form-confirm-exit.service.mjs +4 -4
- package/esm2020/lib/components/form/navigation/o-form-navigation.component.mjs +6 -5
- package/esm2020/lib/components/form/o-form.component.mjs +27 -13
- package/esm2020/lib/components/form/o-form.module.mjs +5 -5
- package/esm2020/lib/components/form/services/o-form-message.service.mjs +4 -4
- package/esm2020/lib/components/form/toolbar/o-form-toolbar.component.mjs +4 -4
- package/esm2020/lib/components/form/toolbar/o-form-toolbar.module.mjs +5 -5
- package/esm2020/lib/components/form-container/o-form-container.component.mjs +4 -4
- package/esm2020/lib/components/form-container/o-form-container.module.mjs +5 -5
- package/esm2020/lib/components/grid/grid-item/o-grid-item.component.mjs +4 -4
- package/esm2020/lib/components/grid/grid-item/o-grid-item.directive.mjs +4 -4
- package/esm2020/lib/components/grid/o-grid.component.mjs +5 -5
- package/esm2020/lib/components/grid/o-grid.module.mjs +5 -5
- package/esm2020/lib/components/grid/skeketon/o-grid-skeleton.component.mjs +4 -4
- package/esm2020/lib/components/image/fullscreen/fullscreen-dialog.component.mjs +4 -4
- package/esm2020/lib/components/image/o-image.component.mjs +6 -6
- package/esm2020/lib/components/image/o-image.module.mjs +5 -5
- package/esm2020/lib/components/input/checkbox/o-checkbox.component.mjs +4 -4
- package/esm2020/lib/components/input/checkbox/o-checkbox.module.mjs +5 -5
- package/esm2020/lib/components/input/combo/combo-renderer/boolean/o-combo-renderer-boolean.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/currency/o-combo-renderer-currency.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/date/o-combo-renderer-date.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/icon/o-combo-renderer-icon.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/integer/o-combo-renderer-integer.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/o-combo-renderer.class.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/percentage/o-combo-renderer-percentage.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-renderer/real/o-combo-renderer-real.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/combo-search/o-combo-search.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/o-combo.component.mjs +4 -4
- package/esm2020/lib/components/input/combo/o-combo.module.mjs +5 -5
- package/esm2020/lib/components/input/currency-input/o-currency-input.component.mjs +5 -5
- package/esm2020/lib/components/input/currency-input/o-currency-input.module.mjs +5 -5
- package/esm2020/lib/components/input/date-input/o-date-input.component.mjs +4 -4
- package/esm2020/lib/components/input/date-input/o-date-input.module.mjs +5 -5
- package/esm2020/lib/components/input/date-range/o-daterange-input.component.mjs +4 -4
- package/esm2020/lib/components/input/date-range/o-daterange-input.module.mjs +5 -5
- package/esm2020/lib/components/input/date-range-legacy/o-daterange-input.component.mjs +4 -4
- package/esm2020/lib/components/input/date-range-legacy/o-daterange-input.directive.mjs +4 -4
- package/esm2020/lib/components/input/date-range-legacy/o-daterange-input.module.mjs +5 -5
- package/esm2020/lib/components/input/date-range-legacy/o-daterange-picker.component.mjs +4 -4
- package/esm2020/lib/components/input/email-input/o-email-input.component.mjs +4 -4
- package/esm2020/lib/components/input/email-input/o-email-input.module.mjs +5 -5
- package/esm2020/lib/components/input/file-input/o-file-input.component.mjs +9 -5
- package/esm2020/lib/components/input/file-input/o-file-input.module.mjs +5 -5
- package/esm2020/lib/components/input/hour-input/o-hour-input.component.mjs +4 -4
- package/esm2020/lib/components/input/hour-input/o-hour-input.module.mjs +5 -5
- package/esm2020/lib/components/input/html-input/o-html-input.component.mjs +4 -4
- package/esm2020/lib/components/input/html-input/o-html-input.module.mjs +5 -5
- package/esm2020/lib/components/input/integer-input/o-integer-input.component.mjs +4 -4
- package/esm2020/lib/components/input/integer-input/o-integer-input.module.mjs +5 -5
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/currency/o-list-picker-renderer-currency.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/date/o-list-picker-renderer-date.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/integer/o-list-picker-renderer-integer.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/o-list-picker-renderer.class.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/percentage/o-list-picker-renderer-percentage.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/listpicker-renderer/real/o-list-picker-renderer-real.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/o-list-picker-dialog.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/o-list-picker.component.mjs +4 -4
- package/esm2020/lib/components/input/listpicker/o-list-picker.module.mjs +5 -5
- package/esm2020/lib/components/input/nif-input/o-nif-input.component.mjs +4 -4
- package/esm2020/lib/components/input/nif-input/o-nif-input.module.mjs +5 -5
- package/esm2020/lib/components/input/o-boolean-form-data-component.class.mjs +4 -4
- package/esm2020/lib/components/input/o-form-service-component.class.mjs +20 -11
- package/esm2020/lib/components/input/password-input/o-password-input.component.mjs +4 -4
- package/esm2020/lib/components/input/password-input/o-password-input.module.mjs +5 -5
- package/esm2020/lib/components/input/percent-input/o-percent-input.component.mjs +4 -4
- package/esm2020/lib/components/input/percent-input/o-percent-input.module.mjs +5 -5
- package/esm2020/lib/components/input/phone-input/data/country-code.mjs +4 -4
- package/esm2020/lib/components/input/phone-input/o-phone-input.component.mjs +4 -4
- package/esm2020/lib/components/input/phone-input/o-phone-input.module.mjs +5 -5
- package/esm2020/lib/components/input/radio/o-radio.component.mjs +4 -4
- package/esm2020/lib/components/input/radio/o-radio.module.mjs +5 -5
- package/esm2020/lib/components/input/real-input/o-real-input.component.mjs +4 -4
- package/esm2020/lib/components/input/real-input/o-real-input.module.mjs +5 -5
- package/esm2020/lib/components/input/search-input/o-search-input.component.mjs +4 -4
- package/esm2020/lib/components/input/search-input/o-search-input.module.mjs +5 -5
- package/esm2020/lib/components/input/slide-toggle/o-slide-toggle.component.mjs +4 -4
- package/esm2020/lib/components/input/slide-toggle/o-slide-toggle.module.mjs +5 -5
- package/esm2020/lib/components/input/slider/o-slider.component.mjs +4 -4
- package/esm2020/lib/components/input/slider/o-slider.module.mjs +5 -5
- package/esm2020/lib/components/input/text-input/o-text-input.component.mjs +4 -4
- package/esm2020/lib/components/input/text-input/o-text-input.module.mjs +5 -5
- package/esm2020/lib/components/input/textarea-input/o-textarea-input.component.mjs +4 -4
- package/esm2020/lib/components/input/textarea-input/o-textarea-input.module.mjs +5 -5
- package/esm2020/lib/components/input/time-input/o-time-input.component.mjs +4 -4
- package/esm2020/lib/components/input/time-input/o-time-input.module.mjs +5 -5
- package/esm2020/lib/components/language-selector/o-language-selector.component.mjs +4 -4
- package/esm2020/lib/components/language-selector/o-language-selector.module.mjs +5 -5
- package/esm2020/lib/components/list/list-item/o-list-item.component.mjs +4 -4
- package/esm2020/lib/components/list/list-item/o-list-item.directive.mjs +4 -4
- package/esm2020/lib/components/list/o-list.component.mjs +5 -5
- package/esm2020/lib/components/list/o-list.module.mjs +5 -5
- package/esm2020/lib/components/list/renderers/avatar/o-list-item-avatar.component.mjs +4 -4
- package/esm2020/lib/components/list/renderers/card/o-list-item-card.component.mjs +4 -4
- package/esm2020/lib/components/list/renderers/card-image/o-list-item-card-image.component.mjs +4 -4
- package/esm2020/lib/components/list/renderers/o-list-item-card-renderer.class.mjs +4 -4
- package/esm2020/lib/components/list/renderers/o-list-item-text-renderer.class.mjs +4 -4
- package/esm2020/lib/components/list/renderers/text/o-list-item-text.component.mjs +4 -4
- package/esm2020/lib/components/list/skeleton/o-list-skeleton.component.mjs +4 -4
- package/esm2020/lib/components/material/ckeditor/ck-editor.component.mjs +4 -4
- package/esm2020/lib/components/material/ckeditor/ck-editor.module.mjs +5 -5
- package/esm2020/lib/components/o-data-toolbar/o-data-toolbar.component.mjs +4 -4
- package/esm2020/lib/components/o-data-toolbar/o-data-toolbar.module.mjs +5 -5
- package/esm2020/lib/components/o-form-data-component.class.mjs +4 -4
- package/esm2020/lib/components/o-service-base-component.class.mjs +35 -24
- package/esm2020/lib/components/o-service-component.class.mjs +8 -8
- package/esm2020/lib/components/o-skeleton.component.mjs +4 -4
- package/esm2020/lib/components/table/column/calculated/o-table-column-calculated.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/boolean/o-table-cell-editor-boolean.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/date/o-table-cell-editor-date.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/email/o-table-cell-editor-email.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/integer/o-table-cell-editor-integer.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/o-base-table-cell-editor.class.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/real/o-table-cell-editor-real.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/text/o-table-cell-editor-text.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-editor/time/o-table-cell-editor-time.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/action/o-table-cell-renderer-action.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/boolean/o-table-cell-renderer-boolean.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/currency/o-table-cell-renderer-currency.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/date/o-table-cell-renderer-date.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/image/o-table-cell-renderer-image.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/integer/o-table-cell-renderer-integer.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/o-base-table-cell-renderer.class.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/percentage/o-table-cell-renderer-percentage.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/real/o-table-cell-renderer-real.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/service/o-table-cell-renderer-service.component.mjs +23 -9
- package/esm2020/lib/components/table/column/cell-renderer/time/o-table-cell-renderer-time.component.mjs +4 -4
- package/esm2020/lib/components/table/column/cell-renderer/translate/o-table-cell-renderer-translate.component.mjs +4 -4
- package/esm2020/lib/components/table/column/o-table-column.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/contextmenu/o-table-context-menu.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/apply-configuration/o-table-apply-configuration-dialog.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/export/o-table-export-dialog.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/filter-by-column/o-table-filter-by-column-data-dialog.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/group-by-columns/o-table-group-by-columns-dialog.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/o-table-base-dialog.class.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/store-configuration/o-table-store-configuration-dialog.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/dialog/visible-columns/o-table-visible-columns-dialog.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/export-button/o-table-export-button.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/export-button/o-table-export-button.service.mjs +4 -4
- package/esm2020/lib/components/table/extensions/footer/aggregate/o-table-column-aggregate.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/footer/expanded/o-table-expanded-footer.directive.mjs +4 -4
- package/esm2020/lib/components/table/extensions/footer/paginator/o-table-mat-paginator-intl.mjs +4 -4
- package/esm2020/lib/components/table/extensions/footer/paginator/o-table-paginator.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/o-table-header-components.mjs +3 -2
- package/esm2020/lib/components/table/extensions/header/table-button/o-table-button.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-buttons/o-table-buttons.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-column-resizer/o-table-column-resizer.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-column-select-all/o-table-column-select-all.directive.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-columns-filter/columns/o-table-columns-filter-column.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-columns-filter/o-table-columns-filter.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-columns-grouping/columns/o-table-columns-grouping-column.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-columns-grouping/o-table-columns-grouping.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-header/o-table-header.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-header-column-filter-icon/o-table-header-column-filter-icon.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-header-select-all/o-table-header-select-all.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-insertable-row/o-table-insertable-row.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-menu/o-table-menu.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-option/o-table-option.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/header/table-quickfilter/o-table-quickfilter.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/o-table-datasource.service.mjs +4 -4
- package/esm2020/lib/components/table/extensions/o-table-strategy.service.mjs +4 -4
- package/esm2020/lib/components/table/extensions/o-table.dao.mjs +10 -12
- package/esm2020/lib/components/table/extensions/pipes/o-table-row-class.pipe.mjs +4 -4
- package/esm2020/lib/components/table/extensions/row/o-table-row.directive.mjs +4 -4
- package/esm2020/lib/components/table/extensions/row/table-row-expandable/o-table-row-expandable.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/skeleton/o-table-skeleton.component.mjs +4 -4
- package/esm2020/lib/components/table/extensions/sort/o-mat-sort-header.mjs +4 -4
- package/esm2020/lib/components/table/extensions/sort/o-mat-sort-module.mjs +5 -5
- package/esm2020/lib/components/table/extensions/sort/o-mat-sort.mjs +4 -4
- package/esm2020/lib/components/table/o-table-base.class.mjs +1 -1
- package/esm2020/lib/components/table/o-table.component.mjs +20 -15
- package/esm2020/lib/components/table/o-table.module.mjs +6 -6
- package/esm2020/lib/components/tree/header/tree-menu/o-tree-menu.component.mjs +4 -4
- package/esm2020/lib/components/tree/o-tree-dao.service.mjs +4 -4
- package/esm2020/lib/components/tree/o-tree.component.mjs +6 -6
- package/esm2020/lib/components/tree/o-tree.module.mjs +5 -5
- package/esm2020/lib/components/tree/tree-node/tree-node.component.mjs +4 -4
- package/esm2020/lib/components/user-info/o-user-info.component.mjs +4 -4
- package/esm2020/lib/components/user-info/o-user-info.module.mjs +5 -5
- package/esm2020/lib/components/user-info/user-info-configuration/o-user-info-configuration.directive.mjs +4 -4
- package/esm2020/lib/components/user-info/user-info-configuration-item/o-user-info-configuration-item.directive.mjs +4 -4
- package/esm2020/lib/config/app-config.mjs +4 -1
- package/esm2020/lib/config/o-modules.mjs +5 -5
- package/esm2020/lib/config/o-providers.mjs +7 -4
- package/esm2020/lib/directives/input-regulate.directive.mjs +4 -4
- package/esm2020/lib/directives/keyboard-listener.directive.mjs +4 -4
- package/esm2020/lib/directives/locker.directive.mjs +4 -4
- package/esm2020/lib/directives/o-file-drag-and-drop.directive.mjs +4 -4
- package/esm2020/lib/directives/o-hidden.directive.mjs +4 -4
- package/esm2020/lib/directives/o-mat-error.directive.mjs +4 -4
- package/esm2020/lib/directives/o-mat-prefix.directive.mjs +4 -4
- package/esm2020/lib/directives/o-mat-suffix.directive.mjs +4 -4
- package/esm2020/lib/directives/o-tab-group.directive.mjs +4 -4
- package/esm2020/lib/interfaces/base-response.interface.mjs +2 -0
- package/esm2020/lib/interfaces/data-service.interface.mjs +1 -1
- package/esm2020/lib/interfaces/form-data-component.interface.mjs +1 -1
- package/esm2020/lib/interfaces/index.mjs +4 -1
- package/esm2020/lib/interfaces/jsonapi-response.interface.mjs +2 -0
- package/esm2020/lib/interfaces/name-convention.interface.mjs +2 -0
- package/esm2020/lib/interfaces/prefereces-service.interface.mjs +2 -0
- package/esm2020/lib/interfaces/service-response-adapter.interface.mjs +1 -1
- package/esm2020/lib/interfaces/service-response.interface.mjs +1 -1
- package/esm2020/lib/layouts/app-layout/app-layout-header/o-app-layout-header.component.mjs +4 -4
- package/esm2020/lib/layouts/app-layout/app-layout-sidenav/o-app-layout-sidenav.component.mjs +4 -4
- package/esm2020/lib/layouts/app-layout/o-app-layout.component.mjs +4 -4
- package/esm2020/lib/layouts/app-layout/o-app-layout.module.mjs +5 -5
- package/esm2020/lib/layouts/card-menu-layout/o-card-menu-layout.component.mjs +4 -4
- package/esm2020/lib/layouts/card-menu-layout/o-card-menu-layout.module.mjs +5 -5
- package/esm2020/lib/layouts/form-layout/dialog/o-form-layout-dialog.component.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/dialog/options/o-form-layout-dialog-options.directive.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/directives/o-form-layout-manager-content.directive.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/guards/o-form-layout-can-activate-child.guard.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/o-form-layout-manager.component.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/o-form-layout-manager.module.mjs +5 -5
- package/esm2020/lib/layouts/form-layout/split-pane/o-form-layout-split-pane.component.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/split-pane/options/o-form-layout-split-pane-options.directive.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/tabgroup/o-form-layout-tabgroup.component.mjs +4 -4
- package/esm2020/lib/layouts/form-layout/tabgroup/options/o-form-layout-tabgroup-options.directive.mjs +4 -4
- package/esm2020/lib/ontimize-web-ngx.module.mjs +5 -5
- package/esm2020/lib/pipes/columns-filter.pipe.mjs +4 -4
- package/esm2020/lib/pipes/is-empty-value.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-currency.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-icon.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-integer.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-moment.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-percentage.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-real.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-safe.pipe.mjs +4 -4
- package/esm2020/lib/pipes/o-translate.pipe.mjs +8 -8
- package/esm2020/lib/pipes/order-by.pipe.mjs +4 -4
- package/esm2020/lib/services/app-menu.service.mjs +4 -4
- package/esm2020/lib/services/appearance.service.mjs +4 -4
- package/esm2020/lib/services/auth-guard.service.mjs +4 -4
- package/esm2020/lib/services/auth.service.mjs +4 -4
- package/esm2020/lib/services/base-data-service.class.mjs +20 -0
- package/esm2020/lib/services/base-service.class.mjs +36 -9
- package/esm2020/lib/services/currency.service.mjs +4 -4
- package/esm2020/lib/services/dialog.service.mjs +4 -4
- package/esm2020/lib/services/factories.mjs +74 -5
- package/esm2020/lib/services/icon.service.mjs +4 -4
- package/esm2020/lib/services/index.mjs +5 -1
- package/esm2020/lib/services/jsonapi/index.mjs +5 -0
- package/esm2020/lib/services/jsonapi/jsonapi-preferences.service.mjs +47 -0
- package/esm2020/lib/services/jsonapi/jsonapi-service-response.adapter.mjs +31 -0
- package/esm2020/lib/services/jsonapi/jsonapi-service-response.class.mjs +45 -0
- package/esm2020/lib/services/jsonapi/jsonapi.service.mjs +165 -0
- package/esm2020/lib/services/local-storage.service.mjs +4 -4
- package/esm2020/lib/services/login-storage.service.mjs +4 -4
- package/esm2020/lib/services/moment.service.mjs +4 -4
- package/esm2020/lib/services/name-convention/base-name-convention.service.mjs +59 -0
- package/esm2020/lib/services/name-convention/index.mjs +4 -0
- package/esm2020/lib/services/name-convention/name-convention-lower.service.mjs +11 -0
- package/esm2020/lib/services/name-convention/name-convention-upper.service.mjs +11 -0
- package/esm2020/lib/services/name-convention/name-convention.service.mjs +24 -0
- package/esm2020/lib/services/navigation.service.mjs +4 -4
- package/esm2020/lib/services/number.service.mjs +4 -4
- package/esm2020/lib/services/o-auth.service.mjs +4 -4
- package/esm2020/lib/services/o-breadcrumb.service.mjs +4 -4
- package/esm2020/lib/services/o-error-dialog-manager.service.mjs +4 -4
- package/esm2020/lib/services/o-form-layout-manager.service.mjs +4 -4
- package/esm2020/lib/services/o-modules-info.service.mjs +4 -4
- package/esm2020/lib/services/o-user-info.service.mjs +4 -4
- package/esm2020/lib/services/ontimize/index.mjs +3 -1
- package/esm2020/lib/services/ontimize/o-preference-response.adapter.mjs +22 -0
- package/esm2020/lib/services/ontimize/ontimize-base-service.class.mjs +7 -12
- package/esm2020/lib/services/ontimize/ontimize-ee.service.mjs +33 -16
- package/esm2020/lib/services/ontimize/ontimize-export-3xx.service.mjs +7 -7
- package/esm2020/lib/services/ontimize/ontimize-export.service.mjs +6 -6
- package/esm2020/lib/services/ontimize/ontimize-file.service.mjs +6 -6
- package/esm2020/lib/services/ontimize/ontimize-preferences.service.mjs +56 -0
- package/esm2020/lib/services/ontimize/ontimize-service-response.adapter.mjs +7 -4
- package/esm2020/lib/services/ontimize/ontimize.service.mjs +32 -23
- package/esm2020/lib/services/ontimize-export-data-base-provider.service.mjs +4 -4
- package/esm2020/lib/services/ontimize-export-data-provider-3x.service.mjs +4 -4
- package/esm2020/lib/services/ontimize-export-data-provider.service.mjs +4 -4
- package/esm2020/lib/services/ontimize-icon-registry.service.mjs +4 -4
- package/esm2020/lib/services/pagination-context.service.mjs +4 -4
- package/esm2020/lib/services/parser/o-service-response.parser.mjs +21 -4
- package/esm2020/lib/services/permissions/o-permissions.module.mjs +5 -5
- package/esm2020/lib/services/permissions/ontimize-ee-permissions.service.mjs +4 -4
- package/esm2020/lib/services/permissions/ontimize-permissions.service.mjs +4 -4
- package/esm2020/lib/services/permissions/permissions-can-activate.guard.mjs +4 -4
- package/esm2020/lib/services/permissions/permissions.service.mjs +4 -4
- package/esm2020/lib/services/query-arguments/base-query-argument.adapter.mjs +9 -0
- package/esm2020/lib/services/query-arguments/base-query-argument.interface.mjs +2 -0
- package/esm2020/lib/services/query-arguments/index.mjs +5 -0
- package/esm2020/lib/services/query-arguments/jsonapi-query-arguments.adapter.mjs +62 -0
- package/esm2020/lib/services/query-arguments/ontimize-query-arguments.adapter.mjs +19 -0
- package/esm2020/lib/services/remote-config.service.mjs +5 -5
- package/esm2020/lib/services/share-can-activate-child.service.mjs +4 -4
- package/esm2020/lib/services/snackbar.service.mjs +4 -4
- package/esm2020/lib/services/state/o-app-menu-component-state.service.mjs +4 -4
- package/esm2020/lib/services/state/o-component-state.service.mjs +10 -10
- package/esm2020/lib/services/state/o-filter-builder-component-state.service.mjs +4 -4
- package/esm2020/lib/services/state/o-form-layout-manager-component-state.service.mjs +4 -4
- package/esm2020/lib/services/state/o-grid-component-state.service.mjs +4 -4
- package/esm2020/lib/services/state/o-list-component-state.service.mjs +4 -4
- package/esm2020/lib/services/state/o-table-component-state.service.mjs +4 -4
- package/esm2020/lib/services/state/o-tree-component-state.service.mjs +4 -4
- package/esm2020/lib/services/translate/o-translate.parser.mjs +4 -4
- package/esm2020/lib/services/translate/o-translate.service.mjs +10 -7
- package/esm2020/lib/shared/components/dialog/o-dialog-internal.component.mjs +4 -4
- package/esm2020/lib/shared/components/dialog/o-dialog.component.mjs +4 -4
- package/esm2020/lib/shared/components/error403/o-error-403.component.mjs +4 -4
- package/esm2020/lib/shared/components/filter/load-filter/o-load-filter-dialog.component.mjs +4 -4
- package/esm2020/lib/shared/components/filter/store-filter/o-store-filter-dialog.component.mjs +4 -4
- package/esm2020/lib/shared/components/snackbar/o-snackbar-base.class.mjs +4 -4
- package/esm2020/lib/shared/components/snackbar/o-snackbar.component.mjs +4 -4
- package/esm2020/lib/shared/components/validation/o-error.component.mjs +4 -4
- package/esm2020/lib/shared/components/validation/o-validator.component.mjs +4 -4
- package/esm2020/lib/shared/material/custom.material.module.mjs +5 -5
- package/esm2020/lib/shared/material/date/ontimize-moment-date-adapter.mjs +4 -4
- package/esm2020/lib/shared/shared.module.mjs +5 -5
- package/esm2020/lib/types/config.type.mjs +1 -1
- package/esm2020/lib/types/configure-service-args.type.mjs +1 -1
- package/esm2020/lib/types/index.mjs +5 -1
- package/esm2020/lib/types/json-query-parameter.type.mjs +2 -0
- package/esm2020/lib/types/preferences.type.mjs +2 -0
- package/esm2020/lib/types/query-params.type.mjs +2 -0
- package/esm2020/lib/types/service-configuration.type.mjs +2 -0
- package/esm2020/lib/types/service-request-param.type.mjs +1 -1
- package/esm2020/lib/types/service-type.type.mjs +8 -0
- package/esm2020/lib/util/codes.mjs +2 -1
- package/esm2020/lib/util/index.mjs +2 -1
- package/esm2020/lib/util/preference-mapping-util.mjs +95 -0
- package/esm2020/lib/util/sqltypes.mjs +5 -1
- package/esm2020/lib/util/util.mjs +118 -12
- package/fesm2015/ontimize-web-ngx.mjs +4515 -3577
- package/fesm2015/ontimize-web-ngx.mjs.map +1 -1
- package/fesm2020/ontimize-web-ngx.mjs +4524 -3591
- package/fesm2020/ontimize-web-ngx.mjs.map +1 -1
- package/lib/components/form/navigation/o-form-navigation.component.d.ts +3 -1
- package/lib/components/form/o-form.component.d.ts +12 -7
- package/lib/components/grid/o-grid.component.d.ts +2 -1
- package/lib/components/input/file-input/o-file-input.component.d.ts +3 -1
- package/lib/components/input/o-form-service-component.class.d.ts +11 -4
- package/lib/components/list/o-list.component.d.ts +2 -1
- package/lib/components/o-service-base-component.class.d.ts +8 -4
- package/lib/components/o-service-component.class.d.ts +1 -1
- package/lib/components/table/column/cell-renderer/service/o-table-cell-renderer-service.component.d.ts +7 -2
- package/lib/components/table/column/o-table-column.component.d.ts +1 -1
- package/lib/components/table/extensions/o-table.dao.d.ts +7 -4
- package/lib/components/table/o-table-base.class.d.ts +1 -0
- package/lib/components/table/o-table.component.d.ts +4 -2
- package/lib/components/table/o-table.module.d.ts +1 -1
- package/lib/config/app-config.d.ts +2 -1
- package/lib/config/o-directives.d.ts +1 -1
- package/lib/interfaces/base-response.interface.d.ts +7 -0
- package/lib/interfaces/data-service.interface.d.ts +1 -0
- package/lib/interfaces/form-data-component.interface.d.ts +1 -0
- package/lib/interfaces/index.d.ts +3 -0
- package/lib/interfaces/jsonapi-response.interface.d.ts +9 -0
- package/lib/interfaces/name-convention.interface.d.ts +9 -0
- package/lib/interfaces/prefereces-service.interface.d.ts +7 -0
- package/lib/interfaces/service-response-adapter.interface.d.ts +4 -2
- package/lib/interfaces/service-response.interface.d.ts +2 -6
- package/lib/services/base-data-service.class.d.ts +18 -0
- package/lib/services/base-service.class.d.ts +27 -20
- package/lib/services/factories.d.ts +32 -2
- package/lib/services/index.d.ts +4 -0
- package/lib/services/jsonapi/index.d.ts +4 -0
- package/lib/services/jsonapi/jsonapi-preferences.service.d.ts +13 -0
- package/lib/services/jsonapi/jsonapi-service-response.adapter.d.ts +12 -0
- package/lib/services/jsonapi/jsonapi-service-response.class.d.ts +23 -0
- package/lib/services/jsonapi/jsonapi.service.d.ts +30 -0
- package/lib/services/name-convention/base-name-convention.service.d.ts +12 -0
- package/lib/services/name-convention/index.d.ts +3 -0
- package/lib/services/name-convention/name-convention-lower.service.d.ts +5 -0
- package/lib/services/name-convention/name-convention-upper.service.d.ts +5 -0
- package/lib/services/name-convention/name-convention.service.d.ts +10 -0
- package/lib/services/ontimize/index.d.ts +2 -0
- package/lib/services/ontimize/o-preference-response.adapter.d.ts +9 -0
- package/lib/services/ontimize/ontimize-base-service.class.d.ts +3 -3
- package/lib/services/ontimize/ontimize-ee.service.d.ts +1 -1
- package/lib/services/ontimize/ontimize-export-3xx.service.d.ts +3 -2
- package/lib/services/ontimize/ontimize-export.service.d.ts +2 -2
- package/lib/services/ontimize/ontimize-file.service.d.ts +3 -2
- package/lib/services/ontimize/ontimize-preferences.service.d.ts +16 -0
- package/lib/services/ontimize/ontimize-service-response.adapter.d.ts +6 -5
- package/lib/services/ontimize/ontimize.service.d.ts +2 -0
- package/lib/services/parser/o-service-response.parser.d.ts +11 -5
- package/lib/services/query-arguments/base-query-argument.adapter.d.ts +6 -0
- package/lib/services/query-arguments/base-query-argument.interface.d.ts +3 -0
- package/lib/services/query-arguments/index.d.ts +4 -0
- package/lib/services/query-arguments/jsonapi-query-arguments.adapter.d.ts +12 -0
- package/lib/services/query-arguments/ontimize-query-arguments.adapter.d.ts +8 -0
- package/lib/services/translate/o-translate.service.d.ts +1 -0
- package/lib/types/config.type.d.ts +3 -1
- package/lib/types/configure-service-args.type.d.ts +5 -5
- package/lib/types/index.d.ts +4 -0
- package/lib/types/json-query-parameter.type.d.ts +15 -0
- package/lib/types/preferences.type.d.ts +7 -0
- package/lib/types/query-params.type.d.ts +11 -0
- package/lib/types/service-configuration.type.d.ts +7 -0
- package/lib/types/service-request-param.type.d.ts +5 -5
- package/lib/types/service-type.type.d.ts +5 -0
- package/lib/util/codes.d.ts +6 -5
- package/lib/util/index.d.ts +1 -0
- package/lib/util/preference-mapping-util.d.ts +93 -0
- package/lib/util/util.d.ts +12 -2
- package/package.json +1 -1
|
@@ -1236,22 +1236,28 @@ export class OTableComponent extends AbstractOServiceComponent {
|
|
|
1236
1236
|
}
|
|
1237
1237
|
getQueryArguments(filter, ovrrArgs) {
|
|
1238
1238
|
const queryArguments = super.getQueryArguments(filter, ovrrArgs);
|
|
1239
|
-
|
|
1240
|
-
|
|
1239
|
+
queryArguments.sqlTypes = {
|
|
1240
|
+
...this.getSqlTypesForFilter(queryArguments.columns),
|
|
1241
|
+
...ovrrArgs ? ovrrArgs.sqltypes || {} : {}
|
|
1242
|
+
};
|
|
1241
1243
|
if (this.pageable) {
|
|
1242
|
-
queryArguments
|
|
1243
|
-
|
|
1244
|
+
queryArguments.sort = this.sortColArray;
|
|
1245
|
+
if (this.paginator.isShowingAllRows(ovrrArgs?.offset) && this.state?.totalQueryRecordsNumber) {
|
|
1246
|
+
queryArguments.ovrrArgs.length = this.state.totalQueryRecordsNumber;
|
|
1247
|
+
}
|
|
1244
1248
|
}
|
|
1245
1249
|
return queryArguments;
|
|
1246
1250
|
}
|
|
1247
1251
|
getSqlTypesForFilter(filter) {
|
|
1248
1252
|
const allSqlTypes = this.getSqlTypes();
|
|
1249
1253
|
const sqlTypes = {};
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1254
|
+
if (!Util.isObjectEmpty(filter)) {
|
|
1255
|
+
Object.keys(allSqlTypes).forEach(key => {
|
|
1256
|
+
if (filter.indexOf(key) !== -1 && allSqlTypes[key] !== SQLTypes.OTHER) {
|
|
1257
|
+
sqlTypes[key] = allSqlTypes[key];
|
|
1258
|
+
}
|
|
1259
|
+
});
|
|
1260
|
+
}
|
|
1255
1261
|
return sqlTypes;
|
|
1256
1262
|
}
|
|
1257
1263
|
onExportButtonClicked() {
|
|
@@ -1630,8 +1636,7 @@ export class OTableComponent extends AbstractOServiceComponent {
|
|
|
1630
1636
|
if (this.asyncLoadSubscriptions[rowIndex]) {
|
|
1631
1637
|
this.asyncLoadSubscriptions[rowIndex].unsubscribe();
|
|
1632
1638
|
}
|
|
1633
|
-
this.asyncLoadSubscriptions[rowIndex] = this.dataService[queryMethodName]
|
|
1634
|
-
.apply(this.dataService, columnQueryArgs)
|
|
1639
|
+
this.asyncLoadSubscriptions[rowIndex] = this.dataService[queryMethodName](...columnQueryArgs)
|
|
1635
1640
|
.subscribe((res) => {
|
|
1636
1641
|
if (res.isSuccessful()) {
|
|
1637
1642
|
let data;
|
|
@@ -2599,8 +2604,8 @@ OTableComponent.FIRST_LAST_CELL_PADDING = 24;
|
|
|
2599
2604
|
OTableComponent.EXPANDED_ROW_CONTAINER_CLASS = 'expanded-row-container-';
|
|
2600
2605
|
OTableComponent.AVAILABLE_GROUPING_COLUMNS_RENDERERS = ['currency', 'integer', 'real'];
|
|
2601
2606
|
OTableComponent.DEFAULT_ROW_HEIGHT = 36;
|
|
2602
|
-
OTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.
|
|
2603
|
-
OTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.
|
|
2607
|
+
OTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OTableComponent, deps: [{ token: i0.Injector }, { token: i0.ElementRef }, { token: i1.MatDialog }, { token: i0.ViewContainerRef }, { token: i0.ApplicationRef }, { token: forwardRef(() => OFormComponent), optional: true }, { token: VIRTUAL_SCROLL_STRATEGY, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
2608
|
+
OTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: OTableComponent, selector: "o-table", inputs: { visibleColumns: ["visible-columns", "visibleColumns"], defaultVisibleColumns: ["default-visible-columns", "defaultVisibleColumns"], sortColumns: ["sort-columns", "sortColumns"], quickFilterCallback: ["quick-filter-function", "quickFilterCallback"], deleteButton: ["delete-button", "deleteButton"], refreshButton: ["refresh-button", "refreshButton"], columnsVisibilityButton: ["columns-visibility-button", "columnsVisibilityButton"], exportButton: ["export-button", "exportButton"], showConfigurationOption: ["show-configuration-option", "showConfigurationOption"], showButtonsText: ["show-buttons-text", "showButtonsText"], selectAllCheckbox: ["select-all-checkbox", "selectAllCheckbox"], paginationControls: ["pagination-controls", "paginationControls"], fixedHeader: ["fixed-header", "fixedHeader"], showTitle: ["show-title", "showTitle"], editionMode: ["edition-mode", "editionMode"], selectionMode: ["selection-mode", "selectionMode"], horizontalScroll: ["horizontal-scroll", "horizontalScroll"], showPaginatorFirstLastButtons: ["show-paginator-first-last-buttons", "showPaginatorFirstLastButtons"], autoAlignTitles: ["auto-align-titles", "autoAlignTitles"], multipleSort: ["multiple-sort", "multipleSort"], selectAllCheckboxVisible: ["select-all-checkbox-visible", "selectAllCheckboxVisible"], orderable: "orderable", resizable: "resizable", keepSelectedItems: ["keep-selected-items", "keepSelectedItems"], exportMode: ["export-mode", "exportMode"], exportServiceType: ["export-service-type", "exportServiceType"], autoAdjust: ["auto-adjust", "autoAdjust"], showFilterOption: ["show-filter-option", "showFilterOption"], visibleExportDialogButtons: ["visible-export-dialog-buttons", "visibleExportDialogButtons"], rowClass: ["row-class", "rowClass"], filterColumnActiveByDefault: ["filter-column-active-by-default", "filterColumnActiveByDefault"], groupedColumns: ["grouped-columns", "groupedColumns"], groupable: "groupable", expandGroupsSameLevel: ["expand-groups-same-level", "expandGroupsSameLevel"], collapseGroupedColumns: ["collapse-grouped-columns", "collapseGroupedColumns"], virtualScroll: ["virtual-scroll", "virtualScroll"], contextMenu: ["context-menu", "contextMenu"], showExpandableIconFunction: ["show-expandable-icon-function", "showExpandableIconFunction"], showReportOnDemandOption: ["show-report-on-demand-option", "showReportOnDemandOption"], showChartsOnDemandOption: ["show-charts-on-demand-option", "showChartsOnDemandOption"], showResetWidthOption: ["show-reset-width-option", "showResetWidthOption"], disableSelectionFunction: ["disable-selection-function", "disableSelectionFunction"], nonHidableColumns: ["non-hidable-columns", "nonHidableColumns"], readOnly: ["read-only", "readOnly"], readOnlyConfiguration: ["read-only-configuration", "readOnlyConfiguration"], showNotificationOfReadOnly: ["show-notification-of-read-only", "showNotificationOfReadOnly"] }, outputs: { onRowSelected: "onRowSelected", onRowDeselected: "onRowDeselected", onRowDeleted: "onRowDeleted" }, host: { listeners: { "document:click": "handleDOMClick($event)", "window:resize": "updateScrolledState()" }, properties: { "class.o-table": "true", "class.ontimize-table": "true", "class.o-table-fixed": "fixedHeader", "class.o-table-disabled": "!enabled" } }, providers: [
|
|
2604
2609
|
OntimizeServiceProvider,
|
|
2605
2610
|
ComponentStateServiceProvider,
|
|
2606
2611
|
OTableDataSourceService,
|
|
@@ -2735,7 +2740,7 @@ __decorate([
|
|
|
2735
2740
|
BooleanInputConverter(),
|
|
2736
2741
|
__metadata("design:type", Boolean)
|
|
2737
2742
|
], OTableComponent.prototype, "keepSelectedItems", void 0);
|
|
2738
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.
|
|
2743
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: OTableComponent, decorators: [{
|
|
2739
2744
|
type: Component,
|
|
2740
2745
|
args: [{ selector: 'o-table', providers: [
|
|
2741
2746
|
OntimizeServiceProvider,
|
|
@@ -2816,4 +2821,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
2816
2821
|
type: ViewChildren,
|
|
2817
2822
|
args: [MatTooltip]
|
|
2818
2823
|
}] } });
|
|
2819
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9vLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL28tdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUFtQixjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRixPQUFPLEVBR0wsY0FBYyxFQUNkLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBR04sUUFBUSxFQUNSLFNBQVMsRUFFVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixpQkFBaUIsRUFFbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFN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WTt1QkFBQyxlQUFlLEVBQUUsRUFBRTtnQkErQmpDLHVCQUF1QjtzQkFEdEIsWUFBWTt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBTTFELE9BQU87c0JBRE4sWUFBWTt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBTZWxlY3Rpb25DaGFuZ2UsIFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgRG9tUG9ydGFsT3V0bGV0LCBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LCBWSVJUVUFMX1NDUk9MTF9TVFJBVEVHWSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQXBwbGljYXRpb25SZWYsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbmplY3RvcixcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIFZpZXdSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRDaGVja2JveENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRNZW51IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0VGFiLCBNYXRUYWJHcm91cCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQm9vbGVhbkNvbnZlcnRlciwgQm9vbGVhbklucHV0Q29udmVydGVyIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9pbnB1dC1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RhdGVTZXJ2aWNlUHJvdmlkZXIsIE9fQ09NUE9ORU5UX1NUQVRFX1NFUlZJQ0UsIE9udGltaXplU2VydmljZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmFjdG9yaWVzJztcbmltcG9ydCB7IFNuYWNrQmFyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NuYWNrYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1RhYmxlQ29tcG9uZW50U3RhdGVDbGFzcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0YXRlL28tdGFibGUtY29tcG9uZW50LXN0YXRlLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUNvbXBvbmVudFN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0YXRlL28tdGFibGUtY29tcG9uZW50LXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT0NvbHVtbkRpc3BsYXksIE9GaWx0ZXJEZWZpbml0aW9uLCBPR3JvdXBlZENvbHVtblR5cGVzLCBPVGFibGVHbG9iYWxDb25maWcgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBFeHByZXNzaW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMvZXhwcmVzc2lvbi50eXBlJztcbmltcG9ydCB7IE9QZXJtaXNzaW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzL28tcGVybWlzc2lvbnMudHlwZSc7XG5pbXBvcnQgeyBPUXVlcnlEYXRhQXJncyB9IGZyb20gJy4uLy4uL3R5cGVzL3F1ZXJ5LWRhdGEtYXJncy50eXBlJztcbmltcG9ydCB7IFF1aWNrRmlsdGVyRnVuY3Rpb24gfSBmcm9tICcuLi8uLi90eXBlcy9xdWljay1maWx0ZXItZnVuY3Rpb24udHlwZSc7XG5pbXBvcnQgeyBTUUxPcmRlciB9IGZyb20gJy4uLy4uL3R5cGVzL3NxbC1vcmRlci50eXBlJztcbmltcG9ydCB7IE9Db2x1bW5BZ2dyZWdhdGUgfSBmcm9tICcuLi8uLi90eXBlcy90YWJsZS9vLWNvbHVtbi1hZ2dyZWdhdGUudHlwZSc7XG5pbXBvcnQgeyBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLCBPQ29sdW1uVmFsdWVGaWx0ZXIgfSBmcm9tICcuLi8uLi90eXBlcy90YWJsZS9vLWNvbHVtbi12YWx1ZS1maWx0ZXIudHlwZSc7XG5pbXBvcnQgeyBUYWJsZUZpbHRlckJ5Q29sdW1uRGlhbG9nUmVzdWx0IH0gZnJvbSAnLi4vLi4vdHlwZXMvdGFibGUvby10YWJsZS1maWx0ZXItYnktY29sdW1uLWRhdGEudHlwZSc7XG5pbXBvcnQgeyBPVGFibGVJbml0aWFsaXphdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcy90YWJsZS9vLXRhYmxlLWluaXRpYWxpemF0aW9uLW9wdGlvbnMudHlwZSc7XG5pbXBvcnQgeyBPVGFibGVNZW51UGVybWlzc2lvbnMgfSBmcm9tICcuLi8uLi90eXBlcy90YWJsZS9vLXRhYmxlLW1lbnUtcGVybWlzc2lvbnMudHlwZSc7XG5pbXBvcnQgeyBPVGFibGVQZXJtaXNzaW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzL3RhYmxlL28tdGFibGUtcGVybWlzc2lvbnMudHlwZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlV3JhcHBlciB9IGZyb20gJy4uLy4uL3V0aWwvYXN5bmMnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi8uLi91dGlsL2NvZGVzJztcbmltcG9ydCB7IEZpbHRlckV4cHJlc3Npb25VdGlscyB9IGZyb20gJy4uLy4uL3V0aWwvZmlsdGVyLWV4cHJlc3Npb24udXRpbHMnO1xuaW1wb3J0IHsgUGVybWlzc2lvbnNVdGlscyB9IGZyb20gJy4uLy4uL3V0aWwvcGVybWlzc2lvbnMnO1xuaW1wb3J0IHsgU2VydmljZVV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbC9zZXJ2aWNlLnV0aWxzJztcbmltcG9ydCB7IFNRTFR5cGVzIH0gZnJvbSAnLi4vLi4vdXRpbC9zcWx0eXBlcyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9Db250ZXh0TWVudUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbnRleHRtZW51L28tY29udGV4dC1tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0vby1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBYnN0cmFjdE9TZXJ2aWNlQ29tcG9uZW50IH0gZnJvbSAnLi4vby1zZXJ2aWNlLWNvbXBvbmVudC5jbGFzcyc7XG5pbXBvcnQgeyBPVGFibGVDb2x1bW5DYWxjdWxhdGVkQ29tcG9uZW50IH0gZnJvbSAnLi9jb2x1bW4vY2FsY3VsYXRlZC9vLXRhYmxlLWNvbHVtbi1jYWxjdWxhdGVkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPQmFzZVRhYmxlQ2VsbFJlbmRlcmVyIH0gZnJvbSAnLi9jb2x1bW4vY2VsbC1yZW5kZXJlci9vLWJhc2UtdGFibGUtY2VsbC1yZW5kZXJlci5jbGFzcyc7XG5pbXBvcnQgeyBPQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW4vby1jb2x1bW4uY2xhc3MnO1xuaW1wb3J0IHsgT1RhYmxlQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi9jb2x1bW4vby10YWJsZS1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZUV4cG9ydEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucyc7XG5pbXBvcnQgeyBPVGFibGVDb250ZXh0TWVudUNvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucy9jb250ZXh0bWVudS9vLXRhYmxlLWNvbnRleHQtbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVmYXVsdE9UYWJsZU9wdGlvbnMgfSBmcm9tICcuL2V4dGVuc2lvbnMvZGVmYXVsdC1vLXRhYmxlLW9wdGlvbnMuY2xhc3MnO1xuaW1wb3J0IHsgT1RhYmxlRmlsdGVyQnlDb2x1bW5EYXRhRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9leHRlbnNpb25zL2RpYWxvZy9maWx0ZXItYnktY29sdW1uL28tdGFibGUtZmlsdGVyLWJ5LWNvbHVtbi1kYXRhLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgT0Jhc2VUYWJsZVBhZ2luYXRvciB9IGZyb20gJy4vZXh0ZW5zaW9ucy9mb290ZXIvcGFnaW5hdG9yL28tYmFzZS10YWJsZS1wYWdpbmF0b3IuY2xhc3MnO1xuaW1wb3J0IHsgT1RhYmxlQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9leHRlbnNpb25zL2hlYWRlci90YWJsZS1idXR0b24vby10YWJsZS1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZUNvbHVtblNlbGVjdEFsbERpcmVjdGl2ZSB9IGZyb20gJy4vZXh0ZW5zaW9ucy9oZWFkZXIvdGFibGUtY29sdW1uLXNlbGVjdC1hbGwvby10YWJsZS1jb2x1bW4tc2VsZWN0LWFsbC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgT0ZpbHRlckNvbHVtbiB9IGZyb20gJy4vZXh0ZW5zaW9ucy9oZWFkZXIvdGFibGUtY29sdW1ucy1maWx0ZXIvY29sdW1ucy9vLXRhYmxlLWNvbHVtbnMtZmlsdGVyLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgT1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucy9oZWFkZXIvdGFibGUtY29sdW1ucy1maWx0ZXIvby10YWJsZS1jb2x1bW5zLWZpbHRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgT1RhYmxlQ29sdW1uc0dyb3VwaW5nQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi9leHRlbnNpb25zL2hlYWRlci90YWJsZS1jb2x1bW5zLWdyb3VwaW5nL2NvbHVtbnMvby10YWJsZS1jb2x1bW5zLWdyb3VwaW5nLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgT1RhYmxlSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9leHRlbnNpb25zL2hlYWRlci90YWJsZS1oZWFkZXIvby10YWJsZS1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQgfSBmcm9tICcuL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLWluc2VydGFibGUtcm93L28tdGFibGUtaW5zZXJ0YWJsZS1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZU9wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucy9oZWFkZXIvdGFibGUtb3B0aW9uL28tdGFibGUtb3B0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVGFibGVEYXRhU291cmNlU2VydmljZSB9IGZyb20gJy4vZXh0ZW5zaW9ucy9vLXRhYmxlLWRhdGFzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBPVGFibGVWaXJ0dWFsU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICcuL2V4dGVuc2lvbnMvby10YWJsZS1zdHJhdGVneS5zZXJ2aWNlJztcbmltcG9ydCB7IE9UYWJsZURhbyB9IGZyb20gJy4vZXh0ZW5zaW9ucy9vLXRhYmxlLmRhbyc7XG5pbXBvcnQgeyBPVGFibGVHcm91cGVkUm93IH0gZnJvbSAnLi9leHRlbnNpb25zL3Jvdy9vLXRhYmxlLXJvdy1ncm91cC5jbGFzcyc7XG5pbXBvcnQgeyBPVGFibGVSb3dFeHBhbmRhYmxlQ29tcG9uZW50LCBPVGFibGVSb3dFeHBhbmRlZENoYW5nZSB9IGZyb20gJy4vZXh0ZW5zaW9ucy9yb3cvdGFibGUtcm93LWV4cGFuZGFibGUvby10YWJsZS1yb3ctZXhwYW5kYWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgT01hdFNvcnQgfSBmcm9tICcuL2V4dGVuc2lvbnMvc29ydC9vLW1hdC1zb3J0JztcbmltcG9ydCB7IE9UYWJsZUJhc2UgfSBmcm9tICcuL28tdGFibGUtYmFzZS5jbGFzcyc7XG5pbXBvcnQgeyBPX1RBQkxFX0dMT0JBTF9DT05GSUcgfSBmcm9tICcuL3V0aWxzL28tdGFibGUudG9rZW5zJztcblxuaW1wb3J0IHR5cGUgeyBJT0NvbnRleHRNZW51Q29udGV4dCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby1jb250ZXh0LW1lbnUuaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlQnV0dG9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLWJ1dHRvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHR5cGUgeyBPVGFibGVCdXR0b25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLWJ1dHRvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlQ29sdW1uc0dyb3VwaW5nIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLWNvbHVtbnMtZ3JvdXBpbmctaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1kYXRhc291cmNlLmludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7IE9UYWJsZU1lbnUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL28tdGFibGUtbWVudS5pbnRlcmZhY2UnO1xuaW1wb3J0IHR5cGUgeyBPVGFibGVPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlUGFnaW5hdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLXBhZ2luYXRvci5pbnRlcmZhY2UnO1xuaW1wb3J0IHR5cGUgeyBPVGFibGVRdWlja2ZpbHRlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1xdWlja2ZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NlcnZpY2UtcmVzcG9uc2UuaW50ZXJmYWNlJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX1RBQkxFID0gW1xuICAvLyB2aXNpYmxlLWNvbHVtbnMgW3N0cmluZ106IHZpc2libGUgY29sdW1ucywgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICd2aXNpYmxlQ29sdW1uczogdmlzaWJsZS1jb2x1bW5zJyxcblxuICAvLyB2aXNpYmxlLWNvbHVtbnMtYnktZGVmYXVsdCBbc3RyaW5nXTogY29sdW1ucyB0aGF0IGFyZSB2aXNpYmxlIGJ5IGRlZmF1bHQsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnZGVmYXVsdFZpc2libGVDb2x1bW5zOiBkZWZhdWx0LXZpc2libGUtY29sdW1ucycsXG5cbiAgLy8gZWRpdGFibGUtY29sdW1ucyBbc3RyaW5nXTogY29sdW1ucyB0aGF0IGNhbiBiZSBlZGl0ZWQgZGlyZWN0bHkgb3ZlciB0aGUgdGFibGUsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAvLyAnZWRpdGFibGVDb2x1bW5zOiBlZGl0YWJsZS1jb2x1bW5zJyxcblxuICAvLyBzb3J0LWNvbHVtbnMgW3N0cmluZ106IGluaXRpYWwgc29ydGluZywgd2l0aCB0aGUgZm9ybWF0IGNvbHVtbjpbQVNDfERFU0NdLCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3NvcnRDb2x1bW5zOiBzb3J0LWNvbHVtbnMnLFxuXG4gICdxdWlja0ZpbHRlckNhbGxiYWNrOiBxdWljay1maWx0ZXItZnVuY3Rpb24nLFxuXG4gIC8vIGRlbGV0ZS1idXR0b24gW25vfHllc106IHNob3cgZGVsZXRlIGJ1dHRvbi4gRGVmYXVsdDogeWVzLlxuICAnZGVsZXRlQnV0dG9uOiBkZWxldGUtYnV0dG9uJyxcblxuICAvLyByZWZyZXNoLWJ1dHRvbiBbbm98eWVzXTogc2hvdyByZWZyZXNoIGJ1dHRvbi4gRGVmYXVsdDogeWVzLlxuICAncmVmcmVzaEJ1dHRvbjogcmVmcmVzaC1idXR0b24nLFxuXG4gIC8vIGNvbHVtbnMtdmlzaWJpbGl0eS1idXR0b24gW25vfHllc106IHNob3cgY29sdW1ucyB2aXNpYmlsaXR5IGJ1dHRvbi4gRGVmYXVsdDogeWVzLlxuICAnY29sdW1uc1Zpc2liaWxpdHlCdXR0b246IGNvbHVtbnMtdmlzaWJpbGl0eS1idXR0b24nLFxuXG4gIC8vIC8vIGNvbHVtbnMtcmVzaXplLWJ1dHRvbiBbbm98eWVzXTogc2hvdyBjb2x1bW5zIHJlc2l6ZSBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgLy8gJ2NvbHVtbnNSZXNpemVCdXR0b246IGNvbHVtbnMtcmVzaXplLWJ1dHRvbicsXG5cbiAgLy8gLy8gY29sdW1ucy1ncm91cC1idXR0b24gW25vfHllc106IHNob3cgY29sdW1ucyBncm91cCBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgLy8gJ2NvbHVtbnNHcm91cEJ1dHRvbjogY29sdW1ucy1ncm91cC1idXR0b24nLFxuXG4gIC8vIGV4cG9ydC1idXR0b24gW25vfHllc106IHNob3cgZXhwb3J0IGJ1dHRvbi4gRGVmYXVsdDogeWVzLlxuICAnZXhwb3J0QnV0dG9uOiBleHBvcnQtYnV0dG9uJyxcblxuICAvLyBzaG93LWNvbmZpZ3VyYXRpb24tb3B0aW9uIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHNob3cgY29uZmlndXJhdGlvbiBidXR0b24gaW4gaGVhZGVyLiBEZWZhdWx0OiB5ZXMuXG4gICdzaG93Q29uZmlndXJhdGlvbk9wdGlvbjogc2hvdy1jb25maWd1cmF0aW9uLW9wdGlvbicsXG5cbiAgLy8gc2hvdy1idXR0b25zLXRleHQgW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyB0ZXh0IG9mIGhlYWRlciBidXR0b25zLiBEZWZhdWx0OiB5ZXMuXG4gICdzaG93QnV0dG9uc1RleHQ6IHNob3ctYnV0dG9ucy10ZXh0JyxcblxuICAvLyBzZWxlY3QtYWxsLWNoZWNrYm94IFt5ZXN8bm98dHJ1ZXxmYWxzZV06ICBzaG93IGluIHRoZSBtZW51IHRoZSBvcHRpb24gb2Ygc2VsZWN0aW9uIGNoZWNrIGJveGVzIC4gRGVmYXVsdDogbm8uXG4gICdzZWxlY3RBbGxDaGVja2JveDogc2VsZWN0LWFsbC1jaGVja2JveCcsXG5cbiAgLy8gcGFnaW5hdGlvbi1jb250cm9scyBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IHBhZ2luYXRpb24gY29udHJvbHMuIERlZmF1bHQ6IHllcy5cbiAgJ3BhZ2luYXRpb25Db250cm9sczogcGFnaW5hdGlvbi1jb250cm9scycsXG5cbiAgLy8gZml4LWhlYWRlciBbeWVzfG5vfHRydWV8ZmFsc2VdOiBmaXhlZCBoZWFkZXIgYW5kIGZvb3RlciB3aGVuIHRoZSBjb250ZW50IGlzIGdyZWF0aGVyIHRoYW4gaXRzIG93biBoZWlnaHQuIERlZmF1bHQ6IHllcy5cbiAgJ2ZpeGVkSGVhZGVyOiBmaXhlZC1oZWFkZXInLFxuXG4gIC8vIHNob3ctdGl0bGUgW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyB0aGUgdGFibGUgdGl0bGUuIERlZmF1bHQ6IG5vLlxuICAnc2hvd1RpdGxlOiBzaG93LXRpdGxlJyxcblxuICAvLyBlZGl0aW9uLW1vZGUgW25vbmUgfCBpbmxpbmUgfCBjbGljayB8IGRibGNsaWNrXTogZWRpdGlvbiBtb2RlLiBEZWZhdWx0IG5vbmVcbiAgJ2VkaXRpb25Nb2RlOiBlZGl0aW9uLW1vZGUnLFxuXG4gIC8vIHNlbGVjdGlvbi1tb2RlIFtub25lIHwgc2ltcGxlIHwgbXVsdGlwbGUgXTogc2VsZWN0aW9uIG1vZGUuIERlZmF1bHQgbXVsdGlwbGVcbiAgJ3NlbGVjdGlvbk1vZGU6IHNlbGVjdGlvbi1tb2RlJyxcblxuICAnaG9yaXpvbnRhbFNjcm9sbDogaG9yaXpvbnRhbC1zY3JvbGwnLFxuXG4gICdzaG93UGFnaW5hdG9yRmlyc3RMYXN0QnV0dG9uczogc2hvdy1wYWdpbmF0b3ItZmlyc3QtbGFzdC1idXR0b25zJyxcblxuICAnYXV0b0FsaWduVGl0bGVzOiBhdXRvLWFsaWduLXRpdGxlcycsXG5cbiAgJ211bHRpcGxlU29ydDogbXVsdGlwbGUtc29ydCcsXG4gIC8vIHNlbGVjdC1hbGwtY2hlY2tib3gtdmlzaWJsZSBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IHNlbGVjdGlvbiBjaGVjayBib3hlcy5EZWZhdWx0OiBuby5cbiAgJ3NlbGVjdEFsbENoZWNrYm94VmlzaWJsZTogc2VsZWN0LWFsbC1jaGVja2JveC12aXNpYmxlJyxcblxuICAnb3JkZXJhYmxlJyxcblxuICAncmVzaXphYmxlJyxcblxuICAna2VlcFNlbGVjdGVkSXRlbXM6IGtlZXAtc2VsZWN0ZWQtaXRlbXMnLFxuXG4gIC8vIGV4cG9ydC1tb2RlIFsndmlzaWJsZSd8J2xvY2FsJ3wnYWxsJ106IHNldHMgdGhlIG1vZGUgdG8gZXhwb3J0IGRhdGEuIERlZmF1bHQ6ICd2aXNpYmxlJ1xuICAnZXhwb3J0TW9kZTogZXhwb3J0LW1vZGUnLFxuXG4gIC8vIGV4cG9ydFNlcnZpY2VUeXBlIFsgc3RyaW5nIF06IFRoZSBzZXJ2aWNlIHVzZWQgYnkgdGhlIHRhYmxlIGZvciBleHBvcnRpbmcgaXQncyBkYXRhLCBpdCBtdXN0IGltcGxlbWVudCAnSUV4cG9ydFNlcnZpY2UnIGludGVyZmFjZS4gRGVmYXVsdDogJ09udGltaXplRXhwb3J0U2VydmljZSdcbiAgJ2V4cG9ydFNlcnZpY2VUeXBlOiBleHBvcnQtc2VydmljZS10eXBlJyxcblxuICAvLyBhdXRvLWFkanVzdCBbdHJ1ZXxmYWxzZV06IEF1dG8gYWRqdXN0IGNvbHVtbiB3aWR0aCB0byBmaXQgaXRzIGNvbnRlbnQuIERlZmF1bHQ6IHRydWVcbiAgJ2F1dG9BZGp1c3Q6IGF1dG8tYWRqdXN0JyxcblxuICAvLyBzaG93LWZpbHRlci1vcHRpb24gW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyBmaWx0ZXIgbWVudSBvcHRpb24gaW4gdGhlIGhlYWRlciBtZW51LiBEZWZhdWx0OiB5ZXMuXG4gICdzaG93RmlsdGVyT3B0aW9uOiBzaG93LWZpbHRlci1vcHRpb24nLFxuXG4gIC8vIHZpc2libGUtZXhwb3J0LWRpYWxvZy1idXR0b25zIFtzdHJpbmddOiB2aXNpYmxlIGJ1dHRvbnMgaW4gZXhwb3J0IGRpYWxvZywgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdC9ubyBjb25maWd1cmVkOiBzaG93IGFsbC4gRW1wdHkgdmFsdWU6IGhpZGUgYWxsLlxuICAndmlzaWJsZUV4cG9ydERpYWxvZ0J1dHRvbnM6IHZpc2libGUtZXhwb3J0LWRpYWxvZy1idXR0b25zJyxcblxuICAvLyByb3ctY2xhc3MgW2Z1bmN0aW9uLCAocm93RGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcgfCBzdHJpbmdbXV06IGFkZHMgdGhlIGNsYXNzIG9yIGNsYXNzZXMgcmV0dXJuZWQgYnkgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHRvIHRoZSB0YWJsZSByb3dzLlxuICAncm93Q2xhc3M6IHJvdy1jbGFzcycsXG5cbiAgLy8gZmlsdGVyLWNvbHVtbi1hY3RpdmUtYnktZGVmYXVsdCBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IGljb24gZmlsdGVyIGJ5IGRlZmF1bHQgaW4gdGhlIHRhYmxlLiBEZWZhdWx0Onllc1xuICAnZmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0OmZpbHRlci1jb2x1bW4tYWN0aXZlLWJ5LWRlZmF1bHQnLFxuXG4gIC8vIGdyb3VwZWQtY29sdW1ucyBbc3RyaW5nXTogZ3JvdXBlZCBjb2x1bW5zIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnZ3JvdXBlZENvbHVtbnM6IGdyb3VwZWQtY29sdW1ucycsXG5cbiAgLy8gZ3JvdXBhYmxlW2Jvb2xlYW5dOiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGNvbHVtbiBjYW4gYmUgZ3JvdXBhYmxlLiBCeSBkZWZhdWx0OiB0cnVlXG4gICdncm91cGFibGUnLFxuXG4gIC8vIGV4cGFuZC1ncm91cHMtc2FtZS1sZXZlbFtib29sZWFuXTogSW5kaWNhdGVzIGlmIGNsaWNrIGluIHJvdyBleHBhbmRzL2NvbGxhcHNlcyBhbGwgcm93cyBvbiBzYW1lIGxldmVsLiBCeSBkZWZhdWx0OiB0cnVlXG4gICdleHBhbmRHcm91cHNTYW1lTGV2ZWw6IGV4cGFuZC1ncm91cHMtc2FtZS1sZXZlbCcsXG5cbiAgLy8gY29sbGFwc2UtZ3JvdXBlZC1jb2x1bW5zIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IFdoZXRoZXIgY29sbGFwc2UgdGhlIGdyb3VwZWQgY29sdW1ucyBieSBkZWZhdWx0XG4gICdjb2xsYXBzZUdyb3VwZWRDb2x1bW5zOiBjb2xsYXBzZS1ncm91cGVkLWNvbHVtbnMnLFxuXG4gIC8vIHZpcnR1YWwtc2Nyb2xsIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IFdoZXRoZXIgZW5hYmxlZCBvciBub3QgdGhlIHZpcnR1YWwgc2Nyb2xsXG4gICd2aXJ0dWFsU2Nyb2xsOiB2aXJ0dWFsLXNjcm9sbCcsXG5cbiAgLy9jb250ZXh0LW1lbnUgW3llc3xub3x0cnVlfGZhbHNlXTogSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgdGhlIHRhYmxlIGNvbnRleHQgbWVudVxuICAnY29udGV4dE1lbnU6IGNvbnRleHQtbWVudScsXG5cbiAgLy8gc2hvdy1leHBhbmRhYmxlLWljb24tZnVuY3Rpb24gW2Z1bmN0aW9uXTogRXhwYW5kYWJsZSBmdW5jdGlvbiB0byBjaGVjayBpZiBleHBhbmRhYmxlIGhhcyBkYXRhIHRvIHNob3cgb3Igbm90IGljb25cbiAgJ3Nob3dFeHBhbmRhYmxlSWNvbkZ1bmN0aW9uOiBzaG93LWV4cGFuZGFibGUtaWNvbi1mdW5jdGlvbicsXG5cbiAgLy8gc2hvdy1yZXBvcnQtb24tZGVtYW5kLW9wdGlvbiBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IHJlcG9ydCBvbiBkZW1hbmQgb3B0aW9uIGluIHRoZSB0YWJsZSBtZW51LiBEZWZhdWx0OiB5ZXMuXG4gICdzaG93UmVwb3J0T25EZW1hbmRPcHRpb246IHNob3ctcmVwb3J0LW9uLWRlbWFuZC1vcHRpb24nLFxuXG4gIC8vIHNob3ctY2hhcnRzLW9uLWRlbWFuZC1vcHRpb24gW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyBjaGFydHMgb24gZGVtYW5kIG9wdGlvbiBpbiB0aGUgaGVhZGVyIG1lbnVcbiAgJ3Nob3dDaGFydHNPbkRlbWFuZE9wdGlvbjogc2hvdy1jaGFydHMtb24tZGVtYW5kLW9wdGlvbicsXG5cbiAgLy8gc2hvdy1yZXNldC13aWR0aC1vcHRpb24gW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyByZXNldCB3aWR0aCBtZW51IG9wdGlvbiBpbiB0aGUgaGVhZGVyIG1lbnVcbiAgJ3Nob3dSZXNldFdpZHRoT3B0aW9uOiBzaG93LXJlc2V0LXdpZHRoLW9wdGlvbicsXG5cbiAgJ2Rpc2FibGVTZWxlY3Rpb25GdW5jdGlvbjogZGlzYWJsZS1zZWxlY3Rpb24tZnVuY3Rpb24nLFxuXG4gICdub25IaWRhYmxlQ29sdW1uczogbm9uLWhpZGFibGUtY29sdW1ucycsXG4gICdyZWFkT25seTogcmVhZC1vbmx5JyxcbiAgJ3JlYWRPbmx5Q29uZmlndXJhdGlvbjogcmVhZC1vbmx5LWNvbmZpZ3VyYXRpb24nLFxuICAnc2hvd05vdGlmaWNhdGlvbk9mUmVhZE9ubHk6IHNob3ctbm90aWZpY2F0aW9uLW9mLXJlYWQtb25seSdcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVFBVVFNfT19UQUJMRSA9IFtcbiAgJ29uUm93U2VsZWN0ZWQnLFxuICAnb25Sb3dEZXNlbGVjdGVkJyxcbiAgJ29uUm93RGVsZXRlZCdcbl07XG5cbmNvbnN0IHN0aWNreUhlYWRlclNlbGVjdG9yID0gJy5tYXQtbWRjLWhlYWRlci1yb3cgLm1hdC1tZGMtdGFibGUtc3RpY2t5JztcbmNvbnN0IHN0aWNreUZvb3RlclNlbGVjdG9yID0gJy5tYXQtbWRjLWZvb3Rlci1yb3cgLm1hdC1tZGMtdGFibGUtc3RpY2t5JztcbmNvbnN0IHJvd1NlbGVjdG9yID0gJy5tYXQtbWRjLXJvdyc7XG5jb25zdCBoZWFkZXJTZWxlY3RvciA9ICcubWF0LW1kYy1oZWFkZXItcm93JztcbmNvbnN0IGZvb3RlclNlbGVjdG9yID0gJy5tYXQtbWRjLWhlYWRlci1yb3cnO1xuXG50eXBlIERpc2FibGVTZWxlY3Rpb25GdW5jdGlvbiA9IChpdGVtOiBhbnkpID0+IGJvb2xlYW47XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vby10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL28tdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgT250aW1pemVTZXJ2aWNlUHJvdmlkZXIsXG4gICAgQ29tcG9uZW50U3RhdGVTZXJ2aWNlUHJvdmlkZXIsXG4gICAgT1RhYmxlRGF0YVNvdXJjZVNlcnZpY2UsXG4gICAgeyBwcm92aWRlOiBPX0NPTVBPTkVOVF9TVEFURV9TRVJWSUNFLCB1c2VDbGFzczogT1RhYmxlQ29tcG9uZW50U3RhdGVTZXJ2aWNlIH0sXG4gICAgeyBwcm92aWRlOiBWSVJUVUFMX1NDUk9MTF9TVFJBVEVHWSwgdXNlQ2xhc3M6IE9UYWJsZVZpcnR1YWxTY3JvbGxTdHJhdGVneSB9LFxuICAgIHsgcHJvdmlkZTogT1RhYmxlQmFzZSwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gT1RhYmxlQ29tcG9uZW50KSB9XG4gIF0sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdkZXRhaWxFeHBhbmQnLCBbXG4gICAgICBzdGF0ZSgnY29sbGFwc2VkJywgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBtaW5IZWlnaHQ6ICcwJyB9KSksXG4gICAgICBzdGF0ZSgnZXhwYW5kZWQnLCBzdHlsZSh7IGhlaWdodDogJyonIH0pKSxcbiAgICAgIHRyYW5zaXRpb24oJ2V4cGFuZGVkIDw9PiBjb2xsYXBzZWQnLCBhbmltYXRlKCcyMjVtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSknKSksXG4gICAgXSlcbiAgXSxcbiAgaW5wdXRzOiBERUZBVUxUX0lOUFVUU19PX1RBQkxFLFxuICBvdXRwdXRzOiBERUZBVUxUX09VVFBVVFNfT19UQUJMRSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLm8tdGFibGVdJzogJ3RydWUnLFxuICAgICdbY2xhc3Mub250aW1pemUtdGFibGVdJzogJ3RydWUnLFxuICAgICdbY2xhc3Muby10YWJsZS1maXhlZF0nOiAnZml4ZWRIZWFkZXInLFxuICAgICdbY2xhc3Muby10YWJsZS1kaXNhYmxlZF0nOiAnIWVuYWJsZWQnLFxuICAgICcoZG9jdW1lbnQ6Y2xpY2spJzogJ2hhbmRsZURPTUNsaWNrKCRldmVudCknXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgT1RhYmxlQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RPU2VydmljZUNvbXBvbmVudDxPVGFibGVDb21wb25lbnRTdGF0ZVNlcnZpY2U+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQge1xuICBwdWJsaWMgc3RhdGljIERFRkFVTFRfQkFTRV9TSVpFX1NQSU5ORVIgPSAxMDA7XG4gIHB1YmxpYyBzdGF0aWMgRklSU1RfTEFTVF9DRUxMX1BBRERJTkcgPSAyNDtcbiAgcHVibGljIHN0YXRpYyBFWFBBTkRFRF9ST1dfQ09OVEFJTkVSX0NMQVNTID0gJ2V4cGFuZGVkLXJvdy1jb250YWluZXItJztcbiAgcHVibGljIHN0YXRpYyBBVkFJTEFCTEVfR1JPVVBJTkdfQ09MVU1OU19SRU5ERVJFUlMgPSBbJ2N1cnJlbmN5JywgJ2ludGVnZXInLCAncmVhbCddO1xuXG4gIHB1YmxpYyBERVRBSUxfTU9ERV9OT05FID0gQ29kZXMuREVUQUlMX01PREVfTk9ORTtcbiAgcHVibGljIEVESVRfTU9ERV9OT05FID0gQ29kZXMuRURJVElPTl9NT0RFX05PTkU7XG5cbiAgcHJvdGVjdGVkIHNuYWNrQmFyU2VydmljZTogU25hY2tCYXJTZXJ2aWNlO1xuXG4gIHB1YmxpYyBwYWdpbmF0b3I6IE9UYWJsZVBhZ2luYXRvcjtcblxuICBzb3J0OiBPTWF0U29ydDtcbiAgY2xpY2tTdWJqZWN0ID0gbmV3IFN1YmplY3Q8eyByb3c6IGFueSwgY29sdW1uOiBhbnksIGNlbGxSZWY6IGFueSwgcm93SW5kZXg6IG51bWJlciwgZXZlbnQ6IE1vdXNlRXZlbnQgfT4oKTtcbiAgZGJsY2xpY2tTdWJqZWN0ID0gbmV3IFN1YmplY3Q8eyByb3c6IGFueSwgY29sdW1uOiBhbnksIGNlbGxSZWY6IGFueSwgcm93SW5kZXg6IG51bWJlciwgZXZlbnQ6IE1vdXNlRXZlbnQgfT4oKTtcbiAgcHJvdGVjdGVkIGNsaWNrU3ViamVjdFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgZGJDbGlja1N1YmplY3RTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBAVmlld0NoaWxkKE9NYXRTb3J0KVxuICBzZXQgb01hdFNvcnQoX3NvcnQ6IE9NYXRTb3J0KSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKF9zb3J0KSAmJlxuICAgICAgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLnNvcnQpIHx8IChVdGlsLmlzRGVmaW5lZCh0aGlzLnNvcnQpICYmIFV0aWwuc3RyaW5naWZ5KHRoaXMuc29ydCkgIT09IFV0aWwuc3RyaW5naWZ5KF9zb3J0KSkpKSB7XG4gICAgICB0aGlzLnNvcnQgPSBfc29ydDtcbiAgICAgIHRoaXMuc2V0RGF0YXNvdXJjZSgpO1xuICAgIH1cbiAgfTtcblxuICBwdWJsaWMgdmlydHVhbFNjcm9sbFZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG5cbiAgcHVibGljIG9UYWJsZUdsb2JhbENvbmZpZzogT1RhYmxlR2xvYmFsQ29uZmlnO1xuICBAVmlld0NoaWxkKCd2aXJ0dWFsU2Nyb2xsVmlld1BvcnQnKSBzZXQgY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KHZhbHVlOiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQpIHtcbiAgICBpZiAodmFsdWUgIT0gdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQpIHtcbiAgICAgIHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0ID0gdmFsdWU7XG4gICAgICB0aGlzLnVwZGF0ZUhlYWRlckFuZEZvb3RlclN0aWNreVBvc2l0aW9ucygpO1xuICAgICAgaWYgKHRoaXMuY2hlY2tWaWV3cG9ydFNpemVTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5jaGVja1ZpZXdwb3J0U2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQpIHtcbiAgICAgICAgdGhpcy5jaGVja1ZpZXdwb3J0U2l6ZVN1YnNjcmlwdGlvbiA9IHRoaXMuY2hlY2tWaWV3UG9ydFN1YmplY3Quc3Vic2NyaWJlKHggPT4ge1xuICAgICAgICAgIGlmICh4KSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrVmlld3BvcnRTaXplKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBvbmx5IGZvciBpbnNpZGVUYWJCdWdXb3JrYXJvdW5kXG4gIHByb3RlY3RlZCB0YWJsZUhlYWRlcnM6IEFycmF5PE9UYWJsZUhlYWRlckNvbXBvbmVudD4gPSBbXTtcblxuICBAVmlld0NoaWxkKCdzcGlubmVyQ29udGFpbmVyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHNwaW5uZXJDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgQENvbnRlbnRDaGlsZChPVGFibGVSb3dFeHBhbmRhYmxlQ29tcG9uZW50KVxuICB0YWJsZVJvd0V4cGFuZGFibGU6IE9UYWJsZVJvd0V4cGFuZGFibGVDb21wb25lbnQ7XG5cbiAgX2ZpbHRlckNvbHVtbnM6IEFycmF5PE9GaWx0ZXJDb2x1bW4+O1xuICBwb3J0YWxIb3N0OiBBcnJheTxEb21Qb3J0YWxPdXRsZXQ+ID0gW107XG4gIG9uRGF0YUxvYWRlZENlbGxSZW5kZXJlclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG5cblxuICBwdWJsaWMgdGFibGVDb250ZXh0TWVudTogT0NvbnRleHRNZW51Q29tcG9uZW50O1xuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzZWxlY3RBbGxDaGVja2JveDogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZXhwb3J0QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dDb25maWd1cmF0aW9uT3B0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGNvbHVtbnNWaXNpYmlsaXR5QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dGaWx0ZXJPcHRpb246IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd1JlcG9ydE9uRGVtYW5kT3B0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dDaGFydHNPbkRlbWFuZE9wdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzaG93QnV0dG9uc1RleHQ6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0OiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dSZXNldFdpZHRoT3B0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHJlYWRPbmx5OiBib29sZWFuID0gZmFsc2U7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzaG93Tm90aWZpY2F0aW9uT2ZSZWFkT25seTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEV4cGFuZGFibGUgaW5wdXQgY2FsbGJhY2sgZnVuY3Rpb25cbiAgc2hvd0V4cGFuZGFibGVJY29uRnVuY3Rpb246IChyb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4gfCBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIHJlYWRPbmx5RnVuY3Rpb246IChjb25maWd1cmF0aW9uOiBhbnkpID0+IGJvb2xlYW47XG4gIHJlYWRPbmx5Q29uZmlndXJhdGlvbjogYW55O1xuXG4gIGlzQ29tcG9uZW50UmVhZE9ubHkoc2VsZWN0b3I6IHN0cmluZywgYXR0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZE9ubHlDb25maWd1cmF0aW9uPy5bc2VsZWN0b3JdPy5bYXR0cl07XG4gIH1cbiAgcHJvdGVjdGVkIF9vVGFibGVPcHRpb25zOiBPVGFibGVPcHRpb25zO1xuXG4gIGdldCBvVGFibGVPcHRpb25zKCk6IE9UYWJsZU9wdGlvbnMge1xuICAgIHJldHVybiB0aGlzLl9vVGFibGVPcHRpb25zO1xuICB9XG5cbiAgc2V0IG9UYWJsZU9wdGlvbnModmFsdWU6IE9UYWJsZU9wdGlvbnMpIHtcbiAgICB0aGlzLl9vVGFibGVPcHRpb25zID0gdmFsdWU7XG4gIH1cblxuICBzZXQgcXVpY2tGaWx0ZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB2YWx1ZSA9IFV0aWwucGFyc2VCb29sZWFuKFN0cmluZyh2YWx1ZSkpO1xuICAgIHRoaXMuX3F1aWNrRmlsdGVyID0gdmFsdWU7XG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5maWx0ZXIgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBxdWlja0ZpbHRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcXVpY2tGaWx0ZXI7XG4gIH1cblxuICBzZXQgZmlsdGVyQ2FzZVNlbnNpdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2ZpbHRlckNhc2VTZW5zaXRpdmUgPSBCb29sZWFuQ29udmVydGVyKHZhbHVlKTtcbiAgICBpZiAodGhpcy5fb1RhYmxlT3B0aW9ucykge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5maWx0ZXJDYXNlU2Vuc2l0aXZlID0gdGhpcy5fZmlsdGVyQ2FzZVNlbnNpdGl2ZTtcbiAgICB9XG4gIH1cblxuICBnZXQgZmlsdGVyQ2FzZVNlbnNpdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyQ2FzZVNlbnNpdGl2ZTtcbiAgfVxuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBpbnNlcnRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcmVmcmVzaEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBkZWxldGVCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZml4ZWRIZWFkZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd1RpdGxlOiBib29sZWFuID0gZmFsc2U7XG4gIGVkaXRpb25Nb2RlOiBzdHJpbmcgPSBDb2Rlcy5FRElUSU9OX01PREVfTk9ORTtcbiAgc2VsZWN0aW9uTW9kZTogc3RyaW5nID0gQ29kZXMuU0VMRUNUSU9OX01PREVfTVVMVElQTEU7XG5cbiAgcHJvdGVjdGVkIF9ob3Jpem9udGFsU2Nyb2xsID0gZmFsc2U7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzZXQgaG9yaXpvbnRhbFNjcm9sbCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2hvcml6b250YWxTY3JvbGwgPSBCb29sZWFuQ29udmVydGVyKHZhbHVlKTtcbiAgICB0aGlzLnJlZnJlc2hDb2x1bW5zV2lkdGhGcm9tT3JpZ2luYWxEZWZpbml0aW9uKCk7XG4gIH1cblxuICBnZXQgaG9yaXpvbnRhbFNjcm9sbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faG9yaXpvbnRhbFNjcm9sbDtcbiAgfVxuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzaG93UGFnaW5hdG9yRmlyc3RMYXN0QnV0dG9uczogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBhdXRvQWxpZ25UaXRsZXM6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgbXVsdGlwbGVTb3J0OiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIG9yZGVyYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICByZXNpemFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgYXV0b0FkanVzdDogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBncm91cGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZXhwYW5kR3JvdXBzU2FtZUxldmVsOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGNvbGxhcHNlR3JvdXBlZENvbHVtbnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHZpcnR1YWxTY3JvbGw6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgY29udGV4dE1lbnU6IGJvb2xlYW4gPSB0cnVlO1xuICAvLyBNYWludGFpbmluZyB0aGlzIGdldHRlciB0byBhbGxvdyBjb21wb25lbnQgZXh0ZW5zaW9ucyAoYXZvaWRpbmcgYSBicmVha2luZyBjaGFuZ2UpXG4gIGdldCBlbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9lbmFibGVkO1xuICB9XG4gIHByb3RlY3RlZCBfc2VsZWN0QWxsQ2hlY2tib3hWaXNpYmxlOiBib29sZWFuO1xuICBzZXQgc2VsZWN0QWxsQ2hlY2tib3hWaXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2VsZWN0QWxsQ2hlY2tib3hWaXNpYmxlID0gQm9vbGVhbkNvbnZlcnRlcih2YWx1ZSk7XG4gICAgaWYgKHRoaXMuc3RhdGUpIHtcbiAgICAgIHRoaXMuX3NlbGVjdEFsbENoZWNrYm94VmlzaWJsZSA9IEJvb2xlYW5Db252ZXJ0ZXIodGhpcy5zdGF0ZS5zZWxlY3RDb2x1bW5WaXNpYmxlKTtcbiAgICB9XG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udmlzaWJsZSA9IHRoaXMuX3NlbGVjdEFsbENoZWNrYm94VmlzaWJsZTtcbiAgICB0aGlzLmluaXRpYWxpemVDaGVja2JveENvbHVtbigpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdEFsbENoZWNrYm94VmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0QWxsQ2hlY2tib3hWaXNpYmxlO1xuICB9XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGtlZXBTZWxlY3RlZEl0ZW1zOiBib29sZWFuID0gdHJ1ZTtcblxuICBwdWJsaWMgZXhwb3J0TW9kZTogc3RyaW5nID0gQ29kZXMuRVhQT1JUX01PREVfVklTSUJMRTtcbiAgcHVibGljIGV4cG9ydFNlcnZpY2VUeXBlOiBzdHJpbmc7XG4gIHB1YmxpYyB2aXNpYmxlRXhwb3J0RGlhbG9nQnV0dG9uczogc3RyaW5nO1xuICBwdWJsaWMgZGFvVGFibGU6IE9UYWJsZURhbyB8IG51bGw7XG4gIHB1YmxpYyBkYXRhU291cmNlOiBPVGFibGVEYXRhU291cmNlIHwgbnVsbDtcbiAgcHVibGljIHZpc2libGVDb2x1bW5zOiBzdHJpbmc7XG4gIHB1YmxpYyBzZWFyY2hlYWJsZUNvbHVtbnM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBkZWZhdWx0VmlzaWJsZUNvbHVtbnM6IHN0cmluZztcbiAgcHVibGljIGdyb3VwZWRDb2x1bW5zOiBzdHJpbmc7XG4gIHB1YmxpYyBub25IaWRhYmxlQ29sdW1uczogc3RyaW5nO1xuXG4gIHB1YmxpYyBzb3J0Q29sdW1uczogc3RyaW5nO1xuICBwdWJsaWMgZ3JvdXBlZENvbHVtblR5cGVzOiBPR3JvdXBlZENvbHVtblR5cGVzW10gPSBbXTtcbiAgcHVibGljIHJvd0NsYXNzOiAocm93RGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAvKnBhcnNlZCBpbnB1dHMgdmFyaWFibGVzICovXG4gIHByb3RlY3RlZCBfdmlzaWJsZUNvbEFycmF5OiBzdHJpbmdbXSA9IFtdO1xuXG4gIGdldCB2aXNpYmxlQ29sQXJyYXkoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlQ29sQXJyYXk7XG4gIH1cblxuICBzZXQgdmlzaWJsZUNvbEFycmF5KGFyZzogYW55W10pIHtcbiAgICBjb25zdCBwZXJtaXNzaW9uc0Jsb2NrZWQgPSB0aGlzLnBlcm1pc3Npb25zICYmIHRoaXMucGVybWlzc2lvbnMuY29sdW1ucyA/IHRoaXMucGVybWlzc2lvbnMuY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC52aXNpYmxlID09PSBmYWxzZSkubWFwKGNvbCA9PiBjb2wuYXR0cikgOiBbXTtcbiAgICBjb25zdCBwZXJtaXNzaW9uc0NoZWNrZWQgPSBhcmcuZmlsdGVyKHZhbHVlID0+IHBlcm1pc3Npb25zQmxvY2tlZC5pbmRleE9mKHZhbHVlKSA9PT0gLTEpO1xuICAgIHRoaXMuX3Zpc2libGVDb2xBcnJheSA9IHBlcm1pc3Npb25zQ2hlY2tlZDtcbiAgICBpZiAodGhpcy5fb1RhYmxlT3B0aW9ucykge1xuICAgICAgY29uc3QgY29udGFpbnNTZWxlY3Rpb25Db2wgPSB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zLmluZGV4T2YoQ29kZXMuTkFNRV9DT0xVTU5fU0VMRUNUKSAhPT0gLTE7XG4gICAgICBjb25zdCBjb250YWluc0V4cGFuZGFibGVDb2wgPSB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zLmluZGV4T2YoQ29kZXMuTkFNRV9DT0xVTU5fRVhQQU5EQUJMRSkgIT09IC0xO1xuICAgICAgaWYgKGNvbnRhaW5zU2VsZWN0aW9uQ29sKSB7XG4gICAgICAgIHRoaXMuX3Zpc2libGVDb2xBcnJheS51bnNoaWZ0KENvZGVzLk5BTUVfQ09MVU1OX1NFTEVDVCk7XG4gICAgICB9XG4gICAgICBpZiAoY29udGFpbnNTZWxlY3Rpb25Db2wgJiYgY29udGFpbnNFeHBhbmRhYmxlQ29sKSB7XG4gICAgICAgIHRoaXMuX3Zpc2libGVDb2xBcnJheSA9IFt0aGlzLl92aXNpYmxlQ29sQXJyYXlbMF1dLmNvbmNhdChDb2Rlcy5OQU1FX0NPTFVNTl9FWFBBTkRBQkxFLCB0aGlzLl92aXNpYmxlQ29sQXJyYXkuc3BsaWNlKDEpKTtcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGNvbnRhaW5zRXhwYW5kYWJsZUNvbCkge1xuICAgICAgICAgIHRoaXMuX3Zpc2libGVDb2xBcnJheS51bnNoaWZ0KENvZGVzLk5BTUVfQ09MVU1OX0VYUEFOREFCTEUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zID0gdGhpcy5fdmlzaWJsZUNvbEFycmF5O1xuICAgICAgdGhpcy5ncm91cGluZ0hlYWRlcnNSb3dzID0gdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy5tYXAodmlzaWJsZUNvbCA9PiAnZ3JvdXBIZWFkZXItJyArIHZpc2libGVDb2wpO1xuICAgIH1cbiAgfVxuXG4gIHNvcnRDb2xBcnJheTogU1FMT3JkZXJbXSA9IFtdO1xuICAvKmVuZCBvZiBwYXJzZWQgaW5wdXRzIHZhcmlhYmxlcyAqL1xuXG4gIHByb3RlY3RlZCB0YWJHcm91cENvbnRhaW5lcjogTWF0VGFiR3JvdXA7XG4gIHByb3RlY3RlZCB0YWJDb250YWluZXI6IE1hdFRhYjtcbiAgdGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwcm90ZWN0ZWQgcGVuZGluZ1F1ZXJ5OiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBwZW5kaW5nUXVlcnlGaWx0ZXIgPSB1bmRlZmluZWQ7XG5cbiAgcHJvdGVjdGVkIHNldFN0YXRpY0RhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGF2b2lkUXVlcnlDb2x1bW5zOiBBcnJheTxhbnk+ID0gW107XG4gIHByb3RlY3RlZCBhc3luY0xvYWRDb2x1bW5zOiBBcnJheTxhbnk+ID0gW107XG4gIHByb3RlY3RlZCBhc3luY0xvYWRTdWJzY3JpcHRpb25zOiBvYmplY3QgPSB7fTtcblxuICBwcm90ZWN0ZWQgcXVlcnlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIGNvbnRleHRNZW51U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCB2aXJ0dWFsU2Nyb2xsU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBjaGVja1ZpZXdwb3J0U2l6ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgZmluaXNoUXVlcnlTdWJzY3JpcHRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgb25Sb3dTZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBvblJvd0Rlc2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgb25Sb3dEZWxldGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIG9uUmVpbml0aWFsaXplOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIG9uQ29udGVudENoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBvbkZpbHRlckJ5Q29sdW1uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwcm90ZWN0ZWQgc2VsZWN0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHVibGljIG9UYWJsZUZpbHRlckJ5Q29sdW1uRGF0YURpYWxvZ0NvbXBvbmVudDogT1RhYmxlRmlsdGVyQnlDb2x1bW5EYXRhRGlhbG9nQ29tcG9uZW50O1xuICBwdWJsaWMgb1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudDogT1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudDtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNob3dUb3RhbHNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBzaG93VG90YWxzOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5zaG93VG90YWxzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2FkaW5nU29ydGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGxvYWRpbmdTb3J0aW5nOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5sb2FkaW5nU29ydGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9hZGluZ1Njcm9sbFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGxvYWRpbmdTY3JvbGw6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmxvYWRpbmdTY3JvbGxTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHB1YmxpYyBzaG93TG9hZGluZzogT2JzZXJ2YWJsZTxib29sZWFuPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMubG9hZGluZy5waXBlKGRlYm91bmNlVGltZSgyMDApKSwgLy8gYXZvaWQgZGlzcGxheWluZyBsb2FkaW5nIHNwaW5uZXIgZm9yIGEgdmVyeSBzaG9ydCB0aW1lXG4gICAgdGhpcy5sb2FkaW5nU29ydGluZyxcbiAgICB0aGlzLmxvYWRpbmdTY3JvbGxcbiAgXSkucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycikgPT4gcHJldlswXSA9PT0gY3VyclswXSAmJiBwcmV2WzFdID09PSBjdXJyWzFdICYmIHByZXZbMl0gPT09IGN1cnJbMl0pLCAvLyBhdm9pZCBlbWl0dGluZyBzYW1lIHZhbHVlIG11bHRpcGxlIHRpbWVzXG4gICAgbWFwKChyZXM6IGJvb2xlYW5bXSkgPT4gcmVzLnNvbWUociA9PiByKSlcbiAgKTtcblxuICBwdWJsaWMgb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudDogT1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudDtcbiAgcHVibGljIHNob3dGaXJzdEluc2VydGFibGVSb3c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHNob3dMYXN0SW5zZXJ0YWJsZVJvdzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZXhwYW5kYWJsZUl0ZW06IFNlbGVjdGlvbk1vZGVsPGFueT47XG5cbiAgcHJvdGVjdGVkIGNsaWNrVGltZXI7XG4gIHByb3RlY3RlZCBjbGlja0RlbGF5ID0gMjAwO1xuICBwcm90ZWN0ZWQgY2xpY2tQcmV2ZW50ID0gZmFsc2U7XG4gIHB1YmxpYyBlZGl0aW5nQ2VsbDogYW55O1xuICBwcm90ZWN0ZWQgZWRpdGluZ1JvdzogYW55O1xuXG4gIHNldCBjdXJyZW50UGFnZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuX2N1cnJlbnRQYWdlID0gdmFsO1xuICAgIGlmICh0aGlzLnBhZ2luYXRvcikge1xuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gdmFsO1xuICAgICAgaWYgKHRoaXMubWF0cGFnaW5hdG9yKSB7XG4gICAgICAgIHRoaXMubWF0cGFnaW5hdG9yLnBhZ2VJbmRleCA9IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgY3VycmVudFBhZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFBhZ2U7XG4gIH1cblxuICBwdWJsaWMgb1RhYmxlUXVpY2tGaWx0ZXJDb21wb25lbnQ6IE9UYWJsZVF1aWNrZmlsdGVyO1xuICBwcm90ZWN0ZWQgc29ydFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgb25SZW5kZXJlZERhdGFDaGFuZ2U6IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIHByZXZpb3VzUmVuZGVyZXJEYXRhO1xuXG4gIHF1aWNrRmlsdGVyQ2FsbGJhY2s6IFF1aWNrRmlsdGVyRnVuY3Rpb247XG4gIGRpc2FibGVTZWxlY3Rpb25GdW5jdGlvbjogRGlzYWJsZVNlbGVjdGlvbkZ1bmN0aW9uO1xuXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlQm9keScpXG4gIHByb3RlY3RlZCB0YWJsZUJvZHlFbDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndGFibGVIZWFkZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgdGFibGVIZWFkZXJFbDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndGFibGVUb29sYmFyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHRhYmxlVG9vbGJhckVsOiBFbGVtZW50UmVmO1xuXG4gIGhvcml6b250YWxTY3JvbGxlZDogYm9vbGVhbjtcbiAgcHVibGljIG9uVXBkYXRlU2Nyb2xsZWRTdGF0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyByb3dXaWR0aDtcblxuICBzdG9yZVBhZ2luYXRpb25TdGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qIEluIHRoZSBjYXNlIHRoZSB0YWJsZSBoYXZlbnQgcGFnaW5hdGlvbkNvbnRyb2wgYW5kIHBhZ2VhYmxlLCB0aGUgdGFibGUgaGFzIHBhZ2luYXRpb24gdmlydHVhbCovXG4gIHBhZ2VTY3JvbGxWaXJ0dWFsID0gMTtcblxuICBwdWJsaWMgc3RhdGljIERFRkFVTFRfUk9XX0hFSUdIVCA9IDM2O1xuICBwcm90ZWN0ZWQgcGVybWlzc2lvbnM6IE9UYWJsZVBlcm1pc3Npb25zO1xuICBtYXRNZW51OiBNYXRNZW51O1xuXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlTWVudScpXG4gIG9UYWJsZU1lbnU6IE9UYWJsZU1lbnU7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihPVGFibGVPcHRpb25Db21wb25lbnQpXG4gIHRhYmxlT3B0aW9uczogUXVlcnlMaXN0PE9UYWJsZU9wdGlvbkNvbXBvbmVudD47XG5cbiAgb1RhYmxlQnV0dG9uczogT1RhYmxlQnV0dG9ucztcblxuICBAQ29udGVudENoaWxkcmVuKE9UYWJsZUJ1dHRvbkNvbXBvbmVudClcbiAgdGFibGVCdXR0b25zOiBRdWVyeUxpc3Q8T1RhYmxlQnV0dG9uPjtcblxuICBAQ29udGVudENoaWxkKCdvLXRhYmxlLXF1aWNrZmlsdGVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgcXVpY2tmaWx0ZXJDb250ZW50Q2hpbGQ6IE9UYWJsZVF1aWNrZmlsdGVyO1xuXG5cbiAgQENvbnRlbnRDaGlsZHJlbihPVGFibGVFeHBvcnRCdXR0b25Db21wb25lbnQpXG4gIGV4cG9ydE9wdHNUZW1wbGF0ZTogUXVlcnlMaXN0PE9UYWJsZUV4cG9ydEJ1dHRvbkNvbXBvbmVudD5cblxuICBAQ29udGVudENoaWxkKE9UYWJsZUNvbHVtblNlbGVjdEFsbERpcmVjdGl2ZSlcbiAgdGFibGVDb2x1bW5TZWxlY3RBbGxDb250ZW50Q2hpbGQ6IE9UYWJsZUNvbHVtblNlbGVjdEFsbERpcmVjdGl2ZTtcblxuXG5cbiAgcHVibGljIGdyb3VwZWRDb2x1bW5zQXJyYXk6IHN0cmluZ1tdID0gW107XG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbXSlcbiAgdXBkYXRlU2Nyb2xsZWRTdGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ob3Jpem9udGFsU2Nyb2xsKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgYm9keVdpZHRoID0gdGhpcy50YWJsZUJvZHlFbC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgICBjb25zdCBzY3JvbGxXaWR0aCA9IHRoaXMudGFibGVCb2R5RWwubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICAgICAgY29uc3QgcHJldmlvdXNTdGF0ZSA9IHRoaXMuaG9yaXpvbnRhbFNjcm9sbGVkO1xuICAgICAgICB0aGlzLmhvcml6b250YWxTY3JvbGxlZCA9IHNjcm9sbFdpZHRoID4gYm9keVdpZHRoO1xuICAgICAgICBpZiAocHJldmlvdXNTdGF0ZSAhPT0gdGhpcy5ob3Jpem9udGFsU2Nyb2xsZWQpIHtcbiAgICAgICAgICB0aGlzLm9uVXBkYXRlU2Nyb2xsZWRTdGF0ZS5lbWl0KHRoaXMuaG9yaXpvbnRhbFNjcm9sbGVkKTtcbiAgICAgICAgfVxuICAgICAgfSwgMCk7XG4gICAgfVxuICAgIHRoaXMuY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfaXNDb2x1bW5GaWx0ZXJzQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZ2V0IGlzQ29sdW1uRmlsdGVyc0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNDb2x1bW5GaWx0ZXJzQWN0aXZlO1xuICB9XG5cbiAgc2V0IGlzQ29sdW1uRmlsdGVyc0FjdGl2ZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pc0NvbHVtbkZpbHRlcnNBY3RpdmUgPSB2YWw7XG4gIH1cblxuICBncm91cGluZ0hlYWRlcnNSb3dzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHB1YmxpYyBvVGFibGVDb2x1bW5zR3JvdXBpbmdDb21wb25lbnQ6IE9UYWJsZUNvbHVtbnNHcm91cGluZztcblxuICBAQ29udGVudENoaWxkKE9UYWJsZUNvbnRleHRNZW51Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBjb250ZXh0TWVudUNvbnRlbnRDaGlsZDogT1RhYmxlQ29udGV4dE1lbnVDb21wb25lbnQ7XG5cbiAgcHJvdGVjdGVkIHRyaWdnZXJTZWxlY3Rpb25FdmVudHM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBWaWV3Q2hpbGRyZW4oTWF0VG9vbHRpcClcbiAgdG9vbHRpcDogUXVlcnlMaXN0PE1hdFRvb2x0aXA+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJvdGVjdGVkIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBPRm9ybUNvbXBvbmVudCkpIGZvcm06IE9Gb3JtQ29tcG9uZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoVklSVFVBTF9TQ1JPTExfU1RSQVRFR1kpIHB1YmxpYyByZWFkb25seSBzY3JvbGxTdHJhdGVneTogT1RhYmxlVmlydHVhbFNjcm9sbFN0cmF0ZWd5XG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yLCBlbFJlZiwgZm9ybSk7XG5cbiAgICB0aGlzLl9vVGFibGVPcHRpb25zID0gbmV3IERlZmF1bHRPVGFibGVPcHRpb25zKCk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy50YWJHcm91cENvbnRhaW5lciA9IHRoaXMuaW5qZWN0b3IuZ2V0KE1hdFRhYkdyb3VwKTtcbiAgICAgIHRoaXMudGFiQ29udGFpbmVyID0gdGhpcy5pbmplY3Rvci5nZXQoTWF0VGFiKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gRG8gbm90aGluZyBkdWUgdG8gbm90IGFsd2F5cyBpcyBjb250YWluZWQgb24gdGFiLlxuICAgIH1cblxuICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoU25hY2tCYXJTZXJ2aWNlKTtcbiAgICB0aGlzLmdldEluamVjdGlvblRva2VuQ29uZmlnKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEluamVjdGlvblRva2VuQ29uZmlnKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvVGFibGVHbG9iYWxDb25maWcgPSB0aGlzLmluamVjdG9yLmdldChPX1RBQkxFX0dMT0JBTF9DT05GSUcpO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG9UYWJsZUdsb2JhbENvbmZpZy5hdXRvQWRqdXN0KSkge1xuICAgICAgICB0aGlzLmF1dG9BZGp1c3QgPSBvVGFibGVHbG9iYWxDb25maWcuYXV0b0FkanVzdDtcbiAgICAgIH07XG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQob1RhYmxlR2xvYmFsQ29uZmlnLmF1dG9BbGlnblRpdGxlcykpIHtcbiAgICAgICAgdGhpcy5hdXRvQWxpZ25UaXRsZXMgPSBvVGFibGVHbG9iYWxDb25maWcuYXV0b0FsaWduVGl0bGVzO1xuICAgICAgfVxuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG9UYWJsZUdsb2JhbENvbmZpZy5maWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQpKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0ID0gb1RhYmxlR2xvYmFsQ29uZmlnLmZpbHRlckNvbHVtbkFjdGl2ZUJ5RGVmYXVsdDtcbiAgICAgIH1cbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChvVGFibGVHbG9iYWxDb25maWcuZWRpdGlvbk1vZGUpICYmIENvZGVzLmlzVmFsaWRFZGl0aW9uTW9kZShvVGFibGVHbG9iYWxDb25maWcuZWRpdGlvbk1vZGUpKSB7XG4gICAgICAgIHRoaXMuZWRpdGlvbk1vZGUgPSBvVGFibGVHbG9iYWxDb25maWcuZWRpdGlvbk1vZGU7XG4gICAgICB9XG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQob1RhYmxlR2xvYmFsQ29uZmlnLmRldGFpbE1vZGUgJiYgQ29kZXMuaXNWYWxpZERldGFpbE1vZGUob1RhYmxlR2xvYmFsQ29uZmlnLmRldGFpbE1vZGUpKSkge1xuICAgICAgICB0aGlzLmRldGFpbE1vZGUgPSBvVGFibGVHbG9iYWxDb25maWcuZGV0YWlsTW9kZTtcbiAgICAgIH1cblxuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG9UYWJsZUdsb2JhbENvbmZpZy5yb3dIZWlnaHQpICYmIENvZGVzLmlzVmFsaWRSb3dIZWlnaHQob1RhYmxlR2xvYmFsQ29uZmlnLnJvd0hlaWdodCkpIHtcbiAgICAgICAgdGhpcy5yb3dIZWlnaHQgPSBvVGFibGVHbG9iYWxDb25maWcucm93SGVpZ2h0O1xuICAgICAgfTtcblxuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG9UYWJsZUdsb2JhbENvbmZpZy5zaG93Q2hhcnRzT25EZW1hbmRPcHRpb24pKSB7XG4gICAgICAgIHRoaXMuc2hvd0NoYXJ0c09uRGVtYW5kT3B0aW9uID0gb1RhYmxlR2xvYmFsQ29uZmlnLnNob3dDaGFydHNPbkRlbWFuZE9wdGlvbjtcbiAgICAgIH07XG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQob1RhYmxlR2xvYmFsQ29uZmlnLnNob3dSZXBvcnRPbkRlbWFuZE9wdGlvbikpIHtcbiAgICAgICAgdGhpcy5zaG93UmVwb3J0T25EZW1hbmRPcHRpb24gPSBvVGFibGVHbG9iYWxDb25maWcuc2hvd1JlcG9ydE9uRGVtYW5kT3B0aW9uO1xuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gRG8gbm90aGluZyBiZWNhdXNlIGlzIG9wdGlvbmFsXG4gICAgfVxuXG4gIH1cblxuICBnZXQgc3RhdGUoKTogT1RhYmxlQ29tcG9uZW50U3RhdGVDbGFzcyB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50U3RhdGVTZXJ2aWNlLnN0YXRlO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgaWYgKHRoaXMub1RhYmxlQnV0dG9ucyAmJiB0aGlzLnRhYmxlQnV0dG9ucyAmJiB0aGlzLnRhYmxlQnV0dG9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLm9UYWJsZUJ1dHRvbnMucmVnaXN0ZXJCdXR0b25zKHRoaXMudGFibGVCdXR0b25zLnRvQXJyYXkoKSk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHN1cGVyLmFmdGVyVmlld0luaXQoKTtcbiAgICB0aGlzLmluaXRUYWJsZUFmdGVyVmlld0luaXQoKTtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51KSB7XG4gICAgICB0aGlzLm1hdE1lbnUgPSB0aGlzLm9UYWJsZU1lbnUubWF0TWVudTtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5yZWdpc3Rlck9wdGlvbnModGhpcy50YWJsZU9wdGlvbnMudG9BcnJheSgpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50YWJsZVJvd0V4cGFuZGFibGUpIHtcbiAgICAgIHRoaXMuZXhwYW5kYWJsZUl0ZW0gPSBuZXcgU2VsZWN0aW9uTW9kZWw8YW55Pih0aGlzLnRhYmxlUm93RXhwYW5kYWJsZS5tdWx0aXBsZSwgW10pO1xuICAgICAgdGhpcy5jcmVhdGVFeHBhbmRhYmxlQ29sdW1uKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGlmICh0aGlzLnRhYmxlQ29sdW1uU2VsZWN0QWxsQ29udGVudENoaWxkKSB7XG4gICAgICAvL1xuICAgICAgdGhpcy5zZXRDdXN0b21EZWZpbml0aW9uSW5TZWxlY3RDb2x1bW4odGhpcy50YWJsZUNvbHVtblNlbGVjdEFsbENvbnRlbnRDaGlsZClcbiAgICB9XG4gIH1cblxuICBzZXRDdXN0b21EZWZpbml0aW9uSW5TZWxlY3RDb2x1bW4oZGVmaW5pdGlvbjogT1RhYmxlQ29sdW1uU2VsZWN0QWxsRGlyZWN0aXZlKSB7XG4gICAgaWYgKGRlZmluaXRpb24udGl0bGUpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnRpdGxlID0gZGVmaW5pdGlvbi50aXRsZTtcbiAgICB9XG4gICAgaWYgKGRlZmluaXRpb24ud2lkdGgpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLndpZHRoID0gZGVmaW5pdGlvbi53aWR0aDtcbiAgICB9XG4gICAgaWYgKGRlZmluaXRpb24ubWluV2lkdGgpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLm1pbldpZHRoID0gZGVmaW5pdGlvbi5taW5XaWR0aDtcbiAgICB9XG4gICAgaWYgKGRlZmluaXRpb24ubWF4V2lkdGgpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLm1heFdpZHRoID0gZGVmaW5pdGlvbi5tYXhXaWR0aDtcbiAgICB9XG4gICAgaWYgKGRlZmluaXRpb24ucmVzaXphYmxlKSB7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi5yZXNpemFibGUgPSBkZWZpbml0aW9uLnJlc2l6YWJsZTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiB7IFtwcm9wTmFtZTogc3RyaW5nXTogU2ltcGxlQ2hhbmdlIH0pOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY2hhbmdlcy5hdXRvQWRqdXN0KSAmJiBjaGFuZ2VzLmF1dG9BZGp1c3QuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLmF1dG9BZGp1c3QucHJldmlvdXNWYWx1ZSkge1xuICAgICAgdGhpcy5hdXRvQWRqdXN0ID0gY2hhbmdlcy5hdXRvQWRqdXN0LmN1cnJlbnRWYWx1ZTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVIZWFkZXJBbmRGb290ZXJTdGlja3lQb3NpdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICBjb25zdCB6b25lID0gdGhpcy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICAgIHRoaXMudmlydHVhbFNjcm9sbFN1YnNjcmlwdGlvbiA9IHRoaXMuc2Nyb2xsU3RyYXRlZ3kuc3RpY2t5Q2hhbmdlLnBpcGUoXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmZpeGVkSGVhZGVyIHx8IHRoaXMuaGFzSW5zZXJ0YWJsZVJvdygpKVxuICAgICAgKS5zdWJzY3JpYmUoeCA9PiB7XG4gICAgICAgIHpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzdGlja3lIZWFkZXJTZWxlY3RvcikuZm9yRWFjaCgoZWw6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBlbC5zdHlsZS50b3AgPSAtIHggKyAncHgnO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHN0aWNreUZvb3RlclNlbGVjdG9yKS5mb3JFYWNoKChlbDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGVsLnN0eWxlLmJvdHRvbSA9IHggKyAncHgnO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVFeHBhbmRhYmxlQ29sdW1uKCkge1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuZXhwYW5kYWJsZUNvbHVtbiA9IG5ldyBPQ29sdW1uKCk7XG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5leHBhbmRhYmxlQ29sdW1uLnZpc2libGUgPSB0aGlzLnRhYmxlUm93RXhwYW5kYWJsZSAmJiB0aGlzLnRhYmxlUm93RXhwYW5kYWJsZS5leHBhbmRhYmxlQ29sdW1uVmlzaWJsZTtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlRXhwYW5kZWRDb2x1bW4oKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuXG4gICAgLy9kZXRhY2ggYWxsIHBvcnRhIGhvc3QgY3JlYXRlZFxuICAgIGlmICh0aGlzLnBvcnRhbEhvc3QpIHtcbiAgICAgIHRoaXMucG9ydGFsSG9zdC5mb3JFYWNoKHggPT4geC5kZXRhY2goKSk7XG4gICAgfVxuICAgIHRoaXMuZGVzdHJveSgpO1xuICB9XG5cbiAgZ2V0U3VmZml4Q29sdW1uSW5zZXJ0YWJsZSgpIHtcbiAgICByZXR1cm4gQ29kZXMuU1VGRklYX0NPTFVNTl9JTlNFUlRBQkxFO1xuICB9XG5cbiAgZ2V0QWN0aW9uc1Blcm1pc3Npb25zKCk6IE9QZXJtaXNzaW9uc1tdIHtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9ucyA/ICh0aGlzLnBlcm1pc3Npb25zLmFjdGlvbnMgfHwgW10pIDogW107XG4gIH1cblxuICBnZXRNZW51UGVybWlzc2lvbnMoKTogT1RhYmxlTWVudVBlcm1pc3Npb25zIHtcbiAgICBjb25zdCByZXN1bHQ6IE9UYWJsZU1lbnVQZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMgPyB0aGlzLnBlcm1pc3Npb25zLm1lbnUgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdCA/IHJlc3VsdCA6IHtcbiAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgaXRlbXM6IFtdXG4gICAgfTtcbiAgfVxuXG4gIGdldE9Db2x1bW5QZXJtaXNzaW9ucyhhdHRyOiBzdHJpbmcpOiBPUGVybWlzc2lvbnMge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLnBlcm1pc3Npb25zID8gKHRoaXMucGVybWlzc2lvbnMuY29sdW1ucyB8fCBbXSkgOiBbXTtcbiAgICByZXR1cm4gY29sdW1ucy5maW5kKGNvbXAgPT4gY29tcC5hdHRyID09PSBhdHRyKSB8fCB7IGF0dHI6IGF0dHIsIGVuYWJsZWQ6IHRydWUsIHZpc2libGU6IHRydWUgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRBY3Rpb25QZXJtaXNzaW9ucyhhdHRyOiBzdHJpbmcpOiBPUGVybWlzc2lvbnMge1xuICAgIGNvbnN0IGFjdGlvbnNQZXJtID0gdGhpcy5wZXJtaXNzaW9ucyA/ICh0aGlzLnBlcm1pc3Npb25zLmFjdGlvbnMgfHwgW10pIDogW107XG4gICAgY29uc3QgcGVybWlzc2lvbnM6IE9QZXJtaXNzaW9ucyA9IGFjdGlvbnNQZXJtLmZpbmQocCA9PiBwLmF0dHIgPT09IGF0dHIpO1xuICAgIHJldHVybiBwZXJtaXNzaW9ucyB8fCB7XG4gICAgICBhdHRyOiBhdHRyLFxuICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgIGVuYWJsZWQ6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oYXR0cjogc3RyaW5nKSB7XG4gICAgY29uc3QgYWN0aW9uc1Blcm0gPSB0aGlzLnBlcm1pc3Npb25zID8gKHRoaXMucGVybWlzc2lvbnMuYWN0aW9ucyB8fCBbXSkgOiBbXTtcbiAgICBjb25zdCBwZXJtaXNzaW9uczogT1Blcm1pc3Npb25zID0gYWN0aW9uc1Blcm0uZmluZChwID0+IHAuYXR0ciA9PT0gYXR0cik7XG4gICAgY29uc3QgZW5hYmxlZFBlcm1pc2lvbiA9IFBlcm1pc3Npb25zVXRpbHMuY2hlY2tFbmFibGVkUGVybWlzc2lvbihwZXJtaXNzaW9ucyk7XG4gICAgaWYgKCFlbmFibGVkUGVybWlzaW9uKSB7XG4gICAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuKCdNRVNTQUdFUy5PUEVSQVRJT05fTk9UX0FMTE9XRURfUEVSTUlTU0lPTicpO1xuICAgIH1cbiAgICByZXR1cm4gZW5hYmxlZFBlcm1pc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2Qgd2hhdCBpbml0aWFsaXplIHZhcnMgYW5kIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGluaXRpYWxpemUoKTogYW55IHtcbiAgICBzdXBlci5pbml0aWFsaXplKCk7XG5cbiAgICB0aGlzLl9vVGFibGVPcHRpb25zID0gbmV3IERlZmF1bHRPVGFibGVPcHRpb25zKCk7XG4gICAgaWYgKHRoaXMudGFiR3JvdXBDb250YWluZXIgJiYgdGhpcy50YWJDb250YWluZXIpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJUYWJMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHRoaXMucmVnaXN0ZXJDbGlja0xpc3RlbmVyKCk7XG4gICAgdGhpcy5yZWdpc3RlckRibENsaWNrTGlzdGVuZXIoKTtcbiAgICAvLyBJbml0aWFsaXplIHBhcmFtcyBvZiB0aGUgdGFibGVcbiAgICB0aGlzLmluaXRpYWxpemVQYXJhbXMoKTtcblxuICAgIHRoaXMuaW5pdGlhbGl6ZURhbygpO1xuXG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldFRhYmxlUGVybWlzc2lvbnModGhpcy5vYXR0ciwgdGhpcy5hY3RSb3V0ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVnaXN0ZXJDbGlja0xpc3RlbmVyKCkge1xuICAgIGlmICh0aGlzLmNsaWNrU3ViamVjdFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5jbGlja1N1YmplY3RTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5jbGlja1N1YmplY3RTdWJzY3JpcHRpb24gPSB0aGlzLmNsaWNrU3ViamVjdFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuY2xpY2tEZWxheSkpIC8vIEVzcGVyYSBlbCB0aWVtcG8gY29uZmlndXJhZG8gYW50ZXMgZGUgZWplY3V0YXJcbiAgICAgIC5zdWJzY3JpYmUoKHsgcm93LCBjb2x1bW4sIGNlbGxSZWYsIHJvd0luZGV4LCBldmVudCB9KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9lbmFibGVkICYmICF0aGlzLnJlYWRPbmx5ICYmIGNvbHVtbi5lZGl0b3JcbiAgICAgICAgICAmJiAodGhpcy5kZXRhaWxNb2RlICE9PSBDb2Rlcy5ERVRBSUxfTU9ERV9DTElDSylcbiAgICAgICAgICAmJiAodGhpcy5lZGl0aW9uTW9kZSA9PT0gQ29kZXMuRURJVElPTl9NT0RFX0NMSUNLKSkge1xuICAgICAgICAgIHRoaXMuYWN0aXZhdGVDb2x1bW5FZGl0aW9uKGNvbHVtbiwgcm93LCBjZWxsUmVmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRvSGFuZGxlQ2xpY2socm93LCBjb2x1bW4uYXR0ciwgcm93SW5kZXgsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVnaXN0ZXJEYmxDbGlja0xpc3RlbmVyKCkge1xuICAgIGlmICh0aGlzLmRiQ2xpY2tTdWJqZWN0U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmRiQ2xpY2tTdWJqZWN0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5kYkNsaWNrU3ViamVjdFN1YnNjcmlwdGlvbiA9IHRoaXMuZGJsY2xpY2tTdWJqZWN0XG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5jbGlja0RlbGF5KSkgLy8gRXNwZXJhIGVsIHRpZW1wbyBjb25maWd1cmFkbyBhbnRlcyBkZSBlamVjdXRhclxuICAgICAgLnN1YnNjcmliZSgoeyByb3csIGNvbHVtbiwgY2VsbFJlZiwgcm93SW5kZXgsIGV2ZW50IH0pID0+IHtcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgICAgICBpZiAodGhpcy5zaG93Tm90aWZpY2F0aW9uT2ZSZWFkT25seSkge1xuICAgICAgICAgICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbignTUVTU0FHRVMuT1BFUkFUSU9OX05PVF9BTExPV0VEX1JFQURPTkxZJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vZW5hYmxlZCAmJiBjb2x1bW4uZWRpdG9yXG4gICAgICAgICAgJiYgKCFDb2Rlcy5pc0RvdWJsZUNsaWNrTW9kZSh0aGlzLmRldGFpbE1vZGUpKVxuICAgICAgICAgICYmIChDb2Rlcy5pc0RvdWJsZUNsaWNrTW9kZSh0aGlzLmVkaXRpb25Nb2RlKSkpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2YXRlQ29sdW1uRWRpdGlvbihjb2x1bW4sIHJvdywgY2VsbFJlZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vbkRvdWJsZUNsaWNrLmVtaXQoeyByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4LCBtb3VzZUV2ZW50OiBldmVudCwgY29sdW1uTmFtZTogY29sdW1uLmF0dHIsIGNlbGw6IHJvd1tjb2x1bW4uYXR0cl0gfSk7XG4gICAgICAgICAgaWYgKHRoaXMub2VuYWJsZWQgJiYgQ29kZXMuaXNEb3VibGVDbGlja01vZGUodGhpcy5kZXRhaWxNb2RlKSkge1xuICAgICAgICAgICAgdGhpcy5zYXZlRGF0YU5hdmlnYXRpb25JbkxvY2FsU3RvcmFnZSgpO1xuICAgICAgICAgICAgdGhpcy52aWV3RGV0YWlsKHJvdyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgcHJvdGVjdGVkIGluaXRpYWxpemVEYW8oKSB7XG4gICAgLy8gQ29uZmlndXJlIGRhbyBtZXRob2RzXG4gICAgY29uc3QgcXVlcnlNZXRob2ROYW1lID0gdGhpcy5wYWdlYWJsZSA/IHRoaXMucGFnaW5hdGVkUXVlcnlNZXRob2QgOiB0aGlzLnF1ZXJ5TWV0aG9kO1xuICAgIGNvbnN0IG1ldGhvZHMgPSB7XG4gICAgICBxdWVyeTogcXVlcnlNZXRob2ROYW1lLFxuICAgICAgdXBkYXRlOiB0aGlzLnVwZGF0ZU1ldGhvZCxcbiAgICAgIGRlbGV0ZTogdGhpcy5kZWxldGVNZXRob2QsXG4gICAgICBpbnNlcnQ6IHRoaXMuaW5zZXJ0TWV0aG9kXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnN0YXRpY0RhdGEpIHtcbiAgICAgIHRoaXMucXVlcnlPbkJpbmQgPSBmYWxzZTtcbiAgICAgIHRoaXMucXVlcnlPbkluaXQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGFvVGFibGUgPSBuZXcgT1RhYmxlRGFvKHVuZGVmaW5lZCwgdGhpcy5lbnRpdHksIG1ldGhvZHMpO1xuICAgICAgdGhpcy5zZXREYXRhQXJyYXkodGhpcy5zdGF0aWNEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25maWd1cmVTZXJ2aWNlKCk7XG4gICAgICB0aGlzLmRhb1RhYmxlID0gbmV3IE9UYWJsZURhbyh0aGlzLmRhdGFTZXJ2aWNlLCB0aGlzLmVudGl0eSwgbWV0aG9kcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHJlaW5pdGlhbGl6ZSB0YWJsZSBhZGRpbmcgb3B0aW9uc1xuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKi9cbiAgcmVpbml0aWFsaXplKG9wdGlvbnM6IE9UYWJsZUluaXRpYWxpemF0aW9uT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBjb25zdCBjbG9uZWRPcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyk7XG4gICAgICBpZiAoY2xvbmVkT3B0cy5oYXNPd25Qcm9wZXJ0eSgnZW50aXR5JykpIHtcbiAgICAgICAgdGhpcy5lbnRpdHkgPSBjbG9uZWRPcHRzLmVudGl0eTtcbiAgICAgIH1cbiAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KCdzZXJ2aWNlJykpIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gY2xvbmVkT3B0cy5zZXJ2aWNlO1xuICAgICAgfVxuICAgICAgaWYgKGNsb25lZE9wdHMuaGFzT3duUHJvcGVydHkoJ2NvbHVtbnMnKSkge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSBjbG9uZWRPcHRzLmNvbHVtbnM7XG4gICAgICB9XG4gICAgICBpZiAoY2xvbmVkT3B0cy5oYXNPd25Qcm9wZXJ0eSgndmlzaWJsZUNvbHVtbnMnKSkge1xuICAgICAgICB0aGlzLnZpc2libGVDb2x1bW5zID0gY2xvbmVkT3B0cy52aXNpYmxlQ29sdW1ucztcbiAgICAgIH1cbiAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KCdkZWZhdWx0VmlzaWJsZUNvbHVtbnMnKSkge1xuICAgICAgICB0aGlzLmRlZmF1bHRWaXNpYmxlQ29sdW1ucyA9IGNsb25lZE9wdHMuZGVmYXVsdFZpc2libGVDb2x1bW5zO1xuICAgICAgfVxuICAgICAgaWYgKGNsb25lZE9wdHMuaGFzT3duUHJvcGVydHkoJ2tleXMnKSkge1xuICAgICAgICB0aGlzLmtleXMgPSBjbG9uZWRPcHRzLmtleXM7XG4gICAgICB9XG4gICAgICBpZiAoY2xvbmVkT3B0cy5oYXNPd25Qcm9wZXJ0eSgnc29ydENvbHVtbnMnKSkge1xuICAgICAgICB0aGlzLnNvcnRDb2x1bW5zID0gY2xvbmVkT3B0cy5zb3J0Q29sdW1ucztcbiAgICAgIH1cbiAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KCdwYXJlbnRLZXlzJykpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRLZXlzID0gY2xvbmVkT3B0cy5wYXJlbnRLZXlzO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2xvbmVkT3B0cy5oYXNPd25Qcm9wZXJ0eSgnZmlsdGVyQ29sdW1ucycpKSB7XG4gICAgICAgIGlmICghdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50KSB7XG4gICAgICAgICAgdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50ID0gbmV3IE9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQodGhpcy5pbmplY3RvciwgdGhpcyk7XG4gICAgICAgICAgdGhpcy5vVGFibGVNZW51Lm9uVmlzaWJsZUZpbHRlck9wdGlvbkNoYW5nZS5uZXh0KHRoaXMuZmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0KTtcbiAgICAgICAgICB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQuY29sdW1ucyA9IGNsb25lZE9wdHMuZmlsdGVyQ29sdW1ucztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQuY29sdW1ucyA9IHRoaXMuc2VhcmNoZWFibGVDb2x1bW5zLmpvaW4oXCI7XCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5kZXN0cm95KCk7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgdGhpcy5zdGF0ZS5yZXNldCh0aGlzLnBhZ2VhYmxlKTtcbiAgICB0aGlzLmluaXRUYWJsZUFmdGVyVmlld0luaXQoKTtcbiAgICB0aGlzLm9uUmVpbml0aWFsaXplLmVtaXQobnVsbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdFRhYmxlQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnBhcnNlVmlzaWJsZUNvbHVtbnMoKTtcbiAgICB0aGlzLnBhcnNlU2VhcmNoZWFibGVDb2x1bW5zKCk7XG4gICAgdGhpcy5zZXREYXRhc291cmNlKCk7XG4gICAgdGhpcy5wYXJzZUdyb3VwZWRDb2x1bW5zKCk7XG4gICAgdGhpcy5wYXJzZUdyb3VwZWRDb2x1bW5UeXBlcygpO1xuICAgIHRoaXMucGFyc2VTb3J0Q29sdW1ucygpO1xuICAgIHRoaXMuc2V0RmlsdGVyc0NvbmZpZ3VyYXRpb24oKTtcbiAgICB0aGlzLmFkZERlZmF1bHRSb3dCdXR0b25zKCk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYmxlQ29sdW1uc0dyb3VwaW5nQ29tcG9uZW50KSkge1xuICAgICAgdGhpcy5zZXRHcm91cENvbHVtbnModGhpcy5vVGFibGVDb2x1bW5zR3JvdXBpbmdDb21wb25lbnQuY29sdW1uc0FycmF5KTtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlcnlPbkluaXQpIHtcbiAgICAgIHRoaXMucXVlcnlEYXRhKCk7XG4gICAgfVxuICB9XG4gIHBhcnNlU2VhcmNoZWFibGVDb2x1bW5zKCkge1xuICAgIHRoaXMuc2VhcmNoZWFibGVDb2x1bW5zID0gdGhpcy52aXNpYmxlQ29sQXJyYXkuZmlsdGVyKGNvbCA9PiB7XG4gICAgICBjb25zdCBvQ29sID0gdGhpcy5nZXRPQ29sdW1uKGNvbCk7XG4gICAgICByZXR1cm4gb0NvbCAmJiBvQ29sLnNlYXJjaGFibGU7XG4gICAgfSlcblxuICB9XG4gIGRlc3Ryb3koKSB7XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIGlmICh0aGlzLnRhYkdyb3VwQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnRhYkdyb3VwQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGlvbkNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc29ydFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zb3J0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9uUmVuZGVyZWREYXRhQ2hhbmdlKSB7XG4gICAgICB0aGlzLm9uUmVuZGVyZWREYXRhQ2hhbmdlLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbnRleHRNZW51U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmNvbnRleHRNZW51U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2hlY2tWaWV3cG9ydFNpemVTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY2hlY2tWaWV3cG9ydFNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zY3JvbGxTdHJhdGVneSkge1xuICAgICAgdGhpcy5zY3JvbGxTdHJhdGVneS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xpY2tTdWJqZWN0U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmNsaWNrU3ViamVjdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRiQ2xpY2tTdWJqZWN0U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmRiQ2xpY2tTdWJqZWN0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXModGhpcy5hc3luY0xvYWRTdWJzY3JpcHRpb25zKS5mb3JFYWNoKGlkeCA9PiB7XG4gICAgICBpZiAodGhpcy5hc3luY0xvYWRTdWJzY3JpcHRpb25zW2lkeF0pIHtcbiAgICAgICAgdGhpcy5hc3luY0xvYWRTdWJzY3JpcHRpb25zW2lkeF0udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdXBkYXRlIHN0b3JlIGxvY2Fsc3RvcmFnZSwgY2FsbCBvZiB0aGUgSUxvY2FsU3RvcmFnZVxuICAgKi9cbiAgZ2V0RGF0YVRvU3RvcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50U3RhdGVTZXJ2aWNlLmdldERhdGFUb1N0b3JlKCk7XG4gIH1cblxuICByZWdpc3RlclF1aWNrRmlsdGVyKGFyZzogYW55KSB7XG4gICAgY29uc3QgcXVpY2tGaWx0ZXIgPSAoYXJnIGFzIE9UYWJsZVF1aWNrZmlsdGVyKTtcbiAgICAvLyBmb3JjaW5nIHF1aWNrRmlsdGVyQ29tcG9uZW50IHRvIGJlIHVuZGVmaW5lZCwgdGFibGUgdXNlcyBvVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudFxuICAgIHRoaXMucXVpY2tGaWx0ZXJDb21wb25lbnQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudCA9IHF1aWNrRmlsdGVyO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50KSkge1xuICAgICAgdGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudC5zZXRWYWx1ZSh0aGlzLnN0YXRlLnF1aWNrRmlsdGVyVmFsdWUsIGZhbHNlKTtcbiAgICAgIHRoaXMucXVpY2tGaWx0ZXJTdWJzY3JpcHRpb24gPSB0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50Lm9uQ2hhbmdlLnN1YnNjcmliZSh2YWwgPT4ge1xuICAgICAgICB0aGlzLm9uU2VhcmNoLmVtaXQodmFsKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyUGFnaW5hdGlvbih2YWx1ZTogT1RhYmxlUGFnaW5hdG9yKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uQ29udHJvbHMgPSB0cnVlO1xuICAgIHRoaXMucGFnaW5hdG9yID0gdmFsdWU7XG4gIH1cblxuICByZWdpc3RlckNvbnRleHRNZW51KHZhbHVlOiBPQ29udGV4dE1lbnVDb21wb25lbnQpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlQ29udGV4dE1lbnUgPSB2YWx1ZTtcbiAgICB0aGlzLmNvbnRleHRNZW51U3Vic2NyaXB0aW9uID0gdGhpcy50YWJsZUNvbnRleHRNZW51Lm9uU2hvdy5zdWJzY3JpYmUoKHBhcmFtczogSU9Db250ZXh0TWVudUNvbnRleHQpID0+IHtcbiAgICAgIHBhcmFtcy5jbGFzcyA9ICdvLXRhYmxlLWNvbnRleHQtbWVudSAnICsgdGhpcy5yb3dIZWlnaHQ7XG4gICAgICBpZiAocGFyYW1zLmRhdGEgJiYgIXRoaXMuaXNSb3dTZWxlY3RlZChwYXJhbXMuZGF0YS5yb3dWYWx1ZSkpIHtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93KHBhcmFtcy5kYXRhLnJvd1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJlZ2lzdGVyRGVmYXVsdENvbHVtbihjb2x1bW46IHN0cmluZykge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLmdldE9Db2x1bW4oY29sdW1uKSkpIHtcbiAgICAgIC8vIGEgZGVmYXVsdCBjb2x1bW4gZGVmaW5pdGlvbiB0cnlpbmcgdG8gcmVwbGFjZSBhbiBhbHJlYWR5IGV4aXN0aW5nIGRlZmluaXRpb25cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29sRGVmOiBPQ29sdW1uID0gdGhpcy5jcmVhdGVPQ29sdW1uKGNvbHVtbiwgdGhpcyk7XG4gICAgdGhpcy5wdXNoT0NvbHVtbkRlZmluaXRpb24oY29sRGVmKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSBhbGwgY29sdW1ucyBhbmQgcHJvcGVydGllcyBpbiB2YXIgY29sdW1uc0FycmF5XG4gICAqIEBwYXJhbSBjb2x1bW5cbiAgICovXG4gIHJlZ2lzdGVyQ29sdW1uKGNvbHVtbjogT1RhYmxlQ29sdW1uQ29tcG9uZW50IHwgT1RhYmxlQ29sdW1uQ2FsY3VsYXRlZENvbXBvbmVudCB8IGFueSkge1xuICAgIGNvbnN0IGNvbHVtbkF0dHIgPSAodHlwZW9mIGNvbHVtbiA9PT0gJ3N0cmluZycpID8gY29sdW1uIDogY29sdW1uLmF0dHI7XG4gICAgY29uc3QgY29sdW1uUGVybWlzc2lvbnM6IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0T0NvbHVtblBlcm1pc3Npb25zKGNvbHVtbkF0dHIpO1xuICAgIGlmICghY29sdW1uUGVybWlzc2lvbnMudmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29sdW1uID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5yZWdpc3RlckRlZmF1bHRDb2x1bW4oY29sdW1uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW5EZWYgPSB0aGlzLmdldE9Db2x1bW4oY29sdW1uLmF0dHIpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb2x1bW5EZWYpICYmIFV0aWwuaXNEZWZpbmVkKGNvbHVtbkRlZi5kZWZpbml0aW9uKSkge1xuICAgICAgLy8gYSBvLXRhYmxlLWNvbHVtbiBkZWZpbml0aW9uIHRyeWluZyB0byByZXBsYWNlIGFuIGFscmVhZHkgZXhpc3Rpbmcgby10YWJsZS1jb2x1bW4gZGVmaW5pdGlvblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbERlZjogT0NvbHVtbiA9IHRoaXMuY3JlYXRlT0NvbHVtbihjb2x1bW4uYXR0ciwgdGhpcywgY29sdW1uKTtcbiAgICBsZXQgY29sdW1uV2lkdGggPSB0aGlzLmdldENvbHVtbldpZHRoRnJvbVN0YXRlKGNvbERlZik7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbHVtbldpZHRoKSkge1xuICAgICAgY29sRGVmLndpZHRoID0gY29sdW1uV2lkdGg7XG4gICAgfVxuICAgIGlmIChjb2x1bW4gJiYgKGNvbHVtbi5hc3luY0xvYWQgfHwgY29sdW1uLnR5cGUgPT09ICdhY3Rpb24nKSkge1xuICAgICAgdGhpcy5hdm9pZFF1ZXJ5Q29sdW1ucy5wdXNoKGNvbHVtbi5hdHRyKTtcbiAgICAgIGlmIChjb2x1bW4uYXN5bmNMb2FkKSB7XG4gICAgICAgIHRoaXMuYXN5bmNMb2FkQ29sdW1ucy5wdXNoKGNvbHVtbi5hdHRyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wdXNoT0NvbHVtbkRlZmluaXRpb24oY29sRGVmKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwdXNoT0NvbHVtbkRlZmluaXRpb24oY29sRGVmOiBPQ29sdW1uKSB7XG4gICAgY29sRGVmLnZpc2libGUgPSAodGhpcy5fdmlzaWJsZUNvbEFycmF5LmluZGV4T2YoY29sRGVmLmF0dHIpICE9PSAtMSk7XG4gICAgLy8gRmluZCBjb2x1bW4gZGVmaW5pdGlvbiBieSBuYW1lXG4gICAgY29uc3QgYWxyZWFkeUV4aXN0aW5nID0gdGhpcy5nZXRPQ29sdW1uKGNvbERlZi5hdHRyKTtcbiAgICBpZiAoYWxyZWFkeUV4aXN0aW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHJlcGxhY2luZ0luZGV4ID0gdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLmluZGV4T2YoYWxyZWFkeUV4aXN0aW5nKTtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1uc1tyZXBsYWNpbmdJbmRleF0gPSBjb2xEZWY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5wdXNoKGNvbERlZik7XG4gICAgfVxuICAgIHRoaXMuZW5zdXJlQ29sdW1uc09yZGVyKCk7XG4gICAgdGhpcy5yZWZyZXNoRWRpdGlvbk1vZGVXYXJuKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVmcmVzaEVkaXRpb25Nb2RlV2FybigpIHtcbiAgICBpZiAodGhpcy5lZGl0aW9uTW9kZSAhPT0gQ29kZXMuRURJVElPTl9NT0RFX05PTkUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZWRpdGFibGVDb2x1bW5zID0gdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbHRlcihjb2wgPT4ge1xuICAgICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKGNvbC5lZGl0b3IpO1xuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKGVkaXRhYmxlQ29sdW1ucy5sZW5ndGggPiAwICYmICF0aGlzLmhhc0luc2VydGFibGVSb3coKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1VzaW5nIGEgY29sdW1uIHdpdGggYSBlZGl0b3IgYnV0IHRoZXJlIGlzIG5vIGVkaXRpb24tbW9kZSBkZWZpbmVkJyk7XG4gICAgICB9XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIHJlZ2lzdGVyQ29sdW1uQWdncmVnYXRlKGNvbHVtbjogT0NvbHVtbkFnZ3JlZ2F0ZSkge1xuICAgIHRoaXMuc2hvd1RvdGFsc1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICBjb25zdCBhbHJlYWR5RXhpc3RpbmcgPSB0aGlzLmdldE9Db2x1bW4oY29sdW1uLmF0dHIpO1xuICAgIGlmIChhbHJlYWR5RXhpc3RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcmVwbGFjaW5nSW5kZXggPSB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuaW5kZXhPZihhbHJlYWR5RXhpc3RpbmcpO1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zW3JlcGxhY2luZ0luZGV4XS5hZ2dyZWdhdGUgPSBjb2x1bW47XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJUYWJsZUhlYWRlcnModGFibGVIZWFkZXI6IE9UYWJsZUhlYWRlckNvbXBvbmVudCkge1xuICAgIGlmICh0aGlzLnRhYmxlSGVhZGVycy5maW5kSW5kZXgoaGVhZGVyID0+IGhlYWRlci5jb2x1bW4uYXR0ciA9PT0gdGFibGVIZWFkZXIuY29sdW1uLmF0dHIpID09PSAtMSkge1xuICAgICAgdGhpcy50YWJsZUhlYWRlcnMucHVzaCh0YWJsZUhlYWRlcik7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VWaXNpYmxlQ29sdW1ucyhkZWZhdWx0Q29uZmlndXJhdGlvbjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuY29sdW1uc0Rpc3BsYXkpIHtcbiAgICAgIC8vIGZpbHRlcmluZyBjb2x1bW5zIHRoYXQgbWlnaHQgYmUgaW4gc3RhdGUgc3RvcmFnZSBidXQgbm90IGluIHRoZSBhY3R1YWwgdGFibGUgZGVmaW5pdGlvblxuICAgICAgbGV0IHN0YXRlQ29sczogT0NvbHVtbkRpc3BsYXlbXSA9IFtdO1xuICAgICAgdGhpcy5zdGF0ZS5jb2x1bW5zRGlzcGxheS5mb3JFYWNoKChvQ29sLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBpc1Zpc2libGVDb2xJbkNvbHVtbnMgPSB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLmF0dHIgPT09IG9Db2wuYXR0cikgIT09IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoaXNWaXNpYmxlQ29sSW5Db2x1bW5zKSB7XG4gICAgICAgICAgc3RhdGVDb2xzLnB1c2gob0NvbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gbG9hZCB0aGUgY29sdW1uICcgKyBvQ29sLmF0dHIgKyAnIGZyb20gdGhlIGxvY2Fsc3RvcmFnZScpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChkZWZhdWx0Q29uZmlndXJhdGlvbikge1xuICAgICAgICBzdGF0ZUNvbHMgPSB0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLmNvbHVtbnNEaXNwbGF5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGVDb2xzID0gdGhpcy5jaGVja0NoYW5nZXNWaXNpYmxlQ29sdW1tbnNJbkluaXRpYWxDb25maWd1cmF0aW9uKHN0YXRlQ29scyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5zb3J0KChhOiBPQ29sdW1uLCBiOiBPQ29sdW1uKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4QSA9IHN0YXRlQ29scy5maW5kSW5kZXgoY29sID0+IGNvbC5hdHRyID09PSBhLmF0dHIpO1xuICAgICAgICBjb25zdCBpbmRleEIgPSBzdGF0ZUNvbHMuZmluZEluZGV4KGNvbCA9PiBjb2wuYXR0ciA9PT0gYi5hdHRyKTtcbiAgICAgICAgcmV0dXJuIGluZGV4QSAtIGluZGV4QjtcbiAgICAgIH0pO1xuICAgICAgdGhpcy52aXNpYmxlQ29sQXJyYXkgPSBzdGF0ZUNvbHMuZmlsdGVyKGl0ZW0gPT4gaXRlbS52aXNpYmxlKS5tYXAoaXRlbSA9PiBpdGVtLmF0dHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZpc2libGVDb2xBcnJheSA9IFV0aWwucGFyc2VBcnJheSh0aGlzLmRlZmF1bHRWaXNpYmxlQ29sdW1ucyA/IHRoaXMuZGVmYXVsdFZpc2libGVDb2x1bW5zIDogdGhpcy52aXNpYmxlQ29sdW1ucywgdHJ1ZSk7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuc29ydCgoYTogT0NvbHVtbiwgYjogT0NvbHVtbikgPT4gdGhpcy52aXNpYmxlQ29sQXJyYXkuaW5kZXhPZihhLmF0dHIpIC0gdGhpcy52aXNpYmxlQ29sQXJyYXkuaW5kZXhPZihiLmF0dHIpKTtcbiAgICB9XG4gIH1cblxuICBjaGVja0NoYW5nZXNWaXNpYmxlQ29sdW1tbnNJbkluaXRpYWxDb25maWd1cmF0aW9uKHN0YXRlQ29sczogT0NvbHVtbkRpc3BsYXlbXSk6IE9Db2x1bW5EaXNwbGF5W10ge1xuICAgIGlmICh0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLmNvbHVtbnNEaXNwbGF5KSB7XG4gICAgICBjb25zdCBvcmlnaW5hbFZpc2libGVDb2xBcnJheSA9XG4gICAgICAgIHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uY29sdW1uc0Rpc3BsYXkuZmlsdGVyKHggPT4geC52aXNpYmxlKS5tYXAoeCA9PiB4LmF0dHIpO1xuXG4gICAgICBjb25zdCB2aXNpYmxlQ29sQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy52aXNpYmxlQ29sdW1ucywgdHJ1ZSk7XG5cbiAgICAgIC8vIEZpbmQgdmFsdWVzIGluIHZpc2libGUtY29sdW1ucyB0aGF0IHRoZXkgYXJlbnQgaW4gb3JpZ2luYWwtdmlzaWJsZS1jb2x1bW5zIGluIGxvY2Fsc3RvcmFnZVxuICAgICAgLy8gaW4gdGhpcyBjYXNlIHlvdSBoYXZlIHRvIGFkZCB0aGlzIGNvbHVtbiB0byB0aGlzLnZpc2libGVDb2xBcnJheVxuICAgICAgY29uc3QgY29sVG9BZGRJblZpc2libGVDb2wgPSBVdGlsLmRpZmZlcmVuY2VBcnJheXModmlzaWJsZUNvbEFycmF5LCBvcmlnaW5hbFZpc2libGVDb2xBcnJheSk7XG4gICAgICBjb2xUb0FkZEluVmlzaWJsZUNvbC5mb3JFYWNoKChjb2xBZGQpID0+IHtcbiAgICAgICAgbGV0IGluZGV4Q29sID0gc3RhdGVDb2xzLmZpbmRJbmRleChjb2wgPT4gY29sLmF0dHIgPT09IGNvbEFkZCk7XG4gICAgICAgIGlmIChpbmRleENvbCA+IC0xKSB7XG4gICAgICAgICAgc3RhdGVDb2xzW2luZGV4Q29sXS52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZUNvbHMuc29ydCgoYTogT0NvbHVtbiwgYjogT0NvbHVtbikgPT4gdmlzaWJsZUNvbEFycmF5LmluZGV4T2YoYS5hdHRyKSAtIHZpc2libGVDb2xBcnJheS5pbmRleE9mKGIuYXR0cikpO1xuICAgICAgfSk7XG5cblxuICAgICAgLy8gRmluZCB2YWx1ZXMgaW4gb3JpZ2luYWwtdmlzaWJsZS1jb2x1bW5zIGluIGxvY2Fsc3RvcmFnZSB0aGF0IHRoZXkgYXJlbnQgaW4gdGhpcy52aXNpYmxlQ29sQXJyYXlcbiAgICAgIC8vIGluIHRoaXMgY2FzZSB5b3UgaGF2ZSB0byBkZWxldGUgdGhpcyBjb2x1bW4gdG8gdGhpcy52aXNpYmxlQ29sQXJyYXlcbiAgICAgIGNvbnN0IGNvbFRvRGVsZXRlSW5WaXNpYmxlQ29sID0gVXRpbC5kaWZmZXJlbmNlQXJyYXlzKG9yaWdpbmFsVmlzaWJsZUNvbEFycmF5LCB2aXNpYmxlQ29sQXJyYXkpO1xuICAgICAgaWYgKGNvbFRvRGVsZXRlSW5WaXNpYmxlQ29sLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3RhdGVDb2xzID0gc3RhdGVDb2xzLmZpbHRlcihjb2wgPT4gY29sVG9EZWxldGVJblZpc2libGVDb2wuaW5kZXhPZihjb2wuYXR0cikgPT09IC0xKTtcbiAgICAgIH1cblxuICAgICAgLy9JZiB0aGUgY29sdW1ucyBpbiBvcmlnaW5hbFZpc2libGVDb2xBcnJheSBoYXMgY2hhbmdlZCB0aGUgc29ydGluZ1xuICAgICAgY29uc3QgY2hhbmdlU29ydFZpc2libGVDb2x1bW5zID0gSlNPTi5zdHJpbmdpZnkodmlzaWJsZUNvbEFycmF5KSAhPT0gSlNPTi5zdHJpbmdpZnkob3JpZ2luYWxWaXNpYmxlQ29sQXJyYXkpO1xuICAgICAgaWYgKGNoYW5nZVNvcnRWaXNpYmxlQ29sdW1ucyAmJiB2aXNpYmxlQ29sQXJyYXkubGVuZ3RoID09PSBvcmlnaW5hbFZpc2libGVDb2xBcnJheS5sZW5ndGgpIHtcbiAgICAgICAgdmlzaWJsZUNvbEFycmF5LmZvckVhY2goKGNvbCwgdG9JbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZyb21JbmRleFRvQ2hhbmdlID0gc3RhdGVDb2xzLmZpbmRJbmRleChzdGF0ZUNvbCA9PiBzdGF0ZUNvbC5hdHRyID09PSBjb2wpO1xuICAgICAgICAgIG1vdmVJdGVtSW5BcnJheShzdGF0ZUNvbHMsIGZyb21JbmRleFRvQ2hhbmdlLCB0b0luZGV4KTtcbiAgICAgICAgfSk7XG5cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlQ29scztcbiAgfVxuXG4gIHBhcnNlU29ydENvbHVtbnMoKSB7XG4gICAgY29uc3Qgc29ydENvbHVtbnNQYXJhbSA9IHRoaXMuc3RhdGUuc29ydENvbHVtbnMgfHwgdGhpcy5zb3J0Q29sdW1ucztcbiAgICB0aGlzLnNvcnRDb2xBcnJheSA9IFNlcnZpY2VVdGlscy5wYXJzZVNvcnRDb2x1bW5zKHNvcnRDb2x1bW5zUGFyYW0pO1xuXG4gICAgLy8gY2hlY2tpbmcgdGhlIG9yaWdpbmFsIHNvcnQgY29sdW1ucyB3aXRoIHRoZSBzb3J0IGNvbHVtbnMgaW4gaW5pdGlhbCBjb25maWd1cmF0aW9uIGluIGxvY2FsIHN0b3JhZ2VcbiAgICBpZiAodGhpcy5zdGF0ZS5zb3J0Q29sdW1ucyAmJiB0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLnNvcnRDb2x1bW5zKSB7XG5cbiAgICAgIGNvbnN0IGluaXRpYWxDb25maWdTb3J0Q29sdW1uc0FycmF5ID0gU2VydmljZVV0aWxzLnBhcnNlU29ydENvbHVtbnModGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5zb3J0Q29sdW1ucyk7XG4gICAgICBjb25zdCBvcmlnaW5hbFNvcnRDb2x1bW5zQXJyYXkgPSBTZXJ2aWNlVXRpbHMucGFyc2VTb3J0Q29sdW1ucyh0aGlzLnNvcnRDb2x1bW5zKTtcbiAgICAgIC8vIEZpbmQgdmFsdWVzIGluIHZpc2libGUtY29sdW1ucyB0aGF0IHRoZXkgYXJlbnQgaW4gb3JpZ2luYWwtdmlzaWJsZS1jb2x1bW5zIGluIGxvY2Fsc3RvcmFnZVxuICAgICAgLy8gaW4gdGhpcyBjYXNlIHlvdSBoYXZlIHRvIGFkZCB0aGlzIGNvbHVtbiB0byB0aGlzLnZpc2libGVDb2xBcnJheVxuICAgICAgY29uc3QgY29sVG9BZGRJblZpc2libGVDb2wgPSBVdGlsLmRpZmZlcmVuY2VBcnJheXMob3JpZ2luYWxTb3J0Q29sdW1uc0FycmF5LCBpbml0aWFsQ29uZmlnU29ydENvbHVtbnNBcnJheSk7XG4gICAgICBpZiAoY29sVG9BZGRJblZpc2libGVDb2wubGVuZ3RoID4gMCkge1xuICAgICAgICBjb2xUb0FkZEluVmlzaWJsZUNvbC5mb3JFYWNoKGNvbEFkZCA9PiB7XG4gICAgICAgICAgdGhpcy5zb3J0Q29sQXJyYXkucHVzaChjb2xBZGQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29sVG9EZWxJblZpc2libGVDb2wgPSBVdGlsLmRpZmZlcmVuY2VBcnJheXMoaW5pdGlhbENvbmZpZ1NvcnRDb2x1bW5zQXJyYXksIG9yaWdpbmFsU29ydENvbHVtbnNBcnJheSk7XG4gICAgICBpZiAoY29sVG9EZWxJblZpc2libGVDb2wubGVuZ3RoID4gMCkge1xuICAgICAgICBjb2xUb0RlbEluVmlzaWJsZUNvbC5mb3JFYWNoKChjb2xEZWwpID0+IHtcbiAgICAgICAgICB0aGlzLnNvcnRDb2xBcnJheS5mb3JFYWNoKChjb2wsIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChjb2wuY29sdW1uTmFtZSA9PT0gY29sRGVsLmNvbHVtbk5hbWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5zb3J0Q29sQXJyYXkuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBlbnN1cmluZyBjb2x1bW4gZXhpc3RlbmNlIGFuZCBjaGVja2luZyBpdHMgb3JkZXJhYmxlIHN0YXRlXG4gICAgZm9yIChsZXQgaSA9IHRoaXMuc29ydENvbEFycmF5Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBjb2xOYW1lID0gdGhpcy5zb3J0Q29sQXJyYXlbaV0uY29sdW1uTmFtZTtcbiAgICAgIGNvbnN0IG9Db2wgPSB0aGlzLmdldE9Db2x1bW4oY29sTmFtZSk7XG4gICAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKG9Db2wpIHx8ICFvQ29sLm9yZGVyYWJsZSkge1xuICAgICAgICB0aGlzLnNvcnRDb2xBcnJheS5zcGxpY2UoaSwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICBwcm90ZWN0ZWQgZW5zdXJlQ29sdW1uc09yZGVyKCkge1xuXG4gICAgbGV0IGNvbHVtbnNPcmRlciA9IFtdO1xuICAgIGlmICh0aGlzLnN0YXRlLmNvbHVtbnNEaXNwbGF5KSB7XG4gICAgICBjb2x1bW5zT3JkZXIgPSB0aGlzLnN0YXRlLmNvbHVtbnNEaXNwbGF5Lm1hcChpdGVtID0+IGl0ZW0uYXR0cik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbHVtbnNPcmRlciA9IHRoaXMuY29sQXJyYXkuZmlsdGVyKGF0dHIgPT4gdGhpcy52aXNpYmxlQ29sQXJyYXkuaW5kZXhPZihhdHRyKSA9PT0gLTEpO1xuICAgICAgY29sdW1uc09yZGVyLnB1c2goLi4udGhpcy52aXNpYmxlQ29sQXJyYXkpO1xuICAgIH1cblxuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5zb3J0KChhOiBPQ29sdW1uLCBiOiBPQ29sdW1uKSA9PiB7XG4gICAgICBpZiAoY29sdW1uc09yZGVyLmluZGV4T2YoYS5hdHRyKSA9PT0gLTEpIHtcbiAgICAgICAgLy8gaWYgaXQgaXMgbm90IGluIGxvY2FsIHN0b3JhZ2UgYmVjYXVzZSBpdCBpcyBuZXcsIGtlZXAgb3JkZXJcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY29sdW1uc09yZGVyLmluZGV4T2YoYS5hdHRyKSAtIGNvbHVtbnNPcmRlci5pbmRleE9mKGIuYXR0cik7XG4gICAgICB9XG4gICAgfSk7XG5cblxuICB9XG5cbiAgaW5pdGlhbGl6ZVBhcmFtcygpOiB2b2lkIHtcbiAgICAvLyBJZiB2aXNpYmxlLWNvbHVtbnMgaXMgbm90IHByZXNlbnQgdGhlbiB2aXNpYmxlLWNvbHVtbnMgaXMgYWxsIGNvbHVtbnNcbiAgICBpZiAoIXRoaXMudmlzaWJsZUNvbHVtbnMpIHtcbiAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbEFycmF5Lmxlbmd0aCkge1xuICAgICAgdGhpcy5jb2xBcnJheS5mb3JFYWNoKCh4OiBzdHJpbmcpID0+IHRoaXMucmVnaXN0ZXJDb2x1bW4oeCkpO1xuICAgICAgdGhpcy5lbnN1cmVDb2x1bW5zT3JkZXIoKTtcbiAgICB9XG4gICAgLy8gSW5pdGlhbGl6ZSBxdWlja0ZpbHRlclxuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuZmlsdGVyID0gdGhpcy5xdWlja0ZpbHRlcjtcblxuICAgIGlmICh0aGlzLnN0YXRlLmN1cnJlbnRQYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5zdGF0ZS5jdXJyZW50UGFnZTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHBhZ2luYXRvclxuICAgIGlmICghdGhpcy5wYWdpbmF0b3IgJiYgdGhpcy5wYWdpbmF0aW9uQ29udHJvbHMpIHtcbiAgICAgIHRoaXMucGFnaW5hdG9yID0gbmV3IE9CYXNlVGFibGVQYWdpbmF0b3IoKTtcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplID0gdGhpcy5xdWVyeVJvd3M7XG4gICAgICB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgICAgdGhpcy5wYWdpbmF0b3Iuc2hvd0ZpcnN0TGFzdEJ1dHRvbnMgPSB0aGlzLnNob3dQYWdpbmF0b3JGaXJzdExhc3RCdXR0b25zO1xuICAgIH1cblxuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5zZWxlY3RBbGxDaGVja2JveFZpc2libGUpKSB7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlID0gISF0aGlzLnN0YXRlLnNlbGVjdENvbHVtblZpc2libGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNoZWNraW5nIHRoZSBvcmlnaW5hbCBzZWxlY3RBbGxDaGVja2JveFZpc2libGUgd2l0aCBzZWxlY3QtY29sdW1uLXZpc2libGUgaW4gaW5pdGlhbCBjb25maWd1cmF0aW9uIGluIGxvY2FsIHN0b3JhZ2VcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLnNlbGVjdENvbHVtblZpc2libGUpXG4gICAgICAgICYmIHRoaXMuc2VsZWN0QWxsQ2hlY2tib3hWaXNpYmxlID09PSB0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLnNlbGVjdENvbHVtblZpc2libGUpIHtcbiAgICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udmlzaWJsZSA9ICEhdGhpcy5zdGF0ZS5zZWxlY3RDb2x1bW5WaXNpYmxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udmlzaWJsZSA9IHRoaXMuc2VsZWN0QWxsQ2hlY2tib3hWaXNpYmxlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vSW5pdGlhbGl6ZSBzaG93IGZpbHRlciBieSBjb2x1bW4gaWNvblxuICAgIHRoaXMuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlID0gdGhpcy5maWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQ7XG5cbiAgICB0aGlzLmluaXRpYWxpemVDaGVja2JveENvbHVtbigpO1xuXG4gICAgaWYgKHRoaXMuc3RvcmVTdGF0ZSkge1xuICAgICAgLy8gaWYgcXVlcnktcm93cyBpbiBpbml0aWFsIGNvbmZpZ3VyYXRpb24gaXMgZXF1YWxzIHRvIG9yaWdpbmFsIHF1ZXJ5LXJvd3MgaW5wdXRcbiAgICAgIC8vIHF1ZXJ5X3Jvd3Mgd2lsbCBiZSB0aGUgdmFsdWUgaW4gbG9jYWwgc3RvcmFnZVxuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUucXVlcnlSb3dzKSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLnF1ZXJ5Um93cylcbiAgICAgICAgJiYgdGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5xdWVyeVJvd3MgPT09IHRoaXMub3JpZ2luYWxRdWVyeVJvd3MpIHtcbiAgICAgICAgdGhpcy5xdWVyeVJvd3MgPSB0aGlzLnN0YXRlLnF1ZXJ5Um93cztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgc2VsZWN0aW9uKCkge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5fc2VsZWN0aW9uKSkge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odGhpcy5pc1NlbGVjdGlvbk1vZGVNdWx0aXBsZSgpLCBbXSwgdHJ1ZSwgdGhpcy5jb21wYXJlUm93KCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uO1xuICB9XG5cbiAgdXBkYXRlU3RhdGVFeHBhbmRlZENvbHVtbigpIHtcbiAgICBpZiAoIXRoaXMudGFibGVSb3dFeHBhbmRhYmxlIHx8ICF0aGlzLnRhYmxlUm93RXhwYW5kYWJsZS5leHBhbmRhYmxlQ29sdW1uVmlzaWJsZSkgeyByZXR1cm47IH1cbiAgICBpZiAodGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1uc1swXSA9PT0gQ29kZXMuTkFNRV9DT0xVTU5fU0VMRUNUICYmIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnNbMV0gIT09IENvZGVzLk5BTUVfQ09MVU1OX0VYUEFOREFCTEUpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnMgPSBbdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1uc1swXV0uY29uY2F0KENvZGVzLk5BTUVfQ09MVU1OX0VYUEFOREFCTEUsIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnMuc3BsaWNlKDEpKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnNbMF0gIT09IENvZGVzLk5BTUVfQ09MVU1OX0VYUEFOREFCTEUpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnMudW5zaGlmdChDb2Rlcy5OQU1FX0NPTFVNTl9FWFBBTkRBQkxFKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3RlclRhYkxpc3RlbmVyKCkge1xuICAgIC8vIFdoZW4gdGFibGUgaXMgY29udGFpbmVkIGludG8gdGFiIGNvbXBvbmVudCwgaXQgaXMgbmVjZXNzYXJ5IHRvIGluaXQgdGFibGUgY29tcG9uZW50IHdoZW4gYXR0YWNoZWQgdG8gRE9NLlxuICAgIHRoaXMudGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLnRhYkdyb3VwQ29udGFpbmVyLnNlbGVjdGVkVGFiQ2hhbmdlLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICBsZXQgaW50ZXJ2YWw7XG4gICAgICBjb25zdCB0aW1lckNhbGxiYWNrID0gKHRhYjogTWF0VGFiKSA9PiB7XG4gICAgICAgIGlmICh0YWIgJiYgdGFiLmNvbnRlbnQuaXNBdHRhY2hlZCkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICAgIGlmICh0YWIgPT09IHRoaXMudGFiQ29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLmluc2lkZVRhYkJ1Z1dvcmthcm91bmQoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdRdWVyeSkge1xuICAgICAgICAgICAgICB0aGlzLnF1ZXJ5RGF0YSh0aGlzLnBlbmRpbmdRdWVyeUZpbHRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoZWNrVmlld3BvcnRTaXplKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7IHRpbWVyQ2FsbGJhY2soZXZ0LnRhYik7IH0sIDEwMCk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zaWRlVGFiQnVnV29ya2Fyb3VuZCgpIHtcbiAgICB0aGlzLnJlZnJlc2hTb3J0SGVhZGVycygpO1xuICB9XG5cbiAgcmVnaXN0ZXJTb3J0TGlzdGVuZXIoKSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc29ydCkpIHtcbiAgICAgIHRoaXMuc29ydFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuc29ydFN1YnNjcmlwdGlvbiA9IHRoaXMuc29ydC5vU29ydENoYW5nZS5zdWJzY3JpYmUodGhpcy5vblNvcnRDaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLnNvcnQuc2V0TXVsdGlwbGVTb3J0KHRoaXMubXVsdGlwbGVTb3J0KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU29ydGluZ1N1YmplY3QodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAvKiB0aGUgbG9hZGluZ1NvcnRpbmdTdWJqZWN0IG5vdCByZWZyZXNoIGluIHRoZSB0ZW1wbGF0ZVxuICAgIGJlY2F1c2UgY2hhbmdlIGRldGVjdGlvbiBub3Qgd29ya2luZyB3aXRoIHZpcnR1YWwgc2Nyb2xsaW5nICovXG4gICAgY29uc3Qgbmdab25lID0gdGhpcy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICBpZiAobmdab25lKSB7XG4gICAgICBuZ1pvbmUucnVuKCgpID0+IHRoaXMubG9hZGluZ1NvcnRpbmdTdWJqZWN0Lm5leHQodmFsdWUpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvYWRpbmdTb3J0aW5nU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgIGlmICh0aGlzLmNkICYmICEodGhpcy5jZCBhcyBWaWV3UmVmKS5kZXN0cm95ZWQpIHtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uU29ydENoYW5nZShzb3J0QXJyYXk6IGFueVtdKSB7XG4gICAgdGhpcy5zb3J0Q29sQXJyYXkgPSBbXTtcbiAgICBzb3J0QXJyYXkuZm9yRWFjaCgoc29ydCkgPT4ge1xuICAgICAgaWYgKHNvcnQuZGlyZWN0aW9uICE9PSAnJykge1xuICAgICAgICB0aGlzLnNvcnRDb2xBcnJheS5wdXNoKHtcbiAgICAgICAgICBjb2x1bW5OYW1lOiBzb3J0LmlkLFxuICAgICAgICAgIGFzY2VuZGVudDogc29ydC5kaXJlY3Rpb24gPT09IENvZGVzLkFTQ19TT1JUXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVTb3J0aW5nU3ViamVjdCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBzZXREYXRhc291cmNlKCkge1xuICAgIC8vRGVsZXRlZCBwcmV2aW91cyBpbnN0YW5jZSBhbmQgc3Vic2NyaWJlcnNcbiAgICBkZWxldGUgdGhpcy5kYXRhU291cmNlO1xuICAgIGlmICh0aGlzLm9uUmVuZGVyZWREYXRhQ2hhbmdlKSB0aGlzLm9uUmVuZGVyZWREYXRhQ2hhbmdlLnVuc3Vic2NyaWJlKCk7XG5cbiAgICBjb25zdCBkYXRhU291cmNlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9UYWJsZURhdGFTb3VyY2VTZXJ2aWNlKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBkYXRhU291cmNlU2VydmljZS5nZXRJbnN0YW5jZSh0aGlzKTtcbiAgICB0aGlzLnJlZ2lzdGVyRGF0YVNvdXJjZUxpc3RlbmVycygpO1xuICAgIHRoaXMucmVnaXN0ZXJTb3J0TGlzdGVuZXIoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWdpc3RlckRhdGFTb3VyY2VMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5vblJlbmRlcmVkRGF0YUNoYW5nZSA9IHRoaXMuZGF0YVNvdXJjZS5vblJlbmRlcmVkRGF0YUNoYW5nZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5zdG9wRWRpdGlvbigpO1xuICAgICAgdGhpcy5jaGVja1NlbGVjdGVkSXRlbURhdGEoKTtcbiAgICAgIGlmICghdGhpcy5wYWdlYWJsZSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNvcnRpbmdTdWJqZWN0KGZhbHNlKTtcbiAgICAgICAgICBpZiAodGhpcy5jZCAmJiAhKHRoaXMuY2QgYXMgVmlld1JlZikuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDUwMCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RXhwYW5kZWRSb3dDb250YWluZXJDbGFzcyhyb3dJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gT1RhYmxlQ29tcG9uZW50LkVYUEFOREVEX1JPV19DT05UQUlORVJfQ0xBU1MgKyByb3dJbmRleDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFeHBhbmRhYmxlSXRlbXMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGFibGVJdGVtLnNlbGVjdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHRvIGV4cGFuZCBvciBjb2xsYXBzZSB0aGUgZXhwYW5kYWJsZSByb3cuXG4gICAqIEBwYXJhbSBpdGVtXG4gICAqIEBwYXJhbSBldmVudFxuICAgKi9cbiAgcHVibGljIHRvZ2dsZVJvd0V4cGFuZGFibGUoaXRlbTogYW55LCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5leHBhbmRhYmxlSXRlbS50b2dnbGUoaXRlbSk7XG4gICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLmdldFZhbHVlKCkuZmluZEluZGV4KChyb3cpID0+IHRoaXMua2V5c0FycmF5LmV2ZXJ5KGtleSA9PiByb3dba2V5XSA9PT0gaXRlbVtrZXldKSk7XG5cbiAgICBpZiAodGhpcy5wb3J0YWxIb3N0W3Jvd0luZGV4XSkge1xuICAgICAgdGhpcy5wb3J0YWxIb3N0W3Jvd0luZGV4XS5kZXRhY2goKTtcbiAgICB9XG4gICAgY29uc3QgaXNDb2xsYXBzZWQgPSB0aGlzLmdldFN0YXRlRXhwYW5kKGl0ZW0pID09PSAnY29sbGFwc2VkJztcbiAgICBjb25zdCBldmVudFRhYmxlUm93RXhwYW5kYWJsZUNoYW5nZSA9IHRoaXMuZW1pdFRhYmxlUm93RXhwYW5kYWJsZUNoYW5nZUV2ZW50KGl0ZW0sIHJvd0luZGV4KTtcbiAgICBpZiAoaXNDb2xsYXBzZWQpIHtcbiAgICAgIHRoaXMudGFibGVSb3dFeHBhbmRhYmxlLm9uQ29sbGFwc2VkLmVtaXQoZXZlbnRUYWJsZVJvd0V4cGFuZGFibGVDaGFuZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBvcnRhbEhvc3Rbcm93SW5kZXhdID0gbmV3IERvbVBvcnRhbE91dGxldChcbiAgICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy4nICsgdGhpcy5nZXRFeHBhbmRlZFJvd0NvbnRhaW5lckNsYXNzKHJvd0luZGV4KSksXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRoaXMuYXBwUmVmLFxuICAgICAgICB0aGlzLmluamVjdG9yXG4gICAgICApO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZVBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLnRhYmxlUm93RXhwYW5kYWJsZS50ZW1wbGF0ZVJlZiwgdGhpcy5fdmlld0NvbnRhaW5lclJlZiwgeyAkaW1wbGljaXQ6IGl0ZW0gfSk7XG4gICAgICB0aGlzLnBvcnRhbEhvc3Rbcm93SW5kZXhdLmF0dGFjaFRlbXBsYXRlUG9ydGFsKHRlbXBsYXRlUG9ydGFsKTtcbiAgICAgIHRoaXMudGFibGVSb3dFeHBhbmRhYmxlLm9uRXhwYW5kZWQuZW1pdChldmVudFRhYmxlUm93RXhwYW5kYWJsZUNoYW5nZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBUb2dnbGVzIHJvdyBleHBhbmRhYmxlIGJ5IHJvdyBpbmRleFxuICAgKiBAcGFyYW0gcm93SW5kZXhcbiAgICogQHBhcmFtIFtldmVudF1cbiAgICovXG4gIHB1YmxpYyB0b2dnbGVSb3dFeHBhbmRhYmxlQnlSb3dJbmRleChyb3dJbmRleDogbnVtYmVyLCBldmVudD86IEV2ZW50KSB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0VmFsdWUoKVtyb3dJbmRleF07XG4gICAgdGhpcy50b2dnbGVSb3dFeHBhbmRhYmxlKGl0ZW0sIGV2ZW50KTtcbiAgfVxuXG5cblxuICBwcml2YXRlIGVtaXRUYWJsZVJvd0V4cGFuZGFibGVDaGFuZ2VFdmVudChkYXRhLCByb3dJbmRleCkge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IE9UYWJsZVJvd0V4cGFuZGVkQ2hhbmdlKCk7XG4gICAgZXZlbnQucm93SW5kZXggPSByb3dJbmRleDtcbiAgICBldmVudC5kYXRhID0gZGF0YTtcblxuICAgIHJldHVybiBldmVudDtcbiAgfVxuXG4gIHB1YmxpYyBpc0V4cGFuZGVkKGRhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGFibGVJdGVtLmlzU2VsZWN0ZWQoZGF0YSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3RhdGVFeHBhbmQocm93KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNFeHBhbmRlZChyb3cpID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnO1xuICB9XG5cbiAgcHVibGljIGlzQ29sdW1uRXhwYW5kYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFV0aWwuaXNEZWZpbmVkKHRoaXMudGFibGVSb3dFeHBhbmRhYmxlKSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLl9vVGFibGVPcHRpb25zLmV4cGFuZGFibGVDb2x1bW4pKSA/IHRoaXMuX29UYWJsZU9wdGlvbnMuZXhwYW5kYWJsZUNvbHVtbi52aXNpYmxlIDogZmFsc2U7XG4gIH1cblxuICBnZXQgaGFzRXhwYW5kZWRSb3coKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHRoaXMudGFibGVSb3dFeHBhbmRhYmxlKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNJbnNlcnRhYmxlUm93KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZCh0aGlzLm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQpO1xuICB9XG5cbiAgcHVibGljIGdldE51bVZpc2libGVDb2x1bW5zKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMub1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgbWFuYWdlcyB0aGUgY2FsbCB0byB0aGUgc2VydmljZVxuICAgKiBAcGFyYW0gZmlsdGVyXG4gICAqIEBwYXJhbSBvdnJyQXJnc1xuICAgKi9cbiAgcXVlcnlEYXRhKGZpbHRlcj86IGFueSwgb3ZyckFyZ3M/OiBPUXVlcnlEYXRhQXJncykge1xuICAgIC8vIElmIHRhYiBleGlzdHMgYW5kIGlzIG5vdCBhY3RpdmUgdGhlbiB3YWl0IGZvciBxdWVyeURhdGFcbiAgICBpZiAodGhpcy5pc0luc2lkZUluYWN0aXZlVGFiKCkpIHtcbiAgICAgIHRoaXMucGVuZGluZ1F1ZXJ5ID0gdHJ1ZTtcbiAgICAgIHRoaXMucGVuZGluZ1F1ZXJ5RmlsdGVyID0gZmlsdGVyO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBlbmRpbmdRdWVyeSA9IGZhbHNlO1xuICAgIHRoaXMucGVuZGluZ1F1ZXJ5RmlsdGVyID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5xdWVyeUNlbGxSZW5kZXJlcnMoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgc3VwZXIucXVlcnlEYXRhKGZpbHRlciwgb3ZyckFyZ3MpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzSW5zaWRlSW5hY3RpdmVUYWIoKTogYm9vbGVhbiB7XG4gICAgbGV0IHJlc3VsdDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnRhYkNvbnRhaW5lciAmJiB0aGlzLnRhYkdyb3VwQ29udGFpbmVyKSB7XG4gICAgICByZXN1bHQgPSAhKHRoaXMudGFiQ29udGFpbmVyLmlzQWN0aXZlIHx8ICh0aGlzLnRhYkdyb3VwQ29udGFpbmVyLnNlbGVjdGVkSW5kZXggPT09IHRoaXMudGFiQ29udGFpbmVyLnBvc2l0aW9uKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXRDb21wb25lbnRGaWx0ZXIoZXhpc3RpbmdGaWx0ZXI6IGFueSA9IHt9KTogYW55IHtcbiAgICBsZXQgZmlsdGVyID0gZXhpc3RpbmdGaWx0ZXI7XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIGlmIChPYmplY3Qua2V5cyhmaWx0ZXIpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgcGFyZW50SXRlbUV4cHIgPSBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRFeHByZXNzaW9uRnJvbU9iamVjdChmaWx0ZXIpO1xuICAgICAgICBmaWx0ZXIgPSB7fTtcbiAgICAgICAgZmlsdGVyW0ZpbHRlckV4cHJlc3Npb25VdGlscy5GSUxURVJfRVhQUkVTU0lPTl9LRVldID0gcGFyZW50SXRlbUV4cHI7XG4gICAgICB9XG4gICAgICBjb25zdCBiZUNvbEZpbHRlciA9IHRoaXMuZ2V0Q29sdW1uRmlsdGVyc0V4cHJlc3Npb24oKTtcbiAgICAgIC8vIEFkZCBjb2x1bW4gZmlsdGVycyBiYXNpYyBleHByZXNzaW9uIHRvIGN1cnJlbnQgZmlsdGVyXG4gICAgICBpZiAoYmVDb2xGaWx0ZXIgJiYgIVV0aWwuaXNEZWZpbmVkKGZpbHRlcltGaWx0ZXJFeHByZXNzaW9uVXRpbHMuRklMVEVSX0VYUFJFU1NJT05fS0VZXSkpIHtcbiAgICAgICAgZmlsdGVyW0ZpbHRlckV4cHJlc3Npb25VdGlscy5GSUxURVJfRVhQUkVTU0lPTl9LRVldID0gYmVDb2xGaWx0ZXI7XG4gICAgICB9IGVsc2UgaWYgKGJlQ29sRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlcltGaWx0ZXJFeHByZXNzaW9uVXRpbHMuRklMVEVSX0VYUFJFU1NJT05fS0VZXSA9XG4gICAgICAgICAgRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkQ29tcGxleEV4cHJlc3Npb24oZmlsdGVyW0ZpbHRlckV4cHJlc3Npb25VdGlscy5GSUxURVJfRVhQUkVTU0lPTl9LRVldLCBiZUNvbEZpbHRlciwgRmlsdGVyRXhwcmVzc2lvblV0aWxzLk9QX0FORCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmdldENvbXBvbmVudEZpbHRlcihmaWx0ZXIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFF1aWNrRmlsdGVyRXhwcmVzc2lvbigpOiBFeHByZXNzaW9uIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudCkgJiYgdGhpcy5wYWdlYWJsZSkge1xuICAgICAgcmV0dXJuIHRoaXMub1RhYmxlUXVpY2tGaWx0ZXJDb21wb25lbnQuZmlsdGVyRXhwcmVzc2lvbjtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldENvbHVtbkZpbHRlcnNFeHByZXNzaW9uKCk6IEV4cHJlc3Npb24ge1xuICAgIC8vIEFwcGx5IGNvbHVtbiBmaWx0ZXJzXG4gICAgY29uc3QgY29sdW1uRmlsdGVyczogT0NvbHVtblZhbHVlRmlsdGVyW10gPSB0aGlzLmRhdGFTb3VyY2UuZ2V0Q29sdW1uVmFsdWVGaWx0ZXJzKCk7XG4gICAgY29uc3QgYmVDb2x1bW5GaWx0ZXJzOiBBcnJheTxFeHByZXNzaW9uPiA9IFtdO1xuICAgIGNvbHVtbkZpbHRlcnMuZm9yRWFjaChjb2xGaWx0ZXIgPT4ge1xuICAgICAgLy8gUHJlcGFyZSBiYXNpYyBleHByZXNzaW9uc1xuICAgICAgc3dpdGNoIChjb2xGaWx0ZXIub3BlcmF0b3IpIHtcbiAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLklOOlxuICAgICAgICAgIGlmIChVdGlsLmlzQXJyYXkoY29sRmlsdGVyLnZhbHVlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IGJlc0luOiBBcnJheTxFeHByZXNzaW9uPiA9IGNvbEZpbHRlci52YWx1ZXMubWFwKHZhbHVlID0+IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZEV4cHJlc3Npb25FcXVhbHMoY29sRmlsdGVyLmF0dHIsIHZhbHVlKSk7XG4gICAgICAgICAgICBsZXQgYmVJbjogRXhwcmVzc2lvbiA9IGJlc0luLnBvcCgpO1xuICAgICAgICAgICAgYmVzSW4uZm9yRWFjaChiZSA9PiB7XG4gICAgICAgICAgICAgIGJlSW4gPSBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRDb21wbGV4RXhwcmVzc2lvbihiZUluLCBiZSwgRmlsdGVyRXhwcmVzc2lvblV0aWxzLk9QX09SKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYmVDb2x1bW5GaWx0ZXJzLnB1c2goYmVJbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuQkVUV0VFTjpcbiAgICAgICAgICBpZiAoVXRpbC5pc0FycmF5KGNvbEZpbHRlci52YWx1ZXMpICYmIGNvbEZpbHRlci52YWx1ZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBjb25zdCBiZUZyb20gPSBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRFeHByZXNzaW9uTW9yZUVxdWFsKGNvbEZpbHRlci5hdHRyLCBjb2xGaWx0ZXIudmFsdWVzWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IGJlVG8gPSBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRFeHByZXNzaW9uTGVzc0VxdWFsKGNvbEZpbHRlci5hdHRyLCBjb2xGaWx0ZXIudmFsdWVzWzFdKTtcbiAgICAgICAgICAgIGJlQ29sdW1uRmlsdGVycy5wdXNoKEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZENvbXBsZXhFeHByZXNzaW9uKGJlRnJvbSwgYmVUbywgRmlsdGVyRXhwcmVzc2lvblV0aWxzLk9QX0FORCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkVRVUFMOlxuICAgICAgICAgIGJlQ29sdW1uRmlsdGVycy5wdXNoKEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZEV4cHJlc3Npb25MaWtlKGNvbEZpbHRlci5hdHRyLCBjb2xGaWx0ZXIudmFsdWVzKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5MRVNTX0VRVUFMOlxuICAgICAgICAgIGJlQ29sdW1uRmlsdGVycy5wdXNoKEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZEV4cHJlc3Npb25MZXNzRXF1YWwoY29sRmlsdGVyLmF0dHIsIGNvbEZpbHRlci52YWx1ZXMpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLk1PUkVfRVFVQUw6XG4gICAgICAgICAgYmVDb2x1bW5GaWx0ZXJzLnB1c2goRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkRXhwcmVzc2lvbk1vcmVFcXVhbChjb2xGaWx0ZXIuYXR0ciwgY29sRmlsdGVyLnZhbHVlcykpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgfSk7XG4gICAgLy8gQnVpbGQgY29tcGxldGUgY29sdW1uIGZpbHRlcnMgYmFzaWMgZXhwcmVzc2lvblxuICAgIGxldCBiZUNvbEZpbHRlcjogRXhwcmVzc2lvbiA9IGJlQ29sdW1uRmlsdGVycy5wb3AoKTtcbiAgICBiZUNvbHVtbkZpbHRlcnMuZm9yRWFjaChiZSA9PiB7XG4gICAgICBiZUNvbEZpbHRlciA9IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZENvbXBsZXhFeHByZXNzaW9uKGJlQ29sRmlsdGVyLCBiZSwgRmlsdGVyRXhwcmVzc2lvblV0aWxzLk9QX0FORCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGJlQ29sRmlsdGVyO1xuICB9XG5cbiAgdXBkYXRlUGFnaW5hdGlvbkluZm8ocXVlcnlSZXM6IGFueSkge1xuICAgIHN1cGVyLnVwZGF0ZVBhZ2luYXRpb25JbmZvKHF1ZXJ5UmVzKTtcbiAgfVxuXG4gIGluaXRWaWV3UG9ydChkYXRhOiBhbnlbXSkge1xuXG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0ICYmIGRhdGEpIHtcbiAgICAgIGNvbnN0IGhlYWRlckVsUmVmID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoaGVhZGVyU2VsZWN0b3IpO1xuICAgICAgY29uc3QgZm9vdGVyRWxSZWYgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3Rvcihmb290ZXJTZWxlY3Rvcik7XG4gICAgICBjb25zdCByb3dFbFJlZiA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKHJvd1NlbGVjdG9yKTtcblxuICAgICAgY29uc3QgaGVhZGVySGVpZ2h0ID0gaGVhZGVyRWxSZWYgPyBoZWFkZXJFbFJlZi5vZmZzZXRIZWlnaHQgOiAwO1xuICAgICAgY29uc3QgZm9vdGVySGVpZ2h0ID0gZm9vdGVyRWxSZWYgPyBmb290ZXJFbFJlZi5vZmZzZXRIZWlnaHQgOiAwO1xuICAgICAgY29uc3Qgcm93SGVpZ2h0ID0gcm93RWxSZWYgPyByb3dFbFJlZi5vZmZzZXRIZWlnaHQgOiBPVGFibGVDb21wb25lbnQuREVGQVVMVF9ST1dfSEVJR0hUO1xuXG4gICAgICAvLyBzZXQgY29uZmlnIHZpZXdwb3J0XG4gICAgICB0aGlzLnNjcm9sbFN0cmF0ZWd5LnNldENvbmZpZyhyb3dIZWlnaHQsIGhlYWRlckhlaWdodCwgZm9vdGVySGVpZ2h0KTtcbiAgICAgIGlmICh0aGlzLnByZXZpb3VzUmVuZGVyZXJEYXRhICE9PSB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsU3RyYXRlZ3kuZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzZXREYXRhKGRhdGE6IGFueSwgc3FsVHlwZXM6IGFueSkge1xuICAgIC8qIFRoaXMgY29kZSBpcyBub3QgcHV0IGluIHRoZSBzdXBlciBtZXRob2QgYmVjYXVzZSBpdCBpcyBub3QgY2FsbGVkIGZyb20gdGhlIGNsYXNzIGl0c2VsZiAqL1xuICAgIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXkgJiYgZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2U/LnJlaW5pdGlhbGl6ZVBhZ2luYXRpb25Db250ZXh0KHRoaXMucXVlcnlSb3dzKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhb1RhYmxlLnNxbFR5cGVzQ2hhbmdlLm5leHQoc3FsVHlwZXMpO1xuICAgIHRoaXMuZGFvVGFibGUuc2V0RGF0YUFycmF5KGRhdGEpO1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICBPYnNlcnZhYmxlV3JhcHBlci5jYWxsRW1pdCh0aGlzLm9uUGFnaW5hdGVkRGF0YUxvYWRlZCwgZGF0YSk7XG4gICAgfVxuICAgIE9ic2VydmFibGVXcmFwcGVyLmNhbGxFbWl0KHRoaXMub25EYXRhTG9hZGVkLCB0aGlzLmRhb1RhYmxlLmRhdGEpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhblNldFN0YXRpY0RhdGEoc3RhdGljRGF0YSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5jYW5TZXRTdGF0aWNEYXRhKHN0YXRpY0RhdGEpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuZGFvVGFibGUpO1xuICB9XG5cbiAgc2hvd0RpYWxvZ0Vycm9yKGVycm9yOiBzdHJpbmcsIGVycm9yT3B0aW9uYWw/OiBzdHJpbmcpIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoZXJyb3IpICYmICFVdGlsLmlzT2JqZWN0KGVycm9yKSkge1xuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFsZXJ0KCdFUlJPUicsIGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFsZXJ0KCdFUlJPUicsIGVycm9yT3B0aW9uYWwpO1xuICAgIH1cbiAgfVxuXG4gIHByb2plY3RDb250ZW50Q2hhbmdlZCgpIHtcbiAgICB0aGlzLmxvYWRpbmdTY3JvbGxTdWJqZWN0Lm5leHQoZmFsc2UpO1xuXG4gICAgdGhpcy5pbml0Vmlld1BvcnQodGhpcy5kYXRhU291cmNlLnJlbmRlcmVkRGF0YSk7XG5cbiAgICBpZiAodGhpcy5wcmV2aW91c1JlbmRlcmVyRGF0YSAhPT0gdGhpcy5kYXRhU291cmNlLnJlbmRlcmVkRGF0YSkge1xuICAgICAgdGhpcy5wcmV2aW91c1JlbmRlcmVyRGF0YSA9IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGE7XG4gICAgICBPYnNlcnZhYmxlV3JhcHBlci5jYWxsRW1pdCh0aGlzLm9uQ29udGVudENoYW5nZSwgdGhpcy5kYXRhU291cmNlLnJlbmRlcmVkRGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUuc2VsZWN0aW9uICYmIHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEubGVuZ3RoID4gMCAmJiB0aGlzLmdldFNlbGVjdGVkSXRlbXMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuY2hlY2tTZWxlY3RlZEl0ZW1EYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXR0cmlidXRlc1ZhbHVlc1RvUXVlcnkoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgY29uc3QgY29sdW1ucyA9IHN1cGVyLmdldEF0dHJpYnV0ZXNWYWx1ZXNUb1F1ZXJ5KCk7XG4gICAgaWYgKHRoaXMuYXZvaWRRdWVyeUNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IGNvbHVtbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgY29sID0gY29sdW1uc1tpXTtcbiAgICAgICAgaWYgKHRoaXMuYXZvaWRRdWVyeUNvbHVtbnMuaW5kZXhPZihjb2wpICE9PSAtMSkge1xuICAgICAgICAgIGNvbHVtbnMuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2x1bW5zO1xuICB9XG5cbiAgZ2V0UXVlcnlBcmd1bWVudHMoZmlsdGVyOiBvYmplY3QsIG92cnJBcmdzPzogT1F1ZXJ5RGF0YUFyZ3MpOiBBcnJheTxhbnk+IHtcbiAgICBjb25zdCBxdWVyeUFyZ3VtZW50cyA9IHN1cGVyLmdldFF1ZXJ5QXJndW1lbnRzKGZpbHRlciwgb3ZyckFyZ3MpO1xuICAgIE9iamVjdC5hc3NpZ24ocXVlcnlBcmd1bWVudHNbM10sIHRoaXMuZ2V0U3FsVHlwZXNGb3JGaWx0ZXIocXVlcnlBcmd1bWVudHNbMV0pKTtcbiAgICBPYmplY3QuYXNzaWduKHF1ZXJ5QXJndW1lbnRzWzNdLCBvdnJyQXJncyA/IG92cnJBcmdzLnNxbHR5cGVzIHx8IHt9IDoge30pO1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICBxdWVyeUFyZ3VtZW50c1s1XSA9IHRoaXMucGFnaW5hdG9yLmlzU2hvd2luZ0FsbFJvd3MocXVlcnlBcmd1bWVudHNbNV0pID8gdGhpcy5zdGF0ZS50b3RhbFF1ZXJ5UmVjb3Jkc051bWJlciA6IHF1ZXJ5QXJndW1lbnRzWzVdO1xuICAgICAgcXVlcnlBcmd1bWVudHNbNl0gPSB0aGlzLnNvcnRDb2xBcnJheTtcbiAgICB9XG4gICAgcmV0dXJuIHF1ZXJ5QXJndW1lbnRzO1xuICB9XG5cbiAgZ2V0U3FsVHlwZXNGb3JGaWx0ZXIoZmlsdGVyKTogb2JqZWN0IHtcbiAgICBjb25zdCBhbGxTcWxUeXBlcyA9IHRoaXMuZ2V0U3FsVHlwZXMoKTtcbiAgICBjb25zdCBzcWxUeXBlcyA9IHt9O1xuICAgIE9iamVjdC5rZXlzKGFsbFNxbFR5cGVzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAoZmlsdGVyLmluZGV4T2Yoa2V5KSAhPT0gLTEgJiYgYWxsU3FsVHlwZXNba2V5XSAhPT0gU1FMVHlwZXMuT1RIRVIpIHtcbiAgICAgICAgc3FsVHlwZXNba2V5XSA9IGFsbFNxbFR5cGVzW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNxbFR5cGVzO1xuICB9XG5cbiAgb25FeHBvcnRCdXR0b25DbGlja2VkKCkge1xuICAgIGlmICh0aGlzLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5vbkV4cG9ydEJ1dHRvbkNsaWNrZWQoKTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZUNvbHVtbnNWaXNpYmlsaXR5Q2xpY2tlZCgpIHtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51KSB7XG4gICAgICB0aGlzLm9UYWJsZU1lbnUub25DaGFuZ2VDb2x1bW5zVmlzaWJpbGl0eUNsaWNrZWQoKTtcbiAgICB9XG4gIH1cblxuICBvbk1hdFRhYmxlQ29udGVudENoYW5nZWQoKSB7XG4gICAgLy9cbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBuYXZpZ2F0aW9uIHRvIG5ldyBpdGVtIGluc2VydGlvblxuICAgKi9cbiAgYWRkKCkge1xuICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICBpZiAodGhpcy5zaG93Tm90aWZpY2F0aW9uT2ZSZWFkT25seSkge1xuICAgICAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuKCdNRVNTQUdFUy5PUEVSQVRJT05fTk9UX0FMTE9XRURfUkVBRE9OTFknKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oUGVybWlzc2lvbnNVdGlscy5BQ1RJT05fSU5TRVJUKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdXBlci5pbnNlcnREZXRhaWwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHNlbGVjdGVkIHJvd3NcbiAgICogQHBhcmFtIFtjbGVhclNlbGVjdGVkSXRlbXNdXG4gICAqL1xuICByZW1vdmUoY2xlYXJTZWxlY3RlZEl0ZW1zOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgaWYgKHRoaXMuc2hvd05vdGlmaWNhdGlvbk9mUmVhZE9ubHkpIHtcbiAgICAgICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbignTUVTU0FHRVMuT1BFUkFUSU9OX05PVF9BTExPV0VEX1JFQURPTkxZJyk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5jaGVja0VuYWJsZWRBY3Rpb25QZXJtaXNzaW9uKFBlcm1pc3Npb25zVXRpbHMuQUNUSU9OX0RFTEVURSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuZ2V0U2VsZWN0ZWRJdGVtcygpO1xuICAgIGlmIChzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlhbG9nU2VydmljZS5jb25maXJtKCdDT05GSVJNJywgJ01FU1NBR0VTLkNPTkZJUk1fREVMRVRFJykudGhlbihyZXMgPT4ge1xuICAgICAgaWYgKHJlcyA9PT0gdHJ1ZSkge1xuICAgICAgICBpZiAodGhpcy5kYXRhU2VydmljZSAmJiAodGhpcy5kZWxldGVNZXRob2QgaW4gdGhpcy5kYXRhU2VydmljZSkgJiYgdGhpcy5lbnRpdHkgJiYgKHRoaXMua2V5c0FycmF5Lmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgY29uc3QgZmlsdGVycyA9IFNlcnZpY2VVdGlscy5nZXRBcnJheVByb3BlcnRpZXMoc2VsZWN0ZWRJdGVtcywgdGhpcy5rZXlzQXJyYXkpO1xuICAgICAgICAgIGNvbnN0IHNxbFR5cGVzQXJnID0gdGhpcy5nZXRTcWxUeXBlc09mS2V5cygpO1xuICAgICAgICAgIHRoaXMuZGFvVGFibGUucmVtb3ZlUXVlcnkoZmlsdGVycywgc3FsVHlwZXNBcmcpLnN1YnNjcmliZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgbmV4dDogKHYpID0+IHtcbiAgICAgICAgICAgICAgICBPYnNlcnZhYmxlV3JhcHBlci5jYWxsRW1pdCh0aGlzLm9uUm93RGVsZXRlZCwgc2VsZWN0ZWRJdGVtcyk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGVycm9yOiAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvd0RpYWxvZ0Vycm9yKGUsICdNRVNTQUdFUy5FUlJPUl9ERUxFVEUnKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBFbnN1cmluZyB0aGF0IHRoZSBkZWxldGVkIGl0ZW1zIHdpbGwgbm90IGxvbmdlciBiZSBwYXJ0IG9mIHRoZSBzZWxlY3Rpb25Nb2RlbFxuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbXMuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmRlc2VsZWN0KGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmZvcm1MYXlvdXRNYW5hZ2VyLmNsb3NlRGV0YWlscyhmaWx0ZXJzLCB7IGV4aXRXaXRob3V0Q29uZmlybWF0aW9uOiB0cnVlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRlbGV0ZUxvY2FsSXRlbXMoKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjbGVhclNlbGVjdGVkSXRlbXMpIHtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gIH1cblxuICAvKipcbiAgICogUmVmcmVzaHMgdGFibGUgY29tcG9uZW50XG4gICAqL1xuICByZWZyZXNoKCkge1xuICAgIHRoaXMucmVsb2FkRGF0YSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3dzIGFuZCBzZWxlY3QgYWxsIGNoZWNrYm94XG4gICAqL1xuICBzaG93QW5kU2VsZWN0QWxsQ2hlY2tib3goKSB7XG4gICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25Nb2RlTXVsdGlwbGUoKSkge1xuICAgICAgaWYgKHRoaXMuc2VsZWN0QWxsQ2hlY2tib3gpIHtcbiAgICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udmlzaWJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLmluaXRpYWxpemVDaGVja2JveENvbHVtbigpO1xuICAgICAgdGhpcy5zZWxlY3RBbGwoKTtcbiAgICB9XG4gIH1cblxuICByZWxvYWRQYWdpbmF0ZWREYXRhRnJvbVN0YXJ0KGNsZWFyU2VsZWN0ZWRJdGVtczogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgLy8gSW5pdGlhbGl6ZSBwYWdlIGluZGV4XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMDtcbiAgICAgIHRoaXMucmVsb2FkRGF0YShjbGVhclNlbGVjdGVkSXRlbXMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWxvYWRzIGRhdGFcbiAgICovXG4gIHJlbG9hZERhdGEoY2xlYXJTZWxlY3RlZEl0ZW1zOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGlmICghdGhpcy5jaGVja0VuYWJsZWRBY3Rpb25QZXJtaXNzaW9uKFBlcm1pc3Npb25zVXRpbHMuQUNUSU9OX1JFRlJFU0gpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuY29tcG9uZW50U3RhdGVTZXJ2aWNlLnJlZnJlc2hTZWxlY3Rpb24oKTtcbiAgICBpZiAoY2xlYXJTZWxlY3RlZEl0ZW1zKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMuZmluaXNoUXVlcnlTdWJzY3JpcHRpb24gPSBmYWxzZTtcbiAgICB0aGlzLnBlbmRpbmdRdWVyeSA9IHRydWU7XG4gICAgbGV0IHF1ZXJ5QXJnczogT1F1ZXJ5RGF0YUFyZ3M7XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIHF1ZXJ5QXJncyA9IHtcbiAgICAgICAgb2Zmc2V0OiB0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5xdWVyeVJvd3MsXG4gICAgICAgIGxlbmd0aDogdGhpcy5xdWVyeVJvd3NcbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMuc3RvcEVkaXRpb24oZmFsc2UpO1xuICAgIHRoaXMucXVlcnlEYXRhKHZvaWQgMCwgcXVlcnlBcmdzKTtcbiAgfVxuXG4gIGhhbmRsZUNsaWNrKHJvdzogYW55LCBjb2x1bW46IE9Db2x1bW4sIHJvd0luZGV4OiBudW1iZXIsIGNlbGxSZWY6IEVsZW1lbnRSZWYsIGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5jbGlja1N1YmplY3QubmV4dCh7IHJvdywgY29sdW1uLCBjZWxsUmVmLCByb3dJbmRleCwgZXZlbnQgfSk7XG4gIH1cblxuICBkb0hhbmRsZUNsaWNrKHJvdzogYW55LCBjb2x1bW46IHN0cmluZywgcm93SW5kZXg6IG51bWJlciwgJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgaWYgKHRoaXMucmVhZE9ubHkgJiYgdGhpcy5zaG93Tm90aWZpY2F0aW9uT2ZSZWFkT25seSkge1xuICAgICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbignTUVTU0FHRVMuT1BFUkFUSU9OX05PVF9BTExPV0VEX1JFQURPTkxZJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm9lbmFibGVkIHx8IHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCh0aGlzLmRldGFpbE1vZGUgPT09IENvZGVzLkRFVEFJTF9NT0RFX0NMSUNLKSkge1xuICAgICAgdGhpcy5vbkNsaWNrLmVtaXQoeyByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4LCBtb3VzZUV2ZW50OiAkZXZlbnQsIGNvbHVtbk5hbWU6IGNvbHVtbiwgY2VsbDogcm93W2NvbHVtbl0gfSk7XG4gICAgICB0aGlzLnNhdmVEYXRhTmF2aWdhdGlvbkluTG9jYWxTdG9yYWdlKCk7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICB0aGlzLnNlbGVjdGVkUm93KHJvdyk7XG4gICAgICB0aGlzLnZpZXdEZXRhaWwocm93KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25Nb2RlTXVsdGlwbGUoKSAmJiAoJGV2ZW50LmN0cmxLZXkgfHwgJGV2ZW50Lm1ldGFLZXkpKSB7XG4gICAgICAvLyBUT0RPOiB0ZXN0ICRldmVudC5tZXRhS2V5IG9uIE1BQ1xuICAgICAgdGhpcy5zZWxlY3RlZFJvdyhyb3cpO1xuICAgICAgdGhpcy5vbkNsaWNrLmVtaXQoeyByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4LCBtb3VzZUV2ZW50OiAkZXZlbnQsIGNvbHVtbk5hbWU6IGNvbHVtbiwgY2VsbDogcm93W2NvbHVtbl0gfSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzU2VsZWN0aW9uTW9kZU11bHRpcGxlKCkgJiYgJGV2ZW50LnNoaWZ0S2V5KSB7XG4gICAgICB0aGlzLmhhbmRsZU11bHRpcGxlU2VsZWN0aW9uKHJvdyk7XG4gICAgfSBlbHNlIGlmICghdGhpcy5pc1NlbGVjdGlvbk1vZGVOb25lKCkpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLmdldFNlbGVjdGVkSXRlbXMoKTtcbiAgICAgIGlmICh0aGlzLmlzUm93U2VsZWN0ZWQocm93KSAmJiBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMSAmJiB0aGlzLmVkaXRpb25FbmFibGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25BbmRFZGl0aW5nKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGVkUm93KHJvdyk7XG4gICAgICB0aGlzLm9uQ2xpY2suZW1pdCh7IHJvdzogcm93LCByb3dJbmRleDogcm93SW5kZXgsIG1vdXNlRXZlbnQ6ICRldmVudCwgY29sdW1uTmFtZTogY29sdW1uLCBjZWxsOiByb3dbY29sdW1uXSB9KTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVNdWx0aXBsZVNlbGVjdGlvbihpdGVtOiBhbnkpIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlyc3QgPSB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhLmluZGV4T2YodGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWRbMF0pO1xuICAgICAgY29uc3QgbGFzdCA9IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEuaW5kZXhPZihpdGVtKTtcbiAgICAgIGNvbnN0IGluZGV4RnJvbSA9IE1hdGgubWluKGZpcnN0LCBsYXN0KTtcbiAgICAgIGNvbnN0IGluZGV4VG8gPSBNYXRoLm1heChmaXJzdCwgbGFzdCk7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhLnNsaWNlKGluZGV4RnJvbSwgaW5kZXhUbyArIDEpLmZvckVhY2goZSA9PiB0aGlzLnNlbGVjdGVkUm93KGUpKTtcbiAgICAgIE9ic2VydmFibGVXcmFwcGVyLmNhbGxFbWl0KHRoaXMub25DbGljaywgdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzYXZlRGF0YU5hdmlnYXRpb25JbkxvY2FsU3RvcmFnZSgpIHtcbiAgICBzdXBlci5zYXZlRGF0YU5hdmlnYXRpb25JbkxvY2FsU3RvcmFnZSgpO1xuICAgIHRoaXMuc3RvcmVQYWdpbmF0aW9uU3RhdGUgPSB0cnVlO1xuICB9XG5cbiAgaGFuZGxlRG91YmxlQ2xpY2socm93OiBhbnksIGNvbHVtbjogT0NvbHVtbiwgcm93SW5kZXg6IG51bWJlciwgY2VsbFJlZjogRWxlbWVudFJlZiwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmRibGNsaWNrU3ViamVjdC5uZXh0KHsgcm93LCBjb2x1bW4sIGNlbGxSZWYsIHJvd0luZGV4LCBldmVudCB9KTtcbiAgfVxuXG4gIGdldCBlZGl0aW9uRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLnNvbWUoaXRlbSA9PiBpdGVtLmVkaXRpbmcpO1xuICB9XG5cbiAgaGFuZGxlRE9NQ2xpY2soZXZlbnQpIHtcbiAgICBpZiAodGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVkaXRpb25FbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgb3ZlcmxheUNvbnRhaW5lciA9IGRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnY2RrLW92ZXJsYXktY29udGFpbmVyJylbMF07XG4gICAgaWYgKG92ZXJsYXlDb250YWluZXIgJiYgb3ZlcmxheUNvbnRhaW5lci5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGFibGVDb250YWluZXIgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm8tdGFibGUtY29udGFpbmVyJyk7XG4gICAgY29uc3QgdGFibGVDb250ZW50ID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5vLXRhYmxlLWNvbnRhaW5lciB0YWJsZS5tYXQtdGFibGUnKTtcbiAgICBpZiAodGFibGVDb250YWluZXIgJiYgdGFibGVDb250ZW50ICYmIHRhYmxlQ29udGFpbmVyLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiYgIXRhYmxlQ29udGVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFjdGl2YXRlQ29sdW1uRWRpdGlvbihjb2x1bW46IE9Db2x1bW4sIHJvdzogYW55LCBjZWxsUmVmOiBhbnkpIHtcbiAgICBpZiAoY2VsbFJlZiAmJiBjb2x1bW4uZWRpdGluZyAmJiB0aGlzLmVkaXRpbmdDZWxsID09PSBjZWxsUmVmKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbHVtblBlcm1pc3Npb25zOiBPUGVybWlzc2lvbnMgPSB0aGlzLmdldE9Db2x1bW5QZXJtaXNzaW9ucyhjb2x1bW4uYXR0cik7XG4gICAgaWYgKGNvbHVtblBlcm1pc3Npb25zLmVuYWJsZWQgPT09IGZhbHNlKSB7XG4gICAgICBjb25zb2xlLndhcm4oYCR7Y29sdW1uLmF0dHJ9IGVkaXRpb24gbm90IGFsbG93ZWQgZHVlIHRvIHBlcm1pc3Npb25zYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jbGVhclNlbGVjdGlvbkFuZEVkaXRpbmcoKTtcbiAgICB0aGlzLnNlbGVjdGVkUm93KHJvdyk7XG4gICAgdGhpcy5lZGl0aW5nQ2VsbCA9IGNlbGxSZWY7XG4gICAgY29uc3Qgcm93RGF0YSA9IHt9O1xuICAgIHRoaXMua2V5c0FycmF5LmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgcm93RGF0YVtrZXldID0gcm93W2tleV07XG4gICAgfSk7XG4gICAgcm93RGF0YVtjb2x1bW4uYXR0cl0gPSByb3dbY29sdW1uLmF0dHJdO1xuICAgIHRoaXMuZWRpdGluZ1JvdyA9IHJvdztcbiAgICBjb2x1bW4uZWRpdGluZyA9IHRydWU7XG4gICAgY29sdW1uLmVkaXRvci5zdGFydEVkaXRpb24ocm93RGF0YSk7XG4gIH1cblxuICB1cGRhdGVDZWxsRGF0YShjb2x1bW46IE9Db2x1bW4sIGRhdGE6IGFueSwgc2F2ZUNoYW5nZXM6IGJvb2xlYW4pIHtcbiAgICBpZiAoIXRoaXMuY2hlY2tFbmFibGVkQWN0aW9uUGVybWlzc2lvbihQZXJtaXNzaW9uc1V0aWxzLkFDVElPTl9VUERBVEUpKSB7XG4gICAgICBjb25zdCByZXMgPSBuZXcgT2JzZXJ2YWJsZShpbm5lck9ic2VydmVyID0+IHtcbiAgICAgICAgaW5uZXJPYnNlcnZlci5lcnJvcigpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgICBjb2x1bW4uZWRpdGluZyA9IGZhbHNlO1xuICAgIGlmIChzYXZlQ2hhbmdlcyAmJiB0aGlzLmVkaXRpbmdSb3cgIT09IHVuZGVmaW5lZCkge1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmVkaXRpbmdSb3csIGRhdGEpO1xuICAgIH1cbiAgICB0aGlzLnN0b3BFZGl0aW9uKCk7XG4gICAgaWYgKHNhdmVDaGFuZ2VzICYmIGNvbHVtbi5lZGl0b3IudXBkYXRlUmVjb3JkT25FZGl0KSB7XG4gICAgICBjb25zdCB0b1VwZGF0ZSA9IHt9O1xuICAgICAgdG9VcGRhdGVbY29sdW1uLmF0dHJdID0gZGF0YVtjb2x1bW4uYXR0cl07XG4gICAgICBjb25zdCBrdiA9IHRoaXMuZXh0cmFjdEtleXNGcm9tUmVjb3JkKGRhdGEpO1xuICAgICAgcmV0dXJuIHRoaXMudXBkYXRlUmVjb3JkKGt2LCB0b1VwZGF0ZSk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0S2V5c1ZhbHVlcygpOiBhbnlbXSB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0QWxsVmFsdWVzKCk7XG4gICAgcmV0dXJuIGRhdGEubWFwKChyb3cpID0+IHtcbiAgICAgIGNvbnN0IG9iaiA9IHt9O1xuICAgICAgdGhpcy5rZXlzQXJyYXkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGlmIChyb3dba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgb2JqW2tleV0gPSByb3dba2V5XTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSk7XG4gIH1cblxuICBvblNob3dzU2VsZWN0cygpIHtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51KSB7XG4gICAgICB0aGlzLm9UYWJsZU1lbnUub25TaG93c1NlbGVjdHMoKTtcbiAgICB9XG4gIH1cblxuICBpbml0aWFsaXplQ2hlY2tib3hDb2x1bW4oKSB7XG4gICAgLy8gSW5pdGlhbGl6aW5nIHJvdyBzZWxlY3Rpb24gbGlzdGVuZXJcbiAgICBpZiAoIXRoaXMuc2VsZWN0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uICYmIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGUpIHtcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uID0gdGhpcy5zZWxlY3Rpb24uY2hhbmdlZC5zdWJzY3JpYmUoKHNlbGVjdGlvbkRhdGE6IFNlbGVjdGlvbkNoYW5nZTxhbnk+KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnRyaWdnZXJTZWxlY3Rpb25FdmVudHMgJiYgc2VsZWN0aW9uRGF0YSkge1xuICAgICAgICAgIGlmIChzZWxlY3Rpb25EYXRhLmFkZGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIE9ic2VydmFibGVXcmFwcGVyLmNhbGxFbWl0KHRoaXMub25Sb3dTZWxlY3RlZCwgc2VsZWN0aW9uRGF0YS5hZGRlZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzZWxlY3Rpb25EYXRhLnJlbW92ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgT2JzZXJ2YWJsZVdyYXBwZXIuY2FsbEVtaXQodGhpcy5vblJvd0Rlc2VsZWN0ZWQsIHNlbGVjdGlvbkRhdGEucmVtb3ZlZCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVTZWxlY3Rpb25Db2x1bW5TdGF0ZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVNlbGVjdGlvbkNvbHVtblN0YXRlKCkge1xuICAgIGlmICghdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udmlzaWJsZSkge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucyAmJiB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlXG4gICAgICAmJiB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zWzBdICE9PSBDb2Rlcy5OQU1FX0NPTFVNTl9TRUxFQ1QpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnMudW5zaGlmdChDb2Rlcy5OQU1FX0NPTFVNTl9TRUxFQ1QpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucyAmJiAhdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udmlzaWJsZVxuICAgICAgJiYgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1uc1swXSA9PT0gQ29kZXMuTkFNRV9DT0xVTU5fU0VMRUNUKSB7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zLnNoaWZ0KCk7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlU3RhdGVFeHBhbmRlZENvbHVtbigpO1xuICB9XG5cbiAgcHVibGljIGdldE51bVJvd1NlbGVjdGVkSW5DdXJyZW50RGF0YSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UgPyB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhLmZpbHRlcih4ID0+ICF0aGlzLmlzRGlzYWJsZUNoZWNrYm94KHgpICYmIHRoaXMuaXNSb3dTZWxlY3RlZCh4KSkubGVuZ3RoIDogMDtcbiAgfVxuXG4gIHB1YmxpYyBpc0FsbFNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5nZXROdW1Sb3dTZWxlY3RlZEluQ3VycmVudERhdGEoKTtcbiAgICBjb25zdCBudW1Sb3dzID0gdGhpcy5kYXRhU291cmNlID8gdGhpcy5kYXRhU291cmNlLnJlbmRlcmVkRGF0YS5sZW5ndGggOiAwO1xuICAgIHJldHVybiBudW1TZWxlY3RlZCA+IDAgJiYgbnVtU2VsZWN0ZWQgPT09IG51bVJvd3M7XG4gIH1cblxuICBwdWJsaWMgaXNJbmRldGVybWluYXRlKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IG51bVNlbGVjdGVkID0gdGhpcy5nZXROdW1Sb3dTZWxlY3RlZEluQ3VycmVudERhdGEoKTtcbiAgICBjb25zdCBudW1Sb3dzID0gdGhpcy5kYXRhU291cmNlID8gdGhpcy5kYXRhU291cmNlLnJlbmRlcmVkRGF0YS5sZW5ndGggOiAwO1xuICAgIHJldHVybiBudW1TZWxlY3RlZCA+IDAgJiYgbnVtUm93cyA+IDAgJiYgbnVtU2VsZWN0ZWQgIT09IG51bVJvd3M7XG4gIH1cblxuICBwdWJsaWMgbWFzdGVyVG9nZ2xlKGV2ZW50OiBNYXRDaGVja2JveENoYW5nZSk6IHZvaWQge1xuICAgIGV2ZW50LmNoZWNrZWQgPyB0aGlzLnNlbGVjdEFsbCgpIDogdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhLmZvckVhY2gocm93ID0+IHRoaXMuc2V0U2VsZWN0ZWQocm93KSk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0aW9uQ2hlY2tib3hUb2dnbGUoZXZlbnQ6IE1hdENoZWNrYm94Q2hhbmdlLCByb3c6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzU2VsZWN0aW9uTW9kZVNpbmdsZSgpKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfVxuICAgIGV2ZW50LmNoZWNrZWQgPyB0aGlzLnNlbGVjdGVkUm93KHJvdykgOiB0aGlzLnNlbGVjdGlvbi5kZXNlbGVjdChyb3cpO1xuICAgIHRoaXMuc3RhdGUuc2VsZWN0aW9uID0gdGhpcy5zZWxlY3Rpb24uc2VsZWN0ZWQ7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0ZWRSb3cocm93OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNldFNlbGVjdGVkKHJvdyk7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwdWJsaWMgY2xlYXJTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc2VsZWN0aW9uKSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoKTtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUpKSB7XG4gICAgICB0aGlzLnN0YXRlLnNlbGVjdGlvbiA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRTZWxlY3RlZChpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0Rpc2FibGVDaGVja2JveChpdGVtKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1Jvd1NlbGVjdGVkKGl0ZW0pKSB7XG4gICAgICAvKipUaGUgc2VsZWN0ZWQgaXRlbSBpcyBjbGVhcmVkIGlmIHRoZSBpdGVtIGNoYW5nZXMgdmFsdWUqL1xuICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXIoaXRlbSk7XG4gICAgfVxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChpdGVtKSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHNldFNlbGVjdGVkQnlLZXlzKGtleVZhbHVlczogQXJyYXk8YW55Pikge1xuICAgIGNvbnN0IHJvd3NUb1NlbGVjdCA9IHRoaXMuZ2V0RGF0YUFycmF5KCkuZmlsdGVyKHJvdyA9PiB7XG4gICAgICByZXR1cm4ga2V5VmFsdWVzLmZpbmRJbmRleChrZXlWYWx1ZSA9PiByb3dbdGhpcy5rZXlzXSA9PT0ga2V5VmFsdWUpID4gLTE7XG4gICAgfSk7XG4gICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0KC4uLnJvd3NUb1NlbGVjdCk7XG4gIH1cblxuICBzZXRTZWxlY3RlZEJ5TXVsdGlwbGVLZXlzKGtleVZhbHVlczogQXJyYXk8T2JqZWN0Pikge1xuICAgIGNvbnN0IHJvd3NUb1NlbGVjdCA9IHRoaXMuZ2V0RGF0YUFycmF5KCkuZmlsdGVyKHJvdyA9PiB7XG4gICAgICByZXR1cm4ga2V5VmFsdWVzLmZpbmRJbmRleChrZXlWYWx1ZSA9PlxuICAgICAgICBPYmplY3Qua2V5cyhrZXlWYWx1ZSkuZXZlcnkoa2V5ID0+IGtleVZhbHVlW2tleV0gPT09IHJvd1trZXldKVxuICAgICAgKSA+IC0xO1xuICAgIH0pO1xuICAgIHJvd3NUb1NlbGVjdC5ldmVyeShyb3dUb1NlbGVjdCA9PiB0aGlzLnNlbGVjdGlvbi5zZWxlY3Qocm93VG9TZWxlY3QpKTtcbiAgfVxuXG4gIHNldFNlbGVjdGVkQnlSb3dJZHMocm93SWRzOiBBcnJheTxudW1iZXI+KSB7XG4gICAgcm93SWRzLmZvckVhY2gocm93SWQgPT4gdGhpcy5zZWxlY3RlZFJvdyh0aGlzLmdldERhdGFBcnJheSgpW3Jvd0lkXSkpO1xuICB9XG5cbiAgZ2V0IHNob3dEZWxldGVCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlQnV0dG9uO1xuICB9XG5cbiAgZ2V0VHJhY2tCeUZ1bmN0aW9uKCk6IChpbmRleDogbnVtYmVyLCBpdGVtOiBhbnkpID0+IHN0cmluZyB7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG5cbiAgICByZXR1cm4gKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkgPT4ge1xuXG4gICAgICBsZXQgaXRlbUlkOiBzdHJpbmcgPSAnJztcblxuICAgICAgaWYgKHRoaXMuaXNHcm91cChpbmRleCwgaXRlbSkpIHtcbiAgICAgICAgaXRlbUlkICs9IGl0ZW0uY29sdW1uO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qga2V5c0xlbmdodCA9IHNlbGYua2V5c0FycmF5Lmxlbmd0aDtcbiAgICAgICAgc2VsZi5rZXlzQXJyYXkuZm9yRWFjaCgoa2V5OiBzdHJpbmcsIGlkeDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3VmZml4ID0gaWR4IDwgKGtleXNMZW5naHQgLSAxKSA/ICc7JyA6ICcnO1xuICAgICAgICAgIGl0ZW1JZCArPSBpdGVtW2tleV0gKyBzdWZmaXg7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBoYXNBc3luY0FuZFZpc2libGVDb2xzID0gdGhpcy5hc3luY0xvYWRDb2x1bW5zLnNvbWUoYyA9PiB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zLmluY2x1ZGVzKGMpKTtcbiAgICAgIGlmIChzZWxmLmFzeW5jTG9hZENvbHVtbnMubGVuZ3RoICYmIGhhc0FzeW5jQW5kVmlzaWJsZUNvbHMgJiYgIXNlbGYuZmluaXNoUXVlcnlTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgc2VsZi5xdWVyeVJvd0FzeW5jRGF0YShpbmRleCwgaXRlbSk7XG4gICAgICAgIGlmIChzZWxmLnBhZ2luYXRvciAmJiBpbmRleCA9PT0gKHNlbGYucGFnaW5hdG9yLnBhZ2VTaXplIC0gMSkpIHtcbiAgICAgICAgICBzZWxmLmZpbmlzaFF1ZXJ5U3Vic2NyaXB0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbUlkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGl0ZW1JZDtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcXVlcnlSb3dBc3luY0RhdGEocm93SW5kZXg6IG51bWJlciwgcm93RGF0YTogYW55KSB7XG4gICAgY29uc3Qga3YgPSBTZXJ2aWNlVXRpbHMuZ2V0T2JqZWN0UHJvcGVydGllcyhyb3dEYXRhLCB0aGlzLmtleXNBcnJheSk7XG4gICAgLy8gUmVwZWF0aW5nIGNoZWNraW5nIG9mIHZpc2libGUgY29sdW1uXG4gICAgY29uc3QgYXYgPSB0aGlzLmFzeW5jTG9hZENvbHVtbnMuZmlsdGVyKGMgPT4gdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy5pbmRleE9mKGMpICE9PSAtMSk7XG4gICAgaWYgKGF2Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gU2tpcHBpbmcgcXVlcnkgaWYgdGhlcmUgYXJlIG5vdCB2aXNpYmxlIGFzeW5jcm9uIGNvbHVtbnNcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29sdW1uUXVlcnlBcmdzID0gW2t2LCBhdiwgdGhpcy5lbnRpdHksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgY29uc3QgcXVlcnlNZXRob2ROYW1lID0gdGhpcy5wYWdlYWJsZSA/IHRoaXMucGFnaW5hdGVkUXVlcnlNZXRob2QgOiB0aGlzLnF1ZXJ5TWV0aG9kO1xuICAgIGlmICh0aGlzLmRhdGFTZXJ2aWNlICYmIChxdWVyeU1ldGhvZE5hbWUgaW4gdGhpcy5kYXRhU2VydmljZSkgJiYgdGhpcy5lbnRpdHkpIHtcbiAgICAgIGlmICh0aGlzLmFzeW5jTG9hZFN1YnNjcmlwdGlvbnNbcm93SW5kZXhdKSB7XG4gICAgICAgIHRoaXMuYXN5bmNMb2FkU3Vic2NyaXB0aW9uc1tyb3dJbmRleF0udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXN5bmNMb2FkU3Vic2NyaXB0aW9uc1tyb3dJbmRleF0gPSB0aGlzLmRhdGFTZXJ2aWNlW3F1ZXJ5TWV0aG9kTmFtZV1cbiAgICAgICAgLmFwcGx5KHRoaXMuZGF0YVNlcnZpY2UsIGNvbHVtblF1ZXJ5QXJncylcbiAgICAgICAgLnN1YnNjcmliZSgocmVzOiBTZXJ2aWNlUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICBpZiAocmVzLmlzU3VjY2Vzc2Z1bCgpKSB7XG4gICAgICAgICAgICBsZXQgZGF0YTtcbiAgICAgICAgICAgIGlmIChVdGlsLmlzQXJyYXkocmVzLmRhdGEpICYmIHJlcy5kYXRhLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICBkYXRhID0gcmVzLmRhdGFbMF07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFV0aWwuaXNPYmplY3QocmVzLmRhdGEpKSB7XG4gICAgICAgICAgICAgIGRhdGEgPSByZXMuZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGFvVGFibGUuc2V0QXN5bmNocm9ub3VzQ29sdW1uKGRhdGEsIHJvd0RhdGEpO1xuICAgICAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHBhZ2UgdGFibGUgZGF0YS5cbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldFZhbHVlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UuZ2V0Q3VycmVudERhdGEoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdldHMgYWxsIHZhbHVlc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0QWxsVmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UuZ2V0Q3VycmVudEFsbERhdGEoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdldHMgYWxsIHJlbmRlcmVkIHZhbHVlc1xuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0QWxsUmVuZGVyZWRWYWx1ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5nZXRBbGxSZW5kZXJlckRhdGEoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgcGFnZSB0YWJsZSByZW5kZXJlciBkYXRhLlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0UmVuZGVyZWRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlLmdldEN1cnJlbnRSZW5kZXJlckRhdGEoKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEdldHMgc3FsIHR5cGVzIGZyb20gZGF0YSBzb3VyY2UgYW5kIHRhYmxlIGNvbHVtbnNcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldFNxbFR5cGVzKCkge1xuICAgIGNvbnN0IGFsbFNxbFR5cGVzID0gVXRpbC5pc0RlZmluZWQodGhpcy5kYXRhU291cmNlLnNxbFR5cGVzKSA/IHRoaXMuZGF0YVNvdXJjZS5zcWxUeXBlcyA6IHt9O1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5mb3JFYWNoKChjb2w6IE9Db2x1bW4pID0+IHtcbiAgICAgIGlmIChjb2wuc3FsVHlwZSkge1xuICAgICAgICBhbGxTcWxUeXBlc1tjb2wuYXR0cl0gPSBjb2wuc3FsVHlwZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gYWxsU3FsVHlwZXM7XG4gIH1cblxuICBzZXRPVGFibGVDb2x1bW5zRmlsdGVyKHRhYmxlQ29sdW1uc0ZpbHRlcjogT1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCkge1xuICAgIHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCA9IHRhYmxlQ29sdW1uc0ZpbHRlcjtcbiAgfVxuXG4gIGdldCBmaWx0ZXJDb2x1bW5zKCk6IE9GaWx0ZXJDb2x1bW5bXSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uZmlsdGVyQ29sdW1ucyA9PT0gdGhpcy5vcmlnaW5hbEZpbHRlckNvbHVtbnNcbiAgICAgICYmIHRoaXMuc3RhdGUuZmlsdGVyQ29sdW1ucykge1xuICAgICAgcmV0dXJuIHRoaXMuc3RhdGUuZmlsdGVyQ29sdW1ucztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub3JpZ2luYWxGaWx0ZXJDb2x1bW5zO1xuICB9XG5cbiAgZ2V0IG9yaWdpbmFsRmlsdGVyQ29sdW1ucygpOiBBcnJheTxPRmlsdGVyQ29sdW1uPiB7XG4gICAgbGV0IHNvcnRDb2x1bW5zRmlsdGVyID0gW107XG4gICAgaWYgKHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCkge1xuICAgICAgc29ydENvbHVtbnNGaWx0ZXIgPSB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQuY29sdW1uc0FycmF5O1xuICAgIH1cbiAgICByZXR1cm4gc29ydENvbHVtbnNGaWx0ZXI7XG4gIH1cblxuICBnZXQgb3JpZ2luYWxHcm91cGVkQ29sdW1uc0FycmF5KCk6IEFycmF5PHN0cmluZz4ge1xuICAgIHJldHVybiBVdGlsLnBhcnNlQXJyYXkodGhpcy5ncm91cGVkQ29sdW1ucywgdHJ1ZSk7XG4gIH1cblxuICBnZXRTdG9yZWRDb2x1bW5zRmlsdGVycygpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zdG9yZWRGaWx0ZXJzO1xuICB9XG5cbiAgZ2V0U3RvcmVkR3JvdXBlZENvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuc3RvcmVkQ29uZmlndXJhdGlvbnM7XG4gIH1cblxuICBvbkZpbHRlckJ5Q29sdW1uQ2xpY2tlZCgpIHtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51KSB7XG4gICAgICB0aGlzLm9UYWJsZU1lbnUub25GaWx0ZXJCeUNvbHVtbkNsaWNrZWQoKTtcbiAgICB9XG4gIH1cblxuICBvblN0b3JlRmlsdGVyQ2xpY2tlZCgpIHtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51KSB7XG4gICAgICB0aGlzLm9UYWJsZU1lbnUub25TdG9yZUZpbHRlckNsaWNrZWQoKTtcbiAgICB9XG4gIH1cblxuICBvbkxvYWRGaWx0ZXJDbGlja2VkKCkge1xuICAgIGlmICh0aGlzLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5vbkxvYWRGaWx0ZXJDbGlja2VkKCk7XG4gICAgfVxuICB9XG5cbiAgb25DbGVhckZpbHRlckNsaWNrZWQoKSB7XG4gICAgaWYgKHRoaXMub1RhYmxlTWVudSkge1xuICAgICAgdGhpcy5vVGFibGVNZW51Lm9uQ2xlYXJGaWx0ZXJDbGlja2VkKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBmaWx0ZXJzKGNvbHVtbiBmaWx0ZXIsIHF1aWNrZmlsdGVyIGFuZCBmaWx0ZXIgYnVpbGRlcikgYW5kIHJlbG9hZCBkYXRhXG4gICAqIEBwYXJhbSBbdHJpZ2dlckRhdGFzb3VyY2VVcGRhdGVdXG4gICAqL1xuICBjbGVhckZpbHRlcnModHJpZ2dlckRhdGFzb3VyY2VVcGRhdGU6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG5cbiAgICB0aGlzLmRhdGFTb3VyY2UuY2xlYXJDb2x1bW5GaWx0ZXJzKHRyaWdnZXJEYXRhc291cmNlVXBkYXRlKTtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51ICYmIHRoaXMub1RhYmxlTWVudS5jb2x1bW5GaWx0ZXJPcHRpb24pIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5jb2x1bW5GaWx0ZXJPcHRpb24uc2V0QWN0aXZlKHRoaXMuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlKTtcbiAgICB9XG4gICAgdGhpcy5vbkZpbHRlckJ5Q29sdW1uQ2hhbmdlLmVtaXQoKTtcbiAgICBpZiAodGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudCkge1xuICAgICAgdGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudC5zZXRWYWx1ZSh2b2lkIDApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmZpbHRlckJ1aWxkZXIpIHtcbiAgICAgIHRoaXMuZmlsdGVyQnVpbGRlci5jbGVhckZpbHRlcigpO1xuICAgICAgdGhpcy5maWx0ZXJCdWlsZGVyLnRyaWdnZXJSZWxvYWQoKTtcbiAgICB9XG5cbiAgfVxuXG4gIGNsZWFyQ29sdW1uRmlsdGVyKGF0dHI6IHN0cmluZywgdHJpZ2dlckRhdGFzb3VyY2VVcGRhdGU6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU291cmNlLmNsZWFyQ29sdW1uRmlsdGVyKGF0dHIsIHRyaWdnZXJEYXRhc291cmNlVXBkYXRlKTtcbiAgICB0aGlzLm9uRmlsdGVyQnlDb2x1bW5DaGFuZ2UuZW1pdCgpO1xuICAgIHRoaXMucmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydChmYWxzZSk7XG4gIH1cblxuICBmaWx0ZXJCeUNvbHVtbihjb2x1bW5WYWx1ZUZpbHRlcjogT0NvbHVtblZhbHVlRmlsdGVyKSB7XG4gICAgdGhpcy5kYXRhU291cmNlLmFkZENvbHVtbkZpbHRlcihjb2x1bW5WYWx1ZUZpbHRlcik7XG4gICAgdGhpcy5vbkZpbHRlckJ5Q29sdW1uQ2hhbmdlLmVtaXQoKTtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgdGhpcy5yZWxvYWRQYWdpbmF0ZWREYXRhRnJvbVN0YXJ0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBjbGVhckNvbHVtbkZpbHRlcnModHJpZ2dlckRhdGFzb3VyY2VVcGRhdGU6IGJvb2xlYW4gPSB0cnVlLCBjb2x1bW5zQXR0cj86IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5kYXRhU291cmNlLmNsZWFyQ29sdW1uRmlsdGVycyh0cmlnZ2VyRGF0YXNvdXJjZVVwZGF0ZSwgY29sdW1uc0F0dHIpO1xuICAgIHRoaXMub25GaWx0ZXJCeUNvbHVtbkNoYW5nZS5lbWl0KCk7XG4gICAgdGhpcy5yZWxvYWRQYWdpbmF0ZWREYXRhRnJvbVN0YXJ0KGZhbHNlKTtcbiAgfVxuXG4gIGlzQ29sdW1uRmlsdGVyYWJsZShjb2x1bW46IE9Db2x1bW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQodGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50KSA/IHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudC5pc0NvbHVtbkZpbHRlcmFibGUoY29sdW1uLmF0dHIpIDogdGhpcy5pc1NlYXJjaGVhYmxlQ29sdW1uKGNvbHVtbik7XG4gIH1cblxuICBpc1NlYXJjaGVhYmxlQ29sdW1uKGNvbHVtbjogT0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlYXJjaGVhYmxlQ29sdW1ucy5pbmNsdWRlcyhjb2x1bW4uYXR0cik7XG4gIH1cbiAgaXNDb2x1bW5GaWx0ZXJBY3RpdmUoY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuZGF0YVNvdXJjZS5nZXRDb2x1bW5WYWx1ZUZpbHRlckJ5QXR0cihjb2x1bW4uYXR0cikpO1xuICB9XG5cbiAgb3BlbkNvbHVtbkZpbHRlckRpYWxvZyhjb2x1bW46IE9Db2x1bW4sIGV2ZW50OiBFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihPVGFibGVGaWx0ZXJCeUNvbHVtbkRhdGFEaWFsb2dDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgY29sdW1uOiBjb2x1bW4sXG4gICAgICAgIHRhYmxlOiB0aGlzXG4gICAgICB9LFxuICAgICAgbWluV2lkdGg6ICczODBweCcsXG4gICAgICBkaXNhYmxlQ2xvc2U6IHRydWUsXG4gICAgICBwYW5lbENsYXNzOiBbJ28tZGlhbG9nLWNsYXNzJywgJ28tdGFibGUtZGlhbG9nJ11cbiAgICB9KTtcblxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgc3dpdGNoIChyZXN1bHQpIHtcbiAgICAgICAgY2FzZSBUYWJsZUZpbHRlckJ5Q29sdW1uRGlhbG9nUmVzdWx0LkFDQ0VQVDpcbiAgICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZUZpbHRlciA9IGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5nZXRDb2x1bW5WYWx1ZXNGaWx0ZXIoKTtcbiAgICAgICAgICB0aGlzLmZpbHRlckJ5Q29sdW1uKGNvbHVtblZhbHVlRmlsdGVyKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBUYWJsZUZpbHRlckJ5Q29sdW1uRGlhbG9nUmVzdWx0LkNMRUFSOlxuICAgICAgICAgIGNvbnN0IGNvbCA9IGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5jb2x1bW47XG4gICAgICAgICAgdGhpcy5jbGVhckNvbHVtbkZpbHRlcihjb2wuYXR0cik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLm9uU29ydEZpbHRlclZhbHVlc0NoYW5nZS5zdWJzY3JpYmUoc29ydGVkRmlsdGVyYWJsZUNvbHVtbiA9PiB7XG4gICAgICAvLyBndWFyZGFyIGVuIGxvY2Fsc3RvcmFnZSBlbCBjYW1iaW9cbiAgICAgIHRoaXMuc3RvcmVGaWx0ZXJDb2x1bW5zKHNvcnRlZEZpbHRlcmFibGVDb2x1bW4pO1xuICAgIH0pO1xuICB9XG5cbiAgc3RvcmVGaWx0ZXJDb2x1bW5zKHNvcnRDb2x1bW5GaWx0ZXI6IE9GaWx0ZXJDb2x1bW4pIHtcbiAgICBpZiAodGhpcy5zdGF0ZS5maWx0ZXJDb2x1bW5zKSB7XG4gICAgICAvLyBpZiBleGlzdHMgaW4gc3RhdGUgdGhlbiB1cGRhdGVkIHNvcnQgdmFsdWVcbiAgICAgIGNvbnN0IGZpbHRlckNvbHVtbiA9IHRoaXMuZmlsdGVyQ29sdW1ucy5maW5kKHggPT4geC5hdHRyID09PSBzb3J0Q29sdW1uRmlsdGVyLmF0dHIpO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKGZpbHRlckNvbHVtbikpIHtcbiAgICAgICAgZmlsdGVyQ29sdW1uLnNvcnQgPSBzb3J0Q29sdW1uRmlsdGVyLnNvcnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlbHNlIGV4aXN0cyBpbiBzdGF0ZSB0aGVuIGFkZGVkIGZpbHRlciBjb2x1bW5cbiAgICAgICAgdGhpcy5maWx0ZXJDb2x1bW5zLnB1c2goc29ydENvbHVtbkZpbHRlcik7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhdGUuZmlsdGVyQ29sdW1ucyA9IHRoaXMuZmlsdGVyQ29sdW1ucztcbiAgfVxuXG4gIGdldFN0YXJ0Vmlld0ZpbHRlckNvbHVtbihjb2x1bW46IE9Db2x1bW4pOiAnbW9udGgnIHwgJ3llYXInIHwgJ211bHRpLXllYXInIHwgJycge1xuICAgIGxldCBzdGFydFZpZXc7XG4gICAgLy8gYXQgZmlyc3QsIGdldCBzdGF0ZSBpbiBsb2NhbHN0b3JhZ2VcbiAgICBpZiAodGhpcy5zdGF0ZS5maWx0ZXJDb2x1bW5zKSB7XG4gICAgICB0aGlzLnN0YXRlLmZpbHRlckNvbHVtbnMuZm9yRWFjaCgoZWxlbWVudDogT0ZpbHRlckNvbHVtbikgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudC5hdHRyID09PSBjb2x1bW4uYXR0cikge1xuICAgICAgICAgIHN0YXJ0VmlldyA9IGVsZW1lbnQuc3RhcnRWaWV3O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHN0YXJ0VmlldykgJiYgdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50KSB7XG4gICAgICBzdGFydFZpZXcgPSB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQuZ2V0U3RhcnRWaWV3VmFsdWVPZkZpbHRlckNvbHVtbihjb2x1bW4uYXR0cik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXJ0VmlldztcbiAgfVxuXG4gIGdldFNvcnRGaWx0ZXJDb2x1bW4oY29sdW1uOiBPQ29sdW1uKTogJ2FzYycgfCAnZGVzYycgfCAnJyB7XG4gICAgbGV0IHNvcnRDb2x1bW47XG4gICAgLy8gYXQgZmlyc3QsIGdldCBzdGF0ZSBpbiBsb2NhbHN0b3JhZ2VcbiAgICBpZiAodGhpcy5zdGF0ZS5maWx0ZXJDb2x1bW5zKSB7XG4gICAgICBjb25zdCBmaWx0ZXJDb2wgPSB0aGlzLnN0YXRlLmZpbHRlckNvbHVtbnMuZmluZCgoZWxlbWVudDogT0ZpbHRlckNvbHVtbikgPT4gZWxlbWVudC5hdHRyID09PSBjb2x1bW4uYXR0cik7XG4gICAgICBpZiAoZmlsdGVyQ29sKSB7XG4gICAgICAgIHNvcnRDb2x1bW4gPSBmaWx0ZXJDb2wuc29ydDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBpZiBub3QgdmFsdWUgaW4gbG9jYWxzdG9yYWdlLCBnZXQgc29ydCB2YWx1ZSBpbiBvLXRhYmxlLWNvbHVtbi1maWx0ZXItY29sdW1uIGNvbXBvbmVudFxuICAgIGlmICghVXRpbC5pc0RlZmluZWQoc29ydENvbHVtbikgJiYgdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50KSB7XG4gICAgICBzb3J0Q29sdW1uID0gdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50LmdldFNvcnRWYWx1ZU9mRmlsdGVyQ29sdW1uKGNvbHVtbi5hdHRyKTtcbiAgICB9XG5cbiAgICAvLyBpZiBlaXRoZXIgdmFsdWUgaW4gby10YWJsZS1jb2x1bW4tZmlsdGVyLWNvbHVtbiBvciBsb2NhbHN0b3JhZ2UsIGdldCBzb3J0IHZhbHVlIGluIHNvcnRDb2xBcnJheVxuICAgIGlmICghVXRpbC5pc0RlZmluZWQoc29ydENvbHVtbikgJiYgdGhpcy5zb3J0Q29sQXJyYXkuZmluZCh4ID0+IHguY29sdW1uTmFtZSA9PT0gY29sdW1uLmF0dHIpKSB7XG4gICAgICBzb3J0Q29sdW1uID0gdGhpcy5pc0NvbHVtblNvcnRBY3RpdmUoY29sdW1uKSA/ICdhc2MnIDogJ2Rlc2MnO1xuICAgIH1cblxuICAgIHJldHVybiBzb3J0Q29sdW1uO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVUYWJsZU1lbnVCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhKHRoaXMucGVybWlzc2lvbnMgJiYgdGhpcy5wZXJtaXNzaW9ucy5tZW51ICYmIHRoaXMucGVybWlzc2lvbnMubWVudS5lbmFibGVkID09PSBmYWxzZSk7XG4gIH1cblxuICBnZXQgc2hvd1RhYmxlTWVudUJ1dHRvbigpOiBib29sZWFuIHtcbiAgICBjb25zdCBwZXJtaXNzaW9uSGlkZGVuID0gISEodGhpcy5wZXJtaXNzaW9ucyAmJiB0aGlzLnBlcm1pc3Npb25zLm1lbnUgJiYgdGhpcy5wZXJtaXNzaW9ucy5tZW51LnZpc2libGUgPT09IGZhbHNlKTtcbiAgICBpZiAocGVybWlzc2lvbkhpZGRlbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBzdGF0aWNPcHQgPSB0aGlzLnNlbGVjdEFsbENoZWNrYm94IHx8IHRoaXMuZXhwb3J0QnV0dG9uIHx8IHRoaXMuc2hvd0NvbmZpZ3VyYXRpb25PcHRpb24gfHwgdGhpcy5jb2x1bW5zVmlzaWJpbGl0eUJ1dHRvbiB8fCAodGhpcy5zaG93RmlsdGVyT3B0aW9uICYmIHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCAhPT0gdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gc3RhdGljT3B0IHx8IHRoaXMudGFibGVPcHRpb25zLmxlbmd0aCA+IDA7XG4gIH1cblxuICBzZXRPVGFibGVJbnNlcnRhYmxlUm93KHRhYmxlSW5zZXJ0YWJsZVJvdzogT1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudCkge1xuICAgIGNvbnN0IGluc2VydFBlcm06IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0QWN0aW9uUGVybWlzc2lvbnMoUGVybWlzc2lvbnNVdGlscy5BQ1RJT05fSU5TRVJUKTtcbiAgICBpZiAoaW5zZXJ0UGVybS52aXNpYmxlKSB7XG4gICAgICB0YWJsZUluc2VydGFibGVSb3cuZW5hYmxlZCA9IGluc2VydFBlcm0uZW5hYmxlZDtcbiAgICAgIHRoaXMub1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudCA9IHRhYmxlSW5zZXJ0YWJsZVJvdztcbiAgICAgIHRoaXMuc2hvd0ZpcnN0SW5zZXJ0YWJsZVJvdyA9IHRoaXMub1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5pc0ZpcnN0Um93KCk7XG4gICAgICB0aGlzLnNob3dMYXN0SW5zZXJ0YWJsZVJvdyA9ICF0aGlzLnNob3dGaXJzdEluc2VydGFibGVSb3c7XG4gICAgICB0aGlzLm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuaW5pdGlhbGl6ZUVkaXRvcnMoKTtcbiAgICB9XG4gIH1cblxuICBjbGVhclNlbGVjdGlvbkFuZEVkaXRpbmcoY2xlYXJTZWxlY3Rpb246IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgaWYgKGNsZWFyU2VsZWN0aW9uKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfVxuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1uc1xuICAgICAgLmZpbHRlcihvQ29sdW1uID0+IG9Db2x1bW4uZWRpdGluZylcbiAgICAgIC5mb3JFYWNoKG9Db2x1bW4gPT4ge1xuICAgICAgICBvQ29sdW1uLmVkaXRpbmcgPSBmYWxzZTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNoZWNrU2VsZWN0ZWRJdGVtRGF0YSgpIHtcbiAgICB0aGlzLnRyaWdnZXJTZWxlY3Rpb25FdmVudHMgPSBmYWxzZTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZS5zZWxlY3Rpb24pICYmIHRoaXMuc3RhdGUuc2VsZWN0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuc3RhdGUuc2VsZWN0aW9uLmZvckVhY2goc2VsZWN0ZWRJdGVtID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtS2V5cyA9IE9iamVjdC5rZXlzKHNlbGVjdGVkSXRlbSk7XG4gICAgICAgIC8vIGZpbmRpbmcgc2VsZWN0ZWQgaXRlbSBkYXRhIGluIHRoZSB0YWJsZSByZW5kZXJlZCBkYXRhXG4gICAgICAgIGNvbnN0IGZvdW5kSXRlbSA9IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEuZmluZChkYXRhID0+XG4gICAgICAgICAgc2VsZWN0ZWRJdGVtS2V5cy5ldmVyeShrZXkgPT4gZGF0YVtrZXldID09PSBzZWxlY3RlZEl0ZW1ba2V5XSlcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGZvdW5kSXRlbSkge1xuICAgICAgICAgIHRoaXMuc2V0U2VsZWN0ZWQoZm91bmRJdGVtKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMudHJpZ2dlclNlbGVjdGlvbkV2ZW50cyA9IHRydWU7XG4gIH1cblxuICB1c2VEZXRhaWxCdXR0b24oY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbHVtbi50eXBlID09PSAnZWRpdEJ1dHRvbkluUm93JyB8fCBjb2x1bW4udHlwZSA9PT0gJ2RldGFpbEJ1dHRvbkluUm93JztcbiAgfVxuXG4gIG9uRGV0YWlsQnV0dG9uQ2xpY2soY29sdW1uOiBPQ29sdW1uLCByb3c6IGFueSwgZXZlbnQ6IGFueSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgc3dpdGNoIChjb2x1bW4udHlwZSkge1xuICAgICAgY2FzZSAnZWRpdEJ1dHRvbkluUm93JzpcbiAgICAgICAgdGhpcy5lZGl0RGV0YWlsKHJvdyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGV0YWlsQnV0dG9uSW5Sb3cnOlxuICAgICAgICB0aGlzLnZpZXdEZXRhaWwocm93KTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGV0YWlsQnV0dG9uSWNvbihjb2x1bW46IE9Db2x1bW4pIHtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgc3dpdGNoIChjb2x1bW4udHlwZSkge1xuICAgICAgY2FzZSAnZWRpdEJ1dHRvbkluUm93JzpcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5lZGl0QnV0dG9uSW5Sb3dJY29uO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RldGFpbEJ1dHRvbkluUm93JzpcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5kZXRhaWxCdXR0b25JblJvd0ljb247XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdXNlUGxhaW5SZW5kZXIoY29sdW1uOiBPQ29sdW1uLCByb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy51c2VEZXRhaWxCdXR0b24oY29sdW1uKSAmJiAhY29sdW1uLnJlbmRlcmVyICYmICghY29sdW1uLmVkaXRvciB8fCAoIWNvbHVtbi5lZGl0aW5nIHx8ICF0aGlzLmlzUm93U2VsZWN0ZWQocm93KSkpO1xuICB9XG5cbiAgdXNlQ2VsbFJlbmRlcmVyKGNvbHVtbjogT0NvbHVtbiwgcm93OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY29sdW1uLnJlbmRlcmVyICYmICghY29sdW1uLmVkaXRpbmcgfHwgY29sdW1uLmVkaXRpbmcgJiYgIXRoaXMuaXNSb3dTZWxlY3RlZChyb3cpKTtcbiAgfVxuXG4gIHVzZUNlbGxFZGl0b3IoY29sdW1uOiBPQ29sdW1uLCByb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIC8vIFRPRE8gQWRkIGNvbHVtbi5lZGl0b3IgaW5zdGFuY2VvZiBPVGFibGVDZWxsRWRpdG9yQm9vbGVhbkNvbXBvbmVudCB0byBjb25kaXRpb25cbiAgICBpZiAoY29sdW1uLmVkaXRvciAmJiBjb2x1bW4uZWRpdG9yLmF1dG9Db21taXQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbi5lZGl0b3IgJiYgY29sdW1uLmVkaXRpbmcgJiYgdGhpcy5pc1Jvd1NlbGVjdGVkKHJvdyk7XG4gIH1cblxuICBpc1NlbGVjdGlvbk1vZGVNdWx0aXBsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlID09PSBDb2Rlcy5TRUxFQ1RJT05fTU9ERV9NVUxUSVBMRTtcbiAgfVxuXG4gIGlzU2VsZWN0aW9uTW9kZVNpbmdsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlID09PSBDb2Rlcy5TRUxFQ1RJT05fTU9ERV9TSU5HTEU7XG4gIH1cblxuICBpc1NlbGVjdGlvbk1vZGVOb25lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGlvbk1vZGUgPT09IENvZGVzLlNFTEVDVElPTl9NT0RFX05PTkU7XG4gIH1cblxuICBvbkNoYW5nZVBhZ2UoZXZ0OiBQYWdlRXZlbnQpIHtcbiAgICB0aGlzLmZpbmlzaFF1ZXJ5U3Vic2NyaXB0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5kYXRhU2VydmljZT8uc2V0UGFnaW5hdGlvbkNvbnRleHQoeyBwYWdlTnVtYmVyOiBldnQucGFnZUluZGV4LCBwYWdlU2l6ZTogZXZ0LnBhZ2VTaXplIH0pO1xuICAgIGlmICghdGhpcy5wYWdlYWJsZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IGV2dC5wYWdlSW5kZXg7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZ29pbmdCYWNrID0gZXZ0LnBhZ2VJbmRleCA8IHRoaXMuY3VycmVudFBhZ2U7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IGV2dC5wYWdlSW5kZXg7XG4gICAgY29uc3QgcGFnZVNpemUgPSB0aGlzLnBhZ2luYXRvci5pc1Nob3dpbmdBbGxSb3dzKGV2dC5wYWdlU2l6ZSkgPyB0aGlzLnN0YXRlLnRvdGFsUXVlcnlSZWNvcmRzTnVtYmVyIDogZXZ0LnBhZ2VTaXplO1xuXG4gICAgY29uc3Qgb2xkUXVlcnlSb3dzID0gdGhpcy5xdWVyeVJvd3M7XG4gICAgY29uc3QgY2hhbmdpbmdQYWdlU2l6ZSA9IChvbGRRdWVyeVJvd3MgIT09IHBhZ2VTaXplKTtcbiAgICB0aGlzLnF1ZXJ5Um93cyA9IHBhZ2VTaXplO1xuICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplID0gcGFnZVNpemU7XG5cbiAgICBsZXQgbmV3U3RhcnRSZWNvcmQ6IG51bWJlcjtcbiAgICBsZXQgcXVlcnlMZW5ndGg6IG51bWJlcjtcblxuICAgIGlmIChnb2luZ0JhY2sgfHwgY2hhbmdpbmdQYWdlU2l6ZSkge1xuICAgICAgbmV3U3RhcnRSZWNvcmQgPSAodGhpcy5jdXJyZW50UGFnZSAqIHRoaXMucXVlcnlSb3dzKTtcbiAgICAgIHF1ZXJ5TGVuZ3RoID0gdGhpcy5xdWVyeVJvd3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1N0YXJ0UmVjb3JkID0gTWF0aC5tYXgodGhpcy5zdGF0ZS5xdWVyeVJlY29yZE9mZnNldCwgKHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLnF1ZXJ5Um93cykpO1xuICAgICAgY29uc3QgbmV3RW5kUmVjb3JkID0gTWF0aC5taW4obmV3U3RhcnRSZWNvcmQgKyB0aGlzLnF1ZXJ5Um93cywgdGhpcy5zdGF0ZS50b3RhbFF1ZXJ5UmVjb3Jkc051bWJlcik7XG4gICAgICBxdWVyeUxlbmd0aCA9IHRoaXMuZGlzYWJsZVBhZ2VTaXplQ2FsY3VsYXRpb24gPyB0aGlzLnF1ZXJ5Um93cyA6IE1hdGgubWluKHRoaXMucXVlcnlSb3dzLCBuZXdFbmRSZWNvcmQgLSBuZXdTdGFydFJlY29yZCk7XG4gICAgfVxuXG4gICAgY29uc3QgcXVlcnlBcmdzOiBPUXVlcnlEYXRhQXJncyA9IHtcbiAgICAgIG9mZnNldDogbmV3U3RhcnRSZWNvcmQsXG4gICAgICBsZW5ndGg6IHF1ZXJ5TGVuZ3RoXG4gICAgfTtcblxuICAgIHRoaXMuZmluaXNoUXVlcnlTdWJzY3JpcHRpb24gPSBmYWxzZTtcbiAgICB0aGlzLnF1ZXJ5RGF0YSh2b2lkIDAsIHF1ZXJ5QXJncyk7XG4gIH1cblxuICBnZXRPQ29sdW1uKGF0dHI6IHN0cmluZyk6IE9Db2x1bW4ge1xuICAgIHJldHVybiB0aGlzLl9vVGFibGVPcHRpb25zID8gdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbmQoaXRlbSA9PiBpdGVtLm5hbWUgPT09IGF0dHIpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgaW5zZXJ0UmVjb3JkKHJlY29yZERhdGE6IGFueSwgc3FsVHlwZXM/OiBvYmplY3QpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICBpZiAodGhpcy5zaG93Tm90aWZpY2F0aW9uT2ZSZWFkT25seSkge1xuICAgICAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuKCdNRVNTQUdFUy5PUEVSQVRJT05fTk9UX0FMTE9XRURfUkVBRE9OTFknKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW5zZXJ0IG9wZXJhdGlvbiBpcyBub3QgYWxsb3dlZCBiZWNhdXNlIHRoZSB0YWJsZSBpcyByZWFkLW9ubHkuYClcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oUGVybWlzc2lvbnNVdGlscy5BQ1RJT05fSU5TRVJUKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZChzcWxUeXBlcykpIHtcbiAgICAgIGNvbnN0IGFsbFNxbFR5cGVzID0gdGhpcy5nZXRTcWxUeXBlcygpO1xuICAgICAgc3FsVHlwZXMgPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKHJlY29yZERhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgc3FsVHlwZXNba2V5XSA9IGFsbFNxbFR5cGVzW2tleV07XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGFvVGFibGUuaW5zZXJ0UXVlcnkocmVjb3JkRGF0YSwgc3FsVHlwZXMpO1xuICB9XG5cbiAgdXBkYXRlUmVjb3JkKGZpbHRlcjogYW55LCB1cGRhdGVEYXRhOiBhbnksIHNxbFR5cGVzPzogb2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgaWYgKHRoaXMuc2hvd05vdGlmaWNhdGlvbk9mUmVhZE9ubHkpIHtcbiAgICAgICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbignTUVTU0FHRVMuT1BFUkFUSU9OX05PVF9BTExPV0VEX1JFQURPTkxZJyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVwZGF0ZSBvcGVyYXRpb24gaXMgbm90IGFsbG93ZWQgYmVjYXVzZSB0aGUgdGFibGUgaXMgcmVhZC1vbmx5LmApXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oUGVybWlzc2lvbnNVdGlscy5BQ1RJT05fVVBEQVRFKSkge1xuICAgICAgcmV0dXJuIG9mKHRoaXMuZGF0YVNvdXJjZS5kYXRhKTtcbiAgICB9XG4gICAgY29uc3Qgc3FsVHlwZXNBcmcgPSBzcWxUeXBlcyB8fCB7fTtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHNxbFR5cGVzKSkge1xuICAgICAgY29uc3QgYWxsU3FsVHlwZXMgPSB0aGlzLmdldFNxbFR5cGVzKCk7XG4gICAgICBPYmplY3Qua2V5cyhmaWx0ZXIpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgc3FsVHlwZXNBcmdba2V5XSA9IGFsbFNxbFR5cGVzW2tleV07XG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5rZXlzKHVwZGF0ZURhdGEpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgc3FsVHlwZXNBcmdba2V5XSA9IGFsbFNxbFR5cGVzW2tleV07XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGFvVGFibGUudXBkYXRlUXVlcnkoZmlsdGVyLCB1cGRhdGVEYXRhLCBzcWxUeXBlc0FyZyk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBHZXRzIGRhdGEgdGFibGVcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldERhdGFBcnJheSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYW9UYWJsZS5kYXRhO1xuICB9XG5cblxuICAvKipcbiAgICogU2V0cyBkYXRhIHRhYmxlIHdoZW4gaXMgc3RhdGljIChPTkxZIElOIFRISVMgQ0FTRSlcbiAgICogQHBhcmFtIGRhdGFcbiAgICovXG4gIHNldERhdGFBcnJheShkYXRhOiBBcnJheTxhbnk+KSB7XG4gICAgaWYgKHRoaXMuZGFvVGFibGUpIHtcbiAgICAgIC8vIHJlbW90ZSBwYWdpbmF0aW9uIGhhcyBubyBzZW5zZSB3aGVuIHVzaW5nIHN0YXRpYy1kYXRhXG4gICAgICB0aGlzLnBhZ2VhYmxlID0gZmFsc2U7XG4gICAgICB0aGlzLnN0YXRpY0RhdGEgPSBkYXRhO1xuICAgICAgdGhpcy5kYW9UYWJsZS51c2luZ1N0YXRpY0RhdGEgPSB0cnVlO1xuICAgICAgdGhpcy5kYW9UYWJsZS5zZXREYXRhQXJyYXkodGhpcy5zdGF0aWNEYXRhKTtcbiAgICAgIHRoaXMub25EYXRhTG9hZGVkLmVtaXQodGhpcy5kYW9UYWJsZS5kYXRhKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZGVsZXRlTG9jYWxJdGVtcygpIHtcbiAgICBjb25zdCBkYXRhQXJyYXkgPSB0aGlzLmdldERhdGFBcnJheSgpO1xuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLmdldFNlbGVjdGVkSXRlbXMoKTtcbiAgICBzZWxlY3RlZEl0ZW1zLmZvckVhY2goKHNlbGVjdGVkSXRlbTogYW55KSA9PiB7XG4gICAgICBmb3IgKGxldCBqID0gZGF0YUFycmF5Lmxlbmd0aCAtIDE7IGogPj0gMDsgLS1qKSB7XG4gICAgICAgIGlmIChVdGlsLmVxdWFscyhzZWxlY3RlZEl0ZW0sIGRhdGFBcnJheVtqXSkpIHtcbiAgICAgICAgICBkYXRhQXJyYXkuc3BsaWNlKGosIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIHRoaXMuc2V0RGF0YUFycmF5KGRhdGFBcnJheSk7XG4gIH1cblxuICBpc0NvbHVtblNvcnRBY3RpdmUoY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZm91bmQgPSB0aGlzLnNvcnRDb2xBcnJheS5maW5kKHNvcnRDID0+IHNvcnRDLmNvbHVtbk5hbWUgPT09IGNvbHVtbi5hdHRyKTtcbiAgICByZXR1cm4gZm91bmQgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlzQ29sdW1uRGVzY1NvcnRBY3RpdmUoY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZm91bmQgPSB0aGlzLnNvcnRDb2xBcnJheS5maW5kKHNvcnRDID0+IHNvcnRDLmNvbHVtbk5hbWUgPT09IGNvbHVtbi5hdHRyICYmICFzb3J0Qy5hc2NlbmRlbnQpO1xuICAgIHJldHVybiBmb3VuZCAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaGFzVGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb24gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlzRW1wdHkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhVXRpbC5pc0RlZmluZWQodmFsdWUpIHx8ICgodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykgJiYgIXZhbHVlKTtcbiAgfVxuXG4gIHNldEZpbHRlcnNDb25maWd1cmF0aW9uKHN0b3JhZ2U6IE9UYWJsZUNvbXBvbmVudFN0YXRlQ2xhc3MgPSB0aGlzLnN0YXRlKSB7XG4gICAgLypcbiAgICAgIENoZWNraW5nIHRoZSBvcmlnaW5hbCBmaWx0ZXJDYXNlU2Vuc2l0aXZlIHdpdGggdGhlIGZpbHRlckNhc2VTZW5zaXRpdmUgaW4gaW5pdGlhbCBjb25maWd1cmF0aW9uIGluIGxvY2FsIHN0b3JhZ2VcbiAgICAgIGlmIGZpbHRlckNhc2VTZW5zaXRpdmUgaW4gaW5pdGlhbCBjb25maWd1cmF0aW9uIGlzIGVxdWFscyB0byBvcmlnaW5hbCBmaWx0ZXJDYXNlU2Vuc2l0aXZlIGlucHV0XG4gICAgICBmaWx0ZXJDYXNlU2Vuc2l0aXZlIHdpbGwgYmUgdGhlIHZhbHVlIGluIGxvY2FsIHN0b3JhZ2VcbiAgICAqL1xuICAgIGlmIChzdG9yYWdlLmluaXRpYWxDb25maWd1cmF0aW9uLmZpbHRlckNhc2VTZW5zaXRpdmUgIT09IHRoaXMuZmlsdGVyQ2FzZVNlbnNpdGl2ZSkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5maWx0ZXJDYXNlU2Vuc2l0aXZlID0gdGhpcy5maWx0ZXJDYXNlU2Vuc2l0aXZlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLmZpbHRlckNhc2VTZW5zaXRpdmUgPSBzdG9yYWdlLmhhc093blByb3BlcnR5KCdmaWx0ZXItY2FzZS1zZW5zaXRpdmUnKSA/IHN0b3JhZ2VbJ2ZpbHRlci1jYXNlLXNlbnNpdGl2ZSddIDogdGhpcy5maWx0ZXJDYXNlU2Vuc2l0aXZlO1xuICAgIH1cblxuICAgIGlmIChzdG9yYWdlLmluaXRpYWxDb25maWd1cmF0aW9uLmZpbHRlckNvbHVtbkFjdGl2ZUJ5RGVmYXVsdCAhPT0gdGhpcy5maWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQpIHtcbiAgICAgIHRoaXMuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlID0gdGhpcy5maWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGNvbmZGaWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQgPSBzdG9yYWdlLmhhc093blByb3BlcnR5KCdmaWx0ZXItY29sdW1uLWFjdGl2ZScpID8gc3RvcmFnZVsnZmlsdGVyLWNvbHVtbi1hY3RpdmUnXSA6IHRoaXMuZmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0O1xuICAgICAgdGhpcy5pc0NvbHVtbkZpbHRlcnNBY3RpdmUgPSBjb25mRmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0IHx8IHRoaXMuc3RhdGUuY29sdW1uVmFsdWVGaWx0ZXJzLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHN0b3JhZ2UuY29sdW1uVmFsdWVGaWx0ZXJzKSkge1xuICAgICAgdGhpcy5kYXRhU291cmNlLmluaXRpYWxpemVDb2x1bW5zRmlsdGVycyh0aGlzLnN0YXRlLmNvbHVtblZhbHVlRmlsdGVycyk7XG4gICAgICB0aGlzLm9uRmlsdGVyQnlDb2x1bW5DaGFuZ2UuZW1pdCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50KSB7XG4gICAgICB0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50LnNldFZhbHVlKHN0b3JhZ2VbJ2ZpbHRlciddKTtcbiAgICAgIChzdG9yYWdlWydvQ29sdW1ucyddIHx8IFtdKS5mb3JFYWNoKChvQ29sRGF0YTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IG9Db2wgPSB0aGlzLmdldE9Db2x1bW4ob0NvbERhdGEuYXR0cik7XG4gICAgICAgIGlmIChvQ29sICYmIG9Db2xEYXRhLmhhc093blByb3BlcnR5KCdzZWFyY2hpbmcnKSkge1xuICAgICAgICAgIG9Db2wuc2VhcmNoaW5nID0gb0NvbERhdGEuc2VhcmNoaW5nO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWx0ZXJCdWlsZGVyICYmIFV0aWwuaXNEZWZpbmVkKHN0b3JhZ2UuZmlsdGVyQnVpbGRlclZhbHVlcykpIHtcbiAgICAgIHRoaXMuZmlsdGVyQnVpbGRlci5zZXRGaWx0ZXJWYWx1ZXMoc3RvcmFnZS5maWx0ZXJCdWlsZGVyVmFsdWVzKTtcbiAgICAgIHRoaXMuZmlsdGVyQnVpbGRlci50cmlnZ2VyUmVsb2FkKCk7XG4gICAgfVxuICB9XG5cbiAgb25TdG9yZUNvbmZpZ3VyYXRpb25DbGlja2VkKCkge1xuICAgIGlmICh0aGlzLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5vblN0b3JlQ29uZmlndXJhdGlvbkNsaWNrZWQoKTtcbiAgICB9XG4gIH1cblxuICBvbkFwcGx5Q29uZmlndXJhdGlvbkNsaWNrZWQoKSB7XG4gICAgaWYgKHRoaXMub1RhYmxlTWVudSkge1xuICAgICAgdGhpcy5vVGFibGVNZW51Lm9uQXBwbHlDb25maWd1cmF0aW9uQ2xpY2tlZCgpO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5RGVmYXVsdENvbmZpZ3VyYXRpb24oKSB7XG4gICAgdGhpcy5pbml0aWFsaXplUGFyYW1zKCk7XG4gICAgdGhpcy5wYXJzZVZpc2libGVDb2x1bW5zKHRydWUpO1xuICAgIHRoaXMucmVmcmVzaENvbHVtbnNXaWR0aEZyb21PcmlnaW5hbERlZmluaXRpb24oKTtcbiAgICB0aGlzLnJlaW5pdGlhbGl6YXRlUXVpY2tGaWx0ZXJDb2x1bW5zKCk7XG4gICAgdGhpcy5yZXNldFF1ZXJ5Um93cygpO1xuICAgIGNvbnN0IGluaXRpYWxDb25maWdTb3J0Q29sdW1uc0FycmF5ID0gU2VydmljZVV0aWxzLnBhcnNlU29ydENvbHVtbnModGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5zb3J0Q29sdW1ucyk7XG4gICAgdGhpcy5yZWluaXRpYWxpemVTb3J0Q29sdW1ucyhpbml0aWFsQ29uZmlnU29ydENvbHVtbnNBcnJheSk7XG4gICAgdGhpcy5vblJlaW5pdGlhbGl6ZS5lbWl0KG51bGwpO1xuICAgIHRoaXMuY2xlYXJGaWx0ZXJzKGZhbHNlKTtcbiAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgfVxuICByZXNldFF1ZXJ5Um93cygpIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5xdWVyeVJvd3MpKSB7XG4gICAgICB0aGlzLnF1ZXJ5Um93cyA9IHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24ucXVlcnlSb3dzO1xuICAgIH1cbiAgfVxuICBhcHBseUNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbk5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHN0b3JlZENvbmZpZ3VyYXRpb24gPSB0aGlzLnN0YXRlLmdldFN0b3JlZENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbk5hbWUpO1xuICAgIGlmIChzdG9yZWRDb25maWd1cmF0aW9uKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0gc3RvcmVkQ29uZmlndXJhdGlvblsnc3RvcmVkLXByb3BlcnRpZXMnXSB8fCBbXTtcblxuICAgICAgcHJvcGVydGllcy5mb3JFYWNoKHByb3BlcnR5ID0+IHtcbiAgICAgICAgc3dpdGNoIChwcm9wZXJ0eSkge1xuICAgICAgICAgIGNhc2UgJ3NvcnQtY29sdW1ucyc6XG4gICAgICAgICAgICB0aGlzLnJlaW5pdGlhbGl6ZVNvcnRDb2x1bW5zKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdvQ29sdW1ucy1kaXNwbGF5JzpcbiAgICAgICAgICAgIHRoaXMucGFyc2VWaXNpYmxlQ29sdW1ucygpO1xuICAgICAgICAgICAgdGhpcy5pbml0aWFsaXplQ2hlY2tib3hDb2x1bW4oKTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaENvbHVtbnNXaWR0aEZyb21Mb2NhbFN0b3JhZ2UoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3F1aWNrLWZpbHRlcic6XG4gICAgICAgICAgY2FzZSAnY29sdW1ucy1maWx0ZXInOlxuICAgICAgICAgIGNhc2UgJ2ZpbHRlci1idWlsZGVyJzpcbiAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyc0NvbmZpZ3VyYXRpb24oKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2dyb3VwZWQtY29sdW1ucyc6XG4gICAgICAgICAgICB0aGlzLnBhcnNlR3JvdXBlZENvbHVtbnMoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3BhZ2UnOlxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMuc3RhdGUuY3VycmVudFBhZ2U7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5Um93cyA9IHRoaXMuc3RhdGUucXVlcnlSb3dzO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0VGl0bGVBbGlnbkNsYXNzKG9Db2w6IE9Db2x1bW4pIHtcblxuICAgIGNvbnN0IGhhc1RpdGxlQWxpZ24gPSBVdGlsLmlzRGVmaW5lZChvQ29sLmRlZmluaXRpb24pICYmIFV0aWwuaXNEZWZpbmVkKG9Db2wuZGVmaW5pdGlvbi50aXRsZUFsaWduKTtcbiAgICBjb25zdCBhdXRvQWxpZ24gPSAodGhpcy5hdXRvQWxpZ25UaXRsZXMgJiYgIWhhc1RpdGxlQWxpZ24pIHx8IChoYXNUaXRsZUFsaWduICYmIG9Db2wuZGVmaW5pdGlvbi50aXRsZUFsaWduID09PSBDb2Rlcy5DT0xVTU5fVElUTEVfQUxJR05fQVVUTyk7XG4gICAgaWYgKCFhdXRvQWxpZ24pIHtcbiAgICAgIHJldHVybiBvQ29sLmdldFRpdGxlQWxpZ25DbGFzcygpO1xuICAgIH1cblxuICAgIGxldCBhbGlnbiA9IHRoaXMuZ2V0Q2VsbEFsaWduQ2xhc3Mob0NvbCk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGFsaWduKSAmJiBhbGlnbi5sZW5ndGggPiAwKSB7XG4gICAgICBhbGlnbiA9IGFsaWduLnN1YnN0cmluZygyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3dpdGNoIChvQ29sLnR5cGUpIHtcbiAgICAgICAgY2FzZSAnaW1hZ2UnOlxuICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgY2FzZSAnYWN0aW9uJzpcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgYWxpZ24gPSBDb2Rlcy5DT0xVTU5fVElUTEVfQUxJR05fQ0VOVEVSO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdjdXJyZW5jeSc6XG4gICAgICAgIGNhc2UgJ2ludGVnZXInOlxuICAgICAgICBjYXNlICdyZWFsJzpcbiAgICAgICAgY2FzZSAncGVyY2VudGFnZSc6XG4gICAgICAgICAgYWxpZ24gPSBDb2Rlcy5DT0xVTU5fVElUTEVfQUxJR05fRU5EO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdzZXJ2aWNlJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBhbGlnbiA9IENvZGVzLkNPTFVNTl9USVRMRV9BTElHTl9TVEFSVDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFsaWduO1xuXG4gIH1cblxuICBwdWJsaWMgZ2V0Q2VsbEFsaWduQ2xhc3MoY29sdW1uOiBPQ29sdW1uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQoY29sdW1uLmRlZmluaXRpb24pICYmIFV0aWwuaXNEZWZpbmVkKGNvbHVtbi5kZWZpbml0aW9uLmNvbnRlbnRBbGlnbikgPyAnby0nICsgY29sdW1uLmRlZmluaXRpb24uY29udGVudEFsaWduIDogJyc7XG4gIH1cblxuXG4gIHB1YmxpYyBnZXRHcm91cEhlYWRlckNlbGxBbGlnbkNsYXNzKGNvbHVtbjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNsYXNzTmFtZUFycmF5ID0gW107XG4gICAgY29uc3Qgb0NvbCA9IHRoaXMuZ2V0T0NvbHVtbihjb2x1bW4uc3Vic3RyKCdncm91cEhlYWRlci0nLmxlbmd0aCkpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChvQ29sKSkge1xuICAgICAgY2xhc3NOYW1lQXJyYXkucHVzaCh0aGlzLmdldENlbGxBbGlnbkNsYXNzKG9Db2wpKTtcbiAgICAgIGNsYXNzTmFtZUFycmF5LnB1c2gob0NvbC5jbGFzc05hbWUgPyBvQ29sLmNsYXNzTmFtZSA6ICcnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzTmFtZUFycmF5O1xuICB9XG5cbiAgcHJvdGVjdGVkIGFkZERlZmF1bHRSb3dCdXR0b25zKCkge1xuICAgIC8vIGNoZWNrIHBlcm1pc3Npb25zXG4gICAgaWYgKHRoaXMuZWRpdEJ1dHRvbkluUm93KSB7XG4gICAgICB0aGlzLmFkZEJ1dHRvbkluUm93KCdlZGl0QnV0dG9uSW5Sb3cnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGV0YWlsQnV0dG9uSW5Sb3cpIHtcbiAgICAgIHRoaXMuYWRkQnV0dG9uSW5Sb3coJ2RldGFpbEJ1dHRvbkluUm93Jyk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGFkZEJ1dHRvbkluUm93KG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbERlZjogT0NvbHVtbiA9IHRoaXMuY3JlYXRlT0NvbHVtbihuYW1lLCB0aGlzKTtcbiAgICBjb2xEZWYudHlwZSA9IG5hbWU7XG4gICAgY29sRGVmLnZpc2libGUgPSB0cnVlO1xuICAgIGNvbERlZi5zZWFyY2hhYmxlID0gZmFsc2U7XG4gICAgY29sRGVmLm9yZGVyYWJsZSA9IGZhbHNlO1xuICAgIGNvbERlZi5yZXNpemFibGUgPSBmYWxzZTtcbiAgICBjb2xEZWYuZ3JvdXBhYmxlID0gZmFsc2U7XG4gICAgY29sRGVmLnRpdGxlID0gdW5kZWZpbmVkO1xuICAgIGNvbERlZi53aWR0aCA9ICc0OHB4JztcbiAgICB0aGlzLnB1c2hPQ29sdW1uRGVmaW5pdGlvbihjb2xEZWYpO1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnMucHVzaChuYW1lKTtcbiAgfVxuXG4gIGdldCBoZWFkZXJIZWlnaHQoKSB7XG4gICAgbGV0IGhlaWdodCA9IDA7XG4gICAgaWYgKHRoaXMudGFibGVIZWFkZXJFbD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgaGVpZ2h0ICs9IHRoaXMudGFibGVIZWFkZXJFbC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICB9XG4gICAgaWYgKHRoaXMudGFibGVUb29sYmFyRWw/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGhlaWdodCArPSB0aGlzLnRhYmxlVG9vbGJhckVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIH1cbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9XG5cbiAgZ2V0IHRvb2xCYXJIZWlnaHQoKSB7XG4gICAgbGV0IGhlaWdodCA9IDA7XG5cbiAgICBpZiAodGhpcy50YWJsZVRvb2xiYXJFbD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgaGVpZ2h0ICs9IHRoaXMudGFibGVUb29sYmFyRWwubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgfVxuICAgIHJldHVybiBoZWlnaHQ7XG4gIH1cblxuICBpc0RldGFpbE1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZGV0YWlsTW9kZSAhPT0gQ29kZXMuREVUQUlMX01PREVfTk9ORTtcbiAgfVxuXG4gIGNvcHlBbGwoKSB7XG4gICAgVXRpbC5jb3B5VG9DbGlwYm9hcmQoSlNPTi5zdHJpbmdpZnkodGhpcy5nZXRSZW5kZXJlZFZhbHVlKCkpKTtcbiAgfVxuXG4gIGNvcHlTZWxlY3Rpb24oKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuZGF0YVNvdXJjZS5nZXRSZW5kZXJlZERhdGEodGhpcy5nZXRTZWxlY3RlZEl0ZW1zKCkpO1xuICAgIFV0aWwuY29weVRvQ2xpcGJvYXJkKEpTT04uc3RyaW5naWZ5KHNlbGVjdGVkSXRlbXMpKTtcbiAgfVxuXG4gIGRlc3Ryb3lBY3RpdmVkVG9vbHRpcHMoKSB7XG4gICAgdGhpcy50b29sdGlwLmZvckVhY2godHAgPT4ge1xuICAgICAgaWYgKHRwLl9vdmVybGF5UmVmKSB7XG4gICAgICAgIHRwLl9vdmVybGF5UmVmLmRldGFjaCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIG5hdmlnYXRpb24gdG8gaXRlbSBkZXRhaWwsIHJlY2VpdmluZyBpdGVtIGRhdGFcbiAgICogQHBhcmFtIGl0ZW1cbiAgICogQHJldHVybnMgZGV0YWlsXG4gICAqL1xuICB2aWV3RGV0YWlsKGl0ZW06IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlYWRPbmx5ICYmIHRoaXMuc2hvd05vdGlmaWNhdGlvbk9mUmVhZE9ubHkpIHtcbiAgICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlLm9wZW4oJ01FU1NBR0VTLk9QRVJBVElPTl9OT1RfQUxMT1dFRF9SRUFET05MWScpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jaGVja0VuYWJsZWRBY3Rpb25QZXJtaXNzaW9uKCdkZXRhaWwnKSB8fCB0aGlzLnJlYWRPbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGVzdHJveUFjdGl2ZWRUb29sdGlwcygpO1xuICAgIHN1cGVyLnZpZXdEZXRhaWwoaXRlbSk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBuYXZpZ2F0aW9uIHRvIGl0ZW0gZWRpdGlvbiwgcmVjZWl2aW5nIGl0ZW0gZGF0YVxuICAgKiBAcGFyYW0gaXRlbVxuICAgKiBAcmV0dXJucyBkZXRhaWxcbiAgICovXG4gIGVkaXREZXRhaWwoaXRlbTogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVhZE9ubHkgJiYgdGhpcy5zaG93Tm90aWZpY2F0aW9uT2ZSZWFkT25seSkge1xuICAgICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbignTUVTU0FHRVMuT1BFUkFUSU9OX05PVF9BTExPV0VEX1JFQURPTkxZJyk7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oJ2VkaXQnKSB8fCB0aGlzLnJlYWRPbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN1cGVyLmVkaXREZXRhaWwoaXRlbSk7XG4gIH1cblxuICBnZXRPQ29sdW1uRnJvbVRoKHRoOiBhbnkpOiBPQ29sdW1uIHtcbiAgICBsZXQgcmVzdWx0OiBPQ29sdW1uO1xuICAgIGNvbnN0IGNsYXNzTGlzdDogYW55W10gPSBBcnJheS5mcm9tKCh0aCBhcyBFbGVtZW50KS5jbGFzc0xpc3QgfHwgW10pO1xuICAgIGNvbnN0IGNvbHVtbkNsYXNzID0gY2xhc3NMaXN0LmZpbmQoKGNsYXNzTmFtZTogc3RyaW5nKSA9PiAoY2xhc3NOYW1lLnN0YXJ0c1dpdGgoJ21hdC1jb2x1bW4tJykpKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY29sdW1uQ2xhc3MpKSB7XG4gICAgICByZXN1bHQgPSB0aGlzLmdldE9Db2x1bW4oY29sdW1uQ2xhc3Muc3Vic3RyKCdtYXQtY29sdW1uLScubGVuZ3RoKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXRPQ29sdW1uRnJvbUdyb3VwSGVhZGVyQ29sdW1uKGF0dHI6IHN0cmluZyk6IE9Db2x1bW4ge1xuICAgIHJldHVybiB0aGlzLmdldE9Db2x1bW4oYXR0ci5zdWJzdHIoJ2dyb3VwSGVhZGVyLScubGVuZ3RoKSk7XG4gIH1cblxuICBnZXRUaFdpZHRoRnJvbU9Db2x1bW4ob0NvbHVtbjogT0NvbHVtbik6IGFueSB7XG4gICAgbGV0IHdpZHRoQ29sdW1uOiBudW1iZXI7XG4gICAgY29uc3QgdGhBcnJheSA9IHRoaXMudGFibGVIZWFkZXJFbC5uYXRpdmVFbGVtZW50LmNoaWxkcmVuO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhBcnJheS5sZW5ndGggJiYgIVV0aWwuaXNEZWZpbmVkKHdpZHRoQ29sdW1uKTsgaSsrKSB7XG4gICAgICBjb25zdCB0aCA9IHRoQXJyYXlbaV07XG4gICAgICBjb25zdCBjbGFzc0xpc3QgPSB0aC5jbGFzc0xpc3Q7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNsYXNzTGlzdC5sZW5ndGggJiYgIVV0aWwuaXNEZWZpbmVkKHdpZHRoQ29sdW1uKTsgaisrKSB7XG4gICAgICAgIGlmIChjbGFzc0xpc3Rbal0gPT09ICdtYXQtY29sdW1uLScgKyBvQ29sdW1uLmF0dHIpIHtcbiAgICAgICAgICB3aWR0aENvbHVtbiA9IHRoLmNsaWVudFdpZHRoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB3aWR0aENvbHVtbjtcbiAgfVxuXG4gIGdldENvbHVtbkluc2VydGFibGUobmFtZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIG5hbWUgKyB0aGlzLmdldFN1ZmZpeENvbHVtbkluc2VydGFibGUoKTtcbiAgfVxuXG4gIGlzUm93U2VsZWN0ZWQocm93OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMuaXNTZWxlY3Rpb25Nb2RlTm9uZSgpICYmIHRoaXMuc2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93KTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb2x1bW5XaWR0aEZyb21TdGF0ZShjb2xEZWY6IE9Db2x1bW4pOiBzdHJpbmcge1xuICAgIC8vMS4gQnkgZGVmYXVsdCwgc2V0IHdpZHRoIGRlZmluaXRpb25cbiAgICBsZXQgY29sdW1uV2lkdGggPSBjb2xEZWYuZGVmaW5pdGlvbiAmJiBjb2xEZWYuZGVmaW5pdGlvbi53aWR0aCA/IGNvbERlZi5kZWZpbml0aW9uLndpZHRoIDogdm9pZCAwO1xuICAgIGNvbnN0IHN0b3JlZERhdGEgPSB0aGlzLnN0YXRlLmdldENvbHVtbkRpc3BsYXkoY29sRGVmKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoc3RvcmVkRGF0YSkgJiYgVXRpbC5pc0RlZmluZWQoc3RvcmVkRGF0YS53aWR0aCkpIHtcbiAgICAgIC8vMi4gU2V0IHdpZHRoIGlmIHRoZSB3aWR0aCBpcyBzdG9yZWRcbiAgICAgIGNvbHVtbldpZHRoID0gc3RvcmVkRGF0YS53aWR0aDtcbiAgICAgIC8vIGNoZWNrIHRoYXQgdGhlIHdpZHRoIG9mIHRoZSBjb2x1bW5zIHNhdmVkIGluIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb25cbiAgICAgIC8vIGluIHRoZSBsb2NhbCBzdG9yYWdlIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCB2YWx1ZVxuICAgICAgaWYgKHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uY29sdW1uc0Rpc3BsYXkpIHtcbiAgICAgICAgY29uc3QgaW5pdGlhbFN0b3JlZERhdGEgPSB0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLmdldENvbHVtbkRpc3BsYXkoY29sRGVmKTtcbiAgICAgICAgLy8gSWYgb3JpZ2luYWwgd2lkdGggY2hhbmdlZCB0aGVuIHRoZSB3aWR0aCBpcyByZXNldGVkIHdpdGggdGhpcyB2YWx1ZVxuICAgICAgICBpZiAoaW5pdGlhbFN0b3JlZERhdGEgJiYgaW5pdGlhbFN0b3JlZERhdGEud2lkdGggJiYgY29sRGVmLmRlZmluaXRpb24ub3JpZ2luYWxXaWR0aCkge1xuICAgICAgICAgIGlmIChpbml0aWFsU3RvcmVkRGF0YS53aWR0aCAhPT0gY29sRGVmLmRlZmluaXRpb24ub3JpZ2luYWxXaWR0aCkge1xuICAgICAgICAgICAgY29sdW1uV2lkdGggPSBjb2xEZWYuZGVmaW5pdGlvbi5vcmlnaW5hbFdpZHRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29sdW1uV2lkdGg7XG4gIH1cblxuICByZWZyZXNoQ29sdW1uc1dpZHRoRnJvbUxvY2FsU3RvcmFnZSgpIHtcbiAgICB0aGlzLm9UYWJsZU9wdGlvbnMuY29sdW1ucy5mb3JFYWNoKHggPT4ge1xuICAgICAgeC53aWR0aCA9IHRoaXMuZ2V0Q29sdW1uV2lkdGhGcm9tU3RhdGUoeCk7XG4gICAgfSk7XG4gIH1cblxuICByZWZyZXNoQ29sdW1uc1dpZHRoRnJvbU9yaWdpbmFsRGVmaW5pdGlvbigpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5maWx0ZXIoYyA9PiBjLnZpc2libGUpLmZvckVhY2goYyA9PiB7XG4gICAgICAgIGMud2lkdGggPSBjLkRPTVdpZHRoID0gdm9pZCAwO1xuICAgICAgICBpZiAoVXRpbC5pc0RlZmluZWQoYy5kZWZpbml0aW9uKSAmJiBVdGlsLmlzRGVmaW5lZChjLmRlZmluaXRpb24ud2lkdGgpKSB7XG4gICAgICAgICAgYy53aWR0aCA9IGMuZGVmaW5pdGlvbi53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICBjLnNldFJlbmRlcldpZHRoKHRoaXMuaG9yaXpvbnRhbFNjcm9sbCwgdGhpcy5nZXRDbGllbnRXaWR0aENvbHVtbihjKSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVPQ29sdW1uKGF0dHI/OiBzdHJpbmcsIHRhYmxlPzogT1RhYmxlQ29tcG9uZW50LCBjb2x1bW4/OiBPVGFibGVDb2x1bW5Db21wb25lbnQgJiBPVGFibGVDb2x1bW5DYWxjdWxhdGVkQ29tcG9uZW50KTogT0NvbHVtbiB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgT0NvbHVtbigpO1xuICAgIGlmIChhdHRyKSB7XG4gICAgICBpbnN0YW5jZS5hdHRyID0gYXR0cjtcbiAgICB9XG4gICAgaWYgKHRhYmxlKSB7XG4gICAgICBpbnN0YW5jZS5zZXREZWZhdWx0UHJvcGVydGllcyh7XG4gICAgICAgIG9yZGVyYWJsZTogdGhpcy5vcmRlcmFibGUsXG4gICAgICAgIHJlc2l6YWJsZTogdGhpcy5yZXNpemFibGUsXG4gICAgICAgIGdyb3VwYWJsZTogdGhpcy5ncm91cGFibGUsXG4gICAgICAgIHBhZ2VhYmxlOiB0aGlzLnBhZ2VhYmxlXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGNvbHVtbikge1xuICAgICAgaW5zdGFuY2Uuc2V0Q29sdW1uUHJvcGVydGllcyhjb2x1bW4pO1xuICAgIH1cbiAgICByZXR1cm4gaW5zdGFuY2U7XG4gIH1cblxuICBwdWJsaWMgcmVnaXN0ZXJPVGFibGVCdXR0b25zKGFyZzogT1RhYmxlQnV0dG9ucykge1xuICAgIHRoaXMub1RhYmxlQnV0dG9ucyA9IGFyZztcbiAgICBpZiAodGhpcy5vVGFibGVCdXR0b25zICYmIHRoaXMudGFibGVCdXR0b25zICYmIHRoaXMudGFibGVCdXR0b25zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMub1RhYmxlQnV0dG9ucy5yZWdpc3RlckJ1dHRvbnModGhpcy50YWJsZUJ1dHRvbnMudG9BcnJheSgpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2xpZW50V2lkdGhDb2x1bW4oY29sOiBPQ29sdW1uKTogbnVtYmVyIHtcbiAgICByZXR1cm4gY29sLkRPTVdpZHRoIHx8IHRoaXMuZ2V0VGhXaWR0aEZyb21PQ29sdW1uKGNvbCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TWluV2lkdGhDb2x1bW4oY29sOiBPQ29sdW1uKTogc3RyaW5nIHtcbiAgICByZXR1cm4gVXRpbC5leHRyYWN0UGl4ZWxzVmFsdWUoY29sLm1pbldpZHRoLCBDb2Rlcy5ERUZBVUxUX0NPTFVNTl9NSU5fV0lEVEgpICsgJ3B4JztcbiAgfVxuXG4gIHNob3dFeHBhbmRhYmxlUm93KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZCh0aGlzLnRhYmxlUm93RXhwYW5kYWJsZSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBlbmFibGUgdmlydHVhbCBzY3JvbGxcbiAgICovXG4gIGdldCBlbmFibGVkVmlydHVhbFNjcm9sbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52aXJ0dWFsU2Nyb2xsICYmICF0aGlzLnNob3dFeHBhbmRhYmxlUm93KCkgJiYgdGhpcy5ncm91cGVkQ29sdW1uc0FycmF5Lmxlbmd0aCA9PT0gMDtcbiAgfVxuICAvKipcbiAgICogUGFyc2VzIGdyb3VwZWQgY29sdW1uc1xuICAgKi9cbiAgcGFyc2VHcm91cGVkQ29sdW1ucygpIHtcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5zdGF0ZS5ncm91cGVkQ29sdW1ucyB8fCB0aGlzLm9yaWdpbmFsR3JvdXBlZENvbHVtbnNBcnJheTtcbiAgICBpZiAodGhpcy5zdGF0ZS5ncm91cGVkQ29sdW1ucyAmJiB0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLmdyb3VwZWRDb2x1bW5zKSB7XG4gICAgICBjb25zdCBkaWZmZXJlbmNlID0gdGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5ncm91cGVkQ29sdW1uc1xuICAgICAgICAuZmlsdGVyKHggPT4gIXRoaXMub3JpZ2luYWxHcm91cGVkQ29sdW1uc0FycmF5LmluY2x1ZGVzKHgpKTtcblxuICAgICAgaWYgKGRpZmZlcmVuY2UubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHQgPSB0aGlzLm9yaWdpbmFsR3JvdXBlZENvbHVtbnNBcnJheTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZXRHcm91cENvbHVtbnMocmVzdWx0KTtcbiAgfVxuICBwYXJzZUdyb3VwZWRDb2x1bW5UeXBlcygpIHtcbiAgICB0aGlzLmdyb3VwZWRDb2x1bW5UeXBlcyA9IHRoaXMuc3RhdGUuZ3JvdXBlZENvbHVtblR5cGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyb3VwcyBieSBjb2x1bW5cbiAgICogQHBhcmFtIGNvbHVtblxuICAgKi9cbiAgZ3JvdXBCeUNvbHVtbihjb2x1bW46IE9Db2x1bW4sIHR5cGU/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmNoZWNrR3JvdXBCeUNvbHVtbihjb2x1bW4uYXR0ciwgdHJ1ZSk7XG4gICAgaWYgKHR5cGUpIHtcbiAgICAgIHRoaXMudXBkYXRlR3JvdXBlZENvbHVtblR5cGVzKGNvbHVtbi5hdHRyLCB0cnVlLCB0eXBlKTtcbiAgICB9XG4gICAgdGhpcy5kYXRhU291cmNlLnVwZGF0ZUdyb3VwZWRDb2x1bW5zKCk7XG4gIH1cblxuICAvKipcbiAgICogVW5ncm91cCBieSBjb2x1bW5cbiAgICogQHBhcmFtIGNvbHVtblxuICAgKi9cbiAgdW5Hcm91cEJ5Q29sdW1uKGNvbHVtbjogT0NvbHVtbikge1xuICAgIHRoaXMuY2hlY2tHcm91cEJ5Q29sdW1uKGNvbHVtbi5hdHRyLCBmYWxzZSk7XG4gICAgdGhpcy51cGRhdGVHcm91cGVkQ29sdW1uVHlwZXMoY29sdW1uLmF0dHIsIGZhbHNlKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UudXBkYXRlR3JvdXBlZENvbHVtbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmdyb3VwIGJ5IGFsbCBjb2x1bW5zXG4gICAqL1xuICB1bkdyb3VwQnlBbGxDb2x1bW5zKCkge1xuICAgIHRoaXMuc2V0R3JvdXBDb2x1bW5zKFtdKTtcbiAgICB0aGlzLmdyb3VwZWRDb2x1bW5UeXBlcyA9IFtdO1xuICB9XG5cbiAgc2V0R3JvdXBDb2x1bW5zKHZhbHVlOiBhbnlbXSkge1xuICAgIHRoaXMuZ3JvdXBlZENvbHVtbnNBcnJheSA9IHZhbHVlO1xuICAgIHRoaXMuZGF0YVNvdXJjZS51cGRhdGVHcm91cGVkQ29sdW1ucygpO1xuICB9XG4gIHNldEdyb3VwZWRDb2x1bW5UeXBlcyh2YWx1ZTogT0dyb3VwZWRDb2x1bW5UeXBlc1tdKSB7XG4gICAgdGhpcy5ncm91cGVkQ29sdW1uVHlwZXMgPSB2YWx1ZTtcbiAgfVxuICBjaGVja0dyb3VwQnlDb2x1bW4oZmllbGQ6IHN0cmluZywgYWRkOiBib29sZWFuKSB7XG4gICAgbGV0IGZvdW5kID0gbnVsbDtcbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0aGlzLmdyb3VwZWRDb2x1bW5zQXJyYXkpIHtcbiAgICAgIGlmIChjb2x1bW4gPT09IGZpZWxkKSB7XG4gICAgICAgIGZvdW5kID0gdGhpcy5ncm91cGVkQ29sdW1uc0FycmF5LmluZGV4T2YoY29sdW1uLCAwKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGZvdW5kICE9IG51bGwgJiYgZm91bmQgPj0gMCkge1xuICAgICAgaWYgKCFhZGQpIHtcbiAgICAgICAgdGhpcy5ncm91cGVkQ29sdW1uc0FycmF5LnNwbGljZShmb3VuZCwgMSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgdGhpcy5ncm91cGVkQ29sdW1uc0FycmF5LnB1c2goZmllbGQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgaXRlbSBpcyBncm91cFxuICAgKiBAcGFyYW0gaW5kZXhcbiAgICogQHBhcmFtIGl0ZW1cbiAgICogQHJldHVybnMgdHJ1ZSBpZiBncm91cFxuICAgKi9cbiAgaXNHcm91cChpbmRleCwgaXRlbSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpdGVtIGluc3RhbmNlb2YgT1RhYmxlR3JvdXBlZFJvdztcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgaXRlbSBpcyBub3QgZ3JvdXBcbiAgICogQHBhcmFtIGluZGV4XG4gICAqIEBwYXJhbSBpdGVtXG4gICAqIEByZXR1cm5zIHRydWUgaWYgbm90IGdyb3VwXG4gICAqL1xuICBpc05vdEdyb3VwKGluZGV4LCBpdGVtKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEoaXRlbSBpbnN0YW5jZW9mIE9UYWJsZUdyb3VwZWRSb3cpO1xuICB9XG5cbiAgZ2V0TGFzdEdyb3VwcygpIHtcbiAgICAvLyBHZXQgbGFzdCBncm91cHNcbiAgICBjb25zdCBzY29yZXMgPSB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhO1xuICAgIGNvbnN0IG1heExldmVsID0gc2NvcmVzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBjdXJyLmxldmVsID4gYWNjID8gY3Vyci5sZXZlbCA6IGFjYywgMCk7XG4gICAgY29uc3QgbWF4TGV2ZWxSZW5kZXJlZERhdGEgPSBzY29yZXMucmVkdWNlKChyLCBvKSA9PiBvLmxldmVsID09PSBtYXhMZXZlbCA/IFsuLi5yLCBvXSA6IHIsIFtdKTtcbiAgICByZXR1cm4gbWF4TGV2ZWxSZW5kZXJlZERhdGEubGVuZ3RoO1xuICB9XG5cbiAgZ3JvdXBIZWFkZXJDbGljayhyb3c6IE9UYWJsZUdyb3VwZWRSb3cpIHtcbiAgICB0aGlzLmRhdGFTb3VyY2UudG9nZ2xlR3JvdXBCeUNvbHVtbihyb3cpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0luc3RhbmNlT2ZPVGFibGVDZWxsUmVuZGVyZXJTZXJ2aWNlQ29tcG9uZW50KHJlbmRlcmVyOiBPQmFzZVRhYmxlQ2VsbFJlbmRlcmVyKSB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHJlbmRlcmVyKSAmJiAocmVuZGVyZXIgYXMgYW55KS5vbkRhdGFMb2FkZWQgJiYgKHJlbmRlcmVyIGFzIGFueSkucXVlcnlBbGxEYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgY29sdW1uIGRhdGEgYnkgYXR0clxuICAgKiBAcGFyYW0gYXR0clxuICAgKiBAcGFyYW0gcm93XG4gICAqIEByZXR1cm5zIGNvbHVtbiBkYXRhIGJ5IGF0dHJcbiAgICovXG4gIGdldENvbHVtbkRhdGFCeUF0dHIoYXR0ciwgcm93OiBhbnkpOiBhbnkge1xuICAgIGxldCBvcGVyYXRpb24gPSBudWxsO1xuICAgIGlmICh0aGlzLmdyb3VwZWRDb2x1bW5UeXBlcy5sZW5ndGggIT0gMCAmJiB0aGlzLmdyb3VwZWRDb2x1bW5UeXBlcy5maW5kSW5kZXgoY29sdW1uID0+IGNvbHVtbi5hdHRyID09IGF0dHIpICE9IC0xKSB7XG4gICAgICBvcGVyYXRpb24gPSB0aGlzLmdyb3VwZWRDb2x1bW5UeXBlc1t0aGlzLmdyb3VwZWRDb2x1bW5UeXBlcy5maW5kSW5kZXgoY29sdW1uID0+IGNvbHVtbi5hdHRyID09IGF0dHIpXS50eXBlO1xuICAgIH1cbiAgICBjb25zdCBvQ29sID0gdGhpcy5nZXRPQ29sdW1uKGF0dHIpO1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQob0NvbCkpIHtcbiAgICAgIHJldHVybiByb3dbYXR0cl07XG4gICAgfVxuICAgIGNvbnN0IHVzZVJlbmRlcmVyID0gb0NvbC5yZW5kZXJlciAmJiBvQ29sLnJlbmRlcmVyLmdldENlbGxEYXRhO1xuICAgIGlmIChvcGVyYXRpb24gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVzZVJlbmRlcmVyID8gb0NvbC5yZW5kZXJlci5nZXRDZWxsRGF0YShyb3dbb0NvbC5hdHRyXSwgcm93KSA6IHJvd1tvQ29sLmF0dHJdO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBtb21lbnQocm93W29Db2wuYXR0cl0pO1xuICAgICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0Q3VycmVudExhbmcoKTtcbiAgICAgIHN3aXRjaCAob3BlcmF0aW9uKSB7XG4gICAgICAgIGNhc2UgXCJZRUFSXCI6IHJldHVybiBkYXRlLnllYXIoKTtcbiAgICAgICAgY2FzZSBcIk1PTlRIXCI6IHJldHVybiBtb21lbnQoKS5sb2NhbGUobGFuZ3VhZ2UpLm1vbnRoKGRhdGUubW9udGgoKSkuZm9ybWF0KFwiTU1NTVwiKTtcbiAgICAgICAgY2FzZSBcIllFQVJfTU9OVEhcIjogcmV0dXJuIG1vbWVudCgpLmxvY2FsZShsYW5ndWFnZSkubW9udGgoZGF0ZS5tb250aCgpKS55ZWFyKGRhdGUueWVhcigpKS5mb3JtYXQoXCJNTU1NLCBZWVlZXCIpO1xuICAgICAgICBjYXNlIFwiWUVBUl9NT05USF9EQVlcIjogcmV0dXJuIHVzZVJlbmRlcmVyID8gb0NvbC5yZW5kZXJlci5nZXRDZWxsRGF0YShyb3dbb0NvbC5hdHRyXSwgcm93KSA6IHJvd1tvQ29sLmF0dHJdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICB1cGRhdGVHcm91cGVkQ29sdW1uVHlwZXMoYXR0cjogc3RyaW5nLCBhZGQ6IGJvb2xlYW4sIG9wZXJhdGlvbj86IHN0cmluZykge1xuICAgIGxldCBncm91cGVkQ29sdW1uczogT0dyb3VwZWRDb2x1bW5UeXBlc1tdID0gW107XG4gICAgbGV0IGluZGV4ID0gdGhpcy5ncm91cGVkQ29sdW1uVHlwZXMuZmluZEluZGV4KGNvbHVtbiA9PiBjb2x1bW4uYXR0ciA9PSBhdHRyKTtcbiAgICBpZiAoaW5kZXggIT0gLTEpIHtcbiAgICAgIGlmICghYWRkKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBlZENvbHVtblR5cGVzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKGFkZCkge1xuICAgICAgICB0aGlzLmdyb3VwZWRDb2x1bW5UeXBlcy5wdXNoKHsgXCJhdHRyXCI6IGF0dHIsIFwidHlwZVwiOiBvcGVyYXRpb24gfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhdGUuZ3JvdXBlZENvbHVtblR5cGVzID0gZ3JvdXBlZENvbHVtbnM7XG4gIH1cblxuICBnZXRDbGFzc05hbWVHcm91cEhlYWRlcihyb3c6IE9UYWJsZUdyb3VwZWRSb3cpOiBzdHJpbmcge1xuICAgIGxldCBjbGFzc05hbWUgPSAnJztcbiAgICBpZiAocm93LmxldmVsIDw9IDEwKSB7XG4gICAgICBjbGFzc05hbWUgPSAnby10YWJsZS1ncm91cC1yb3cgby10YWJsZS1ncm91cC1yb3ctbGV2ZWwtJyArIHJvdy5sZXZlbDtcbiAgICB9XG4gICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgc3RvcEVkaXRpb24oY2xlYXJTZWxlY3Rpb24/OiBib29sZWFuKSB7XG4gICAgY2xlYXJTZWxlY3Rpb24gPSBjbGVhclNlbGVjdGlvbiA/IGNsZWFyU2VsZWN0aW9uIDogZmFsc2U7XG4gICAgdGhpcy5lZGl0aW5nQ2VsbCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVkaXRpbmdSb3cgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5jbGVhclNlbGVjdGlvbkFuZEVkaXRpbmcoY2xlYXJTZWxlY3Rpb24pO1xuICB9XG5cbiAgc3RvcmVGaWx0ZXJJblN0YXRlKGFyZzogT0ZpbHRlckRlZmluaXRpb24pIHtcbiAgICB0aGlzLmNvbXBvbmVudFN0YXRlU2VydmljZS5zdG9yZUZpbHRlcihhcmcpO1xuICB9XG5cbiAgcmVpbml0aWFsaXphdGVRdWlja0ZpbHRlckNvbHVtbnMoKSB7XG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zXG4gICAgICAuZmlsdGVyKGNvbHVtbiA9PiBjb2x1bW4uc2VhcmNoYWJsZSAmJiBjb2x1bW4udmlzaWJsZSlcbiAgICAgIC5mb3JFYWNoKGNvbHVtbiA9PiBjb2x1bW4uc2VhcmNoaW5nID0gdHJ1ZSlcbiAgfVxuXG4gIHJlaW5pdGlhbGl6ZVNvcnRDb2x1bW5zKHNvcnRDb2x1bW5zPzogU1FMT3JkZXJbXSkge1xuICAgIHRoaXMudGFibGVIZWFkZXJzID0gW107XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHNvcnRDb2x1bW5zKSkge1xuICAgICAgdGhpcy5zb3J0Q29sQXJyYXkgPSBzb3J0Q29sdW1ucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wYXJzZVNvcnRDb2x1bW5zKCk7XG4gICAgfVxuICAgIHRoaXMuc29ydC5zZXRTb3J0Q29sdW1ucyh0aGlzLnNvcnRDb2xBcnJheSk7XG4gICAgdGhpcy5yZWZyZXNoU29ydEhlYWRlcnMoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWZyZXNoU29ydEhlYWRlcnMoKSB7XG4gICAgdGhpcy50YWJsZUhlYWRlcnMuZmlsdGVyKGhlYWRlciA9PiBVdGlsLmlzRGVmaW5lZChoZWFkZXIubWF0U29ydEhlYWRlcikpLmZvckVhY2goaGVhZGVyID0+IGhlYWRlci5tYXRTb3J0SGVhZGVyLnJlZnJlc2goKSk7XG4gIH1cblxuICBnZXRRdWlja0ZpbHRlclZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYmxlUXVpY2tGaWx0ZXJDb21wb25lbnQpID9cbiAgICAgIHRoaXMub1RhYmxlUXVpY2tGaWx0ZXJDb21wb25lbnQudmFsdWUgOlxuICAgICAgJyc7XG4gIH1cblxuICBwdWJsaWMgcXVlcnlDZWxsUmVuZGVyZXJzKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgcXVpY2tGaWx0ZXJWYWx1ZSA9IHRoaXMuZ2V0UXVpY2tGaWx0ZXJWYWx1ZSgpO1xuXG4gICAgaWYgKChVdGlsLmlzRGVmaW5lZChxdWlja0ZpbHRlclZhbHVlKSAmJiBxdWlja0ZpbHRlclZhbHVlLmxlbmd0aCA+IDApIHx8IHRoaXMuc29ydENvbEFycmF5Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHF1ZXJpZXMgPSB0aGlzLm9UYWJsZU9wdGlvbnMuY29sdW1uc1xuICAgICAgICAuZmlsdGVyKG9Db2wgPT4gb0NvbC5zZWFyY2hpbmcgJiYgdGhpcy5pc0luc3RhbmNlT2ZPVGFibGVDZWxsUmVuZGVyZXJTZXJ2aWNlQ29tcG9uZW50KG9Db2wucmVuZGVyZXIpKVxuICAgICAgICAubWFwKG9Db2wgPT4gKG9Db2wucmVuZGVyZXIgYXMgYW55KS5xdWVyeUFsbERhdGEoKSk7XG5cbiAgICAgIHJldHVybiBxdWVyaWVzLmxlbmd0aCA+IDAgPyBjb21iaW5lTGF0ZXN0KHF1ZXJpZXMpIDogb2YobnVsbCk7XG4gICAgfVxuICAgIHJldHVybiBvZihudWxsKTtcbiAgfVxuXG4gIHRhYmxlUXVpY2tGaWx0ZXJDaGFuZ2VkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgdGhpcy5xdWVyeUNlbGxSZW5kZXJlcnMoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlbG9hZFBhZ2luYXRlZERhdGFGcm9tU3RhcnQoZmFsc2UpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5kYXRhU291cmNlLnF1aWNrRmlsdGVyID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gb25NYXRTb3J0Q2hhbmdlXG4gIHB1YmxpYyBmaWx0ZXJEYXRhKHZhbHVlPzogc3RyaW5nLCBsb2FkTW9yZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvL1xuICB9XG5cbiAgc2V0T1RhYmxlQ29sdW1uc0dyb3VwaW5nKHZhbHVlOiBPVGFibGVDb2x1bW5zR3JvdXBpbmcpIHtcbiAgICB0aGlzLm9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbXBvbmVudCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0Q29sdW1uR3JvdXBpbmdDb21wb25lbnQoY29sdW1uQXR0cjogc3RyaW5nKTogT1RhYmxlQ29sdW1uc0dyb3VwaW5nQ29sdW1uQ29tcG9uZW50IHtcbiAgICBsZXQgcmVzdWx0OiBPVGFibGVDb2x1bW5zR3JvdXBpbmdDb2x1bW5Db21wb25lbnQ7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYmxlQ29sdW1uc0dyb3VwaW5nQ29tcG9uZW50KSkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5vVGFibGVDb2x1bW5zR3JvdXBpbmdDb21wb25lbnQuZ2V0Q29sdW1uR3JvdXBpbmcoY29sdW1uQXR0cik7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICB1c2VDb2x1bW5Hcm91cGluZ0FnZ3JlZ2F0ZShjb2x1bW5BdHRyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBvQ29sID0gdGhpcy5nZXRPQ29sdW1uKGNvbHVtbkF0dHIpO1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQob0NvbCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgc3FsVHlwZSA9IHRoaXMuZ2V0U3FsVHlwZXMoKVtjb2x1bW5BdHRyXTtcbiAgICBjb25zdCBoYXNEZWZhdWx0QWdncmVnYXRlID0gU1FMVHlwZXMuaXNOdW1lcmljU1FMVHlwZShzcWxUeXBlKVxuICAgICAgJiYgKCFVdGlsLmlzRGVmaW5lZChvQ29sLnJlbmRlcmVyKSB8fCBPVGFibGVDb21wb25lbnQuQVZBSUxBQkxFX0dST1VQSU5HX0NPTFVNTlNfUkVOREVSRVJTLmluY2x1ZGVzKG9Db2wudHlwZSkpO1xuXG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLm9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbXBvbmVudCkpIHtcbiAgICAgIHJldHVybiBoYXNEZWZhdWx0QWdncmVnYXRlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vVGFibGVDb2x1bW5zR3JvdXBpbmdDb21wb25lbnQudXNlQ29sdW1uQWdncmVnYXRlKGNvbHVtbkF0dHIsIGhhc0RlZmF1bHRBZ2dyZWdhdGUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNoZWNrVmlld3BvcnRTaXplKCkge1xuICAgIC8vIEl0cyBhIHRlbXBvcmFyaWx5IGZpeGVkIGZvciBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2lzc3Vlcy8xMDExN1xuICAgIC8vIFNvbHZlIHRoZSBpc3N1ZSB3aGVuIHN3aXRjaGluZyB0YWJzIHdoZW4gdGhlIHZpcnR1YWwgc2Nyb2xsaW5nIGNvbXBvbmVudCBpcyB1c2VkXG4gICAgLy8gaW4gYSBtYXQgLSB0YWIgY29tcG9uZW50IGFuZCB2aXJ0dWFsIHNjcm9sbCB3b3JrIGFibm9ybWFsbHlcbiAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQpIHtcbiAgICAgIHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0LmNoZWNrVmlld3BvcnRTaXplKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gU2hvdyBleHBhbmRhYmxlIGljb24gb3Igbm90IGlmIGhhcyBkYXRhIG9yIG5vdFxuICBzaG93RXhwYW5kYWJsZUljb24ocm93OiBhbnksIHJvd0luZGV4OiBudW1iZXIpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gKFV0aWwuaXNEZWZpbmVkKHRoaXMuc2hvd0V4cGFuZGFibGVJY29uRnVuY3Rpb24pICYmIHRoaXMuc2hvd0V4cGFuZGFibGVJY29uRnVuY3Rpb24gaW5zdGFuY2VvZiBGdW5jdGlvbikgPyBVdGlsLndyYXBJbnRvT2JzZXJ2YWJsZSh0aGlzLnNob3dFeHBhbmRhYmxlSWNvbkZ1bmN0aW9uKHJvdywgcm93SW5kZXgpKSA6IG9mKHRydWUpO1xuICB9XG5cbiAgZ2V0Q29sdW1uc05vdEluY2x1ZGVkKCk6IHN0cmluZ1tdIHtcbiAgICBsZXQgY29sc05vdEluY2x1ZGVkID0gW107XG4gICAgY29sc05vdEluY2x1ZGVkID0gdGhpcy5vVGFibGVPcHRpb25zLmNvbHVtbnMuZmlsdGVyKGMgPT4gdm9pZCAwICE9PSBjLnJlbmRlcmVyICYmIChjLnR5cGUgPT09ICdpbWFnZScgfHwgYy50eXBlID09PSAnYWN0aW9uJykpLm1hcChjID0+IGMuYXR0cik7XG4gICAgY29sc05vdEluY2x1ZGVkLnB1c2goQ29kZXMuTkFNRV9DT0xVTU5fU0VMRUNUKTtcbiAgICBjb2xzTm90SW5jbHVkZWQucHVzaChDb2Rlcy5OQU1FX0NPTFVNTl9FWFBBTkRBQkxFKTtcbiAgICByZXR1cm4gY29sc05vdEluY2x1ZGVkO1xuICB9XG5cbiAgZ2V0Q29sdW1uTmFtZXMoY29sdW1uczogc3RyaW5nW10pOiB7IFtjb2x1bW5JZDogc3RyaW5nXTogc3RyaW5nOyB9IHtcbiAgICBjb25zdCB0YWJsZUNvbHVtbk5hbWVzID0ge307XG4gICAgY29sdW1ucy5mb3JFYWNoKGMgPT4ge1xuICAgICAgY29uc3Qgb0NvbHVtbiA9IHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5maW5kKG9jID0+IG9jLmF0dHIgPT09IGMpO1xuICAgICAgdGFibGVDb2x1bW5OYW1lc1tjXSA9IHRoaXMudHJhbnNsYXRlU2VydmljZS5nZXQob0NvbHVtbi50aXRsZSA/IG9Db2x1bW4udGl0bGUgOiBvQ29sdW1uLmF0dHIpO1xuICAgIH0pO1xuICAgIHJldHVybiB0YWJsZUNvbHVtbk5hbWVzO1xuICB9XG5cbiAgcmVzZXRDb2x1bW5zV2lkdGgoKSB7XG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLmZvckVhY2goYyA9PiB7XG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQoYy5kZWZpbml0aW9uKSkge1xuICAgICAgICBjLndpZHRoID0gVXRpbC5pc0RlZmluZWQoYy5kZWZpbml0aW9uLndpZHRoKSA/IGMuZGVmaW5pdGlvbi53aWR0aCA6IGMuZGVmaW5pdGlvbi5vcmlnaW5hbFdpZHRoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjLndpZHRoID0gXCJhdXRvXCI7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy51cGRhdGVDb2x1bW5zRE9NV2lkdGgoKTtcbiAgfVxuXG4gIHVwZGF0ZUNvbHVtbnNET01XaWR0aCgpIHtcbiAgICB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuZm9yRWFjaChjID0+IHtcbiAgICAgIGMuRE9NV2lkdGggPSB0aGlzLmdldFRoV2lkdGhGcm9tT0NvbHVtbihjKTtcbiAgICB9KTtcblxuICB9XG5cbiAgcHVibGljIGlzRGlzYWJsZUNoZWNrYm94KGl0ZW06IGFueSk6IGJvb2xlYW4ge1xuICAgIGxldCBkaXNhYmxlID0gZmFsc2U7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuZGlzYWJsZVNlbGVjdGlvbkZ1bmN0aW9uKSkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZVNlbGVjdGlvbkZ1bmN0aW9uKHsgLi4uaXRlbSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGRpc2FibGU7XG5cbiAgfVxuXG4gIGdldFNlcnZpY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2U7XG4gIH1cblxuICBnZXRTbmFja1NlcnZpY2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuc25hY2tCYXJTZXJ2aWNlO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiby10YWJsZS1jb250YWluZXJcIiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBzdHJldGNoXCIgW3N0eWxlLmRpc3BsYXldPVwiaXNWaXNpYmxlKCk/ICcnIDogJ25vbmUnXCJcbiAgW2NsYXNzLmJsb2NrLWV2ZW50c109XCJzaG93TG9hZGluZyB8IGFzeW5jXCI+XG5cbiAgPG8tZGF0YS10b29sYmFyICN0YWJsZVRvb2xiYXIgKm5nSWY9XCJoYXNDb250cm9scygpXCIgW3RpdGxlXT1cInRpdGxlXCIgW3Nob3ctdGl0bGVdPVwic2hvd1RpdGxlXCIgY2xhc3M9XCJvLXRhYmxlLXRvb2xiYXJcIj5cbiAgICA8bmctY29udGFpbmVyIG8tZGF0YS10b29sYmFyLXByb2plY3Rpb24tc3RhcnQ+XG4gICAgICA8by10YWJsZS1idXR0b25zICN0YWJsZUJ1dHRvbnMgW2luc2VydC1idXR0b25dPVwiaW5zZXJ0QnV0dG9uXCIgW3JlZnJlc2gtYnV0dG9uXT1cInJlZnJlc2hCdXR0b25cIiBbZGVsZXRlLWJ1dHRvbl09XCJzaG93RGVsZXRlQnV0dG9uXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm8tdGFibGUtYnV0dG9uXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9vLXRhYmxlLWJ1dHRvbnM+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW28tdGFibGUtdG9vbGJhcl1bcG9zaXRpb249c3RhcnRdXCIgbmdQcm9qZWN0QXM9XCJbby1kYXRhLXRvb2xiYXItY3VzdG9tLXByb2plY3Rpb24tc3RhcnRdXCI+XG4gICAgPC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltvLXRhYmxlLXRvb2xiYXJdW3Bvc2l0aW9uPWVuZF1cIiBuZ1Byb2plY3RBcz1cIltvLWRhdGEtdG9vbGJhci1jdXN0b20tcHJvamVjdGlvbi1lbmRdXCI+XG4gICAgPC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltvLXRhYmxlLXRvb2xiYXJdXCIgbmdQcm9qZWN0QXM9XCJbby1kYXRhLXRvb2xiYXItY3VzdG9tLXByb2plY3Rpb24tc3RhcnRdXCI+XG4gICAgPC9uZy1jb250ZW50PlxuICAgIDxuZy1jb250YWluZXIgby1kYXRhLXRvb2xiYXItcHJvamVjdGlvbi1lbmQ+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVpY2tmaWx0ZXJDb250ZW50Q2hpbGQ7IGVsc2UgZGVmYXVsdFF1aWNrRmlsdGVyXCI+XG4gICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm8tdGFibGUtcXVpY2tmaWx0ZXJcIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFF1aWNrRmlsdGVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicXVpY2tGaWx0ZXJcIj5cbiAgICAgICAgICA8by10YWJsZS1xdWlja2ZpbHRlciAob25DaGFuZ2UpPVwidGFibGVRdWlja0ZpbHRlckNoYW5nZWQoJGV2ZW50KVwiPlxuICAgICAgICAgIDwvby10YWJsZS1xdWlja2ZpbHRlcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKm5nSWY9XCJzaG93VGFibGVNZW51QnV0dG9uXCIgbWF0LWljb24tYnV0dG9uIGNsYXNzPVwiby10YWJsZS1tZW51LWJ1dHRvblwiIFttYXRNZW51VHJpZ2dlckZvcl09XCJ0YWJsZU1lbnUubWF0TWVudVwiXG4gICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgPG1hdC1pY29uIHN2Z0ljb249XCJvbnRpbWl6ZTptb3JlX3ZlcnRcIj48L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgICA8by10YWJsZS1tZW51ICN0YWJsZU1lbnUgW3NlbGVjdC1hbGwtY2hlY2tib3hdPVwic2VsZWN0QWxsQ2hlY2tib3hcIiBbZXhwb3J0LWJ1dHRvbl09XCJleHBvcnRCdXR0b25cIlxuICAgICAgICBbY29sdW1ucy12aXNpYmlsaXR5LWJ1dHRvbl09XCJjb2x1bW5zVmlzaWJpbGl0eUJ1dHRvblwiIFtzaG93LWNvbmZpZ3VyYXRpb24tb3B0aW9uXT1cInNob3dDb25maWd1cmF0aW9uT3B0aW9uXCJcbiAgICAgICAgW3Nob3ctZmlsdGVyLW9wdGlvbl09XCJzaG93RmlsdGVyT3B0aW9uXCIgW3Nob3ctcmVwb3J0LW9uLWRlbWFuZC1vcHRpb25dPVwic2hvd1JlcG9ydE9uRGVtYW5kT3B0aW9uXCJcbiAgICAgICAgW3Nob3ctY2hhcnRzLW9uLWRlbWFuZC1vcHRpb25dPVwic2hvd0NoYXJ0c09uRGVtYW5kT3B0aW9uXCIgW3Nob3ctcmVzZXQtd2lkdGgtb3B0aW9uXT1cInNob3dSZXNldFdpZHRoT3B0aW9uXCIgW3Nob3ctZ3JvdXAtYnktb3B0aW9uXT1cImdyb3VwYWJsZVwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJvLXRhYmxlLW9wdGlvblwiPjwvbmctY29udGVudD5cbiAgICAgIDwvby10YWJsZS1tZW51PlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L28tZGF0YS10b29sYmFyPlxuXG4gIDxkaXYgI3RhYmxlQm9keSBjbGFzcz1cIm8tdGFibGUtYm9keSBvLXNjcm9sbFwiIFtjbGFzcy5ob3Jpem9udGFsLXNjcm9sbF09XCJob3Jpem9udGFsU2Nyb2xsXCIgW2NsYXNzLnNjcm9sbGVkXT1cImhvcml6b250YWxTY3JvbGxlZFwiXG4gICAgICAgIFtuZ1N0eWxlXT1cInsndmlzaWJpbGl0eSc6IHNwaW5uZXJDb250YWluZXIgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJ31cIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWVuYWJsZWRWaXJ0dWFsU2Nyb2xsOyBlbHNlIHRhYmxlV2l0aFZpcnR1YWxTY3JvbGxcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJvLXRhYmxlLW92ZXJmbG93IG8tc2Nyb2xsXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjdGFibGVXaXRoVmlydHVhbFNjcm9sbD5cbiAgICAgIDxjZGstdmlydHVhbC1zY3JvbGwtdmlld3BvcnQgI3ZpcnR1YWxTY3JvbGxWaWV3UG9ydCBmeEZsZXg+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cInRhYmxlXCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvY2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8IS0tVEFCTEUgUEFHSU5BVE9SLS0+XG4gIDxtYXQtcGFnaW5hdG9yICpuZ0lmPVwicGFnaW5hdG9yXCIgI21hdHBhZ2luYXRvciBbbGVuZ3RoXT1cImRhdGFTb3VyY2U/LnJlc3VsdHNMZW5ndGhcIiBbcGFnZUluZGV4XT1cInBhZ2luYXRvci5wYWdlSW5kZXhcIiBbcGFnZVNpemVdPVwicXVlcnlSb3dzXCJcbiAgICBbcGFnZVNpemVPcHRpb25zXT1cInBhZ2luYXRvci5wYWdlU2l6ZU9wdGlvbnNcIiAocGFnZSk9XCJvbkNoYW5nZVBhZ2UoJGV2ZW50KVwiIFtzaG93Rmlyc3RMYXN0QnV0dG9uc109XCJwYWdpbmF0b3Iuc2hvd0ZpcnN0TGFzdEJ1dHRvbnNcIlxuICAgICBbbmdTdHlsZV09XCJ7J3Zpc2liaWxpdHknOiBzcGlubmVyQ29udGFpbmVyID8gJ2hpZGRlbicgOiAndmlzaWJsZSd9XCI+XG4gIDwvbWF0LXBhZ2luYXRvcj5cblxuICA8IS0tTE9BRElORy0tPlxuICA8ZGl2ICNzcGlubmVyQ29udGFpbmVyICpuZ0lmPVwic2hvd0xvYWRpbmcgfCBhc3luY1wiIGZ4TGF5b3V0PVwiY29sdW1uXCIgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBbbmdTdHlsZV09XCJ7J3RvcC5weCc6IHRvb2xCYXJIZWlnaHR9XCJcbiAgICBjbGFzcz1cInNwaW5uZXItY29udGFpbmVyXCIgW2NsYXNzLnNwaW5uZXItY29udGFpbmVyLXNjcm9sbGFibGVdPVwibG9hZGluZ1Njcm9sbCB8IGFzeW5jXCI+XG4gICAgPG8tdGFibGUtc2tlbGV0b24+PC9vLXRhYmxlLXNrZWxldG9uPlxuICA8L2Rpdj5cblxuICA8IS0tIERpc2FibGUgYmxvY2tlciAtLT5cbiAgPGRpdiAqbmdJZj1cIiFlbmFibGVkXCIgY2xhc3M9XCJvLXRhYmxlLWRpc2FibGVkLWJsb2NrZXJcIj48L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3RhYmxlPlxuXG4gIDx0YWJsZSBtYXQtdGFibGUgI3RhYmxlIFtjbGFzcy5hdXRvYWRqdXN0ZWRdPVwiYXV0b0FkanVzdFwiIFt0cmFja0J5XT1cImdldFRyYWNrQnlGdW5jdGlvbigpXCIgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiIG9NYXRTb3J0XG4gICAgW29NYXRTb3J0Q29sdW1uc109XCJzb3J0Q29sQXJyYXlcIiBbbmdDbGFzc109XCJyb3dIZWlnaHRPYnNlcnZhYmxlIHwgYXN5bmNcIiAoY2RrT2JzZXJ2ZUNvbnRlbnQpPVwicHJvamVjdENvbnRlbnRDaGFuZ2VkKClcIlxuICAgIFtvVGFibGVFeHBhbmRlZEZvb3Rlcl09XCIobG9hZGluZyB8IGFzeW5jKSA9PT0gZmFsc2VcIiBbb1RhYmxlRXhwYW5kZWRGb290ZXJDb2xzcGFuXT1cInZpc2libGVDb2xBcnJheS5sZW5ndGhcIiBbbXVsdGlUZW1wbGF0ZURhdGFSb3dzXT1cInNob3dFeHBhbmRhYmxlUm93KClcIlxuICAgIGFyaWEtZGVzY3JpYmVkYnk9XCJvbnRpbWl6ZS13ZWIgdGFibGVcIj5cblxuICAgIDwhLS1DaGVja2JveCBDb2x1bW4gLS0+XG4gICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cIm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLm5hbWVcIiAqbmdJZj1cIm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFibGVDb2x1bW5TZWxlY3RBbGxDb250ZW50Q2hpbGQ7IGVsc2UgY3VzdG9tSGVhZGVyU2VsZWN0QWxsVGVtcGxhdGVcIj5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiICpuZ0lmPVwiaXNTZWxlY3Rpb25Nb2RlTXVsdGlwbGUoKVwiPlxuICAgICAgICAgICAgPG8tdGFibGUtaGVhZGVyLXNlbGVjdC1hbGwgW2NvbHVtbl09XCJvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtblwiPjwvby10YWJsZS1oZWFkZXItc2VsZWN0LWFsbD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC90aD5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvd1wiPlxuICAgICAgICAgIDxtYXQtY2hlY2tib3ggbmFtZT1cImlkW11cIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZUNoZWNrYm94KHJvdylcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3Rpb25DaGVja2JveFRvZ2dsZSgkZXZlbnQsIHJvdylcIiBbY2hlY2tlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIj5cbiAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNjdXN0b21IZWFkZXJTZWxlY3RBbGxUZW1wbGF0ZT5cbiAgICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbY2xhc3MucmVzaXphYmxlXT1cInJlc2l6YWJsZVwiIGNsYXNzPVwibWF0LWhlYWRlci1zZWxlY3QtYWxsLXdpdGgtdGl0bGUgby1jZW50ZXJcIlxuICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi53aWR0aFwiIFtzdHlsZS5taW4td2lkdGhdPVwiZ2V0TWluV2lkdGhDb2x1bW4ob1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4pXCJcbiAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoXT1cIm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLm1heFdpZHRoXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxvLXRhYmxlLWhlYWRlci1zZWxlY3QtYWxsIFtjb2x1bW5dPVwib1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW5cIj48L28tdGFibGUtaGVhZGVyLXNlbGVjdC1hbGw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIiBjbGFzcz1cIm8tY2VudGVyXCIgW3N0eWxlLndpZHRoXT1cIm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLndpZHRoXCJcbiAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cImdldE1pbldpZHRoQ29sdW1uKG9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uKVwiIFtzdHlsZS5tYXgtd2lkdGhdPVwib1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4ubWF4V2lkdGhcIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94IG5hbWU9XCJpZFtdXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVDaGVja2JveChyb3cpXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwic2VsZWN0aW9uQ2hlY2tib3hUb2dnbGUoJGV2ZW50LCByb3cpXCIgW2NoZWNrZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCI+XG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuXG5cbiAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+PC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS1FeHBhbmRhYmxlIENvbHVtbiAtLT5cbiAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwib1RhYmxlT3B0aW9ucy5leHBhbmRhYmxlQ29sdW1uLm5hbWVcIiAqbmdJZj1cImlzQ29sdW1uRXhwYW5kYWJsZSgpXCI+XG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICB7eyBvVGFibGVPcHRpb25zLmV4cGFuZGFibGVDb2x1bW4udGl0bGUgfX1cbiAgICAgIDwvdGg+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93O2xldCByb3dJbmRleCA9IGRhdGFJbmRleFwiPlxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJzaG93RXhwYW5kYWJsZUljb24ocm93LCByb3dJbmRleCkgfCBhc3luY1wiXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVSb3dFeHBhbmRhYmxlKHJvdywgJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duKT1cInRvZ2dsZVJvd0V4cGFuZGFibGUocm93LCAkZXZlbnQpXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRXhwYW5kZWQocm93KVwiPnt7IHRhYmxlUm93RXhwYW5kYWJsZS5pY29uQ29sbGFwc2UgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzRXhwYW5kZWQocm93KVwiPnt7IHRhYmxlUm93RXhwYW5kYWJsZS5pY29uRXhwYW5kIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbWF0LWljb24+XG4gICAgICA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBHZW5lcmljIGNvbHVtbiBkZWZpbml0aW9uIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBvVGFibGVPcHRpb25zLmNvbHVtbnNcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5uYW1lXCI+XG4gICAgICA8IS0tRGVmaW5lIGhlYWRlci1jZWxsLS0+XG5cbiAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW25nQ2xhc3NdPVwiZ2V0VGl0bGVBbGlnbkNsYXNzKGNvbHVtbilcIiBbY2xhc3MucmVzaXphYmxlXT1cInJlc2l6YWJsZVwiIFtzdHlsZS53aWR0aF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cImdldE1pbldpZHRoQ29sdW1uKGNvbHVtbilcIiBbc3R5bGUubWF4LXdpZHRoXT1cImNvbHVtbi5tYXhXaWR0aFwiPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgICAgICAgPG8tdGFibGUtaGVhZGVyIFtjb2x1bW5dPVwiY29sdW1uXCI+PC9vLXRhYmxlLWhlYWRlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L3RoPlxuXG5cbiAgICAgIDwhLS1EZWZpbmUgbWF0LWNlbGwtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFibGUubXVsdGlUZW1wbGF0ZURhdGFSb3dzOyBlbHNlIGNlbGxUZW1wbGF0ZU11bHRpVGVtcGxhdGVEYXRhUm93c1wiPlxuICAgICAgICA8dGQgI2NlbGwgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93O2xldCByb3dJbmRleCA9IGluZGV4IFwiIFtuZ0NsYXNzXT1cIltjb2x1bW4uY2xhc3NOYW1lLCBnZXRDZWxsQWxpZ25DbGFzcyhjb2x1bW4pXVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKHJvdywgY29sdW1uLCByb3dJbmRleCwgY2VsbCwgJGV2ZW50KVwiIChkYmxjbGljayk9XCJoYW5kbGVEb3VibGVDbGljayhyb3csIGNvbHVtbiwgcm93SW5kZXgsIGNlbGwsICRldmVudClcIlxuICAgICAgICAgIFtjbGFzcy5lbXB0eS1jZWxsXT1cImlzRW1wdHkocm93W2NvbHVtbi5uYW1lXSlcIiBbbWF0VG9vbHRpcERpc2FibGVkXT1cIiFjb2x1bW4uaGFzVG9vbHRpcCgpXCIgW21hdFRvb2x0aXBdPVwiY29sdW1uLmdldFRvb2x0aXAocm93KVwiXG4gICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYmVsb3dcIiBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNzUwXCIgbWF0VG9vbHRpcENsYXNzPVwiby10YWJsZS1jZWxsLXRvb2x0aXBcIlxuICAgICAgICAgIFtjbGFzcy5vLW1hdC1jZWxsLW11bHRpbGluZV09XCIoY29sdW1uLmlzTXVsdGlsaW5lIHwgYXN5bmMpXCIgW29Db250ZXh0TWVudV09XCJ0YWJsZUNvbnRleHRNZW51XCJcbiAgICAgICAgICBbb0NvbnRleHRNZW51RGF0YV09XCJ7IGNlbGxOYW1lOmNvbHVtbi5uYW1lLCByb3dWYWx1ZTpyb3csIHJvd0luZGV4OnJvd0luZGV4fVwiIFtzdHlsZS53aWR0aF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgIFtzdHlsZS5taW4td2lkdGhdPVwiZ2V0TWluV2lkdGhDb2x1bW4oY29sdW1uKVwiIFtzdHlsZS5tYXgtd2lkdGhdPVwiY29sdW1uLm1heFdpZHRoXCJcbiAgICAgICAgICBbY2xhc3Muby10YWJsZS1lZGl0aW5nLWNlbGxdPVwiaXNSb3dTZWxlY3RlZChyb3cpICYmIGNvbHVtbi5lZGl0aW5nXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNlbGxSZW5kZXJlcjtjb250ZXh0Ontjb2x1bW46Y29sdW1uLHJvdzpyb3d9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjY2VsbFRlbXBsYXRlTXVsdGlUZW1wbGF0ZURhdGFSb3dzPlxuICAgICAgICA8dGQgI2NlbGwgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93O2xldCByb3dJbmRleCA9IGRhdGFJbmRleCBcIiBbbmdDbGFzc109XCJbY29sdW1uLmNsYXNzTmFtZSwgZ2V0Q2VsbEFsaWduQ2xhc3MoY29sdW1uKV1cIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVDbGljayhyb3csIGNvbHVtbiwgcm93SW5kZXgsIGNlbGwsICRldmVudClcIiAoZGJsY2xpY2spPVwiaGFuZGxlRG91YmxlQ2xpY2socm93LCBjb2x1bW4sIHJvd0luZGV4LCBjZWxsLCAkZXZlbnQpXCJcbiAgICAgICAgICBbY2xhc3MuZW1wdHktY2VsbF09XCJpc0VtcHR5KHJvd1tjb2x1bW4ubmFtZV0pXCIgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIhY29sdW1uLmhhc1Rvb2x0aXAoKVwiIFttYXRUb29sdGlwXT1cImNvbHVtbi5nZXRUb29sdGlwKHJvdylcIlxuICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcFNob3dEZWxheT1cIjc1MFwiIG1hdFRvb2x0aXBDbGFzcz1cIm8tdGFibGUtY2VsbC10b29sdGlwXCJcbiAgICAgICAgICBbY2xhc3Muby1tYXQtY2VsbC1tdWx0aWxpbmVdPVwiKGNvbHVtbi5pc011bHRpbGluZSB8IGFzeW5jKVwiIFtvQ29udGV4dE1lbnVdPVwidGFibGVDb250ZXh0TWVudVwiXG4gICAgICAgICAgW29Db250ZXh0TWVudURhdGFdPVwieyBjZWxsTmFtZTpjb2x1bW4ubmFtZSwgcm93VmFsdWU6cm93LCByb3dJbmRleDpyb3dJbmRleH1cIiBbc3R5bGUud2lkdGhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cImdldE1pbldpZHRoQ29sdW1uKGNvbHVtbilcIiBbc3R5bGUubWF4LXdpZHRoXT1cImNvbHVtbi5tYXhXaWR0aFwiXG4gICAgICAgICAgW2NsYXNzLm8tdGFibGUtZWRpdGluZy1jZWxsXT1cImlzUm93U2VsZWN0ZWQocm93KSAmJiBjb2x1bW4uZWRpdGluZ1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZWxsUmVuZGVyZXI7Y29udGV4dDp7Y29sdW1uOmNvbHVtbixyb3c6cm93fVwiPjwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPCEtLURlZmluZSBtYXQtZm9vdGVyLWNlbGwtLT5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VG90YWxzIHwgYXN5bmNcIj5cbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZiBbbmdDbGFzc109XCJjb2x1bW4uY2xhc3NOYW1lXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCIgKm5nSWY9XCJjb2x1bW4uYWdncmVnYXRlICYmIGNvbHVtbi5hZ2dyZWdhdGUudGl0bGVcIj5cbiAgICAgICAgICAgIHt7IGNvbHVtbi5hZ2dyZWdhdGUudGl0bGUgfCBvVHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2x1bW4ucmVuZGVyZXJcIj5cbiAgICAgICAgICAgIHt7IGRhdGFTb3VyY2UuZ2V0QWdncmVnYXRlRGF0YShjb2x1bW4pIH19XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiY29sdW1uLnJlbmRlcmVyICYmIGNvbHVtbi5hZ2dyZWdhdGVcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJjb2x1bW4ucmVuZGVyZXIudGVtcGxhdGVyZWZcIlxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntjZWxsdmFsdWU6IGRhdGFTb3VyY2UuZ2V0QWdncmVnYXRlRGF0YShjb2x1bW4pfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBFeHBhbmRlZCBDb250ZW50IENvbHVtbiAtIFRoZSBkZXRhaWwgcm93IGlzIG1hZGUgdXAgb2YgdGhpcyBvbmUgY29sdW1uIHRoYXQgc3BhbnMgYWNyb3NzIGFsbCBjb2x1bW5zIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNFeHBhbmRlZFJvd1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciBtYXRDb2x1bW5EZWY9XCJleHBhbmRlZERldGFpbFwiPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93O2xldCByb3dJbmRleD0gZGF0YUluZGV4XCIgW2F0dHIuY29sc3Bhbl09XCJvVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zLmxlbmd0aFwiPlxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwiZ2V0RXhwYW5kZWRSb3dDb250YWluZXJDbGFzcyhyb3dJbmRleClcIiBbQGRldGFpbEV4cGFuZF09XCJnZXRTdGF0ZUV4cGFuZChyb3cpXCI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS1GT09URVItSU5TRVJUQUJMRS0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93TGFzdEluc2VydGFibGVSb3cgJiYgb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cIm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLm5hbWUgKyBnZXRTdWZmaXhDb2x1bW5JbnNlcnRhYmxlKClcIiAqbmdJZj1cIm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGVcIj5cbiAgICAgICAgPHRkIG1hdC1mb290ZXItY2VsbCAqbWF0Rm9vdGVyQ2VsbERlZj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIG9UYWJsZU9wdGlvbnMuY29sdW1uc1wiIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uLm5hbWUrIGdldFN1ZmZpeENvbHVtbkluc2VydGFibGUoKVwiPlxuXG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWYgW25nQ2xhc3NdPVwiY29sdW1uLmNsYXNzTmFtZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmlzQ29sdW1uSW5zZXJ0YWJsZShjb2x1bW4pICYmICFvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LnVzZUNlbGxFZGl0b3IoY29sdW1uKVwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiaW5zZXJ0YWJsZS1mb3JtLWZpZWxkIG8tdGFibGUtY2VsbC1lZGl0b3ItdGV4dCBvLXRhYmxlLWNlbGwtZWRpdG9yXCIgW2hpZGVSZXF1aXJlZE1hcmtlcl09XCJmYWxzZVwiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBbcGxhY2Vob2xkZXJdPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5nZXRQbGFjZWhvbGRlcihjb2x1bW4pXCIgW2lkXT1cImNvbHVtbi5hdHRyXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5nZXRDb250cm9sKGNvbHVtbilcIiBbcmVxdWlyZWRdPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5pc0NvbHVtblJlcXVpcmVkKGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqb01hdEVycm9yPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5jb2x1bW5IYXNFcnJvcihjb2x1bW4sICdyZXF1aXJlZCcpXCI+XG4gICAgICAgICAgICAgICAge3sgJ0ZPUk1fVkFMSURBVElPTi5SRVFVSVJFRCcgfCBvVHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmlzQ29sdW1uSW5zZXJ0YWJsZShjb2x1bW4pICYmIG9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQudXNlQ2VsbEVkaXRvcihjb2x1bW4pXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5jb2x1bW5FZGl0b3JzW2NvbHVtbi5hdHRyXS50ZW1wbGF0ZXJlZlwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHJvd3ZhbHVlOiBvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LnJvd0RhdGEgfVwiPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0ZpcnN0SW5zZXJ0YWJsZVJvdyAmJiBvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50XCI+XG4gICAgICA8bmctY29udGFpbmVyIFttYXRDb2x1bW5EZWZdPVwiZ2V0Q29sdW1uSW5zZXJ0YWJsZShvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi5uYW1lKVwiICpuZ0lmPVwib1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udmlzaWJsZVwiPlxuICAgICAgICA8dGQgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2Ygb1RhYmxlT3B0aW9ucy5jb2x1bW5zXCIgW21hdENvbHVtbkRlZl09XCJnZXRDb2x1bW5JbnNlcnRhYmxlKGNvbHVtbi5uYW1lKVwiPlxuXG4gICAgICAgIDx0ZCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW25nQ2xhc3NdPVwiY29sdW1uLmNsYXNzTmFtZVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmlzQ29sdW1uSW5zZXJ0YWJsZShjb2x1bW4pICYmICFvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LnVzZUNlbGxFZGl0b3IoY29sdW1uKVwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiaW5zZXJ0YWJsZS1mb3JtLWZpZWxkXCIgW2hpZGVSZXF1aXJlZE1hcmtlcl09XCJmYWxzZVwiPlxuICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgdHlwZT1cInRleHRcIiBbcGxhY2Vob2xkZXJdPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5nZXRQbGFjZWhvbGRlcihjb2x1bW4pXCIgW2lkXT1cImNvbHVtbi5hdHRyXCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5nZXRDb250cm9sKGNvbHVtbilcIiBbcmVxdWlyZWRdPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5pc0NvbHVtblJlcXVpcmVkKGNvbHVtbilcIj5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciAqb01hdEVycm9yPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5jb2x1bW5IYXNFcnJvcihjb2x1bW4sICdyZXF1aXJlZCcpXCI+XG4gICAgICAgICAgICAgICAge3sgJ0ZPUk1fVkFMSURBVElPTi5SRVFVSVJFRCcgfCBvVHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmlzQ29sdW1uSW5zZXJ0YWJsZShjb2x1bW4pICYmIG9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQudXNlQ2VsbEVkaXRvcihjb2x1bW4pXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5jb2x1bW5FZGl0b3JzW2NvbHVtbi5hdHRyXS50ZW1wbGF0ZXJlZlwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IHJvd3ZhbHVlOiBvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LnJvd0RhdGEgfVwiPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIERlZmluaXRpb24gY29sdW1uIGdyb3VwIGhlYWRlciAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgZ3JvdXBpbmdIZWFkZXJzUm93czsgbGV0IGkgPSBpbmRleFwiIFttYXRDb2x1bW5EZWZdPVwiY29sdW1uXCI+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgZ3JvdXBcIiBjbGFzcz1cImdyb3VwaW5nLXJvd1wiIFtvQ29udGV4dE1lbnVdPVwidGFibGVDb250ZXh0TWVudVwiXG4gICAgICAgIFtvQ29udGV4dE1lbnVEYXRhXT1cInsgY2VsbE5hbWU6Y29sdW1uLCByb3dWYWx1ZTpncm91cCwgcm93SW5kZXg6aX1cIiBbbmdDbGFzc109XCJnZXRHcm91cEhlYWRlckNlbGxBbGlnbkNsYXNzKGNvbHVtbilcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImk9PT0wXCIgY2xhc3M9XCJncm91cGluZy10aXRsZS13cmFwcGVyXCIgW25nU3R5bGVdPVwieydwYWRkaW5nLWxlZnQnOiAyMCooZ3JvdXAubGV2ZWwtMSkrJ3B4J31cIj5cbiAgICAgICAgICA8bWF0LWljb24+e3sgZ3JvdXAuZXhwYW5kZWQgPyAnZXhwYW5kX21vcmUnIDogJ2NoZXZyb25fcmlnaHQnIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICB7eyBncm91cC50aXRsZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwaW5nLWFnZ3JlZ2F0ZVwiICpuZ0lmPVwiZ3JvdXAuaGFzQWN0aXZlQWdncmVnYXRlKHZpc2libGVDb2xBcnJheVtpXSlcIj5cbiAgICAgICAgICB7eyBncm91cC5nZXRDb2x1bW5BY3RpdmVBZ2dyZWdhdGVUaXRsZSh2aXNpYmxlQ29sQXJyYXlbaV0pIHwgb1RyYW5zbGF0ZSB9fSA6XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFnZXRPQ29sdW1uRnJvbUdyb3VwSGVhZGVyQ29sdW1uKGNvbHVtbikucmVuZGVyZXJcIj5cbiAgICAgICAgICAgIHt7IGdyb3VwLmdldENvbHVtbkFnZ3JlZ2F0ZVZhbHVlKHZpc2libGVDb2xBcnJheVtpXSl9fVxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJnZXRPQ29sdW1uRnJvbUdyb3VwSGVhZGVyQ29sdW1uKGNvbHVtbikucmVuZGVyZXJcIj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImdldE9Db2x1bW5Gcm9tR3JvdXBIZWFkZXJDb2x1bW4oY29sdW1uKS5yZW5kZXJlcj8udGVtcGxhdGVyZWY7IGNvbnRleHQ6eyBjZWxsdmFsdWU6ICBncm91cC5nZXRDb2x1bW5BZ2dyZWdhdGVWYWx1ZSh2aXNpYmxlQ29sQXJyYXlbaV0pIH1cIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwicG9zaXRpb25cIj5cbiAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj4ge3tyb3d9fSA8L3RkPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPHRyICN0YWJsZUhlYWRlciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwib1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1uczsgc3RpY2t5OiBmaXhlZEhlYWRlclwiPjwvdHI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRhYmxlLm11bHRpVGVtcGxhdGVEYXRhUm93czsgZWxzZSByb3dUZW1wbGF0ZU11bHRpVGVtcGxhdGVEYXRhUm93c1wiPlxuICAgICAgPHRyIG1hdC1yb3cgb1RhYmxlUm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBvVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zOyB3aGVuOmlzTm90R3JvdXA7IGxldCByb3dJbmRleCA9IGluZGV4XCJcbiAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiIFtuZ0NsYXNzXT1cInJvdyB8IG9UYWJsZVJvd0NsYXNzOiByb3dJbmRleDogcm93Q2xhc3NcIj5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLXRlbXBsYXRlICNyb3dUZW1wbGF0ZU11bHRpVGVtcGxhdGVEYXRhUm93cz5cbiAgICAgIDx0ciBtYXQtcm93IG9UYWJsZVJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1uczsgd2hlbjppc05vdEdyb3VwOyBsZXQgcm93SW5kZXggPSBkYXRhSW5kZXhcIlxuICAgICAgICBbY2xhc3Muc2VsZWN0ZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCIgW25nQ2xhc3NdPVwicm93IHwgb1RhYmxlUm93Q2xhc3M6IHJvd0luZGV4OiByb3dDbGFzc1wiPlxuICAgICAgPC90cj5cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgPCEtLSBSb3cgR3JvdXAgaGVhZGVyIC0tPlxuICAgIDx0ciBtYXQtcm93ICptYXRSb3dEZWY9XCJsZXQgcm93OyBjb2x1bW5zOiBncm91cGluZ0hlYWRlcnNSb3dzOyB3aGVuOmlzR3JvdXBcIiAoY2xpY2spPVwiZ3JvdXBIZWFkZXJDbGljayhyb3cpXCJcbiAgICAgIFtuZ0NsYXNzXT1cImdldENsYXNzTmFtZUdyb3VwSGVhZGVyKHJvdylcIj5cbiAgICA8L3RyPlxuXG4gICAgPCEtLSBFeHBhbmRlZCBkZXRhaWwgcm93LS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhhc0V4cGFuZGVkUm93XCI+XG4gICAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogWydleHBhbmRlZERldGFpbCddXCIgY2xhc3M9XCJvLXRhYmxlLXJvdy1leHBhbmRlZFwiPjwvdHI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0xhc3RJbnNlcnRhYmxlUm93XCI+XG4gICAgICA8dHIgbWF0LWZvb3Rlci1yb3cgKm1hdEZvb3RlclJvd0RlZj1cIm9UYWJsZU9wdGlvbnMuY29sdW1uc0luc2VydGFibGVzOyBzdGlja3k6IHRydWVcIlxuICAgICAgICAoa2V5dXApPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5oYW5kbGVLZXlib2FyZEV2ZW50KCRldmVudClcIiBjbGFzcz1cIm8tdGFibGUtaW5zZXJ0YWJsZVwiPjwvdHI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dGaXJzdEluc2VydGFibGVSb3dcIj5cbiAgICAgIDx0ciBtYXQtaGVhZGVyLXJvdyAqbWF0SGVhZGVyUm93RGVmPVwib1RhYmxlT3B0aW9ucy5jb2x1bW5zSW5zZXJ0YWJsZXM7IHN0aWNreTogdHJ1ZVwiXG4gICAgICAgIChrZXl1cCk9XCJvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmhhbmRsZUtleWJvYXJkRXZlbnQoJGV2ZW50KVwiIGNsYXNzPVwiby10YWJsZS1pbnNlcnRhYmxlXCI+IDwvdHI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dUb3RhbHMgfCBhc3luY1wiPlxuICAgICAgPHRyIG1hdC1mb290ZXItcm93ICptYXRGb290ZXJSb3dEZWY9XCJvVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zOyBzdGlja3k6IHRydWVcIiBjbGFzcz1cIm8tdGFibGUtYWdncmVnYXRlXCI+XG4gICAgICA8L3RyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L3RhYmxlPlxuXG48L25nLXRlbXBsYXRlPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbnRleHRNZW51Q29udGVudENoaWxkICYmIGNvbnRleHRNZW51XCI+XG4gIDxvLXRhYmxlLWNvbnRleHQtbWVudSBbaW5zZXJ0XT1cImluc2VydEJ1dHRvblwiIFtlZGl0XT1cImVkaXRpb25Nb2RlICE9PSBFRElUX01PREVfTk9ORVwiIFt2aWV3LWRldGFpbF09XCJkZXRhaWxNb2RlICE9PSBERVRBSUxfTU9ERV9OT05FXCJcbiAgICBbcmVmcmVzaF09XCJyZWZyZXNoQnV0dG9uXCIgW2RlbGV0ZV09XCJkZWxldGVCdXR0b25cIiBbZmlsdGVyXT1cInNob3dGaWx0ZXJPcHRpb25cIiBbZ3JvdXAtYnktcm93XT1cImdyb3VwYWJsZVwiPlxuICA8L28tdGFibGUtY29udGV4dC1tZW51PlxuPC9uZy1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjY2VsbFJlbmRlcmVyIGxldC1yb3c9XCJyb3dcIiBsZXQtY29sdW1uPVwiY29sdW1uXCI+XG4gIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG5cbiAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJ0cnVlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjb2x1bW4ucmVuZGVyZXIgIT0gbnVsbCAmJiAoIWNvbHVtbi5lZGl0aW5nIHx8IGNvbHVtbi5lZGl0aW5nICYmICFpc1Jvd1NlbGVjdGVkKHJvdykpXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtbi5yZW5kZXJlcj8udGVtcGxhdGVyZWY7IGNvbnRleHQ6eyBjZWxsdmFsdWU6IHJvd1tjb2x1bW4ubmFtZV0sIHJvd3ZhbHVlOnJvdyB9XCI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImlzUm93U2VsZWN0ZWQocm93KSAmJiBjb2x1bW4uZWRpdGluZ1wiPlxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW4uZWRpdG9yPy50ZW1wbGF0ZXJlZjsgY29udGV4dDp7IGNlbGx2YWx1ZTogcm93W2NvbHVtbi5uYW1lXSwgcm93dmFsdWU6cm93IH1cIj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJjb2x1bW4udHlwZSA9PT0gJ2VkaXRCdXR0b25JblJvdycgfHwgY29sdW1uLnR5cGUgPT09ICdkZXRhaWxCdXR0b25JblJvdydcIj5cbiAgICAgICAgPGRpdiBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiIGNsYXNzPVwiby1hY3Rpb24tY2VsbC1yZW5kZXJlclwiIChjbGljayk9XCJvbkRldGFpbEJ1dHRvbkNsaWNrKGNvbHVtbiwgcm93LCAkZXZlbnQpXCI+XG4gICAgICAgICAgPG1hdC1pY29uPnt7IGdldERldGFpbEJ1dHRvbkljb24oY29sdW1uKSB9fTwvbWF0LWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+e3sgcm93W2NvbHVtbi5uYW1lXSB9fTwvbmctY29udGFpbmVyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
2824
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiby10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvY29tcG9uZW50cy90YWJsZS9vLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29udGltaXplLXdlYi1uZ3gvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlL28tdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakYsT0FBTyxFQUFtQixjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRixPQUFPLEVBR0wsY0FBYyxFQUNkLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixNQUFNLEVBR04sUUFBUSxFQUNSLFNBQVMsRUFFVCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixpQkFBaUIsRUFFbEIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3JELE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFN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QkFEdEIsWUFBWTt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBTTFELE9BQU87c0JBRE4sWUFBWTt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3RhdGUsIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBTZWxlY3Rpb25DaGFuZ2UsIFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHsgRG9tUG9ydGFsT3V0bGV0LCBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0LCBWSVJUVUFMX1NDUk9MTF9TVFJBVEVHWSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQXBwbGljYXRpb25SZWYsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5qZWN0LFxuICBJbmplY3RvcixcbiAgTmdab25lLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlbixcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIFZpZXdSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRDaGVja2JveENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRNZW51IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbWVudSc7XG5pbXBvcnQgeyBQYWdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wYWdpbmF0b3InO1xuaW1wb3J0IHsgTWF0VGFiLCBNYXRUYWJHcm91cCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3RhYnMnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQm9vbGVhbkNvbnZlcnRlciwgQm9vbGVhbklucHV0Q29udmVydGVyIH0gZnJvbSAnLi4vLi4vZGVjb3JhdG9ycy9pbnB1dC1jb252ZXJ0ZXInO1xuaW1wb3J0IHsgQ29tcG9uZW50U3RhdGVTZXJ2aWNlUHJvdmlkZXIsIE9fQ09NUE9ORU5UX1NUQVRFX1NFUlZJQ0UsIE9udGltaXplU2VydmljZVByb3ZpZGVyIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmFjdG9yaWVzJztcbmltcG9ydCB7IFNuYWNrQmFyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3NuYWNrYmFyLnNlcnZpY2UnO1xuaW1wb3J0IHsgT1RhYmxlQ29tcG9uZW50U3RhdGVDbGFzcyB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0YXRlL28tdGFibGUtY29tcG9uZW50LXN0YXRlLmNsYXNzJztcbmltcG9ydCB7IE9UYWJsZUNvbXBvbmVudFN0YXRlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0YXRlL28tdGFibGUtY29tcG9uZW50LXN0YXRlLnNlcnZpY2UnO1xuaW1wb3J0IHsgT0NvbHVtbkRpc3BsYXksIE9GaWx0ZXJEZWZpbml0aW9uLCBPR3JvdXBlZENvbHVtblR5cGVzLCBPVGFibGVHbG9iYWxDb25maWcgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBFeHByZXNzaW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMvZXhwcmVzc2lvbi50eXBlJztcbmltcG9ydCB7IE9QZXJtaXNzaW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzL28tcGVybWlzc2lvbnMudHlwZSc7XG5pbXBvcnQgeyBPUXVlcnlEYXRhQXJncyB9IGZyb20gJy4uLy4uL3R5cGVzL3F1ZXJ5LWRhdGEtYXJncy50eXBlJztcbmltcG9ydCB7IFF1aWNrRmlsdGVyRnVuY3Rpb24gfSBmcm9tICcuLi8uLi90eXBlcy9xdWljay1maWx0ZXItZnVuY3Rpb24udHlwZSc7XG5pbXBvcnQgeyBTUUxPcmRlciB9IGZyb20gJy4uLy4uL3R5cGVzL3NxbC1vcmRlci50eXBlJztcbmltcG9ydCB7IE9Db2x1bW5BZ2dyZWdhdGUgfSBmcm9tICcuLi8uLi90eXBlcy90YWJsZS9vLWNvbHVtbi1hZ2dyZWdhdGUudHlwZSc7XG5pbXBvcnQgeyBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLCBPQ29sdW1uVmFsdWVGaWx0ZXIgfSBmcm9tICcuLi8uLi90eXBlcy90YWJsZS9vLWNvbHVtbi12YWx1ZS1maWx0ZXIudHlwZSc7XG5pbXBvcnQgeyBUYWJsZUZpbHRlckJ5Q29sdW1uRGlhbG9nUmVzdWx0IH0gZnJvbSAnLi4vLi4vdHlwZXMvdGFibGUvby10YWJsZS1maWx0ZXItYnktY29sdW1uLWRhdGEudHlwZSc7XG5pbXBvcnQgeyBPVGFibGVJbml0aWFsaXphdGlvbk9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcy90YWJsZS9vLXRhYmxlLWluaXRpYWxpemF0aW9uLW9wdGlvbnMudHlwZSc7XG5pbXBvcnQgeyBPVGFibGVNZW51UGVybWlzc2lvbnMgfSBmcm9tICcuLi8uLi90eXBlcy90YWJsZS9vLXRhYmxlLW1lbnUtcGVybWlzc2lvbnMudHlwZSc7XG5pbXBvcnQgeyBPVGFibGVQZXJtaXNzaW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzL3RhYmxlL28tdGFibGUtcGVybWlzc2lvbnMudHlwZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlV3JhcHBlciB9IGZyb20gJy4uLy4uL3V0aWwvYXN5bmMnO1xuaW1wb3J0IHsgQ29kZXMgfSBmcm9tICcuLi8uLi91dGlsL2NvZGVzJztcbmltcG9ydCB7IEZpbHRlckV4cHJlc3Npb25VdGlscyB9IGZyb20gJy4uLy4uL3V0aWwvZmlsdGVyLWV4cHJlc3Npb24udXRpbHMnO1xuaW1wb3J0IHsgUGVybWlzc2lvbnNVdGlscyB9IGZyb20gJy4uLy4uL3V0aWwvcGVybWlzc2lvbnMnO1xuaW1wb3J0IHsgU2VydmljZVV0aWxzIH0gZnJvbSAnLi4vLi4vdXRpbC9zZXJ2aWNlLnV0aWxzJztcbmltcG9ydCB7IFNRTFR5cGVzIH0gZnJvbSAnLi4vLi4vdXRpbC9zcWx0eXBlcyc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9Db250ZXh0TWVudUNvbXBvbmVudCB9IGZyb20gJy4uL2NvbnRleHRtZW51L28tY29udGV4dC1tZW51LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPRm9ybUNvbXBvbmVudCB9IGZyb20gJy4uL2Zvcm0vby1mb3JtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBYnN0cmFjdE9TZXJ2aWNlQ29tcG9uZW50IH0gZnJvbSAnLi4vby1zZXJ2aWNlLWNvbXBvbmVudC5jbGFzcyc7XG5pbXBvcnQgeyBPVGFibGVDb2x1bW5DYWxjdWxhdGVkQ29tcG9uZW50IH0gZnJvbSAnLi9jb2x1bW4vY2FsY3VsYXRlZC9vLXRhYmxlLWNvbHVtbi1jYWxjdWxhdGVkLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPQmFzZVRhYmxlQ2VsbFJlbmRlcmVyIH0gZnJvbSAnLi9jb2x1bW4vY2VsbC1yZW5kZXJlci9vLWJhc2UtdGFibGUtY2VsbC1yZW5kZXJlci5jbGFzcyc7XG5pbXBvcnQgeyBPQ29sdW1uIH0gZnJvbSAnLi9jb2x1bW4vby1jb2x1bW4uY2xhc3MnO1xuaW1wb3J0IHsgT1RhYmxlQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi9jb2x1bW4vby10YWJsZS1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZUV4cG9ydEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucyc7XG5pbXBvcnQgeyBPVGFibGVDb250ZXh0TWVudUNvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucy9jb250ZXh0bWVudS9vLXRhYmxlLWNvbnRleHQtbWVudS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVmYXVsdE9UYWJsZU9wdGlvbnMgfSBmcm9tICcuL2V4dGVuc2lvbnMvZGVmYXVsdC1vLXRhYmxlLW9wdGlvbnMuY2xhc3MnO1xuaW1wb3J0IHsgT1RhYmxlRmlsdGVyQnlDb2x1bW5EYXRhRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9leHRlbnNpb25zL2RpYWxvZy9maWx0ZXItYnktY29sdW1uL28tdGFibGUtZmlsdGVyLWJ5LWNvbHVtbi1kYXRhLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgT0Jhc2VUYWJsZVBhZ2luYXRvciB9IGZyb20gJy4vZXh0ZW5zaW9ucy9mb290ZXIvcGFnaW5hdG9yL28tYmFzZS10YWJsZS1wYWdpbmF0b3IuY2xhc3MnO1xuaW1wb3J0IHsgT1RhYmxlQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9leHRlbnNpb25zL2hlYWRlci90YWJsZS1idXR0b24vby10YWJsZS1idXR0b24uY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZUNvbHVtblNlbGVjdEFsbERpcmVjdGl2ZSB9IGZyb20gJy4vZXh0ZW5zaW9ucy9oZWFkZXIvdGFibGUtY29sdW1uLXNlbGVjdC1hbGwvby10YWJsZS1jb2x1bW4tc2VsZWN0LWFsbC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgT0ZpbHRlckNvbHVtbiB9IGZyb20gJy4vZXh0ZW5zaW9ucy9oZWFkZXIvdGFibGUtY29sdW1ucy1maWx0ZXIvY29sdW1ucy9vLXRhYmxlLWNvbHVtbnMtZmlsdGVyLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgT1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucy9oZWFkZXIvdGFibGUtY29sdW1ucy1maWx0ZXIvby10YWJsZS1jb2x1bW5zLWZpbHRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgT1RhYmxlQ29sdW1uc0dyb3VwaW5nQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi9leHRlbnNpb25zL2hlYWRlci90YWJsZS1jb2x1bW5zLWdyb3VwaW5nL2NvbHVtbnMvby10YWJsZS1jb2x1bW5zLWdyb3VwaW5nLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgT1RhYmxlSGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9leHRlbnNpb25zL2hlYWRlci90YWJsZS1oZWFkZXIvby10YWJsZS1oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQgfSBmcm9tICcuL2V4dGVuc2lvbnMvaGVhZGVyL3RhYmxlLWluc2VydGFibGUtcm93L28tdGFibGUtaW5zZXJ0YWJsZS1yb3cuY29tcG9uZW50JztcbmltcG9ydCB7IE9UYWJsZU9wdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vZXh0ZW5zaW9ucy9oZWFkZXIvdGFibGUtb3B0aW9uL28tdGFibGUtb3B0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBPVGFibGVEYXRhU291cmNlU2VydmljZSB9IGZyb20gJy4vZXh0ZW5zaW9ucy9vLXRhYmxlLWRhdGFzb3VyY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBPVGFibGVWaXJ0dWFsU2Nyb2xsU3RyYXRlZ3kgfSBmcm9tICcuL2V4dGVuc2lvbnMvby10YWJsZS1zdHJhdGVneS5zZXJ2aWNlJztcbmltcG9ydCB7IE9UYWJsZURhbyB9IGZyb20gJy4vZXh0ZW5zaW9ucy9vLXRhYmxlLmRhbyc7XG5pbXBvcnQgeyBPVGFibGVHcm91cGVkUm93IH0gZnJvbSAnLi9leHRlbnNpb25zL3Jvdy9vLXRhYmxlLXJvdy1ncm91cC5jbGFzcyc7XG5pbXBvcnQgeyBPVGFibGVSb3dFeHBhbmRhYmxlQ29tcG9uZW50LCBPVGFibGVSb3dFeHBhbmRlZENoYW5nZSB9IGZyb20gJy4vZXh0ZW5zaW9ucy9yb3cvdGFibGUtcm93LWV4cGFuZGFibGUvby10YWJsZS1yb3ctZXhwYW5kYWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgT01hdFNvcnQgfSBmcm9tICcuL2V4dGVuc2lvbnMvc29ydC9vLW1hdC1zb3J0JztcbmltcG9ydCB7IE9UYWJsZUJhc2UgfSBmcm9tICcuL28tdGFibGUtYmFzZS5jbGFzcyc7XG5pbXBvcnQgeyBPX1RBQkxFX0dMT0JBTF9DT05GSUcgfSBmcm9tICcuL3V0aWxzL28tdGFibGUudG9rZW5zJztcblxuaW1wb3J0IHR5cGUgeyBJT0NvbnRleHRNZW51Q29udGV4dCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby1jb250ZXh0LW1lbnUuaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlQnV0dG9uIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLWJ1dHRvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHR5cGUgeyBPVGFibGVCdXR0b25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLWJ1dHRvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlQ29sdW1uc0dyb3VwaW5nIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLWNvbHVtbnMtZ3JvdXBpbmctaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1kYXRhc291cmNlLmludGVyZmFjZSc7XG5pbXBvcnQgdHlwZSB7IE9UYWJsZU1lbnUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL28tdGFibGUtbWVudS5pbnRlcmZhY2UnO1xuaW1wb3J0IHR5cGUgeyBPVGFibGVPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLW9wdGlvbnMuaW50ZXJmYWNlJztcbmltcG9ydCB0eXBlIHsgT1RhYmxlUGFnaW5hdG9yIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9vLXRhYmxlLXBhZ2luYXRvci5pbnRlcmZhY2UnO1xuaW1wb3J0IHR5cGUgeyBPVGFibGVRdWlja2ZpbHRlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvby10YWJsZS1xdWlja2ZpbHRlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlUmVzcG9uc2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3NlcnZpY2UtcmVzcG9uc2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IE9RdWVyeVBhcmFtcyB9IGZyb20gJy4uLy4uL3R5cGVzL3F1ZXJ5LXBhcmFtcy50eXBlJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX0lOUFVUU19PX1RBQkxFID0gW1xuICAvLyB2aXNpYmxlLWNvbHVtbnMgW3N0cmluZ106IHZpc2libGUgY29sdW1ucywgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdDogbm8gdmFsdWUuXG4gICd2aXNpYmxlQ29sdW1uczogdmlzaWJsZS1jb2x1bW5zJyxcblxuICAvLyB2aXNpYmxlLWNvbHVtbnMtYnktZGVmYXVsdCBbc3RyaW5nXTogY29sdW1ucyB0aGF0IGFyZSB2aXNpYmxlIGJ5IGRlZmF1bHQsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnZGVmYXVsdFZpc2libGVDb2x1bW5zOiBkZWZhdWx0LXZpc2libGUtY29sdW1ucycsXG5cbiAgLy8gZWRpdGFibGUtY29sdW1ucyBbc3RyaW5nXTogY29sdW1ucyB0aGF0IGNhbiBiZSBlZGl0ZWQgZGlyZWN0bHkgb3ZlciB0aGUgdGFibGUsIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAvLyAnZWRpdGFibGVDb2x1bW5zOiBlZGl0YWJsZS1jb2x1bW5zJyxcblxuICAvLyBzb3J0LWNvbHVtbnMgW3N0cmluZ106IGluaXRpYWwgc29ydGluZywgd2l0aCB0aGUgZm9ybWF0IGNvbHVtbjpbQVNDfERFU0NdLCBzZXBhcmF0ZWQgYnkgJzsnLiBEZWZhdWx0OiBubyB2YWx1ZS5cbiAgJ3NvcnRDb2x1bW5zOiBzb3J0LWNvbHVtbnMnLFxuXG4gICdxdWlja0ZpbHRlckNhbGxiYWNrOiBxdWljay1maWx0ZXItZnVuY3Rpb24nLFxuXG4gIC8vIGRlbGV0ZS1idXR0b24gW25vfHllc106IHNob3cgZGVsZXRlIGJ1dHRvbi4gRGVmYXVsdDogeWVzLlxuICAnZGVsZXRlQnV0dG9uOiBkZWxldGUtYnV0dG9uJyxcblxuICAvLyByZWZyZXNoLWJ1dHRvbiBbbm98eWVzXTogc2hvdyByZWZyZXNoIGJ1dHRvbi4gRGVmYXVsdDogeWVzLlxuICAncmVmcmVzaEJ1dHRvbjogcmVmcmVzaC1idXR0b24nLFxuXG4gIC8vIGNvbHVtbnMtdmlzaWJpbGl0eS1idXR0b24gW25vfHllc106IHNob3cgY29sdW1ucyB2aXNpYmlsaXR5IGJ1dHRvbi4gRGVmYXVsdDogeWVzLlxuICAnY29sdW1uc1Zpc2liaWxpdHlCdXR0b246IGNvbHVtbnMtdmlzaWJpbGl0eS1idXR0b24nLFxuXG4gIC8vIC8vIGNvbHVtbnMtcmVzaXplLWJ1dHRvbiBbbm98eWVzXTogc2hvdyBjb2x1bW5zIHJlc2l6ZSBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgLy8gJ2NvbHVtbnNSZXNpemVCdXR0b246IGNvbHVtbnMtcmVzaXplLWJ1dHRvbicsXG5cbiAgLy8gLy8gY29sdW1ucy1ncm91cC1idXR0b24gW25vfHllc106IHNob3cgY29sdW1ucyBncm91cCBidXR0b24uIERlZmF1bHQ6IHllcy5cbiAgLy8gJ2NvbHVtbnNHcm91cEJ1dHRvbjogY29sdW1ucy1ncm91cC1idXR0b24nLFxuXG4gIC8vIGV4cG9ydC1idXR0b24gW25vfHllc106IHNob3cgZXhwb3J0IGJ1dHRvbi4gRGVmYXVsdDogeWVzLlxuICAnZXhwb3J0QnV0dG9uOiBleHBvcnQtYnV0dG9uJyxcblxuICAvLyBzaG93LWNvbmZpZ3VyYXRpb24tb3B0aW9uIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IHNob3cgY29uZmlndXJhdGlvbiBidXR0b24gaW4gaGVhZGVyLiBEZWZhdWx0OiB5ZXMuXG4gICdzaG93Q29uZmlndXJhdGlvbk9wdGlvbjogc2hvdy1jb25maWd1cmF0aW9uLW9wdGlvbicsXG5cbiAgLy8gc2hvdy1idXR0b25zLXRleHQgW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyB0ZXh0IG9mIGhlYWRlciBidXR0b25zLiBEZWZhdWx0OiB5ZXMuXG4gICdzaG93QnV0dG9uc1RleHQ6IHNob3ctYnV0dG9ucy10ZXh0JyxcblxuICAvLyBzZWxlY3QtYWxsLWNoZWNrYm94IFt5ZXN8bm98dHJ1ZXxmYWxzZV06ICBzaG93IGluIHRoZSBtZW51IHRoZSBvcHRpb24gb2Ygc2VsZWN0aW9uIGNoZWNrIGJveGVzIC4gRGVmYXVsdDogbm8uXG4gICdzZWxlY3RBbGxDaGVja2JveDogc2VsZWN0LWFsbC1jaGVja2JveCcsXG5cbiAgLy8gcGFnaW5hdGlvbi1jb250cm9scyBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IHBhZ2luYXRpb24gY29udHJvbHMuIERlZmF1bHQ6IHllcy5cbiAgJ3BhZ2luYXRpb25Db250cm9sczogcGFnaW5hdGlvbi1jb250cm9scycsXG5cbiAgLy8gZml4LWhlYWRlciBbeWVzfG5vfHRydWV8ZmFsc2VdOiBmaXhlZCBoZWFkZXIgYW5kIGZvb3RlciB3aGVuIHRoZSBjb250ZW50IGlzIGdyZWF0aGVyIHRoYW4gaXRzIG93biBoZWlnaHQuIERlZmF1bHQ6IHllcy5cbiAgJ2ZpeGVkSGVhZGVyOiBmaXhlZC1oZWFkZXInLFxuXG4gIC8vIHNob3ctdGl0bGUgW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyB0aGUgdGFibGUgdGl0bGUuIERlZmF1bHQ6IG5vLlxuICAnc2hvd1RpdGxlOiBzaG93LXRpdGxlJyxcblxuICAvLyBlZGl0aW9uLW1vZGUgW25vbmUgfCBpbmxpbmUgfCBjbGljayB8IGRibGNsaWNrXTogZWRpdGlvbiBtb2RlLiBEZWZhdWx0IG5vbmVcbiAgJ2VkaXRpb25Nb2RlOiBlZGl0aW9uLW1vZGUnLFxuXG4gIC8vIHNlbGVjdGlvbi1tb2RlIFtub25lIHwgc2ltcGxlIHwgbXVsdGlwbGUgXTogc2VsZWN0aW9uIG1vZGUuIERlZmF1bHQgbXVsdGlwbGVcbiAgJ3NlbGVjdGlvbk1vZGU6IHNlbGVjdGlvbi1tb2RlJyxcblxuICAnaG9yaXpvbnRhbFNjcm9sbDogaG9yaXpvbnRhbC1zY3JvbGwnLFxuXG4gICdzaG93UGFnaW5hdG9yRmlyc3RMYXN0QnV0dG9uczogc2hvdy1wYWdpbmF0b3ItZmlyc3QtbGFzdC1idXR0b25zJyxcblxuICAnYXV0b0FsaWduVGl0bGVzOiBhdXRvLWFsaWduLXRpdGxlcycsXG5cbiAgJ211bHRpcGxlU29ydDogbXVsdGlwbGUtc29ydCcsXG4gIC8vIHNlbGVjdC1hbGwtY2hlY2tib3gtdmlzaWJsZSBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IHNlbGVjdGlvbiBjaGVjayBib3hlcy5EZWZhdWx0OiBuby5cbiAgJ3NlbGVjdEFsbENoZWNrYm94VmlzaWJsZTogc2VsZWN0LWFsbC1jaGVja2JveC12aXNpYmxlJyxcblxuICAnb3JkZXJhYmxlJyxcblxuICAncmVzaXphYmxlJyxcblxuICAna2VlcFNlbGVjdGVkSXRlbXM6IGtlZXAtc2VsZWN0ZWQtaXRlbXMnLFxuXG4gIC8vIGV4cG9ydC1tb2RlIFsndmlzaWJsZSd8J2xvY2FsJ3wnYWxsJ106IHNldHMgdGhlIG1vZGUgdG8gZXhwb3J0IGRhdGEuIERlZmF1bHQ6ICd2aXNpYmxlJ1xuICAnZXhwb3J0TW9kZTogZXhwb3J0LW1vZGUnLFxuXG4gIC8vIGV4cG9ydFNlcnZpY2VUeXBlIFsgc3RyaW5nIF06IFRoZSBzZXJ2aWNlIHVzZWQgYnkgdGhlIHRhYmxlIGZvciBleHBvcnRpbmcgaXQncyBkYXRhLCBpdCBtdXN0IGltcGxlbWVudCAnSUV4cG9ydFNlcnZpY2UnIGludGVyZmFjZS4gRGVmYXVsdDogJ09udGltaXplRXhwb3J0U2VydmljZSdcbiAgJ2V4cG9ydFNlcnZpY2VUeXBlOiBleHBvcnQtc2VydmljZS10eXBlJyxcblxuICAvLyBhdXRvLWFkanVzdCBbdHJ1ZXxmYWxzZV06IEF1dG8gYWRqdXN0IGNvbHVtbiB3aWR0aCB0byBmaXQgaXRzIGNvbnRlbnQuIERlZmF1bHQ6IHRydWVcbiAgJ2F1dG9BZGp1c3Q6IGF1dG8tYWRqdXN0JyxcblxuICAvLyBzaG93LWZpbHRlci1vcHRpb24gW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyBmaWx0ZXIgbWVudSBvcHRpb24gaW4gdGhlIGhlYWRlciBtZW51LiBEZWZhdWx0OiB5ZXMuXG4gICdzaG93RmlsdGVyT3B0aW9uOiBzaG93LWZpbHRlci1vcHRpb24nLFxuXG4gIC8vIHZpc2libGUtZXhwb3J0LWRpYWxvZy1idXR0b25zIFtzdHJpbmddOiB2aXNpYmxlIGJ1dHRvbnMgaW4gZXhwb3J0IGRpYWxvZywgc2VwYXJhdGVkIGJ5ICc7Jy4gRGVmYXVsdC9ubyBjb25maWd1cmVkOiBzaG93IGFsbC4gRW1wdHkgdmFsdWU6IGhpZGUgYWxsLlxuICAndmlzaWJsZUV4cG9ydERpYWxvZ0J1dHRvbnM6IHZpc2libGUtZXhwb3J0LWRpYWxvZy1idXR0b25zJyxcblxuICAvLyByb3ctY2xhc3MgW2Z1bmN0aW9uLCAocm93RGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcgfCBzdHJpbmdbXV06IGFkZHMgdGhlIGNsYXNzIG9yIGNsYXNzZXMgcmV0dXJuZWQgYnkgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHRvIHRoZSB0YWJsZSByb3dzLlxuICAncm93Q2xhc3M6IHJvdy1jbGFzcycsXG5cbiAgLy8gZmlsdGVyLWNvbHVtbi1hY3RpdmUtYnktZGVmYXVsdCBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IGljb24gZmlsdGVyIGJ5IGRlZmF1bHQgaW4gdGhlIHRhYmxlLiBEZWZhdWx0Onllc1xuICAnZmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0OmZpbHRlci1jb2x1bW4tYWN0aXZlLWJ5LWRlZmF1bHQnLFxuXG4gIC8vIGdyb3VwZWQtY29sdW1ucyBbc3RyaW5nXTogZ3JvdXBlZCBjb2x1bW5zIHNlcGFyYXRlZCBieSAnOycuIERlZmF1bHQ6IG5vIHZhbHVlLlxuICAnZ3JvdXBlZENvbHVtbnM6IGdyb3VwZWQtY29sdW1ucycsXG5cbiAgLy8gZ3JvdXBhYmxlW2Jvb2xlYW5dOiBJbmRpY2F0ZXMgd2hldGhlciBvciBub3QgdGhlIGNvbHVtbiBjYW4gYmUgZ3JvdXBhYmxlLiBCeSBkZWZhdWx0OiB0cnVlXG4gICdncm91cGFibGUnLFxuXG4gIC8vIGV4cGFuZC1ncm91cHMtc2FtZS1sZXZlbFtib29sZWFuXTogSW5kaWNhdGVzIGlmIGNsaWNrIGluIHJvdyBleHBhbmRzL2NvbGxhcHNlcyBhbGwgcm93cyBvbiBzYW1lIGxldmVsLiBCeSBkZWZhdWx0OiB0cnVlXG4gICdleHBhbmRHcm91cHNTYW1lTGV2ZWw6IGV4cGFuZC1ncm91cHMtc2FtZS1sZXZlbCcsXG5cbiAgLy8gY29sbGFwc2UtZ3JvdXBlZC1jb2x1bW5zIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IFdoZXRoZXIgY29sbGFwc2UgdGhlIGdyb3VwZWQgY29sdW1ucyBieSBkZWZhdWx0XG4gICdjb2xsYXBzZUdyb3VwZWRDb2x1bW5zOiBjb2xsYXBzZS1ncm91cGVkLWNvbHVtbnMnLFxuXG4gIC8vIHZpcnR1YWwtc2Nyb2xsIFt5ZXN8bm98dHJ1ZXxmYWxzZV06IFdoZXRoZXIgZW5hYmxlZCBvciBub3QgdGhlIHZpcnR1YWwgc2Nyb2xsXG4gICd2aXJ0dWFsU2Nyb2xsOiB2aXJ0dWFsLXNjcm9sbCcsXG5cbiAgLy9jb250ZXh0LW1lbnUgW3llc3xub3x0cnVlfGZhbHNlXTogSW5kaWNhdGVzIHdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgdGhlIHRhYmxlIGNvbnRleHQgbWVudVxuICAnY29udGV4dE1lbnU6IGNvbnRleHQtbWVudScsXG5cbiAgLy8gc2hvdy1leHBhbmRhYmxlLWljb24tZnVuY3Rpb24gW2Z1bmN0aW9uXTogRXhwYW5kYWJsZSBmdW5jdGlvbiB0byBjaGVjayBpZiBleHBhbmRhYmxlIGhhcyBkYXRhIHRvIHNob3cgb3Igbm90IGljb25cbiAgJ3Nob3dFeHBhbmRhYmxlSWNvbkZ1bmN0aW9uOiBzaG93LWV4cGFuZGFibGUtaWNvbi1mdW5jdGlvbicsXG5cbiAgLy8gc2hvdy1yZXBvcnQtb24tZGVtYW5kLW9wdGlvbiBbeWVzfG5vfHRydWV8ZmFsc2VdOiBzaG93IHJlcG9ydCBvbiBkZW1hbmQgb3B0aW9uIGluIHRoZSB0YWJsZSBtZW51LiBEZWZhdWx0OiB5ZXMuXG4gICdzaG93UmVwb3J0T25EZW1hbmRPcHRpb246IHNob3ctcmVwb3J0LW9uLWRlbWFuZC1vcHRpb24nLFxuXG4gIC8vIHNob3ctY2hhcnRzLW9uLWRlbWFuZC1vcHRpb24gW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyBjaGFydHMgb24gZGVtYW5kIG9wdGlvbiBpbiB0aGUgaGVhZGVyIG1lbnVcbiAgJ3Nob3dDaGFydHNPbkRlbWFuZE9wdGlvbjogc2hvdy1jaGFydHMtb24tZGVtYW5kLW9wdGlvbicsXG5cbiAgLy8gc2hvdy1yZXNldC13aWR0aC1vcHRpb24gW3llc3xub3x0cnVlfGZhbHNlXTogc2hvdyByZXNldCB3aWR0aCBtZW51IG9wdGlvbiBpbiB0aGUgaGVhZGVyIG1lbnVcbiAgJ3Nob3dSZXNldFdpZHRoT3B0aW9uOiBzaG93LXJlc2V0LXdpZHRoLW9wdGlvbicsXG5cbiAgJ2Rpc2FibGVTZWxlY3Rpb25GdW5jdGlvbjogZGlzYWJsZS1zZWxlY3Rpb24tZnVuY3Rpb24nLFxuXG4gICdub25IaWRhYmxlQ29sdW1uczogbm9uLWhpZGFibGUtY29sdW1ucycsXG4gICdyZWFkT25seTogcmVhZC1vbmx5JyxcbiAgJ3JlYWRPbmx5Q29uZmlndXJhdGlvbjogcmVhZC1vbmx5LWNvbmZpZ3VyYXRpb24nLFxuICAnc2hvd05vdGlmaWNhdGlvbk9mUmVhZE9ubHk6IHNob3ctbm90aWZpY2F0aW9uLW9mLXJlYWQtb25seSdcbl07XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX09VVFBVVFNfT19UQUJMRSA9IFtcbiAgJ29uUm93U2VsZWN0ZWQnLFxuICAnb25Sb3dEZXNlbGVjdGVkJyxcbiAgJ29uUm93RGVsZXRlZCdcbl07XG5cbmNvbnN0IHN0aWNreUhlYWRlclNlbGVjdG9yID0gJy5tYXQtbWRjLWhlYWRlci1yb3cgLm1hdC1tZGMtdGFibGUtc3RpY2t5JztcbmNvbnN0IHN0aWNreUZvb3RlclNlbGVjdG9yID0gJy5tYXQtbWRjLWZvb3Rlci1yb3cgLm1hdC1tZGMtdGFibGUtc3RpY2t5JztcbmNvbnN0IHJvd1NlbGVjdG9yID0gJy5tYXQtbWRjLXJvdyc7XG5jb25zdCBoZWFkZXJTZWxlY3RvciA9ICcubWF0LW1kYy1oZWFkZXItcm93JztcbmNvbnN0IGZvb3RlclNlbGVjdG9yID0gJy5tYXQtbWRjLWhlYWRlci1yb3cnO1xuXG50eXBlIERpc2FibGVTZWxlY3Rpb25GdW5jdGlvbiA9IChpdGVtOiBhbnkpID0+IGJvb2xlYW47XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ28tdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vby10YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL28tdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgT250aW1pemVTZXJ2aWNlUHJvdmlkZXIsXG4gICAgQ29tcG9uZW50U3RhdGVTZXJ2aWNlUHJvdmlkZXIsXG4gICAgT1RhYmxlRGF0YVNvdXJjZVNlcnZpY2UsXG4gICAgeyBwcm92aWRlOiBPX0NPTVBPTkVOVF9TVEFURV9TRVJWSUNFLCB1c2VDbGFzczogT1RhYmxlQ29tcG9uZW50U3RhdGVTZXJ2aWNlIH0sXG4gICAgeyBwcm92aWRlOiBWSVJUVUFMX1NDUk9MTF9TVFJBVEVHWSwgdXNlQ2xhc3M6IE9UYWJsZVZpcnR1YWxTY3JvbGxTdHJhdGVneSB9LFxuICAgIHsgcHJvdmlkZTogT1RhYmxlQmFzZSwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gT1RhYmxlQ29tcG9uZW50KSB9XG4gIF0sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdkZXRhaWxFeHBhbmQnLCBbXG4gICAgICBzdGF0ZSgnY29sbGFwc2VkJywgc3R5bGUoeyBoZWlnaHQ6ICcwcHgnLCBtaW5IZWlnaHQ6ICcwJyB9KSksXG4gICAgICBzdGF0ZSgnZXhwYW5kZWQnLCBzdHlsZSh7IGhlaWdodDogJyonIH0pKSxcbiAgICAgIHRyYW5zaXRpb24oJ2V4cGFuZGVkIDw9PiBjb2xsYXBzZWQnLCBhbmltYXRlKCcyMjVtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSknKSksXG4gICAgXSlcbiAgXSxcbiAgaW5wdXRzOiBERUZBVUxUX0lOUFVUU19PX1RBQkxFLFxuICBvdXRwdXRzOiBERUZBVUxUX09VVFBVVFNfT19UQUJMRSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGhvc3Q6IHtcbiAgICAnW2NsYXNzLm8tdGFibGVdJzogJ3RydWUnLFxuICAgICdbY2xhc3Mub250aW1pemUtdGFibGVdJzogJ3RydWUnLFxuICAgICdbY2xhc3Muby10YWJsZS1maXhlZF0nOiAnZml4ZWRIZWFkZXInLFxuICAgICdbY2xhc3Muby10YWJsZS1kaXNhYmxlZF0nOiAnIWVuYWJsZWQnLFxuICAgICcoZG9jdW1lbnQ6Y2xpY2spJzogJ2hhbmRsZURPTUNsaWNrKCRldmVudCknXG4gIH1cbn0pXG5leHBvcnQgY2xhc3MgT1RhYmxlQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RPU2VydmljZUNvbXBvbmVudDxPVGFibGVDb21wb25lbnRTdGF0ZVNlcnZpY2U+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQsIEFmdGVyQ29udGVudEluaXQge1xuICBwdWJsaWMgc3RhdGljIERFRkFVTFRfQkFTRV9TSVpFX1NQSU5ORVIgPSAxMDA7XG4gIHB1YmxpYyBzdGF0aWMgRklSU1RfTEFTVF9DRUxMX1BBRERJTkcgPSAyNDtcbiAgcHVibGljIHN0YXRpYyBFWFBBTkRFRF9ST1dfQ09OVEFJTkVSX0NMQVNTID0gJ2V4cGFuZGVkLXJvdy1jb250YWluZXItJztcbiAgcHVibGljIHN0YXRpYyBBVkFJTEFCTEVfR1JPVVBJTkdfQ09MVU1OU19SRU5ERVJFUlMgPSBbJ2N1cnJlbmN5JywgJ2ludGVnZXInLCAncmVhbCddO1xuXG4gIHB1YmxpYyBERVRBSUxfTU9ERV9OT05FID0gQ29kZXMuREVUQUlMX01PREVfTk9ORTtcbiAgcHVibGljIEVESVRfTU9ERV9OT05FID0gQ29kZXMuRURJVElPTl9NT0RFX05PTkU7XG5cbiAgcHJvdGVjdGVkIHNuYWNrQmFyU2VydmljZTogU25hY2tCYXJTZXJ2aWNlO1xuXG4gIHB1YmxpYyBwYWdpbmF0b3I6IE9UYWJsZVBhZ2luYXRvcjtcblxuICBzb3J0OiBPTWF0U29ydDtcbiAgY2xpY2tTdWJqZWN0ID0gbmV3IFN1YmplY3Q8eyByb3c6IGFueSwgY29sdW1uOiBhbnksIGNlbGxSZWY6IGFueSwgcm93SW5kZXg6IG51bWJlciwgZXZlbnQ6IE1vdXNlRXZlbnQgfT4oKTtcbiAgZGJsY2xpY2tTdWJqZWN0ID0gbmV3IFN1YmplY3Q8eyByb3c6IGFueSwgY29sdW1uOiBhbnksIGNlbGxSZWY6IGFueSwgcm93SW5kZXg6IG51bWJlciwgZXZlbnQ6IE1vdXNlRXZlbnQgfT4oKTtcbiAgcHJvdGVjdGVkIGNsaWNrU3ViamVjdFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgZGJDbGlja1N1YmplY3RTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBAVmlld0NoaWxkKE9NYXRTb3J0KVxuICBzZXQgb01hdFNvcnQoX3NvcnQ6IE9NYXRTb3J0KSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKF9zb3J0KSAmJlxuICAgICAgKCFVdGlsLmlzRGVmaW5lZCh0aGlzLnNvcnQpIHx8IChVdGlsLmlzRGVmaW5lZCh0aGlzLnNvcnQpICYmIFV0aWwuc3RyaW5naWZ5KHRoaXMuc29ydCkgIT09IFV0aWwuc3RyaW5naWZ5KF9zb3J0KSkpKSB7XG4gICAgICB0aGlzLnNvcnQgPSBfc29ydDtcbiAgICAgIHRoaXMuc2V0RGF0YXNvdXJjZSgpO1xuICAgIH1cbiAgfTtcblxuICBwdWJsaWMgdmlydHVhbFNjcm9sbFZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG5cbiAgcHVibGljIG9UYWJsZUdsb2JhbENvbmZpZzogT1RhYmxlR2xvYmFsQ29uZmlnO1xuICBAVmlld0NoaWxkKCd2aXJ0dWFsU2Nyb2xsVmlld1BvcnQnKSBzZXQgY2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0KHZhbHVlOiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQpIHtcbiAgICBpZiAodmFsdWUgIT0gdGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQpIHtcbiAgICAgIHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0ID0gdmFsdWU7XG4gICAgICB0aGlzLnVwZGF0ZUhlYWRlckFuZEZvb3RlclN0aWNreVBvc2l0aW9ucygpO1xuICAgICAgaWYgKHRoaXMuY2hlY2tWaWV3cG9ydFNpemVTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgdGhpcy5jaGVja1ZpZXdwb3J0U2l6ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy52aXJ0dWFsU2Nyb2xsVmlld3BvcnQpIHtcbiAgICAgICAgdGhpcy5jaGVja1ZpZXdwb3J0U2l6ZVN1YnNjcmlwdGlvbiA9IHRoaXMuY2hlY2tWaWV3UG9ydFN1YmplY3Quc3Vic2NyaWJlKHggPT4ge1xuICAgICAgICAgIGlmICh4KSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrVmlld3BvcnRTaXplKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBvbmx5IGZvciBpbnNpZGVUYWJCdWdXb3JrYXJvdW5kXG4gIHByb3RlY3RlZCB0YWJsZUhlYWRlcnM6IEFycmF5PE9UYWJsZUhlYWRlckNvbXBvbmVudD4gPSBbXTtcblxuICBAVmlld0NoaWxkKCdzcGlubmVyQ29udGFpbmVyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHNwaW5uZXJDb250YWluZXI6IEVsZW1lbnRSZWY7XG5cbiAgQENvbnRlbnRDaGlsZChPVGFibGVSb3dFeHBhbmRhYmxlQ29tcG9uZW50KVxuICB0YWJsZVJvd0V4cGFuZGFibGU6IE9UYWJsZVJvd0V4cGFuZGFibGVDb21wb25lbnQ7XG5cbiAgX2ZpbHRlckNvbHVtbnM6IEFycmF5PE9GaWx0ZXJDb2x1bW4+O1xuICBwb3J0YWxIb3N0OiBBcnJheTxEb21Qb3J0YWxPdXRsZXQ+ID0gW107XG4gIG9uRGF0YUxvYWRlZENlbGxSZW5kZXJlclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG5cblxuICBwdWJsaWMgdGFibGVDb250ZXh0TWVudTogT0NvbnRleHRNZW51Q29tcG9uZW50O1xuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzZWxlY3RBbGxDaGVja2JveDogYm9vbGVhbiA9IGZhbHNlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZXhwb3J0QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dDb25maWd1cmF0aW9uT3B0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGNvbHVtbnNWaXNpYmlsaXR5QnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dGaWx0ZXJPcHRpb246IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd1JlcG9ydE9uRGVtYW5kT3B0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dDaGFydHNPbkRlbWFuZE9wdGlvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzaG93QnV0dG9uc1RleHQ6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0OiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHNob3dSZXNldFdpZHRoT3B0aW9uOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHJlYWRPbmx5OiBib29sZWFuID0gZmFsc2U7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzaG93Tm90aWZpY2F0aW9uT2ZSZWFkT25seTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEV4cGFuZGFibGUgaW5wdXQgY2FsbGJhY2sgZnVuY3Rpb25cbiAgc2hvd0V4cGFuZGFibGVJY29uRnVuY3Rpb246IChyb3c6IGFueSwgcm93SW5kZXg6IG51bWJlcikgPT4gYm9vbGVhbiB8IFByb21pc2U8Ym9vbGVhbj4gfCBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuXG4gIHJlYWRPbmx5RnVuY3Rpb246IChjb25maWd1cmF0aW9uOiBhbnkpID0+IGJvb2xlYW47XG4gIHJlYWRPbmx5Q29uZmlndXJhdGlvbjogYW55O1xuXG4gIGlzQ29tcG9uZW50UmVhZE9ubHkoc2VsZWN0b3I6IHN0cmluZywgYXR0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZE9ubHlDb25maWd1cmF0aW9uPy5bc2VsZWN0b3JdPy5bYXR0cl07XG4gIH1cbiAgcHJvdGVjdGVkIF9vVGFibGVPcHRpb25zOiBPVGFibGVPcHRpb25zO1xuXG4gIGdldCBvVGFibGVPcHRpb25zKCk6IE9UYWJsZU9wdGlvbnMge1xuICAgIHJldHVybiB0aGlzLl9vVGFibGVPcHRpb25zO1xuICB9XG5cbiAgc2V0IG9UYWJsZU9wdGlvbnModmFsdWU6IE9UYWJsZU9wdGlvbnMpIHtcbiAgICB0aGlzLl9vVGFibGVPcHRpb25zID0gdmFsdWU7XG4gIH1cblxuICBzZXQgcXVpY2tGaWx0ZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB2YWx1ZSA9IFV0aWwucGFyc2VCb29sZWFuKFN0cmluZyh2YWx1ZSkpO1xuICAgIHRoaXMuX3F1aWNrRmlsdGVyID0gdmFsdWU7XG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5maWx0ZXIgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBxdWlja0ZpbHRlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcXVpY2tGaWx0ZXI7XG4gIH1cblxuICBzZXQgZmlsdGVyQ2FzZVNlbnNpdGl2ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2ZpbHRlckNhc2VTZW5zaXRpdmUgPSBCb29sZWFuQ29udmVydGVyKHZhbHVlKTtcbiAgICBpZiAodGhpcy5fb1RhYmxlT3B0aW9ucykge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5maWx0ZXJDYXNlU2Vuc2l0aXZlID0gdGhpcy5fZmlsdGVyQ2FzZVNlbnNpdGl2ZTtcbiAgICB9XG4gIH1cblxuICBnZXQgZmlsdGVyQ2FzZVNlbnNpdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyQ2FzZVNlbnNpdGl2ZTtcbiAgfVxuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBpbnNlcnRCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgcmVmcmVzaEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBkZWxldGVCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZml4ZWRIZWFkZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgc2hvd1RpdGxlOiBib29sZWFuID0gZmFsc2U7XG4gIGVkaXRpb25Nb2RlOiBzdHJpbmcgPSBDb2Rlcy5FRElUSU9OX01PREVfTk9ORTtcbiAgc2VsZWN0aW9uTW9kZTogc3RyaW5nID0gQ29kZXMuU0VMRUNUSU9OX01PREVfTVVMVElQTEU7XG5cbiAgcHJvdGVjdGVkIF9ob3Jpem9udGFsU2Nyb2xsID0gZmFsc2U7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzZXQgaG9yaXpvbnRhbFNjcm9sbCh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2hvcml6b250YWxTY3JvbGwgPSBCb29sZWFuQ29udmVydGVyKHZhbHVlKTtcbiAgICB0aGlzLnJlZnJlc2hDb2x1bW5zV2lkdGhGcm9tT3JpZ2luYWxEZWZpbml0aW9uKCk7XG4gIH1cblxuICBnZXQgaG9yaXpvbnRhbFNjcm9sbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faG9yaXpvbnRhbFNjcm9sbDtcbiAgfVxuXG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBzaG93UGFnaW5hdG9yRmlyc3RMYXN0QnV0dG9uczogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBhdXRvQWxpZ25UaXRsZXM6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgbXVsdGlwbGVTb3J0OiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIG9yZGVyYWJsZTogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICByZXNpemFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgYXV0b0FkanVzdDogYm9vbGVhbiA9IHRydWU7XG4gIEBCb29sZWFuSW5wdXRDb252ZXJ0ZXIoKVxuICBncm91cGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgZXhwYW5kR3JvdXBzU2FtZUxldmVsOiBib29sZWFuID0gdHJ1ZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGNvbGxhcHNlR3JvdXBlZENvbHVtbnM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIHZpcnR1YWxTY3JvbGw6IGJvb2xlYW4gPSB0cnVlO1xuICBAQm9vbGVhbklucHV0Q29udmVydGVyKClcbiAgY29udGV4dE1lbnU6IGJvb2xlYW4gPSB0cnVlO1xuICAvLyBNYWludGFpbmluZyB0aGlzIGdldHRlciB0byBhbGxvdyBjb21wb25lbnQgZXh0ZW5zaW9ucyAoYXZvaWRpbmcgYSBicmVha2luZyBjaGFuZ2UpXG4gIGdldCBlbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm9lbmFibGVkO1xuICB9XG4gIHByb3RlY3RlZCBfc2VsZWN0QWxsQ2hlY2tib3hWaXNpYmxlOiBib29sZWFuO1xuICBzZXQgc2VsZWN0QWxsQ2hlY2tib3hWaXNpYmxlKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fc2VsZWN0QWxsQ2hlY2tib3hWaXNpYmxlID0gQm9vbGVhbkNvbnZlcnRlcih2YWx1ZSk7XG4gICAgaWYgKHRoaXMuc3RhdGUpIHtcbiAgICAgIHRoaXMuX3NlbGVjdEFsbENoZWNrYm94VmlzaWJsZSA9IEJvb2xlYW5Db252ZXJ0ZXIodGhpcy5zdGF0ZS5zZWxlY3RDb2x1bW5WaXNpYmxlKTtcbiAgICB9XG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udmlzaWJsZSA9IHRoaXMuX3NlbGVjdEFsbENoZWNrYm94VmlzaWJsZTtcbiAgICB0aGlzLmluaXRpYWxpemVDaGVja2JveENvbHVtbigpO1xuICB9XG5cbiAgZ2V0IHNlbGVjdEFsbENoZWNrYm94VmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0QWxsQ2hlY2tib3hWaXNpYmxlO1xuICB9XG5cbiAgQEJvb2xlYW5JbnB1dENvbnZlcnRlcigpXG4gIGtlZXBTZWxlY3RlZEl0ZW1zOiBib29sZWFuID0gdHJ1ZTtcblxuICBwdWJsaWMgZXhwb3J0TW9kZTogc3RyaW5nID0gQ29kZXMuRVhQT1JUX01PREVfVklTSUJMRTtcbiAgcHVibGljIGV4cG9ydFNlcnZpY2VUeXBlOiBzdHJpbmc7XG4gIHB1YmxpYyB2aXNpYmxlRXhwb3J0RGlhbG9nQnV0dG9uczogc3RyaW5nO1xuICBwdWJsaWMgZGFvVGFibGU6IE9UYWJsZURhbyB8IG51bGw7XG4gIHB1YmxpYyBkYXRhU291cmNlOiBPVGFibGVEYXRhU291cmNlIHwgbnVsbDtcbiAgcHVibGljIHZpc2libGVDb2x1bW5zOiBzdHJpbmc7XG4gIHB1YmxpYyBzZWFyY2hlYWJsZUNvbHVtbnM6IHN0cmluZ1tdID0gW107XG4gIHB1YmxpYyBkZWZhdWx0VmlzaWJsZUNvbHVtbnM6IHN0cmluZztcbiAgcHVibGljIGdyb3VwZWRDb2x1bW5zOiBzdHJpbmc7XG4gIHB1YmxpYyBub25IaWRhYmxlQ29sdW1uczogc3RyaW5nO1xuXG4gIHB1YmxpYyBzb3J0Q29sdW1uczogc3RyaW5nO1xuICBwdWJsaWMgZ3JvdXBlZENvbHVtblR5cGVzOiBPR3JvdXBlZENvbHVtblR5cGVzW10gPSBbXTtcbiAgcHVibGljIHJvd0NsYXNzOiAocm93RGF0YTogYW55LCByb3dJbmRleDogbnVtYmVyKSA9PiBzdHJpbmcgfCBzdHJpbmdbXTtcblxuICAvKnBhcnNlZCBpbnB1dHMgdmFyaWFibGVzICovXG4gIHByb3RlY3RlZCBfdmlzaWJsZUNvbEFycmF5OiBzdHJpbmdbXSA9IFtdO1xuXG4gIGdldCB2aXNpYmxlQ29sQXJyYXkoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLl92aXNpYmxlQ29sQXJyYXk7XG4gIH1cblxuICBzZXQgdmlzaWJsZUNvbEFycmF5KGFyZzogYW55W10pIHtcbiAgICBjb25zdCBwZXJtaXNzaW9uc0Jsb2NrZWQgPSB0aGlzLnBlcm1pc3Npb25zICYmIHRoaXMucGVybWlzc2lvbnMuY29sdW1ucyA/IHRoaXMucGVybWlzc2lvbnMuY29sdW1ucy5maWx0ZXIoY29sID0+IGNvbC52aXNpYmxlID09PSBmYWxzZSkubWFwKGNvbCA9PiBjb2wuYXR0cikgOiBbXTtcbiAgICBjb25zdCBwZXJtaXNzaW9uc0NoZWNrZWQgPSBhcmcuZmlsdGVyKHZhbHVlID0+IHBlcm1pc3Npb25zQmxvY2tlZC5pbmRleE9mKHZhbHVlKSA9PT0gLTEpO1xuICAgIHRoaXMuX3Zpc2libGVDb2xBcnJheSA9IHBlcm1pc3Npb25zQ2hlY2tlZDtcbiAgICBpZiAodGhpcy5fb1RhYmxlT3B0aW9ucykge1xuICAgICAgY29uc3QgY29udGFpbnNTZWxlY3Rpb25Db2wgPSB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zLmluZGV4T2YoQ29kZXMuTkFNRV9DT0xVTU5fU0VMRUNUKSAhPT0gLTE7XG4gICAgICBjb25zdCBjb250YWluc0V4cGFuZGFibGVDb2wgPSB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zLmluZGV4T2YoQ29kZXMuTkFNRV9DT0xVTU5fRVhQQU5EQUJMRSkgIT09IC0xO1xuICAgICAgaWYgKGNvbnRhaW5zU2VsZWN0aW9uQ29sKSB7XG4gICAgICAgIHRoaXMuX3Zpc2libGVDb2xBcnJheS51bnNoaWZ0KENvZGVzLk5BTUVfQ09MVU1OX1NFTEVDVCk7XG4gICAgICB9XG4gICAgICBpZiAoY29udGFpbnNTZWxlY3Rpb25Db2wgJiYgY29udGFpbnNFeHBhbmRhYmxlQ29sKSB7XG4gICAgICAgIHRoaXMuX3Zpc2libGVDb2xBcnJheSA9IFt0aGlzLl92aXNpYmxlQ29sQXJyYXlbMF1dLmNvbmNhdChDb2Rlcy5OQU1FX0NPTFVNTl9FWFBBTkRBQkxFLCB0aGlzLl92aXNpYmxlQ29sQXJyYXkuc3BsaWNlKDEpKTtcblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGNvbnRhaW5zRXhwYW5kYWJsZUNvbCkge1xuICAgICAgICAgIHRoaXMuX3Zpc2libGVDb2xBcnJheS51bnNoaWZ0KENvZGVzLk5BTUVfQ09MVU1OX0VYUEFOREFCTEUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zID0gdGhpcy5fdmlzaWJsZUNvbEFycmF5O1xuICAgICAgdGhpcy5ncm91cGluZ0hlYWRlcnNSb3dzID0gdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy5tYXAodmlzaWJsZUNvbCA9PiAnZ3JvdXBIZWFkZXItJyArIHZpc2libGVDb2wpO1xuICAgIH1cbiAgfVxuXG4gIHNvcnRDb2xBcnJheTogU1FMT3JkZXJbXSA9IFtdO1xuICAvKmVuZCBvZiBwYXJzZWQgaW5wdXRzIHZhcmlhYmxlcyAqL1xuXG4gIHByb3RlY3RlZCB0YWJHcm91cENvbnRhaW5lcjogTWF0VGFiR3JvdXA7XG4gIHByb3RlY3RlZCB0YWJDb250YWluZXI6IE1hdFRhYjtcbiAgdGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICBwcm90ZWN0ZWQgcGVuZGluZ1F1ZXJ5OiBib29sZWFuID0gZmFsc2U7XG4gIHByb3RlY3RlZCBwZW5kaW5nUXVlcnlGaWx0ZXIgPSB1bmRlZmluZWQ7XG5cbiAgcHJvdGVjdGVkIHNldFN0YXRpY0RhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJvdGVjdGVkIGF2b2lkUXVlcnlDb2x1bW5zOiBBcnJheTxhbnk+ID0gW107XG4gIHByb3RlY3RlZCBhc3luY0xvYWRDb2x1bW5zOiBBcnJheTxhbnk+ID0gW107XG4gIHByb3RlY3RlZCBhc3luY0xvYWRTdWJzY3JpcHRpb25zOiBvYmplY3QgPSB7fTtcblxuICBwcm90ZWN0ZWQgcXVlcnlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIGNvbnRleHRNZW51U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCB2aXJ0dWFsU2Nyb2xsU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByb3RlY3RlZCBjaGVja1ZpZXdwb3J0U2l6ZVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgZmluaXNoUXVlcnlTdWJzY3JpcHRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwdWJsaWMgb25Sb3dTZWxlY3RlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBvblJvd0Rlc2VsZWN0ZWQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBwdWJsaWMgb25Sb3dEZWxldGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIG9uUmVpbml0aWFsaXplOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgcHVibGljIG9uQ29udGVudENoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyBvbkZpbHRlckJ5Q29sdW1uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwcm90ZWN0ZWQgc2VsZWN0aW9uQ2hhbmdlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHVibGljIG9UYWJsZUZpbHRlckJ5Q29sdW1uRGF0YURpYWxvZ0NvbXBvbmVudDogT1RhYmxlRmlsdGVyQnlDb2x1bW5EYXRhRGlhbG9nQ29tcG9uZW50O1xuICBwdWJsaWMgb1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudDogT1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudDtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNob3dUb3RhbHNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHB1YmxpYyBzaG93VG90YWxzOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5zaG93VG90YWxzU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2FkaW5nU29ydGluZ1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHJvdGVjdGVkIGxvYWRpbmdTb3J0aW5nOiBPYnNlcnZhYmxlPGJvb2xlYW4+ID0gdGhpcy5sb2FkaW5nU29ydGluZ1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgbG9hZGluZ1Njcm9sbFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgcHVibGljIGxvYWRpbmdTY3JvbGw6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSB0aGlzLmxvYWRpbmdTY3JvbGxTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuXG4gIHB1YmxpYyBzaG93TG9hZGluZzogT2JzZXJ2YWJsZTxib29sZWFuPiA9IGNvbWJpbmVMYXRlc3QoW1xuICAgIHRoaXMubG9hZGluZy5waXBlKGRlYm91bmNlVGltZSgyMDApKSwgLy8gYXZvaWQgZGlzcGxheWluZyBsb2FkaW5nIHNwaW5uZXIgZm9yIGEgdmVyeSBzaG9ydCB0aW1lXG4gICAgdGhpcy5sb2FkaW5nU29ydGluZyxcbiAgICB0aGlzLmxvYWRpbmdTY3JvbGxcbiAgXSkucGlwZShcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycikgPT4gcHJldlswXSA9PT0gY3VyclswXSAmJiBwcmV2WzFdID09PSBjdXJyWzFdICYmIHByZXZbMl0gPT09IGN1cnJbMl0pLCAvLyBhdm9pZCBlbWl0dGluZyBzYW1lIHZhbHVlIG11bHRpcGxlIHRpbWVzXG4gICAgbWFwKChyZXM6IGJvb2xlYW5bXSkgPT4gcmVzLnNvbWUociA9PiByKSlcbiAgKTtcblxuICBwdWJsaWMgb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudDogT1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudDtcbiAgcHVibGljIHNob3dGaXJzdEluc2VydGFibGVSb3c6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHNob3dMYXN0SW5zZXJ0YWJsZVJvdzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZXhwYW5kYWJsZUl0ZW06IFNlbGVjdGlvbk1vZGVsPGFueT47XG5cbiAgcHJvdGVjdGVkIGNsaWNrVGltZXI7XG4gIHByb3RlY3RlZCBjbGlja0RlbGF5ID0gMjAwO1xuICBwcm90ZWN0ZWQgY2xpY2tQcmV2ZW50ID0gZmFsc2U7XG4gIHB1YmxpYyBlZGl0aW5nQ2VsbDogYW55O1xuICBwcm90ZWN0ZWQgZWRpdGluZ1JvdzogYW55O1xuXG4gIHNldCBjdXJyZW50UGFnZSh2YWw6IG51bWJlcikge1xuICAgIHRoaXMuX2N1cnJlbnRQYWdlID0gdmFsO1xuICAgIGlmICh0aGlzLnBhZ2luYXRvcikge1xuICAgICAgdGhpcy5wYWdpbmF0b3IucGFnZUluZGV4ID0gdmFsO1xuICAgICAgaWYgKHRoaXMubWF0cGFnaW5hdG9yKSB7XG4gICAgICAgIHRoaXMubWF0cGFnaW5hdG9yLnBhZ2VJbmRleCA9IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgY3VycmVudFBhZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudFBhZ2U7XG4gIH1cblxuICBwdWJsaWMgb1RhYmxlUXVpY2tGaWx0ZXJDb21wb25lbnQ6IE9UYWJsZVF1aWNrZmlsdGVyO1xuICBwcm90ZWN0ZWQgc29ydFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcm90ZWN0ZWQgb25SZW5kZXJlZERhdGFDaGFuZ2U6IFN1YnNjcmlwdGlvbjtcbiAgcHJvdGVjdGVkIHByZXZpb3VzUmVuZGVyZXJEYXRhO1xuXG4gIHF1aWNrRmlsdGVyQ2FsbGJhY2s6IFF1aWNrRmlsdGVyRnVuY3Rpb247XG4gIGRpc2FibGVTZWxlY3Rpb25GdW5jdGlvbjogRGlzYWJsZVNlbGVjdGlvbkZ1bmN0aW9uO1xuXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlQm9keScpXG4gIHByb3RlY3RlZCB0YWJsZUJvZHlFbDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndGFibGVIZWFkZXInLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgdGFibGVIZWFkZXJFbDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndGFibGVUb29sYmFyJywgeyByZWFkOiBFbGVtZW50UmVmIH0pXG4gIHRhYmxlVG9vbGJhckVsOiBFbGVtZW50UmVmO1xuXG4gIGhvcml6b250YWxTY3JvbGxlZDogYm9vbGVhbjtcbiAgcHVibGljIG9uVXBkYXRlU2Nyb2xsZWRTdGF0ZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHB1YmxpYyByb3dXaWR0aDtcblxuICBzdG9yZVBhZ2luYXRpb25TdGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qIEluIHRoZSBjYXNlIHRoZSB0YWJsZSBoYXZlbnQgcGFnaW5hdGlvbkNvbnRyb2wgYW5kIHBhZ2VhYmxlLCB0aGUgdGFibGUgaGFzIHBhZ2luYXRpb24gdmlydHVhbCovXG4gIHBhZ2VTY3JvbGxWaXJ0dWFsID0gMTtcblxuICBwdWJsaWMgc3RhdGljIERFRkFVTFRfUk9XX0hFSUdIVCA9IDM2O1xuICBwcm90ZWN0ZWQgcGVybWlzc2lvbnM6IE9UYWJsZVBlcm1pc3Npb25zO1xuICBtYXRNZW51OiBNYXRNZW51O1xuXG4gIEBWaWV3Q2hpbGQoJ3RhYmxlTWVudScpXG4gIG9UYWJsZU1lbnU6IE9UYWJsZU1lbnU7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihPVGFibGVPcHRpb25Db21wb25lbnQpXG4gIHRhYmxlT3B0aW9uczogUXVlcnlMaXN0PE9UYWJsZU9wdGlvbkNvbXBvbmVudD47XG5cbiAgb1RhYmxlQnV0dG9uczogT1RhYmxlQnV0dG9ucztcblxuICBAQ29udGVudENoaWxkcmVuKE9UYWJsZUJ1dHRvbkNvbXBvbmVudClcbiAgdGFibGVCdXR0b25zOiBRdWVyeUxpc3Q8T1RhYmxlQnV0dG9uPjtcblxuICBAQ29udGVudENoaWxkKCdvLXRhYmxlLXF1aWNrZmlsdGVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgcXVpY2tmaWx0ZXJDb250ZW50Q2hpbGQ6IE9UYWJsZVF1aWNrZmlsdGVyO1xuXG5cbiAgQENvbnRlbnRDaGlsZHJlbihPVGFibGVFeHBvcnRCdXR0b25Db21wb25lbnQpXG4gIGV4cG9ydE9wdHNUZW1wbGF0ZTogUXVlcnlMaXN0PE9UYWJsZUV4cG9ydEJ1dHRvbkNvbXBvbmVudD5cblxuICBAQ29udGVudENoaWxkKE9UYWJsZUNvbHVtblNlbGVjdEFsbERpcmVjdGl2ZSlcbiAgdGFibGVDb2x1bW5TZWxlY3RBbGxDb250ZW50Q2hpbGQ6IE9UYWJsZUNvbHVtblNlbGVjdEFsbERpcmVjdGl2ZTtcblxuXG5cbiAgcHVibGljIGdyb3VwZWRDb2x1bW5zQXJyYXk6IHN0cmluZ1tdID0gW107XG4gIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzpyZXNpemUnLCBbXSlcbiAgdXBkYXRlU2Nyb2xsZWRTdGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ob3Jpem9udGFsU2Nyb2xsKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgY29uc3QgYm9keVdpZHRoID0gdGhpcy50YWJsZUJvZHlFbC5uYXRpdmVFbGVtZW50LmNsaWVudFdpZHRoO1xuICAgICAgICBjb25zdCBzY3JvbGxXaWR0aCA9IHRoaXMudGFibGVCb2R5RWwubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICAgICAgY29uc3QgcHJldmlvdXNTdGF0ZSA9IHRoaXMuaG9yaXpvbnRhbFNjcm9sbGVkO1xuICAgICAgICB0aGlzLmhvcml6b250YWxTY3JvbGxlZCA9IHNjcm9sbFdpZHRoID4gYm9keVdpZHRoO1xuICAgICAgICBpZiAocHJldmlvdXNTdGF0ZSAhPT0gdGhpcy5ob3Jpem9udGFsU2Nyb2xsZWQpIHtcbiAgICAgICAgICB0aGlzLm9uVXBkYXRlU2Nyb2xsZWRTdGF0ZS5lbWl0KHRoaXMuaG9yaXpvbnRhbFNjcm9sbGVkKTtcbiAgICAgICAgfVxuICAgICAgfSwgMCk7XG4gICAgfVxuICAgIHRoaXMuY2hlY2tWaWV3cG9ydFNpemUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBfaXNDb2x1bW5GaWx0ZXJzQWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZ2V0IGlzQ29sdW1uRmlsdGVyc0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNDb2x1bW5GaWx0ZXJzQWN0aXZlO1xuICB9XG5cbiAgc2V0IGlzQ29sdW1uRmlsdGVyc0FjdGl2ZSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9pc0NvbHVtbkZpbHRlcnNBY3RpdmUgPSB2YWw7XG4gIH1cblxuICBncm91cGluZ0hlYWRlcnNSb3dzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHB1YmxpYyBvVGFibGVDb2x1bW5zR3JvdXBpbmdDb21wb25lbnQ6IE9UYWJsZUNvbHVtbnNHcm91cGluZztcblxuICBAQ29udGVudENoaWxkKE9UYWJsZUNvbnRleHRNZW51Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBjb250ZXh0TWVudUNvbnRlbnRDaGlsZDogT1RhYmxlQ29udGV4dE1lbnVDb21wb25lbnQ7XG5cbiAgcHJvdGVjdGVkIHRyaWdnZXJTZWxlY3Rpb25FdmVudHM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIEBWaWV3Q2hpbGRyZW4oTWF0VG9vbHRpcClcbiAgdG9vbHRpcDogUXVlcnlMaXN0PE1hdFRvb2x0aXA+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJvdGVjdGVkIGRpYWxvZzogTWF0RGlhbG9nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoZm9yd2FyZFJlZigoKSA9PiBPRm9ybUNvbXBvbmVudCkpIGZvcm06IE9Gb3JtQ29tcG9uZW50LFxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoVklSVFVBTF9TQ1JPTExfU1RSQVRFR1kpIHB1YmxpYyByZWFkb25seSBzY3JvbGxTdHJhdGVneTogT1RhYmxlVmlydHVhbFNjcm9sbFN0cmF0ZWd5XG4gICkge1xuICAgIHN1cGVyKGluamVjdG9yLCBlbFJlZiwgZm9ybSk7XG5cbiAgICB0aGlzLl9vVGFibGVPcHRpb25zID0gbmV3IERlZmF1bHRPVGFibGVPcHRpb25zKCk7XG5cbiAgICB0cnkge1xuICAgICAgdGhpcy50YWJHcm91cENvbnRhaW5lciA9IHRoaXMuaW5qZWN0b3IuZ2V0KE1hdFRhYkdyb3VwKTtcbiAgICAgIHRoaXMudGFiQ29udGFpbmVyID0gdGhpcy5pbmplY3Rvci5nZXQoTWF0VGFiKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gRG8gbm90aGluZyBkdWUgdG8gbm90IGFsd2F5cyBpcyBjb250YWluZWQgb24gdGFiLlxuICAgIH1cblxuICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlID0gdGhpcy5pbmplY3Rvci5nZXQoU25hY2tCYXJTZXJ2aWNlKTtcbiAgICB0aGlzLmdldEluamVjdGlvblRva2VuQ29uZmlnKCk7XG4gIH1cblxuICBwcml2YXRlIGdldEluamVjdGlvblRva2VuQ29uZmlnKCkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBvVGFibGVHbG9iYWxDb25maWcgPSB0aGlzLmluamVjdG9yLmdldChPX1RBQkxFX0dMT0JBTF9DT05GSUcpO1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG9UYWJsZUdsb2JhbENvbmZpZy5hdXRvQWRqdXN0KSkge1xuICAgICAgICB0aGlzLmF1dG9BZGp1c3QgPSBvVGFibGVHbG9iYWxDb25maWcuYXV0b0FkanVzdDtcbiAgICAgIH07XG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQob1RhYmxlR2xvYmFsQ29uZmlnLmF1dG9BbGlnblRpdGxlcykpIHtcbiAgICAgICAgdGhpcy5hdXRvQWxpZ25UaXRsZXMgPSBvVGFibGVHbG9iYWxDb25maWcuYXV0b0FsaWduVGl0bGVzO1xuICAgICAgfVxuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG9UYWJsZUdsb2JhbENvbmZpZy5maWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQpKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0ID0gb1RhYmxlR2xvYmFsQ29uZmlnLmZpbHRlckNvbHVtbkFjdGl2ZUJ5RGVmYXVsdDtcbiAgICAgIH1cbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChvVGFibGVHbG9iYWxDb25maWcuZWRpdGlvbk1vZGUpICYmIENvZGVzLmlzVmFsaWRFZGl0aW9uTW9kZShvVGFibGVHbG9iYWxDb25maWcuZWRpdGlvbk1vZGUpKSB7XG4gICAgICAgIHRoaXMuZWRpdGlvbk1vZGUgPSBvVGFibGVHbG9iYWxDb25maWcuZWRpdGlvbk1vZGU7XG4gICAgICB9XG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQob1RhYmxlR2xvYmFsQ29uZmlnLmRldGFpbE1vZGUgJiYgQ29kZXMuaXNWYWxpZERldGFpbE1vZGUob1RhYmxlR2xvYmFsQ29uZmlnLmRldGFpbE1vZGUpKSkge1xuICAgICAgICB0aGlzLmRldGFpbE1vZGUgPSBvVGFibGVHbG9iYWxDb25maWcuZGV0YWlsTW9kZTtcbiAgICAgIH1cblxuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG9UYWJsZUdsb2JhbENvbmZpZy5yb3dIZWlnaHQpICYmIENvZGVzLmlzVmFsaWRSb3dIZWlnaHQob1RhYmxlR2xvYmFsQ29uZmlnLnJvd0hlaWdodCkpIHtcbiAgICAgICAgdGhpcy5yb3dIZWlnaHQgPSBvVGFibGVHbG9iYWxDb25maWcucm93SGVpZ2h0O1xuICAgICAgfTtcblxuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKG9UYWJsZUdsb2JhbENvbmZpZy5zaG93Q2hhcnRzT25EZW1hbmRPcHRpb24pKSB7XG4gICAgICAgIHRoaXMuc2hvd0NoYXJ0c09uRGVtYW5kT3B0aW9uID0gb1RhYmxlR2xvYmFsQ29uZmlnLnNob3dDaGFydHNPbkRlbWFuZE9wdGlvbjtcbiAgICAgIH07XG4gICAgICBpZiAoVXRpbC5pc0RlZmluZWQob1RhYmxlR2xvYmFsQ29uZmlnLnNob3dSZXBvcnRPbkRlbWFuZE9wdGlvbikpIHtcbiAgICAgICAgdGhpcy5zaG93UmVwb3J0T25EZW1hbmRPcHRpb24gPSBvVGFibGVHbG9iYWxDb25maWcuc2hvd1JlcG9ydE9uRGVtYW5kT3B0aW9uO1xuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gRG8gbm90aGluZyBiZWNhdXNlIGlzIG9wdGlvbmFsXG4gICAgfVxuXG4gIH1cblxuICBnZXQgc3RhdGUoKTogT1RhYmxlQ29tcG9uZW50U3RhdGVDbGFzcyB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50U3RhdGVTZXJ2aWNlLnN0YXRlO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgaWYgKHRoaXMub1RhYmxlQnV0dG9ucyAmJiB0aGlzLnRhYmxlQnV0dG9ucyAmJiB0aGlzLnRhYmxlQnV0dG9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLm9UYWJsZUJ1dHRvbnMucmVnaXN0ZXJCdXR0b25zKHRoaXMudGFibGVCdXR0b25zLnRvQXJyYXkoKSk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHN1cGVyLmFmdGVyVmlld0luaXQoKTtcbiAgICB0aGlzLmluaXRUYWJsZUFmdGVyVmlld0luaXQoKTtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51KSB7XG4gICAgICB0aGlzLm1hdE1lbnUgPSB0aGlzLm9UYWJsZU1lbnUubWF0TWVudTtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5yZWdpc3Rlck9wdGlvbnModGhpcy50YWJsZU9wdGlvbnMudG9BcnJheSgpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50YWJsZVJvd0V4cGFuZGFibGUpIHtcbiAgICAgIHRoaXMuZXhwYW5kYWJsZUl0ZW0gPSBuZXcgU2VsZWN0aW9uTW9kZWw8YW55Pih0aGlzLnRhYmxlUm93RXhwYW5kYWJsZS5tdWx0aXBsZSwgW10pO1xuICAgICAgdGhpcy5jcmVhdGVFeHBhbmRhYmxlQ29sdW1uKCk7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIGlmICh0aGlzLnRhYmxlQ29sdW1uU2VsZWN0QWxsQ29udGVudENoaWxkKSB7XG4gICAgICAvL1xuICAgICAgdGhpcy5zZXRDdXN0b21EZWZpbml0aW9uSW5TZWxlY3RDb2x1bW4odGhpcy50YWJsZUNvbHVtblNlbGVjdEFsbENvbnRlbnRDaGlsZClcbiAgICB9XG4gIH1cblxuICBzZXRDdXN0b21EZWZpbml0aW9uSW5TZWxlY3RDb2x1bW4oZGVmaW5pdGlvbjogT1RhYmxlQ29sdW1uU2VsZWN0QWxsRGlyZWN0aXZlKSB7XG4gICAgaWYgKGRlZmluaXRpb24udGl0bGUpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnRpdGxlID0gZGVmaW5pdGlvbi50aXRsZTtcbiAgICB9XG4gICAgaWYgKGRlZmluaXRpb24ud2lkdGgpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLndpZHRoID0gZGVmaW5pdGlvbi53aWR0aDtcbiAgICB9XG4gICAgaWYgKGRlZmluaXRpb24ubWluV2lkdGgpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLm1pbldpZHRoID0gZGVmaW5pdGlvbi5taW5XaWR0aDtcbiAgICB9XG4gICAgaWYgKGRlZmluaXRpb24ubWF4V2lkdGgpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLm1heFdpZHRoID0gZGVmaW5pdGlvbi5tYXhXaWR0aDtcbiAgICB9XG4gICAgaWYgKGRlZmluaXRpb24ucmVzaXphYmxlKSB7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi5yZXNpemFibGUgPSBkZWZpbml0aW9uLnJlc2l6YWJsZTtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0NoZWNrZWQoKSB7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiB7IFtwcm9wTmFtZTogc3RyaW5nXTogU2ltcGxlQ2hhbmdlIH0pOiB2b2lkIHtcbiAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoY2hhbmdlcy5hdXRvQWRqdXN0KSAmJiBjaGFuZ2VzLmF1dG9BZGp1c3QuY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzLmF1dG9BZGp1c3QucHJldmlvdXNWYWx1ZSkge1xuICAgICAgdGhpcy5hdXRvQWRqdXN0ID0gY2hhbmdlcy5hdXRvQWRqdXN0LmN1cnJlbnRWYWx1ZTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVIZWFkZXJBbmRGb290ZXJTdGlja3lQb3NpdGlvbnMoKSB7XG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICBjb25zdCB6b25lID0gdGhpcy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICAgIHRoaXMudmlydHVhbFNjcm9sbFN1YnNjcmlwdGlvbiA9IHRoaXMuc2Nyb2xsU3RyYXRlZ3kuc3RpY2t5Q2hhbmdlLnBpcGUoXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmZpeGVkSGVhZGVyIHx8IHRoaXMuaGFzSW5zZXJ0YWJsZVJvdygpKVxuICAgICAgKS5zdWJzY3JpYmUoeCA9PiB7XG4gICAgICAgIHpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzdGlja3lIZWFkZXJTZWxlY3RvcikuZm9yRWFjaCgoZWw6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBlbC5zdHlsZS50b3AgPSAtIHggKyAncHgnO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHN0aWNreUZvb3RlclNlbGVjdG9yKS5mb3JFYWNoKChlbDogSFRNTEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGVsLnN0eWxlLmJvdHRvbSA9IHggKyAncHgnO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVFeHBhbmRhYmxlQ29sdW1uKCkge1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuZXhwYW5kYWJsZUNvbHVtbiA9IG5ldyBPQ29sdW1uKCk7XG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5leHBhbmRhYmxlQ29sdW1uLnZpc2libGUgPSB0aGlzLnRhYmxlUm93RXhwYW5kYWJsZSAmJiB0aGlzLnRhYmxlUm93RXhwYW5kYWJsZS5leHBhbmRhYmxlQ29sdW1uVmlzaWJsZTtcbiAgICB0aGlzLnVwZGF0ZVN0YXRlRXhwYW5kZWRDb2x1bW4oKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuXG4gICAgLy9kZXRhY2ggYWxsIHBvcnRhIGhvc3QgY3JlYXRlZFxuICAgIGlmICh0aGlzLnBvcnRhbEhvc3QpIHtcbiAgICAgIHRoaXMucG9ydGFsSG9zdC5mb3JFYWNoKHggPT4geC5kZXRhY2goKSk7XG4gICAgfVxuICAgIHRoaXMuZGVzdHJveSgpO1xuICB9XG5cbiAgZ2V0U3VmZml4Q29sdW1uSW5zZXJ0YWJsZSgpIHtcbiAgICByZXR1cm4gQ29kZXMuU1VGRklYX0NPTFVNTl9JTlNFUlRBQkxFO1xuICB9XG5cbiAgZ2V0QWN0aW9uc1Blcm1pc3Npb25zKCk6IE9QZXJtaXNzaW9uc1tdIHtcbiAgICByZXR1cm4gdGhpcy5wZXJtaXNzaW9ucyA/ICh0aGlzLnBlcm1pc3Npb25zLmFjdGlvbnMgfHwgW10pIDogW107XG4gIH1cblxuICBnZXRNZW51UGVybWlzc2lvbnMoKTogT1RhYmxlTWVudVBlcm1pc3Npb25zIHtcbiAgICBjb25zdCByZXN1bHQ6IE9UYWJsZU1lbnVQZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMgPyB0aGlzLnBlcm1pc3Npb25zLm1lbnUgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHJlc3VsdCA/IHJlc3VsdCA6IHtcbiAgICAgIHZpc2libGU6IHRydWUsXG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgaXRlbXM6IFtdXG4gICAgfTtcbiAgfVxuXG4gIGdldE9Db2x1bW5QZXJtaXNzaW9ucyhhdHRyOiBzdHJpbmcpOiBPUGVybWlzc2lvbnMge1xuICAgIGNvbnN0IGNvbHVtbnMgPSB0aGlzLnBlcm1pc3Npb25zID8gKHRoaXMucGVybWlzc2lvbnMuY29sdW1ucyB8fCBbXSkgOiBbXTtcbiAgICByZXR1cm4gY29sdW1ucy5maW5kKGNvbXAgPT4gY29tcC5hdHRyID09PSBhdHRyKSB8fCB7IGF0dHI6IGF0dHIsIGVuYWJsZWQ6IHRydWUsIHZpc2libGU6IHRydWUgfTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRBY3Rpb25QZXJtaXNzaW9ucyhhdHRyOiBzdHJpbmcpOiBPUGVybWlzc2lvbnMge1xuICAgIGNvbnN0IGFjdGlvbnNQZXJtID0gdGhpcy5wZXJtaXNzaW9ucyA/ICh0aGlzLnBlcm1pc3Npb25zLmFjdGlvbnMgfHwgW10pIDogW107XG4gICAgY29uc3QgcGVybWlzc2lvbnM6IE9QZXJtaXNzaW9ucyA9IGFjdGlvbnNQZXJtLmZpbmQocCA9PiBwLmF0dHIgPT09IGF0dHIpO1xuICAgIHJldHVybiBwZXJtaXNzaW9ucyB8fCB7XG4gICAgICBhdHRyOiBhdHRyLFxuICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgIGVuYWJsZWQ6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgcHJvdGVjdGVkIGNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oYXR0cjogc3RyaW5nKSB7XG4gICAgY29uc3QgYWN0aW9uc1Blcm0gPSB0aGlzLnBlcm1pc3Npb25zID8gKHRoaXMucGVybWlzc2lvbnMuYWN0aW9ucyB8fCBbXSkgOiBbXTtcbiAgICBjb25zdCBwZXJtaXNzaW9uczogT1Blcm1pc3Npb25zID0gYWN0aW9uc1Blcm0uZmluZChwID0+IHAuYXR0ciA9PT0gYXR0cik7XG4gICAgY29uc3QgZW5hYmxlZFBlcm1pc2lvbiA9IFBlcm1pc3Npb25zVXRpbHMuY2hlY2tFbmFibGVkUGVybWlzc2lvbihwZXJtaXNzaW9ucyk7XG4gICAgaWYgKCFlbmFibGVkUGVybWlzaW9uKSB7XG4gICAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuKCdNRVNTQUdFUy5PUEVSQVRJT05fTk9UX0FMTE9XRURfUEVSTUlTU0lPTicpO1xuICAgIH1cbiAgICByZXR1cm4gZW5hYmxlZFBlcm1pc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2Qgd2hhdCBpbml0aWFsaXplIHZhcnMgYW5kIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGluaXRpYWxpemUoKTogYW55IHtcbiAgICBzdXBlci5pbml0aWFsaXplKCk7XG5cbiAgICB0aGlzLl9vVGFibGVPcHRpb25zID0gbmV3IERlZmF1bHRPVGFibGVPcHRpb25zKCk7XG4gICAgaWYgKHRoaXMudGFiR3JvdXBDb250YWluZXIgJiYgdGhpcy50YWJDb250YWluZXIpIHtcbiAgICAgIHRoaXMucmVnaXN0ZXJUYWJMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHRoaXMucmVnaXN0ZXJDbGlja0xpc3RlbmVyKCk7XG4gICAgdGhpcy5yZWdpc3RlckRibENsaWNrTGlzdGVuZXIoKTtcbiAgICAvLyBJbml0aWFsaXplIHBhcmFtcyBvZiB0aGUgdGFibGVcbiAgICB0aGlzLmluaXRpYWxpemVQYXJhbXMoKTtcblxuICAgIHRoaXMuaW5pdGlhbGl6ZURhbygpO1xuXG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnNTZXJ2aWNlLmdldFRhYmxlUGVybWlzc2lvbnModGhpcy5vYXR0ciwgdGhpcy5hY3RSb3V0ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVnaXN0ZXJDbGlja0xpc3RlbmVyKCkge1xuICAgIGlmICh0aGlzLmNsaWNrU3ViamVjdFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5jbGlja1N1YmplY3RTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgdGhpcy5jbGlja1N1YmplY3RTdWJzY3JpcHRpb24gPSB0aGlzLmNsaWNrU3ViamVjdFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuY2xpY2tEZWxheSkpIC8vIEVzcGVyYSBlbCB0aWVtcG8gY29uZmlndXJhZG8gYW50ZXMgZGUgZWplY3V0YXJcbiAgICAgIC5zdWJzY3JpYmUoKHsgcm93LCBjb2x1bW4sIGNlbGxSZWYsIHJvd0luZGV4LCBldmVudCB9KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9lbmFibGVkICYmICF0aGlzLnJlYWRPbmx5ICYmIGNvbHVtbi5lZGl0b3JcbiAgICAgICAgICAmJiAodGhpcy5kZXRhaWxNb2RlICE9PSBDb2Rlcy5ERVRBSUxfTU9ERV9DTElDSylcbiAgICAgICAgICAmJiAodGhpcy5lZGl0aW9uTW9kZSA9PT0gQ29kZXMuRURJVElPTl9NT0RFX0NMSUNLKSkge1xuICAgICAgICAgIHRoaXMuYWN0aXZhdGVDb2x1bW5FZGl0aW9uKGNvbHVtbiwgcm93LCBjZWxsUmVmKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmRvSGFuZGxlQ2xpY2socm93LCBjb2x1bW4uYXR0ciwgcm93SW5kZXgsIGV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVnaXN0ZXJEYmxDbGlja0xpc3RlbmVyKCkge1xuICAgIGlmICh0aGlzLmRiQ2xpY2tTdWJqZWN0U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmRiQ2xpY2tTdWJqZWN0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5kYkNsaWNrU3ViamVjdFN1YnNjcmlwdGlvbiA9IHRoaXMuZGJsY2xpY2tTdWJqZWN0XG4gICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5jbGlja0RlbGF5KSkgLy8gRXNwZXJhIGVsIHRpZW1wbyBjb25maWd1cmFkbyBhbnRlcyBkZSBlamVjdXRhclxuICAgICAgLnN1YnNjcmliZSgoeyByb3csIGNvbHVtbiwgY2VsbFJlZiwgcm93SW5kZXgsIGV2ZW50IH0pID0+IHtcbiAgICAgICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgICAgICBpZiAodGhpcy5zaG93Tm90aWZpY2F0aW9uT2ZSZWFkT25seSkge1xuICAgICAgICAgICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbignTUVTU0FHRVMuT1BFUkFUSU9OX05PVF9BTExPV0VEX1JFQURPTkxZJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5vZW5hYmxlZCAmJiBjb2x1bW4uZWRpdG9yXG4gICAgICAgICAgJiYgKCFDb2Rlcy5pc0RvdWJsZUNsaWNrTW9kZSh0aGlzLmRldGFpbE1vZGUpKVxuICAgICAgICAgICYmIChDb2Rlcy5pc0RvdWJsZUNsaWNrTW9kZSh0aGlzLmVkaXRpb25Nb2RlKSkpIHtcbiAgICAgICAgICB0aGlzLmFjdGl2YXRlQ29sdW1uRWRpdGlvbihjb2x1bW4sIHJvdywgY2VsbFJlZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vbkRvdWJsZUNsaWNrLmVtaXQoeyByb3c6IHJvdywgcm93SW5kZXg6IHJvd0luZGV4LCBtb3VzZUV2ZW50OiBldmVudCwgY29sdW1uTmFtZTogY29sdW1uLmF0dHIsIGNlbGw6IHJvd1tjb2x1bW4uYXR0cl0gfSk7XG4gICAgICAgICAgaWYgKHRoaXMub2VuYWJsZWQgJiYgQ29kZXMuaXNEb3VibGVDbGlja01vZGUodGhpcy5kZXRhaWxNb2RlKSkge1xuICAgICAgICAgICAgdGhpcy5zYXZlRGF0YU5hdmlnYXRpb25JbkxvY2FsU3RvcmFnZSgpO1xuICAgICAgICAgICAgdGhpcy52aWV3RGV0YWlsKHJvdyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgcHJvdGVjdGVkIGluaXRpYWxpemVEYW8oKSB7XG4gICAgLy8gQ29uZmlndXJlIGRhbyBtZXRob2RzXG4gICAgY29uc3QgcXVlcnlNZXRob2ROYW1lID0gdGhpcy5wYWdlYWJsZSA/IHRoaXMucGFnaW5hdGVkUXVlcnlNZXRob2QgOiB0aGlzLnF1ZXJ5TWV0aG9kO1xuICAgIGNvbnN0IG1ldGhvZHMgPSB7XG4gICAgICBxdWVyeTogcXVlcnlNZXRob2ROYW1lLFxuICAgICAgdXBkYXRlOiB0aGlzLnVwZGF0ZU1ldGhvZCxcbiAgICAgIGRlbGV0ZTogdGhpcy5kZWxldGVNZXRob2QsXG4gICAgICBpbnNlcnQ6IHRoaXMuaW5zZXJ0TWV0aG9kXG4gICAgfTtcblxuICAgIGlmICh0aGlzLnN0YXRpY0RhdGEpIHtcbiAgICAgIHRoaXMucXVlcnlPbkJpbmQgPSBmYWxzZTtcbiAgICAgIHRoaXMucXVlcnlPbkluaXQgPSBmYWxzZTtcbiAgICAgIHRoaXMuZGFvVGFibGUgPSBuZXcgT1RhYmxlRGFvKHVuZGVmaW5lZCwgdGhpcy5lbnRpdHksIG1ldGhvZHMpO1xuICAgICAgdGhpcy5zZXREYXRhQXJyYXkodGhpcy5zdGF0aWNEYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb25maWd1cmVTZXJ2aWNlKCk7XG4gICAgICB0aGlzLmRhb1RhYmxlID0gbmV3IE9UYWJsZURhbyh0aGlzLmRhdGFTZXJ2aWNlLCB0aGlzLmVudGl0eSwgbWV0aG9kcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHJlaW5pdGlhbGl6ZSB0YWJsZSBhZGRpbmcgb3B0aW9uc1xuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKi9cbiAgcmVpbml0aWFsaXplKG9wdGlvbnM6IE9UYWJsZUluaXRpYWxpemF0aW9uT3B0aW9ucyk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBjb25zdCBjbG9uZWRPcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyk7XG4gICAgICBpZiAoY2xvbmVkT3B0cy5oYXNPd25Qcm9wZXJ0eSgnZW50aXR5JykpIHtcbiAgICAgICAgdGhpcy5lbnRpdHkgPSBjbG9uZWRPcHRzLmVudGl0eTtcbiAgICAgIH1cbiAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KCdzZXJ2aWNlJykpIHtcbiAgICAgICAgdGhpcy5zZXJ2aWNlID0gY2xvbmVkT3B0cy5zZXJ2aWNlO1xuICAgICAgfVxuICAgICAgaWYgKGNsb25lZE9wdHMuaGFzT3duUHJvcGVydHkoJ2NvbHVtbnMnKSkge1xuICAgICAgICB0aGlzLmNvbHVtbnMgPSBjbG9uZWRPcHRzLmNvbHVtbnM7XG4gICAgICB9XG4gICAgICBpZiAoY2xvbmVkT3B0cy5oYXNPd25Qcm9wZXJ0eSgndmlzaWJsZUNvbHVtbnMnKSkge1xuICAgICAgICB0aGlzLnZpc2libGVDb2x1bW5zID0gY2xvbmVkT3B0cy52aXNpYmxlQ29sdW1ucztcbiAgICAgIH1cbiAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KCdkZWZhdWx0VmlzaWJsZUNvbHVtbnMnKSkge1xuICAgICAgICB0aGlzLmRlZmF1bHRWaXNpYmxlQ29sdW1ucyA9IGNsb25lZE9wdHMuZGVmYXVsdFZpc2libGVDb2x1bW5zO1xuICAgICAgfVxuICAgICAgaWYgKGNsb25lZE9wdHMuaGFzT3duUHJvcGVydHkoJ2tleXMnKSkge1xuICAgICAgICB0aGlzLmtleXMgPSBjbG9uZWRPcHRzLmtleXM7XG4gICAgICB9XG4gICAgICBpZiAoY2xvbmVkT3B0cy5oYXNPd25Qcm9wZXJ0eSgnc29ydENvbHVtbnMnKSkge1xuICAgICAgICB0aGlzLnNvcnRDb2x1bW5zID0gY2xvbmVkT3B0cy5zb3J0Q29sdW1ucztcbiAgICAgIH1cbiAgICAgIGlmIChjbG9uZWRPcHRzLmhhc093blByb3BlcnR5KCdwYXJlbnRLZXlzJykpIHtcbiAgICAgICAgdGhpcy5wYXJlbnRLZXlzID0gY2xvbmVkT3B0cy5wYXJlbnRLZXlzO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2xvbmVkT3B0cy5oYXNPd25Qcm9wZXJ0eSgnZmlsdGVyQ29sdW1ucycpKSB7XG4gICAgICAgIGlmICghdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50KSB7XG4gICAgICAgICAgdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50ID0gbmV3IE9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQodGhpcy5pbmplY3RvciwgdGhpcyk7XG4gICAgICAgICAgdGhpcy5vVGFibGVNZW51Lm9uVmlzaWJsZUZpbHRlck9wdGlvbkNoYW5nZS5uZXh0KHRoaXMuZmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0KTtcbiAgICAgICAgICB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQuY29sdW1ucyA9IGNsb25lZE9wdHMuZmlsdGVyQ29sdW1ucztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQuY29sdW1ucyA9IHRoaXMuc2VhcmNoZWFibGVDb2x1bW5zLmpvaW4oXCI7XCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5kZXN0cm95KCk7XG4gICAgdGhpcy5pbml0aWFsaXplKCk7XG4gICAgdGhpcy5zdGF0ZS5yZXNldCh0aGlzLnBhZ2VhYmxlKTtcbiAgICB0aGlzLmluaXRUYWJsZUFmdGVyVmlld0luaXQoKTtcbiAgICB0aGlzLm9uUmVpbml0aWFsaXplLmVtaXQobnVsbCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5pdFRhYmxlQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLnBhcnNlVmlzaWJsZUNvbHVtbnMoKTtcbiAgICB0aGlzLnBhcnNlU2VhcmNoZWFibGVDb2x1bW5zKCk7XG4gICAgdGhpcy5zZXREYXRhc291cmNlKCk7XG4gICAgdGhpcy5wYXJzZUdyb3VwZWRDb2x1bW5zKCk7XG4gICAgdGhpcy5wYXJzZUdyb3VwZWRDb2x1bW5UeXBlcygpO1xuICAgIHRoaXMucGFyc2VTb3J0Q29sdW1ucygpO1xuICAgIHRoaXMuc2V0RmlsdGVyc0NvbmZpZ3VyYXRpb24oKTtcbiAgICB0aGlzLmFkZERlZmF1bHRSb3dCdXR0b25zKCk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYmxlQ29sdW1uc0dyb3VwaW5nQ29tcG9uZW50KSkge1xuICAgICAgdGhpcy5zZXRHcm91cENvbHVtbnModGhpcy5vVGFibGVDb2x1bW5zR3JvdXBpbmdDb21wb25lbnQuY29sdW1uc0FycmF5KTtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlcnlPbkluaXQpIHtcbiAgICAgIHRoaXMucXVlcnlEYXRhKCk7XG4gICAgfVxuICB9XG4gIHBhcnNlU2VhcmNoZWFibGVDb2x1bW5zKCkge1xuICAgIHRoaXMuc2VhcmNoZWFibGVDb2x1bW5zID0gdGhpcy52aXNpYmxlQ29sQXJyYXkuZmlsdGVyKGNvbCA9PiB7XG4gICAgICBjb25zdCBvQ29sID0gdGhpcy5nZXRPQ29sdW1uKGNvbCk7XG4gICAgICByZXR1cm4gb0NvbCAmJiBvQ29sLnNlYXJjaGFibGU7XG4gICAgfSlcblxuICB9XG4gIGRlc3Ryb3koKSB7XG4gICAgc3VwZXIuZGVzdHJveSgpO1xuICAgIGlmICh0aGlzLnRhYkdyb3VwQ2hhbmdlU3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnRhYkdyb3VwQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGlvbkNoYW5nZVN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc29ydFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zb3J0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLm9uUmVuZGVyZWREYXRhQ2hhbmdlKSB7XG4gICAgICB0aGlzLm9uUmVuZGVyZWREYXRhQ2hhbmdlLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbnRleHRNZW51U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmNvbnRleHRNZW51U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2hlY2tWaWV3cG9ydFNpemVTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY2hlY2tWaWV3cG9ydFNpemVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zY3JvbGxTdHJhdGVneSkge1xuICAgICAgdGhpcy5zY3JvbGxTdHJhdGVneS5kZXN0cm95KCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2xpY2tTdWJqZWN0U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmNsaWNrU3ViamVjdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRiQ2xpY2tTdWJqZWN0U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmRiQ2xpY2tTdWJqZWN0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgT2JqZWN0LmtleXModGhpcy5hc3luY0xvYWRTdWJzY3JpcHRpb25zKS5mb3JFYWNoKGlkeCA9PiB7XG4gICAgICBpZiAodGhpcy5hc3luY0xvYWRTdWJzY3JpcHRpb25zW2lkeF0pIHtcbiAgICAgICAgdGhpcy5hc3luY0xvYWRTdWJzY3JpcHRpb25zW2lkeF0udW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRob2QgdXBkYXRlIHN0b3JlIGxvY2Fsc3RvcmFnZSwgY2FsbCBvZiB0aGUgSUxvY2FsU3RvcmFnZVxuICAgKi9cbiAgZ2V0RGF0YVRvU3RvcmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50U3RhdGVTZXJ2aWNlLmdldERhdGFUb1N0b3JlKCk7XG4gIH1cblxuICByZWdpc3RlclF1aWNrRmlsdGVyKGFyZzogYW55KSB7XG4gICAgY29uc3QgcXVpY2tGaWx0ZXIgPSAoYXJnIGFzIE9UYWJsZVF1aWNrZmlsdGVyKTtcbiAgICAvLyBmb3JjaW5nIHF1aWNrRmlsdGVyQ29tcG9uZW50IHRvIGJlIHVuZGVmaW5lZCwgdGFibGUgdXNlcyBvVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudFxuICAgIHRoaXMucXVpY2tGaWx0ZXJDb21wb25lbnQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudCA9IHF1aWNrRmlsdGVyO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50KSkge1xuICAgICAgdGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudC5zZXRWYWx1ZSh0aGlzLnN0YXRlLnF1aWNrRmlsdGVyVmFsdWUsIGZhbHNlKTtcbiAgICAgIHRoaXMucXVpY2tGaWx0ZXJTdWJzY3JpcHRpb24gPSB0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50Lm9uQ2hhbmdlLnN1YnNjcmliZSh2YWwgPT4ge1xuICAgICAgICB0aGlzLm9uU2VhcmNoLmVtaXQodmFsKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdGVyUGFnaW5hdGlvbih2YWx1ZTogT1RhYmxlUGFnaW5hdG9yKSB7XG4gICAgdGhpcy5wYWdpbmF0aW9uQ29udHJvbHMgPSB0cnVlO1xuICAgIHRoaXMucGFnaW5hdG9yID0gdmFsdWU7XG4gIH1cblxuICByZWdpc3RlckNvbnRleHRNZW51KHZhbHVlOiBPQ29udGV4dE1lbnVDb21wb25lbnQpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlQ29udGV4dE1lbnUgPSB2YWx1ZTtcbiAgICB0aGlzLmNvbnRleHRNZW51U3Vic2NyaXB0aW9uID0gdGhpcy50YWJsZUNvbnRleHRNZW51Lm9uU2hvdy5zdWJzY3JpYmUoKHBhcmFtczogSU9Db250ZXh0TWVudUNvbnRleHQpID0+IHtcbiAgICAgIHBhcmFtcy5jbGFzcyA9ICdvLXRhYmxlLWNvbnRleHQtbWVudSAnICsgdGhpcy5yb3dIZWlnaHQ7XG4gICAgICBpZiAocGFyYW1zLmRhdGEgJiYgIXRoaXMuaXNSb3dTZWxlY3RlZChwYXJhbXMuZGF0YS5yb3dWYWx1ZSkpIHtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkUm93KHBhcmFtcy5kYXRhLnJvd1ZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJlZ2lzdGVyRGVmYXVsdENvbHVtbihjb2x1bW46IHN0cmluZykge1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLmdldE9Db2x1bW4oY29sdW1uKSkpIHtcbiAgICAgIC8vIGEgZGVmYXVsdCBjb2x1bW4gZGVmaW5pdGlvbiB0cnlpbmcgdG8gcmVwbGFjZSBhbiBhbHJlYWR5IGV4aXN0aW5nIGRlZmluaXRpb25cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29sRGVmOiBPQ29sdW1uID0gdGhpcy5jcmVhdGVPQ29sdW1uKGNvbHVtbiwgdGhpcyk7XG4gICAgdGhpcy5wdXNoT0NvbHVtbkRlZmluaXRpb24oY29sRGVmKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSBhbGwgY29sdW1ucyBhbmQgcHJvcGVydGllcyBpbiB2YXIgY29sdW1uc0FycmF5XG4gICAqIEBwYXJhbSBjb2x1bW5cbiAgICovXG4gIHJlZ2lzdGVyQ29sdW1uKGNvbHVtbjogT1RhYmxlQ29sdW1uQ29tcG9uZW50IHwgT1RhYmxlQ29sdW1uQ2FsY3VsYXRlZENvbXBvbmVudCB8IGFueSkge1xuICAgIGNvbnN0IGNvbHVtbkF0dHIgPSAodHlwZW9mIGNvbHVtbiA9PT0gJ3N0cmluZycpID8gY29sdW1uIDogY29sdW1uLmF0dHI7XG4gICAgY29uc3QgY29sdW1uUGVybWlzc2lvbnM6IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0T0NvbHVtblBlcm1pc3Npb25zKGNvbHVtbkF0dHIpO1xuICAgIGlmICghY29sdW1uUGVybWlzc2lvbnMudmlzaWJsZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29sdW1uID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5yZWdpc3RlckRlZmF1bHRDb2x1bW4oY29sdW1uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb2x1bW5EZWYgPSB0aGlzLmdldE9Db2x1bW4oY29sdW1uLmF0dHIpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChjb2x1bW5EZWYpICYmIFV0aWwuaXNEZWZpbmVkKGNvbHVtbkRlZi5kZWZpbml0aW9uKSkge1xuICAgICAgLy8gYSBvLXRhYmxlLWNvbHVtbiBkZWZpbml0aW9uIHRyeWluZyB0byByZXBsYWNlIGFuIGFscmVhZHkgZXhpc3Rpbmcgby10YWJsZS1jb2x1bW4gZGVmaW5pdGlvblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbERlZjogT0NvbHVtbiA9IHRoaXMuY3JlYXRlT0NvbHVtbihjb2x1bW4uYXR0ciwgdGhpcywgY29sdW1uKTtcbiAgICBsZXQgY29sdW1uV2lkdGggPSB0aGlzLmdldENvbHVtbldpZHRoRnJvbVN0YXRlKGNvbERlZik7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbHVtbldpZHRoKSkge1xuICAgICAgY29sRGVmLndpZHRoID0gY29sdW1uV2lkdGg7XG4gICAgfVxuICAgIGlmIChjb2x1bW4gJiYgKGNvbHVtbi5hc3luY0xvYWQgfHwgY29sdW1uLnR5cGUgPT09ICdhY3Rpb24nKSkge1xuICAgICAgdGhpcy5hdm9pZFF1ZXJ5Q29sdW1ucy5wdXNoKGNvbHVtbi5hdHRyKTtcbiAgICAgIGlmIChjb2x1bW4uYXN5bmNMb2FkKSB7XG4gICAgICAgIHRoaXMuYXN5bmNMb2FkQ29sdW1ucy5wdXNoKGNvbHVtbi5hdHRyKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wdXNoT0NvbHVtbkRlZmluaXRpb24oY29sRGVmKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwdXNoT0NvbHVtbkRlZmluaXRpb24oY29sRGVmOiBPQ29sdW1uKSB7XG4gICAgY29sRGVmLnZpc2libGUgPSAodGhpcy5fdmlzaWJsZUNvbEFycmF5LmluZGV4T2YoY29sRGVmLmF0dHIpICE9PSAtMSk7XG4gICAgLy8gRmluZCBjb2x1bW4gZGVmaW5pdGlvbiBieSBuYW1lXG4gICAgY29uc3QgYWxyZWFkeUV4aXN0aW5nID0gdGhpcy5nZXRPQ29sdW1uKGNvbERlZi5hdHRyKTtcbiAgICBpZiAoYWxyZWFkeUV4aXN0aW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IHJlcGxhY2luZ0luZGV4ID0gdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLmluZGV4T2YoYWxyZWFkeUV4aXN0aW5nKTtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1uc1tyZXBsYWNpbmdJbmRleF0gPSBjb2xEZWY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5wdXNoKGNvbERlZik7XG4gICAgfVxuICAgIHRoaXMuZW5zdXJlQ29sdW1uc09yZGVyKCk7XG4gICAgdGhpcy5yZWZyZXNoRWRpdGlvbk1vZGVXYXJuKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVmcmVzaEVkaXRpb25Nb2RlV2FybigpIHtcbiAgICBpZiAodGhpcy5lZGl0aW9uTW9kZSAhPT0gQ29kZXMuRURJVElPTl9NT0RFX05PTkUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZWRpdGFibGVDb2x1bW5zID0gdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbHRlcihjb2wgPT4ge1xuICAgICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKGNvbC5lZGl0b3IpO1xuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKGVkaXRhYmxlQ29sdW1ucy5sZW5ndGggPiAwICYmICF0aGlzLmhhc0luc2VydGFibGVSb3coKSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ1VzaW5nIGEgY29sdW1uIHdpdGggYSBlZGl0b3IgYnV0IHRoZXJlIGlzIG5vIGVkaXRpb24tbW9kZSBkZWZpbmVkJyk7XG4gICAgICB9XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIHJlZ2lzdGVyQ29sdW1uQWdncmVnYXRlKGNvbHVtbjogT0NvbHVtbkFnZ3JlZ2F0ZSkge1xuICAgIHRoaXMuc2hvd1RvdGFsc1N1YmplY3QubmV4dCh0cnVlKTtcbiAgICBjb25zdCBhbHJlYWR5RXhpc3RpbmcgPSB0aGlzLmdldE9Db2x1bW4oY29sdW1uLmF0dHIpO1xuICAgIGlmIChhbHJlYWR5RXhpc3RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgcmVwbGFjaW5nSW5kZXggPSB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuaW5kZXhPZihhbHJlYWR5RXhpc3RpbmcpO1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zW3JlcGxhY2luZ0luZGV4XS5hZ2dyZWdhdGUgPSBjb2x1bW47XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJUYWJsZUhlYWRlcnModGFibGVIZWFkZXI6IE9UYWJsZUhlYWRlckNvbXBvbmVudCkge1xuICAgIGlmICh0aGlzLnRhYmxlSGVhZGVycy5maW5kSW5kZXgoaGVhZGVyID0+IGhlYWRlci5jb2x1bW4uYXR0ciA9PT0gdGFibGVIZWFkZXIuY29sdW1uLmF0dHIpID09PSAtMSkge1xuICAgICAgdGhpcy50YWJsZUhlYWRlcnMucHVzaCh0YWJsZUhlYWRlcik7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VWaXNpYmxlQ29sdW1ucyhkZWZhdWx0Q29uZmlndXJhdGlvbjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuY29sdW1uc0Rpc3BsYXkpIHtcbiAgICAgIC8vIGZpbHRlcmluZyBjb2x1bW5zIHRoYXQgbWlnaHQgYmUgaW4gc3RhdGUgc3RvcmFnZSBidXQgbm90IGluIHRoZSBhY3R1YWwgdGFibGUgZGVmaW5pdGlvblxuICAgICAgbGV0IHN0YXRlQ29sczogT0NvbHVtbkRpc3BsYXlbXSA9IFtdO1xuICAgICAgdGhpcy5zdGF0ZS5jb2x1bW5zRGlzcGxheS5mb3JFYWNoKChvQ29sLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBpc1Zpc2libGVDb2xJbkNvbHVtbnMgPSB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuZmluZChjb2wgPT4gY29sLmF0dHIgPT09IG9Db2wuYXR0cikgIT09IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAoaXNWaXNpYmxlQ29sSW5Db2x1bW5zKSB7XG4gICAgICAgICAgc3RhdGVDb2xzLnB1c2gob0NvbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gbG9hZCB0aGUgY29sdW1uICcgKyBvQ29sLmF0dHIgKyAnIGZyb20gdGhlIGxvY2Fsc3RvcmFnZScpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChkZWZhdWx0Q29uZmlndXJhdGlvbikge1xuICAgICAgICBzdGF0ZUNvbHMgPSB0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLmNvbHVtbnNEaXNwbGF5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGVDb2xzID0gdGhpcy5jaGVja0NoYW5nZXNWaXNpYmxlQ29sdW1tbnNJbkluaXRpYWxDb25maWd1cmF0aW9uKHN0YXRlQ29scyk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5zb3J0KChhOiBPQ29sdW1uLCBiOiBPQ29sdW1uKSA9PiB7XG4gICAgICAgIGNvbnN0IGluZGV4QSA9IHN0YXRlQ29scy5maW5kSW5kZXgoY29sID0+IGNvbC5hdHRyID09PSBhLmF0dHIpO1xuICAgICAgICBjb25zdCBpbmRleEIgPSBzdGF0ZUNvbHMuZmluZEluZGV4KGNvbCA9PiBjb2wuYXR0ciA9PT0gYi5hdHRyKTtcbiAgICAgICAgcmV0dXJuIGluZGV4QSAtIGluZGV4QjtcbiAgICAgIH0pO1xuICAgICAgdGhpcy52aXNpYmxlQ29sQXJyYXkgPSBzdGF0ZUNvbHMuZmlsdGVyKGl0ZW0gPT4gaXRlbS52aXNpYmxlKS5tYXAoaXRlbSA9PiBpdGVtLmF0dHIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZpc2libGVDb2xBcnJheSA9IFV0aWwucGFyc2VBcnJheSh0aGlzLmRlZmF1bHRWaXNpYmxlQ29sdW1ucyA/IHRoaXMuZGVmYXVsdFZpc2libGVDb2x1bW5zIDogdGhpcy52aXNpYmxlQ29sdW1ucywgdHJ1ZSk7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuc29ydCgoYTogT0NvbHVtbiwgYjogT0NvbHVtbikgPT4gdGhpcy52aXNpYmxlQ29sQXJyYXkuaW5kZXhPZihhLmF0dHIpIC0gdGhpcy52aXNpYmxlQ29sQXJyYXkuaW5kZXhPZihiLmF0dHIpKTtcbiAgICB9XG4gIH1cblxuICBjaGVja0NoYW5nZXNWaXNpYmxlQ29sdW1tbnNJbkluaXRpYWxDb25maWd1cmF0aW9uKHN0YXRlQ29sczogT0NvbHVtbkRpc3BsYXlbXSk6IE9Db2x1bW5EaXNwbGF5W10ge1xuICAgIGlmICh0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLmNvbHVtbnNEaXNwbGF5KSB7XG4gICAgICBjb25zdCBvcmlnaW5hbFZpc2libGVDb2xBcnJheSA9XG4gICAgICAgIHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uY29sdW1uc0Rpc3BsYXkuZmlsdGVyKHggPT4geC52aXNpYmxlKS5tYXAoeCA9PiB4LmF0dHIpO1xuXG4gICAgICBjb25zdCB2aXNpYmxlQ29sQXJyYXkgPSBVdGlsLnBhcnNlQXJyYXkodGhpcy52aXNpYmxlQ29sdW1ucywgdHJ1ZSk7XG5cbiAgICAgIC8vIEZpbmQgdmFsdWVzIGluIHZpc2libGUtY29sdW1ucyB0aGF0IHRoZXkgYXJlbnQgaW4gb3JpZ2luYWwtdmlzaWJsZS1jb2x1bW5zIGluIGxvY2Fsc3RvcmFnZVxuICAgICAgLy8gaW4gdGhpcyBjYXNlIHlvdSBoYXZlIHRvIGFkZCB0aGlzIGNvbHVtbiB0byB0aGlzLnZpc2libGVDb2xBcnJheVxuICAgICAgY29uc3QgY29sVG9BZGRJblZpc2libGVDb2wgPSBVdGlsLmRpZmZlcmVuY2VBcnJheXModmlzaWJsZUNvbEFycmF5LCBvcmlnaW5hbFZpc2libGVDb2xBcnJheSk7XG4gICAgICBjb2xUb0FkZEluVmlzaWJsZUNvbC5mb3JFYWNoKChjb2xBZGQpID0+IHtcbiAgICAgICAgbGV0IGluZGV4Q29sID0gc3RhdGVDb2xzLmZpbmRJbmRleChjb2wgPT4gY29sLmF0dHIgPT09IGNvbEFkZCk7XG4gICAgICAgIGlmIChpbmRleENvbCA+IC0xKSB7XG4gICAgICAgICAgc3RhdGVDb2xzW2luZGV4Q29sXS52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZUNvbHMuc29ydCgoYTogT0NvbHVtbiwgYjogT0NvbHVtbikgPT4gdmlzaWJsZUNvbEFycmF5LmluZGV4T2YoYS5hdHRyKSAtIHZpc2libGVDb2xBcnJheS5pbmRleE9mKGIuYXR0cikpO1xuICAgICAgfSk7XG5cblxuICAgICAgLy8gRmluZCB2YWx1ZXMgaW4gb3JpZ2luYWwtdmlzaWJsZS1jb2x1bW5zIGluIGxvY2Fsc3RvcmFnZSB0aGF0IHRoZXkgYXJlbnQgaW4gdGhpcy52aXNpYmxlQ29sQXJyYXlcbiAgICAgIC8vIGluIHRoaXMgY2FzZSB5b3UgaGF2ZSB0byBkZWxldGUgdGhpcyBjb2x1bW4gdG8gdGhpcy52aXNpYmxlQ29sQXJyYXlcbiAgICAgIGNvbnN0IGNvbFRvRGVsZXRlSW5WaXNpYmxlQ29sID0gVXRpbC5kaWZmZXJlbmNlQXJyYXlzKG9yaWdpbmFsVmlzaWJsZUNvbEFycmF5LCB2aXNpYmxlQ29sQXJyYXkpO1xuICAgICAgaWYgKGNvbFRvRGVsZXRlSW5WaXNpYmxlQ29sLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc3RhdGVDb2xzID0gc3RhdGVDb2xzLmZpbHRlcihjb2wgPT4gY29sVG9EZWxldGVJblZpc2libGVDb2wuaW5kZXhPZihjb2wuYXR0cikgPT09IC0xKTtcbiAgICAgIH1cblxuICAgICAgLy9JZiB0aGUgY29sdW1ucyBpbiBvcmlnaW5hbFZpc2libGVDb2xBcnJheSBoYXMgY2hhbmdlZCB0aGUgc29ydGluZ1xuICAgICAgY29uc3QgY2hhbmdlU29ydFZpc2libGVDb2x1bW5zID0gSlNPTi5zdHJpbmdpZnkodmlzaWJsZUNvbEFycmF5KSAhPT0gSlNPTi5zdHJpbmdpZnkob3JpZ2luYWxWaXNpYmxlQ29sQXJyYXkpO1xuICAgICAgaWYgKGNoYW5nZVNvcnRWaXNpYmxlQ29sdW1ucyAmJiB2aXNpYmxlQ29sQXJyYXkubGVuZ3RoID09PSBvcmlnaW5hbFZpc2libGVDb2xBcnJheS5sZW5ndGgpIHtcbiAgICAgICAgdmlzaWJsZUNvbEFycmF5LmZvckVhY2goKGNvbCwgdG9JbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZyb21JbmRleFRvQ2hhbmdlID0gc3RhdGVDb2xzLmZpbmRJbmRleChzdGF0ZUNvbCA9PiBzdGF0ZUNvbC5hdHRyID09PSBjb2wpO1xuICAgICAgICAgIG1vdmVJdGVtSW5BcnJheShzdGF0ZUNvbHMsIGZyb21JbmRleFRvQ2hhbmdlLCB0b0luZGV4KTtcbiAgICAgICAgfSk7XG5cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlQ29scztcbiAgfVxuXG4gIHBhcnNlU29ydENvbHVtbnMoKSB7XG4gICAgY29uc3Qgc29ydENvbHVtbnNQYXJhbSA9IHRoaXMuc3RhdGUuc29ydENvbHVtbnMgfHwgdGhpcy5zb3J0Q29sdW1ucztcbiAgICB0aGlzLnNvcnRDb2xBcnJheSA9IFNlcnZpY2VVdGlscy5wYXJzZVNvcnRDb2x1bW5zKHNvcnRDb2x1bW5zUGFyYW0pO1xuXG4gICAgLy8gY2hlY2tpbmcgdGhlIG9yaWdpbmFsIHNvcnQgY29sdW1ucyB3aXRoIHRoZSBzb3J0IGNvbHVtbnMgaW4gaW5pdGlhbCBjb25maWd1cmF0aW9uIGluIGxvY2FsIHN0b3JhZ2VcbiAgICBpZiAodGhpcy5zdGF0ZS5zb3J0Q29sdW1ucyAmJiB0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLnNvcnRDb2x1bW5zKSB7XG5cbiAgICAgIGNvbnN0IGluaXRpYWxDb25maWdTb3J0Q29sdW1uc0FycmF5ID0gU2VydmljZVV0aWxzLnBhcnNlU29ydENvbHVtbnModGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5zb3J0Q29sdW1ucyk7XG4gICAgICBjb25zdCBvcmlnaW5hbFNvcnRDb2x1bW5zQXJyYXkgPSBTZXJ2aWNlVXRpbHMucGFyc2VTb3J0Q29sdW1ucyh0aGlzLnNvcnRDb2x1bW5zKTtcbiAgICAgIC8vIEZpbmQgdmFsdWVzIGluIHZpc2libGUtY29sdW1ucyB0aGF0IHRoZXkgYXJlbnQgaW4gb3JpZ2luYWwtdmlzaWJsZS1jb2x1bW5zIGluIGxvY2Fsc3RvcmFnZVxuICAgICAgLy8gaW4gdGhpcyBjYXNlIHlvdSBoYXZlIHRvIGFkZCB0aGlzIGNvbHVtbiB0byB0aGlzLnZpc2libGVDb2xBcnJheVxuICAgICAgY29uc3QgY29sVG9BZGRJblZpc2libGVDb2wgPSBVdGlsLmRpZmZlcmVuY2VBcnJheXMob3JpZ2luYWxTb3J0Q29sdW1uc0FycmF5LCBpbml0aWFsQ29uZmlnU29ydENvbHVtbnNBcnJheSk7XG4gICAgICBpZiAoY29sVG9BZGRJblZpc2libGVDb2wubGVuZ3RoID4gMCkge1xuICAgICAgICBjb2xUb0FkZEluVmlzaWJsZUNvbC5mb3JFYWNoKGNvbEFkZCA9PiB7XG4gICAgICAgICAgdGhpcy5zb3J0Q29sQXJyYXkucHVzaChjb2xBZGQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29sVG9EZWxJblZpc2libGVDb2wgPSBVdGlsLmRpZmZlcmVuY2VBcnJheXMoaW5pdGlhbENvbmZpZ1NvcnRDb2x1bW5zQXJyYXksIG9yaWdpbmFsU29ydENvbHVtbnNBcnJheSk7XG4gICAgICBpZiAoY29sVG9EZWxJblZpc2libGVDb2wubGVuZ3RoID4gMCkge1xuICAgICAgICBjb2xUb0RlbEluVmlzaWJsZUNvbC5mb3JFYWNoKChjb2xEZWwpID0+IHtcbiAgICAgICAgICB0aGlzLnNvcnRDb2xBcnJheS5mb3JFYWNoKChjb2wsIGkpID0+IHtcbiAgICAgICAgICAgIGlmIChjb2wuY29sdW1uTmFtZSA9PT0gY29sRGVsLmNvbHVtbk5hbWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5zb3J0Q29sQXJyYXkuc3BsaWNlKGksIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBlbnN1cmluZyBjb2x1bW4gZXhpc3RlbmNlIGFuZCBjaGVja2luZyBpdHMgb3JkZXJhYmxlIHN0YXRlXG4gICAgZm9yIChsZXQgaSA9IHRoaXMuc29ydENvbEFycmF5Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBjb2xOYW1lID0gdGhpcy5zb3J0Q29sQXJyYXlbaV0uY29sdW1uTmFtZTtcbiAgICAgIGNvbnN0IG9Db2wgPSB0aGlzLmdldE9Db2x1bW4oY29sTmFtZSk7XG4gICAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKG9Db2wpIHx8ICFvQ29sLm9yZGVyYWJsZSkge1xuICAgICAgICB0aGlzLnNvcnRDb2xBcnJheS5zcGxpY2UoaSwgMSk7XG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICBwcm90ZWN0ZWQgZW5zdXJlQ29sdW1uc09yZGVyKCkge1xuXG4gICAgbGV0IGNvbHVtbnNPcmRlciA9IFtdO1xuICAgIGlmICh0aGlzLnN0YXRlLmNvbHVtbnNEaXNwbGF5KSB7XG4gICAgICBjb2x1bW5zT3JkZXIgPSB0aGlzLnN0YXRlLmNvbHVtbnNEaXNwbGF5Lm1hcChpdGVtID0+IGl0ZW0uYXR0cik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbHVtbnNPcmRlciA9IHRoaXMuY29sQXJyYXkuZmlsdGVyKGF0dHIgPT4gdGhpcy52aXNpYmxlQ29sQXJyYXkuaW5kZXhPZihhdHRyKSA9PT0gLTEpO1xuICAgICAgY29sdW1uc09yZGVyLnB1c2goLi4udGhpcy52aXNpYmxlQ29sQXJyYXkpO1xuICAgIH1cblxuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5zb3J0KChhOiBPQ29sdW1uLCBiOiBPQ29sdW1uKSA9PiB7XG4gICAgICBpZiAoY29sdW1uc09yZGVyLmluZGV4T2YoYS5hdHRyKSA9PT0gLTEpIHtcbiAgICAgICAgLy8gaWYgaXQgaXMgbm90IGluIGxvY2FsIHN0b3JhZ2UgYmVjYXVzZSBpdCBpcyBuZXcsIGtlZXAgb3JkZXJcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY29sdW1uc09yZGVyLmluZGV4T2YoYS5hdHRyKSAtIGNvbHVtbnNPcmRlci5pbmRleE9mKGIuYXR0cik7XG4gICAgICB9XG4gICAgfSk7XG5cblxuICB9XG5cbiAgaW5pdGlhbGl6ZVBhcmFtcygpOiB2b2lkIHtcbiAgICAvLyBJZiB2aXNpYmxlLWNvbHVtbnMgaXMgbm90IHByZXNlbnQgdGhlbiB2aXNpYmxlLWNvbHVtbnMgaXMgYWxsIGNvbHVtbnNcbiAgICBpZiAoIXRoaXMudmlzaWJsZUNvbHVtbnMpIHtcbiAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbEFycmF5Lmxlbmd0aCkge1xuICAgICAgdGhpcy5jb2xBcnJheS5mb3JFYWNoKCh4OiBzdHJpbmcpID0+IHRoaXMucmVnaXN0ZXJDb2x1bW4oeCkpO1xuICAgICAgdGhpcy5lbnN1cmVDb2x1bW5zT3JkZXIoKTtcbiAgICB9XG4gICAgLy8gSW5pdGlhbGl6ZSBxdWlja0ZpbHRlclxuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuZmlsdGVyID0gdGhpcy5xdWlja0ZpbHRlcjtcblxuICAgIGlmICh0aGlzLnN0YXRlLmN1cnJlbnRQYWdlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5zdGF0ZS5jdXJyZW50UGFnZTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWFsaXplIHBhZ2luYXRvclxuICAgIGlmICghdGhpcy5wYWdpbmF0b3IgJiYgdGhpcy5wYWdpbmF0aW9uQ29udHJvbHMpIHtcbiAgICAgIHRoaXMucGFnaW5hdG9yID0gbmV3IE9CYXNlVGFibGVQYWdpbmF0b3IoKTtcbiAgICAgIHRoaXMucGFnaW5hdG9yLnBhZ2VTaXplID0gdGhpcy5xdWVyeVJvd3M7XG4gICAgICB0aGlzLnBhZ2luYXRvci5wYWdlSW5kZXggPSB0aGlzLmN1cnJlbnRQYWdlO1xuICAgICAgdGhpcy5wYWdpbmF0b3Iuc2hvd0ZpcnN0TGFzdEJ1dHRvbnMgPSB0aGlzLnNob3dQYWdpbmF0b3JGaXJzdExhc3RCdXR0b25zO1xuICAgIH1cblxuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5zZWxlY3RBbGxDaGVja2JveFZpc2libGUpKSB7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlID0gISF0aGlzLnN0YXRlLnNlbGVjdENvbHVtblZpc2libGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNoZWNraW5nIHRoZSBvcmlnaW5hbCBzZWxlY3RBbGxDaGVja2JveFZpc2libGUgd2l0aCBzZWxlY3QtY29sdW1uLXZpc2libGUgaW4gaW5pdGlhbCBjb25maWd1cmF0aW9uIGluIGxvY2FsIHN0b3JhZ2VcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLnNlbGVjdENvbHVtblZpc2libGUpXG4gICAgICAgICYmIHRoaXMuc2VsZWN0QWxsQ2hlY2tib3hWaXNpYmxlID09PSB0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLnNlbGVjdENvbHVtblZpc2libGUpIHtcbiAgICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udmlzaWJsZSA9ICEhdGhpcy5zdGF0ZS5zZWxlY3RDb2x1bW5WaXNpYmxlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udmlzaWJsZSA9IHRoaXMuc2VsZWN0QWxsQ2hlY2tib3hWaXNpYmxlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vSW5pdGlhbGl6ZSBzaG93IGZpbHRlciBieSBjb2x1bW4gaWNvblxuICAgIHRoaXMuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlID0gdGhpcy5maWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQ7XG5cbiAgICB0aGlzLmluaXRpYWxpemVDaGVja2JveENvbHVtbigpO1xuXG4gICAgaWYgKHRoaXMuc3RvcmVTdGF0ZSkge1xuICAgICAgLy8gaWYgcXVlcnktcm93cyBpbiBpbml0aWFsIGNvbmZpZ3VyYXRpb24gaXMgZXF1YWxzIHRvIG9yaWdpbmFsIHF1ZXJ5LXJvd3MgaW5wdXRcbiAgICAgIC8vIHF1ZXJ5X3Jvd3Mgd2lsbCBiZSB0aGUgdmFsdWUgaW4gbG9jYWwgc3RvcmFnZVxuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUucXVlcnlSb3dzKSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLnF1ZXJ5Um93cylcbiAgICAgICAgJiYgdGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5xdWVyeVJvd3MgPT09IHRoaXMub3JpZ2luYWxRdWVyeVJvd3MpIHtcbiAgICAgICAgdGhpcy5xdWVyeVJvd3MgPSB0aGlzLnN0YXRlLnF1ZXJ5Um93cztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgc2VsZWN0aW9uKCkge1xuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5fc2VsZWN0aW9uKSkge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsPGFueT4odGhpcy5pc1NlbGVjdGlvbk1vZGVNdWx0aXBsZSgpLCBbXSwgdHJ1ZSwgdGhpcy5jb21wYXJlUm93KCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uO1xuICB9XG5cbiAgdXBkYXRlU3RhdGVFeHBhbmRlZENvbHVtbigpIHtcbiAgICBpZiAoIXRoaXMudGFibGVSb3dFeHBhbmRhYmxlIHx8ICF0aGlzLnRhYmxlUm93RXhwYW5kYWJsZS5leHBhbmRhYmxlQ29sdW1uVmlzaWJsZSkgeyByZXR1cm47IH1cbiAgICBpZiAodGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1uc1swXSA9PT0gQ29kZXMuTkFNRV9DT0xVTU5fU0VMRUNUICYmIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnNbMV0gIT09IENvZGVzLk5BTUVfQ09MVU1OX0VYUEFOREFCTEUpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnMgPSBbdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1uc1swXV0uY29uY2F0KENvZGVzLk5BTUVfQ09MVU1OX0VYUEFOREFCTEUsIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnMuc3BsaWNlKDEpKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnNbMF0gIT09IENvZGVzLk5BTUVfQ09MVU1OX0VYUEFOREFCTEUpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnMudW5zaGlmdChDb2Rlcy5OQU1FX0NPTFVNTl9FWFBBTkRBQkxFKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3RlclRhYkxpc3RlbmVyKCkge1xuICAgIC8vIFdoZW4gdGFibGUgaXMgY29udGFpbmVkIGludG8gdGFiIGNvbXBvbmVudCwgaXQgaXMgbmVjZXNzYXJ5IHRvIGluaXQgdGFibGUgY29tcG9uZW50IHdoZW4gYXR0YWNoZWQgdG8gRE9NLlxuICAgIHRoaXMudGFiR3JvdXBDaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLnRhYkdyb3VwQ29udGFpbmVyLnNlbGVjdGVkVGFiQ2hhbmdlLnN1YnNjcmliZSgoZXZ0KSA9PiB7XG4gICAgICBsZXQgaW50ZXJ2YWw7XG4gICAgICBjb25zdCB0aW1lckNhbGxiYWNrID0gKHRhYjogTWF0VGFiKSA9PiB7XG4gICAgICAgIGlmICh0YWIgJiYgdGFiLmNvbnRlbnQuaXNBdHRhY2hlZCkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICAgIGlmICh0YWIgPT09IHRoaXMudGFiQ29udGFpbmVyKSB7XG4gICAgICAgICAgICB0aGlzLmluc2lkZVRhYkJ1Z1dvcmthcm91bmQoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBlbmRpbmdRdWVyeSkge1xuICAgICAgICAgICAgICB0aGlzLnF1ZXJ5RGF0YSh0aGlzLnBlbmRpbmdRdWVyeUZpbHRlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoZWNrVmlld3BvcnRTaXplKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7IHRpbWVyQ2FsbGJhY2soZXZ0LnRhYik7IH0sIDEwMCk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaW5zaWRlVGFiQnVnV29ya2Fyb3VuZCgpIHtcbiAgICB0aGlzLnJlZnJlc2hTb3J0SGVhZGVycygpO1xuICB9XG5cbiAgcmVnaXN0ZXJTb3J0TGlzdGVuZXIoKSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc29ydCkpIHtcbiAgICAgIHRoaXMuc29ydFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuc29ydFN1YnNjcmlwdGlvbiA9IHRoaXMuc29ydC5vU29ydENoYW5nZS5zdWJzY3JpYmUodGhpcy5vblNvcnRDaGFuZ2UuYmluZCh0aGlzKSk7XG4gICAgICB0aGlzLnNvcnQuc2V0TXVsdGlwbGVTb3J0KHRoaXMubXVsdGlwbGVTb3J0KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU29ydGluZ1N1YmplY3QodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAvKiB0aGUgbG9hZGluZ1NvcnRpbmdTdWJqZWN0IG5vdCByZWZyZXNoIGluIHRoZSB0ZW1wbGF0ZVxuICAgIGJlY2F1c2UgY2hhbmdlIGRldGVjdGlvbiBub3Qgd29ya2luZyB3aXRoIHZpcnR1YWwgc2Nyb2xsaW5nICovXG4gICAgY29uc3Qgbmdab25lID0gdGhpcy5pbmplY3Rvci5nZXQoTmdab25lKTtcbiAgICBpZiAobmdab25lKSB7XG4gICAgICBuZ1pvbmUucnVuKCgpID0+IHRoaXMubG9hZGluZ1NvcnRpbmdTdWJqZWN0Lm5leHQodmFsdWUpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxvYWRpbmdTb3J0aW5nU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgIGlmICh0aGlzLmNkICYmICEodGhpcy5jZCBhcyBWaWV3UmVmKS5kZXN0cm95ZWQpIHtcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uU29ydENoYW5nZShzb3J0QXJyYXk6IGFueVtdKSB7XG4gICAgdGhpcy5zb3J0Q29sQXJyYXkgPSBbXTtcbiAgICBzb3J0QXJyYXkuZm9yRWFjaCgoc29ydCkgPT4ge1xuICAgICAgaWYgKHNvcnQuZGlyZWN0aW9uICE9PSAnJykge1xuICAgICAgICB0aGlzLnNvcnRDb2xBcnJheS5wdXNoKHtcbiAgICAgICAgICBjb2x1bW5OYW1lOiBzb3J0LmlkLFxuICAgICAgICAgIGFzY2VuZGVudDogc29ydC5kaXJlY3Rpb24gPT09IENvZGVzLkFTQ19TT1JUXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICB0aGlzLnJlbG9hZERhdGEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVTb3J0aW5nU3ViamVjdCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBzZXREYXRhc291cmNlKCkge1xuICAgIC8vRGVsZXRlZCBwcmV2aW91cyBpbnN0YW5jZSBhbmQgc3Vic2NyaWJlcnNcbiAgICBkZWxldGUgdGhpcy5kYXRhU291cmNlO1xuICAgIGlmICh0aGlzLm9uUmVuZGVyZWREYXRhQ2hhbmdlKSB0aGlzLm9uUmVuZGVyZWREYXRhQ2hhbmdlLnVuc3Vic2NyaWJlKCk7XG5cbiAgICBjb25zdCBkYXRhU291cmNlU2VydmljZSA9IHRoaXMuaW5qZWN0b3IuZ2V0KE9UYWJsZURhdGFTb3VyY2VTZXJ2aWNlKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBkYXRhU291cmNlU2VydmljZS5nZXRJbnN0YW5jZSh0aGlzKTtcbiAgICB0aGlzLnJlZ2lzdGVyRGF0YVNvdXJjZUxpc3RlbmVycygpO1xuICAgIHRoaXMucmVnaXN0ZXJTb3J0TGlzdGVuZXIoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWdpc3RlckRhdGFTb3VyY2VMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5vblJlbmRlcmVkRGF0YUNoYW5nZSA9IHRoaXMuZGF0YVNvdXJjZS5vblJlbmRlcmVkRGF0YUNoYW5nZS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5zdG9wRWRpdGlvbigpO1xuICAgICAgdGhpcy5jaGVja1NlbGVjdGVkSXRlbURhdGEoKTtcbiAgICAgIGlmICghdGhpcy5wYWdlYWJsZSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVNvcnRpbmdTdWJqZWN0KGZhbHNlKTtcbiAgICAgICAgICBpZiAodGhpcy5jZCAmJiAhKHRoaXMuY2QgYXMgVmlld1JlZikuZGVzdHJveWVkKSB7XG4gICAgICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDUwMCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RXhwYW5kZWRSb3dDb250YWluZXJDbGFzcyhyb3dJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICByZXR1cm4gT1RhYmxlQ29tcG9uZW50LkVYUEFOREVEX1JPV19DT05UQUlORVJfQ0xBU1MgKyByb3dJbmRleDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRFeHBhbmRhYmxlSXRlbXMoKTogYW55W10ge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGFibGVJdGVtLnNlbGVjdGVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHRvIGV4cGFuZCBvciBjb2xsYXBzZSB0aGUgZXhwYW5kYWJsZSByb3cuXG4gICAqIEBwYXJhbSBpdGVtXG4gICAqIEBwYXJhbSBldmVudFxuICAgKi9cbiAgcHVibGljIHRvZ2dsZVJvd0V4cGFuZGFibGUoaXRlbTogYW55LCBldmVudD86IEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgdGhpcy5leHBhbmRhYmxlSXRlbS50b2dnbGUoaXRlbSk7XG4gICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLmdldFZhbHVlKCkuZmluZEluZGV4KChyb3cpID0+IHRoaXMua2V5c0FycmF5LmV2ZXJ5KGtleSA9PiByb3dba2V5XSA9PT0gaXRlbVtrZXldKSk7XG5cbiAgICBpZiAodGhpcy5wb3J0YWxIb3N0W3Jvd0luZGV4XSkge1xuICAgICAgdGhpcy5wb3J0YWxIb3N0W3Jvd0luZGV4XS5kZXRhY2goKTtcbiAgICB9XG4gICAgY29uc3QgaXNDb2xsYXBzZWQgPSB0aGlzLmdldFN0YXRlRXhwYW5kKGl0ZW0pID09PSAnY29sbGFwc2VkJztcbiAgICBjb25zdCBldmVudFRhYmxlUm93RXhwYW5kYWJsZUNoYW5nZSA9IHRoaXMuZW1pdFRhYmxlUm93RXhwYW5kYWJsZUNoYW5nZUV2ZW50KGl0ZW0sIHJvd0luZGV4KTtcbiAgICBpZiAoaXNDb2xsYXBzZWQpIHtcbiAgICAgIHRoaXMudGFibGVSb3dFeHBhbmRhYmxlLm9uQ29sbGFwc2VkLmVtaXQoZXZlbnRUYWJsZVJvd0V4cGFuZGFibGVDaGFuZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBvcnRhbEhvc3Rbcm93SW5kZXhdID0gbmV3IERvbVBvcnRhbE91dGxldChcbiAgICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy4nICsgdGhpcy5nZXRFeHBhbmRlZFJvd0NvbnRhaW5lckNsYXNzKHJvd0luZGV4KSksXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRoaXMuYXBwUmVmLFxuICAgICAgICB0aGlzLmluamVjdG9yXG4gICAgICApO1xuXG4gICAgICBjb25zdCB0ZW1wbGF0ZVBvcnRhbCA9IG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLnRhYmxlUm93RXhwYW5kYWJsZS50ZW1wbGF0ZVJlZiwgdGhpcy5fdmlld0NvbnRhaW5lclJlZiwgeyAkaW1wbGljaXQ6IGl0ZW0gfSk7XG4gICAgICB0aGlzLnBvcnRhbEhvc3Rbcm93SW5kZXhdLmF0dGFjaFRlbXBsYXRlUG9ydGFsKHRlbXBsYXRlUG9ydGFsKTtcbiAgICAgIHRoaXMudGFibGVSb3dFeHBhbmRhYmxlLm9uRXhwYW5kZWQuZW1pdChldmVudFRhYmxlUm93RXhwYW5kYWJsZUNoYW5nZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBUb2dnbGVzIHJvdyBleHBhbmRhYmxlIGJ5IHJvdyBpbmRleFxuICAgKiBAcGFyYW0gcm93SW5kZXhcbiAgICogQHBhcmFtIFtldmVudF1cbiAgICovXG4gIHB1YmxpYyB0b2dnbGVSb3dFeHBhbmRhYmxlQnlSb3dJbmRleChyb3dJbmRleDogbnVtYmVyLCBldmVudD86IEV2ZW50KSB7XG4gICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0VmFsdWUoKVtyb3dJbmRleF07XG4gICAgdGhpcy50b2dnbGVSb3dFeHBhbmRhYmxlKGl0ZW0sIGV2ZW50KTtcbiAgfVxuXG5cblxuICBwcml2YXRlIGVtaXRUYWJsZVJvd0V4cGFuZGFibGVDaGFuZ2VFdmVudChkYXRhLCByb3dJbmRleCkge1xuICAgIGNvbnN0IGV2ZW50ID0gbmV3IE9UYWJsZVJvd0V4cGFuZGVkQ2hhbmdlKCk7XG4gICAgZXZlbnQucm93SW5kZXggPSByb3dJbmRleDtcbiAgICBldmVudC5kYXRhID0gZGF0YTtcblxuICAgIHJldHVybiBldmVudDtcbiAgfVxuXG4gIHB1YmxpYyBpc0V4cGFuZGVkKGRhdGE6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV4cGFuZGFibGVJdGVtLmlzU2VsZWN0ZWQoZGF0YSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3RhdGVFeHBhbmQocm93KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNFeHBhbmRlZChyb3cpID8gJ2V4cGFuZGVkJyA6ICdjb2xsYXBzZWQnO1xuICB9XG5cbiAgcHVibGljIGlzQ29sdW1uRXhwYW5kYWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFV0aWwuaXNEZWZpbmVkKHRoaXMudGFibGVSb3dFeHBhbmRhYmxlKSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLl9vVGFibGVPcHRpb25zLmV4cGFuZGFibGVDb2x1bW4pKSA/IHRoaXMuX29UYWJsZU9wdGlvbnMuZXhwYW5kYWJsZUNvbHVtbi52aXNpYmxlIDogZmFsc2U7XG4gIH1cblxuICBnZXQgaGFzRXhwYW5kZWRSb3coKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHRoaXMudGFibGVSb3dFeHBhbmRhYmxlKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNJbnNlcnRhYmxlUm93KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZCh0aGlzLm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQpO1xuICB9XG5cbiAgcHVibGljIGdldE51bVZpc2libGVDb2x1bW5zKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMub1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2QgbWFuYWdlcyB0aGUgY2FsbCB0byB0aGUgc2VydmljZVxuICAgKiBAcGFyYW0gZmlsdGVyXG4gICAqIEBwYXJhbSBvdnJyQXJnc1xuICAgKi9cbiAgcXVlcnlEYXRhKGZpbHRlcj86IGFueSwgb3ZyckFyZ3M/OiBPUXVlcnlEYXRhQXJncykge1xuICAgIC8vIElmIHRhYiBleGlzdHMgYW5kIGlzIG5vdCBhY3RpdmUgdGhlbiB3YWl0IGZvciBxdWVyeURhdGFcbiAgICBpZiAodGhpcy5pc0luc2lkZUluYWN0aXZlVGFiKCkpIHtcbiAgICAgIHRoaXMucGVuZGluZ1F1ZXJ5ID0gdHJ1ZTtcbiAgICAgIHRoaXMucGVuZGluZ1F1ZXJ5RmlsdGVyID0gZmlsdGVyO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnBlbmRpbmdRdWVyeSA9IGZhbHNlO1xuICAgIHRoaXMucGVuZGluZ1F1ZXJ5RmlsdGVyID0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy5xdWVyeUNlbGxSZW5kZXJlcnMoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgc3VwZXIucXVlcnlEYXRhKGZpbHRlciwgb3ZyckFyZ3MpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGlzSW5zaWRlSW5hY3RpdmVUYWIoKTogYm9vbGVhbiB7XG4gICAgbGV0IHJlc3VsdDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnRhYkNvbnRhaW5lciAmJiB0aGlzLnRhYkdyb3VwQ29udGFpbmVyKSB7XG4gICAgICByZXN1bHQgPSAhKHRoaXMudGFiQ29udGFpbmVyLmlzQWN0aXZlIHx8ICh0aGlzLnRhYkdyb3VwQ29udGFpbmVyLnNlbGVjdGVkSW5kZXggPT09IHRoaXMudGFiQ29udGFpbmVyLnBvc2l0aW9uKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBnZXRDb21wb25lbnRGaWx0ZXIoZXhpc3RpbmdGaWx0ZXI6IGFueSA9IHt9KTogYW55IHtcbiAgICBsZXQgZmlsdGVyID0gZXhpc3RpbmdGaWx0ZXI7XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIGlmIChPYmplY3Qua2V5cyhmaWx0ZXIpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3QgcGFyZW50SXRlbUV4cHIgPSBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRFeHByZXNzaW9uRnJvbU9iamVjdChmaWx0ZXIpO1xuICAgICAgICBmaWx0ZXIgPSB7fTtcbiAgICAgICAgZmlsdGVyW0ZpbHRlckV4cHJlc3Npb25VdGlscy5GSUxURVJfRVhQUkVTU0lPTl9LRVldID0gcGFyZW50SXRlbUV4cHI7XG4gICAgICB9XG4gICAgICBjb25zdCBiZUNvbEZpbHRlciA9IHRoaXMuZ2V0Q29sdW1uRmlsdGVyc0V4cHJlc3Npb24oKTtcbiAgICAgIC8vIEFkZCBjb2x1bW4gZmlsdGVycyBiYXNpYyBleHByZXNzaW9uIHRvIGN1cnJlbnQgZmlsdGVyXG4gICAgICBpZiAoYmVDb2xGaWx0ZXIgJiYgIVV0aWwuaXNEZWZpbmVkKGZpbHRlcltGaWx0ZXJFeHByZXNzaW9uVXRpbHMuRklMVEVSX0VYUFJFU1NJT05fS0VZXSkpIHtcbiAgICAgICAgZmlsdGVyW0ZpbHRlckV4cHJlc3Npb25VdGlscy5GSUxURVJfRVhQUkVTU0lPTl9LRVldID0gYmVDb2xGaWx0ZXI7XG4gICAgICB9IGVsc2UgaWYgKGJlQ29sRmlsdGVyKSB7XG4gICAgICAgIGZpbHRlcltGaWx0ZXJFeHByZXNzaW9uVXRpbHMuRklMVEVSX0VYUFJFU1NJT05fS0VZXSA9XG4gICAgICAgICAgRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkQ29tcGxleEV4cHJlc3Npb24oZmlsdGVyW0ZpbHRlckV4cHJlc3Npb25VdGlscy5GSUxURVJfRVhQUkVTU0lPTl9LRVldLCBiZUNvbEZpbHRlciwgRmlsdGVyRXhwcmVzc2lvblV0aWxzLk9QX0FORCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmdldENvbXBvbmVudEZpbHRlcihmaWx0ZXIpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGdldFF1aWNrRmlsdGVyRXhwcmVzc2lvbigpOiBFeHByZXNzaW9uIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudCkgJiYgdGhpcy5wYWdlYWJsZSkge1xuICAgICAgcmV0dXJuIHRoaXMub1RhYmxlUXVpY2tGaWx0ZXJDb21wb25lbnQuZmlsdGVyRXhwcmVzc2lvbjtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldENvbHVtbkZpbHRlcnNFeHByZXNzaW9uKCk6IEV4cHJlc3Npb24ge1xuICAgIC8vIEFwcGx5IGNvbHVtbiBmaWx0ZXJzXG4gICAgY29uc3QgY29sdW1uRmlsdGVyczogT0NvbHVtblZhbHVlRmlsdGVyW10gPSB0aGlzLmRhdGFTb3VyY2UuZ2V0Q29sdW1uVmFsdWVGaWx0ZXJzKCk7XG4gICAgY29uc3QgYmVDb2x1bW5GaWx0ZXJzOiBBcnJheTxFeHByZXNzaW9uPiA9IFtdO1xuICAgIGNvbHVtbkZpbHRlcnMuZm9yRWFjaChjb2xGaWx0ZXIgPT4ge1xuICAgICAgLy8gUHJlcGFyZSBiYXNpYyBleHByZXNzaW9uc1xuICAgICAgc3dpdGNoIChjb2xGaWx0ZXIub3BlcmF0b3IpIHtcbiAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLklOOlxuICAgICAgICAgIGlmIChVdGlsLmlzQXJyYXkoY29sRmlsdGVyLnZhbHVlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IGJlc0luOiBBcnJheTxFeHByZXNzaW9uPiA9IGNvbEZpbHRlci52YWx1ZXMubWFwKHZhbHVlID0+IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZEV4cHJlc3Npb25FcXVhbHMoY29sRmlsdGVyLmF0dHIsIHZhbHVlKSk7XG4gICAgICAgICAgICBsZXQgYmVJbjogRXhwcmVzc2lvbiA9IGJlc0luLnBvcCgpO1xuICAgICAgICAgICAgYmVzSW4uZm9yRWFjaChiZSA9PiB7XG4gICAgICAgICAgICAgIGJlSW4gPSBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRDb21wbGV4RXhwcmVzc2lvbihiZUluLCBiZSwgRmlsdGVyRXhwcmVzc2lvblV0aWxzLk9QX09SKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYmVDb2x1bW5GaWx0ZXJzLnB1c2goYmVJbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIENvbHVtblZhbHVlRmlsdGVyT3BlcmF0b3IuQkVUV0VFTjpcbiAgICAgICAgICBpZiAoVXRpbC5pc0FycmF5KGNvbEZpbHRlci52YWx1ZXMpICYmIGNvbEZpbHRlci52YWx1ZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBjb25zdCBiZUZyb20gPSBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRFeHByZXNzaW9uTW9yZUVxdWFsKGNvbEZpbHRlci5hdHRyLCBjb2xGaWx0ZXIudmFsdWVzWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IGJlVG8gPSBGaWx0ZXJFeHByZXNzaW9uVXRpbHMuYnVpbGRFeHByZXNzaW9uTGVzc0VxdWFsKGNvbEZpbHRlci5hdHRyLCBjb2xGaWx0ZXIudmFsdWVzWzFdKTtcbiAgICAgICAgICAgIGJlQ29sdW1uRmlsdGVycy5wdXNoKEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZENvbXBsZXhFeHByZXNzaW9uKGJlRnJvbSwgYmVUbywgRmlsdGVyRXhwcmVzc2lvblV0aWxzLk9QX0FORCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLkVRVUFMOlxuICAgICAgICAgIGJlQ29sdW1uRmlsdGVycy5wdXNoKEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZEV4cHJlc3Npb25MaWtlKGNvbEZpbHRlci5hdHRyLCBjb2xGaWx0ZXIudmFsdWVzKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgQ29sdW1uVmFsdWVGaWx0ZXJPcGVyYXRvci5MRVNTX0VRVUFMOlxuICAgICAgICAgIGJlQ29sdW1uRmlsdGVycy5wdXNoKEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZEV4cHJlc3Npb25MZXNzRXF1YWwoY29sRmlsdGVyLmF0dHIsIGNvbEZpbHRlci52YWx1ZXMpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBDb2x1bW5WYWx1ZUZpbHRlck9wZXJhdG9yLk1PUkVfRVFVQUw6XG4gICAgICAgICAgYmVDb2x1bW5GaWx0ZXJzLnB1c2goRmlsdGVyRXhwcmVzc2lvblV0aWxzLmJ1aWxkRXhwcmVzc2lvbk1vcmVFcXVhbChjb2xGaWx0ZXIuYXR0ciwgY29sRmlsdGVyLnZhbHVlcykpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgfSk7XG4gICAgLy8gQnVpbGQgY29tcGxldGUgY29sdW1uIGZpbHRlcnMgYmFzaWMgZXhwcmVzc2lvblxuICAgIGxldCBiZUNvbEZpbHRlcjogRXhwcmVzc2lvbiA9IGJlQ29sdW1uRmlsdGVycy5wb3AoKTtcbiAgICBiZUNvbHVtbkZpbHRlcnMuZm9yRWFjaChiZSA9PiB7XG4gICAgICBiZUNvbEZpbHRlciA9IEZpbHRlckV4cHJlc3Npb25VdGlscy5idWlsZENvbXBsZXhFeHByZXNzaW9uKGJlQ29sRmlsdGVyLCBiZSwgRmlsdGVyRXhwcmVzc2lvblV0aWxzLk9QX0FORCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGJlQ29sRmlsdGVyO1xuICB9XG5cbiAgdXBkYXRlUGFnaW5hdGlvbkluZm8ocXVlcnlSZXM6IGFueSkge1xuICAgIHN1cGVyLnVwZGF0ZVBhZ2luYXRpb25JbmZvKHF1ZXJ5UmVzKTtcbiAgfVxuXG4gIGluaXRWaWV3UG9ydChkYXRhOiBhbnlbXSkge1xuXG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0ICYmIGRhdGEpIHtcbiAgICAgIGNvbnN0IGhlYWRlckVsUmVmID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoaGVhZGVyU2VsZWN0b3IpO1xuICAgICAgY29uc3QgZm9vdGVyRWxSZWYgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3Rvcihmb290ZXJTZWxlY3Rvcik7XG4gICAgICBjb25zdCByb3dFbFJlZiA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKHJvd1NlbGVjdG9yKTtcblxuICAgICAgY29uc3QgaGVhZGVySGVpZ2h0ID0gaGVhZGVyRWxSZWYgPyBoZWFkZXJFbFJlZi5vZmZzZXRIZWlnaHQgOiAwO1xuICAgICAgY29uc3QgZm9vdGVySGVpZ2h0ID0gZm9vdGVyRWxSZWYgPyBmb290ZXJFbFJlZi5vZmZzZXRIZWlnaHQgOiAwO1xuICAgICAgY29uc3Qgcm93SGVpZ2h0ID0gcm93RWxSZWYgPyByb3dFbFJlZi5vZmZzZXRIZWlnaHQgOiBPVGFibGVDb21wb25lbnQuREVGQVVMVF9ST1dfSEVJR0hUO1xuXG4gICAgICAvLyBzZXQgY29uZmlnIHZpZXdwb3J0XG4gICAgICB0aGlzLnNjcm9sbFN0cmF0ZWd5LnNldENvbmZpZyhyb3dIZWlnaHQsIGhlYWRlckhlaWdodCwgZm9vdGVySGVpZ2h0KTtcbiAgICAgIGlmICh0aGlzLnByZXZpb3VzUmVuZGVyZXJEYXRhICE9PSB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsU3RyYXRlZ3kuZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBzZXREYXRhKGRhdGE6IGFueSwgc3FsVHlwZXM6IGFueSkge1xuICAgIC8qIFRoaXMgY29kZSBpcyBub3QgcHV0IGluIHRoZSBzdXBlciBtZXRob2QgYmVjYXVzZSBpdCBpcyBub3QgY2FsbGVkIGZyb20gdGhlIGNsYXNzIGl0c2VsZiAqL1xuICAgIGlmIChkYXRhIGluc3RhbmNlb2YgQXJyYXkgJiYgZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2U/LnJlaW5pdGlhbGl6ZVBhZ2luYXRpb25Db250ZXh0KHRoaXMucXVlcnlSb3dzKTtcbiAgICB9XG5cbiAgICB0aGlzLmRhb1RhYmxlLnNxbFR5cGVzQ2hhbmdlLm5leHQoc3FsVHlwZXMpO1xuICAgIHRoaXMuZGFvVGFibGUuc2V0RGF0YUFycmF5KGRhdGEpO1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICBPYnNlcnZhYmxlV3JhcHBlci5jYWxsRW1pdCh0aGlzLm9uUGFnaW5hdGVkRGF0YUxvYWRlZCwgZGF0YSk7XG4gICAgfVxuICAgIE9ic2VydmFibGVXcmFwcGVyLmNhbGxFbWl0KHRoaXMub25EYXRhTG9hZGVkLCB0aGlzLmRhb1RhYmxlLmRhdGEpO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNhblNldFN0YXRpY0RhdGEoc3RhdGljRGF0YSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBzdXBlci5jYW5TZXRTdGF0aWNEYXRhKHN0YXRpY0RhdGEpICYmIFV0aWwuaXNEZWZpbmVkKHRoaXMuZGFvVGFibGUpO1xuICB9XG5cbiAgc2hvd0RpYWxvZ0Vycm9yKGVycm9yOiBzdHJpbmcsIGVycm9yT3B0aW9uYWw/OiBzdHJpbmcpIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQoZXJyb3IpICYmICFVdGlsLmlzT2JqZWN0KGVycm9yKSkge1xuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFsZXJ0KCdFUlJPUicsIGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmFsZXJ0KCdFUlJPUicsIGVycm9yT3B0aW9uYWwpO1xuICAgIH1cbiAgfVxuXG4gIHByb2plY3RDb250ZW50Q2hhbmdlZCgpIHtcbiAgICB0aGlzLmxvYWRpbmdTY3JvbGxTdWJqZWN0Lm5leHQoZmFsc2UpO1xuXG4gICAgdGhpcy5pbml0Vmlld1BvcnQodGhpcy5kYXRhU291cmNlLnJlbmRlcmVkRGF0YSk7XG5cbiAgICBpZiAodGhpcy5wcmV2aW91c1JlbmRlcmVyRGF0YSAhPT0gdGhpcy5kYXRhU291cmNlLnJlbmRlcmVkRGF0YSkge1xuICAgICAgdGhpcy5wcmV2aW91c1JlbmRlcmVyRGF0YSA9IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGE7XG4gICAgICBPYnNlcnZhYmxlV3JhcHBlci5jYWxsRW1pdCh0aGlzLm9uQ29udGVudENoYW5nZSwgdGhpcy5kYXRhU291cmNlLnJlbmRlcmVkRGF0YSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUuc2VsZWN0aW9uICYmIHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEubGVuZ3RoID4gMCAmJiB0aGlzLmdldFNlbGVjdGVkSXRlbXMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuY2hlY2tTZWxlY3RlZEl0ZW1EYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXR0cmlidXRlc1ZhbHVlc1RvUXVlcnkoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgY29uc3QgY29sdW1ucyA9IHN1cGVyLmdldEF0dHJpYnV0ZXNWYWx1ZXNUb1F1ZXJ5KCk7XG4gICAgaWYgKHRoaXMuYXZvaWRRdWVyeUNvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChsZXQgaSA9IGNvbHVtbnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgY29sID0gY29sdW1uc1tpXTtcbiAgICAgICAgaWYgKHRoaXMuYXZvaWRRdWVyeUNvbHVtbnMuaW5kZXhPZihjb2wpICE9PSAtMSkge1xuICAgICAgICAgIGNvbHVtbnMuc3BsaWNlKGksIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb2x1bW5zO1xuICB9XG5cbiAgZ2V0UXVlcnlBcmd1bWVudHMoZmlsdGVyOiBvYmplY3QsIG92cnJBcmdzPzogT1F1ZXJ5RGF0YUFyZ3MpOiBPUXVlcnlQYXJhbXMge1xuICAgIGNvbnN0IHF1ZXJ5QXJndW1lbnRzID0gc3VwZXIuZ2V0UXVlcnlBcmd1bWVudHMoZmlsdGVyLCBvdnJyQXJncyk7XG4gICAgcXVlcnlBcmd1bWVudHMuc3FsVHlwZXMgPSB7XG4gICAgICAuLi50aGlzLmdldFNxbFR5cGVzRm9yRmlsdGVyKHF1ZXJ5QXJndW1lbnRzLmNvbHVtbnMpLFxuICAgICAgLi4ub3ZyckFyZ3MgPyBvdnJyQXJncy5zcWx0eXBlcyB8fCB7fSA6IHt9XG4gICAgfTtcblxuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICBxdWVyeUFyZ3VtZW50cy5zb3J0ID0gdGhpcy5zb3J0Q29sQXJyYXk7XG4gICAgICBpZiAodGhpcy5wYWdpbmF0b3IuaXNTaG93aW5nQWxsUm93cyhvdnJyQXJncz8ub2Zmc2V0KSAmJiB0aGlzLnN0YXRlPy50b3RhbFF1ZXJ5UmVjb3Jkc051bWJlcikge1xuICAgICAgICBxdWVyeUFyZ3VtZW50cy5vdnJyQXJncy5sZW5ndGggPSB0aGlzLnN0YXRlLnRvdGFsUXVlcnlSZWNvcmRzTnVtYmVyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcXVlcnlBcmd1bWVudHM7XG4gIH1cblxuICBnZXRTcWxUeXBlc0ZvckZpbHRlcihmaWx0ZXIpOiBvYmplY3Qge1xuICAgIGNvbnN0IGFsbFNxbFR5cGVzID0gdGhpcy5nZXRTcWxUeXBlcygpO1xuICAgIGNvbnN0IHNxbFR5cGVzID0ge307XG4gICAgaWYgKCFVdGlsLmlzT2JqZWN0RW1wdHkoZmlsdGVyKSkge1xuICAgICAgT2JqZWN0LmtleXMoYWxsU3FsVHlwZXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKGZpbHRlci5pbmRleE9mKGtleSkgIT09IC0xICYmIGFsbFNxbFR5cGVzW2tleV0gIT09IFNRTFR5cGVzLk9USEVSKSB7XG4gICAgICAgICAgc3FsVHlwZXNba2V5XSA9IGFsbFNxbFR5cGVzW2tleV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gc3FsVHlwZXM7XG4gIH1cblxuICBvbkV4cG9ydEJ1dHRvbkNsaWNrZWQoKSB7XG4gICAgaWYgKHRoaXMub1RhYmxlTWVudSkge1xuICAgICAgdGhpcy5vVGFibGVNZW51Lm9uRXhwb3J0QnV0dG9uQ2xpY2tlZCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlQ29sdW1uc1Zpc2liaWxpdHlDbGlja2VkKCkge1xuICAgIGlmICh0aGlzLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5vbkNoYW5nZUNvbHVtbnNWaXNpYmlsaXR5Q2xpY2tlZCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uTWF0VGFibGVDb250ZW50Q2hhbmdlZCgpIHtcbiAgICAvL1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIG5hdmlnYXRpb24gdG8gbmV3IGl0ZW0gaW5zZXJ0aW9uXG4gICAqL1xuICBhZGQoKSB7XG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIGlmICh0aGlzLnNob3dOb3RpZmljYXRpb25PZlJlYWRPbmx5KSB7XG4gICAgICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlLm9wZW4oJ01FU1NBR0VTLk9QRVJBVElPTl9OT1RfQUxMT1dFRF9SRUFET05MWScpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuY2hlY2tFbmFibGVkQWN0aW9uUGVybWlzc2lvbihQZXJtaXNzaW9uc1V0aWxzLkFDVElPTl9JTlNFUlQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHN1cGVyLmluc2VydERldGFpbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgc2VsZWN0ZWQgcm93c1xuICAgKiBAcGFyYW0gW2NsZWFyU2VsZWN0ZWRJdGVtc11cbiAgICovXG4gIHJlbW92ZShjbGVhclNlbGVjdGVkSXRlbXM6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICBpZiAodGhpcy5zaG93Tm90aWZpY2F0aW9uT2ZSZWFkT25seSkge1xuICAgICAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuKCdNRVNTQUdFUy5PUEVSQVRJT05fTk9UX0FMTE9XRURfUkVBRE9OTFknKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCF0aGlzLmNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oUGVybWlzc2lvbnNVdGlscy5BQ1RJT05fREVMRVRFKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5nZXRTZWxlY3RlZEl0ZW1zKCk7XG4gICAgaWYgKHNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNvbmZpcm0oJ0NPTkZJUk0nLCAnTUVTU0FHRVMuQ09ORklSTV9ERUxFVEUnKS50aGVuKHJlcyA9PiB7XG4gICAgICBpZiAocmVzID09PSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLmRhdGFTZXJ2aWNlICYmICh0aGlzLmRlbGV0ZU1ldGhvZCBpbiB0aGlzLmRhdGFTZXJ2aWNlKSAmJiB0aGlzLmVudGl0eSAmJiAodGhpcy5rZXlzQXJyYXkubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gU2VydmljZVV0aWxzLmdldEFycmF5UHJvcGVydGllcyhzZWxlY3RlZEl0ZW1zLCB0aGlzLmtleXNBcnJheSk7XG4gICAgICAgICAgY29uc3Qgc3FsVHlwZXNBcmcgPSB0aGlzLmdldFNxbFR5cGVzT2ZLZXlzKCk7XG4gICAgICAgICAgdGhpcy5kYW9UYWJsZS5yZW1vdmVRdWVyeShmaWx0ZXJzLCBzcWxUeXBlc0FyZykuc3Vic2NyaWJlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuZXh0OiAodikgPT4ge1xuICAgICAgICAgICAgICAgIE9ic2VydmFibGVXcmFwcGVyLmNhbGxFbWl0KHRoaXMub25Sb3dEZWxldGVkLCBzZWxlY3RlZEl0ZW1zKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZXJyb3I6IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93RGlhbG9nRXJyb3IoZSwgJ01FU1NBR0VTLkVSUk9SX0RFTEVURScpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEVuc3VyaW5nIHRoYXQgdGhlIGRlbGV0ZWQgaXRlbXMgd2lsbCBub3QgbG9uZ2VyIGJlIHBhcnQgb2YgdGhlIHNlbGVjdGlvbk1vZGVsXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZGVzZWxlY3QoaXRlbSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9ybUxheW91dE1hbmFnZXIpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUxheW91dE1hbmFnZXIuY2xvc2VEZXRhaWxzKGZpbHRlcnMsIHsgZXhpdFdpdGhvdXRDb25maXJtYXRpb246IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGVsZXRlTG9jYWxJdGVtcygpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNsZWFyU2VsZWN0ZWRJdGVtcykge1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZyZXNocyB0YWJsZSBjb21wb25lbnRcbiAgICovXG4gIHJlZnJlc2goKSB7XG4gICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gIH1cblxuICAvKipcbiAgICogU2hvd3MgYW5kIHNlbGVjdCBhbGwgY2hlY2tib3hcbiAgICovXG4gIHNob3dBbmRTZWxlY3RBbGxDaGVja2JveCgpIHtcbiAgICBpZiAodGhpcy5pc1NlbGVjdGlvbk1vZGVNdWx0aXBsZSgpKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RBbGxDaGVja2JveCkge1xuICAgICAgICB0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUNoZWNrYm94Q29sdW1uKCk7XG4gICAgICB0aGlzLnNlbGVjdEFsbCgpO1xuICAgIH1cbiAgfVxuXG4gIHJlbG9hZFBhZ2luYXRlZERhdGFGcm9tU3RhcnQoY2xlYXJTZWxlY3RlZEl0ZW1zOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGlmICh0aGlzLnBhZ2VhYmxlKSB7XG4gICAgICAvLyBJbml0aWFsaXplIHBhZ2UgaW5kZXhcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSAwO1xuICAgICAgdGhpcy5yZWxvYWREYXRhKGNsZWFyU2VsZWN0ZWRJdGVtcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbG9hZHMgZGF0YVxuICAgKi9cbiAgcmVsb2FkRGF0YShjbGVhclNlbGVjdGVkSXRlbXM6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgaWYgKCF0aGlzLmNoZWNrRW5hYmxlZEFjdGlvblBlcm1pc3Npb24oUGVybWlzc2lvbnNVdGlscy5BQ1RJT05fUkVGUkVTSCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2UucmVmcmVzaFNlbGVjdGlvbigpO1xuICAgIGlmIChjbGVhclNlbGVjdGVkSXRlbXMpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG4gICAgdGhpcy5maW5pc2hRdWVyeVN1YnNjcmlwdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMucGVuZGluZ1F1ZXJ5ID0gdHJ1ZTtcbiAgICBsZXQgcXVlcnlBcmdzOiBPUXVlcnlEYXRhQXJncztcbiAgICBpZiAodGhpcy5wYWdlYWJsZSkge1xuICAgICAgcXVlcnlBcmdzID0ge1xuICAgICAgICBvZmZzZXQ6IHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLnF1ZXJ5Um93cyxcbiAgICAgICAgbGVuZ3RoOiB0aGlzLnF1ZXJ5Um93c1xuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5zdG9wRWRpdGlvbihmYWxzZSk7XG4gICAgdGhpcy5xdWVyeURhdGEodm9pZCAwLCBxdWVyeUFyZ3MpO1xuICB9XG5cbiAgaGFuZGxlQ2xpY2socm93OiBhbnksIGNvbHVtbjogT0NvbHVtbiwgcm93SW5kZXg6IG51bWJlciwgY2VsbFJlZjogRWxlbWVudFJlZiwgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICB0aGlzLmNsaWNrU3ViamVjdC5uZXh0KHsgcm93LCBjb2x1bW4sIGNlbGxSZWYsIHJvd0luZGV4LCBldmVudCB9KTtcbiAgfVxuXG4gIGRvSGFuZGxlQ2xpY2socm93OiBhbnksIGNvbHVtbjogc3RyaW5nLCByb3dJbmRleDogbnVtYmVyLCAkZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBpZiAodGhpcy5yZWFkT25seSAmJiB0aGlzLnNob3dOb3RpZmljYXRpb25PZlJlYWRPbmx5KSB7XG4gICAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuKCdNRVNTQUdFUy5PUEVSQVRJT05fTk9UX0FMTE9XRURfUkVBRE9OTFknKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMub2VuYWJsZWQgfHwgdGhpcy5yZWFkT25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoKHRoaXMuZGV0YWlsTW9kZSA9PT0gQ29kZXMuREVUQUlMX01PREVfQ0xJQ0spKSB7XG4gICAgICB0aGlzLm9uQ2xpY2suZW1pdCh7IHJvdzogcm93LCByb3dJbmRleDogcm93SW5kZXgsIG1vdXNlRXZlbnQ6ICRldmVudCwgY29sdW1uTmFtZTogY29sdW1uLCBjZWxsOiByb3dbY29sdW1uXSB9KTtcbiAgICAgIHRoaXMuc2F2ZURhdGFOYXZpZ2F0aW9uSW5Mb2NhbFN0b3JhZ2UoKTtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3cocm93KTtcbiAgICAgIHRoaXMudmlld0RldGFpbChyb3cpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1NlbGVjdGlvbk1vZGVNdWx0aXBsZSgpICYmICgkZXZlbnQuY3RybEtleSB8fCAkZXZlbnQubWV0YUtleSkpIHtcbiAgICAgIC8vIFRPRE86IHRlc3QgJGV2ZW50Lm1ldGFLZXkgb24gTUFDXG4gICAgICB0aGlzLnNlbGVjdGVkUm93KHJvdyk7XG4gICAgICB0aGlzLm9uQ2xpY2suZW1pdCh7IHJvdzogcm93LCByb3dJbmRleDogcm93SW5kZXgsIG1vdXNlRXZlbnQ6ICRldmVudCwgY29sdW1uTmFtZTogY29sdW1uLCBjZWxsOiByb3dbY29sdW1uXSB9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNTZWxlY3Rpb25Nb2RlTXVsdGlwbGUoKSAmJiAkZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgIHRoaXMuaGFuZGxlTXVsdGlwbGVTZWxlY3Rpb24ocm93KTtcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmlzU2VsZWN0aW9uTW9kZU5vbmUoKSkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuZ2V0U2VsZWN0ZWRJdGVtcygpO1xuICAgICAgaWYgKHRoaXMuaXNSb3dTZWxlY3RlZChyb3cpICYmIHNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAxICYmIHRoaXMuZWRpdGlvbkVuYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbkFuZEVkaXRpbmcoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3cocm93KTtcbiAgICAgIHRoaXMub25DbGljay5lbWl0KHsgcm93OiByb3csIHJvd0luZGV4OiByb3dJbmRleCwgbW91c2VFdmVudDogJGV2ZW50LCBjb2x1bW5OYW1lOiBjb2x1bW4sIGNlbGw6IHJvd1tjb2x1bW5dIH0pO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZU11bHRpcGxlU2VsZWN0aW9uKGl0ZW06IGFueSkge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBmaXJzdCA9IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEuaW5kZXhPZih0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZFswXSk7XG4gICAgICBjb25zdCBsYXN0ID0gdGhpcy5kYXRhU291cmNlLnJlbmRlcmVkRGF0YS5pbmRleE9mKGl0ZW0pO1xuICAgICAgY29uc3QgaW5kZXhGcm9tID0gTWF0aC5taW4oZmlyc3QsIGxhc3QpO1xuICAgICAgY29uc3QgaW5kZXhUbyA9IE1hdGgubWF4KGZpcnN0LCBsYXN0KTtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEuc2xpY2UoaW5kZXhGcm9tLCBpbmRleFRvICsgMSkuZm9yRWFjaChlID0+IHRoaXMuc2VsZWN0ZWRSb3coZSkpO1xuICAgICAgT2JzZXJ2YWJsZVdyYXBwZXIuY2FsbEVtaXQodGhpcy5vbkNsaWNrLCB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHNhdmVEYXRhTmF2aWdhdGlvbkluTG9jYWxTdG9yYWdlKCkge1xuICAgIHN1cGVyLnNhdmVEYXRhTmF2aWdhdGlvbkluTG9jYWxTdG9yYWdlKCk7XG4gICAgdGhpcy5zdG9yZVBhZ2luYXRpb25TdGF0ZSA9IHRydWU7XG4gIH1cblxuICBoYW5kbGVEb3VibGVDbGljayhyb3c6IGFueSwgY29sdW1uOiBPQ29sdW1uLCByb3dJbmRleDogbnVtYmVyLCBjZWxsUmVmOiBFbGVtZW50UmVmLCBldmVudDogTW91c2VFdmVudCkge1xuICAgIHRoaXMuZGJsY2xpY2tTdWJqZWN0Lm5leHQoeyByb3csIGNvbHVtbiwgY2VsbFJlZiwgcm93SW5kZXgsIGV2ZW50IH0pO1xuICB9XG5cbiAgZ2V0IGVkaXRpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuc29tZShpdGVtID0+IGl0ZW0uZWRpdGluZyk7XG4gIH1cblxuICBoYW5kbGVET01DbGljayhldmVudCkge1xuICAgIGlmICh0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZWRpdGlvbkVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBvdmVybGF5Q29udGFpbmVyID0gZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdjZGstb3ZlcmxheS1jb250YWluZXInKVswXTtcbiAgICBpZiAob3ZlcmxheUNvbnRhaW5lciAmJiBvdmVybGF5Q29udGFpbmVyLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0YWJsZUNvbnRhaW5lciA9IHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcuby10YWJsZS1jb250YWluZXInKTtcbiAgICBjb25zdCB0YWJsZUNvbnRlbnQgPSB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLm8tdGFibGUtY29udGFpbmVyIHRhYmxlLm1hdC10YWJsZScpO1xuICAgIGlmICh0YWJsZUNvbnRhaW5lciAmJiB0YWJsZUNvbnRlbnQgJiYgdGFibGVDb250YWluZXIuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJiAhdGFibGVDb250ZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYWN0aXZhdGVDb2x1bW5FZGl0aW9uKGNvbHVtbjogT0NvbHVtbiwgcm93OiBhbnksIGNlbGxSZWY6IGFueSkge1xuICAgIGlmIChjZWxsUmVmICYmIGNvbHVtbi5lZGl0aW5nICYmIHRoaXMuZWRpdGluZ0NlbGwgPT09IGNlbGxSZWYpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgY29sdW1uUGVybWlzc2lvbnM6IE9QZXJtaXNzaW9ucyA9IHRoaXMuZ2V0T0NvbHVtblBlcm1pc3Npb25zKGNvbHVtbi5hdHRyKTtcbiAgICBpZiAoY29sdW1uUGVybWlzc2lvbnMuZW5hYmxlZCA9PT0gZmFsc2UpIHtcbiAgICAgIGNvbnNvbGUud2FybihgJHtjb2x1bW4uYXR0cn0gZWRpdGlvbiBub3QgYWxsb3dlZCBkdWUgdG8gcGVybWlzc2lvbnNgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmNsZWFyU2VsZWN0aW9uQW5kRWRpdGluZygpO1xuICAgIHRoaXMuc2VsZWN0ZWRSb3cocm93KTtcbiAgICB0aGlzLmVkaXRpbmdDZWxsID0gY2VsbFJlZjtcbiAgICBjb25zdCByb3dEYXRhID0ge307XG4gICAgdGhpcy5rZXlzQXJyYXkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICByb3dEYXRhW2tleV0gPSByb3dba2V5XTtcbiAgICB9KTtcbiAgICByb3dEYXRhW2NvbHVtbi5hdHRyXSA9IHJvd1tjb2x1bW4uYXR0cl07XG4gICAgdGhpcy5lZGl0aW5nUm93ID0gcm93O1xuICAgIGNvbHVtbi5lZGl0aW5nID0gdHJ1ZTtcbiAgICBjb2x1bW4uZWRpdG9yLnN0YXJ0RWRpdGlvbihyb3dEYXRhKTtcbiAgfVxuXG4gIHVwZGF0ZUNlbGxEYXRhKGNvbHVtbjogT0NvbHVtbiwgZGF0YTogYW55LCBzYXZlQ2hhbmdlczogYm9vbGVhbikge1xuICAgIGlmICghdGhpcy5jaGVja0VuYWJsZWRBY3Rpb25QZXJtaXNzaW9uKFBlcm1pc3Npb25zVXRpbHMuQUNUSU9OX1VQREFURSkpIHtcbiAgICAgIGNvbnN0IHJlcyA9IG5ldyBPYnNlcnZhYmxlKGlubmVyT2JzZXJ2ZXIgPT4ge1xuICAgICAgICBpbm5lck9ic2VydmVyLmVycm9yKCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICAgIGNvbHVtbi5lZGl0aW5nID0gZmFsc2U7XG4gICAgaWYgKHNhdmVDaGFuZ2VzICYmIHRoaXMuZWRpdGluZ1JvdyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBPYmplY3QuYXNzaWduKHRoaXMuZWRpdGluZ1JvdywgZGF0YSk7XG4gICAgfVxuICAgIHRoaXMuc3RvcEVkaXRpb24oKTtcbiAgICBpZiAoc2F2ZUNoYW5nZXMgJiYgY29sdW1uLmVkaXRvci51cGRhdGVSZWNvcmRPbkVkaXQpIHtcbiAgICAgIGNvbnN0IHRvVXBkYXRlID0ge307XG4gICAgICB0b1VwZGF0ZVtjb2x1bW4uYXR0cl0gPSBkYXRhW2NvbHVtbi5hdHRyXTtcbiAgICAgIGNvbnN0IGt2ID0gdGhpcy5leHRyYWN0S2V5c0Zyb21SZWNvcmQoZGF0YSk7XG4gICAgICByZXR1cm4gdGhpcy51cGRhdGVSZWNvcmQoa3YsIHRvVXBkYXRlKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRLZXlzVmFsdWVzKCk6IGFueVtdIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRBbGxWYWx1ZXMoKTtcbiAgICByZXR1cm4gZGF0YS5tYXAoKHJvdykgPT4ge1xuICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICB0aGlzLmtleXNBcnJheS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKHJvd1trZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBvYmpba2V5XSA9IHJvd1trZXldO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9KTtcbiAgfVxuXG4gIG9uU2hvd3NTZWxlY3RzKCkge1xuICAgIGlmICh0aGlzLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5vblNob3dzU2VsZWN0cygpO1xuICAgIH1cbiAgfVxuXG4gIGluaXRpYWxpemVDaGVja2JveENvbHVtbigpIHtcbiAgICAvLyBJbml0aWFsaXppbmcgcm93IHNlbGVjdGlvbiBsaXN0ZW5lclxuICAgIGlmICghdGhpcy5zZWxlY3Rpb25DaGFuZ2VTdWJzY3JpcHRpb24gJiYgdGhpcy5fb1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4udmlzaWJsZSkge1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2VTdWJzY3JpcHRpb24gPSB0aGlzLnNlbGVjdGlvbi5jaGFuZ2VkLnN1YnNjcmliZSgoc2VsZWN0aW9uRGF0YTogU2VsZWN0aW9uQ2hhbmdlPGFueT4pID0+IHtcbiAgICAgICAgaWYgKHRoaXMudHJpZ2dlclNlbGVjdGlvbkV2ZW50cyAmJiBzZWxlY3Rpb25EYXRhKSB7XG4gICAgICAgICAgaWYgKHNlbGVjdGlvbkRhdGEuYWRkZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgT2JzZXJ2YWJsZVdyYXBwZXIuY2FsbEVtaXQodGhpcy5vblJvd1NlbGVjdGVkLCBzZWxlY3Rpb25EYXRhLmFkZGVkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHNlbGVjdGlvbkRhdGEucmVtb3ZlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBPYnNlcnZhYmxlV3JhcHBlci5jYWxsRW1pdCh0aGlzLm9uUm93RGVzZWxlY3RlZCwgc2VsZWN0aW9uRGF0YS5yZW1vdmVkKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbkNvbHVtblN0YXRlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlU2VsZWN0aW9uQ29sdW1uU3RhdGUoKSB7XG4gICAgaWYgKCF0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlKSB7XG4gICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zICYmIHRoaXMuX29UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGVcbiAgICAgICYmIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnNbMF0gIT09IENvZGVzLk5BTUVfQ09MVU1OX1NFTEVDVCkge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy51bnNoaWZ0KENvZGVzLk5BTUVfQ09MVU1OX1NFTEVDVCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zICYmICF0aGlzLl9vVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlXG4gICAgICAmJiB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zWzBdID09PSBDb2Rlcy5OQU1FX0NPTFVNTl9TRUxFQ1QpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnMuc2hpZnQoKTtcbiAgICB9XG4gICAgdGhpcy51cGRhdGVTdGF0ZUV4cGFuZGVkQ29sdW1uKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0TnVtUm93U2VsZWN0ZWRJbkN1cnJlbnREYXRhKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZSA/IHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEuZmlsdGVyKHggPT4gIXRoaXMuaXNEaXNhYmxlQ2hlY2tib3goeCkgJiYgdGhpcy5pc1Jvd1NlbGVjdGVkKHgpKS5sZW5ndGggOiAwO1xuICB9XG5cbiAgcHVibGljIGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLmdldE51bVJvd1NlbGVjdGVkSW5DdXJyZW50RGF0YSgpO1xuICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLmRhdGFTb3VyY2UgPyB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhLmxlbmd0aCA6IDA7XG4gICAgcmV0dXJuIG51bVNlbGVjdGVkID4gMCAmJiBudW1TZWxlY3RlZCA9PT0gbnVtUm93cztcbiAgfVxuXG4gIHB1YmxpYyBpc0luZGV0ZXJtaW5hdGUoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbnVtU2VsZWN0ZWQgPSB0aGlzLmdldE51bVJvd1NlbGVjdGVkSW5DdXJyZW50RGF0YSgpO1xuICAgIGNvbnN0IG51bVJvd3MgPSB0aGlzLmRhdGFTb3VyY2UgPyB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhLmxlbmd0aCA6IDA7XG4gICAgcmV0dXJuIG51bVNlbGVjdGVkID4gMCAmJiBudW1Sb3dzID4gMCAmJiBudW1TZWxlY3RlZCAhPT0gbnVtUm93cztcbiAgfVxuXG4gIHB1YmxpYyBtYXN0ZXJUb2dnbGUoZXZlbnQ6IE1hdENoZWNrYm94Q2hhbmdlKTogdm9pZCB7XG4gICAgZXZlbnQuY2hlY2tlZCA/IHRoaXMuc2VsZWN0QWxsKCkgOiB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5yZW5kZXJlZERhdGEuZm9yRWFjaChyb3cgPT4gdGhpcy5zZXRTZWxlY3RlZChyb3cpKTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3Rpb25DaGVja2JveFRvZ2dsZShldmVudDogTWF0Q2hlY2tib3hDaGFuZ2UsIHJvdzogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNTZWxlY3Rpb25Nb2RlU2luZ2xlKCkpIHtcbiAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB9XG4gICAgZXZlbnQuY2hlY2tlZCA/IHRoaXMuc2VsZWN0ZWRSb3cocm93KSA6IHRoaXMuc2VsZWN0aW9uLmRlc2VsZWN0KHJvdyk7XG4gICAgdGhpcy5zdGF0ZS5zZWxlY3Rpb24gPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZDtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RlZFJvdyhyb3c6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2V0U2VsZWN0ZWQocm93KTtcbiAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBjbGVhclNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zZWxlY3Rpb24pKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcigpO1xuICAgIH1cbiAgICBpZiAoVXRpbC5pc0RlZmluZWQodGhpcy5zdGF0ZSkpIHtcbiAgICAgIHRoaXMuc3RhdGUuc2VsZWN0aW9uID0gW107XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldFNlbGVjdGVkKGl0ZW06IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRGlzYWJsZUNoZWNrYm94KGl0ZW0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzUm93U2VsZWN0ZWQoaXRlbSkpIHtcbiAgICAgIC8qKlRoZSBzZWxlY3RlZCBpdGVtIGlzIGNsZWFyZWQgaWYgdGhlIGl0ZW0gY2hhbmdlcyB2YWx1ZSovXG4gICAgICB0aGlzLnNlbGVjdGlvbi5jbGVhcihpdGVtKTtcbiAgICB9XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGl0ZW0pKSB7XG4gICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QoaXRlbSk7XG4gICAgfVxuICB9XG5cbiAgc2V0U2VsZWN0ZWRCeUtleXMoa2V5VmFsdWVzOiBBcnJheTxhbnk+KSB7XG4gICAgY29uc3Qgcm93c1RvU2VsZWN0ID0gdGhpcy5nZXREYXRhQXJyYXkoKS5maWx0ZXIocm93ID0+IHtcbiAgICAgIHJldHVybiBrZXlWYWx1ZXMuZmluZEluZGV4KGtleVZhbHVlID0+IHJvd1t0aGlzLmtleXNdID09PSBrZXlWYWx1ZSkgPiAtMTtcbiAgICB9KTtcbiAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3QoLi4ucm93c1RvU2VsZWN0KTtcbiAgfVxuXG4gIHNldFNlbGVjdGVkQnlNdWx0aXBsZUtleXMoa2V5VmFsdWVzOiBBcnJheTxPYmplY3Q+KSB7XG4gICAgY29uc3Qgcm93c1RvU2VsZWN0ID0gdGhpcy5nZXREYXRhQXJyYXkoKS5maWx0ZXIocm93ID0+IHtcbiAgICAgIHJldHVybiBrZXlWYWx1ZXMuZmluZEluZGV4KGtleVZhbHVlID0+XG4gICAgICAgIE9iamVjdC5rZXlzKGtleVZhbHVlKS5ldmVyeShrZXkgPT4ga2V5VmFsdWVba2V5XSA9PT0gcm93W2tleV0pXG4gICAgICApID4gLTE7XG4gICAgfSk7XG4gICAgcm93c1RvU2VsZWN0LmV2ZXJ5KHJvd1RvU2VsZWN0ID0+IHRoaXMuc2VsZWN0aW9uLnNlbGVjdChyb3dUb1NlbGVjdCkpO1xuICB9XG5cbiAgc2V0U2VsZWN0ZWRCeVJvd0lkcyhyb3dJZHM6IEFycmF5PG51bWJlcj4pIHtcbiAgICByb3dJZHMuZm9yRWFjaChyb3dJZCA9PiB0aGlzLnNlbGVjdGVkUm93KHRoaXMuZ2V0RGF0YUFycmF5KClbcm93SWRdKSk7XG4gIH1cblxuICBnZXQgc2hvd0RlbGV0ZUJ1dHRvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5kZWxldGVCdXR0b247XG4gIH1cblxuICBnZXRUcmFja0J5RnVuY3Rpb24oKTogKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkgPT4gc3RyaW5nIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIHJldHVybiAoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSA9PiB7XG5cbiAgICAgIGxldCBpdGVtSWQ6IHN0cmluZyA9ICcnO1xuXG4gICAgICBpZiAodGhpcy5pc0dyb3VwKGluZGV4LCBpdGVtKSkge1xuICAgICAgICBpdGVtSWQgKz0gaXRlbS5jb2x1bW47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBrZXlzTGVuZ2h0ID0gc2VsZi5rZXlzQXJyYXkubGVuZ3RoO1xuICAgICAgICBzZWxmLmtleXNBcnJheS5mb3JFYWNoKChrZXk6IHN0cmluZywgaWR4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBzdWZmaXggPSBpZHggPCAoa2V5c0xlbmdodCAtIDEpID8gJzsnIDogJyc7XG4gICAgICAgICAgaXRlbUlkICs9IGl0ZW1ba2V5XSArIHN1ZmZpeDtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhc0FzeW5jQW5kVmlzaWJsZUNvbHMgPSB0aGlzLmFzeW5jTG9hZENvbHVtbnMuc29tZShjID0+IHRoaXMuX29UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnMuaW5jbHVkZXMoYykpO1xuICAgICAgaWYgKHNlbGYuYXN5bmNMb2FkQ29sdW1ucy5sZW5ndGggJiYgaGFzQXN5bmNBbmRWaXNpYmxlQ29scyAmJiAhc2VsZi5maW5pc2hRdWVyeVN1YnNjcmlwdGlvbikge1xuICAgICAgICBzZWxmLnF1ZXJ5Um93QXN5bmNEYXRhKGluZGV4LCBpdGVtKTtcbiAgICAgICAgaWYgKHNlbGYucGFnaW5hdG9yICYmIGluZGV4ID09PSAoc2VsZi5wYWdpbmF0b3IucGFnZVNpemUgLSAxKSkge1xuICAgICAgICAgIHNlbGYuZmluaXNoUXVlcnlTdWJzY3JpcHRpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtSWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaXRlbUlkO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBxdWVyeVJvd0FzeW5jRGF0YShyb3dJbmRleDogbnVtYmVyLCByb3dEYXRhOiBhbnkpIHtcbiAgICBjb25zdCBrdiA9IFNlcnZpY2VVdGlscy5nZXRPYmplY3RQcm9wZXJ0aWVzKHJvd0RhdGEsIHRoaXMua2V5c0FycmF5KTtcbiAgICAvLyBSZXBlYXRpbmcgY2hlY2tpbmcgb2YgdmlzaWJsZSBjb2x1bW5cbiAgICBjb25zdCBhdiA9IHRoaXMuYXN5bmNMb2FkQ29sdW1ucy5maWx0ZXIoYyA9PiB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zLmluZGV4T2YoYykgIT09IC0xKTtcbiAgICBpZiAoYXYubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBTa2lwcGluZyBxdWVyeSBpZiB0aGVyZSBhcmUgbm90IHZpc2libGUgYXN5bmNyb24gY29sdW1uc1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjb2x1bW5RdWVyeUFyZ3MgPSBba3YsIGF2LCB0aGlzLmVudGl0eSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICBjb25zdCBxdWVyeU1ldGhvZE5hbWUgPSB0aGlzLnBhZ2VhYmxlID8gdGhpcy5wYWdpbmF0ZWRRdWVyeU1ldGhvZCA6IHRoaXMucXVlcnlNZXRob2Q7XG4gICAgaWYgKHRoaXMuZGF0YVNlcnZpY2UgJiYgKHF1ZXJ5TWV0aG9kTmFtZSBpbiB0aGlzLmRhdGFTZXJ2aWNlKSAmJiB0aGlzLmVudGl0eSkge1xuICAgICAgaWYgKHRoaXMuYXN5bmNMb2FkU3Vic2NyaXB0aW9uc1tyb3dJbmRleF0pIHtcbiAgICAgICAgdGhpcy5hc3luY0xvYWRTdWJzY3JpcHRpb25zW3Jvd0luZGV4XS51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5hc3luY0xvYWRTdWJzY3JpcHRpb25zW3Jvd0luZGV4XSA9IHRoaXMuZGF0YVNlcnZpY2VbcXVlcnlNZXRob2ROYW1lXSguLi5jb2x1bW5RdWVyeUFyZ3MpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlczogU2VydmljZVJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgaWYgKHJlcy5pc1N1Y2Nlc3NmdWwoKSkge1xuICAgICAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgICAgICBpZiAoVXRpbC5pc0FycmF5KHJlcy5kYXRhKSAmJiByZXMuZGF0YS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgZGF0YSA9IHJlcy5kYXRhWzBdO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChVdGlsLmlzT2JqZWN0KHJlcy5kYXRhKSkge1xuICAgICAgICAgICAgICBkYXRhID0gcmVzLmRhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRhb1RhYmxlLnNldEFzeW5jaHJvbm91c0NvbHVtbihkYXRhLCByb3dEYXRhKTtcbiAgICAgICAgICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBwYWdlIHRhYmxlIGRhdGEuXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBnZXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlLmdldEN1cnJlbnREYXRhKCk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBHZXRzIGFsbCB2YWx1ZXNcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldEFsbFZhbHVlcygpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU291cmNlLmdldEN1cnJlbnRBbGxEYXRhKCk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBHZXRzIGFsbCByZW5kZXJlZCB2YWx1ZXNcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldEFsbFJlbmRlcmVkVmFsdWVzKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFTb3VyY2UuZ2V0QWxsUmVuZGVyZXJEYXRhKCk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHBhZ2UgdGFibGUgcmVuZGVyZXIgZGF0YS5cbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldFJlbmRlcmVkVmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNvdXJjZS5nZXRDdXJyZW50UmVuZGVyZXJEYXRhKCk7XG4gIH1cblxuXG4gIC8qKlxuICAgKiBHZXRzIHNxbCB0eXBlcyBmcm9tIGRhdGEgc291cmNlIGFuZCB0YWJsZSBjb2x1bW5zXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBnZXRTcWxUeXBlcygpIHtcbiAgICBjb25zdCBhbGxTcWxUeXBlcyA9IFV0aWwuaXNEZWZpbmVkKHRoaXMuZGF0YVNvdXJjZS5zcWxUeXBlcykgPyB0aGlzLmRhdGFTb3VyY2Uuc3FsVHlwZXMgOiB7fTtcbiAgICB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuZm9yRWFjaCgoY29sOiBPQ29sdW1uKSA9PiB7XG4gICAgICBpZiAoY29sLnNxbFR5cGUpIHtcbiAgICAgICAgYWxsU3FsVHlwZXNbY29sLmF0dHJdID0gY29sLnNxbFR5cGU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGFsbFNxbFR5cGVzO1xuICB9XG5cbiAgc2V0T1RhYmxlQ29sdW1uc0ZpbHRlcih0YWJsZUNvbHVtbnNGaWx0ZXI6IE9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQpIHtcbiAgICB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQgPSB0YWJsZUNvbHVtbnNGaWx0ZXI7XG4gIH1cblxuICBnZXQgZmlsdGVyQ29sdW1ucygpOiBPRmlsdGVyQ29sdW1uW10ge1xuICAgIGlmICh0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLmZpbHRlckNvbHVtbnMgPT09IHRoaXMub3JpZ2luYWxGaWx0ZXJDb2x1bW5zXG4gICAgICAmJiB0aGlzLnN0YXRlLmZpbHRlckNvbHVtbnMpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXRlLmZpbHRlckNvbHVtbnM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm9yaWdpbmFsRmlsdGVyQ29sdW1ucztcbiAgfVxuXG4gIGdldCBvcmlnaW5hbEZpbHRlckNvbHVtbnMoKTogQXJyYXk8T0ZpbHRlckNvbHVtbj4ge1xuICAgIGxldCBzb3J0Q29sdW1uc0ZpbHRlciA9IFtdO1xuICAgIGlmICh0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQpIHtcbiAgICAgIHNvcnRDb2x1bW5zRmlsdGVyID0gdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50LmNvbHVtbnNBcnJheTtcbiAgICB9XG4gICAgcmV0dXJuIHNvcnRDb2x1bW5zRmlsdGVyO1xuICB9XG5cbiAgZ2V0IG9yaWdpbmFsR3JvdXBlZENvbHVtbnNBcnJheSgpOiBBcnJheTxzdHJpbmc+IHtcbiAgICByZXR1cm4gVXRpbC5wYXJzZUFycmF5KHRoaXMuZ3JvdXBlZENvbHVtbnMsIHRydWUpO1xuICB9XG5cbiAgZ2V0U3RvcmVkQ29sdW1uc0ZpbHRlcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuc3RvcmVkRmlsdGVycztcbiAgfVxuXG4gIGdldFN0b3JlZEdyb3VwZWRDb2x1bW5zKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlLnN0b3JlZENvbmZpZ3VyYXRpb25zO1xuICB9XG5cbiAgb25GaWx0ZXJCeUNvbHVtbkNsaWNrZWQoKSB7XG4gICAgaWYgKHRoaXMub1RhYmxlTWVudSkge1xuICAgICAgdGhpcy5vVGFibGVNZW51Lm9uRmlsdGVyQnlDb2x1bW5DbGlja2VkKCk7XG4gICAgfVxuICB9XG5cbiAgb25TdG9yZUZpbHRlckNsaWNrZWQoKSB7XG4gICAgaWYgKHRoaXMub1RhYmxlTWVudSkge1xuICAgICAgdGhpcy5vVGFibGVNZW51Lm9uU3RvcmVGaWx0ZXJDbGlja2VkKCk7XG4gICAgfVxuICB9XG5cbiAgb25Mb2FkRmlsdGVyQ2xpY2tlZCgpIHtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51KSB7XG4gICAgICB0aGlzLm9UYWJsZU1lbnUub25Mb2FkRmlsdGVyQ2xpY2tlZCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2xlYXJGaWx0ZXJDbGlja2VkKCkge1xuICAgIGlmICh0aGlzLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5vbkNsZWFyRmlsdGVyQ2xpY2tlZCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhciBhbGwgZmlsdGVycyhjb2x1bW4gZmlsdGVyLCBxdWlja2ZpbHRlciBhbmQgZmlsdGVyIGJ1aWxkZXIpIGFuZCByZWxvYWQgZGF0YVxuICAgKiBAcGFyYW0gW3RyaWdnZXJEYXRhc291cmNlVXBkYXRlXVxuICAgKi9cbiAgY2xlYXJGaWx0ZXJzKHRyaWdnZXJEYXRhc291cmNlVXBkYXRlOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuXG4gICAgdGhpcy5kYXRhU291cmNlLmNsZWFyQ29sdW1uRmlsdGVycyh0cmlnZ2VyRGF0YXNvdXJjZVVwZGF0ZSk7XG4gICAgaWYgKHRoaXMub1RhYmxlTWVudSAmJiB0aGlzLm9UYWJsZU1lbnUuY29sdW1uRmlsdGVyT3B0aW9uKSB7XG4gICAgICB0aGlzLm9UYWJsZU1lbnUuY29sdW1uRmlsdGVyT3B0aW9uLnNldEFjdGl2ZSh0aGlzLmlzQ29sdW1uRmlsdGVyc0FjdGl2ZSk7XG4gICAgfVxuICAgIHRoaXMub25GaWx0ZXJCeUNvbHVtbkNoYW5nZS5lbWl0KCk7XG4gICAgaWYgKHRoaXMub1RhYmxlUXVpY2tGaWx0ZXJDb21wb25lbnQpIHtcbiAgICAgIHRoaXMub1RhYmxlUXVpY2tGaWx0ZXJDb21wb25lbnQuc2V0VmFsdWUodm9pZCAwKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWx0ZXJCdWlsZGVyKSB7XG4gICAgICB0aGlzLmZpbHRlckJ1aWxkZXIuY2xlYXJGaWx0ZXIoKTtcbiAgICAgIHRoaXMuZmlsdGVyQnVpbGRlci50cmlnZ2VyUmVsb2FkKCk7XG4gICAgfVxuXG4gIH1cblxuICBjbGVhckNvbHVtbkZpbHRlcihhdHRyOiBzdHJpbmcsIHRyaWdnZXJEYXRhc291cmNlVXBkYXRlOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5jbGVhckNvbHVtbkZpbHRlcihhdHRyLCB0cmlnZ2VyRGF0YXNvdXJjZVVwZGF0ZSk7XG4gICAgdGhpcy5vbkZpbHRlckJ5Q29sdW1uQ2hhbmdlLmVtaXQoKTtcbiAgICB0aGlzLnJlbG9hZFBhZ2luYXRlZERhdGFGcm9tU3RhcnQoZmFsc2UpO1xuICB9XG5cbiAgZmlsdGVyQnlDb2x1bW4oY29sdW1uVmFsdWVGaWx0ZXI6IE9Db2x1bW5WYWx1ZUZpbHRlcikge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5hZGRDb2x1bW5GaWx0ZXIoY29sdW1uVmFsdWVGaWx0ZXIpO1xuICAgIHRoaXMub25GaWx0ZXJCeUNvbHVtbkNoYW5nZS5lbWl0KCk7XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIHRoaXMucmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydChmYWxzZSk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJDb2x1bW5GaWx0ZXJzKHRyaWdnZXJEYXRhc291cmNlVXBkYXRlOiBib29sZWFuID0gdHJ1ZSwgY29sdW1uc0F0dHI/OiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMuZGF0YVNvdXJjZS5jbGVhckNvbHVtbkZpbHRlcnModHJpZ2dlckRhdGFzb3VyY2VVcGRhdGUsIGNvbHVtbnNBdHRyKTtcbiAgICB0aGlzLm9uRmlsdGVyQnlDb2x1bW5DaGFuZ2UuZW1pdCgpO1xuICAgIHRoaXMucmVsb2FkUGFnaW5hdGVkRGF0YUZyb21TdGFydChmYWxzZSk7XG4gIH1cblxuICBpc0NvbHVtbkZpbHRlcmFibGUoY29sdW1uOiBPQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCkgPyB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQuaXNDb2x1bW5GaWx0ZXJhYmxlKGNvbHVtbi5hdHRyKSA6IHRoaXMuaXNTZWFyY2hlYWJsZUNvbHVtbihjb2x1bW4pO1xuICB9XG5cbiAgaXNTZWFyY2hlYWJsZUNvbHVtbihjb2x1bW46IE9Db2x1bW4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWFyY2hlYWJsZUNvbHVtbnMuaW5jbHVkZXMoY29sdW1uLmF0dHIpO1xuICB9XG4gIGlzQ29sdW1uRmlsdGVyQWN0aXZlKGNvbHVtbjogT0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzQ29sdW1uRmlsdGVyc0FjdGl2ZSAmJiBVdGlsLmlzRGVmaW5lZCh0aGlzLmRhdGFTb3VyY2UuZ2V0Q29sdW1uVmFsdWVGaWx0ZXJCeUF0dHIoY29sdW1uLmF0dHIpKTtcbiAgfVxuXG4gIG9wZW5Db2x1bW5GaWx0ZXJEaWFsb2coY29sdW1uOiBPQ29sdW1uLCBldmVudDogRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oT1RhYmxlRmlsdGVyQnlDb2x1bW5EYXRhRGlhbG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGNvbHVtbjogY29sdW1uLFxuICAgICAgICB0YWJsZTogdGhpc1xuICAgICAgfSxcbiAgICAgIG1pbldpZHRoOiAnMzgwcHgnLFxuICAgICAgZGlzYWJsZUNsb3NlOiB0cnVlLFxuICAgICAgcGFuZWxDbGFzczogWydvLWRpYWxvZy1jbGFzcycsICdvLXRhYmxlLWRpYWxvZyddXG4gICAgfSk7XG5cbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIHN3aXRjaCAocmVzdWx0KSB7XG4gICAgICAgIGNhc2UgVGFibGVGaWx0ZXJCeUNvbHVtbkRpYWxvZ1Jlc3VsdC5BQ0NFUFQ6XG4gICAgICAgICAgY29uc3QgY29sdW1uVmFsdWVGaWx0ZXIgPSBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuZ2V0Q29sdW1uVmFsdWVzRmlsdGVyKCk7XG4gICAgICAgICAgdGhpcy5maWx0ZXJCeUNvbHVtbihjb2x1bW5WYWx1ZUZpbHRlcik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgVGFibGVGaWx0ZXJCeUNvbHVtbkRpYWxvZ1Jlc3VsdC5DTEVBUjpcbiAgICAgICAgICBjb25zdCBjb2wgPSBkaWFsb2dSZWYuY29tcG9uZW50SW5zdGFuY2UuY29sdW1uO1xuICAgICAgICAgIHRoaXMuY2xlYXJDb2x1bW5GaWx0ZXIoY29sLmF0dHIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5vblNvcnRGaWx0ZXJWYWx1ZXNDaGFuZ2Uuc3Vic2NyaWJlKHNvcnRlZEZpbHRlcmFibGVDb2x1bW4gPT4ge1xuICAgICAgLy8gZ3VhcmRhciBlbiBsb2NhbHN0b3JhZ2UgZWwgY2FtYmlvXG4gICAgICB0aGlzLnN0b3JlRmlsdGVyQ29sdW1ucyhzb3J0ZWRGaWx0ZXJhYmxlQ29sdW1uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0b3JlRmlsdGVyQ29sdW1ucyhzb3J0Q29sdW1uRmlsdGVyOiBPRmlsdGVyQ29sdW1uKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUuZmlsdGVyQ29sdW1ucykge1xuICAgICAgLy8gaWYgZXhpc3RzIGluIHN0YXRlIHRoZW4gdXBkYXRlZCBzb3J0IHZhbHVlXG4gICAgICBjb25zdCBmaWx0ZXJDb2x1bW4gPSB0aGlzLmZpbHRlckNvbHVtbnMuZmluZCh4ID0+IHguYXR0ciA9PT0gc29ydENvbHVtbkZpbHRlci5hdHRyKTtcbiAgICAgIGlmIChVdGlsLmlzRGVmaW5lZChmaWx0ZXJDb2x1bW4pKSB7XG4gICAgICAgIGZpbHRlckNvbHVtbi5zb3J0ID0gc29ydENvbHVtbkZpbHRlci5zb3J0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZWxzZSBleGlzdHMgaW4gc3RhdGUgdGhlbiBhZGRlZCBmaWx0ZXIgY29sdW1uXG4gICAgICAgIHRoaXMuZmlsdGVyQ29sdW1ucy5wdXNoKHNvcnRDb2x1bW5GaWx0ZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXRlLmZpbHRlckNvbHVtbnMgPSB0aGlzLmZpbHRlckNvbHVtbnM7XG4gIH1cblxuICBnZXRTdGFydFZpZXdGaWx0ZXJDb2x1bW4oY29sdW1uOiBPQ29sdW1uKTogJ21vbnRoJyB8ICd5ZWFyJyB8ICdtdWx0aS15ZWFyJyB8ICcnIHtcbiAgICBsZXQgc3RhcnRWaWV3O1xuICAgIC8vIGF0IGZpcnN0LCBnZXQgc3RhdGUgaW4gbG9jYWxzdG9yYWdlXG4gICAgaWYgKHRoaXMuc3RhdGUuZmlsdGVyQ29sdW1ucykge1xuICAgICAgdGhpcy5zdGF0ZS5maWx0ZXJDb2x1bW5zLmZvckVhY2goKGVsZW1lbnQ6IE9GaWx0ZXJDb2x1bW4pID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQuYXR0ciA9PT0gY29sdW1uLmF0dHIpIHtcbiAgICAgICAgICBzdGFydFZpZXcgPSBlbGVtZW50LnN0YXJ0VmlldztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZChzdGFydFZpZXcpICYmIHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCkge1xuICAgICAgc3RhcnRWaWV3ID0gdGhpcy5vVGFibGVDb2x1bW5zRmlsdGVyQ29tcG9uZW50LmdldFN0YXJ0Vmlld1ZhbHVlT2ZGaWx0ZXJDb2x1bW4oY29sdW1uLmF0dHIpO1xuICAgIH1cblxuICAgIHJldHVybiBzdGFydFZpZXc7XG4gIH1cblxuICBnZXRTb3J0RmlsdGVyQ29sdW1uKGNvbHVtbjogT0NvbHVtbik6ICdhc2MnIHwgJ2Rlc2MnIHwgJycge1xuICAgIGxldCBzb3J0Q29sdW1uO1xuICAgIC8vIGF0IGZpcnN0LCBnZXQgc3RhdGUgaW4gbG9jYWxzdG9yYWdlXG4gICAgaWYgKHRoaXMuc3RhdGUuZmlsdGVyQ29sdW1ucykge1xuICAgICAgY29uc3QgZmlsdGVyQ29sID0gdGhpcy5zdGF0ZS5maWx0ZXJDb2x1bW5zLmZpbmQoKGVsZW1lbnQ6IE9GaWx0ZXJDb2x1bW4pID0+IGVsZW1lbnQuYXR0ciA9PT0gY29sdW1uLmF0dHIpO1xuICAgICAgaWYgKGZpbHRlckNvbCkge1xuICAgICAgICBzb3J0Q29sdW1uID0gZmlsdGVyQ29sLnNvcnQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gaWYgbm90IHZhbHVlIGluIGxvY2Fsc3RvcmFnZSwgZ2V0IHNvcnQgdmFsdWUgaW4gby10YWJsZS1jb2x1bW4tZmlsdGVyLWNvbHVtbiBjb21wb25lbnRcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHNvcnRDb2x1bW4pICYmIHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudCkge1xuICAgICAgc29ydENvbHVtbiA9IHRoaXMub1RhYmxlQ29sdW1uc0ZpbHRlckNvbXBvbmVudC5nZXRTb3J0VmFsdWVPZkZpbHRlckNvbHVtbihjb2x1bW4uYXR0cik7XG4gICAgfVxuXG4gICAgLy8gaWYgZWl0aGVyIHZhbHVlIGluIG8tdGFibGUtY29sdW1uLWZpbHRlci1jb2x1bW4gb3IgbG9jYWxzdG9yYWdlLCBnZXQgc29ydCB2YWx1ZSBpbiBzb3J0Q29sQXJyYXlcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKHNvcnRDb2x1bW4pICYmIHRoaXMuc29ydENvbEFycmF5LmZpbmQoeCA9PiB4LmNvbHVtbk5hbWUgPT09IGNvbHVtbi5hdHRyKSkge1xuICAgICAgc29ydENvbHVtbiA9IHRoaXMuaXNDb2x1bW5Tb3J0QWN0aXZlKGNvbHVtbikgPyAnYXNjJyA6ICdkZXNjJztcbiAgICB9XG5cbiAgICByZXR1cm4gc29ydENvbHVtbjtcbiAgfVxuXG4gIGdldCBkaXNhYmxlVGFibGVNZW51QnV0dG9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhISh0aGlzLnBlcm1pc3Npb25zICYmIHRoaXMucGVybWlzc2lvbnMubWVudSAmJiB0aGlzLnBlcm1pc3Npb25zLm1lbnUuZW5hYmxlZCA9PT0gZmFsc2UpO1xuICB9XG5cbiAgZ2V0IHNob3dUYWJsZU1lbnVCdXR0b24oKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcGVybWlzc2lvbkhpZGRlbiA9ICEhKHRoaXMucGVybWlzc2lvbnMgJiYgdGhpcy5wZXJtaXNzaW9ucy5tZW51ICYmIHRoaXMucGVybWlzc2lvbnMubWVudS52aXNpYmxlID09PSBmYWxzZSk7XG4gICAgaWYgKHBlcm1pc3Npb25IaWRkZW4pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgc3RhdGljT3B0ID0gdGhpcy5zZWxlY3RBbGxDaGVja2JveCB8fCB0aGlzLmV4cG9ydEJ1dHRvbiB8fCB0aGlzLnNob3dDb25maWd1cmF0aW9uT3B0aW9uIHx8IHRoaXMuY29sdW1uc1Zpc2liaWxpdHlCdXR0b24gfHwgKHRoaXMuc2hvd0ZpbHRlck9wdGlvbiAmJiB0aGlzLm9UYWJsZUNvbHVtbnNGaWx0ZXJDb21wb25lbnQgIT09IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIHN0YXRpY09wdCB8fCB0aGlzLnRhYmxlT3B0aW9ucy5sZW5ndGggPiAwO1xuICB9XG5cbiAgc2V0T1RhYmxlSW5zZXJ0YWJsZVJvdyh0YWJsZUluc2VydGFibGVSb3c6IE9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQpIHtcbiAgICBjb25zdCBpbnNlcnRQZXJtOiBPUGVybWlzc2lvbnMgPSB0aGlzLmdldEFjdGlvblBlcm1pc3Npb25zKFBlcm1pc3Npb25zVXRpbHMuQUNUSU9OX0lOU0VSVCk7XG4gICAgaWYgKGluc2VydFBlcm0udmlzaWJsZSkge1xuICAgICAgdGFibGVJbnNlcnRhYmxlUm93LmVuYWJsZWQgPSBpbnNlcnRQZXJtLmVuYWJsZWQ7XG4gICAgICB0aGlzLm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQgPSB0YWJsZUluc2VydGFibGVSb3c7XG4gICAgICB0aGlzLnNob3dGaXJzdEluc2VydGFibGVSb3cgPSB0aGlzLm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuaXNGaXJzdFJvdygpO1xuICAgICAgdGhpcy5zaG93TGFzdEluc2VydGFibGVSb3cgPSAhdGhpcy5zaG93Rmlyc3RJbnNlcnRhYmxlUm93O1xuICAgICAgdGhpcy5vVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LmluaXRpYWxpemVFZGl0b3JzKCk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXJTZWxlY3Rpb25BbmRFZGl0aW5nKGNsZWFyU2VsZWN0aW9uOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGlmIChjbGVhclNlbGVjdGlvbikge1xuICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgIH1cbiAgICB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnNcbiAgICAgIC5maWx0ZXIob0NvbHVtbiA9PiBvQ29sdW1uLmVkaXRpbmcpXG4gICAgICAuZm9yRWFjaChvQ29sdW1uID0+IHtcbiAgICAgICAgb0NvbHVtbi5lZGl0aW5nID0gZmFsc2U7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjaGVja1NlbGVjdGVkSXRlbURhdGEoKSB7XG4gICAgdGhpcy50cmlnZ2VyU2VsZWN0aW9uRXZlbnRzID0gZmFsc2U7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUuc2VsZWN0aW9uKSAmJiB0aGlzLnN0YXRlLnNlbGVjdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnN0YXRlLnNlbGVjdGlvbi5mb3JFYWNoKHNlbGVjdGVkSXRlbSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbUtleXMgPSBPYmplY3Qua2V5cyhzZWxlY3RlZEl0ZW0pO1xuICAgICAgICAvLyBmaW5kaW5nIHNlbGVjdGVkIGl0ZW0gZGF0YSBpbiB0aGUgdGFibGUgcmVuZGVyZWQgZGF0YVxuICAgICAgICBjb25zdCBmb3VuZEl0ZW0gPSB0aGlzLmRhdGFTb3VyY2UucmVuZGVyZWREYXRhLmZpbmQoZGF0YSA9PlxuICAgICAgICAgIHNlbGVjdGVkSXRlbUtleXMuZXZlcnkoa2V5ID0+IGRhdGFba2V5XSA9PT0gc2VsZWN0ZWRJdGVtW2tleV0pXG4gICAgICAgICk7XG4gICAgICAgIGlmIChmb3VuZEl0ZW0pIHtcbiAgICAgICAgICB0aGlzLnNldFNlbGVjdGVkKGZvdW5kSXRlbSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnRyaWdnZXJTZWxlY3Rpb25FdmVudHMgPSB0cnVlO1xuICB9XG5cbiAgdXNlRGV0YWlsQnV0dG9uKGNvbHVtbjogT0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb2x1bW4udHlwZSA9PT0gJ2VkaXRCdXR0b25JblJvdycgfHwgY29sdW1uLnR5cGUgPT09ICdkZXRhaWxCdXR0b25JblJvdyc7XG4gIH1cblxuICBvbkRldGFpbEJ1dHRvbkNsaWNrKGNvbHVtbjogT0NvbHVtbiwgcm93OiBhbnksIGV2ZW50OiBhbnkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2VkaXRCdXR0b25JblJvdyc6XG4gICAgICAgIHRoaXMuZWRpdERldGFpbChyb3cpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2RldGFpbEJ1dHRvbkluUm93JzpcbiAgICAgICAgdGhpcy52aWV3RGV0YWlsKHJvdyk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGdldERldGFpbEJ1dHRvbkljb24oY29sdW1uOiBPQ29sdW1uKSB7XG4gICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgIHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcbiAgICAgIGNhc2UgJ2VkaXRCdXR0b25JblJvdyc6XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuZWRpdEJ1dHRvbkluUm93SWNvbjtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdkZXRhaWxCdXR0b25JblJvdyc6XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuZGV0YWlsQnV0dG9uSW5Sb3dJY29uO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHVzZVBsYWluUmVuZGVyKGNvbHVtbjogT0NvbHVtbiwgcm93OiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudXNlRGV0YWlsQnV0dG9uKGNvbHVtbikgJiYgIWNvbHVtbi5yZW5kZXJlciAmJiAoIWNvbHVtbi5lZGl0b3IgfHwgKCFjb2x1bW4uZWRpdGluZyB8fCAhdGhpcy5pc1Jvd1NlbGVjdGVkKHJvdykpKTtcbiAgfVxuXG4gIHVzZUNlbGxSZW5kZXJlcihjb2x1bW46IE9Db2x1bW4sIHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNvbHVtbi5yZW5kZXJlciAmJiAoIWNvbHVtbi5lZGl0aW5nIHx8IGNvbHVtbi5lZGl0aW5nICYmICF0aGlzLmlzUm93U2VsZWN0ZWQocm93KSk7XG4gIH1cblxuICB1c2VDZWxsRWRpdG9yKGNvbHVtbjogT0NvbHVtbiwgcm93OiBhbnkpOiBib29sZWFuIHtcbiAgICAvLyBUT0RPIEFkZCBjb2x1bW4uZWRpdG9yIGluc3RhbmNlb2YgT1RhYmxlQ2VsbEVkaXRvckJvb2xlYW5Db21wb25lbnQgdG8gY29uZGl0aW9uXG4gICAgaWYgKGNvbHVtbi5lZGl0b3IgJiYgY29sdW1uLmVkaXRvci5hdXRvQ29tbWl0KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiBjb2x1bW4uZWRpdG9yICYmIGNvbHVtbi5lZGl0aW5nICYmIHRoaXMuaXNSb3dTZWxlY3RlZChyb3cpO1xuICB9XG5cbiAgaXNTZWxlY3Rpb25Nb2RlTXVsdGlwbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gQ29kZXMuU0VMRUNUSU9OX01PREVfTVVMVElQTEU7XG4gIH1cblxuICBpc1NlbGVjdGlvbk1vZGVTaW5nbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gQ29kZXMuU0VMRUNUSU9OX01PREVfU0lOR0xFO1xuICB9XG5cbiAgaXNTZWxlY3Rpb25Nb2RlTm9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlID09PSBDb2Rlcy5TRUxFQ1RJT05fTU9ERV9OT05FO1xuICB9XG5cbiAgb25DaGFuZ2VQYWdlKGV2dDogUGFnZUV2ZW50KSB7XG4gICAgdGhpcy5maW5pc2hRdWVyeVN1YnNjcmlwdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuZGF0YVNlcnZpY2U/LnNldFBhZ2luYXRpb25Db250ZXh0KHsgcGFnZU51bWJlcjogZXZ0LnBhZ2VJbmRleCwgcGFnZVNpemU6IGV2dC5wYWdlU2l6ZSB9KTtcbiAgICBpZiAoIXRoaXMucGFnZWFibGUpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBldnQucGFnZUluZGV4O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGdvaW5nQmFjayA9IGV2dC5wYWdlSW5kZXggPCB0aGlzLmN1cnJlbnRQYWdlO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSBldnQucGFnZUluZGV4O1xuICAgIGNvbnN0IHBhZ2VTaXplID0gdGhpcy5wYWdpbmF0b3IuaXNTaG93aW5nQWxsUm93cyhldnQucGFnZVNpemUpID8gdGhpcy5zdGF0ZS50b3RhbFF1ZXJ5UmVjb3Jkc051bWJlciA6IGV2dC5wYWdlU2l6ZTtcblxuICAgIGNvbnN0IG9sZFF1ZXJ5Um93cyA9IHRoaXMucXVlcnlSb3dzO1xuICAgIGNvbnN0IGNoYW5naW5nUGFnZVNpemUgPSAob2xkUXVlcnlSb3dzICE9PSBwYWdlU2l6ZSk7XG4gICAgdGhpcy5xdWVyeVJvd3MgPSBwYWdlU2l6ZTtcbiAgICB0aGlzLnBhZ2luYXRvci5wYWdlU2l6ZSA9IHBhZ2VTaXplO1xuXG4gICAgbGV0IG5ld1N0YXJ0UmVjb3JkOiBudW1iZXI7XG4gICAgbGV0IHF1ZXJ5TGVuZ3RoOiBudW1iZXI7XG5cbiAgICBpZiAoZ29pbmdCYWNrIHx8IGNoYW5naW5nUGFnZVNpemUpIHtcbiAgICAgIG5ld1N0YXJ0UmVjb3JkID0gKHRoaXMuY3VycmVudFBhZ2UgKiB0aGlzLnF1ZXJ5Um93cyk7XG4gICAgICBxdWVyeUxlbmd0aCA9IHRoaXMucXVlcnlSb3dzO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTdGFydFJlY29yZCA9IE1hdGgubWF4KHRoaXMuc3RhdGUucXVlcnlSZWNvcmRPZmZzZXQsICh0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5xdWVyeVJvd3MpKTtcbiAgICAgIGNvbnN0IG5ld0VuZFJlY29yZCA9IE1hdGgubWluKG5ld1N0YXJ0UmVjb3JkICsgdGhpcy5xdWVyeVJvd3MsIHRoaXMuc3RhdGUudG90YWxRdWVyeVJlY29yZHNOdW1iZXIpO1xuICAgICAgcXVlcnlMZW5ndGggPSB0aGlzLmRpc2FibGVQYWdlU2l6ZUNhbGN1bGF0aW9uID8gdGhpcy5xdWVyeVJvd3MgOiBNYXRoLm1pbih0aGlzLnF1ZXJ5Um93cywgbmV3RW5kUmVjb3JkIC0gbmV3U3RhcnRSZWNvcmQpO1xuICAgIH1cblxuICAgIGNvbnN0IHF1ZXJ5QXJnczogT1F1ZXJ5RGF0YUFyZ3MgPSB7XG4gICAgICBvZmZzZXQ6IG5ld1N0YXJ0UmVjb3JkLFxuICAgICAgbGVuZ3RoOiBxdWVyeUxlbmd0aFxuICAgIH07XG5cbiAgICB0aGlzLmZpbmlzaFF1ZXJ5U3Vic2NyaXB0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5xdWVyeURhdGEodm9pZCAwLCBxdWVyeUFyZ3MpO1xuICB9XG5cbiAgZ2V0T0NvbHVtbihhdHRyOiBzdHJpbmcpOiBPQ29sdW1uIHtcbiAgICByZXR1cm4gdGhpcy5fb1RhYmxlT3B0aW9ucyA/IHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5maW5kKGl0ZW0gPT4gaXRlbS5uYW1lID09PSBhdHRyKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGluc2VydFJlY29yZChyZWNvcmREYXRhOiBhbnksIHNxbFR5cGVzPzogb2JqZWN0KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBpZiAodGhpcy5yZWFkT25seSkge1xuICAgICAgaWYgKHRoaXMuc2hvd05vdGlmaWNhdGlvbk9mUmVhZE9ubHkpIHtcbiAgICAgICAgdGhpcy5zbmFja0JhclNlcnZpY2Uub3BlbignTUVTU0FHRVMuT1BFUkFUSU9OX05PVF9BTExPV0VEX1JFQURPTkxZJyk7XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEluc2VydCBvcGVyYXRpb24gaXMgbm90IGFsbG93ZWQgYmVjYXVzZSB0aGUgdGFibGUgaXMgcmVhZC1vbmx5LmApXG4gICAgfVxuICAgIGlmICghdGhpcy5jaGVja0VuYWJsZWRBY3Rpb25QZXJtaXNzaW9uKFBlcm1pc3Npb25zVXRpbHMuQUNUSU9OX0lOU0VSVCkpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICghVXRpbC5pc0RlZmluZWQoc3FsVHlwZXMpKSB7XG4gICAgICBjb25zdCBhbGxTcWxUeXBlcyA9IHRoaXMuZ2V0U3FsVHlwZXMoKTtcbiAgICAgIHNxbFR5cGVzID0ge307XG4gICAgICBPYmplY3Qua2V5cyhyZWNvcmREYXRhKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHNxbFR5cGVzW2tleV0gPSBhbGxTcWxUeXBlc1trZXldO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRhb1RhYmxlLmluc2VydFF1ZXJ5KHJlY29yZERhdGEsIHNxbFR5cGVzKTtcbiAgfVxuXG4gIHVwZGF0ZVJlY29yZChmaWx0ZXI6IGFueSwgdXBkYXRlRGF0YTogYW55LCBzcWxUeXBlcz86IG9iamVjdCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIGlmICh0aGlzLnNob3dOb3RpZmljYXRpb25PZlJlYWRPbmx5KSB7XG4gICAgICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlLm9wZW4oJ01FU1NBR0VTLk9QRVJBVElPTl9OT1RfQUxMT1dFRF9SRUFET05MWScpO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVcGRhdGUgb3BlcmF0aW9uIGlzIG5vdCBhbGxvd2VkIGJlY2F1c2UgdGhlIHRhYmxlIGlzIHJlYWQtb25seS5gKVxuICAgIH1cblxuICAgIGlmICghdGhpcy5jaGVja0VuYWJsZWRBY3Rpb25QZXJtaXNzaW9uKFBlcm1pc3Npb25zVXRpbHMuQUNUSU9OX1VQREFURSkpIHtcbiAgICAgIHJldHVybiBvZih0aGlzLmRhdGFTb3VyY2UuZGF0YSk7XG4gICAgfVxuICAgIGNvbnN0IHNxbFR5cGVzQXJnID0gc3FsVHlwZXMgfHwge307XG4gICAgaWYgKCFVdGlsLmlzRGVmaW5lZChzcWxUeXBlcykpIHtcbiAgICAgIGNvbnN0IGFsbFNxbFR5cGVzID0gdGhpcy5nZXRTcWxUeXBlcygpO1xuICAgICAgT2JqZWN0LmtleXMoZmlsdGVyKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHNxbFR5cGVzQXJnW2tleV0gPSBhbGxTcWxUeXBlc1trZXldO1xuICAgICAgfSk7XG4gICAgICBPYmplY3Qua2V5cyh1cGRhdGVEYXRhKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIHNxbFR5cGVzQXJnW2tleV0gPSBhbGxTcWxUeXBlc1trZXldO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRhb1RhYmxlLnVwZGF0ZVF1ZXJ5KGZpbHRlciwgdXBkYXRlRGF0YSwgc3FsVHlwZXNBcmcpO1xuICB9XG5cblxuICAvKipcbiAgICogR2V0cyBkYXRhIHRhYmxlXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBnZXREYXRhQXJyYXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGFvVGFibGUuZGF0YTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFNldHMgZGF0YSB0YWJsZSB3aGVuIGlzIHN0YXRpYyAoT05MWSBJTiBUSElTIENBU0UpXG4gICAqIEBwYXJhbSBkYXRhXG4gICAqL1xuICBzZXREYXRhQXJyYXkoZGF0YTogQXJyYXk8YW55Pikge1xuICAgIGlmICh0aGlzLmRhb1RhYmxlKSB7XG4gICAgICAvLyByZW1vdGUgcGFnaW5hdGlvbiBoYXMgbm8gc2Vuc2Ugd2hlbiB1c2luZyBzdGF0aWMtZGF0YVxuICAgICAgdGhpcy5wYWdlYWJsZSA9IGZhbHNlO1xuICAgICAgdGhpcy5zdGF0aWNEYXRhID0gZGF0YTtcbiAgICAgIHRoaXMuZGFvVGFibGUudXNpbmdTdGF0aWNEYXRhID0gdHJ1ZTtcbiAgICAgIHRoaXMuZGFvVGFibGUuc2V0RGF0YUFycmF5KHRoaXMuc3RhdGljRGF0YSk7XG4gICAgICB0aGlzLm9uRGF0YUxvYWRlZC5lbWl0KHRoaXMuZGFvVGFibGUuZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGRlbGV0ZUxvY2FsSXRlbXMoKSB7XG4gICAgY29uc3QgZGF0YUFycmF5ID0gdGhpcy5nZXREYXRhQXJyYXkoKTtcbiAgICBjb25zdCBzZWxlY3RlZEl0ZW1zID0gdGhpcy5nZXRTZWxlY3RlZEl0ZW1zKCk7XG4gICAgc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKChzZWxlY3RlZEl0ZW06IGFueSkgPT4ge1xuICAgICAgZm9yIChsZXQgaiA9IGRhdGFBcnJheS5sZW5ndGggLSAxOyBqID49IDA7IC0taikge1xuICAgICAgICBpZiAoVXRpbC5lcXVhbHMoc2VsZWN0ZWRJdGVtLCBkYXRhQXJyYXlbal0pKSB7XG4gICAgICAgICAgZGF0YUFycmF5LnNwbGljZShqLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICB0aGlzLnNldERhdGFBcnJheShkYXRhQXJyYXkpO1xuICB9XG5cbiAgaXNDb2x1bW5Tb3J0QWN0aXZlKGNvbHVtbjogT0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZvdW5kID0gdGhpcy5zb3J0Q29sQXJyYXkuZmluZChzb3J0QyA9PiBzb3J0Qy5jb2x1bW5OYW1lID09PSBjb2x1bW4uYXR0cik7XG4gICAgcmV0dXJuIGZvdW5kICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBpc0NvbHVtbkRlc2NTb3J0QWN0aXZlKGNvbHVtbjogT0NvbHVtbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGZvdW5kID0gdGhpcy5zb3J0Q29sQXJyYXkuZmluZChzb3J0QyA9PiBzb3J0Qy5jb2x1bW5OYW1lID09PSBjb2x1bW4uYXR0ciAmJiAhc29ydEMuYXNjZW5kZW50KTtcbiAgICByZXR1cm4gZm91bmQgIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGhhc1RhYkdyb3VwQ2hhbmdlU3Vic2NyaXB0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRhYkdyb3VwQ2hhbmdlU3Vic2NyaXB0aW9uICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBpc0VtcHR5KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIVV0aWwuaXNEZWZpbmVkKHZhbHVlKSB8fCAoKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpICYmICF2YWx1ZSk7XG4gIH1cblxuICBzZXRGaWx0ZXJzQ29uZmlndXJhdGlvbihzdG9yYWdlOiBPVGFibGVDb21wb25lbnRTdGF0ZUNsYXNzID0gdGhpcy5zdGF0ZSkge1xuICAgIC8qXG4gICAgICBDaGVja2luZyB0aGUgb3JpZ2luYWwgZmlsdGVyQ2FzZVNlbnNpdGl2ZSB3aXRoIHRoZSBmaWx0ZXJDYXNlU2Vuc2l0aXZlIGluIGluaXRpYWwgY29uZmlndXJhdGlvbiBpbiBsb2NhbCBzdG9yYWdlXG4gICAgICBpZiBmaWx0ZXJDYXNlU2Vuc2l0aXZlIGluIGluaXRpYWwgY29uZmlndXJhdGlvbiBpcyBlcXVhbHMgdG8gb3JpZ2luYWwgZmlsdGVyQ2FzZVNlbnNpdGl2ZSBpbnB1dFxuICAgICAgZmlsdGVyQ2FzZVNlbnNpdGl2ZSB3aWxsIGJlIHRoZSB2YWx1ZSBpbiBsb2NhbCBzdG9yYWdlXG4gICAgKi9cbiAgICBpZiAoc3RvcmFnZS5pbml0aWFsQ29uZmlndXJhdGlvbi5maWx0ZXJDYXNlU2Vuc2l0aXZlICE9PSB0aGlzLmZpbHRlckNhc2VTZW5zaXRpdmUpIHtcbiAgICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuZmlsdGVyQ2FzZVNlbnNpdGl2ZSA9IHRoaXMuZmlsdGVyQ2FzZVNlbnNpdGl2ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5maWx0ZXJDYXNlU2Vuc2l0aXZlID0gc3RvcmFnZS5oYXNPd25Qcm9wZXJ0eSgnZmlsdGVyLWNhc2Utc2Vuc2l0aXZlJykgPyBzdG9yYWdlWydmaWx0ZXItY2FzZS1zZW5zaXRpdmUnXSA6IHRoaXMuZmlsdGVyQ2FzZVNlbnNpdGl2ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RvcmFnZS5pbml0aWFsQ29uZmlndXJhdGlvbi5maWx0ZXJDb2x1bW5BY3RpdmVCeURlZmF1bHQgIT09IHRoaXMuZmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0KSB7XG4gICAgICB0aGlzLmlzQ29sdW1uRmlsdGVyc0FjdGl2ZSA9IHRoaXMuZmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb25mRmlsdGVyQ29sdW1uQWN0aXZlQnlEZWZhdWx0ID0gc3RvcmFnZS5oYXNPd25Qcm9wZXJ0eSgnZmlsdGVyLWNvbHVtbi1hY3RpdmUnKSA/IHN0b3JhZ2VbJ2ZpbHRlci1jb2x1bW4tYWN0aXZlJ10gOiB0aGlzLmZpbHRlckNvbHVtbkFjdGl2ZUJ5RGVmYXVsdDtcbiAgICAgIHRoaXMuaXNDb2x1bW5GaWx0ZXJzQWN0aXZlID0gY29uZkZpbHRlckNvbHVtbkFjdGl2ZUJ5RGVmYXVsdCB8fCB0aGlzLnN0YXRlLmNvbHVtblZhbHVlRmlsdGVycy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGlmIChVdGlsLmlzRGVmaW5lZChzdG9yYWdlLmNvbHVtblZhbHVlRmlsdGVycykpIHtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZS5pbml0aWFsaXplQ29sdW1uc0ZpbHRlcnModGhpcy5zdGF0ZS5jb2x1bW5WYWx1ZUZpbHRlcnMpO1xuICAgICAgdGhpcy5vbkZpbHRlckJ5Q29sdW1uQ2hhbmdlLmVtaXQoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudCkge1xuICAgICAgdGhpcy5vVGFibGVRdWlja0ZpbHRlckNvbXBvbmVudC5zZXRWYWx1ZShzdG9yYWdlWydmaWx0ZXInXSk7XG4gICAgICAoc3RvcmFnZVsnb0NvbHVtbnMnXSB8fCBbXSkuZm9yRWFjaCgob0NvbERhdGE6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBvQ29sID0gdGhpcy5nZXRPQ29sdW1uKG9Db2xEYXRhLmF0dHIpO1xuICAgICAgICBpZiAob0NvbCAmJiBvQ29sRGF0YS5oYXNPd25Qcm9wZXJ0eSgnc2VhcmNoaW5nJykpIHtcbiAgICAgICAgICBvQ29sLnNlYXJjaGluZyA9IG9Db2xEYXRhLnNlYXJjaGluZztcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZmlsdGVyQnVpbGRlciAmJiBVdGlsLmlzRGVmaW5lZChzdG9yYWdlLmZpbHRlckJ1aWxkZXJWYWx1ZXMpKSB7XG4gICAgICB0aGlzLmZpbHRlckJ1aWxkZXIuc2V0RmlsdGVyVmFsdWVzKHN0b3JhZ2UuZmlsdGVyQnVpbGRlclZhbHVlcyk7XG4gICAgICB0aGlzLmZpbHRlckJ1aWxkZXIudHJpZ2dlclJlbG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uU3RvcmVDb25maWd1cmF0aW9uQ2xpY2tlZCgpIHtcbiAgICBpZiAodGhpcy5vVGFibGVNZW51KSB7XG4gICAgICB0aGlzLm9UYWJsZU1lbnUub25TdG9yZUNvbmZpZ3VyYXRpb25DbGlja2VkKCk7XG4gICAgfVxuICB9XG5cbiAgb25BcHBseUNvbmZpZ3VyYXRpb25DbGlja2VkKCkge1xuICAgIGlmICh0aGlzLm9UYWJsZU1lbnUpIHtcbiAgICAgIHRoaXMub1RhYmxlTWVudS5vbkFwcGx5Q29uZmlndXJhdGlvbkNsaWNrZWQoKTtcbiAgICB9XG4gIH1cblxuICBhcHBseURlZmF1bHRDb25maWd1cmF0aW9uKCkge1xuICAgIHRoaXMuaW5pdGlhbGl6ZVBhcmFtcygpO1xuICAgIHRoaXMucGFyc2VWaXNpYmxlQ29sdW1ucyh0cnVlKTtcbiAgICB0aGlzLnJlZnJlc2hDb2x1bW5zV2lkdGhGcm9tT3JpZ2luYWxEZWZpbml0aW9uKCk7XG4gICAgdGhpcy5yZWluaXRpYWxpemF0ZVF1aWNrRmlsdGVyQ29sdW1ucygpO1xuICAgIHRoaXMucmVzZXRRdWVyeVJvd3MoKTtcbiAgICBjb25zdCBpbml0aWFsQ29uZmlnU29ydENvbHVtbnNBcnJheSA9IFNlcnZpY2VVdGlscy5wYXJzZVNvcnRDb2x1bW5zKHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uc29ydENvbHVtbnMpO1xuICAgIHRoaXMucmVpbml0aWFsaXplU29ydENvbHVtbnMoaW5pdGlhbENvbmZpZ1NvcnRDb2x1bW5zQXJyYXkpO1xuICAgIHRoaXMub25SZWluaXRpYWxpemUuZW1pdChudWxsKTtcbiAgICB0aGlzLmNsZWFyRmlsdGVycyhmYWxzZSk7XG4gICAgdGhpcy5yZWxvYWREYXRhKCk7XG4gIH1cbiAgcmVzZXRRdWVyeVJvd3MoKSB7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24ucXVlcnlSb3dzKSkge1xuICAgICAgdGhpcy5xdWVyeVJvd3MgPSB0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLnF1ZXJ5Um93cztcbiAgICB9XG4gIH1cbiAgYXBwbHlDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb25OYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzdG9yZWRDb25maWd1cmF0aW9uID0gdGhpcy5zdGF0ZS5nZXRTdG9yZWRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb25OYW1lKTtcbiAgICBpZiAoc3RvcmVkQ29uZmlndXJhdGlvbikge1xuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHN0b3JlZENvbmZpZ3VyYXRpb25bJ3N0b3JlZC1wcm9wZXJ0aWVzJ10gfHwgW107XG5cbiAgICAgIHByb3BlcnRpZXMuZm9yRWFjaChwcm9wZXJ0eSA9PiB7XG4gICAgICAgIHN3aXRjaCAocHJvcGVydHkpIHtcbiAgICAgICAgICBjYXNlICdzb3J0LWNvbHVtbnMnOlxuICAgICAgICAgICAgdGhpcy5yZWluaXRpYWxpemVTb3J0Q29sdW1ucygpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnb0NvbHVtbnMtZGlzcGxheSc6XG4gICAgICAgICAgICB0aGlzLnBhcnNlVmlzaWJsZUNvbHVtbnMoKTtcbiAgICAgICAgICAgIHRoaXMuaW5pdGlhbGl6ZUNoZWNrYm94Q29sdW1uKCk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hDb2x1bW5zV2lkdGhGcm9tTG9jYWxTdG9yYWdlKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdxdWljay1maWx0ZXInOlxuICAgICAgICAgIGNhc2UgJ2NvbHVtbnMtZmlsdGVyJzpcbiAgICAgICAgICBjYXNlICdmaWx0ZXItYnVpbGRlcic6XG4gICAgICAgICAgICB0aGlzLnNldEZpbHRlcnNDb25maWd1cmF0aW9uKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdncm91cGVkLWNvbHVtbnMnOlxuICAgICAgICAgICAgdGhpcy5wYXJzZUdyb3VwZWRDb2x1bW5zKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdwYWdlJzpcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnN0YXRlLmN1cnJlbnRQYWdlO1xuICAgICAgICAgICAgdGhpcy5xdWVyeVJvd3MgPSB0aGlzLnN0YXRlLnF1ZXJ5Um93cztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMucmVsb2FkRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIGdldFRpdGxlQWxpZ25DbGFzcyhvQ29sOiBPQ29sdW1uKSB7XG5cbiAgICBjb25zdCBoYXNUaXRsZUFsaWduID0gVXRpbC5pc0RlZmluZWQob0NvbC5kZWZpbml0aW9uKSAmJiBVdGlsLmlzRGVmaW5lZChvQ29sLmRlZmluaXRpb24udGl0bGVBbGlnbik7XG4gICAgY29uc3QgYXV0b0FsaWduID0gKHRoaXMuYXV0b0FsaWduVGl0bGVzICYmICFoYXNUaXRsZUFsaWduKSB8fCAoaGFzVGl0bGVBbGlnbiAmJiBvQ29sLmRlZmluaXRpb24udGl0bGVBbGlnbiA9PT0gQ29kZXMuQ09MVU1OX1RJVExFX0FMSUdOX0FVVE8pO1xuICAgIGlmICghYXV0b0FsaWduKSB7XG4gICAgICByZXR1cm4gb0NvbC5nZXRUaXRsZUFsaWduQ2xhc3MoKTtcbiAgICB9XG5cbiAgICBsZXQgYWxpZ24gPSB0aGlzLmdldENlbGxBbGlnbkNsYXNzKG9Db2wpO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChhbGlnbikgJiYgYWxpZ24ubGVuZ3RoID4gMCkge1xuICAgICAgYWxpZ24gPSBhbGlnbi5zdWJzdHJpbmcoMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN3aXRjaCAob0NvbC50eXBlKSB7XG4gICAgICAgIGNhc2UgJ2ltYWdlJzpcbiAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgIGNhc2UgJ2FjdGlvbic6XG4gICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgIGFsaWduID0gQ29kZXMuQ09MVU1OX1RJVExFX0FMSUdOX0NFTlRFUjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnY3VycmVuY3knOlxuICAgICAgICBjYXNlICdpbnRlZ2VyJzpcbiAgICAgICAgY2FzZSAncmVhbCc6XG4gICAgICAgIGNhc2UgJ3BlcmNlbnRhZ2UnOlxuICAgICAgICAgIGFsaWduID0gQ29kZXMuQ09MVU1OX1RJVExFX0FMSUdOX0VORDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnc2VydmljZSc6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYWxpZ24gPSBDb2Rlcy5DT0xVTU5fVElUTEVfQUxJR05fU1RBUlQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhbGlnbjtcblxuICB9XG5cbiAgcHVibGljIGdldENlbGxBbGlnbkNsYXNzKGNvbHVtbjogT0NvbHVtbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIFV0aWwuaXNEZWZpbmVkKGNvbHVtbi5kZWZpbml0aW9uKSAmJiBVdGlsLmlzRGVmaW5lZChjb2x1bW4uZGVmaW5pdGlvbi5jb250ZW50QWxpZ24pID8gJ28tJyArIGNvbHVtbi5kZWZpbml0aW9uLmNvbnRlbnRBbGlnbiA6ICcnO1xuICB9XG5cblxuICBwdWJsaWMgZ2V0R3JvdXBIZWFkZXJDZWxsQWxpZ25DbGFzcyhjb2x1bW46IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjbGFzc05hbWVBcnJheSA9IFtdO1xuICAgIGNvbnN0IG9Db2wgPSB0aGlzLmdldE9Db2x1bW4oY29sdW1uLnN1YnN0cignZ3JvdXBIZWFkZXItJy5sZW5ndGgpKTtcbiAgICBpZiAoVXRpbC5pc0RlZmluZWQob0NvbCkpIHtcbiAgICAgIGNsYXNzTmFtZUFycmF5LnB1c2godGhpcy5nZXRDZWxsQWxpZ25DbGFzcyhvQ29sKSk7XG4gICAgICBjbGFzc05hbWVBcnJheS5wdXNoKG9Db2wuY2xhc3NOYW1lID8gb0NvbC5jbGFzc05hbWUgOiAnJyk7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc05hbWVBcnJheTtcbiAgfVxuXG4gIHByb3RlY3RlZCBhZGREZWZhdWx0Um93QnV0dG9ucygpIHtcbiAgICAvLyBjaGVjayBwZXJtaXNzaW9uc1xuICAgIGlmICh0aGlzLmVkaXRCdXR0b25JblJvdykge1xuICAgICAgdGhpcy5hZGRCdXR0b25JblJvdygnZWRpdEJ1dHRvbkluUm93Jyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRldGFpbEJ1dHRvbkluUm93KSB7XG4gICAgICB0aGlzLmFkZEJ1dHRvbkluUm93KCdkZXRhaWxCdXR0b25JblJvdycpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBhZGRCdXR0b25JblJvdyhuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjb2xEZWY6IE9Db2x1bW4gPSB0aGlzLmNyZWF0ZU9Db2x1bW4obmFtZSwgdGhpcyk7XG4gICAgY29sRGVmLnR5cGUgPSBuYW1lO1xuICAgIGNvbERlZi52aXNpYmxlID0gdHJ1ZTtcbiAgICBjb2xEZWYuc2VhcmNoYWJsZSA9IGZhbHNlO1xuICAgIGNvbERlZi5vcmRlcmFibGUgPSBmYWxzZTtcbiAgICBjb2xEZWYucmVzaXphYmxlID0gZmFsc2U7XG4gICAgY29sRGVmLmdyb3VwYWJsZSA9IGZhbHNlO1xuICAgIGNvbERlZi50aXRsZSA9IHVuZGVmaW5lZDtcbiAgICBjb2xEZWYud2lkdGggPSAnNDhweCc7XG4gICAgdGhpcy5wdXNoT0NvbHVtbkRlZmluaXRpb24oY29sRGVmKTtcbiAgICB0aGlzLl9vVGFibGVPcHRpb25zLnZpc2libGVDb2x1bW5zLnB1c2gobmFtZSk7XG4gIH1cblxuICBnZXQgaGVhZGVySGVpZ2h0KCkge1xuICAgIGxldCBoZWlnaHQgPSAwO1xuICAgIGlmICh0aGlzLnRhYmxlSGVhZGVyRWw/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGhlaWdodCArPSB0aGlzLnRhYmxlSGVhZGVyRWwubmF0aXZlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgfVxuICAgIGlmICh0aGlzLnRhYmxlVG9vbGJhckVsPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICBoZWlnaHQgKz0gdGhpcy50YWJsZVRvb2xiYXJFbC5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICB9XG4gICAgcmV0dXJuIGhlaWdodDtcbiAgfVxuXG4gIGdldCB0b29sQmFySGVpZ2h0KCkge1xuICAgIGxldCBoZWlnaHQgPSAwO1xuXG4gICAgaWYgKHRoaXMudGFibGVUb29sYmFyRWw/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGhlaWdodCArPSB0aGlzLnRhYmxlVG9vbGJhckVsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIH1cbiAgICByZXR1cm4gaGVpZ2h0O1xuICB9XG5cbiAgaXNEZXRhaWxNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRldGFpbE1vZGUgIT09IENvZGVzLkRFVEFJTF9NT0RFX05PTkU7XG4gIH1cblxuICBjb3B5QWxsKCkge1xuICAgIFV0aWwuY29weVRvQ2xpcGJvYXJkKEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0UmVuZGVyZWRWYWx1ZSgpKSk7XG4gIH1cblxuICBjb3B5U2VsZWN0aW9uKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLmRhdGFTb3VyY2UuZ2V0UmVuZGVyZWREYXRhKHRoaXMuZ2V0U2VsZWN0ZWRJdGVtcygpKTtcbiAgICBVdGlsLmNvcHlUb0NsaXBib2FyZChKU09OLnN0cmluZ2lmeShzZWxlY3RlZEl0ZW1zKSk7XG4gIH1cblxuICBkZXN0cm95QWN0aXZlZFRvb2x0aXBzKCkge1xuICAgIHRoaXMudG9vbHRpcC5mb3JFYWNoKHRwID0+IHtcbiAgICAgIGlmICh0cC5fb3ZlcmxheVJlZikge1xuICAgICAgICB0cC5fb3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBuYXZpZ2F0aW9uIHRvIGl0ZW0gZGV0YWlsLCByZWNlaXZpbmcgaXRlbSBkYXRhXG4gICAqIEBwYXJhbSBpdGVtXG4gICAqIEByZXR1cm5zIGRldGFpbFxuICAgKi9cbiAgdmlld0RldGFpbChpdGVtOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWFkT25seSAmJiB0aGlzLnNob3dOb3RpZmljYXRpb25PZlJlYWRPbmx5KSB7XG4gICAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuKCdNRVNTQUdFUy5PUEVSQVRJT05fTk9UX0FMTE9XRURfUkVBRE9OTFknKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuY2hlY2tFbmFibGVkQWN0aW9uUGVybWlzc2lvbignZGV0YWlsJykgfHwgdGhpcy5yZWFkT25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmRlc3Ryb3lBY3RpdmVkVG9vbHRpcHMoKTtcbiAgICBzdXBlci52aWV3RGV0YWlsKGl0ZW0pO1xuICB9XG5cblxuICAvKipcbiAgICogVHJpZ2dlcnMgbmF2aWdhdGlvbiB0byBpdGVtIGVkaXRpb24sIHJlY2VpdmluZyBpdGVtIGRhdGFcbiAgICogQHBhcmFtIGl0ZW1cbiAgICogQHJldHVybnMgZGV0YWlsXG4gICAqL1xuICBlZGl0RGV0YWlsKGl0ZW06IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlYWRPbmx5ICYmIHRoaXMuc2hvd05vdGlmaWNhdGlvbk9mUmVhZE9ubHkpIHtcbiAgICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlLm9wZW4oJ01FU1NBR0VTLk9QRVJBVElPTl9OT1RfQUxMT1dFRF9SRUFET05MWScpO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5jaGVja0VuYWJsZWRBY3Rpb25QZXJtaXNzaW9uKCdlZGl0JykgfHwgdGhpcy5yZWFkT25seSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdXBlci5lZGl0RGV0YWlsKGl0ZW0pO1xuICB9XG5cbiAgZ2V0T0NvbHVtbkZyb21UaCh0aDogYW55KTogT0NvbHVtbiB7XG4gICAgbGV0IHJlc3VsdDogT0NvbHVtbjtcbiAgICBjb25zdCBjbGFzc0xpc3Q6IGFueVtdID0gQXJyYXkuZnJvbSgodGggYXMgRWxlbWVudCkuY2xhc3NMaXN0IHx8IFtdKTtcbiAgICBjb25zdCBjb2x1bW5DbGFzcyA9IGNsYXNzTGlzdC5maW5kKChjbGFzc05hbWU6IHN0cmluZykgPT4gKGNsYXNzTmFtZS5zdGFydHNXaXRoKCdtYXQtY29sdW1uLScpKSk7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKGNvbHVtbkNsYXNzKSkge1xuICAgICAgcmVzdWx0ID0gdGhpcy5nZXRPQ29sdW1uKGNvbHVtbkNsYXNzLnN1YnN0cignbWF0LWNvbHVtbi0nLmxlbmd0aCkpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0T0NvbHVtbkZyb21Hcm91cEhlYWRlckNvbHVtbihhdHRyOiBzdHJpbmcpOiBPQ29sdW1uIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPQ29sdW1uKGF0dHIuc3Vic3RyKCdncm91cEhlYWRlci0nLmxlbmd0aCkpO1xuICB9XG5cbiAgZ2V0VGhXaWR0aEZyb21PQ29sdW1uKG9Db2x1bW46IE9Db2x1bW4pOiBhbnkge1xuICAgIGxldCB3aWR0aENvbHVtbjogbnVtYmVyO1xuICAgIGNvbnN0IHRoQXJyYXkgPSB0aGlzLnRhYmxlSGVhZGVyRWwubmF0aXZlRWxlbWVudC5jaGlsZHJlbjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoQXJyYXkubGVuZ3RoICYmICFVdGlsLmlzRGVmaW5lZCh3aWR0aENvbHVtbik7IGkrKykge1xuICAgICAgY29uc3QgdGggPSB0aEFycmF5W2ldO1xuICAgICAgY29uc3QgY2xhc3NMaXN0ID0gdGguY2xhc3NMaXN0O1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjbGFzc0xpc3QubGVuZ3RoICYmICFVdGlsLmlzRGVmaW5lZCh3aWR0aENvbHVtbik7IGorKykge1xuICAgICAgICBpZiAoY2xhc3NMaXN0W2pdID09PSAnbWF0LWNvbHVtbi0nICsgb0NvbHVtbi5hdHRyKSB7XG4gICAgICAgICAgd2lkdGhDb2x1bW4gPSB0aC5jbGllbnRXaWR0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gd2lkdGhDb2x1bW47XG4gIH1cblxuICBnZXRDb2x1bW5JbnNlcnRhYmxlKG5hbWUpOiBzdHJpbmcge1xuICAgIHJldHVybiBuYW1lICsgdGhpcy5nZXRTdWZmaXhDb2x1bW5JbnNlcnRhYmxlKCk7XG4gIH1cblxuICBpc1Jvd1NlbGVjdGVkKHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLmlzU2VsZWN0aW9uTW9kZU5vbmUoKSAmJiB0aGlzLnNlbGVjdGlvbi5pc1NlbGVjdGVkKHJvdyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q29sdW1uV2lkdGhGcm9tU3RhdGUoY29sRGVmOiBPQ29sdW1uKTogc3RyaW5nIHtcbiAgICAvLzEuIEJ5IGRlZmF1bHQsIHNldCB3aWR0aCBkZWZpbml0aW9uXG4gICAgbGV0IGNvbHVtbldpZHRoID0gY29sRGVmLmRlZmluaXRpb24gJiYgY29sRGVmLmRlZmluaXRpb24ud2lkdGggPyBjb2xEZWYuZGVmaW5pdGlvbi53aWR0aCA6IHZvaWQgMDtcbiAgICBjb25zdCBzdG9yZWREYXRhID0gdGhpcy5zdGF0ZS5nZXRDb2x1bW5EaXNwbGF5KGNvbERlZik7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHN0b3JlZERhdGEpICYmIFV0aWwuaXNEZWZpbmVkKHN0b3JlZERhdGEud2lkdGgpKSB7XG4gICAgICAvLzIuIFNldCB3aWR0aCBpZiB0aGUgd2lkdGggaXMgc3RvcmVkXG4gICAgICBjb2x1bW5XaWR0aCA9IHN0b3JlZERhdGEud2lkdGg7XG4gICAgICAvLyBjaGVjayB0aGF0IHRoZSB3aWR0aCBvZiB0aGUgY29sdW1ucyBzYXZlZCBpbiB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uXG4gICAgICAvLyBpbiB0aGUgbG9jYWwgc3RvcmFnZSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmFsdWVcbiAgICAgIGlmICh0aGlzLnN0YXRlLmluaXRpYWxDb25maWd1cmF0aW9uLmNvbHVtbnNEaXNwbGF5KSB7XG4gICAgICAgIGNvbnN0IGluaXRpYWxTdG9yZWREYXRhID0gdGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5nZXRDb2x1bW5EaXNwbGF5KGNvbERlZik7XG4gICAgICAgIC8vIElmIG9yaWdpbmFsIHdpZHRoIGNoYW5nZWQgdGhlbiB0aGUgd2lkdGggaXMgcmVzZXRlZCB3aXRoIHRoaXMgdmFsdWVcbiAgICAgICAgaWYgKGluaXRpYWxTdG9yZWREYXRhICYmIGluaXRpYWxTdG9yZWREYXRhLndpZHRoICYmIGNvbERlZi5kZWZpbml0aW9uLm9yaWdpbmFsV2lkdGgpIHtcbiAgICAgICAgICBpZiAoaW5pdGlhbFN0b3JlZERhdGEud2lkdGggIT09IGNvbERlZi5kZWZpbml0aW9uLm9yaWdpbmFsV2lkdGgpIHtcbiAgICAgICAgICAgIGNvbHVtbldpZHRoID0gY29sRGVmLmRlZmluaXRpb24ub3JpZ2luYWxXaWR0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbHVtbldpZHRoO1xuICB9XG5cbiAgcmVmcmVzaENvbHVtbnNXaWR0aEZyb21Mb2NhbFN0b3JhZ2UoKSB7XG4gICAgdGhpcy5vVGFibGVPcHRpb25zLmNvbHVtbnMuZm9yRWFjaCh4ID0+IHtcbiAgICAgIHgud2lkdGggPSB0aGlzLmdldENvbHVtbldpZHRoRnJvbVN0YXRlKHgpO1xuICAgIH0pO1xuICB9XG5cbiAgcmVmcmVzaENvbHVtbnNXaWR0aEZyb21PcmlnaW5hbERlZmluaXRpb24oKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuZmlsdGVyKGMgPT4gYy52aXNpYmxlKS5mb3JFYWNoKGMgPT4ge1xuICAgICAgICBjLndpZHRoID0gYy5ET01XaWR0aCA9IHZvaWQgMDtcbiAgICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKGMuZGVmaW5pdGlvbikgJiYgVXRpbC5pc0RlZmluZWQoYy5kZWZpbml0aW9uLndpZHRoKSkge1xuICAgICAgICAgIGMud2lkdGggPSBjLmRlZmluaXRpb24ud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgYy5zZXRSZW5kZXJXaWR0aCh0aGlzLmhvcml6b250YWxTY3JvbGwsIHRoaXMuZ2V0Q2xpZW50V2lkdGhDb2x1bW4oYykpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlT0NvbHVtbihhdHRyPzogc3RyaW5nLCB0YWJsZT86IE9UYWJsZUNvbXBvbmVudCwgY29sdW1uPzogT1RhYmxlQ29sdW1uQ29tcG9uZW50ICYgT1RhYmxlQ29sdW1uQ2FsY3VsYXRlZENvbXBvbmVudCk6IE9Db2x1bW4ge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IE9Db2x1bW4oKTtcbiAgICBpZiAoYXR0cikge1xuICAgICAgaW5zdGFuY2UuYXR0ciA9IGF0dHI7XG4gICAgfVxuICAgIGlmICh0YWJsZSkge1xuICAgICAgaW5zdGFuY2Uuc2V0RGVmYXVsdFByb3BlcnRpZXMoe1xuICAgICAgICBvcmRlcmFibGU6IHRoaXMub3JkZXJhYmxlLFxuICAgICAgICByZXNpemFibGU6IHRoaXMucmVzaXphYmxlLFxuICAgICAgICBncm91cGFibGU6IHRoaXMuZ3JvdXBhYmxlLFxuICAgICAgICBwYWdlYWJsZTogdGhpcy5wYWdlYWJsZVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChjb2x1bW4pIHtcbiAgICAgIGluc3RhbmNlLnNldENvbHVtblByb3BlcnRpZXMoY29sdW1uKTtcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgcHVibGljIHJlZ2lzdGVyT1RhYmxlQnV0dG9ucyhhcmc6IE9UYWJsZUJ1dHRvbnMpIHtcbiAgICB0aGlzLm9UYWJsZUJ1dHRvbnMgPSBhcmc7XG4gICAgaWYgKHRoaXMub1RhYmxlQnV0dG9ucyAmJiB0aGlzLnRhYmxlQnV0dG9ucyAmJiB0aGlzLnRhYmxlQnV0dG9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLm9UYWJsZUJ1dHRvbnMucmVnaXN0ZXJCdXR0b25zKHRoaXMudGFibGVCdXR0b25zLnRvQXJyYXkoKSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldENsaWVudFdpZHRoQ29sdW1uKGNvbDogT0NvbHVtbik6IG51bWJlciB7XG4gICAgcmV0dXJuIGNvbC5ET01XaWR0aCB8fCB0aGlzLmdldFRoV2lkdGhGcm9tT0NvbHVtbihjb2wpO1xuICB9XG5cbiAgcHVibGljIGdldE1pbldpZHRoQ29sdW1uKGNvbDogT0NvbHVtbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIFV0aWwuZXh0cmFjdFBpeGVsc1ZhbHVlKGNvbC5taW5XaWR0aCwgQ29kZXMuREVGQVVMVF9DT0xVTU5fTUlOX1dJRFRIKSArICdweCc7XG4gIH1cblxuICBzaG93RXhwYW5kYWJsZVJvdygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gVXRpbC5pc0RlZmluZWQodGhpcy50YWJsZVJvd0V4cGFuZGFibGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgZW5hYmxlIHZpcnR1YWwgc2Nyb2xsXG4gICAqL1xuICBnZXQgZW5hYmxlZFZpcnR1YWxTY3JvbGwoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmlydHVhbFNjcm9sbCAmJiAhdGhpcy5zaG93RXhwYW5kYWJsZVJvdygpICYmIHRoaXMuZ3JvdXBlZENvbHVtbnNBcnJheS5sZW5ndGggPT09IDA7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlcyBncm91cGVkIGNvbHVtbnNcbiAgICovXG4gIHBhcnNlR3JvdXBlZENvbHVtbnMoKSB7XG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuc3RhdGUuZ3JvdXBlZENvbHVtbnMgfHwgdGhpcy5vcmlnaW5hbEdyb3VwZWRDb2x1bW5zQXJyYXk7XG4gICAgaWYgKHRoaXMuc3RhdGUuZ3JvdXBlZENvbHVtbnMgJiYgdGhpcy5zdGF0ZS5pbml0aWFsQ29uZmlndXJhdGlvbi5ncm91cGVkQ29sdW1ucykge1xuICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IHRoaXMuc3RhdGUuaW5pdGlhbENvbmZpZ3VyYXRpb24uZ3JvdXBlZENvbHVtbnNcbiAgICAgICAgLmZpbHRlcih4ID0+ICF0aGlzLm9yaWdpbmFsR3JvdXBlZENvbHVtbnNBcnJheS5pbmNsdWRlcyh4KSk7XG5cbiAgICAgIGlmIChkaWZmZXJlbmNlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5vcmlnaW5hbEdyb3VwZWRDb2x1bW5zQXJyYXk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2V0R3JvdXBDb2x1bW5zKHJlc3VsdCk7XG4gIH1cbiAgcGFyc2VHcm91cGVkQ29sdW1uVHlwZXMoKSB7XG4gICAgdGhpcy5ncm91cGVkQ29sdW1uVHlwZXMgPSB0aGlzLnN0YXRlLmdyb3VwZWRDb2x1bW5UeXBlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHcm91cHMgYnkgY29sdW1uXG4gICAqIEBwYXJhbSBjb2x1bW5cbiAgICovXG4gIGdyb3VwQnlDb2x1bW4oY29sdW1uOiBPQ29sdW1uLCB0eXBlPzogc3RyaW5nKSB7XG4gICAgdGhpcy5jaGVja0dyb3VwQnlDb2x1bW4oY29sdW1uLmF0dHIsIHRydWUpO1xuICAgIGlmICh0eXBlKSB7XG4gICAgICB0aGlzLnVwZGF0ZUdyb3VwZWRDb2x1bW5UeXBlcyhjb2x1bW4uYXR0ciwgdHJ1ZSwgdHlwZSk7XG4gICAgfVxuICAgIHRoaXMuZGF0YVNvdXJjZS51cGRhdGVHcm91cGVkQ29sdW1ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVuZ3JvdXAgYnkgY29sdW1uXG4gICAqIEBwYXJhbSBjb2x1bW5cbiAgICovXG4gIHVuR3JvdXBCeUNvbHVtbihjb2x1bW46IE9Db2x1bW4pIHtcbiAgICB0aGlzLmNoZWNrR3JvdXBCeUNvbHVtbihjb2x1bW4uYXR0ciwgZmFsc2UpO1xuICAgIHRoaXMudXBkYXRlR3JvdXBlZENvbHVtblR5cGVzKGNvbHVtbi5hdHRyLCBmYWxzZSk7XG4gICAgdGhpcy5kYXRhU291cmNlLnVwZGF0ZUdyb3VwZWRDb2x1bW5zKCk7XG4gIH1cblxuICAvKipcbiAgICogVW5ncm91cCBieSBhbGwgY29sdW1uc1xuICAgKi9cbiAgdW5Hcm91cEJ5QWxsQ29sdW1ucygpIHtcbiAgICB0aGlzLnNldEdyb3VwQ29sdW1ucyhbXSk7XG4gICAgdGhpcy5ncm91cGVkQ29sdW1uVHlwZXMgPSBbXTtcbiAgfVxuXG4gIHNldEdyb3VwQ29sdW1ucyh2YWx1ZTogYW55W10pIHtcbiAgICB0aGlzLmdyb3VwZWRDb2x1bW5zQXJyYXkgPSB2YWx1ZTtcbiAgICB0aGlzLmRhdGFTb3VyY2UudXBkYXRlR3JvdXBlZENvbHVtbnMoKTtcbiAgfVxuICBzZXRHcm91cGVkQ29sdW1uVHlwZXModmFsdWU6IE9Hcm91cGVkQ29sdW1uVHlwZXNbXSkge1xuICAgIHRoaXMuZ3JvdXBlZENvbHVtblR5cGVzID0gdmFsdWU7XG4gIH1cbiAgY2hlY2tHcm91cEJ5Q29sdW1uKGZpZWxkOiBzdHJpbmcsIGFkZDogYm9vbGVhbikge1xuICAgIGxldCBmb3VuZCA9IG51bGw7XG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGhpcy5ncm91cGVkQ29sdW1uc0FycmF5KSB7XG4gICAgICBpZiAoY29sdW1uID09PSBmaWVsZCkge1xuICAgICAgICBmb3VuZCA9IHRoaXMuZ3JvdXBlZENvbHVtbnNBcnJheS5pbmRleE9mKGNvbHVtbiwgMCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmb3VuZCAhPSBudWxsICYmIGZvdW5kID49IDApIHtcbiAgICAgIGlmICghYWRkKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBlZENvbHVtbnNBcnJheS5zcGxpY2UoZm91bmQsIDEpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoYWRkKSB7XG4gICAgICAgIHRoaXMuZ3JvdXBlZENvbHVtbnNBcnJheS5wdXNoKGZpZWxkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGl0ZW0gaXMgZ3JvdXBcbiAgICogQHBhcmFtIGluZGV4XG4gICAqIEBwYXJhbSBpdGVtXG4gICAqIEByZXR1cm5zIHRydWUgaWYgZ3JvdXBcbiAgICovXG4gIGlzR3JvdXAoaW5kZXgsIGl0ZW0pOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXRlbSBpbnN0YW5jZW9mIE9UYWJsZUdyb3VwZWRSb3c7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGl0ZW0gaXMgbm90IGdyb3VwXG4gICAqIEBwYXJhbSBpbmRleFxuICAgKiBAcGFyYW0gaXRlbVxuICAgKiBAcmV0dXJucyB0cnVlIGlmIG5vdCBncm91cFxuICAgKi9cbiAgaXNOb3RHcm91cChpbmRleCwgaXRlbSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhKGl0ZW0gaW5zdGFuY2VvZiBPVGFibGVHcm91cGVkUm93KTtcbiAgfVxuXG4gIGdldExhc3RHcm91cHMoKSB7XG4gICAgLy8gR2V0IGxhc3QgZ3JvdXBzXG4gICAgY29uc3Qgc2NvcmVzID0gdGhpcy5kYXRhU291cmNlLnJlbmRlcmVkRGF0YTtcbiAgICBjb25zdCBtYXhMZXZlbCA9IHNjb3Jlcy5yZWR1Y2UoKGFjYywgY3VycikgPT4gY3Vyci5sZXZlbCA+IGFjYyA/IGN1cnIubGV2ZWwgOiBhY2MsIDApO1xuICAgIGNvbnN0IG1heExldmVsUmVuZGVyZWREYXRhID0gc2NvcmVzLnJlZHVjZSgociwgbykgPT4gby5sZXZlbCA9PT0gbWF4TGV2ZWwgPyBbLi4uciwgb10gOiByLCBbXSk7XG4gICAgcmV0dXJuIG1heExldmVsUmVuZGVyZWREYXRhLmxlbmd0aDtcbiAgfVxuXG4gIGdyb3VwSGVhZGVyQ2xpY2socm93OiBPVGFibGVHcm91cGVkUm93KSB7XG4gICAgdGhpcy5kYXRhU291cmNlLnRvZ2dsZUdyb3VwQnlDb2x1bW4ocm93KTtcbiAgfVxuXG4gIHByaXZhdGUgaXNJbnN0YW5jZU9mT1RhYmxlQ2VsbFJlbmRlcmVyU2VydmljZUNvbXBvbmVudChyZW5kZXJlcjogT0Jhc2VUYWJsZUNlbGxSZW5kZXJlcikge1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZChyZW5kZXJlcikgJiYgKHJlbmRlcmVyIGFzIGFueSkub25EYXRhTG9hZGVkICYmIChyZW5kZXJlciBhcyBhbnkpLnF1ZXJ5QWxsRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNvbHVtbiBkYXRhIGJ5IGF0dHJcbiAgICogQHBhcmFtIGF0dHJcbiAgICogQHBhcmFtIHJvd1xuICAgKiBAcmV0dXJucyBjb2x1bW4gZGF0YSBieSBhdHRyXG4gICAqL1xuICBnZXRDb2x1bW5EYXRhQnlBdHRyKGF0dHIsIHJvdzogYW55KTogYW55IHtcbiAgICBsZXQgb3BlcmF0aW9uID0gbnVsbDtcbiAgICBpZiAodGhpcy5ncm91cGVkQ29sdW1uVHlwZXMubGVuZ3RoICE9IDAgJiYgdGhpcy5ncm91cGVkQ29sdW1uVHlwZXMuZmluZEluZGV4KGNvbHVtbiA9PiBjb2x1bW4uYXR0ciA9PSBhdHRyKSAhPSAtMSkge1xuICAgICAgb3BlcmF0aW9uID0gdGhpcy5ncm91cGVkQ29sdW1uVHlwZXNbdGhpcy5ncm91cGVkQ29sdW1uVHlwZXMuZmluZEluZGV4KGNvbHVtbiA9PiBjb2x1bW4uYXR0ciA9PSBhdHRyKV0udHlwZTtcbiAgICB9XG4gICAgY29uc3Qgb0NvbCA9IHRoaXMuZ2V0T0NvbHVtbihhdHRyKTtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKG9Db2wpKSB7XG4gICAgICByZXR1cm4gcm93W2F0dHJdO1xuICAgIH1cbiAgICBjb25zdCB1c2VSZW5kZXJlciA9IG9Db2wucmVuZGVyZXIgJiYgb0NvbC5yZW5kZXJlci5nZXRDZWxsRGF0YTtcbiAgICBpZiAob3BlcmF0aW9uID09IG51bGwpIHtcbiAgICAgIHJldHVybiB1c2VSZW5kZXJlciA/IG9Db2wucmVuZGVyZXIuZ2V0Q2VsbERhdGEocm93W29Db2wuYXR0cl0sIHJvdykgOiByb3dbb0NvbC5hdHRyXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb25zdCBkYXRlID0gbW9tZW50KHJvd1tvQ29sLmF0dHJdKTtcbiAgICAgIGNvbnN0IGxhbmd1YWdlID0gdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmdldEN1cnJlbnRMYW5nKCk7XG4gICAgICBzd2l0Y2ggKG9wZXJhdGlvbikge1xuICAgICAgICBjYXNlIFwiWUVBUlwiOiByZXR1cm4gZGF0ZS55ZWFyKCk7XG4gICAgICAgIGNhc2UgXCJNT05USFwiOiByZXR1cm4gbW9tZW50KCkubG9jYWxlKGxhbmd1YWdlKS5tb250aChkYXRlLm1vbnRoKCkpLmZvcm1hdChcIk1NTU1cIik7XG4gICAgICAgIGNhc2UgXCJZRUFSX01PTlRIXCI6IHJldHVybiBtb21lbnQoKS5sb2NhbGUobGFuZ3VhZ2UpLm1vbnRoKGRhdGUubW9udGgoKSkueWVhcihkYXRlLnllYXIoKSkuZm9ybWF0KFwiTU1NTSwgWVlZWVwiKTtcbiAgICAgICAgY2FzZSBcIllFQVJfTU9OVEhfREFZXCI6IHJldHVybiB1c2VSZW5kZXJlciA/IG9Db2wucmVuZGVyZXIuZ2V0Q2VsbERhdGEocm93W29Db2wuYXR0cl0sIHJvdykgOiByb3dbb0NvbC5hdHRyXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdXBkYXRlR3JvdXBlZENvbHVtblR5cGVzKGF0dHI6IHN0cmluZywgYWRkOiBib29sZWFuLCBvcGVyYXRpb24/OiBzdHJpbmcpIHtcbiAgICBsZXQgZ3JvdXBlZENvbHVtbnM6IE9Hcm91cGVkQ29sdW1uVHlwZXNbXSA9IFtdO1xuICAgIGxldCBpbmRleCA9IHRoaXMuZ3JvdXBlZENvbHVtblR5cGVzLmZpbmRJbmRleChjb2x1bW4gPT4gY29sdW1uLmF0dHIgPT0gYXR0cik7XG4gICAgaWYgKGluZGV4ICE9IC0xKSB7XG4gICAgICBpZiAoIWFkZCkge1xuICAgICAgICB0aGlzLmdyb3VwZWRDb2x1bW5UeXBlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgdGhpcy5ncm91cGVkQ29sdW1uVHlwZXMucHVzaCh7IFwiYXR0clwiOiBhdHRyLCBcInR5cGVcIjogb3BlcmF0aW9uIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXRlLmdyb3VwZWRDb2x1bW5UeXBlcyA9IGdyb3VwZWRDb2x1bW5zO1xuICB9XG5cbiAgZ2V0Q2xhc3NOYW1lR3JvdXBIZWFkZXIocm93OiBPVGFibGVHcm91cGVkUm93KTogc3RyaW5nIHtcbiAgICBsZXQgY2xhc3NOYW1lID0gJyc7XG4gICAgaWYgKHJvdy5sZXZlbCA8PSAxMCkge1xuICAgICAgY2xhc3NOYW1lID0gJ28tdGFibGUtZ3JvdXAtcm93IG8tdGFibGUtZ3JvdXAtcm93LWxldmVsLScgKyByb3cubGV2ZWw7XG4gICAgfVxuICAgIHJldHVybiBjbGFzc05hbWU7XG4gIH1cblxuICBwcml2YXRlIHN0b3BFZGl0aW9uKGNsZWFyU2VsZWN0aW9uPzogYm9vbGVhbikge1xuICAgIGNsZWFyU2VsZWN0aW9uID0gY2xlYXJTZWxlY3Rpb24gPyBjbGVhclNlbGVjdGlvbiA6IGZhbHNlO1xuICAgIHRoaXMuZWRpdGluZ0NlbGwgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lZGl0aW5nUm93ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2xlYXJTZWxlY3Rpb25BbmRFZGl0aW5nKGNsZWFyU2VsZWN0aW9uKTtcbiAgfVxuXG4gIHN0b3JlRmlsdGVySW5TdGF0ZShhcmc6IE9GaWx0ZXJEZWZpbml0aW9uKSB7XG4gICAgdGhpcy5jb21wb25lbnRTdGF0ZVNlcnZpY2Uuc3RvcmVGaWx0ZXIoYXJnKTtcbiAgfVxuXG4gIHJlaW5pdGlhbGl6YXRlUXVpY2tGaWx0ZXJDb2x1bW5zKCkge1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1uc1xuICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLnNlYXJjaGFibGUgJiYgY29sdW1uLnZpc2libGUpXG4gICAgICAuZm9yRWFjaChjb2x1bW4gPT4gY29sdW1uLnNlYXJjaGluZyA9IHRydWUpXG4gIH1cblxuICByZWluaXRpYWxpemVTb3J0Q29sdW1ucyhzb3J0Q29sdW1ucz86IFNRTE9yZGVyW10pIHtcbiAgICB0aGlzLnRhYmxlSGVhZGVycyA9IFtdO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChzb3J0Q29sdW1ucykpIHtcbiAgICAgIHRoaXMuc29ydENvbEFycmF5ID0gc29ydENvbHVtbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFyc2VTb3J0Q29sdW1ucygpO1xuICAgIH1cbiAgICB0aGlzLnNvcnQuc2V0U29ydENvbHVtbnModGhpcy5zb3J0Q29sQXJyYXkpO1xuICAgIHRoaXMucmVmcmVzaFNvcnRIZWFkZXJzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVmcmVzaFNvcnRIZWFkZXJzKCkge1xuICAgIHRoaXMudGFibGVIZWFkZXJzLmZpbHRlcihoZWFkZXIgPT4gVXRpbC5pc0RlZmluZWQoaGVhZGVyLm1hdFNvcnRIZWFkZXIpKS5mb3JFYWNoKGhlYWRlciA9PiBoZWFkZXIubWF0U29ydEhlYWRlci5yZWZyZXNoKCkpO1xuICB9XG5cbiAgZ2V0UXVpY2tGaWx0ZXJWYWx1ZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiBVdGlsLmlzRGVmaW5lZCh0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50KSA/XG4gICAgICB0aGlzLm9UYWJsZVF1aWNrRmlsdGVyQ29tcG9uZW50LnZhbHVlIDpcbiAgICAgICcnO1xuICB9XG5cbiAgcHVibGljIHF1ZXJ5Q2VsbFJlbmRlcmVycygpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IHF1aWNrRmlsdGVyVmFsdWUgPSB0aGlzLmdldFF1aWNrRmlsdGVyVmFsdWUoKTtcblxuICAgIGlmICgoVXRpbC5pc0RlZmluZWQocXVpY2tGaWx0ZXJWYWx1ZSkgJiYgcXVpY2tGaWx0ZXJWYWx1ZS5sZW5ndGggPiAwKSB8fCB0aGlzLnNvcnRDb2xBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBxdWVyaWVzID0gdGhpcy5vVGFibGVPcHRpb25zLmNvbHVtbnNcbiAgICAgICAgLmZpbHRlcihvQ29sID0+IG9Db2wuc2VhcmNoaW5nICYmIHRoaXMuaXNJbnN0YW5jZU9mT1RhYmxlQ2VsbFJlbmRlcmVyU2VydmljZUNvbXBvbmVudChvQ29sLnJlbmRlcmVyKSlcbiAgICAgICAgLm1hcChvQ29sID0+IChvQ29sLnJlbmRlcmVyIGFzIGFueSkucXVlcnlBbGxEYXRhKCkpO1xuXG4gICAgICByZXR1cm4gcXVlcmllcy5sZW5ndGggPiAwID8gY29tYmluZUxhdGVzdChxdWVyaWVzKSA6IG9mKG51bGwpO1xuICAgIH1cbiAgICByZXR1cm4gb2YobnVsbCk7XG4gIH1cblxuICB0YWJsZVF1aWNrRmlsdGVyQ2hhbmdlZCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMucGFnZWFibGUpIHtcbiAgICAgIHRoaXMucXVlcnlDZWxsUmVuZGVyZXJzKCkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yZWxvYWRQYWdpbmF0ZWREYXRhRnJvbVN0YXJ0KGZhbHNlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodmFsdWUgJiYgdmFsdWUubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZGF0YVNvdXJjZS5xdWlja0ZpbHRlciA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIG9uTWF0U29ydENoYW5nZVxuICBwdWJsaWMgZmlsdGVyRGF0YSh2YWx1ZT86IHN0cmluZywgbG9hZE1vcmU/OiBib29sZWFuKTogdm9pZCB7XG4gICAgLy9cbiAgfVxuXG4gIHNldE9UYWJsZUNvbHVtbnNHcm91cGluZyh2YWx1ZTogT1RhYmxlQ29sdW1uc0dyb3VwaW5nKSB7XG4gICAgdGhpcy5vVGFibGVDb2x1bW5zR3JvdXBpbmdDb21wb25lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldENvbHVtbkdyb3VwaW5nQ29tcG9uZW50KGNvbHVtbkF0dHI6IHN0cmluZyk6IE9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbHVtbkNvbXBvbmVudCB7XG4gICAgbGV0IHJlc3VsdDogT1RhYmxlQ29sdW1uc0dyb3VwaW5nQ29sdW1uQ29tcG9uZW50O1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLm9UYWJsZUNvbHVtbnNHcm91cGluZ0NvbXBvbmVudCkpIHtcbiAgICAgIHJlc3VsdCA9IHRoaXMub1RhYmxlQ29sdW1uc0dyb3VwaW5nQ29tcG9uZW50LmdldENvbHVtbkdyb3VwaW5nKGNvbHVtbkF0dHIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgdXNlQ29sdW1uR3JvdXBpbmdBZ2dyZWdhdGUoY29sdW1uQXR0cjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgb0NvbCA9IHRoaXMuZ2V0T0NvbHVtbihjb2x1bW5BdHRyKTtcbiAgICBpZiAoIVV0aWwuaXNEZWZpbmVkKG9Db2wpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHNxbFR5cGUgPSB0aGlzLmdldFNxbFR5cGVzKClbY29sdW1uQXR0cl07XG4gICAgY29uc3QgaGFzRGVmYXVsdEFnZ3JlZ2F0ZSA9IFNRTFR5cGVzLmlzTnVtZXJpY1NRTFR5cGUoc3FsVHlwZSlcbiAgICAgICYmICghVXRpbC5pc0RlZmluZWQob0NvbC5yZW5kZXJlcikgfHwgT1RhYmxlQ29tcG9uZW50LkFWQUlMQUJMRV9HUk9VUElOR19DT0xVTU5TX1JFTkRFUkVSUy5pbmNsdWRlcyhvQ29sLnR5cGUpKTtcblxuICAgIGlmICghVXRpbC5pc0RlZmluZWQodGhpcy5vVGFibGVDb2x1bW5zR3JvdXBpbmdDb21wb25lbnQpKSB7XG4gICAgICByZXR1cm4gaGFzRGVmYXVsdEFnZ3JlZ2F0ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMub1RhYmxlQ29sdW1uc0dyb3VwaW5nQ29tcG9uZW50LnVzZUNvbHVtbkFnZ3JlZ2F0ZShjb2x1bW5BdHRyLCBoYXNEZWZhdWx0QWdncmVnYXRlKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjaGVja1ZpZXdwb3J0U2l6ZSgpIHtcbiAgICAvLyBJdHMgYSB0ZW1wb3JhcmlseSBmaXhlZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9pc3N1ZXMvMTAxMTdcbiAgICAvLyBTb2x2ZSB0aGUgaXNzdWUgd2hlbiBzd2l0Y2hpbmcgdGFicyB3aGVuIHRoZSB2aXJ0dWFsIHNjcm9sbGluZyBjb21wb25lbnQgaXMgdXNlZFxuICAgIC8vIGluIGEgbWF0IC0gdGFiIGNvbXBvbmVudCBhbmQgdmlydHVhbCBzY3JvbGwgd29yayBhYm5vcm1hbGx5XG4gICAgaWYgKHRoaXMudmlydHVhbFNjcm9sbFZpZXdwb3J0KSB7XG4gICAgICB0aGlzLnZpcnR1YWxTY3JvbGxWaWV3cG9ydC5jaGVja1ZpZXdwb3J0U2l6ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFNob3cgZXhwYW5kYWJsZSBpY29uIG9yIG5vdCBpZiBoYXMgZGF0YSBvciBub3RcbiAgc2hvd0V4cGFuZGFibGVJY29uKHJvdzogYW55LCByb3dJbmRleDogbnVtYmVyKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIChVdGlsLmlzRGVmaW5lZCh0aGlzLnNob3dFeHBhbmRhYmxlSWNvbkZ1bmN0aW9uKSAmJiB0aGlzLnNob3dFeHBhbmRhYmxlSWNvbkZ1bmN0aW9uIGluc3RhbmNlb2YgRnVuY3Rpb24pID8gVXRpbC53cmFwSW50b09ic2VydmFibGUodGhpcy5zaG93RXhwYW5kYWJsZUljb25GdW5jdGlvbihyb3csIHJvd0luZGV4KSkgOiBvZih0cnVlKTtcbiAgfVxuXG4gIGdldENvbHVtbnNOb3RJbmNsdWRlZCgpOiBzdHJpbmdbXSB7XG4gICAgbGV0IGNvbHNOb3RJbmNsdWRlZCA9IFtdO1xuICAgIGNvbHNOb3RJbmNsdWRlZCA9IHRoaXMub1RhYmxlT3B0aW9ucy5jb2x1bW5zLmZpbHRlcihjID0+IHZvaWQgMCAhPT0gYy5yZW5kZXJlciAmJiAoYy50eXBlID09PSAnaW1hZ2UnIHx8IGMudHlwZSA9PT0gJ2FjdGlvbicpKS5tYXAoYyA9PiBjLmF0dHIpO1xuICAgIGNvbHNOb3RJbmNsdWRlZC5wdXNoKENvZGVzLk5BTUVfQ09MVU1OX1NFTEVDVCk7XG4gICAgY29sc05vdEluY2x1ZGVkLnB1c2goQ29kZXMuTkFNRV9DT0xVTU5fRVhQQU5EQUJMRSk7XG4gICAgcmV0dXJuIGNvbHNOb3RJbmNsdWRlZDtcbiAgfVxuXG4gIGdldENvbHVtbk5hbWVzKGNvbHVtbnM6IHN0cmluZ1tdKTogeyBbY29sdW1uSWQ6IHN0cmluZ106IHN0cmluZzsgfSB7XG4gICAgY29uc3QgdGFibGVDb2x1bW5OYW1lcyA9IHt9O1xuICAgIGNvbHVtbnMuZm9yRWFjaChjID0+IHtcbiAgICAgIGNvbnN0IG9Db2x1bW4gPSB0aGlzLl9vVGFibGVPcHRpb25zLmNvbHVtbnMuZmluZChvYyA9PiBvYy5hdHRyID09PSBjKTtcbiAgICAgIHRhYmxlQ29sdW1uTmFtZXNbY10gPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuZ2V0KG9Db2x1bW4udGl0bGUgPyBvQ29sdW1uLnRpdGxlIDogb0NvbHVtbi5hdHRyKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGFibGVDb2x1bW5OYW1lcztcbiAgfVxuXG4gIHJlc2V0Q29sdW1uc1dpZHRoKCkge1xuICAgIHRoaXMuX29UYWJsZU9wdGlvbnMuY29sdW1ucy5mb3JFYWNoKGMgPT4ge1xuICAgICAgaWYgKFV0aWwuaXNEZWZpbmVkKGMuZGVmaW5pdGlvbikpIHtcbiAgICAgICAgYy53aWR0aCA9IFV0aWwuaXNEZWZpbmVkKGMuZGVmaW5pdGlvbi53aWR0aCkgPyBjLmRlZmluaXRpb24ud2lkdGggOiBjLmRlZmluaXRpb24ub3JpZ2luYWxXaWR0aFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYy53aWR0aCA9IFwiYXV0b1wiO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuY2QuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMudXBkYXRlQ29sdW1uc0RPTVdpZHRoKCk7XG4gIH1cblxuICB1cGRhdGVDb2x1bW5zRE9NV2lkdGgoKSB7XG4gICAgdGhpcy5fb1RhYmxlT3B0aW9ucy5jb2x1bW5zLmZvckVhY2goYyA9PiB7XG4gICAgICBjLkRPTVdpZHRoID0gdGhpcy5nZXRUaFdpZHRoRnJvbU9Db2x1bW4oYyk7XG4gICAgfSk7XG5cbiAgfVxuXG4gIHB1YmxpYyBpc0Rpc2FibGVDaGVja2JveChpdGVtOiBhbnkpOiBib29sZWFuIHtcbiAgICBsZXQgZGlzYWJsZSA9IGZhbHNlO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZCh0aGlzLmRpc2FibGVTZWxlY3Rpb25GdW5jdGlvbikpIHtcbiAgICAgIHJldHVybiB0aGlzLmRpc2FibGVTZWxlY3Rpb25GdW5jdGlvbih7IC4uLml0ZW0gfSk7XG4gICAgfVxuICAgIHJldHVybiBkaXNhYmxlO1xuXG4gIH1cblxuICBnZXRTZXJ2aWNlKCkge1xuICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlO1xuICB9XG5cbiAgZ2V0U25hY2tTZXJ2aWNlKCkge1xuICAgIHJldHVybiB0aGlzLnNuYWNrQmFyU2VydmljZTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm8tdGFibGUtY29udGFpbmVyXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeExheW91dEFsaWduPVwic3RhcnQgc3RyZXRjaFwiIFtzdHlsZS5kaXNwbGF5XT1cImlzVmlzaWJsZSgpPyAnJyA6ICdub25lJ1wiXG4gIFtjbGFzcy5ibG9jay1ldmVudHNdPVwic2hvd0xvYWRpbmcgfCBhc3luY1wiPlxuXG4gIDxvLWRhdGEtdG9vbGJhciAjdGFibGVUb29sYmFyICpuZ0lmPVwiaGFzQ29udHJvbHMoKVwiIFt0aXRsZV09XCJ0aXRsZVwiIFtzaG93LXRpdGxlXT1cInNob3dUaXRsZVwiIGNsYXNzPVwiby10YWJsZS10b29sYmFyXCI+XG4gICAgPG5nLWNvbnRhaW5lciBvLWRhdGEtdG9vbGJhci1wcm9qZWN0aW9uLXN0YXJ0PlxuICAgICAgPG8tdGFibGUtYnV0dG9ucyAjdGFibGVCdXR0b25zIFtpbnNlcnQtYnV0dG9uXT1cImluc2VydEJ1dHRvblwiIFtyZWZyZXNoLWJ1dHRvbl09XCJyZWZyZXNoQnV0dG9uXCIgW2RlbGV0ZS1idXR0b25dPVwic2hvd0RlbGV0ZUJ1dHRvblwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJvLXRhYmxlLWJ1dHRvblwiPjwvbmctY29udGVudD5cbiAgICAgIDwvby10YWJsZS1idXR0b25zPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltvLXRhYmxlLXRvb2xiYXJdW3Bvc2l0aW9uPXN0YXJ0XVwiIG5nUHJvamVjdEFzPVwiW28tZGF0YS10b29sYmFyLWN1c3RvbS1wcm9qZWN0aW9uLXN0YXJ0XVwiPlxuICAgIDwvbmctY29udGVudD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbby10YWJsZS10b29sYmFyXVtwb3NpdGlvbj1lbmRdXCIgbmdQcm9qZWN0QXM9XCJbby1kYXRhLXRvb2xiYXItY3VzdG9tLXByb2plY3Rpb24tZW5kXVwiPlxuICAgIDwvbmctY29udGVudD5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbby10YWJsZS10b29sYmFyXVwiIG5nUHJvamVjdEFzPVwiW28tZGF0YS10b29sYmFyLWN1c3RvbS1wcm9qZWN0aW9uLXN0YXJ0XVwiPlxuICAgIDwvbmctY29udGVudD5cbiAgICA8bmctY29udGFpbmVyIG8tZGF0YS10b29sYmFyLXByb2plY3Rpb24tZW5kPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1aWNrZmlsdGVyQ29udGVudENoaWxkOyBlbHNlIGRlZmF1bHRRdWlja0ZpbHRlclwiPlxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJvLXRhYmxlLXF1aWNrZmlsdGVyXCI+PC9uZy1jb250ZW50PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRRdWlja0ZpbHRlcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1aWNrRmlsdGVyXCI+XG4gICAgICAgICAgPG8tdGFibGUtcXVpY2tmaWx0ZXIgKG9uQ2hhbmdlKT1cInRhYmxlUXVpY2tGaWx0ZXJDaGFuZ2VkKCRldmVudClcIj5cbiAgICAgICAgICA8L28tdGFibGUtcXVpY2tmaWx0ZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICpuZ0lmPVwic2hvd1RhYmxlTWVudUJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBjbGFzcz1cIm8tdGFibGUtbWVudS1idXR0b25cIiBbbWF0TWVudVRyaWdnZXJGb3JdPVwidGFibGVNZW51Lm1hdE1lbnVcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwib250aW1pemU6bW9yZV92ZXJ0XCI+PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG8tdGFibGUtbWVudSAjdGFibGVNZW51IFtzZWxlY3QtYWxsLWNoZWNrYm94XT1cInNlbGVjdEFsbENoZWNrYm94XCIgW2V4cG9ydC1idXR0b25dPVwiZXhwb3J0QnV0dG9uXCJcbiAgICAgICAgW2NvbHVtbnMtdmlzaWJpbGl0eS1idXR0b25dPVwiY29sdW1uc1Zpc2liaWxpdHlCdXR0b25cIiBbc2hvdy1jb25maWd1cmF0aW9uLW9wdGlvbl09XCJzaG93Q29uZmlndXJhdGlvbk9wdGlvblwiXG4gICAgICAgIFtzaG93LWZpbHRlci1vcHRpb25dPVwic2hvd0ZpbHRlck9wdGlvblwiIFtzaG93LXJlcG9ydC1vbi1kZW1hbmQtb3B0aW9uXT1cInNob3dSZXBvcnRPbkRlbWFuZE9wdGlvblwiXG4gICAgICAgIFtzaG93LWNoYXJ0cy1vbi1kZW1hbmQtb3B0aW9uXT1cInNob3dDaGFydHNPbkRlbWFuZE9wdGlvblwiIFtzaG93LXJlc2V0LXdpZHRoLW9wdGlvbl09XCJzaG93UmVzZXRXaWR0aE9wdGlvblwiIFtzaG93LWdyb3VwLWJ5LW9wdGlvbl09XCJncm91cGFibGVcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiby10YWJsZS1vcHRpb25cIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L28tdGFibGUtbWVudT5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9vLWRhdGEtdG9vbGJhcj5cblxuICA8ZGl2ICN0YWJsZUJvZHkgY2xhc3M9XCJvLXRhYmxlLWJvZHkgby1zY3JvbGxcIiBbY2xhc3MuaG9yaXpvbnRhbC1zY3JvbGxdPVwiaG9yaXpvbnRhbFNjcm9sbFwiIFtjbGFzcy5zY3JvbGxlZF09XCJob3Jpem9udGFsU2Nyb2xsZWRcIlxuICAgICAgICBbbmdTdHlsZV09XCJ7J3Zpc2liaWxpdHknOiBzcGlubmVyQ29udGFpbmVyID8gJ2hpZGRlbicgOiAndmlzaWJsZSd9XCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFlbmFibGVkVmlydHVhbFNjcm9sbDsgZWxzZSB0YWJsZVdpdGhWaXJ0dWFsU2Nyb2xsXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiby10YWJsZS1vdmVyZmxvdyBvLXNjcm9sbFwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJsZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI3RhYmxlV2l0aFZpcnR1YWxTY3JvbGw+XG4gICAgICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0ICN2aXJ0dWFsU2Nyb2xsVmlld1BvcnQgZnhGbGV4PlxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YWJsZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbiAgPCEtLVRBQkxFIFBBR0lOQVRPUi0tPlxuICA8bWF0LXBhZ2luYXRvciAqbmdJZj1cInBhZ2luYXRvclwiICNtYXRwYWdpbmF0b3IgW2xlbmd0aF09XCJkYXRhU291cmNlPy5yZXN1bHRzTGVuZ3RoXCIgW3BhZ2VJbmRleF09XCJwYWdpbmF0b3IucGFnZUluZGV4XCIgW3BhZ2VTaXplXT1cInF1ZXJ5Um93c1wiXG4gICAgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdpbmF0b3IucGFnZVNpemVPcHRpb25zXCIgKHBhZ2UpPVwib25DaGFuZ2VQYWdlKCRldmVudClcIiBbc2hvd0ZpcnN0TGFzdEJ1dHRvbnNdPVwicGFnaW5hdG9yLnNob3dGaXJzdExhc3RCdXR0b25zXCJcbiAgICAgW25nU3R5bGVdPVwieyd2aXNpYmlsaXR5Jzogc3Bpbm5lckNvbnRhaW5lciA/ICdoaWRkZW4nIDogJ3Zpc2libGUnfVwiPlxuICA8L21hdC1wYWdpbmF0b3I+XG5cbiAgPCEtLUxPQURJTkctLT5cbiAgPGRpdiAjc3Bpbm5lckNvbnRhaW5lciAqbmdJZj1cInNob3dMb2FkaW5nIHwgYXN5bmNcIiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCIgW25nU3R5bGVdPVwieyd0b3AucHgnOiB0b29sQmFySGVpZ2h0fVwiXG4gICAgY2xhc3M9XCJzcGlubmVyLWNvbnRhaW5lclwiIFtjbGFzcy5zcGlubmVyLWNvbnRhaW5lci1zY3JvbGxhYmxlXT1cImxvYWRpbmdTY3JvbGwgfCBhc3luY1wiPlxuICAgIDxvLXRhYmxlLXNrZWxldG9uPjwvby10YWJsZS1za2VsZXRvbj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBEaXNhYmxlIGJsb2NrZXIgLS0+XG4gIDxkaXYgKm5nSWY9XCIhZW5hYmxlZFwiIGNsYXNzPVwiby10YWJsZS1kaXNhYmxlZC1ibG9ja2VyXCI+PC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0YWJsZT5cblxuICA8dGFibGUgbWF0LXRhYmxlICN0YWJsZSBbY2xhc3MuYXV0b2FkanVzdGVkXT1cImF1dG9BZGp1c3RcIiBbdHJhY2tCeV09XCJnZXRUcmFja0J5RnVuY3Rpb24oKVwiIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBvTWF0U29ydFxuICAgIFtvTWF0U29ydENvbHVtbnNdPVwic29ydENvbEFycmF5XCIgW25nQ2xhc3NdPVwicm93SGVpZ2h0T2JzZXJ2YWJsZSB8IGFzeW5jXCIgKGNka09ic2VydmVDb250ZW50KT1cInByb2plY3RDb250ZW50Q2hhbmdlZCgpXCJcbiAgICBbb1RhYmxlRXhwYW5kZWRGb290ZXJdPVwiKGxvYWRpbmcgfCBhc3luYykgPT09IGZhbHNlXCIgW29UYWJsZUV4cGFuZGVkRm9vdGVyQ29sc3Bhbl09XCJ2aXNpYmxlQ29sQXJyYXkubGVuZ3RoXCIgW211bHRpVGVtcGxhdGVEYXRhUm93c109XCJzaG93RXhwYW5kYWJsZVJvdygpXCJcbiAgICBhcmlhLWRlc2NyaWJlZGJ5PVwib250aW1pemUtd2ViIHRhYmxlXCI+XG5cbiAgICA8IS0tQ2hlY2tib3ggQ29sdW1uIC0tPlxuICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi5uYW1lXCIgKm5nSWY9XCJvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRhYmxlQ29sdW1uU2VsZWN0QWxsQ29udGVudENoaWxkOyBlbHNlIGN1c3RvbUhlYWRlclNlbGVjdEFsbFRlbXBsYXRlXCI+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRlbnRcIiAqbmdJZj1cImlzU2VsZWN0aW9uTW9kZU11bHRpcGxlKClcIj5cbiAgICAgICAgICAgIDxvLXRhYmxlLWhlYWRlci1zZWxlY3QtYWxsIFtjb2x1bW5dPVwib1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW5cIj48L28tdGFibGUtaGVhZGVyLXNlbGVjdC1hbGw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvdGg+XG4gICAgICAgIDx0ZCBtYXQtY2VsbCAqbWF0Q2VsbERlZj1cImxldCByb3dcIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94IG5hbWU9XCJpZFtdXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIFtkaXNhYmxlZF09XCJpc0Rpc2FibGVDaGVja2JveChyb3cpXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwic2VsZWN0aW9uQ2hlY2tib3hUb2dnbGUoJGV2ZW50LCByb3cpXCIgW2NoZWNrZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCI+XG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjY3VzdG9tSGVhZGVyU2VsZWN0QWxsVGVtcGxhdGU+XG4gICAgICAgIDx0aCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW2NsYXNzLnJlc2l6YWJsZV09XCJyZXNpemFibGVcIiBjbGFzcz1cIm1hdC1oZWFkZXItc2VsZWN0LWFsbC13aXRoLXRpdGxlIG8tY2VudGVyXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGhdPVwib1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4ud2lkdGhcIiBbc3R5bGUubWluLXdpZHRoXT1cImdldE1pbldpZHRoQ29sdW1uKG9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uKVwiXG4gICAgICAgICAgW3N0eWxlLm1heC13aWR0aF09XCJvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi5tYXhXaWR0aFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZW50XCI+XG4gICAgICAgICAgICA8by10YWJsZS1oZWFkZXItc2VsZWN0LWFsbCBbY29sdW1uXT1cIm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uXCI+PC9vLXRhYmxlLWhlYWRlci1zZWxlY3QtYWxsPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RoPlxuICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCIgY2xhc3M9XCJvLWNlbnRlclwiIFtzdHlsZS53aWR0aF09XCJvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi53aWR0aFwiXG4gICAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJnZXRNaW5XaWR0aENvbHVtbihvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbilcIiBbc3R5bGUubWF4LXdpZHRoXT1cIm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLm1heFdpZHRoXCI+XG4gICAgICAgICAgPG1hdC1jaGVja2JveCBuYW1lPVwiaWRbXVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiBbZGlzYWJsZWRdPVwiaXNEaXNhYmxlQ2hlY2tib3gocm93KVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cInNlbGVjdGlvbkNoZWNrYm94VG9nZ2xlKCRldmVudCwgcm93KVwiIFtjaGVja2VkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiPlxuICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuXG4gICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmPjwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tRXhwYW5kYWJsZSBDb2x1bW4gLS0+XG4gICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cIm9UYWJsZU9wdGlvbnMuZXhwYW5kYWJsZUNvbHVtbi5uYW1lXCIgKm5nSWY9XCJpc0NvbHVtbkV4cGFuZGFibGUoKVwiPlxuICAgICAgPHRoIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAge3sgb1RhYmxlT3B0aW9ucy5leHBhbmRhYmxlQ29sdW1uLnRpdGxlIH19XG4gICAgICA8L3RoPlxuICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvdztsZXQgcm93SW5kZXggPSBkYXRhSW5kZXhcIj5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwic2hvd0V4cGFuZGFibGVJY29uKHJvdywgcm93SW5kZXgpIHwgYXN5bmNcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlUm93RXhwYW5kYWJsZShyb3csICRldmVudClcIlxuICAgICAgICAoa2V5ZG93bik9XCJ0b2dnbGVSb3dFeHBhbmRhYmxlKHJvdywgJGV2ZW50KVwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0V4cGFuZGVkKHJvdylcIj57eyB0YWJsZVJvd0V4cGFuZGFibGUuaWNvbkNvbGxhcHNlIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0V4cGFuZGVkKHJvdylcIj57eyB0YWJsZVJvd0V4cGFuZGFibGUuaWNvbkV4cGFuZCB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICA8L21hdC1pY29uPlxuICAgICAgPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gR2VuZXJpYyBjb2x1bW4gZGVmaW5pdGlvbiAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2Ygb1RhYmxlT3B0aW9ucy5jb2x1bW5zXCIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4ubmFtZVwiPlxuICAgICAgPCEtLURlZmluZSBoZWFkZXItY2VsbC0tPlxuXG4gICAgICA8dGggbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFtuZ0NsYXNzXT1cImdldFRpdGxlQWxpZ25DbGFzcyhjb2x1bW4pXCIgW2NsYXNzLnJlc2l6YWJsZV09XCJyZXNpemFibGVcIiBbc3R5bGUud2lkdGhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJnZXRNaW5XaWR0aENvbHVtbihjb2x1bW4pXCIgW3N0eWxlLm1heC13aWR0aF09XCJjb2x1bW4ubWF4V2lkdGhcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuICAgICAgICAgIDxvLXRhYmxlLWhlYWRlciBbY29sdW1uXT1cImNvbHVtblwiPjwvby10YWJsZS1oZWFkZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC90aD5cblxuXG4gICAgICA8IS0tRGVmaW5lIG1hdC1jZWxsLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRhYmxlLm11bHRpVGVtcGxhdGVEYXRhUm93czsgZWxzZSBjZWxsVGVtcGxhdGVNdWx0aVRlbXBsYXRlRGF0YVJvd3NcIj5cbiAgICAgICAgPHRkICNjZWxsIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvdztsZXQgcm93SW5kZXggPSBpbmRleCBcIiBbbmdDbGFzc109XCJbY29sdW1uLmNsYXNzTmFtZSwgZ2V0Q2VsbEFsaWduQ2xhc3MoY29sdW1uKV1cIlxuICAgICAgICAgIChjbGljayk9XCJoYW5kbGVDbGljayhyb3csIGNvbHVtbiwgcm93SW5kZXgsIGNlbGwsICRldmVudClcIiAoZGJsY2xpY2spPVwiaGFuZGxlRG91YmxlQ2xpY2socm93LCBjb2x1bW4sIHJvd0luZGV4LCBjZWxsLCAkZXZlbnQpXCJcbiAgICAgICAgICBbY2xhc3MuZW1wdHktY2VsbF09XCJpc0VtcHR5KHJvd1tjb2x1bW4ubmFtZV0pXCIgW21hdFRvb2x0aXBEaXNhYmxlZF09XCIhY29sdW1uLmhhc1Rvb2x0aXAoKVwiIFttYXRUb29sdGlwXT1cImNvbHVtbi5nZXRUb29sdGlwKHJvdylcIlxuICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCIgbWF0VG9vbHRpcFNob3dEZWxheT1cIjc1MFwiIG1hdFRvb2x0aXBDbGFzcz1cIm8tdGFibGUtY2VsbC10b29sdGlwXCJcbiAgICAgICAgICBbY2xhc3Muby1tYXQtY2VsbC1tdWx0aWxpbmVdPVwiKGNvbHVtbi5pc011bHRpbGluZSB8IGFzeW5jKVwiIFtvQ29udGV4dE1lbnVdPVwidGFibGVDb250ZXh0TWVudVwiXG4gICAgICAgICAgW29Db250ZXh0TWVudURhdGFdPVwieyBjZWxsTmFtZTpjb2x1bW4ubmFtZSwgcm93VmFsdWU6cm93LCByb3dJbmRleDpyb3dJbmRleH1cIiBbc3R5bGUud2lkdGhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICBbc3R5bGUubWluLXdpZHRoXT1cImdldE1pbldpZHRoQ29sdW1uKGNvbHVtbilcIiBbc3R5bGUubWF4LXdpZHRoXT1cImNvbHVtbi5tYXhXaWR0aFwiXG4gICAgICAgICAgW2NsYXNzLm8tdGFibGUtZWRpdGluZy1jZWxsXT1cImlzUm93U2VsZWN0ZWQocm93KSAmJiBjb2x1bW4uZWRpdGluZ1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjZWxsUmVuZGVyZXI7Y29udGV4dDp7Y29sdW1uOmNvbHVtbixyb3c6cm93fVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctdGVtcGxhdGUgI2NlbGxUZW1wbGF0ZU11bHRpVGVtcGxhdGVEYXRhUm93cz5cbiAgICAgICAgPHRkICNjZWxsIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvdztsZXQgcm93SW5kZXggPSBkYXRhSW5kZXggXCIgW25nQ2xhc3NdPVwiW2NvbHVtbi5jbGFzc05hbWUsIGdldENlbGxBbGlnbkNsYXNzKGNvbHVtbildXCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2xpY2socm93LCBjb2x1bW4sIHJvd0luZGV4LCBjZWxsLCAkZXZlbnQpXCIgKGRibGNsaWNrKT1cImhhbmRsZURvdWJsZUNsaWNrKHJvdywgY29sdW1uLCByb3dJbmRleCwgY2VsbCwgJGV2ZW50KVwiXG4gICAgICAgICAgW2NsYXNzLmVtcHR5LWNlbGxdPVwiaXNFbXB0eShyb3dbY29sdW1uLm5hbWVdKVwiIFttYXRUb29sdGlwRGlzYWJsZWRdPVwiIWNvbHVtbi5oYXNUb29sdGlwKClcIiBbbWF0VG9vbHRpcF09XCJjb2x1bW4uZ2V0VG9vbHRpcChyb3cpXCJcbiAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJiZWxvd1wiIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI3NTBcIiBtYXRUb29sdGlwQ2xhc3M9XCJvLXRhYmxlLWNlbGwtdG9vbHRpcFwiXG4gICAgICAgICAgW2NsYXNzLm8tbWF0LWNlbGwtbXVsdGlsaW5lXT1cIihjb2x1bW4uaXNNdWx0aWxpbmUgfCBhc3luYylcIiBbb0NvbnRleHRNZW51XT1cInRhYmxlQ29udGV4dE1lbnVcIlxuICAgICAgICAgIFtvQ29udGV4dE1lbnVEYXRhXT1cInsgY2VsbE5hbWU6Y29sdW1uLm5hbWUsIHJvd1ZhbHVlOnJvdywgcm93SW5kZXg6cm93SW5kZXh9XCIgW3N0eWxlLndpZHRoXT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgW3N0eWxlLm1pbi13aWR0aF09XCJnZXRNaW5XaWR0aENvbHVtbihjb2x1bW4pXCIgW3N0eWxlLm1heC13aWR0aF09XCJjb2x1bW4ubWF4V2lkdGhcIlxuICAgICAgICAgIFtjbGFzcy5vLXRhYmxlLWVkaXRpbmctY2VsbF09XCJpc1Jvd1NlbGVjdGVkKHJvdykgJiYgY29sdW1uLmVkaXRpbmdcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2VsbFJlbmRlcmVyO2NvbnRleHQ6e2NvbHVtbjpjb2x1bW4scm93OnJvd31cIj48L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwhLS1EZWZpbmUgbWF0LWZvb3Rlci1jZWxsLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1RvdGFscyB8IGFzeW5jXCI+XG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWYgW25nQ2xhc3NdPVwiY29sdW1uLmNsYXNzTmFtZVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiICpuZ0lmPVwiY29sdW1uLmFnZ3JlZ2F0ZSAmJiBjb2x1bW4uYWdncmVnYXRlLnRpdGxlXCI+XG4gICAgICAgICAgICB7eyBjb2x1bW4uYWdncmVnYXRlLnRpdGxlIHwgb1RyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhY29sdW1uLnJlbmRlcmVyXCI+XG4gICAgICAgICAgICB7eyBkYXRhU291cmNlLmdldEFnZ3JlZ2F0ZURhdGEoY29sdW1uKSB9fVxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cImNvbHVtbi5yZW5kZXJlciAmJiBjb2x1bW4uYWdncmVnYXRlXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY29sdW1uLnJlbmRlcmVyLnRlbXBsYXRlcmVmXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7Y2VsbHZhbHVlOiBkYXRhU291cmNlLmdldEFnZ3JlZ2F0ZURhdGEoY29sdW1uKX1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwhLS0gRXhwYW5kZWQgQ29udGVudCBDb2x1bW4gLSBUaGUgZGV0YWlsIHJvdyBpcyBtYWRlIHVwIG9mIHRoaXMgb25lIGNvbHVtbiB0aGF0IHNwYW5zIGFjcm9zcyBhbGwgY29sdW1ucyAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGFzRXhwYW5kZWRSb3dcIj5cbiAgICAgIDxuZy1jb250YWluZXIgbWF0Q29sdW1uRGVmPVwiZXhwYW5kZWREZXRhaWxcIj5cbiAgICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IHJvdztsZXQgcm93SW5kZXg9IGRhdGFJbmRleFwiIFthdHRyLmNvbHNwYW5dPVwib1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1ucy5sZW5ndGhcIj5cbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cImdldEV4cGFuZGVkUm93Q29udGFpbmVyQ2xhc3Mocm93SW5kZXgpXCIgW0BkZXRhaWxFeHBhbmRdPVwiZ2V0U3RhdGVFeHBhbmQocm93KVwiPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3RkPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tRk9PVEVSLUlOU0VSVEFCTEUtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd0xhc3RJbnNlcnRhYmxlUm93ICYmIG9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnRcIj5cbiAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi5uYW1lICsgZ2V0U3VmZml4Q29sdW1uSW5zZXJ0YWJsZSgpXCIgKm5nSWY9XCJvVGFibGVPcHRpb25zLnNlbGVjdENvbHVtbi52aXNpYmxlXCI+XG4gICAgICAgIDx0ZCBtYXQtZm9vdGVyLWNlbGwgKm1hdEZvb3RlckNlbGxEZWY+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBvVGFibGVPcHRpb25zLmNvbHVtbnNcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbi5uYW1lKyBnZXRTdWZmaXhDb2x1bW5JbnNlcnRhYmxlKClcIj5cblxuICAgICAgICA8dGQgbWF0LWZvb3Rlci1jZWxsICptYXRGb290ZXJDZWxsRGVmIFtuZ0NsYXNzXT1cImNvbHVtbi5jbGFzc05hbWVcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5pc0NvbHVtbkluc2VydGFibGUoY29sdW1uKSAmJiAhb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC51c2VDZWxsRWRpdG9yKGNvbHVtbilcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImluc2VydGFibGUtZm9ybS1maWVsZCBvLXRhYmxlLWNlbGwtZWRpdG9yLXRleHQgby10YWJsZS1jZWxsLWVkaXRvclwiIFtoaWRlUmVxdWlyZWRNYXJrZXJdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuZ2V0UGxhY2Vob2xkZXIoY29sdW1uKVwiIFtpZF09XCJjb2x1bW4uYXR0clwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuZ2V0Q29udHJvbChjb2x1bW4pXCIgW3JlcXVpcmVkXT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuaXNDb2x1bW5SZXF1aXJlZChjb2x1bW4pXCI+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm9NYXRFcnJvcj1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuY29sdW1uSGFzRXJyb3IoY29sdW1uLCAncmVxdWlyZWQnKVwiPlxuICAgICAgICAgICAgICAgIHt7ICdGT1JNX1ZBTElEQVRJT04uUkVRVUlSRUQnIHwgb1RyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5pc0NvbHVtbkluc2VydGFibGUoY29sdW1uKSAmJiBvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LnVzZUNlbGxFZGl0b3IoY29sdW1uKVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuY29sdW1uRWRpdG9yc1tjb2x1bW4uYXR0cl0udGVtcGxhdGVyZWZcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3d2YWx1ZTogb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5yb3dEYXRhIH1cIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dGaXJzdEluc2VydGFibGVSb3cgJiYgb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudFwiPlxuICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImdldENvbHVtbkluc2VydGFibGUob1RhYmxlT3B0aW9ucy5zZWxlY3RDb2x1bW4ubmFtZSlcIiAqbmdJZj1cIm9UYWJsZU9wdGlvbnMuc2VsZWN0Q29sdW1uLnZpc2libGVcIj5cbiAgICAgICAgPHRkIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZj5cbiAgICAgICAgPC90ZD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIG9UYWJsZU9wdGlvbnMuY29sdW1uc1wiIFttYXRDb2x1bW5EZWZdPVwiZ2V0Q29sdW1uSW5zZXJ0YWJsZShjb2x1bW4ubmFtZSlcIj5cblxuICAgICAgICA8dGQgbWF0LWhlYWRlci1jZWxsICptYXRIZWFkZXJDZWxsRGVmIFtuZ0NsYXNzXT1cImNvbHVtbi5jbGFzc05hbWVcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5pc0NvbHVtbkluc2VydGFibGUoY29sdW1uKSAmJiAhb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC51c2VDZWxsRWRpdG9yKGNvbHVtbilcIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImluc2VydGFibGUtZm9ybS1maWVsZFwiIFtoaWRlUmVxdWlyZWRNYXJrZXJdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgW3BsYWNlaG9sZGVyXT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuZ2V0UGxhY2Vob2xkZXIoY29sdW1uKVwiIFtpZF09XCJjb2x1bW4uYXR0clwiXG4gICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuZ2V0Q29udHJvbChjb2x1bW4pXCIgW3JlcXVpcmVkXT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuaXNDb2x1bW5SZXF1aXJlZChjb2x1bW4pXCI+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgKm9NYXRFcnJvcj1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuY29sdW1uSGFzRXJyb3IoY29sdW1uLCAncmVxdWlyZWQnKVwiPlxuICAgICAgICAgICAgICAgIHt7ICdGT1JNX1ZBTElEQVRJT04uUkVRVUlSRUQnIHwgb1RyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5pc0NvbHVtbkluc2VydGFibGUoY29sdW1uKSAmJiBvVGFibGVJbnNlcnRhYmxlUm93Q29tcG9uZW50LnVzZUNlbGxFZGl0b3IoY29sdW1uKVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuY29sdW1uRWRpdG9yc1tjb2x1bW4uYXR0cl0udGVtcGxhdGVyZWZcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyByb3d2YWx1ZTogb1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5yb3dEYXRhIH1cIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvdGQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBEZWZpbml0aW9uIGNvbHVtbiBncm91cCBoZWFkZXIgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGdyb3VwaW5nSGVhZGVyc1Jvd3M7IGxldCBpID0gaW5kZXhcIiBbbWF0Q29sdW1uRGVmXT1cImNvbHVtblwiPlxuICAgICAgPHRkIG1hdC1jZWxsICptYXRDZWxsRGVmPVwibGV0IGdyb3VwXCIgY2xhc3M9XCJncm91cGluZy1yb3dcIiBbb0NvbnRleHRNZW51XT1cInRhYmxlQ29udGV4dE1lbnVcIlxuICAgICAgICBbb0NvbnRleHRNZW51RGF0YV09XCJ7IGNlbGxOYW1lOmNvbHVtbiwgcm93VmFsdWU6Z3JvdXAsIHJvd0luZGV4Oml9XCIgW25nQ2xhc3NdPVwiZ2V0R3JvdXBIZWFkZXJDZWxsQWxpZ25DbGFzcyhjb2x1bW4pXCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJpPT09MFwiIGNsYXNzPVwiZ3JvdXBpbmctdGl0bGUtd3JhcHBlclwiIFtuZ1N0eWxlXT1cInsncGFkZGluZy1sZWZ0JzogMjAqKGdyb3VwLmxldmVsLTEpKydweCd9XCI+XG4gICAgICAgICAgPG1hdC1pY29uPnt7IGdyb3VwLmV4cGFuZGVkID8gJ2V4cGFuZF9tb3JlJyA6ICdjaGV2cm9uX3JpZ2h0JyB9fTwvbWF0LWljb24+XG4gICAgICAgICAge3sgZ3JvdXAudGl0bGUgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJncm91cGluZy1hZ2dyZWdhdGVcIiAqbmdJZj1cImdyb3VwLmhhc0FjdGl2ZUFnZ3JlZ2F0ZSh2aXNpYmxlQ29sQXJyYXlbaV0pXCI+XG4gICAgICAgICAge3sgZ3JvdXAuZ2V0Q29sdW1uQWN0aXZlQWdncmVnYXRlVGl0bGUodmlzaWJsZUNvbEFycmF5W2ldKSB8IG9UcmFuc2xhdGUgfX0gOlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZ2V0T0NvbHVtbkZyb21Hcm91cEhlYWRlckNvbHVtbihjb2x1bW4pLnJlbmRlcmVyXCI+XG4gICAgICAgICAgICB7eyBncm91cC5nZXRDb2x1bW5BZ2dyZWdhdGVWYWx1ZSh2aXNpYmxlQ29sQXJyYXlbaV0pfX1cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ2V0T0NvbHVtbkZyb21Hcm91cEhlYWRlckNvbHVtbihjb2x1bW4pLnJlbmRlcmVyXCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJnZXRPQ29sdW1uRnJvbUdyb3VwSGVhZGVyQ29sdW1uKGNvbHVtbikucmVuZGVyZXI/LnRlbXBsYXRlcmVmOyBjb250ZXh0OnsgY2VsbHZhbHVlOiAgZ3JvdXAuZ2V0Q29sdW1uQWdncmVnYXRlVmFsdWUodmlzaWJsZUNvbEFycmF5W2ldKSB9XCI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvdGQ+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyIG1hdENvbHVtbkRlZj1cInBvc2l0aW9uXCI+XG4gICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgcm93XCI+IHt7cm93fX0gPC90ZD5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDx0ciAjdGFibGVIZWFkZXIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cIm9UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnM7IHN0aWNreTogZml4ZWRIZWFkZXJcIj48L3RyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiF0YWJsZS5tdWx0aVRlbXBsYXRlRGF0YVJvd3M7IGVsc2Ugcm93VGVtcGxhdGVNdWx0aVRlbXBsYXRlRGF0YVJvd3NcIj5cbiAgICAgIDx0ciBtYXQtcm93IG9UYWJsZVJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogb1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1uczsgd2hlbjppc05vdEdyb3VwOyBsZXQgcm93SW5kZXggPSBpbmRleFwiXG4gICAgICAgIFtjbGFzcy5zZWxlY3RlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIiBbbmdDbGFzc109XCJyb3cgfCBvVGFibGVSb3dDbGFzczogcm93SW5kZXg6IHJvd0NsYXNzXCI+XG4gICAgICA8L3RyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjcm93VGVtcGxhdGVNdWx0aVRlbXBsYXRlRGF0YVJvd3M+XG4gICAgICA8dHIgbWF0LXJvdyBvVGFibGVSb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IG9UYWJsZU9wdGlvbnMudmlzaWJsZUNvbHVtbnM7IHdoZW46aXNOb3RHcm91cDsgbGV0IHJvd0luZGV4ID0gZGF0YUluZGV4XCJcbiAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cImlzUm93U2VsZWN0ZWQocm93KVwiIFtuZ0NsYXNzXT1cInJvdyB8IG9UYWJsZVJvd0NsYXNzOiByb3dJbmRleDogcm93Q2xhc3NcIj5cbiAgICAgIDwvdHI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDwhLS0gUm93IEdyb3VwIGhlYWRlciAtLT5cbiAgICA8dHIgbWF0LXJvdyAqbWF0Um93RGVmPVwibGV0IHJvdzsgY29sdW1uczogZ3JvdXBpbmdIZWFkZXJzUm93czsgd2hlbjppc0dyb3VwXCIgKGNsaWNrKT1cImdyb3VwSGVhZGVyQ2xpY2socm93KVwiXG4gICAgICBbbmdDbGFzc109XCJnZXRDbGFzc05hbWVHcm91cEhlYWRlcihyb3cpXCI+XG4gICAgPC90cj5cblxuICAgIDwhLS0gRXhwYW5kZWQgZGV0YWlsIHJvdy0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNFeHBhbmRlZFJvd1wiPlxuICAgICAgPHRyIG1hdC1yb3cgKm1hdFJvd0RlZj1cImxldCByb3c7IGNvbHVtbnM6IFsnZXhwYW5kZWREZXRhaWwnXVwiIGNsYXNzPVwiby10YWJsZS1yb3ctZXhwYW5kZWRcIj48L3RyPlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dMYXN0SW5zZXJ0YWJsZVJvd1wiPlxuICAgICAgPHRyIG1hdC1mb290ZXItcm93ICptYXRGb290ZXJSb3dEZWY9XCJvVGFibGVPcHRpb25zLmNvbHVtbnNJbnNlcnRhYmxlczsgc3RpY2t5OiB0cnVlXCJcbiAgICAgICAgKGtleXVwKT1cIm9UYWJsZUluc2VydGFibGVSb3dDb21wb25lbnQuaGFuZGxlS2V5Ym9hcmRFdmVudCgkZXZlbnQpXCIgY2xhc3M9XCJvLXRhYmxlLWluc2VydGFibGVcIj48L3RyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93Rmlyc3RJbnNlcnRhYmxlUm93XCI+XG4gICAgICA8dHIgbWF0LWhlYWRlci1yb3cgKm1hdEhlYWRlclJvd0RlZj1cIm9UYWJsZU9wdGlvbnMuY29sdW1uc0luc2VydGFibGVzOyBzdGlja3k6IHRydWVcIlxuICAgICAgICAoa2V5dXApPVwib1RhYmxlSW5zZXJ0YWJsZVJvd0NvbXBvbmVudC5oYW5kbGVLZXlib2FyZEV2ZW50KCRldmVudClcIiBjbGFzcz1cIm8tdGFibGUtaW5zZXJ0YWJsZVwiPiA8L3RyPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93VG90YWxzIHwgYXN5bmNcIj5cbiAgICAgIDx0ciBtYXQtZm9vdGVyLXJvdyAqbWF0Rm9vdGVyUm93RGVmPVwib1RhYmxlT3B0aW9ucy52aXNpYmxlQ29sdW1uczsgc3RpY2t5OiB0cnVlXCIgY2xhc3M9XCJvLXRhYmxlLWFnZ3JlZ2F0ZVwiPlxuICAgICAgPC90cj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC90YWJsZT5cblxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb250ZXh0TWVudUNvbnRlbnRDaGlsZCAmJiBjb250ZXh0TWVudVwiPlxuICA8by10YWJsZS1jb250ZXh0LW1lbnUgW2luc2VydF09XCJpbnNlcnRCdXR0b25cIiBbZWRpdF09XCJlZGl0aW9uTW9kZSAhPT0gRURJVF9NT0RFX05PTkVcIiBbdmlldy1kZXRhaWxdPVwiZGV0YWlsTW9kZSAhPT0gREVUQUlMX01PREVfTk9ORVwiXG4gICAgW3JlZnJlc2hdPVwicmVmcmVzaEJ1dHRvblwiIFtkZWxldGVdPVwiZGVsZXRlQnV0dG9uXCIgW2ZpbHRlcl09XCJzaG93RmlsdGVyT3B0aW9uXCIgW2dyb3VwLWJ5LXJvd109XCJncm91cGFibGVcIj5cbiAgPC9vLXRhYmxlLWNvbnRleHQtbWVudT5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2NlbGxSZW5kZXJlciBsZXQtcm93PVwicm93XCIgbGV0LWNvbHVtbj1cImNvbHVtblwiPlxuICA8ZGl2IGNsYXNzPVwiY29udGVudFwiPlxuXG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwidHJ1ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY29sdW1uLnJlbmRlcmVyICE9IG51bGwgJiYgKCFjb2x1bW4uZWRpdGluZyB8fCBjb2x1bW4uZWRpdGluZyAmJiAhaXNSb3dTZWxlY3RlZChyb3cpKVwiPlxuICAgICAgICA8bmctdGVtcGxhdGUgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW4ucmVuZGVyZXI/LnRlbXBsYXRlcmVmOyBjb250ZXh0OnsgY2VsbHZhbHVlOiByb3dbY29sdW1uLm5hbWVdLCByb3d2YWx1ZTpyb3cgfVwiPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJpc1Jvd1NlbGVjdGVkKHJvdykgJiYgY29sdW1uLmVkaXRpbmdcIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uLmVkaXRvcj8udGVtcGxhdGVyZWY7IGNvbnRleHQ6eyBjZWxsdmFsdWU6IHJvd1tjb2x1bW4ubmFtZV0sIHJvd3ZhbHVlOnJvdyB9XCI+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiY29sdW1uLnR5cGUgPT09ICdlZGl0QnV0dG9uSW5Sb3cnIHx8IGNvbHVtbi50eXBlID09PSAnZGV0YWlsQnV0dG9uSW5Sb3cnXCI+XG4gICAgICAgIDxkaXYgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBjZW50ZXJcIiBjbGFzcz1cIm8tYWN0aW9uLWNlbGwtcmVuZGVyZXJcIiAoY2xpY2spPVwib25EZXRhaWxCdXR0b25DbGljayhjb2x1bW4sIHJvdywgJGV2ZW50KVwiPlxuICAgICAgICAgIDxtYXQtaWNvbj57eyBnZXREZXRhaWxCdXR0b25JY29uKGNvbHVtbikgfX08L21hdC1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0Pnt7IHJvd1tjb2x1bW4ubmFtZV0gfX08L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|