@mediusinc/mng-commons 5.0.0-rc.1 → 5.0.0-rc.3
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/core/data-providers/base-data-provider.factory.d.ts +13 -0
- package/core/data-providers/base.data-provider.d.ts +2 -14
- package/core/descriptors/editor.descriptor.d.ts +1 -1
- package/core/descriptors/tableview.descriptor.d.ts +5 -5
- package/core/directives/component.directive.d.ts +2 -2
- package/core/index.d.ts +1 -0
- package/core/router/route-builder.d.ts +149 -26
- package/core/router/routes-builder.d.ts +28 -13
- package/core/security/permission.service.d.ts +1 -0
- package/core/services/commons-router.service.d.ts +3 -3
- package/core/services/commons.service.d.ts +31 -42
- package/core/services/tokens/module-config.token.d.ts +2 -2
- package/esm2022/core/components/notification/notification-wrapper.component.mjs +5 -5
- package/esm2022/core/components/pages/error/error.page.component.mjs +5 -5
- package/esm2022/core/components/pages/not-found/not-found.page.component.mjs +5 -5
- package/esm2022/core/data-providers/base-data-provider.factory.mjs +28 -0
- package/esm2022/core/data-providers/base.data-provider.mjs +1 -31
- package/esm2022/core/descriptors/editor.descriptor.mjs +1 -1
- package/esm2022/core/descriptors/tableview.descriptor.mjs +1 -1
- package/esm2022/core/directives/component.directive.mjs +12 -9
- package/esm2022/core/directives/dialog-keydown-handler.directive.mjs +3 -3
- package/esm2022/core/directives/template.directive.mjs +3 -3
- package/esm2022/core/index.mjs +2 -1
- package/esm2022/core/pipes/boolean.pipe.mjs +3 -3
- package/esm2022/core/pipes/class-map.pipe.mjs +3 -3
- package/esm2022/core/pipes/enum.pipe.mjs +3 -3
- package/esm2022/core/pipes/enumerate-async.pipe.mjs +3 -3
- package/esm2022/core/pipes/enumerate.pipe.mjs +3 -3
- package/esm2022/core/pipes/getter.pipe.mjs +3 -3
- package/esm2022/core/pipes/i18n-property.pipe.mjs +3 -3
- package/esm2022/core/pipes/json-path.pipe.mjs +3 -3
- package/esm2022/core/pipes/parametrize.pipe.mjs +3 -3
- package/esm2022/core/pipes/template.pipe.mjs +3 -3
- package/esm2022/core/router/route-builder.mjs +211 -84
- package/esm2022/core/router/routes-builder.mjs +41 -43
- package/esm2022/core/security/permission.service.mjs +7 -5
- package/esm2022/core/services/commons-init.service.mjs +5 -5
- package/esm2022/core/services/commons-router.service.mjs +18 -17
- package/esm2022/core/services/commons.service.mjs +112 -169
- package/esm2022/core/services/local-storage-config.service.mjs +3 -3
- package/esm2022/core/services/tokens/module-config.token.mjs +1 -1
- package/esm2022/filter/descriptors/filter-lookup.descriptor.mjs +4 -4
- package/esm2022/form/api/data-providers/lookup-data-provider.factory.mjs +31 -0
- package/esm2022/form/api/data-providers/lookup.data-provider.mjs +1 -31
- package/esm2022/form/api/index.mjs +2 -1
- package/esm2022/form/components/autocomplete/autocomplete.component.mjs +105 -102
- package/esm2022/form/components/date-range/date-range.component.mjs +3 -3
- package/esm2022/form/components/dropdown/dropdown.component.mjs +148 -90
- package/esm2022/form/directives/input-trim.directive.mjs +3 -3
- package/esm2022/model/data-providers/base-from-type-data-provider.factory.mjs +8 -0
- package/esm2022/model/descriptors/enum.descriptor.mjs +3 -6
- package/esm2022/model/descriptors/model.descriptor.mjs +22 -9
- package/esm2022/model/descriptors/type.descriptor.mjs +3 -9
- package/esm2022/model/index.mjs +3 -1
- package/esm2022/table/api/data-providers/table-data-provider.factory.mjs +33 -0
- package/esm2022/table/api/data-providers/table.data-provider.mjs +1 -31
- package/esm2022/table/api/descriptors/sort.descriptor.mjs +2 -2
- package/esm2022/table/api/descriptors/table-descriptor.factory.mjs +89 -0
- package/esm2022/table/api/descriptors/table.descriptor.mjs +4 -139
- package/esm2022/table/api/helpers/table-descriptor-helpers.mjs +97 -0
- package/esm2022/table/api/index.mjs +4 -1
- package/esm2022/table/components/column-filter-full/column-filter-full.component.mjs +8 -9
- package/esm2022/table/components/column-value/column-value.component.mjs +4 -4
- package/esm2022/table/components/table/table.component.mjs +7 -7
- package/esm2022/table/pipes/locale-default-row-class.pipe.mjs +5 -5
- package/esm2022/table/pipes/table-column-filter-class.pipe.mjs +3 -3
- package/esm2022/table/services/data-list.service.mjs +4 -4
- package/esm2022/tableview/action/components/action/action.component.mjs +142 -190
- package/esm2022/tableview/action/components/editor/action-editor.component.mjs +58 -68
- package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +133 -154
- package/esm2022/tableview/action/components/localization/data-language-dropdown.component.mjs +22 -40
- package/esm2022/tableview/action/components/route/action-route.component.mjs +21 -26
- package/esm2022/tableview/action/components/table/action-table.component.mjs +4 -4
- package/esm2022/tableview/action/models/execution/action-instance.model.mjs +1 -1
- package/esm2022/tableview/action/services/action-executor.service.mjs +10 -10
- package/esm2022/tableview/action/services/component-action-executor.service.mjs +3 -3
- package/esm2022/tableview/action/services/data-provider-executor.service.mjs +3 -3
- package/esm2022/tableview/action/services/navigation.service.mjs +6 -5
- package/esm2022/tableview/action/services/root-action-executor.service.mjs +3 -3
- package/esm2022/tableview/action/services/view-container.service.mjs +8 -24
- package/esm2022/tableview/api/action/descriptors/action-descriptor.factory.mjs +119 -0
- package/esm2022/tableview/api/action/descriptors/action-editor-descriptor.factory.mjs +77 -0
- package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +28 -80
- package/esm2022/tableview/api/action/descriptors/action-link-descriptor.factory.mjs +45 -0
- package/esm2022/tableview/api/action/descriptors/action-link.descriptor.mjs +1 -32
- package/esm2022/tableview/api/action/descriptors/action.descriptor.mjs +3 -69
- package/esm2022/tableview/api/action/models/action-component.model.mjs +1 -1
- package/esm2022/tableview/api/action/models/execution/action-instance.model.mjs +1 -1
- package/esm2022/tableview/api/action/models/execution/view-container.model.mjs +1 -1
- package/esm2022/tableview/api/editor/data-providers/editor-data-provider.factory.mjs +33 -0
- package/esm2022/tableview/api/editor/data-providers/editor.data-provider.mjs +1 -31
- package/esm2022/tableview/api/editor/descriptors/editor-descriptor.factory.mjs +81 -0
- package/esm2022/tableview/api/editor/descriptors/editor.descriptor.mjs +24 -161
- package/esm2022/tableview/api/editor/descriptors/field-action.descriptor.mjs +1 -1
- package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +13 -5
- package/esm2022/tableview/api/editor/descriptors/field-group.descriptor.mjs +3 -3
- package/esm2022/tableview/api/editor/descriptors/field-lookup.descriptor.mjs +4 -4
- package/esm2022/tableview/api/editor/descriptors/field-many.descriptor.mjs +3 -3
- package/esm2022/tableview/api/editor/descriptors/field-validation.descriptor.mjs +1 -1
- package/esm2022/tableview/api/editor/descriptors/field.descriptor.mjs +36 -7
- package/esm2022/tableview/api/editor/helpers/editor-descriptor-helpers.mjs +95 -0
- package/esm2022/tableview/api/editor/helpers/field-validators.mjs +17 -27
- package/esm2022/tableview/api/editor/models/editor-fields.model.mjs +1 -1
- package/esm2022/tableview/api/editor/models/field-action-context.model.mjs +1 -1
- package/esm2022/tableview/api/editor/models/field-validation.model.mjs +2 -0
- package/esm2022/tableview/api/editor/models/field.model.mjs +1 -1
- package/esm2022/tableview/api/editor/models/form-editor.event.mjs +1 -1
- package/esm2022/tableview/api/editor/models/form-editor.interface.mjs +1 -1
- package/esm2022/tableview/api/editor/models/formly-custom-field.model.mjs +3 -3
- package/esm2022/tableview/api/editor/models/formly-field.model.mjs +1 -1
- package/esm2022/tableview/api/index.mjs +11 -1
- package/esm2022/tableview/api/tableview/data-providers/tableview-data-provider.factory.mjs +47 -0
- package/esm2022/tableview/api/tableview/data-providers/tableview.data-provider.mjs +5 -46
- package/esm2022/tableview/api/tableview/descriptors/tableview-descriptor.factory.mjs +111 -0
- package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +26 -186
- package/esm2022/tableview/api/tableview/helpers/files-export.mjs +2 -2
- package/esm2022/tableview/api/tableview/helpers/tableview-create.mjs +5 -5
- package/esm2022/tableview/api/tableview/helpers/tableview-default-actions.mjs +53 -18
- package/esm2022/tableview/api/tableview/helpers/tableview-descriptor-helpers.mjs +110 -0
- package/esm2022/tableview/api/tableview/helpers/tableview-input-builder.mjs +2 -2
- package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +163 -138
- package/esm2022/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.mjs +9 -5
- package/esm2022/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +13 -16
- package/esm2022/tableview/editor/components/formly/fields/formly-field-custom/formly-field-custom.component.mjs +3 -3
- package/esm2022/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.mjs +103 -0
- package/esm2022/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +12 -16
- package/esm2022/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +3 -3
- package/esm2022/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.mjs +36 -53
- package/esm2022/tableview/editor/components/formly/fields/formly-field-label/formly-field-label.component.mjs +3 -3
- package/esm2022/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +20 -24
- package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +24 -28
- package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +30 -31
- package/esm2022/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +3 -3
- package/esm2022/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +3 -3
- package/esm2022/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +3 -3
- package/esm2022/tableview/editor/helpers/editor-formly.mjs +85 -56
- package/esm2022/tableview/editor/helpers/formly-config.mjs +5 -3
- package/esm2022/tableview/editor/models/formly-config.model.mjs +1 -1
- package/esm2022/tableview/editor/services/form-editor.service.mjs +96 -0
- package/esm2022/tableview/index.mjs +2 -1
- package/esm2022/tableview/tableview/components/route/tableview-route.component.mjs +10 -10
- package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +26 -43
- package/esm2022/tableview/tableview/router/tableview-route-builder.mjs +17 -43
- package/fesm2022/mediusinc-mng-commons-core.mjs +460 -390
- package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-filter.mjs +3 -3
- package/fesm2022/mediusinc-mng-commons-filter.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-form-api.mjs +18 -18
- package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-form.mjs +257 -195
- package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-model.mjs +43 -33
- package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table-api.mjs +192 -146
- package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table.mjs +26 -27
- package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +906 -665
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview.mjs +1015 -960
- package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
- package/form/api/data-providers/lookup-data-provider.factory.d.ts +18 -0
- package/form/api/data-providers/lookup.data-provider.d.ts +2 -14
- package/form/api/index.d.ts +1 -0
- package/form/components/autocomplete/autocomplete.component.d.ts +33 -24
- package/form/components/dropdown/dropdown.component.d.ts +38 -25
- package/model/data-providers/base-from-type-data-provider.factory.d.ts +8 -0
- package/model/descriptors/enum.descriptor.d.ts +1 -2
- package/model/descriptors/model.descriptor.d.ts +11 -4
- package/model/descriptors/type.descriptor.d.ts +2 -4
- package/model/index.d.ts +1 -0
- package/package.json +1 -1
- package/table/api/data-providers/table-data-provider.factory.d.ts +18 -0
- package/table/api/data-providers/table.data-provider.d.ts +2 -14
- package/table/api/descriptors/table-descriptor.factory.d.ts +44 -0
- package/table/api/descriptors/table.descriptor.d.ts +4 -65
- package/table/api/helpers/table-descriptor-helpers.d.ts +44 -0
- package/table/api/index.d.ts +3 -0
- package/table/components/column-filter-full/column-filter-full.component.d.ts +5 -4
- package/table/components/table/table.component.d.ts +11 -11
- package/table/services/data-list.service.d.ts +9 -10
- package/tableview/action/components/action/action.component.d.ts +37 -44
- package/tableview/action/components/editor/action-editor.component.d.ts +20 -18
- package/tableview/action/components/editor/injector-context/action-editor-injector-context.component.d.ts +24 -26
- package/tableview/action/components/localization/data-language-dropdown.component.d.ts +11 -14
- package/tableview/action/components/route/action-route.component.d.ts +7 -12
- package/tableview/action/components/table/action-table.component.d.ts +3 -3
- package/tableview/action/models/execution/action-instance.model.d.ts +2 -1
- package/tableview/action/services/view-container.service.d.ts +3 -9
- package/tableview/api/action/descriptors/action-descriptor.factory.d.ts +36 -0
- package/tableview/api/action/descriptors/action-editor-descriptor.factory.d.ts +31 -0
- package/tableview/api/action/descriptors/action-editor.descriptor.d.ts +25 -37
- package/tableview/api/action/descriptors/action-link-descriptor.factory.d.ts +15 -0
- package/tableview/api/action/descriptors/action-link.descriptor.d.ts +1 -9
- package/tableview/api/action/descriptors/action.descriptor.d.ts +4 -27
- package/tableview/api/action/models/action-component.model.d.ts +8 -8
- package/tableview/api/action/models/execution/action-instance.model.d.ts +2 -1
- package/tableview/api/action/models/execution/view-container.model.d.ts +4 -3
- package/tableview/api/editor/data-providers/editor-data-provider.factory.d.ts +18 -0
- package/tableview/api/editor/data-providers/editor.data-provider.d.ts +2 -14
- package/tableview/api/editor/descriptors/editor-descriptor.factory.d.ts +44 -0
- package/tableview/api/editor/descriptors/editor.descriptor.d.ts +44 -105
- package/tableview/api/editor/descriptors/field-action.descriptor.d.ts +3 -3
- package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +35 -33
- package/tableview/api/editor/descriptors/field-group.descriptor.d.ts +8 -7
- package/tableview/api/editor/descriptors/field-lookup.descriptor.d.ts +2 -2
- package/tableview/api/editor/descriptors/field-many.descriptor.d.ts +8 -8
- package/tableview/api/editor/descriptors/field-validation.descriptor.d.ts +10 -13
- package/tableview/api/editor/descriptors/field.descriptor.d.ts +16 -1
- package/tableview/api/editor/helpers/editor-descriptor-helpers.d.ts +43 -0
- package/tableview/api/editor/helpers/field-validators.d.ts +7 -3
- package/tableview/api/editor/models/editor-fields.model.d.ts +25 -21
- package/tableview/api/editor/models/field-action-context.model.d.ts +10 -8
- package/tableview/api/editor/models/field-validation.model.d.ts +26 -0
- package/tableview/api/editor/models/field.model.d.ts +0 -10
- package/tableview/api/editor/models/form-editor.event.d.ts +26 -16
- package/tableview/api/editor/models/form-editor.interface.d.ts +38 -8
- package/tableview/api/editor/models/formly-custom-field.model.d.ts +1 -1
- package/tableview/api/editor/models/formly-field.model.d.ts +9 -7
- package/tableview/api/index.d.ts +10 -0
- package/tableview/api/tableview/data-providers/tableview-data-provider.factory.d.ts +25 -0
- package/tableview/api/tableview/data-providers/tableview.data-provider.d.ts +3 -20
- package/tableview/api/tableview/descriptors/tableview-descriptor.factory.d.ts +49 -0
- package/tableview/api/tableview/descriptors/tableview.descriptor.d.ts +41 -102
- package/tableview/api/tableview/helpers/tableview-create.d.ts +2 -2
- package/tableview/api/tableview/helpers/tableview-default-actions.d.ts +4 -2
- package/tableview/api/tableview/helpers/tableview-descriptor-helpers.d.ts +42 -0
- package/tableview/api/tableview/helpers/tableview-input-builder.d.ts +1 -1
- package/tableview/editor/components/editor/form-editor.component.d.ts +54 -36
- package/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.d.ts +5 -3
- package/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +1 -0
- package/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.d.ts +22 -0
- package/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +1 -1
- package/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.d.ts +5 -7
- package/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +1 -1
- package/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +3 -4
- package/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +3 -5
- package/tableview/editor/helpers/editor-formly.d.ts +11 -10
- package/tableview/editor/models/formly-config.model.d.ts +1 -1
- package/tableview/editor/services/form-editor.service.d.ts +39 -0
- package/tableview/index.d.ts +1 -0
- package/tableview/tableview/components/route/tableview-route.component.d.ts +2 -2
- package/tableview/tableview/components/tableview/tableview.component.d.ts +11 -10
- package/tableview/tableview/router/tableview-route-builder.d.ts +7 -13
- package/version-info.json +11 -0
|
@@ -44,7 +44,7 @@ export class ActionExecutorService {
|
|
|
44
44
|
* @param dataProvider Data provider.
|
|
45
45
|
*/
|
|
46
46
|
prepareActionContextValidation(action, parameters, dataProvider) {
|
|
47
|
-
const ctxDataProvider = dataProvider ?? action.dataProvider ?? this.viewContainer?.dataProvider;
|
|
47
|
+
const ctxDataProvider = dataProvider ?? action.dataProvider ?? this.viewContainer?.dataProvider();
|
|
48
48
|
return {
|
|
49
49
|
descriptor: action,
|
|
50
50
|
parameters: parameters,
|
|
@@ -363,7 +363,7 @@ export class ActionExecutorService {
|
|
|
363
363
|
ctxDataProvider = editorAction.dataProvider;
|
|
364
364
|
}
|
|
365
365
|
if (!ctxDataProvider) {
|
|
366
|
-
const viewContainerDataProvider = this.viewContainer?.dataProvider;
|
|
366
|
+
const viewContainerDataProvider = this.viewContainer?.dataProvider();
|
|
367
367
|
if (viewContainerDataProvider) {
|
|
368
368
|
ctxDataProvider = viewContainerDataProvider;
|
|
369
369
|
}
|
|
@@ -386,7 +386,7 @@ export class ActionExecutorService {
|
|
|
386
386
|
*/
|
|
387
387
|
prepareContext(action, parameters, dataProvider, instance, previousActionInstance) {
|
|
388
388
|
instance = this.getOrCreateInstance(instance, action, parameters, ActionInstanceStateEnum.ActivationEnd);
|
|
389
|
-
const ctxDataProvider = dataProvider ?? instance.action.dataProvider ?? this.viewContainer?.dataProvider;
|
|
389
|
+
const ctxDataProvider = dataProvider ?? instance.action.dataProvider ?? this.viewContainer?.dataProvider();
|
|
390
390
|
let service = undefined;
|
|
391
391
|
if (ctxDataProvider != null) {
|
|
392
392
|
const dataProviderService = this.dataProviderExecutor.getDataProviderService(this.injector, ctxDataProvider);
|
|
@@ -487,7 +487,7 @@ export class ActionExecutorService {
|
|
|
487
487
|
throw new Error(`Action ${action.actionName} is not of type editor, cannot be activated through "onActionEditorOnInit"`);
|
|
488
488
|
}
|
|
489
489
|
if (instance && action.activationTrigger === ActionActivationTriggerEnum.OnRoute) {
|
|
490
|
-
const triggeredInstance = this.viewContainer?.routeTriggeredActionInstance;
|
|
490
|
+
const triggeredInstance = this.viewContainer?.routeTriggeredActionInstance();
|
|
491
491
|
if (triggeredInstance && triggeredInstance.instanceLongName !== instance.instanceLongName) {
|
|
492
492
|
this.logger.debug(`WARNING: Found triggered parameters view container instance ${triggeredInstance.instanceLongName} and it does not match instance ${instance.instanceLongName} retrieved on editor init.`);
|
|
493
493
|
}
|
|
@@ -581,7 +581,7 @@ export class ActionExecutorService {
|
|
|
581
581
|
}
|
|
582
582
|
// unset instance in view container
|
|
583
583
|
if (this.viewContainer) {
|
|
584
|
-
this.viewContainer.routeTriggeredActionInstance
|
|
584
|
+
this.viewContainer.routeTriggeredActionInstance.set(undefined);
|
|
585
585
|
}
|
|
586
586
|
// set final state on instance
|
|
587
587
|
instance.state = finalState;
|
|
@@ -593,13 +593,13 @@ export class ActionExecutorService {
|
|
|
593
593
|
// must skip initialization from view container, because it would only get old instance.
|
|
594
594
|
// we need new instance before we can set new one on the view container.
|
|
595
595
|
const newInstance = this.getOrCreateInstance(undefined, instance.action, undefined, newInstanceStatus, true);
|
|
596
|
-
newInstance.
|
|
596
|
+
newInstance.reactivationPreviousInstance = instance;
|
|
597
597
|
// copy some additional settings
|
|
598
598
|
newInstance.activationDialogRef = instance.activationDialogRef;
|
|
599
599
|
newInstance.triggerParameters = instance.triggerParameters;
|
|
600
600
|
newInstance.activationParameters = instance.activationParameters;
|
|
601
601
|
if (this.viewContainer) {
|
|
602
|
-
this.viewContainer.routeTriggeredActionInstance
|
|
602
|
+
this.viewContainer.routeTriggeredActionInstance.set(newInstance);
|
|
603
603
|
}
|
|
604
604
|
instance.reactivationInstance = newInstance;
|
|
605
605
|
}
|
|
@@ -636,7 +636,7 @@ export class ActionExecutorService {
|
|
|
636
636
|
const actionUrlSegments = this.parametrize.transform(actionUrl, parameters.itemId, parameters.item, parameters.actionData).split('/');
|
|
637
637
|
// set instance in view container
|
|
638
638
|
if (this.viewContainer) {
|
|
639
|
-
this.viewContainer.routeTriggeredActionInstance
|
|
639
|
+
this.viewContainer.routeTriggeredActionInstance.set(instance);
|
|
640
640
|
}
|
|
641
641
|
from(this.router.navigate([baseUrl, ...actionUrlSegments], { relativeTo: parameters.route, queryParams: parsedUrl.queryParams }))
|
|
642
642
|
.pipe(take(1))
|
|
@@ -742,7 +742,7 @@ export class ActionExecutorService {
|
|
|
742
742
|
*/
|
|
743
743
|
getOrCreateInstance(instance, action, parameters, instanceInitialStatus, skipInitializationFromViewContainer = false) {
|
|
744
744
|
if (!skipInitializationFromViewContainer && !instance && action?.activationTrigger === ActionActivationTriggerEnum.OnRoute && parameters) {
|
|
745
|
-
instance = this.viewContainer?.routeTriggeredActionInstance;
|
|
745
|
+
instance = this.viewContainer?.routeTriggeredActionInstance();
|
|
746
746
|
}
|
|
747
747
|
if (!instance) {
|
|
748
748
|
if (!action) {
|
|
@@ -764,4 +764,4 @@ export class ActionExecutorService {
|
|
|
764
764
|
return instance;
|
|
765
765
|
}
|
|
766
766
|
}
|
|
767
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90YWJsZXZpZXcvc3JjL2FjdGlvbi9zZXJ2aWNlcy9hY3Rpb24tZXhlY3V0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUMsTUFBTSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFlLG1CQUFtQixFQUFFLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUM5RSxPQUFPLEVBQUMsYUFBYSxFQUFzQixNQUFNLHVCQUF1QixDQUFDO0FBQ3pFLE9BQU8sRUFBYSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLGNBQWMsRUFHZCxhQUFhLEVBQ2IsZUFBZSxFQUNmLGFBQWEsRUFDYixhQUFhLEVBQ2IsWUFBWSxFQUNmLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUNILDJCQUEyQixFQUczQiwwQkFBMEIsRUFFMUIsNkJBQTZCLEVBQzdCLDBCQUEwQixFQUMxQiw4QkFBOEIsRUFFOUIsY0FBYyxFQUNkLGtCQUFrQixFQUVsQixvQkFBb0IsRUFHdkIsTUFBTSxzQ0FBc0MsQ0FBQztBQUU5QyxPQUFPLEVBQUMsbUNB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QUFTLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1lBQ3ZILElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7Z0JBQ25ELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7Z0JBRTVDLElBQUksWUFBYSxDQUFDLEtBQUssR0FBRyx1QkFBdUIsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO29CQUNuRSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyw2REFBNkQsUUFBUSxDQUFDLGdCQUFnQixrQkFBa0IsQ0FBQyxDQUFDO29CQUM1SCxZQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2hDLENBQUM7WUFDTCxDQUFDO1lBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEMsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SHR0cEVycm9yUmVzcG9uc2V9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7SW5qZWN0b3IsIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1JvdXRlciwgVXJsVHJlZX0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Q29uZmlybWF0aW9uLCBDb25maXJtYXRpb25TZXJ2aWNlLCBNZXNzYWdlU2VydmljZX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtEaWFsb2dTZXJ2aWNlLCBEeW5hbWljRGlhbG9nQ29uZmlnfSBmcm9tICdwcmltZW5nL2R5bmFtaWNkaWFsb2cnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBmcm9tLCBtZXJnZU1hcCwgb2YsIHN3aXRjaE1hcCwgdGFrZSwgdGltZW91dH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2NhdGNoRXJyb3IsIGZpbHRlciwgZmlyc3QsIG1hcCwgc3RhcnRXaXRofSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gICAgQWN0aW9uUGFyYW1ldGVycyxcbiAgICBDb21tb25zSHR0cEVycm9yLFxuICAgIENvbW1vbnNJbnRlcm5hbEVycm9yLFxuICAgIENvbW1vbnNTZXJ2aWNlLFxuICAgIElDb21tb25zRXJyb3IsXG4gICAgSURhdGFQcm92aWRlcixcbiAgICBMb2dnZXJTZXJ2aWNlLFxuICAgIFBhcmFtZXRyaXplUGlwZSxcbiAgICBTdHlsZVNpemVFbnVtLFxuICAgIGVzY2FwZUh0bWxBbnksXG4gICAgdG9PYnNlcnZhYmxlXG59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge1xuICAgIEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bSxcbiAgICBBY3Rpb25Db25maXJtYXRpb25EZXNjcmlwdG9yLFxuICAgIEFjdGlvbkNvbnRleHRWYWxpZGF0aW9uLFxuICAgIEFjdGlvbkRlbGV0ZURlc2NyaXB0b3JJbnN0LFxuICAgIEFjdGlvbkRlc2NyaXB0b3JJbnN0LFxuICAgIEFjdGlvbkVkaXRvckFkZERlc2NyaXB0b3JJbnN0LFxuICAgIEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0LFxuICAgIEFjdGlvbkVkaXRvckVkaXREZXNjcmlwdG9ySW5zdCxcbiAgICBBY3Rpb25SdW5GblR5cGUsXG4gICAgQWN0aW9uVHlwZUVudW0sXG4gICAgQ29tbW9uc0FjdGlvbkVycm9yLFxuICAgIENvbW1vbnNBY3Rpb25FcnJvck9wdGlvbnMsXG4gICAgRGF0YVByb3ZpZGVyRXhlY3V0b3IsXG4gICAgSUFjdGlvbkVkaXRvckNvbXBvbmVudCxcbiAgICBJQWN0aW9uSW5zdGFuY2Vcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZXZpZXcvYXBpJztcblxuaW1wb3J0IHtDT01NT05TX1RBQkxFVklFV19GRUFUVVJFX0NPTkZJR19JVH0gZnJvbSAnLi4vLi4vdGFibGV2aWV3L3NlcnZpY2VzL3RhYmxldmlldy1mZWF0dXJlLWNvbmZpZy50b2tlbic7XG5pbXBvcnQge2dldEkxOG5Gb3JBY3Rpb259IGZyb20gJy4uL2hlbHBlcnMvaTE4bic7XG5pbXBvcnQge2FjdGlvbk5vdGlmaWNhdGlvbkVycm9yLCBhY3Rpb25Ob3RpZmljYXRpb25TdWNjZXNzfSBmcm9tICcuLi9oZWxwZXJzL25vdGlmaWNhdGlvbic7XG5pbXBvcnQge0FjdGlvbkVkaXRvckRpYWxvZ0RhdGF9IGZyb20gJy4uL21vZGVscy9hY3Rpb24tZWRpdG9yLWRpYWxvZy1kYXRhLm1vZGVsJztcbmltcG9ydCB7QWN0aW9uQ29udGV4dH0gZnJvbSAnLi4vbW9kZWxzL2V4ZWN1dGlvbi9hY3Rpb24tY29udGV4dC5tb2RlbCc7XG5pbXBvcnQge0FjdGlvbkluc3RhbmNlU3RhdGVFbnVtfSBmcm9tICcuLi9tb2RlbHMvZXhlY3V0aW9uL2FjdGlvbi1pbnN0YW5jZS1zdGF0ZS5tb2RlbCc7XG5pbXBvcnQge0FjdGlvbkluc3RhbmNlfSBmcm9tICcuLi9tb2RlbHMvZXhlY3V0aW9uL2FjdGlvbi1pbnN0YW5jZS5tb2RlbCc7XG5pbXBvcnQge0FjdGlvbkVycm9yTWFwcGVyU2VydmljZX0gZnJvbSAnLi9hY3Rpb24tZXJyb3ItbWFwcGVyLnNlcnZpY2UnO1xuaW1wb3J0IHtOYXZpZ2F0aW9uU2VydmljZX0gZnJvbSAnLi9uYXZpZ2F0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHtBQ1RJT05fRURJVE9SX0NPTVBPTkVOVF9JVH0gZnJvbSAnLi90b2tlbnMvYWN0aW9uLWVkaXRvci50b2tlbic7XG5pbXBvcnQge1ZpZXdDb250YWluZXJ9IGZyb20gJy4vdmlldy1jb250YWluZXIuc2VydmljZSc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBY3Rpb25FeGVjdXRvclNlcnZpY2Uge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkaWFsb2dTZXJ2aWNlID0gaW5qZWN0KERpYWxvZ1NlcnZpY2UpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbW1vbnMgPSBpbmplY3QoQ29tbW9uc1NlcnZpY2UpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkYXRhUHJvdmlkZXJFeGVjdXRvciA9IGluamVjdChEYXRhUHJvdmlkZXJFeGVjdXRvcik7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG5hdmlnYXRpb25TZXJ2aWNlID0gaW5qZWN0KE5hdmlnYXRpb25TZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZXJyb3JNYXBwZXIgPSBpbmplY3QoQWN0aW9uRXJyb3JNYXBwZXJTZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlnID0gaW5qZWN0KENPTU1PTlNfVEFCTEVWSUVXX0ZFQVRVUkVfQ09ORklHX0lULCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVmYXVsdEVkaXRvckRpYWxvZ0NvbXBvbmVudCA9IGluamVjdChBQ1RJT05fRURJVE9SX0NPTVBPTkVOVF9JVCk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG1lc3NhZ2VTZXJ2aWNlID0gaW5qZWN0KE1lc3NhZ2VTZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlybWF0aW9uU2VydmljZSA9IGluamVjdChDb25maXJtYXRpb25TZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdmlld0NvbnRhaW5lciA9IGluamVjdChWaWV3Q29udGFpbmVyLCB7b3B0aW9uYWw6IHRydWV9KTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGFyYW1ldHJpemUgPSBuZXcgUGFyYW1ldHJpemVQaXBlKCk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5zdGFuY2VzQnVmZmVyTWF4ID0gMTAwO1xuICAgIHByb3RlY3RlZCBsb2dnZXIgPSBpbmplY3QoTG9nZ2VyU2VydmljZSkuY3JlYXRlKCdBY3Rpb25FeGVjdXRvclNlcnZpY2UnKTtcblxuICAgIHB1YmxpYyBhYnN0cmFjdCBnZXQgaW5zdGFuY2VzKCk6IEFjdGlvbkluc3RhbmNlPGFueSwgYW55PltdO1xuXG4gICAgLyoqXG4gICAgICogUHJlcGFyZXMgYWN0aW9uIGNvbnRleHQgZm9yIHVzYWdlIGluIHZhbGlkYXRpb24uXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycy5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIERhdGEgcHJvdmlkZXIuXG4gICAgICovXG4gICAgcHVibGljIHByZXBhcmVBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxJdGVtLCBTZXJ2aWNlPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxJdGVtPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxJdGVtPixcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxJdGVtLCBTZXJ2aWNlPlxuICAgICk6IEFjdGlvbkNvbnRleHRWYWxpZGF0aW9uPEl0ZW0sIFNlcnZpY2U+IHtcbiAgICAgICAgY29uc3QgY3R4RGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyID8/IGFjdGlvbi5kYXRhUHJvdmlkZXIgPz8gdGhpcy52aWV3Q29udGFpbmVyPy5kYXRhUHJvdmlkZXI7XG4gICAgICAgIHJldHVybiA8QWN0aW9uQ29udGV4dFZhbGlkYXRpb248SXRlbSwgU2VydmljZT4+e1xuICAgICAgICAgICAgZGVzY3JpcHRvcjogYWN0aW9uLFxuICAgICAgICAgICAgcGFyYW1ldGVyczogcGFyYW1ldGVycyxcbiAgICAgICAgICAgIHNlcnZpY2VJbnN0YW5jZTogdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5nZXREYXRhUHJvdmlkZXJTZXJ2aWNlKHRoaXMuaW5qZWN0b3IsIGN0eERhdGFQcm92aWRlcikgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgZGF0YVByb3ZpZGVyOiBjdHhEYXRhUHJvdmlkZXJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGFjdGlvbiBjb250ZXh0IGJ5IHN1Ym1pdHRpbmcgZXhlY3V0aW9uIHJlc3VsdHMvZXJyb3JzIHRvIGNvbnRleHQsIHdhdGNoaW5nIG92ZXIgaW5zdGFuY2UgcmVzdWx0cy9lcnJvcnMsIGRpc3BsYXlpbmcgbm90aWZpY2F0aW9ucyxcbiAgICAgKiBydW5uaW5nIG5leHQvZXJyb3IgYWN0aW9uIGFuZCB0cmlnZ2VyaW5nIGRpc21pc3Mgb2YgYWN0aW9uLiBDb25maXJtYXRpb24gaXMgYWxzbyBwcm9jZXNzZWQgaGVyZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjdHggQWN0aW9uIGNvbnRleHQgdG8gcnVuLlxuICAgICAqL1xuICAgIHB1YmxpYyBydW48SXRlbSwgU2VydmljZSA9IHVuZGVmaW5lZD4oY3R4OiBBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+KSB7XG4gICAgICAgIGNvbnN0IGlzTWFpblJ1bkZuID0gY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3N1Ym1pdCcgfHwgY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3J1bic7XG5cbiAgICAgICAgLy8gaWYgKGN0eC5pbnN0YW5jZS5hY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRGlyZWN0ICYmIGN0eC5pbnN0YW5jZS5hY3Rpb24uaGFzUnVuQ29uZmlybWF0aW9uKSB7XG4gICAgICAgIGlmIChpc01haW5SdW5GbiAmJiBjdHguaW5zdGFuY2UuYWN0aW9uLmhhc1J1bkNvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgLy8gb25seSBkaXJlY3QgYWN0aW9uIGNhbiBiZSBjb25maWd1cmVkIHdpdGggcnVuIGNvbmZpcm1hdGlvblxuICAgICAgICAgICAgLy8gaWYgZWRpdG9yLCB0aGVuIHJ1biBjb25maXJtYXRpb24gaXMgbWFwcGVkIHRvIHN1Ym1pdCBhY3Rpb24gYW5kIGlnbm9yZWQgYXMgZWRpdG9yIHJ1blxuICAgICAgICAgICAgY29uc3QgY29uZmlybWF0aW9uRGVzY3JpcHRvciA9IGN0eC5pbnN0YW5jZS5hY3Rpb24ucnVuQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvciBhcyBBY3Rpb25Db25maXJtYXRpb25EZXNjcmlwdG9yPEl0ZW0+O1xuXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gY3R4LnBhcmFtZXRlcnMuaXRlbTtcbiAgICAgICAgICAgIGxldCBjb25maXJtUGFyYW1zOiBDb25maXJtYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgaWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5pY29uLFxuICAgICAgICAgICAgICAgIGFjY2VwdFZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgYWNjZXB0SWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRCdXR0b24uaWNvbiA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgYWNjZXB0QnV0dG9uU3R5bGVDbGFzczogY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRCdXR0b24uc3R5bGVDbGFzcy5idWlsZCgpLFxuICAgICAgICAgICAgICAgIHJlamVjdFZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVqZWN0SWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RCdXR0b24/Lmljb24gPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHJlamVjdEJ1dHRvblN0eWxlQ2xhc3M6IGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uPy5zdHlsZUNsYXNzLmJ1aWxkKCksXG4gICAgICAgICAgICAgICAgY2xvc2VPbkVzY2FwZTogY29uZmlybWF0aW9uRGVzY3JpcHRvci5jbG9zZU9uRXNjYXBlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci50aXRsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuaGVhZGVyID1cbiAgICAgICAgICAgICAgICAgICAgZ2V0STE4bkZvckFjdGlvbih0aGlzLnRyYW5zbGF0ZSwgY3R4Lmluc3RhbmNlLmFjdGlvbiwgJ2NvbmZpcm0udGl0bGUnLCBjb25maXJtYXRpb25EZXNjcmlwdG9yLnRpdGxlLCBpdGVtLCAnZ2VuZXJhbC5jb25maXJtYXRpb24nKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLm1lc3NhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLm1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgICAgICBnZXRJMThuRm9yQWN0aW9uKHRoaXMudHJhbnNsYXRlLCBjdHguaW5zdGFuY2UuYWN0aW9uLCAnY29uZmlybS5tZXNzYWdlJywgY29uZmlybWF0aW9uRGVzY3JpcHRvci5tZXNzYWdlLCBlc2NhcGVIdG1sQW55KGl0ZW0pLCAnZ2VuZXJhbC5jb25maXJtYXRpb24nKSA/P1xuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdEJ1dHRvbi5sYWJlbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuYWNjZXB0TGFiZWwgPVxuICAgICAgICAgICAgICAgICAgICBnZXRJMThuRm9yQWN0aW9uKHRoaXMudHJhbnNsYXRlLCBjdHguaW5zdGFuY2UuYWN0aW9uLCAnY29uZmlybS5hY2NlcHQnLCBjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdEJ1dHRvbi5sYWJlbCwgaXRlbSwgJ2dlbmVyYWwueWVzJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRCdXR0b24uaWNvbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuYWNjZXB0SWNvbiA9IGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IuYWNjZXB0QnV0dG9uLmljb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEJ1dHRvbj8uaWNvbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0SWNvbiA9IGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uPy5pY29uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RCdXR0b24/LmxhYmVsICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5yZWplY3RMYWJlbCA9XG4gICAgICAgICAgICAgICAgICAgIGdldEkxOG5Gb3JBY3Rpb24odGhpcy50cmFuc2xhdGUsIGN0eC5pbnN0YW5jZS5hY3Rpb24sICdjb25maXJtLnJlamVjdCcsIGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uPy5sYWJlbCwgaXRlbSwgJ2dlbmVyYWwubm8nKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEJ1dHRvbiA9PSBudWxsIHx8IChjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEJ1dHRvbi5sYWJlbCA9PT0gbnVsbCAmJiBjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEJ1dHRvbi5pY29uID09PSBudWxsKSkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0VmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25maXJtUGFyYW1zLmFjY2VwdCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5Db25maXJtYXRpb25FbmRBY2NlcHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5ydW5XaXRob3V0Q29uZmlybWF0aW9uKGN0eCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25maXJtUGFyYW1zLnJlamVjdCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5Db25maXJtYXRpb25FbmRSZWplY3Q7XG4gICAgICAgICAgICAgICAgaWYgKGN0eC5pbnN0YW5jZS5hY3Rpb24udHlwZSAhPT0gQWN0aW9uVHlwZUVudW0uRWRpdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIG5vdCBlZGl0b3IsIHRoZSBpdCBjYW4gYmUgY2xvc2VkXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoQWN0aW9uKGN0eC5pbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucnVuQ29uZmlybWF0aW9uQ29uZmlnTWFwRm4pIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zID0gY29uZmlybWF0aW9uRGVzY3JpcHRvci5ydW5Db25maXJtYXRpb25Db25maWdNYXBGbihjdHgsIGNvbmZpcm1QYXJhbXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdHguY29uZmlybWF0aW9uID0gY29uZmlybVBhcmFtcztcbiAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkNvbmZpcm1hdGlvblN0YXJ0O1xuXG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybShjb25maXJtUGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucnVuV2l0aG91dENvbmZpcm1hdGlvbihjdHgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBhY3Rpb24gY29udGV4dCBieSBzdWJtaXR0aW5nIGV4ZWN1dGlvbiByZXN1bHRzL2Vycm9ycyB0byBjb250ZXh0LCB3YXRjaGluZyBvdmVyIGluc3RhbmNlIHJlc3VsdHMvZXJyb3JzLCBkaXNwbGF5aW5nIG5vdGlmaWNhdGlvbnMsXG4gICAgICogcnVubmluZyBuZXh0L2Vycm9yIGFjdGlvbiBhbmQgdHJpZ2dlcmluZyBkaXNtaXNzIG9mIGFjdGlvbi4gQ29uZmlybWF0aW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY3R4IEFjdGlvbiBjb250ZXh0IHRvIHJ1bi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEFjdGlvbiBjb250ZXh0IGZvciBzdWJtaXQgKD1ydW4pIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgcnVuV2l0aG91dENvbmZpcm1hdGlvbjxJdGVtLCBTZXJ2aWNlID0gdW5kZWZpbmVkPihjdHg6IEFjdGlvbkNvbnRleHQ8SXRlbSwgU2VydmljZT4pOiBPYnNlcnZhYmxlPEl0ZW0gfCBudWxsIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IGlzTWFpblJ1bkZuID0gY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3N1Ym1pdCcgfHwgY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3J1bic7XG4gICAgICAgIGNvbnN0IGlzRXJyb3JDcml0aWNhbFJ1bkZuID0gY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3J1bic7XG4gICAgICAgIGxldCBhY3Rpb25FZGl0b3I6IEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PEl0ZW0+O1xuXG4gICAgICAgIGxldCBmbk9iczogQWN0aW9uUnVuRm5UeXBlPEl0ZW0sIFNlcnZpY2U+O1xuICAgICAgICBzd2l0Y2ggKGN0eC5mdW5jdGlvbk5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3N1Ym1pdCc6XG4gICAgICAgICAgICAgICAgYWN0aW9uRWRpdG9yID0gY3R4Lmluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxJdGVtPjtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbkVkaXRvci5zdWJtaXRGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uRWRpdG9yIGluc3RhbmNlb2YgQWN0aW9uRWRpdG9yQWRkRGVzY3JpcHRvckluc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuT2JzID0gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5ydW5DcmVhdGVPckZhaWwuYmluZCh0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb25FZGl0b3IgaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JFZGl0RGVzY3JpcHRvckluc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuT2JzID0gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5ydW5VcGRhdGVPckZhaWwuYmluZCh0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyeSB0byBndWVzcyB0aGlzIG9uZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdFN1Ym1pdCA9IG9mKGN0eC5wYXJhbWV0ZXJzPy5pdGVtID8gY3R4LnBhcmFtZXRlcnMuaXRlbSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbk9icyA9IGN0eCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5wYXJhbWV0ZXJzLml0ZW1JZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5ydW5VcGRhdGUoY3R4LCBkZWZhdWx0U3VibWl0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5ydW5DcmVhdGUoY3R4LCBkZWZhdWx0U3VibWl0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm5PYnMgPSBhY3Rpb25FZGl0b3Iuc3VibWl0RnVuY3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZmV0Y2gnOlxuICAgICAgICAgICAgICAgIGFjdGlvbkVkaXRvciA9IGN0eC5pbnN0YW5jZS5hY3Rpb24gYXMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3Q8SXRlbT47XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb25FZGl0b3IuZmV0Y2hGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uRWRpdG9yIGluc3RhbmNlb2YgQWN0aW9uRWRpdG9yRWRpdERlc2NyaXB0b3JJbnN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbk9icyA9IHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IucnVuRmV0Y2hPckZhaWwuYmluZCh0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRGZXRjaCA9IG9mKGN0eC5wYXJhbWV0ZXJzPy5pdGVtID8gY3R4LnBhcmFtZXRlcnMuaXRlbSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbk9icyA9IGN0eCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5wYXJhbWV0ZXJzLml0ZW1JZCB8fCB0eXBlb2YgY3R4LnBhcmFtZXRlcnMuaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IucnVuRmV0Y2goY3R4LCBkZWZhdWx0RmV0Y2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdEZldGNoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZuT2JzID0gYWN0aW9uRWRpdG9yLmZldGNoRnVuY3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncnVuJzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKCFjdHguaW5zdGFuY2UuYWN0aW9uLmhhc1J1bkZ1bmN0aW9uICYmIGN0eC5pbnN0YW5jZS5hY3Rpb24gaW5zdGFuY2VvZiBBY3Rpb25EZWxldGVEZXNjcmlwdG9ySW5zdCkge1xuICAgICAgICAgICAgICAgICAgICBmbk9icyA9IHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IucnVuRGVsZXRlT3JGYWlsLmJpbmQodGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm5PYnMgPSBjdHguaW5zdGFuY2UuYWN0aW9uLnJ1bkZ1bmN0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJldE9icyA9IG9mKHZvaWQgMCkucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc01haW5SdW5Gbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiBtYWluIHJ1biBmdW5jdGlvbiwgYWxzbyBzZXQgbG9hZGluZyB0byB0cnVlXG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1blN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuaXNSdW5Mb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZldGNoU3RhcnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHN0YXJ0IGNvbnRleHQgZXhlY3V0aW9uIHRvIG1hcmsgZXhlY3V0aW9uIGxvYWRpbmdcbiAgICAgICAgICAgICAgICBjdHguZXhlY3V0aW9uU3RhcnQoKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0b09ic2VydmFibGUoZm5PYnMoY3R4KSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1lcmdlTWFwKHJ1blJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gc2V0IG5leHQgc3RhdGUgZGVwZW5kaW5nIG9uIHJ1blxuICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IGlzTWFpblJ1bkZuID8gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuRW5kIDogQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hFbmQ7XG4gICAgICAgICAgICAgICAgLy8gc2V0IGV4ZWN1dGlvbiByZXN1bHRcbiAgICAgICAgICAgICAgICBjdHguZXhlY3V0aW9uTmV4dChydW5SZXN1bHQsIGlzTWFpblJ1bkZuKTtcblxuICAgICAgICAgICAgICAgIGlmIChpc01haW5SdW5Gbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBzZXQgaW5zdGFuY2UgZmluYWwgcmVzdWx0IG9uIG1haW4gcnVuIGV4ZWN1dGlvblxuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UucmVzdWx0ID0gcnVuUmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuaXNSdW5Mb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgbm90aWZpY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdHguaW5zdGFuY2UuYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5ub3RpZmljYXRpb24gPSBhY3Rpb25Ob3RpZmljYXRpb25TdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5hY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5hY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5hY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdHgucGFyYW1ldGVycz8uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucnVuUmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBwb3NzaWJsZSBhZnRlciBydW4gYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdHguaW5zdGFuY2UuYWN0aW9uLmFmdGVyUnVuQWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXJrIG5ldyBzdGF0ZSBmb3IgbmV4dCBhY3Rpb24gc3RhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVyUnVuQWN0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY3R4Lmluc3RhbmNlLmFjdGlvbi5hZnRlclJ1bkFjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IGN0eC5pbnN0YW5jZS5hY3Rpb24uYWZ0ZXJSdW5BY3Rpb24oY3R4KSA6IGN0eC5pbnN0YW5jZS5hY3Rpb24uYWZ0ZXJSdW5BY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0QWN0aW9uSW5zdGFuY2UgPSB0aGlzLmFjdGl2YXRlQWN0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyUnVuQWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBY3Rpb25QYXJhbWV0ZXJzPHVua25vd24+PntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUlkOiBjdHgucGFyYW1ldGVycy5pdGVtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IHJ1blJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uRGF0YTogY3R4LnBhcmFtZXRlcnMuYWN0aW9uRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGU6IGN0eC5wYXJhbWV0ZXJzLnJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VDb21wb25lbnQ6IGN0eC5wYXJhbWV0ZXJzLnNvdXJjZUNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZSBhcyBBY3Rpb25JbnN0YW5jZTx1bmtub3duLCB1bmtub3duPixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLm5leHRBY3Rpb25JbnN0YW5jZSA9IG5leHRBY3Rpb25JbnN0YW5jZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uTmV4dEFjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmaW5pc2ggY3VycmVudCBhY3Rpb24gd2hlbiBuZXh0IGFjdGlvbiBmaW5pc2hlc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHRBY3Rpb25JbnN0YW5jZS5zdGF0ZSQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgobmV4dEFjdGlvbkluc3RhbmNlLnN0YXRlKSwgLy8gcHJvdmlkZSBmaXJzdCBzdGF0ZSBjYXVzZSBpdCBtaWdodCBiZSBmaW5pc2hlZCBhbHJlYWR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHN0YXRlID0+IHN0YXRlID49IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NGaW5hbCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5OZXh0QWN0aW9uRW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVuUmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbkVkaXRvci5oYXNGZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbk5vdGlmaWNhdGlvblN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uRWRpdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmZXRjaCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25FZGl0b3IuZmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uRWRpdG9yLmZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnBhcmFtZXRlcnMuaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBvZihydW5SZXN1bHQpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAocnVuUmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWluUnVuRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZGVhY3RpdmF0ZSBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5pc2hBY3Rpb24oY3R4Lmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1blJlc3VsdDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHRyYW5zZm9ybSBlcnJvciB0byBhY3Rpb24gZXJyb3JcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25FcnJvciA9IHRoaXMudG9BY3Rpb25FcnJvcihlcnIsIGN0eCk7XG5cbiAgICAgICAgICAgICAgICAvLyBzZXQgaW5zdGFuY2Ugc3RhdGUgdG8gZXJyb3JcbiAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBpc01haW5SdW5GbiA/IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkVycm9yIDogQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hFcnJvcjtcbiAgICAgICAgICAgICAgICAvLyBtYXJrIGV4ZWN1dGlvbiBlcnJvciBvbiBjb250ZXh0XG4gICAgICAgICAgICAgICAgY3R4LmV4ZWN1dGlvbkVycm9yKGFjdGlvbkVycm9yKTtcblxuICAgICAgICAgICAgICAgIGlmIChjdHguaW5zdGFuY2UuYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbk5vdGlmaWNhdGlvbkVycm9yKHRoaXMudHJhbnNsYXRlLCBjdHguaW5zdGFuY2UuYWN0aW9uLCBhY3Rpb25FcnJvciwgJ2ZldGNoJywgdGhpcy5tZXNzYWdlU2VydmljZSwgY3R4LnBhcmFtZXRlcnMuaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGVycm9yT2JzID0gb2Yodm9pZCAwKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWluUnVuRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuaXNSdW5Mb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgcG9zc2libGUgZXJyb3IgYWN0aW9uIGlmIHJ1blxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYWluUnVuRm4gJiYgY3R4Lmluc3RhbmNlLmFjdGlvbi5vblJ1bkVycm9yQWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvblJ1bkVycm9yQWN0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY3R4Lmluc3RhbmNlLmFjdGlvbi5vblJ1bkVycm9yQWN0aW9uID09PSAnZnVuY3Rpb24nID8gY3R4Lmluc3RhbmNlLmFjdGlvbi5vblJ1bkVycm9yQWN0aW9uKGN0eCkgOiBjdHguaW5zdGFuY2UuYWN0aW9uLm9uUnVuRXJyb3JBY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW5ub3Qgc3RhcnQgd2l0aCB0cmlnZ2VyLCBiZWNhdXNlIHJvdXRpbmcgbWlnaHQgYmUgcHJvYmxlbWF0aWMgKGxvdXNpbmcgcHJldmlvdXMgcmVzdWx0cyBldGMuKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JBY3Rpb25JbnN0YW5jZSA9IHRoaXMuYWN0aXZhdGVBY3Rpb248SXRlbSwgU2VydmljZT4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25SdW5FcnJvckFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWN0aW9uUGFyYW1ldGVyczxJdGVtPj57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1JZDogY3R4LnBhcmFtZXRlcnMuaXRlbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtOiBjdHgucGFyYW1ldGVycy5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25EYXRhOiBjdHgucGFyYW1ldGVycy5hY3Rpb25EYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZTogY3R4LnBhcmFtZXRlcnMucm91dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUNvbXBvbmVudDogY3R4LnBhcmFtZXRlcnMuc291cmNlQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuZXJyb3JBY3Rpb25JbnN0YW5jZSA9IGVycm9yQWN0aW9uSW5zdGFuY2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkVycm9yQWN0aW9uU3RhcnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yT2JzID0gZXJyb3JBY3Rpb25JbnN0YW5jZS5zdGF0ZSQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoZXJyb3JBY3Rpb25JbnN0YW5jZS5zdGF0ZSksIC8vIHByb3ZpZGUgZmlyc3Qgc3RhdGUgY2F1c2UgaXQgbWlnaHQgYmUgZmluaXNoZWQgYWxyZWFkeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzdGF0ZSA9PiBzdGF0ZSA+PSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzRmluYWwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRXJyb3JBY3Rpb25FbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBsaXN0IGFuZCBtYXAgb25seSB0byBtYXJrIGluc3RhbmNlIHN0YXRlIGFzIGZpbmlzaGVkIGVycm9yIHN0YXRlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yT2JzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWFjdGl2YXRlIGFjdGlvbiBvbmx5IGlmIGNyaXRpY2FsIChmZXRjaCBvbiBlZGl0b3Igb3IgcnVuIG9uIGJ1dHRvbiBhY3Rpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRXJyb3JDcml0aWNhbFJ1bkZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5pc2hBY3Rpb24oY3R4Lmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldGhyb3cgZXJyb3IgdG8gcHJvcGFnYXRlIGZ1cnRoZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGFjdGlvbkVycm9yO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIGN0eC5ydW5TdWJzY3JpcHRpb24gPSByZXRPYnMuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYEFjdGlvbkNvbnRleHQgJHtjdHguY29udGV4dExvbmdOYW1lfSBleGVjdXRpb24gbmV4dCBldmVudGAsIHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKChlcnIgYXMgSUNvbW1vbnNFcnJvciB8IHVuZGVmaW5lZCk/LnR5cGUgIT09ICdDb21tb25zQWN0aW9uRXJyb3InKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBOb24gYWN0aW9uIGVycm9yIG9jY3VycmVkYCwgZXJyKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgQWN0aW9uIGNvbnRleHQgJHtjdHguY29udGV4dExvbmdOYW1lfSBleGVjdXRpb24gZXJyb3IgZXZlbnRgLCBlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJldE9icztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcmVwYXJlcyBlZGl0b3IgYWN0aW9uJ3MgZmV0Y2ggZnVuY3Rpb24gYnkgY3JlYXRpbmcgbmV3IGFjdGlvbiBjb250ZXh0IGZvciBhY3Rpb24gaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFjdGlvbiBwYXJhbWV0ZXJzIGZvciBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgRWRpdG9yIGRhdGEgcHJvdmlkZXIgZm9yIGNvbnRleHQuXG4gICAgICogQHBhcmFtIGluc3RhbmNlIE9wdGlvbmFsIGV4aXN0aW5nIGFjdGlvbiBpbnN0YW5jZSAoaWYgbm9uIHByb3ZpZGVkLCBuZXcgd2lsbCBiZSBjcmVhdGVkKS5cbiAgICAgKiBAcGFyYW0gcHJldmlvdXNBY3Rpb25JbnN0YW5jZSBPcHRpb25hbCBwcmV2aW91cyBhY3Rpb24gaW5zdGFuY2UgdG8gbGluayBpbiBuZXh0IGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQWN0aW9uIGNvbnRleHQgZm9yIGZldGNoIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBwcmVwYXJlQ29udGV4dEZvckVkaXRvckZldGNoPEl0ZW0sIFNlcnZpY2U+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PEl0ZW0+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+LFxuICAgICAgICBkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogSUFjdGlvbkluc3RhbmNlPGFueSwgYW55PlxuICAgICk6IEFjdGlvbkNvbnRleHQ8SXRlbSwgU2VydmljZT4ge1xuICAgICAgICBpbnN0YW5jZSA9IHRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZShpbnN0YW5jZSwgYWN0aW9uLCBwYXJhbWV0ZXJzLCBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlcGFyZUNvbnRleHRGb3JFZGl0b3IoaW5zdGFuY2UsIHBhcmFtZXRlcnMsICdmZXRjaCcsIGRhdGFQcm92aWRlciwgcHJldmlvdXNBY3Rpb25JbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBlZGl0b3IgYWN0aW9uJ3Mgc3VibWl0ICg9bWFpbiBydW4pIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIG5ldyBhY3Rpb24gY29udGV4dCBmb3IgYWN0aW9uIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycyBmb3IgY29udGV4dC5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIEVkaXRvciBkYXRhIHByb3ZpZGVyIGZvciBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBPcHRpb25hbCBleGlzdGluZyBhY3Rpb24gaW5zdGFuY2UgKGlmIG5vbiBwcm92aWRlZCwgbmV3IHdpbGwgYmUgY3JlYXRlZCkuXG4gICAgICogQHBhcmFtIHByZXZpb3VzQWN0aW9uSW5zdGFuY2UgT3B0aW9uYWwgcHJldmlvdXMgYWN0aW9uIGluc3RhbmNlIHRvIGxpbmsgaW4gbmV4dCBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEFjdGlvbiBjb250ZXh0IGZvciBzdWJtaXQgKD1ydW4pIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBwcmVwYXJlQ29udGV4dEZvckVkaXRvclN1Ym1pdDxJdGVtLCBTZXJ2aWNlPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxJdGVtPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxJdGVtPixcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxJdGVtLCBTZXJ2aWNlPixcbiAgICAgICAgaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IElBY3Rpb25JbnN0YW5jZTxhbnksIGFueT5cbiAgICApOiBBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+IHtcbiAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2UoaW5zdGFuY2UsIGFjdGlvbiwgcGFyYW1ldGVycywgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvbkVuZCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXBhcmVDb250ZXh0Rm9yRWRpdG9yKGluc3RhbmNlLCBwYXJhbWV0ZXJzLCAnc3VibWl0JywgZGF0YVByb3ZpZGVyLCBwcmV2aW91c0FjdGlvbkluc3RhbmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcmVwYXJlcyBhY3Rpb24gZXhlYyBjb250ZXh0IGZvciBhY3Rpb24gb2YgdHlwZSBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgQWN0aW9uIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFjdGlvbiBwYXJhbWV0ZXJzIGZvciBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBmdW5jdGlvbk5hbWUgQWN0aW9uIGZ1bmN0aW9uIG5hbWUgcGFyYW1ldGVyLlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgT3B0aW9uYWwgZGF0YSBwcm92aWRlci4gSWYgbm90IHByb3ZpZGVkIGRhdGEgcHJvdmlkZXIgZnJvbSBlaXRoZXIgdGhlIGFjdGlvbiBlZGl0b3Igb3IgdmlldyBjb250YWluZXIgd2lsbCBiZSB1c2VkLlxuICAgICAqIEBwYXJhbSBwcmV2aW91c0FjdGlvbkluc3RhbmNlIE9wdGlvbmFsIHByZXZpb3VzIGFjdGlvbiBpbnN0YW5jZSB0byBsaW5rIGluIG5leHQgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcmVwYXJlQ29udGV4dEZvckVkaXRvcjxJdGVtLCBTZXJ2aWNlPihcbiAgICAgICAgaW5zdGFuY2U6IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+LFxuICAgICAgICBmdW5jdGlvbk5hbWU6ICdzdWJtaXQnIHwgJ2ZldGNoJyxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IElBY3Rpb25JbnN0YW5jZTxhbnksIGFueT5cbiAgICApOiBBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+IHtcbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi50eXBlICE9PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgQ2Fubm90IGNyZWF0ZSBlZGl0b3IgY29udGV4dCBmb3IgYWN0aW9uICR7aW5zdGFuY2UuYWN0aW9uLmFjdGlvbk5hbWVMb25nfSBvZiB0eXBlICR7aW5zdGFuY2UuYWN0aW9uLnR5cGV9LmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVkaXRvckFjdGlvbiA9IGluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxJdGVtPjtcbiAgICAgICAgbGV0IGN0eERhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgaWYgKCFjdHhEYXRhUHJvdmlkZXIgJiYgZWRpdG9yQWN0aW9uLmRhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgY3R4RGF0YVByb3ZpZGVyID0gZWRpdG9yQWN0aW9uLmRhdGFQcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN0eERhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgY29uc3Qgdmlld0NvbnRhaW5lckRhdGFQcm92aWRlciA9IHRoaXMudmlld0NvbnRhaW5lcj8uZGF0YVByb3ZpZGVyO1xuICAgICAgICAgICAgaWYgKHZpZXdDb250YWluZXJEYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgICAgICAgICBjdHhEYXRhUHJvdmlkZXIgPSB2aWV3Q29udGFpbmVyRGF0YVByb3ZpZGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN0eCA9IG5ldyBBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+KFxuICAgICAgICAgICAgdGhpcy5pbmplY3RvcixcbiAgICAgICAgICAgIGluc3RhbmNlLFxuICAgICAgICAgICAgcGFyYW1ldGVycyxcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgIHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IuZ2V0RGF0YVByb3ZpZGVyU2VydmljZSh0aGlzLmluamVjdG9yLCBjdHhEYXRhUHJvdmlkZXIpID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGN0eERhdGFQcm92aWRlcixcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lciA/PyB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICAgICAgY3R4LnByZXZpb3VzQWN0aW9uSW5zdGFuY2UgPSBwcmV2aW91c0FjdGlvbkluc3RhbmNlO1xuICAgICAgICBpbnN0YW5jZS5uZXdDb250ZXh0KGN0eCk7XG4gICAgICAgIHJldHVybiBjdHg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBhY3Rpb24ncyBtYWluIHJ1biBmdW5jdGlvbiBieSBjcmVhdGluZyBuZXcgYWN0aW9uIGNvbnRleHQgZm9yIGFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgQWN0aW9uIHBhcmFtZXRlcnMgZm9yIGNvbnRleHQgcnVuLlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgRGF0YSBwcm92aWRlciBmb3IgY29udGV4dCBydW4uXG4gICAgICogQHBhcmFtIGluc3RhbmNlIE9wdGlvbmFsIGV4aXN0aW5nIGFjdGlvbiBpbnN0YW5jZSAoaWYgbm9uIHByb3ZpZGVkLCBuZXcgd2lsbCBiZSBjcmVhdGVkKS5cbiAgICAgKiBAcGFyYW0gcHJldmlvdXNBY3Rpb25JbnN0YW5jZSBPcHRpb25hbCBwcmV2aW91cyBhY3Rpb24gaW5zdGFuY2UgdG8gbGluayBpbiBuZXh0IGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQWN0aW9uIGNvbnRleHQgZm9yIHJ1biBmdW5jdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHByZXBhcmVDb250ZXh0PEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3JJbnN0PEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+LFxuICAgICAgICBkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8YW55LCBhbnk+XG4gICAgKTogQWN0aW9uQ29udGV4dDxJdGVtLCBTZXJ2aWNlPiB7XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+KGluc3RhbmNlLCBhY3Rpb24sIHBhcmFtZXRlcnMsIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25FbmQpO1xuXG4gICAgICAgIGNvbnN0IGN0eERhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlciA/PyBpbnN0YW5jZS5hY3Rpb24uZGF0YVByb3ZpZGVyID8/IHRoaXMudmlld0NvbnRhaW5lcj8uZGF0YVByb3ZpZGVyO1xuICAgICAgICBsZXQgc2VydmljZTogU2VydmljZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGN0eERhdGFQcm92aWRlciAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXJTZXJ2aWNlID0gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5nZXREYXRhUHJvdmlkZXJTZXJ2aWNlPEl0ZW0sIFNlcnZpY2U+KHRoaXMuaW5qZWN0b3IsIGN0eERhdGFQcm92aWRlcik7XG4gICAgICAgICAgICBpZiAoIWRhdGFQcm92aWRlclNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoJycpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VydmljZSA9IGRhdGFQcm92aWRlclNlcnZpY2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3R4ID0gbmV3IEFjdGlvbkNvbnRleHQ8SXRlbSwgU2VydmljZT4odGhpcy5pbmplY3RvciwgaW5zdGFuY2UsIHBhcmFtZXRlcnMsICdydW4nLCBzZXJ2aWNlIGFzIFNlcnZpY2UsIGN0eERhdGFQcm92aWRlciwgdGhpcy52aWV3Q29udGFpbmVyID8/IHVuZGVmaW5lZCk7XG4gICAgICAgIGN0eC5wcmV2aW91c0FjdGlvbkluc3RhbmNlID0gcHJldmlvdXNBY3Rpb25JbnN0YW5jZTtcbiAgICAgICAgaW5zdGFuY2UubmV3Q29udGV4dChjdHgpO1xuXG4gICAgICAgIHJldHVybiBjdHg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWN0aXZhdGVzIGFjdGlvbiAoaW4gY2FzZSBvZiBkaWFsb2csIGRpYWxvZyB3aWxsIGJlIG9wZW5lZCkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFjdGlvbiBwYXJhbWV0ZXJzIGZvciBhY3RpdmF0aW9uIG9mIGFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgT3B0aW9uYWwgZXhpc3RpbmcgYWN0aW9uIGluc3RhbmNlIChpZiBub24gcHJvdmlkZWQsIG5ldyB3aWxsIGJlIGNyZWF0ZWQpLlxuICAgICAqIEBwYXJhbSBwcmV2aW91c0FjdGlvbkluc3RhbmNlIE9wdGlvbmFsIHByZXZpb3VzIGFjdGlvbiBpbnN0YW5jZSB0byBsaW5rIGluIG5leHQgaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIHJ1bkNvbnRleHQgTWFya3MgaWYgY29udGV4dCBzaG91bGQgYmUgcnVuLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQWN0aW9uIGluc3RhbmNlIC0gaWYgbm9uIHByb3ZpZGVkIGluIHBhcmFtZXRlcnMsIHRoZSBuZXdseSBjcmVhdGVkIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAgICovXG4gICAgcHVibGljIGFjdGl2YXRlQWN0aW9uPEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3JJbnN0PEl0ZW0+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+LFxuICAgICAgICBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8YW55LCBhbnk+LFxuICAgICAgICBydW5Db250ZXh0ID0gZmFsc2VcbiAgICApOiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPiB7XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+KGluc3RhbmNlLCBhY3Rpb24sIHBhcmFtZXRlcnMsIEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25TdGFydCk7XG4gICAgICAgIGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvblN0YXJ0O1xuICAgICAgICBpbnN0YW5jZS5hY3RpdmF0aW9uUGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG4gICAgICAgIC8vIHN0YXJ0IGFjdGl2YXRpb24gaW5zdGFuY2VcbiAgICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgIGxldCBkaWFsb2dDb21wb25lbnQgPSB0aGlzLmRlZmF1bHRFZGl0b3JEaWFsb2dDb21wb25lbnQ7XG4gICAgICAgICAgICBjb25zdCBkaWFsb2dDbGFzc05hbWVzID0gWydtbmctZGlhbG9nJ107XG4gICAgICAgICAgICBjb25zdCBkaWFsb2dDb25maWc6IER5bmFtaWNEaWFsb2dDb25maWcgPSB7XG4gICAgICAgICAgICAgICAgZHVwbGljYXRlOiB0cnVlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoYWN0aW9uIGluc3RhbmNlb2YgQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3QpIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDbGFzc05hbWVzLnB1c2goYWN0aW9uLmRpYWxvZ0NsYXNzTmFtZSA/PyAnbW5nLWFjdGlvbi1lZGl0b3ItZGlhbG9nJyk7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChhY3Rpb24uZGlhbG9nU2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFN0eWxlU2l6ZUVudW0uRXh0cmFTbWFsbDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ0NsYXNzTmFtZXMucHVzaCgnbW5nLWRpYWxvZy14cycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU3R5bGVTaXplRW51bS5TbWFsbDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ0NsYXNzTmFtZXMucHVzaCgnbW5nLWRpYWxvZy1zbScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU3R5bGVTaXplRW51bS5MYXJnZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ0NsYXNzTmFtZXMucHVzaCgnbW5nLWRpYWxvZy1sZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU3R5bGVTaXplRW51bS5FeHRyYUxhcmdlOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGlhbG9nQ2xhc3NOYW1lcy5wdXNoKCdtbmctZGlhbG9nLXhsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTdHlsZVNpemVFbnVtLk5vcm1hbDpcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYWN0aW9uLmVkaXRvckNvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgICAgICBkaWFsb2dDb21wb25lbnQgPSBhY3Rpb24uZWRpdG9yQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcuZGF0YSA9IDxBY3Rpb25FZGl0b3JEaWFsb2dEYXRhPEl0ZW0sIFNlcnZpY2U+PntcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9yOiBhY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0luc3RhbmNlOiBwcmV2aW91c0FjdGlvbkluc3RhbmNlXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGluamVjdG9yOiB0aGlzLmluamVjdG9yXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGlhbG9nQ29uZmlnLnN0eWxlQ2xhc3MgPSBkaWFsb2dDbGFzc05hbWVzLmpvaW4oJyAnKTtcblxuICAgICAgICAgICAgaWYgKGFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcuY2xvc2FibGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb25maWcuY2xvc2VPbkVzY2FwZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbihkaWFsb2dDb21wb25lbnQsIGRpYWxvZ0NvbmZpZyk7XG4gICAgICAgICAgICBkaWFsb2dSZWYub25DbG9zZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gdG8gY2xvc2UgZGlhbG9nIG9uICdYJyBjbGljayBvciBlc2MgYnV0dG9uXG4gICAgICAgICAgICAgICAgdGhpcy5maW5pc2hBY3Rpb24oaW5zdGFuY2UhKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaW5zdGFuY2UuYWN0aXZhdGlvbkRpYWxvZ1JlZiA9IGRpYWxvZ1JlZjtcbiAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGRpcmVjdGx5IGV4ZWN1dGUgYWN0aW9uXG4gICAgICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25FbmQ7XG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5wcmVwYXJlQ29udGV4dDxJdGVtLCBTZXJ2aWNlPihhY3Rpb24sIHBhcmFtZXRlcnMsIHVuZGVmaW5lZCwgaW5zdGFuY2UsIHByZXZpb3VzQWN0aW9uSW5zdGFuY2UpO1xuXG4gICAgICAgICAgICBpZiAocnVuQ29udGV4dCkge1xuICAgICAgICAgICAgICAgIHRoaXMucnVuKGNvbnRleHQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGV4dC5pbnN0YW5jZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvIGJlIGNhbGxlZCB3aGVuIGFjdGlvbiBlZGl0b3IgaXMgaW5pdGlhbGl6ZWQgdG8gY29ycmVjdGx5IGFjdGl2YXRlIGFjdGlvbi5cbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UgKGlmIGF2YWlsYWJsZSkuXG4gICAgICogQHBhcmFtIGNvbXBvbmVudFJlZiBPcHRpb25hbCBhY3Rpb24gZWRpdG9yIGNvbXBvbmVudCByZWZlcmVuY2UuXG4gICAgICovXG4gICAgcHVibGljIG9uQWN0aW9uRWRpdG9ySW5pdDxULCBTPihhY3Rpb246IEFjdGlvbkRlc2NyaXB0b3JJbnN0PFQ+LCBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPFQsIFM+LCBjb21wb25lbnRSZWY/OiBJQWN0aW9uRWRpdG9yQ29tcG9uZW50KTogQWN0aW9uSW5zdGFuY2U8VCwgUz4ge1xuICAgICAgICBpZiAoYWN0aW9uLnR5cGUgIT09IEFjdGlvblR5cGVFbnVtLkVkaXRvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBY3Rpb24gJHthY3Rpb24uYWN0aW9uTmFtZX0gaXMgbm90IG9mIHR5cGUgZWRpdG9yLCBjYW5ub3QgYmUgYWN0aXZhdGVkIHRocm91Z2ggXCJvbkFjdGlvbkVkaXRvck9uSW5pdFwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluc3RhbmNlICYmIGFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciA9PT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHRyaWdnZXJlZEluc3RhbmNlID0gdGhpcy52aWV3Q29udGFpbmVyPy5yb3V0ZVRyaWdnZXJlZEFjdGlvbkluc3RhbmNlO1xuICAgICAgICAgICAgaWYgKHRyaWdnZXJlZEluc3RhbmNlICYmIHRyaWdnZXJlZEluc3RhbmNlLmluc3RhbmNlTG9uZ05hbWUgIT09IGluc3RhbmNlLmluc3RhbmNlTG9uZ05hbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAgICAgICAgICAgYFdBUk5JTkc6IEZvdW5kIHRyaWdnZXJlZCBwYXJhbWV0ZXJzIHZpZXcgY29udGFpbmVyIGluc3RhbmNlICR7dHJpZ2dlcmVkSW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX0gYW5kIGl0IGRvZXMgbm90IG1hdGNoIGluc3RhbmNlICR7aW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX0gcmV0cmlldmVkIG9uIGVkaXRvciBpbml0LmBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlKGluc3RhbmNlLCBhY3Rpb24sIHVuZGVmaW5lZCwgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvblN0YXJ0KTtcbiAgICAgICAgaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kO1xuICAgICAgICBpbnN0YW5jZS5hY3RpdmF0aW9uRWRpdG9yQ29tcG9uZW50UmVmID0gY29tcG9uZW50UmVmO1xuXG4gICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUbyBiZSBjYWxsZWQgd2hlbiBhY3Rpb24gZWRpdG9yIGNtcCBpcyBiZWluZyBkZXN0cm95ZWQgdG8gY29ycmVjdGx5IGZpbmlzaCBhY3Rpb24uXG4gICAgICogQHBhcmFtIGluc3RhbmNlIEFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25BY3Rpb25EZXN0cm95PFQsIFM+KGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8VCwgUz4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciAhPT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uQ2xpY2spIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbmlzaEFjdGlvbihpbnN0YW5jZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG8gYmUgY2FsbGVkIHdoZW4gYWN0aW9uIGVkaXRvciBjbXAgaXMgYmVpbmcgZGVzdHJveWVkIHRvIGNvcnJlY3RseSBmaW5pc2ggYWN0aW9uLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIG9uQWN0aW9uRWRpdG9yRGVzdHJveTxULCBTPihpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPFQsIFM+KTogdm9pZCB7XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpbnN0YW5jZSA9IHRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZShpbnN0YW5jZSk7XG4gICAgICAgIGlmIChpbnN0YW5jZS5hY3Rpb24udHlwZSAhPT0gQWN0aW9uVHlwZUVudW0uRWRpdG9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFjdGlvbiBpbnN0YW5jZSAke2luc3RhbmNlLmluc3RhbmNlTG9uZ05hbWV9IGlzIG5vdCBvZiB0eXBlIGVkaXRvciwgY2Fubm90IGJlIGRlYWN0aXZhdGVkIHRocm91Z2ggXCJvbkFjdGlvbkVkaXRvck9uRGVzdHJveVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciAhPT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoQWN0aW9uKGluc3RhbmNlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvIGJlIGNhbGxlZCB3aGVuIGFjdGlvbiByb3V0ZSBjbXAgaXMgYmVpbmcgZGVzdHJveWVkIHRvIGNvcnJlY3RseSBmaW5pc2ggYWN0aW9uLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIG9uQWN0aW9uUm91dGVEZXN0cm95PFQsIFM+KGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8VCwgUz4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciAhPT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQWN0aW9uIGluc3RhbmNlICR7aW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX0gaXMgbm90IHRyaWdnZXJlZCBvbiByb3V0ZSwgY2Fubm90IGJlIGRlYWN0aXZhdGVkIHRocm91Z2ggXCJvbkFjdGlvblJvdXRlT25EZXN0cm95XCJgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbmlzaEFjdGlvbihpbnN0YW5jZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVhY3RpdmF0ZXMgYWN0aW9uIGJ5IGNob29zaW5nIGZpbmFsIHN0YXRlLCBjbG9zaW5nIGRpYWxvZyBhbmQgY29tcGxldGluZyBhbGwgc3ViamVjdHMgaW4gaW5zdGFuY2UgYW5kIGNvbnRleHRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluc3RhbmNlIEFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gb25EZXN0cm95IE1hcmtzIGlmIGZpbmlzaCBpcyBjYWxsZWQgb24gY29tcG9uZW50IGRlc3Ryb3kgbGlmZWN5Y2xlIGhvb2suXG4gICAgICovXG4gICAgcHVibGljIGZpbmlzaEFjdGlvbjxJdGVtLCBTZXJ2aWNlID0gdW5kZWZpbmVkPihpbnN0YW5jZTogQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4sIG9uRGVzdHJveSA9IGZhbHNlKSB7XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlID49IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NGaW5hbCkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYEFjdGlvbkluc3RhbmNlICR7aW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX0gYWxyZWFkeSBmaW5pc2hlZGApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZpbmFsU3RhdGU6IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtO1xuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLnJlc3VsdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGZpbmFsU3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzRmluYWw7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLmVycm9yICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgZmluYWxTdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaEVycm9yRmluYWw7XG4gICAgICAgIH0gZWxzZSBpZiAob25EZXN0cm95KSB7XG4gICAgICAgICAgICBmaW5hbFN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoQ29tcG9uZW50RGVzdHJveUZpbmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmluYWxTdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaERpc21pc3NlZEZpbmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc0RpYWxvZyA9IHR5cGVvZiBpbnN0YW5jZS5hY3RpdmF0aW9uRGlhbG9nUmVmICE9PSAndW5kZWZpbmVkJztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VibWl0RW5hYmxlZCA9IChpbnN0YW5jZS5hY3Rpb24gYXMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3Q8SXRlbT4pLnJlc3VibWl0RW5hYmxlZDtcblxuICAgICAgICAgICAgaWYgKGZpbmFsU3RhdGUgPT09IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NGaW5hbCkge1xuICAgICAgICAgICAgICAgIGlmICgoaGFzRGlhbG9nICYmIHJlc3VibWl0RW5hYmxlZCA9PT0gdHJ1ZSkgfHwgKCFoYXNEaWFsb2cgJiYgcmVzdWJtaXRFbmFibGVkICE9PSBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmluYWxTdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NSZWFjdGl2YXRlRmluYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzRGlhbG9nICYmIGZpbmFsU3RhdGUgIT09IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NSZWFjdGl2YXRlRmluYWwpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBzdGF0ZSBpcyBmaW5pc2ggYW5kIG5vdCBjYWxsZWQgZnJvbSBkaWFsb2cgbGlzdGVuZXIsIGNsb3NlIHRoZSBkaWFsb2cgZmlyc3Qgd2hpY2ggd2lsbCByZXRyaWdnZXIgdGhpcyBmdW5jdGlvbiwgdGhlbiBmaW5pc2ggaXRcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5hY3RpdmF0aW9uRGlhbG9nUmVmIS5jbG9zZShpbnN0YW5jZS5yZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdW5zZXQgaW5zdGFuY2UgaW4gdmlldyBjb250YWluZXJcbiAgICAgICAgaWYgKHRoaXMudmlld0NvbnRhaW5lcikge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLnJvdXRlVHJpZ2dlcmVkQWN0aW9uSW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgZmluYWwgc3RhdGUgb24gaW5zdGFuY2VcbiAgICAgICAgaW5zdGFuY2Uuc3RhdGUgPSBmaW5hbFN0YXRlO1xuXG4gICAgICAgIGlmIChmaW5hbFN0YXRlID09PSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzUmVhY3RpdmF0ZUZpbmFsKSB7XG4gICAgICAgICAgICAvLyBwcmVwYXJlIHJlYWN0aXZhdGlvbiBpbnN0YW5jZVxuICAgICAgICAgICAgY29uc3QgbmV3SW5zdGFuY2VTdGF0dXMgPSAoaW5zdGFuY2UuYWN0aW9uIGFzIEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PEl0ZW0+KS5yZXN1Ym1pdFJlZmV0Y2hcbiAgICAgICAgICAgICAgICA/IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25FbmRcbiAgICAgICAgICAgICAgICA6IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZldGNoRW5kO1xuICAgICAgICAgICAgLy8gbXVzdCBza2lwIGluaXRpYWxpemF0aW9uIGZyb20gdmlldyBjb250YWluZXIsIGJlY2F1c2UgaXQgd291bGQgb25seSBnZXQgb2xkIGluc3RhbmNlLlxuICAgICAgICAgICAgLy8gd2UgbmVlZCBuZXcgaW5zdGFuY2UgYmVmb3JlIHdlIGNhbiBzZXQgbmV3IG9uZSBvbiB0aGUgdmlldyBjb250YWluZXIuXG4gICAgICAgICAgICBjb25zdCBuZXdJbnN0YW5jZSA9IHRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPih1bmRlZmluZWQsIGluc3RhbmNlLmFjdGlvbiwgdW5kZWZpbmVkLCBuZXdJbnN0YW5jZVN0YXR1cywgdHJ1ZSk7XG4gICAgICAgICAgICBuZXdJbnN0YW5jZS5wcmV2aW91c0luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgICAgICAvLyBjb3B5IHNvbWUgYWRkaXRpb25hbCBzZXR0aW5nc1xuICAgICAgICAgICAgbmV3SW5zdGFuY2UuYWN0aXZhdGlvbkRpYWxvZ1JlZiA9IGluc3RhbmNlLmFjdGl2YXRpb25EaWFsb2dSZWY7XG4gICAgICAgICAgICBuZXdJbnN0YW5jZS50cmlnZ2VyUGFyYW1ldGVycyA9IGluc3RhbmNlLnRyaWdnZXJQYXJhbWV0ZXJzO1xuICAgICAgICAgICAgbmV3SW5zdGFuY2UuYWN0aXZhdGlvblBhcmFtZXRlcnMgPSBpbnN0YW5jZS5hY3RpdmF0aW9uUGFyYW1ldGVycztcblxuICAgICAgICAgICAgaWYgKHRoaXMudmlld0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lci5yb3V0ZVRyaWdnZXJlZEFjdGlvbkluc3RhbmNlID0gbmV3SW5zdGFuY2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGluc3RhbmNlLnJlYWN0aXZhdGlvbkluc3RhbmNlID0gbmV3SW5zdGFuY2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmaW5pc2ggcmVsYXRlZCBhY3Rpb25zXG4gICAgICAgIGlmIChpbnN0YW5jZS5uZXh0QWN0aW9uSW5zdGFuY2UgJiYgaW5zdGFuY2UubmV4dEFjdGlvbkluc3RhbmNlIGluc3RhbmNlb2YgQWN0aW9uSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBGaW5pc2hpbmcgaW5zdGFuY2UgJHtpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSByZWxhdGVkIG5leHQgYWN0aW9uIGluc3RhbmNlOiAke2luc3RhbmNlLm5leHRBY3Rpb25JbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfWApO1xuICAgICAgICAgICAgdGhpcy5maW5pc2hBY3Rpb24oaW5zdGFuY2UubmV4dEFjdGlvbkluc3RhbmNlLCBvbkRlc3Ryb3kpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnN0YW5jZS5lcnJvckFjdGlvbkluc3RhbmNlICYmIGluc3RhbmNlLmVycm9yQWN0aW9uSW5zdGFuY2UgaW5zdGFuY2VvZiBBY3Rpb25JbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYEZpbmlzaGluZyBpbnN0YW5jZSAke2luc3RhbmNlLmluc3RhbmNlTG9uZ05hbWV9IHJlbGF0ZWQgZXJyb3IgYWN0aW9uIGluc3RhbmNlOiAke2luc3RhbmNlLmVycm9yQWN0aW9uSW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX1gKTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoQWN0aW9uKGluc3RhbmNlLmVycm9yQWN0aW9uSW5zdGFuY2UsIG9uRGVzdHJveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhY3Rpb24gd2l0aCBwYXJhbWV0ZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycyBmb3IgYWN0aW9uIGV4ZWN1dGlvbiB0byBjb25zdHJ1Y3QgbmV3IHJvdXRlLlxuICAgICAqIEBwYXJhbSBydW5Db250ZXh0IE1hcmtzIGlmIGNvbnRleHQgc2hvdWxkIGJlIHJ1bi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEFjdGlvbiBpbnN0YW5jZSAtIGlmIG5vbiBwcm92aWRlZCBpbiBwYXJhbWV0ZXJzLCB0aGUgbmV3bHkgY3JlYXRlZCB3aWxsIGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyB0cmlnZ2VyQWN0aW9uPEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8SXRlbT4sIHBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8SXRlbT4sIHJ1bkNvbnRleHQgPSBmYWxzZSk6IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+IHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2U8SXRlbSwgU2VydmljZT4odW5kZWZpbmVkLCBhY3Rpb24sIHBhcmFtZXRlcnMpO1xuICAgICAgICBpbnN0YW5jZS50cmlnZ2VyUGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG4gICAgICAgIGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uVHJpZ2dlclN0YXJ0O1xuICAgICAgICBpZiAoYWN0aW9uLmFjdGl2YXRpb25UcmlnZ2VyID09PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSkge1xuICAgICAgICAgICAgY29uc3QgYmFzZVVybCA9IHRoaXMucm91dGVyLnVybC5zcGxpdCgnPycpWzBdO1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVXJsOiBVcmxUcmVlID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodGhpcy5yb3V0ZXIudXJsKTtcbiAgICAgICAgICAgIGxldCBhY3Rpb25VcmwgPSBhY3Rpb24ucm91dGVVcmwgPz8gJyc7XG4gICAgICAgICAgICBpZiAoYWN0aW9uVXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvblVybCA9IGFjdGlvblVybC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGFjdGlvblVybFNlZ21lbnRzID0gdGhpcy5wYXJhbWV0cml6ZS50cmFuc2Zvcm0oYWN0aW9uVXJsLCBwYXJhbWV0ZXJzLml0ZW1JZCwgcGFyYW1ldGVycy5pdGVtLCBwYXJhbWV0ZXJzLmFjdGlvbkRhdGEpLnNwbGl0KCcvJyk7XG5cbiAgICAgICAgICAgIC8vIHNldCBpbnN0YW5jZSBpbiB2aWV3IGNvbnRhaW5lclxuICAgICAgICAgICAgaWYgKHRoaXMudmlld0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lci5yb3V0ZVRyaWdnZXJlZEFjdGlvbkluc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZyb20odGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Jhc2VVcmwsIC4uLmFjdGlvblVybFNlZ21lbnRzXSwge3JlbGF0aXZlVG86IHBhcmFtZXRlcnMucm91dGUsIHF1ZXJ5UGFyYW1zOiBwYXJzZWRVcmwucXVlcnlQYXJhbXN9KSlcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gKGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uVHJpZ2dlckVuZCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlRyaWdnZXJFbmQ7XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlQWN0aW9uKGFjdGlvbiwgcGFyYW1ldGVycywgaW5zdGFuY2UpO1xuXG4gICAgICAgICAgICBpZiAocnVuQ29udGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucnVuKGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVhY3RpdmF0ZXMgb24gcm91dGUgdHJpZ2dlcmVkIGFjdGlvbiBieSB0cnlpbmcgdG8gcmVyb3V0ZSBiYWNrIHRvIGxvY2F0aW9uIHdoZXJlIGFjdGlvbiB3YXMgdHJpZ2dlcmVkLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIGZpbmlzaEFjdGlvblJvdXRlVW50cmlnZ2VyPEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KGluc3RhbmNlOiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPikge1xuICAgICAgICBpZiAoaW5zdGFuY2UuYWN0aW9uLmFjdGl2YXRpb25UcmlnZ2VyICE9PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2U8SXRlbSwgU2VydmljZT4oaW5zdGFuY2UpO1xuXG4gICAgICAgIGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoUm91dGVVbnRyaWdnZXJTdGFydDtcblxuICAgICAgICBsZXQgdXJsID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRDdXJyZW50TG9jYXRpb25Gcm9tSGlzdG9yeSgpID8/IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0Q3VycmVudExvY2F0aW9uRnJvbVVybCgpO1xuICAgICAgICBpZiAoIXVybCkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5iYWNrKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNwbGl0VXJsUXVlcnlQYXJhbSA9IHVybC5zcGxpdCgnPycpO1xuICAgICAgICAgICAgY29uc3QgdXJsUGF0aFNlZ21lbnRzID0gc3BsaXRVcmxRdWVyeVBhcmFtWzBdLnNwbGl0KCcjJylbMF0uc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW0gPSBzcGxpdFVybFF1ZXJ5UGFyYW1bMV0/LnNwbGl0KCcjJylbMF07XG5cbiAgICAgICAgICAgIGxldCBhY3Rpb25VcmwgPSBpbnN0YW5jZS5hY3Rpb24/LnJvdXRlVXJsID8/ICcnO1xuICAgICAgICAgICAgaWYgKGFjdGlvblVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25VcmwgPSBhY3Rpb25Vcmwuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWN0aW9uVXJsU2VnbWVudHMgPSBhY3Rpb25Vcmwuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIGxldCByZWRpcmVjdFVybCA9ICcvJyArIHVybFBhdGhTZWdtZW50cy5zbGljZSgwLCB1cmxQYXRoU2VnbWVudHMubGVuZ3RoIC0gYWN0aW9uVXJsU2VnbWVudHMubGVuZ3RoKS5qb2luKCcvJyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHF1ZXJ5UGFyYW0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVcmwgPSBgJHtyZWRpcmVjdFVybH0/JHtxdWVyeVBhcmFtfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vIFVSTCByZXBsYWNlcywgcHJvYmFibHkgb2ssIHRvIGFsbG93IGdvaW5nIGJhY2tcbiAgICAgICAgICAgIGZyb20odGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChyZWRpcmVjdFVybCkpXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlyc3QoKSwgdGltZW91dCgxMDAwKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogKCkgPT4gKGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoUm91dGVVbnRyaWdnZXJFbmRGaW5hbCksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiAoaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hSb3V0ZVVudHJpZ2dlclRpbWVvdXRGaW5hbClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybSBlcnJvciBvZiBhbnkgdHlwZSB0byBlcnJvciBieSB1c2luZyBlcnJvciBtYXBwZXIgdGhhdCBjb3VsZCBiZSBwcm92aWRlZCBieSBmaW5hbCBwcm9qZWN0LlxuICAgICAqIEBwYXJhbSBlcnJvciBlcnJvciBvZiBhbnkgdHlwZS5cbiAgICAgKiBAcGFyYW0gY29udGV4dCBBY3Rpb24gY29udGV4dC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIG1hcHBlZCBJQ29tbW9uc0Vycm9yLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b0FjdGlvbkVycm9yKGVycm9yPzogYW55LCBjb250ZXh0PzogQWN0aW9uQ29udGV4dDxhbnksIGFueT4pOiBJQ29tbW9uc0Vycm9yIHtcbiAgICAgICAgbGV0IGNvbW1vbnNFcnJvcjogSUNvbW1vbnNFcnJvcjtcbiAgICAgICAgaWYgKGNvbnRleHQpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnM6IENvbW1vbnNBY3Rpb25FcnJvck9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY2F1c2U6IGVycm9yLFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiB0aGlzLnJvdXRlci51cmxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuaHR0cEVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbW1vbnNFcnJvciA9IG5ldyBDb21tb25zQWN0aW9uRXJyb3IoZXJyb3I/Lm1lc3NhZ2UgPz8gJ1Vua25vd24gZXJyb3InLCBjb250ZXh0LmNvbnRleHRMb25nTmFtZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgLy8gc2hvdWxkIG5vdCByZWFsbHkgaGFwcGVuIChzaG91bGQgYWx3YXlzIGJlIHdyYXBwZWQgaW4gTW5nQWN0aW9uRXJyb3IpLCBqdXN0IGluIGNhc2VcbiAgICAgICAgICAgIGNvbW1vbnNFcnJvciA9IG5ldyBDb21tb25zSHR0cEVycm9yKGBIdHRwIEVycm9yIG9jY3VycmVkIGluIGFjdGlvbmAsIGVycm9yLCB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb246IHRoaXMucm91dGVyLnVybFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBub3QgZnJvbSBhY3Rpb24sIHNvIHVua25vd24gc291cmNlIG9mIGVycm9yXG4gICAgICAgICAgICBjb21tb25zRXJyb3IgPSBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoZXJyb3I/Lm1lc3NhZ2UgPz8gJ1Vua25vd24gZXJyb3InLCB7XG4gICAgICAgICAgICAgICAgbmFtZTogZXJyb3I/Lm5hbWUgPz8gJ1Vua25vd25FcnJvcicsXG4gICAgICAgICAgICAgICAgbG9jYXRpb246IHRoaXMucm91dGVyLnVybCxcbiAgICAgICAgICAgICAgICBjYXVzZTogZXJyb3JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8ganVzdCB0cmFjZSBpdCwgYWxsb3cgdXNlciB0byBzZXQgaWYgdGhpcyBpcyBlcnJvciBvciBub3RcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoY29tbW9uc0Vycm9yKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lcnJvck1hcHBlci50b0NvbW1vbnNFcnJvcihlcnJvciwgY29tbW9uc0Vycm9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIG9yIGdldHMgZXhpc3RpbmcgYWN0aW9uIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycy5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2VJbml0aWFsU3RhdHVzIEFjdGlvbiBpbnN0YW5jZSBpbml0aWFsIHN0YXR1cy5cbiAgICAgKiBAcGFyYW0gc2tpcEluaXRpYWxpemF0aW9uRnJvbVZpZXdDb250YWluZXIgSWYgaW5pdGlhbGl6YXRpb24gb2YgaW5zdGFuY2UgZnJvbSB2aWV3IGNvbnRhaW5lciBzaG91bGQgYmUgc2tpcHBlZC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRPckNyZWF0ZUluc3RhbmNlPEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KFxuICAgICAgICBpbnN0YW5jZTogQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4gfCB1bmRlZmluZWQsXG4gICAgICAgIGFjdGlvbj86IEFjdGlvbkRlc2NyaXB0b3JJbnN0PEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBwYXJhbWV0ZXJzPzogQWN0aW9uUGFyYW1ldGVyczxJdGVtPixcbiAgICAgICAgaW5zdGFuY2VJbml0aWFsU3RhdHVzPzogQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0sXG4gICAgICAgIHNraXBJbml0aWFsaXphdGlvbkZyb21WaWV3Q29udGFpbmVyID0gZmFsc2VcbiAgICApOiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPiB7XG4gICAgICAgIGlmICghc2tpcEluaXRpYWxpemF0aW9uRnJvbVZpZXdDb250YWluZXIgJiYgIWluc3RhbmNlICYmIGFjdGlvbj8uYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlICYmIHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgIGluc3RhbmNlID0gdGhpcy52aWV3Q29udGFpbmVyPy5yb3V0ZVRyaWdnZXJlZEFjdGlvbkluc3RhbmNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIGlmICghYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKCdBY3Rpb24gZGVzY3JpcHRvciBpcyBub3QgcHJvdmlkZWQsIGluc3RhbmNlIGNhbm5vdCBiZSBjcmVhdGVkLicsIHtuYW1lOiAnQWN0aW9uRXhlY3V0b3JTZXJ2aWNlRXJyb3InfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjcmVhdGUgbmV3IGluc3RhbmNlIGlmIG5vbiBwcm92aWRlZFxuICAgICAgICAgICAgaW5zdGFuY2UgPSBuZXcgQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4oYWN0aW9uLCBpbnN0YW5jZUluaXRpYWxTdGF0dXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnPy5hY3Rpb25zPy5kZWJ1Z0luc3RhbmNlcyAmJiAhdGhpcy5pbnN0YW5jZXMuc29tZShpID0+IGkuaW5zdGFuY2VMb25nTmFtZSA9PT0gaW5zdGFuY2UhLmluc3RhbmNlTG9uZ05hbWUpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZXMubGVuZ3RoID49IHRoaXMuaW5zdGFuY2VzQnVmZmVyTWF4KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdEluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuc2hpZnQoKTtcblxuICAgICAgICAgICAgICAgIGlmIChsYXN0SW5zdGFuY2UhLnN0YXRlIDwgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoU3VjY2Vzc0ZpbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBFUlJPUjogTm90IGFsbCBpbnN0YW5jZXMgYXJlIGZpbmlzaGVkISBGaW5pc2hpbmcgaW5zdGFuY2UgJHtpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSB3aXRoIGRpc21pc3NhbC5gKTtcbiAgICAgICAgICAgICAgICAgICAgbGFzdEluc3RhbmNlIS5mb3JjZUZpbmlzaCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5pbnN0YW5jZXMucHVzaChpbnN0YW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxufVxuIl19
|
|
767
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWV4ZWN1dG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90YWJsZXZpZXcvc3JjL2FjdGlvbi9zZXJ2aWNlcy9hY3Rpb24tZXhlY3V0b3Iuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUN2RCxPQUFPLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUMsTUFBTSxFQUFVLE1BQU0saUJBQWlCLENBQUM7QUFFaEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFlLG1CQUFtQixFQUFFLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUM5RSxPQUFPLEVBQUMsYUFBYSxFQUFzQixNQUFNLHVCQUF1QixDQUFDO0FBQ3pFLE9BQU8sRUFBYSxJQUFJLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM5RSxPQUFPLEVBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsb0JBQW9CLEVBQ3BCLGNBQWMsRUFHZCxhQUFhLEVBQ2IsZUFBZSxFQUNmLGFBQWEsRUFDYixhQUFhLEVBQ2IsWUFBWSxFQUNmLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUNILDJCQUEyQixFQUczQiwwQkFBMEIsRUFFMUIsNkJBQTZCLEVBQzdCLDBCQUEwQixFQUMxQiw4QkFBOEIsRUFFOUIsY0FBYyxFQUNkLGtCQUFrQixFQUVsQixvQkFBb0IsRUFHdkIsTUFBTSxzQ0FBc0MsQ0FBQztBQUU5QyxPQUFPLEVBQUMsbUNB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SSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLEtBQUssUUFBUyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUN2SCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUNuRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUU1QyxJQUFJLFlBQWEsQ0FBQyxLQUFLLEdBQUcsdUJBQXVCLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztvQkFDbkUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsNkRBQTZELFFBQVEsQ0FBQyxnQkFBZ0Isa0JBQWtCLENBQUMsQ0FBQztvQkFDNUgsWUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNoQyxDQUFDO1lBQ0wsQ0FBQztZQUVELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFFRCxPQUFPLFFBQVEsQ0FBQztJQUNwQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0h0dHBFcnJvclJlc3BvbnNlfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQge0luamVjdG9yLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXIsIFVybFRyZWV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0NvbmZpcm1hdGlvbiwgQ29uZmlybWF0aW9uU2VydmljZSwgTWVzc2FnZVNlcnZpY2V9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7RGlhbG9nU2VydmljZSwgRHluYW1pY0RpYWxvZ0NvbmZpZ30gZnJvbSAncHJpbWVuZy9keW5hbWljZGlhbG9nJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgZnJvbSwgbWVyZ2VNYXAsIG9mLCBzd2l0Y2hNYXAsIHRha2UsIHRpbWVvdXR9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBmaWx0ZXIsIGZpcnN0LCBtYXAsIHN0YXJ0V2l0aH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge1xuICAgIEFjdGlvblBhcmFtZXRlcnMsXG4gICAgQ29tbW9uc0h0dHBFcnJvcixcbiAgICBDb21tb25zSW50ZXJuYWxFcnJvcixcbiAgICBDb21tb25zU2VydmljZSxcbiAgICBJQ29tbW9uc0Vycm9yLFxuICAgIElEYXRhUHJvdmlkZXIsXG4gICAgTG9nZ2VyU2VydmljZSxcbiAgICBQYXJhbWV0cml6ZVBpcGUsXG4gICAgU3R5bGVTaXplRW51bSxcbiAgICBlc2NhcGVIdG1sQW55LFxuICAgIHRvT2JzZXJ2YWJsZVxufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0sXG4gICAgQWN0aW9uQ29uZmlybWF0aW9uRGVzY3JpcHRvcixcbiAgICBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbixcbiAgICBBY3Rpb25EZWxldGVEZXNjcmlwdG9ySW5zdCxcbiAgICBBY3Rpb25EZXNjcmlwdG9ySW5zdCxcbiAgICBBY3Rpb25FZGl0b3JBZGREZXNjcmlwdG9ySW5zdCxcbiAgICBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdCxcbiAgICBBY3Rpb25FZGl0b3JFZGl0RGVzY3JpcHRvckluc3QsXG4gICAgQWN0aW9uUnVuRm5UeXBlLFxuICAgIEFjdGlvblR5cGVFbnVtLFxuICAgIENvbW1vbnNBY3Rpb25FcnJvcixcbiAgICBDb21tb25zQWN0aW9uRXJyb3JPcHRpb25zLFxuICAgIERhdGFQcm92aWRlckV4ZWN1dG9yLFxuICAgIElBY3Rpb25FZGl0b3JDb21wb25lbnQsXG4gICAgSUFjdGlvbkluc3RhbmNlXG59IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGV2aWV3L2FwaSc7XG5cbmltcG9ydCB7Q09NTU9OU19UQUJMRVZJRVdfRkVBVFVSRV9DT05GSUdfSVR9IGZyb20gJy4uLy4uL3RhYmxldmlldy9zZXJ2aWNlcy90YWJsZXZpZXctZmVhdHVyZS1jb25maWcudG9rZW4nO1xuaW1wb3J0IHtnZXRJMThuRm9yQWN0aW9ufSBmcm9tICcuLi9oZWxwZXJzL2kxOG4nO1xuaW1wb3J0IHthY3Rpb25Ob3RpZmljYXRpb25FcnJvciwgYWN0aW9uTm90aWZpY2F0aW9uU3VjY2Vzc30gZnJvbSAnLi4vaGVscGVycy9ub3RpZmljYXRpb24nO1xuaW1wb3J0IHtBY3Rpb25FZGl0b3JEaWFsb2dEYXRhfSBmcm9tICcuLi9tb2RlbHMvYWN0aW9uLWVkaXRvci1kaWFsb2ctZGF0YS5tb2RlbCc7XG5pbXBvcnQge0FjdGlvbkNvbnRleHR9IGZyb20gJy4uL21vZGVscy9leGVjdXRpb24vYWN0aW9uLWNvbnRleHQubW9kZWwnO1xuaW1wb3J0IHtBY3Rpb25JbnN0YW5jZVN0YXRlRW51bX0gZnJvbSAnLi4vbW9kZWxzL2V4ZWN1dGlvbi9hY3Rpb24taW5zdGFuY2Utc3RhdGUubW9kZWwnO1xuaW1wb3J0IHtBY3Rpb25JbnN0YW5jZX0gZnJvbSAnLi4vbW9kZWxzL2V4ZWN1dGlvbi9hY3Rpb24taW5zdGFuY2UubW9kZWwnO1xuaW1wb3J0IHtBY3Rpb25FcnJvck1hcHBlclNlcnZpY2V9IGZyb20gJy4vYWN0aW9uLWVycm9yLW1hcHBlci5zZXJ2aWNlJztcbmltcG9ydCB7TmF2aWdhdGlvblNlcnZpY2V9IGZyb20gJy4vbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7QUNUSU9OX0VESVRPUl9DT01QT05FTlRfSVR9IGZyb20gJy4vdG9rZW5zL2FjdGlvbi1lZGl0b3IudG9rZW4nO1xuaW1wb3J0IHtWaWV3Q29udGFpbmVyfSBmcm9tICcuL3ZpZXctY29udGFpbmVyLnNlcnZpY2UnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWN0aW9uRXhlY3V0b3JTZXJ2aWNlIHtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGlhbG9nU2VydmljZSA9IGluamVjdChEaWFsb2dTZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBjb21tb25zID0gaW5qZWN0KENvbW1vbnNTZXJ2aWNlKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGF0YVByb3ZpZGVyRXhlY3V0b3IgPSBpbmplY3QoRGF0YVByb3ZpZGVyRXhlY3V0b3IpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBuYXZpZ2F0aW9uU2VydmljZSA9IGluamVjdChOYXZpZ2F0aW9uU2VydmljZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGVycm9yTWFwcGVyID0gaW5qZWN0KEFjdGlvbkVycm9yTWFwcGVyU2VydmljZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbmZpZyA9IGluamVjdChDT01NT05TX1RBQkxFVklFV19GRUFUVVJFX0NPTkZJR19JVCwge29wdGlvbmFsOiB0cnVlfSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRlZmF1bHRFZGl0b3JEaWFsb2dDb21wb25lbnQgPSBpbmplY3QoQUNUSU9OX0VESVRPUl9DT01QT05FTlRfSVQpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBtZXNzYWdlU2VydmljZSA9IGluamVjdChNZXNzYWdlU2VydmljZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbmZpcm1hdGlvblNlcnZpY2UgPSBpbmplY3QoQ29uZmlybWF0aW9uU2VydmljZSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHZpZXdDb250YWluZXIgPSBpbmplY3QoVmlld0NvbnRhaW5lciwge29wdGlvbmFsOiB0cnVlfSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHBhcmFtZXRyaXplID0gbmV3IFBhcmFtZXRyaXplUGlwZSgpO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGluc3RhbmNlc0J1ZmZlck1heCA9IDEwMDtcbiAgICBwcm90ZWN0ZWQgbG9nZ2VyID0gaW5qZWN0KExvZ2dlclNlcnZpY2UpLmNyZWF0ZSgnQWN0aW9uRXhlY3V0b3JTZXJ2aWNlJyk7XG5cbiAgICBwdWJsaWMgYWJzdHJhY3QgZ2V0IGluc3RhbmNlcygpOiBBY3Rpb25JbnN0YW5jZTxhbnksIGFueT5bXTtcblxuICAgIC8qKlxuICAgICAqIFByZXBhcmVzIGFjdGlvbiBjb250ZXh0IGZvciB1c2FnZSBpbiB2YWxpZGF0aW9uLlxuICAgICAqIEBwYXJhbSBhY3Rpb24gQWN0aW9uIGRlc2NyaXB0b3IuXG4gICAgICogQHBhcmFtIHBhcmFtZXRlcnMgQWN0aW9uIHBhcmFtZXRlcnMuXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBEYXRhIHByb3ZpZGVyLlxuICAgICAqL1xuICAgIHB1YmxpYyBwcmVwYXJlQWN0aW9uQ29udGV4dFZhbGlkYXRpb248SXRlbSwgU2VydmljZT4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8SXRlbT4sXG4gICAgICAgIHBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8SXRlbT4sXG4gICAgICAgIGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8SXRlbSwgU2VydmljZT5cbiAgICApOiBBY3Rpb25Db250ZXh0VmFsaWRhdGlvbjxJdGVtLCBTZXJ2aWNlPiB7XG4gICAgICAgIGNvbnN0IGN0eERhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlciA/PyBhY3Rpb24uZGF0YVByb3ZpZGVyID8/IHRoaXMudmlld0NvbnRhaW5lcj8uZGF0YVByb3ZpZGVyKCk7XG4gICAgICAgIHJldHVybiA8QWN0aW9uQ29udGV4dFZhbGlkYXRpb248SXRlbSwgU2VydmljZT4+e1xuICAgICAgICAgICAgZGVzY3JpcHRvcjogYWN0aW9uLFxuICAgICAgICAgICAgcGFyYW1ldGVyczogcGFyYW1ldGVycyxcbiAgICAgICAgICAgIHNlcnZpY2VJbnN0YW5jZTogdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5nZXREYXRhUHJvdmlkZXJTZXJ2aWNlKHRoaXMuaW5qZWN0b3IsIGN0eERhdGFQcm92aWRlcikgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgZGF0YVByb3ZpZGVyOiBjdHhEYXRhUHJvdmlkZXJcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGFjdGlvbiBjb250ZXh0IGJ5IHN1Ym1pdHRpbmcgZXhlY3V0aW9uIHJlc3VsdHMvZXJyb3JzIHRvIGNvbnRleHQsIHdhdGNoaW5nIG92ZXIgaW5zdGFuY2UgcmVzdWx0cy9lcnJvcnMsIGRpc3BsYXlpbmcgbm90aWZpY2F0aW9ucyxcbiAgICAgKiBydW5uaW5nIG5leHQvZXJyb3IgYWN0aW9uIGFuZCB0cmlnZ2VyaW5nIGRpc21pc3Mgb2YgYWN0aW9uLiBDb25maXJtYXRpb24gaXMgYWxzbyBwcm9jZXNzZWQgaGVyZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjdHggQWN0aW9uIGNvbnRleHQgdG8gcnVuLlxuICAgICAqL1xuICAgIHB1YmxpYyBydW48SXRlbSwgU2VydmljZSA9IHVuZGVmaW5lZD4oY3R4OiBBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+KSB7XG4gICAgICAgIGNvbnN0IGlzTWFpblJ1bkZuID0gY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3N1Ym1pdCcgfHwgY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3J1bic7XG5cbiAgICAgICAgLy8gaWYgKGN0eC5pbnN0YW5jZS5hY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRGlyZWN0ICYmIGN0eC5pbnN0YW5jZS5hY3Rpb24uaGFzUnVuQ29uZmlybWF0aW9uKSB7XG4gICAgICAgIGlmIChpc01haW5SdW5GbiAmJiBjdHguaW5zdGFuY2UuYWN0aW9uLmhhc1J1bkNvbmZpcm1hdGlvbikge1xuICAgICAgICAgICAgLy8gb25seSBkaXJlY3QgYWN0aW9uIGNhbiBiZSBjb25maWd1cmVkIHdpdGggcnVuIGNvbmZpcm1hdGlvblxuICAgICAgICAgICAgLy8gaWYgZWRpdG9yLCB0aGVuIHJ1biBjb25maXJtYXRpb24gaXMgbWFwcGVkIHRvIHN1Ym1pdCBhY3Rpb24gYW5kIGlnbm9yZWQgYXMgZWRpdG9yIHJ1blxuICAgICAgICAgICAgY29uc3QgY29uZmlybWF0aW9uRGVzY3JpcHRvciA9IGN0eC5pbnN0YW5jZS5hY3Rpb24ucnVuQ29uZmlybWF0aW9uRGlhbG9nRGVzY3JpcHRvciBhcyBBY3Rpb25Db25maXJtYXRpb25EZXNjcmlwdG9yPEl0ZW0+O1xuXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gY3R4LnBhcmFtZXRlcnMuaXRlbTtcbiAgICAgICAgICAgIGxldCBjb25maXJtUGFyYW1zOiBDb25maXJtYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgaWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5pY29uLFxuICAgICAgICAgICAgICAgIGFjY2VwdFZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgYWNjZXB0SWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRCdXR0b24uaWNvbiA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgYWNjZXB0QnV0dG9uU3R5bGVDbGFzczogY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRCdXR0b24uc3R5bGVDbGFzcy5idWlsZCgpLFxuICAgICAgICAgICAgICAgIHJlamVjdFZpc2libGU6IHRydWUsXG4gICAgICAgICAgICAgICAgcmVqZWN0SWNvbjogY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RCdXR0b24/Lmljb24gPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIHJlamVjdEJ1dHRvblN0eWxlQ2xhc3M6IGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uPy5zdHlsZUNsYXNzLmJ1aWxkKCksXG4gICAgICAgICAgICAgICAgY2xvc2VPbkVzY2FwZTogY29uZmlybWF0aW9uRGVzY3JpcHRvci5jbG9zZU9uRXNjYXBlXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci50aXRsZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuaGVhZGVyID1cbiAgICAgICAgICAgICAgICAgICAgZ2V0STE4bkZvckFjdGlvbih0aGlzLnRyYW5zbGF0ZSwgY3R4Lmluc3RhbmNlLmFjdGlvbiwgJ2NvbmZpcm0udGl0bGUnLCBjb25maXJtYXRpb25EZXNjcmlwdG9yLnRpdGxlLCBpdGVtLCAnZ2VuZXJhbC5jb25maXJtYXRpb24nKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLm1lc3NhZ2UgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zLm1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgICAgICBnZXRJMThuRm9yQWN0aW9uKHRoaXMudHJhbnNsYXRlLCBjdHguaW5zdGFuY2UuYWN0aW9uLCAnY29uZmlybS5tZXNzYWdlJywgY29uZmlybWF0aW9uRGVzY3JpcHRvci5tZXNzYWdlLCBlc2NhcGVIdG1sQW55KGl0ZW0pLCAnZ2VuZXJhbC5jb25maXJtYXRpb24nKSA/P1xuICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdEJ1dHRvbi5sYWJlbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuYWNjZXB0TGFiZWwgPVxuICAgICAgICAgICAgICAgICAgICBnZXRJMThuRm9yQWN0aW9uKHRoaXMudHJhbnNsYXRlLCBjdHguaW5zdGFuY2UuYWN0aW9uLCAnY29uZmlybS5hY2NlcHQnLCBjb25maXJtYXRpb25EZXNjcmlwdG9yLmFjY2VwdEJ1dHRvbi5sYWJlbCwgaXRlbSwgJ2dlbmVyYWwueWVzJykgPz8gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci5hY2NlcHRCdXR0b24uaWNvbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMuYWNjZXB0SWNvbiA9IGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IuYWNjZXB0QnV0dG9uLmljb247XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEJ1dHRvbj8uaWNvbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0SWNvbiA9IGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uPy5pY29uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29uZmlybWF0aW9uRGVzY3JpcHRvci5yZWplY3RCdXR0b24/LmxhYmVsICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlybVBhcmFtcy5yZWplY3RMYWJlbCA9XG4gICAgICAgICAgICAgICAgICAgIGdldEkxOG5Gb3JBY3Rpb24odGhpcy50cmFuc2xhdGUsIGN0eC5pbnN0YW5jZS5hY3Rpb24sICdjb25maXJtLnJlamVjdCcsIGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucmVqZWN0QnV0dG9uPy5sYWJlbCwgaXRlbSwgJ2dlbmVyYWwubm8nKSA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEJ1dHRvbiA9PSBudWxsIHx8IChjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEJ1dHRvbi5sYWJlbCA9PT0gbnVsbCAmJiBjb25maXJtYXRpb25EZXNjcmlwdG9yLnJlamVjdEJ1dHRvbi5pY29uID09PSBudWxsKSkge1xuICAgICAgICAgICAgICAgIGNvbmZpcm1QYXJhbXMucmVqZWN0VmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25maXJtUGFyYW1zLmFjY2VwdCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5Db25maXJtYXRpb25FbmRBY2NlcHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5ydW5XaXRob3V0Q29uZmlybWF0aW9uKGN0eCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25maXJtUGFyYW1zLnJlamVjdCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5SdW5Db25maXJtYXRpb25FbmRSZWplY3Q7XG4gICAgICAgICAgICAgICAgaWYgKGN0eC5pbnN0YW5jZS5hY3Rpb24udHlwZSAhPT0gQWN0aW9uVHlwZUVudW0uRWRpdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIG5vdCBlZGl0b3IsIHRoZSBpdCBjYW4gYmUgY2xvc2VkXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoQWN0aW9uKGN0eC5pbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGNvbmZpcm1hdGlvbkRlc2NyaXB0b3IucnVuQ29uZmlybWF0aW9uQ29uZmlnTWFwRm4pIHtcbiAgICAgICAgICAgICAgICBjb25maXJtUGFyYW1zID0gY29uZmlybWF0aW9uRGVzY3JpcHRvci5ydW5Db25maXJtYXRpb25Db25maWdNYXBGbihjdHgsIGNvbmZpcm1QYXJhbXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdHguY29uZmlybWF0aW9uID0gY29uZmlybVBhcmFtcztcbiAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkNvbmZpcm1hdGlvblN0YXJ0O1xuXG4gICAgICAgICAgICB0aGlzLmNvbmZpcm1hdGlvblNlcnZpY2UuY29uZmlybShjb25maXJtUGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucnVuV2l0aG91dENvbmZpcm1hdGlvbihjdHgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBhY3Rpb24gY29udGV4dCBieSBzdWJtaXR0aW5nIGV4ZWN1dGlvbiByZXN1bHRzL2Vycm9ycyB0byBjb250ZXh0LCB3YXRjaGluZyBvdmVyIGluc3RhbmNlIHJlc3VsdHMvZXJyb3JzLCBkaXNwbGF5aW5nIG5vdGlmaWNhdGlvbnMsXG4gICAgICogcnVubmluZyBuZXh0L2Vycm9yIGFjdGlvbiBhbmQgdHJpZ2dlcmluZyBkaXNtaXNzIG9mIGFjdGlvbi4gQ29uZmlybWF0aW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY3R4IEFjdGlvbiBjb250ZXh0IHRvIHJ1bi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEFjdGlvbiBjb250ZXh0IGZvciBzdWJtaXQgKD1ydW4pIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgcnVuV2l0aG91dENvbmZpcm1hdGlvbjxJdGVtLCBTZXJ2aWNlID0gdW5kZWZpbmVkPihjdHg6IEFjdGlvbkNvbnRleHQ8SXRlbSwgU2VydmljZT4pOiBPYnNlcnZhYmxlPEl0ZW0gfCBudWxsIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IGlzTWFpblJ1bkZuID0gY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3N1Ym1pdCcgfHwgY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3J1bic7XG4gICAgICAgIGNvbnN0IGlzRXJyb3JDcml0aWNhbFJ1bkZuID0gY3R4LmZ1bmN0aW9uTmFtZSA9PT0gJ3J1bic7XG4gICAgICAgIGxldCBhY3Rpb25FZGl0b3I6IEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PEl0ZW0+O1xuXG4gICAgICAgIGxldCBmbk9iczogQWN0aW9uUnVuRm5UeXBlPEl0ZW0sIFNlcnZpY2U+O1xuICAgICAgICBzd2l0Y2ggKGN0eC5mdW5jdGlvbk5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3N1Ym1pdCc6XG4gICAgICAgICAgICAgICAgYWN0aW9uRWRpdG9yID0gY3R4Lmluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxJdGVtPjtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFjdGlvbkVkaXRvci5zdWJtaXRGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uRWRpdG9yIGluc3RhbmNlb2YgQWN0aW9uRWRpdG9yQWRkRGVzY3JpcHRvckluc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuT2JzID0gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5ydW5DcmVhdGVPckZhaWwuYmluZCh0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb25FZGl0b3IgaW5zdGFuY2VvZiBBY3Rpb25FZGl0b3JFZGl0RGVzY3JpcHRvckluc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZuT2JzID0gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5ydW5VcGRhdGVPckZhaWwuYmluZCh0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRyeSB0byBndWVzcyB0aGlzIG9uZVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVmYXVsdFN1Ym1pdCA9IG9mKGN0eC5wYXJhbWV0ZXJzPy5pdGVtID8gY3R4LnBhcmFtZXRlcnMuaXRlbSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbk9icyA9IGN0eCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5wYXJhbWV0ZXJzLml0ZW1JZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5ydW5VcGRhdGUoY3R4LCBkZWZhdWx0U3VibWl0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5ydW5DcmVhdGUoY3R4LCBkZWZhdWx0U3VibWl0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm5PYnMgPSBhY3Rpb25FZGl0b3Iuc3VibWl0RnVuY3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZmV0Y2gnOlxuICAgICAgICAgICAgICAgIGFjdGlvbkVkaXRvciA9IGN0eC5pbnN0YW5jZS5hY3Rpb24gYXMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3Q8SXRlbT47XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhY3Rpb25FZGl0b3IuZmV0Y2hGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uRWRpdG9yIGluc3RhbmNlb2YgQWN0aW9uRWRpdG9yRWRpdERlc2NyaXB0b3JJbnN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbk9icyA9IHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IucnVuRmV0Y2hPckZhaWwuYmluZCh0aGlzLmRhdGFQcm92aWRlckV4ZWN1dG9yKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRGZXRjaCA9IG9mKGN0eC5wYXJhbWV0ZXJzPy5pdGVtID8gY3R4LnBhcmFtZXRlcnMuaXRlbSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbk9icyA9IGN0eCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN0eC5wYXJhbWV0ZXJzLml0ZW1JZCB8fCB0eXBlb2YgY3R4LnBhcmFtZXRlcnMuaXRlbSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IucnVuRmV0Y2goY3R4LCBkZWZhdWx0RmV0Y2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdEZldGNoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZuT2JzID0gYWN0aW9uRWRpdG9yLmZldGNoRnVuY3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncnVuJzpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgaWYgKCFjdHguaW5zdGFuY2UuYWN0aW9uLmhhc1J1bkZ1bmN0aW9uICYmIGN0eC5pbnN0YW5jZS5hY3Rpb24gaW5zdGFuY2VvZiBBY3Rpb25EZWxldGVEZXNjcmlwdG9ySW5zdCkge1xuICAgICAgICAgICAgICAgICAgICBmbk9icyA9IHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IucnVuRGVsZXRlT3JGYWlsLmJpbmQodGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZm5PYnMgPSBjdHguaW5zdGFuY2UuYWN0aW9uLnJ1bkZ1bmN0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJldE9icyA9IG9mKHZvaWQgMCkucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc01haW5SdW5Gbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiBtYWluIHJ1biBmdW5jdGlvbiwgYWxzbyBzZXQgbG9hZGluZyB0byB0cnVlXG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1blN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuaXNSdW5Mb2FkaW5nU3ViamVjdC5uZXh0KHRydWUpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZldGNoU3RhcnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIHN0YXJ0IGNvbnRleHQgZXhlY3V0aW9uIHRvIG1hcmsgZXhlY3V0aW9uIGxvYWRpbmdcbiAgICAgICAgICAgICAgICBjdHguZXhlY3V0aW9uU3RhcnQoKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0b09ic2VydmFibGUoZm5PYnMoY3R4KSk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1lcmdlTWFwKHJ1blJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgLy8gc2V0IG5leHQgc3RhdGUgZGVwZW5kaW5nIG9uIHJ1blxuICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IGlzTWFpblJ1bkZuID8gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uUnVuRW5kIDogQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hFbmQ7XG4gICAgICAgICAgICAgICAgLy8gc2V0IGV4ZWN1dGlvbiByZXN1bHRcbiAgICAgICAgICAgICAgICBjdHguZXhlY3V0aW9uTmV4dChydW5SZXN1bHQsIGlzTWFpblJ1bkZuKTtcblxuICAgICAgICAgICAgICAgIGlmIChpc01haW5SdW5Gbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBzZXQgaW5zdGFuY2UgZmluYWwgcmVzdWx0IG9uIG1haW4gcnVuIGV4ZWN1dGlvblxuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UucmVzdWx0ID0gcnVuUmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuaXNSdW5Mb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgbm90aWZpY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdHguaW5zdGFuY2UuYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5ub3RpZmljYXRpb24gPSBhY3Rpb25Ob3RpZmljYXRpb25TdWNjZXNzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5hY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LmZ1bmN0aW9uTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5hY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc1RpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5hY3Rpb24ucnVuTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdHgucGFyYW1ldGVycz8uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ucnVuUmVzdWx0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBwb3NzaWJsZSBhZnRlciBydW4gYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdHguaW5zdGFuY2UuYWN0aW9uLmFmdGVyUnVuQWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXJrIG5ldyBzdGF0ZSBmb3IgbmV4dCBhY3Rpb24gc3RhcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVyUnVuQWN0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY3R4Lmluc3RhbmNlLmFjdGlvbi5hZnRlclJ1bkFjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IGN0eC5pbnN0YW5jZS5hY3Rpb24uYWZ0ZXJSdW5BY3Rpb24oY3R4KSA6IGN0eC5pbnN0YW5jZS5hY3Rpb24uYWZ0ZXJSdW5BY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0QWN0aW9uSW5zdGFuY2UgPSB0aGlzLmFjdGl2YXRlQWN0aW9uKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyUnVuQWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxBY3Rpb25QYXJhbWV0ZXJzPHVua25vd24+PntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUlkOiBjdHgucGFyYW1ldGVycy5pdGVtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IHJ1blJlc3VsdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uRGF0YTogY3R4LnBhcmFtZXRlcnMuYWN0aW9uRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGU6IGN0eC5wYXJhbWV0ZXJzLnJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VDb21wb25lbnQ6IGN0eC5wYXJhbWV0ZXJzLnNvdXJjZUNvbXBvbmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZSBhcyBBY3Rpb25JbnN0YW5jZTx1bmtub3duLCB1bmtub3duPixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLm5leHRBY3Rpb25JbnN0YW5jZSA9IG5leHRBY3Rpb25JbnN0YW5jZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uTmV4dEFjdGlvblN0YXJ0O1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmaW5pc2ggY3VycmVudCBhY3Rpb24gd2hlbiBuZXh0IGFjdGlvbiBmaW5pc2hlc1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5leHRBY3Rpb25JbnN0YW5jZS5zdGF0ZSQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgobmV4dEFjdGlvbkluc3RhbmNlLnN0YXRlKSwgLy8gcHJvdmlkZSBmaXJzdCBzdGF0ZSBjYXVzZSBpdCBtaWdodCBiZSBmaW5pc2hlZCBhbHJlYWR5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHN0YXRlID0+IHN0YXRlID49IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NGaW5hbCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5OZXh0QWN0aW9uRW5kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnVuUmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbkVkaXRvci5oYXNGZXRjaE5vdGlmaWNhdGlvblN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbk5vdGlmaWNhdGlvblN1Y2Nlc3MoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2xhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uRWRpdG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmZXRjaCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25FZGl0b3IuZmV0Y2hOb3RpZmljYXRpb25TdWNjZXNzVGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uRWRpdG9yLmZldGNoTm90aWZpY2F0aW9uU3VjY2Vzc01lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LnBhcmFtZXRlcnMuaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBvZihydW5SZXN1bHQpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAocnVuUmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWluUnVuRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZGVhY3RpdmF0ZSBhY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5pc2hBY3Rpb24oY3R4Lmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ1blJlc3VsdDtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHRyYW5zZm9ybSBlcnJvciB0byBhY3Rpb24gZXJyb3JcbiAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb25FcnJvciA9IHRoaXMudG9BY3Rpb25FcnJvcihlcnIsIGN0eCk7XG5cbiAgICAgICAgICAgICAgICAvLyBzZXQgaW5zdGFuY2Ugc3RhdGUgdG8gZXJyb3JcbiAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2Uuc3RhdGUgPSBpc01haW5SdW5GbiA/IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlJ1bkVycm9yIDogQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmV0Y2hFcnJvcjtcbiAgICAgICAgICAgICAgICAvLyBtYXJrIGV4ZWN1dGlvbiBlcnJvciBvbiBjb250ZXh0XG4gICAgICAgICAgICAgICAgY3R4LmV4ZWN1dGlvbkVycm9yKGFjdGlvbkVycm9yKTtcblxuICAgICAgICAgICAgICAgIGlmIChjdHguaW5zdGFuY2UuYWN0aW9uLmhhc1J1bk5vdGlmaWNhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbk5vdGlmaWNhdGlvbkVycm9yKHRoaXMudHJhbnNsYXRlLCBjdHguaW5zdGFuY2UuYWN0aW9uLCBhY3Rpb25FcnJvciwgJ2ZldGNoJywgdGhpcy5tZXNzYWdlU2VydmljZSwgY3R4LnBhcmFtZXRlcnMuaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGVycm9yT2JzID0gb2Yodm9pZCAwKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNNYWluUnVuRm4pIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLmVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuaXNSdW5Mb2FkaW5nU3ViamVjdC5uZXh0KGZhbHNlKTtcblxuICAgICAgICAgICAgICAgICAgICAvLyBoYW5kbGUgcG9zc2libGUgZXJyb3IgYWN0aW9uIGlmIHJ1blxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNNYWluUnVuRm4gJiYgY3R4Lmluc3RhbmNlLmFjdGlvbi5vblJ1bkVycm9yQWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvblJ1bkVycm9yQWN0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgY3R4Lmluc3RhbmNlLmFjdGlvbi5vblJ1bkVycm9yQWN0aW9uID09PSAnZnVuY3Rpb24nID8gY3R4Lmluc3RhbmNlLmFjdGlvbi5vblJ1bkVycm9yQWN0aW9uKGN0eCkgOiBjdHguaW5zdGFuY2UuYWN0aW9uLm9uUnVuRXJyb3JBY3Rpb247XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW5ub3Qgc3RhcnQgd2l0aCB0cmlnZ2VyLCBiZWNhdXNlIHJvdXRpbmcgbWlnaHQgYmUgcHJvYmxlbWF0aWMgKGxvdXNpbmcgcHJldmlvdXMgcmVzdWx0cyBldGMuKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JBY3Rpb25JbnN0YW5jZSA9IHRoaXMuYWN0aXZhdGVBY3Rpb248SXRlbSwgU2VydmljZT4oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25SdW5FcnJvckFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8QWN0aW9uUGFyYW1ldGVyczxJdGVtPj57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1JZDogY3R4LnBhcmFtZXRlcnMuaXRlbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtOiBjdHgucGFyYW1ldGVycy5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25EYXRhOiBjdHgucGFyYW1ldGVycy5hY3Rpb25EYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZTogY3R4LnBhcmFtZXRlcnMucm91dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUNvbXBvbmVudDogY3R4LnBhcmFtZXRlcnMuc291cmNlQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguaW5zdGFuY2UuZXJyb3JBY3Rpb25JbnN0YW5jZSA9IGVycm9yQWN0aW9uSW5zdGFuY2U7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGN0eC5pbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkVycm9yQWN0aW9uU3RhcnQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yT2JzID0gZXJyb3JBY3Rpb25JbnN0YW5jZS5zdGF0ZSQucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFdpdGgoZXJyb3JBY3Rpb25JbnN0YW5jZS5zdGF0ZSksIC8vIHByb3ZpZGUgZmlyc3Qgc3RhdGUgY2F1c2UgaXQgbWlnaHQgYmUgZmluaXNoZWQgYWxyZWFkeVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzdGF0ZSA9PiBzdGF0ZSA+PSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzRmluYWwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4Lmluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRXJyb3JBY3Rpb25FbmQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBsaXN0IGFuZCBtYXAgb25seSB0byBtYXJrIGluc3RhbmNlIHN0YXRlIGFzIGZpbmlzaGVkIGVycm9yIHN0YXRlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yT2JzLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBkZWFjdGl2YXRlIGFjdGlvbiBvbmx5IGlmIGNyaXRpY2FsIChmZXRjaCBvbiBlZGl0b3Igb3IgcnVuIG9uIGJ1dHRvbiBhY3Rpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRXJyb3JDcml0aWNhbFJ1bkZuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5pc2hBY3Rpb24oY3R4Lmluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldGhyb3cgZXJyb3IgdG8gcHJvcGFnYXRlIGZ1cnRoZXJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGFjdGlvbkVycm9yO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIGN0eC5ydW5TdWJzY3JpcHRpb24gPSByZXRPYnMuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYEFjdGlvbkNvbnRleHQgJHtjdHguY29udGV4dExvbmdOYW1lfSBleGVjdXRpb24gbmV4dCBldmVudGAsIHJlcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IGVyciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKChlcnIgYXMgSUNvbW1vbnNFcnJvciB8IHVuZGVmaW5lZCk/LnR5cGUgIT09ICdDb21tb25zQWN0aW9uRXJyb3InKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBOb24gYWN0aW9uIGVycm9yIG9jY3VycmVkYCwgZXJyKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhgQWN0aW9uIGNvbnRleHQgJHtjdHguY29udGV4dExvbmdOYW1lfSBleGVjdXRpb24gZXJyb3IgZXZlbnRgLCBlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJldE9icztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcmVwYXJlcyBlZGl0b3IgYWN0aW9uJ3MgZmV0Y2ggZnVuY3Rpb24gYnkgY3JlYXRpbmcgbmV3IGFjdGlvbiBjb250ZXh0IGZvciBhY3Rpb24gaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWN0aW9uIEFjdGlvbiBkZXNjcmlwdG9yLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFjdGlvbiBwYXJhbWV0ZXJzIGZvciBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgRWRpdG9yIGRhdGEgcHJvdmlkZXIgZm9yIGNvbnRleHQuXG4gICAgICogQHBhcmFtIGluc3RhbmNlIE9wdGlvbmFsIGV4aXN0aW5nIGFjdGlvbiBpbnN0YW5jZSAoaWYgbm9uIHByb3ZpZGVkLCBuZXcgd2lsbCBiZSBjcmVhdGVkKS5cbiAgICAgKiBAcGFyYW0gcHJldmlvdXNBY3Rpb25JbnN0YW5jZSBPcHRpb25hbCBwcmV2aW91cyBhY3Rpb24gaW5zdGFuY2UgdG8gbGluayBpbiBuZXh0IGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQWN0aW9uIGNvbnRleHQgZm9yIGZldGNoIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBwcmVwYXJlQ29udGV4dEZvckVkaXRvckZldGNoPEl0ZW0sIFNlcnZpY2U+KFxuICAgICAgICBhY3Rpb246IEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PEl0ZW0+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+LFxuICAgICAgICBkYXRhUHJvdmlkZXI/OiBJRGF0YVByb3ZpZGVyPEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBwcmV2aW91c0FjdGlvbkluc3RhbmNlPzogSUFjdGlvbkluc3RhbmNlPGFueSwgYW55PlxuICAgICk6IEFjdGlvbkNvbnRleHQ8SXRlbSwgU2VydmljZT4ge1xuICAgICAgICBpbnN0YW5jZSA9IHRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZShpbnN0YW5jZSwgYWN0aW9uLCBwYXJhbWV0ZXJzLCBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlcGFyZUNvbnRleHRGb3JFZGl0b3IoaW5zdGFuY2UsIHBhcmFtZXRlcnMsICdmZXRjaCcsIGRhdGFQcm92aWRlciwgcHJldmlvdXNBY3Rpb25JbnN0YW5jZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUnVucyBlZGl0b3IgYWN0aW9uJ3Mgc3VibWl0ICg9bWFpbiBydW4pIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIG5ldyBhY3Rpb24gY29udGV4dCBmb3IgYWN0aW9uIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycyBmb3IgY29udGV4dC5cbiAgICAgKiBAcGFyYW0gZGF0YVByb3ZpZGVyIEVkaXRvciBkYXRhIHByb3ZpZGVyIGZvciBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBPcHRpb25hbCBleGlzdGluZyBhY3Rpb24gaW5zdGFuY2UgKGlmIG5vbiBwcm92aWRlZCwgbmV3IHdpbGwgYmUgY3JlYXRlZCkuXG4gICAgICogQHBhcmFtIHByZXZpb3VzQWN0aW9uSW5zdGFuY2UgT3B0aW9uYWwgcHJldmlvdXMgYWN0aW9uIGluc3RhbmNlIHRvIGxpbmsgaW4gbmV4dCBpbnN0YW5jZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEFjdGlvbiBjb250ZXh0IGZvciBzdWJtaXQgKD1ydW4pIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHB1YmxpYyBwcmVwYXJlQ29udGV4dEZvckVkaXRvclN1Ym1pdDxJdGVtLCBTZXJ2aWNlPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxJdGVtPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxJdGVtPixcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcjxJdGVtLCBTZXJ2aWNlPixcbiAgICAgICAgaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IElBY3Rpb25JbnN0YW5jZTxhbnksIGFueT5cbiAgICApOiBBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+IHtcbiAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2UoaW5zdGFuY2UsIGFjdGlvbiwgcGFyYW1ldGVycywgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvbkVuZCk7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXBhcmVDb250ZXh0Rm9yRWRpdG9yKGluc3RhbmNlLCBwYXJhbWV0ZXJzLCAnc3VibWl0JywgZGF0YVByb3ZpZGVyLCBwcmV2aW91c0FjdGlvbkluc3RhbmNlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcmVwYXJlcyBhY3Rpb24gZXhlYyBjb250ZXh0IGZvciBhY3Rpb24gb2YgdHlwZSBlZGl0b3IuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgQWN0aW9uIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBwYXJhbWV0ZXJzIEFjdGlvbiBwYXJhbWV0ZXJzIGZvciBjb250ZXh0LlxuICAgICAqIEBwYXJhbSBmdW5jdGlvbk5hbWUgQWN0aW9uIGZ1bmN0aW9uIG5hbWUgcGFyYW1ldGVyLlxuICAgICAqIEBwYXJhbSBkYXRhUHJvdmlkZXIgT3B0aW9uYWwgZGF0YSBwcm92aWRlci4gSWYgbm90IHByb3ZpZGVkIGRhdGEgcHJvdmlkZXIgZnJvbSBlaXRoZXIgdGhlIGFjdGlvbiBlZGl0b3Igb3IgdmlldyBjb250YWluZXIgd2lsbCBiZSB1c2VkLlxuICAgICAqIEBwYXJhbSBwcmV2aW91c0FjdGlvbkluc3RhbmNlIE9wdGlvbmFsIHByZXZpb3VzIGFjdGlvbiBpbnN0YW5jZSB0byBsaW5rIGluIG5leHQgaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHJpdmF0ZSBwcmVwYXJlQ29udGV4dEZvckVkaXRvcjxJdGVtLCBTZXJ2aWNlPihcbiAgICAgICAgaW5zdGFuY2U6IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBwYXJhbWV0ZXJzOiBBY3Rpb25QYXJhbWV0ZXJzPEl0ZW0+LFxuICAgICAgICBmdW5jdGlvbk5hbWU6ICdzdWJtaXQnIHwgJ2ZldGNoJyxcbiAgICAgICAgZGF0YVByb3ZpZGVyPzogSURhdGFQcm92aWRlcixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IElBY3Rpb25JbnN0YW5jZTxhbnksIGFueT5cbiAgICApOiBBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+IHtcbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi50eXBlICE9PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBDb21tb25zSW50ZXJuYWxFcnJvcihgQ2Fubm90IGNyZWF0ZSBlZGl0b3IgY29udGV4dCBmb3IgYWN0aW9uICR7aW5zdGFuY2UuYWN0aW9uLmFjdGlvbk5hbWVMb25nfSBvZiB0eXBlICR7aW5zdGFuY2UuYWN0aW9uLnR5cGV9LmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGVkaXRvckFjdGlvbiA9IGluc3RhbmNlLmFjdGlvbiBhcyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9ySW5zdDxJdGVtPjtcbiAgICAgICAgbGV0IGN0eERhdGFQcm92aWRlciA9IGRhdGFQcm92aWRlcjtcbiAgICAgICAgaWYgKCFjdHhEYXRhUHJvdmlkZXIgJiYgZWRpdG9yQWN0aW9uLmRhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgY3R4RGF0YVByb3ZpZGVyID0gZWRpdG9yQWN0aW9uLmRhdGFQcm92aWRlcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWN0eERhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgY29uc3Qgdmlld0NvbnRhaW5lckRhdGFQcm92aWRlciA9IHRoaXMudmlld0NvbnRhaW5lcj8uZGF0YVByb3ZpZGVyKCk7XG4gICAgICAgICAgICBpZiAodmlld0NvbnRhaW5lckRhdGFQcm92aWRlcikge1xuICAgICAgICAgICAgICAgIGN0eERhdGFQcm92aWRlciA9IHZpZXdDb250YWluZXJEYXRhUHJvdmlkZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3R4ID0gbmV3IEFjdGlvbkNvbnRleHQ8SXRlbSwgU2VydmljZT4oXG4gICAgICAgICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgICAgICAgaW5zdGFuY2UsXG4gICAgICAgICAgICBwYXJhbWV0ZXJzLFxuICAgICAgICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgICAgICAgdGhpcy5kYXRhUHJvdmlkZXJFeGVjdXRvci5nZXREYXRhUHJvdmlkZXJTZXJ2aWNlKHRoaXMuaW5qZWN0b3IsIGN0eERhdGFQcm92aWRlcikgPz8gdW5kZWZpbmVkLFxuICAgICAgICAgICAgY3R4RGF0YVByb3ZpZGVyLFxuICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyID8/IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgICAgICBjdHgucHJldmlvdXNBY3Rpb25JbnN0YW5jZSA9IHByZXZpb3VzQWN0aW9uSW5zdGFuY2U7XG4gICAgICAgIGluc3RhbmNlLm5ld0NvbnRleHQoY3R4KTtcbiAgICAgICAgcmV0dXJuIGN0eDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSdW5zIGFjdGlvbidzIG1haW4gcnVuIGZ1bmN0aW9uIGJ5IGNyZWF0aW5nIG5ldyBhY3Rpb24gY29udGV4dCBmb3IgYWN0aW9uIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycyBmb3IgY29udGV4dCBydW4uXG4gICAgICogQHBhcmFtIGRhdGFQcm92aWRlciBEYXRhIHByb3ZpZGVyIGZvciBjb250ZXh0IHJ1bi5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgT3B0aW9uYWwgZXhpc3RpbmcgYWN0aW9uIGluc3RhbmNlIChpZiBub24gcHJvdmlkZWQsIG5ldyB3aWxsIGJlIGNyZWF0ZWQpLlxuICAgICAqIEBwYXJhbSBwcmV2aW91c0FjdGlvbkluc3RhbmNlIE9wdGlvbmFsIHByZXZpb3VzIGFjdGlvbiBpbnN0YW5jZSB0byBsaW5rIGluIG5leHQgaW5zdGFuY2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBBY3Rpb24gY29udGV4dCBmb3IgcnVuIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIHByaXZhdGUgcHJlcGFyZUNvbnRleHQ8SXRlbSwgU2VydmljZSA9IHVuZGVmaW5lZD4oXG4gICAgICAgIGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8SXRlbSwgU2VydmljZT4sXG4gICAgICAgIHBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8SXRlbT4sXG4gICAgICAgIGRhdGFQcm92aWRlcj86IElEYXRhUHJvdmlkZXI8SXRlbSwgU2VydmljZT4sXG4gICAgICAgIGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4sXG4gICAgICAgIHByZXZpb3VzQWN0aW9uSW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxhbnksIGFueT5cbiAgICApOiBBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+IHtcbiAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2U8SXRlbSwgU2VydmljZT4oaW5zdGFuY2UsIGFjdGlvbiwgcGFyYW1ldGVycywgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvbkVuZCk7XG5cbiAgICAgICAgY29uc3QgY3R4RGF0YVByb3ZpZGVyID0gZGF0YVByb3ZpZGVyID8/IGluc3RhbmNlLmFjdGlvbi5kYXRhUHJvdmlkZXIgPz8gdGhpcy52aWV3Q29udGFpbmVyPy5kYXRhUHJvdmlkZXIoKTtcbiAgICAgICAgbGV0IHNlcnZpY2U6IFNlcnZpY2UgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChjdHhEYXRhUHJvdmlkZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyU2VydmljZSA9IHRoaXMuZGF0YVByb3ZpZGVyRXhlY3V0b3IuZ2V0RGF0YVByb3ZpZGVyU2VydmljZTxJdGVtLCBTZXJ2aWNlPih0aGlzLmluamVjdG9yLCBjdHhEYXRhUHJvdmlkZXIpO1xuICAgICAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXJTZXJ2aWNlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IENvbW1vbnNJbnRlcm5hbEVycm9yKCcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlcnZpY2UgPSBkYXRhUHJvdmlkZXJTZXJ2aWNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN0eCA9IG5ldyBBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+KHRoaXMuaW5qZWN0b3IsIGluc3RhbmNlLCBwYXJhbWV0ZXJzLCAncnVuJywgc2VydmljZSBhcyBTZXJ2aWNlLCBjdHhEYXRhUHJvdmlkZXIsIHRoaXMudmlld0NvbnRhaW5lciA/PyB1bmRlZmluZWQpO1xuICAgICAgICBjdHgucHJldmlvdXNBY3Rpb25JbnN0YW5jZSA9IHByZXZpb3VzQWN0aW9uSW5zdGFuY2U7XG4gICAgICAgIGluc3RhbmNlLm5ld0NvbnRleHQoY3R4KTtcblxuICAgICAgICByZXR1cm4gY3R4O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFjdGl2YXRlcyBhY3Rpb24gKGluIGNhc2Ugb2YgZGlhbG9nLCBkaWFsb2cgd2lsbCBiZSBvcGVuZWQpLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycyBmb3IgYWN0aXZhdGlvbiBvZiBhY3Rpb24gaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIGluc3RhbmNlIE9wdGlvbmFsIGV4aXN0aW5nIGFjdGlvbiBpbnN0YW5jZSAoaWYgbm9uIHByb3ZpZGVkLCBuZXcgd2lsbCBiZSBjcmVhdGVkKS5cbiAgICAgKiBAcGFyYW0gcHJldmlvdXNBY3Rpb25JbnN0YW5jZSBPcHRpb25hbCBwcmV2aW91cyBhY3Rpb24gaW5zdGFuY2UgdG8gbGluayBpbiBuZXh0IGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBydW5Db250ZXh0IE1hcmtzIGlmIGNvbnRleHQgc2hvdWxkIGJlIHJ1bi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEFjdGlvbiBpbnN0YW5jZSAtIGlmIG5vbiBwcm92aWRlZCBpbiBwYXJhbWV0ZXJzLCB0aGUgbmV3bHkgY3JlYXRlZCB3aWxsIGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBhY3RpdmF0ZUFjdGlvbjxJdGVtLCBTZXJ2aWNlID0gdW5kZWZpbmVkPihcbiAgICAgICAgYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxJdGVtPixcbiAgICAgICAgcGFyYW1ldGVyczogQWN0aW9uUGFyYW1ldGVyczxJdGVtPixcbiAgICAgICAgaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPixcbiAgICAgICAgcHJldmlvdXNBY3Rpb25JbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPGFueSwgYW55PixcbiAgICAgICAgcnVuQ29udGV4dCA9IGZhbHNlXG4gICAgKTogQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4ge1xuICAgICAgICBpbnN0YW5jZSA9IHRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPihpbnN0YW5jZSwgYWN0aW9uLCBwYXJhbWV0ZXJzLCBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uU3RhcnQpO1xuICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25TdGFydDtcbiAgICAgICAgaW5zdGFuY2UuYWN0aXZhdGlvblBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzO1xuICAgICAgICAvLyBzdGFydCBhY3RpdmF0aW9uIGluc3RhbmNlXG4gICAgICAgIGlmIChhY3Rpb24udHlwZSA9PT0gQWN0aW9uVHlwZUVudW0uRWRpdG9yKSB7XG4gICAgICAgICAgICBsZXQgZGlhbG9nQ29tcG9uZW50ID0gdGhpcy5kZWZhdWx0RWRpdG9yRGlhbG9nQ29tcG9uZW50O1xuICAgICAgICAgICAgY29uc3QgZGlhbG9nQ2xhc3NOYW1lcyA9IFsnbW5nLWRpYWxvZyddO1xuICAgICAgICAgICAgY29uc3QgZGlhbG9nQ29uZmlnOiBEeW5hbWljRGlhbG9nQ29uZmlnID0ge1xuICAgICAgICAgICAgICAgIGR1cGxpY2F0ZTogdHJ1ZVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgaWYgKGFjdGlvbiBpbnN0YW5jZW9mIEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0KSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ2xhc3NOYW1lcy5wdXNoKGFjdGlvbi5kaWFsb2dDbGFzc05hbWUgPz8gJ21uZy1hY3Rpb24tZWRpdG9yLWRpYWxvZycpO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoYWN0aW9uLmRpYWxvZ1NpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBTdHlsZVNpemVFbnVtLkV4dHJhU21hbGw6XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dDbGFzc05hbWVzLnB1c2goJ21uZy1kaWFsb2cteHMnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFN0eWxlU2l6ZUVudW0uU21hbGw6XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dDbGFzc05hbWVzLnB1c2goJ21uZy1kaWFsb2ctc20nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFN0eWxlU2l6ZUVudW0uTGFyZ2U6XG4gICAgICAgICAgICAgICAgICAgICAgICBkaWFsb2dDbGFzc05hbWVzLnB1c2goJ21uZy1kaWFsb2ctbGcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFN0eWxlU2l6ZUVudW0uRXh0cmFMYXJnZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpYWxvZ0NsYXNzTmFtZXMucHVzaCgnbW5nLWRpYWxvZy14bCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgU3R5bGVTaXplRW51bS5Ob3JtYWw6XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbi5lZGl0b3JDb21wb25lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlhbG9nQ29tcG9uZW50ID0gYWN0aW9uLmVkaXRvckNvbXBvbmVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmRhdGEgPSA8QWN0aW9uRWRpdG9yRGlhbG9nRGF0YTxJdGVtLCBTZXJ2aWNlPj57XG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvcjogYWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNJbnN0YW5jZTogcHJldmlvdXNBY3Rpb25JbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBpbmplY3RvcjogdGhpcy5pbmplY3RvclxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRpYWxvZ0NvbmZpZy5zdHlsZUNsYXNzID0gZGlhbG9nQ2xhc3NOYW1lcy5qb2luKCcgJyk7XG5cbiAgICAgICAgICAgIGlmIChhY3Rpb24uYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlKSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmNsb3NhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29uZmlnLmNsb3NlT25Fc2NhcGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW4oZGlhbG9nQ29tcG9uZW50LCBkaWFsb2dDb25maWcpO1xuICAgICAgICAgICAgZGlhbG9nUmVmLm9uQ2xvc2UucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHRvIGNsb3NlIGRpYWxvZyBvbiAnWCcgY2xpY2sgb3IgZXNjIGJ1dHRvblxuICAgICAgICAgICAgICAgIHRoaXMuZmluaXNoQWN0aW9uKGluc3RhbmNlISk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGluc3RhbmNlLmFjdGl2YXRpb25EaWFsb2dSZWYgPSBkaWFsb2dSZWY7XG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBkaXJlY3RseSBleGVjdXRlIGFjdGlvblxuICAgICAgICAgICAgaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kO1xuICAgICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMucHJlcGFyZUNvbnRleHQ8SXRlbSwgU2VydmljZT4oYWN0aW9uLCBwYXJhbWV0ZXJzLCB1bmRlZmluZWQsIGluc3RhbmNlLCBwcmV2aW91c0FjdGlvbkluc3RhbmNlKTtcblxuICAgICAgICAgICAgaWYgKHJ1bkNvbnRleHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJ1bihjb250ZXh0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQuaW5zdGFuY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUbyBiZSBjYWxsZWQgd2hlbiBhY3Rpb24gZWRpdG9yIGlzIGluaXRpYWxpemVkIHRvIGNvcnJlY3RseSBhY3RpdmF0ZSBhY3Rpb24uXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2UgQWN0aW9uIGluc3RhbmNlIChpZiBhdmFpbGFibGUpLlxuICAgICAqIEBwYXJhbSBjb21wb25lbnRSZWYgT3B0aW9uYWwgYWN0aW9uIGVkaXRvciBjb21wb25lbnQgcmVmZXJlbmNlLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkFjdGlvbkVkaXRvckluaXQ8VCwgUz4oYWN0aW9uOiBBY3Rpb25EZXNjcmlwdG9ySW5zdDxUPiwgaW5zdGFuY2U/OiBBY3Rpb25JbnN0YW5jZTxULCBTPiwgY29tcG9uZW50UmVmPzogSUFjdGlvbkVkaXRvckNvbXBvbmVudCk6IEFjdGlvbkluc3RhbmNlPFQsIFM+IHtcbiAgICAgICAgaWYgKGFjdGlvbi50eXBlICE9PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQWN0aW9uICR7YWN0aW9uLmFjdGlvbk5hbWV9IGlzIG5vdCBvZiB0eXBlIGVkaXRvciwgY2Fubm90IGJlIGFjdGl2YXRlZCB0aHJvdWdoIFwib25BY3Rpb25FZGl0b3JPbkluaXRcImApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnN0YW5jZSAmJiBhY3Rpb24uYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlKSB7XG4gICAgICAgICAgICBjb25zdCB0cmlnZ2VyZWRJbnN0YW5jZSA9IHRoaXMudmlld0NvbnRhaW5lcj8ucm91dGVUcmlnZ2VyZWRBY3Rpb25JbnN0YW5jZSgpO1xuICAgICAgICAgICAgaWYgKHRyaWdnZXJlZEluc3RhbmNlICYmIHRyaWdnZXJlZEluc3RhbmNlLmluc3RhbmNlTG9uZ05hbWUgIT09IGluc3RhbmNlLmluc3RhbmNlTG9uZ05hbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ2dlci5kZWJ1ZyhcbiAgICAgICAgICAgICAgICAgICAgYFdBUk5JTkc6IEZvdW5kIHRyaWdnZXJlZCBwYXJhbWV0ZXJzIHZpZXcgY29udGFpbmVyIGluc3RhbmNlICR7dHJpZ2dlcmVkSW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX0gYW5kIGl0IGRvZXMgbm90IG1hdGNoIGluc3RhbmNlICR7aW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX0gcmV0cmlldmVkIG9uIGVkaXRvciBpbml0LmBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlKGluc3RhbmNlLCBhY3Rpb24sIHVuZGVmaW5lZCwgQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uQWN0aXZhdGlvblN0YXJ0KTtcbiAgICAgICAgaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5BY3RpdmF0aW9uRW5kO1xuICAgICAgICBpbnN0YW5jZS5hY3RpdmF0aW9uRWRpdG9yQ29tcG9uZW50UmVmID0gY29tcG9uZW50UmVmO1xuXG4gICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUbyBiZSBjYWxsZWQgd2hlbiBhY3Rpb24gZWRpdG9yIGNtcCBpcyBiZWluZyBkZXN0cm95ZWQgdG8gY29ycmVjdGx5IGZpbmlzaCBhY3Rpb24uXG4gICAgICogQHBhcmFtIGluc3RhbmNlIEFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25BY3Rpb25EZXN0cm95PFQsIFM+KGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8VCwgUz4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciAhPT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uQ2xpY2spIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbmlzaEFjdGlvbihpbnN0YW5jZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG8gYmUgY2FsbGVkIHdoZW4gYWN0aW9uIGVkaXRvciBjbXAgaXMgYmVpbmcgZGVzdHJveWVkIHRvIGNvcnJlY3RseSBmaW5pc2ggYWN0aW9uLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIG9uQWN0aW9uRWRpdG9yRGVzdHJveTxULCBTPihpbnN0YW5jZT86IEFjdGlvbkluc3RhbmNlPFQsIFM+KTogdm9pZCB7XG4gICAgICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpbnN0YW5jZSA9IHRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZShpbnN0YW5jZSk7XG4gICAgICAgIGlmIChpbnN0YW5jZS5hY3Rpb24udHlwZSAhPT0gQWN0aW9uVHlwZUVudW0uRWRpdG9yKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFjdGlvbiBpbnN0YW5jZSAke2luc3RhbmNlLmluc3RhbmNlTG9uZ05hbWV9IGlzIG5vdCBvZiB0eXBlIGVkaXRvciwgY2Fubm90IGJlIGRlYWN0aXZhdGVkIHRocm91Z2ggXCJvbkFjdGlvbkVkaXRvck9uRGVzdHJveVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciAhPT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoQWN0aW9uKGluc3RhbmNlLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvIGJlIGNhbGxlZCB3aGVuIGFjdGlvbiByb3V0ZSBjbXAgaXMgYmVpbmcgZGVzdHJveWVkIHRvIGNvcnJlY3RseSBmaW5pc2ggYWN0aW9uLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIG9uQWN0aW9uUm91dGVEZXN0cm95PFQsIFM+KGluc3RhbmNlPzogQWN0aW9uSW5zdGFuY2U8VCwgUz4pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi5hY3RpdmF0aW9uVHJpZ2dlciAhPT0gQWN0aW9uQWN0aXZhdGlvblRyaWdnZXJFbnVtLk9uUm91dGUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQWN0aW9uIGluc3RhbmNlICR7aW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX0gaXMgbm90IHRyaWdnZXJlZCBvbiByb3V0ZSwgY2Fubm90IGJlIGRlYWN0aXZhdGVkIHRocm91Z2ggXCJvbkFjdGlvblJvdXRlT25EZXN0cm95XCJgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZpbmlzaEFjdGlvbihpbnN0YW5jZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVhY3RpdmF0ZXMgYWN0aW9uIGJ5IGNob29zaW5nIGZpbmFsIHN0YXRlLCBjbG9zaW5nIGRpYWxvZyBhbmQgY29tcGxldGluZyBhbGwgc3ViamVjdHMgaW4gaW5zdGFuY2UgYW5kIGNvbnRleHRzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluc3RhbmNlIEFjdGlvbiBpbnN0YW5jZS5cbiAgICAgKiBAcGFyYW0gb25EZXN0cm95IE1hcmtzIGlmIGZpbmlzaCBpcyBjYWxsZWQgb24gY29tcG9uZW50IGRlc3Ryb3kgbGlmZWN5Y2xlIGhvb2suXG4gICAgICovXG4gICAgcHVibGljIGZpbmlzaEFjdGlvbjxJdGVtLCBTZXJ2aWNlID0gdW5kZWZpbmVkPihpbnN0YW5jZTogQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4sIG9uRGVzdHJveSA9IGZhbHNlKSB7XG4gICAgICAgIGluc3RhbmNlID0gdGhpcy5nZXRPckNyZWF0ZUluc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlID49IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NGaW5hbCkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoYEFjdGlvbkluc3RhbmNlICR7aW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX0gYWxyZWFkeSBmaW5pc2hlZGApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZpbmFsU3RhdGU6IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtO1xuICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLnJlc3VsdCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIGZpbmFsU3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzRmluYWw7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLmVycm9yICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgZmluYWxTdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaEVycm9yRmluYWw7XG4gICAgICAgIH0gZWxzZSBpZiAob25EZXN0cm95KSB7XG4gICAgICAgICAgICBmaW5hbFN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoQ29tcG9uZW50RGVzdHJveUZpbmFsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmluYWxTdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaERpc21pc3NlZEZpbmFsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluc3RhbmNlLmFjdGlvbi50eXBlID09PSBBY3Rpb25UeXBlRW51bS5FZGl0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGhhc0RpYWxvZyA9IHR5cGVvZiBpbnN0YW5jZS5hY3RpdmF0aW9uRGlhbG9nUmVmICE9PSAndW5kZWZpbmVkJztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VibWl0RW5hYmxlZCA9IChpbnN0YW5jZS5hY3Rpb24gYXMgQWN0aW9uRWRpdG9yRGVzY3JpcHRvckluc3Q8SXRlbT4pLnJlc3VibWl0RW5hYmxlZDtcblxuICAgICAgICAgICAgaWYgKGZpbmFsU3RhdGUgPT09IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NGaW5hbCkge1xuICAgICAgICAgICAgICAgIGlmICgoaGFzRGlhbG9nICYmIHJlc3VibWl0RW5hYmxlZCA9PT0gdHJ1ZSkgfHwgKCFoYXNEaWFsb2cgJiYgcmVzdWJtaXRFbmFibGVkICE9PSBmYWxzZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZmluYWxTdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NSZWFjdGl2YXRlRmluYWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaGFzRGlhbG9nICYmIGZpbmFsU3RhdGUgIT09IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZpbmlzaFN1Y2Nlc3NSZWFjdGl2YXRlRmluYWwpIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBzdGF0ZSBpcyBmaW5pc2ggYW5kIG5vdCBjYWxsZWQgZnJvbSBkaWFsb2cgbGlzdGVuZXIsIGNsb3NlIHRoZSBkaWFsb2cgZmlyc3Qgd2hpY2ggd2lsbCByZXRyaWdnZXIgdGhpcyBmdW5jdGlvbiwgdGhlbiBmaW5pc2ggaXRcbiAgICAgICAgICAgICAgICBpbnN0YW5jZS5hY3RpdmF0aW9uRGlhbG9nUmVmIS5jbG9zZShpbnN0YW5jZS5yZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdW5zZXQgaW5zdGFuY2UgaW4gdmlldyBjb250YWluZXJcbiAgICAgICAgaWYgKHRoaXMudmlld0NvbnRhaW5lcikge1xuICAgICAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyLnJvdXRlVHJpZ2dlcmVkQWN0aW9uSW5zdGFuY2Uuc2V0KHVuZGVmaW5lZCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzZXQgZmluYWwgc3RhdGUgb24gaW5zdGFuY2VcbiAgICAgICAgaW5zdGFuY2Uuc3RhdGUgPSBmaW5hbFN0YXRlO1xuXG4gICAgICAgIGlmIChmaW5hbFN0YXRlID09PSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzUmVhY3RpdmF0ZUZpbmFsKSB7XG4gICAgICAgICAgICAvLyBwcmVwYXJlIHJlYWN0aXZhdGlvbiBpbnN0YW5jZVxuICAgICAgICAgICAgY29uc3QgbmV3SW5zdGFuY2VTdGF0dXMgPSAoaW5zdGFuY2UuYWN0aW9uIGFzIEFjdGlvbkVkaXRvckRlc2NyaXB0b3JJbnN0PEl0ZW0+KS5yZXN1Ym1pdFJlZmV0Y2hcbiAgICAgICAgICAgICAgICA/IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkFjdGl2YXRpb25FbmRcbiAgICAgICAgICAgICAgICA6IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLkZldGNoRW5kO1xuICAgICAgICAgICAgLy8gbXVzdCBza2lwIGluaXRpYWxpemF0aW9uIGZyb20gdmlldyBjb250YWluZXIsIGJlY2F1c2UgaXQgd291bGQgb25seSBnZXQgb2xkIGluc3RhbmNlLlxuICAgICAgICAgICAgLy8gd2UgbmVlZCBuZXcgaW5zdGFuY2UgYmVmb3JlIHdlIGNhbiBzZXQgbmV3IG9uZSBvbiB0aGUgdmlldyBjb250YWluZXIuXG4gICAgICAgICAgICBjb25zdCBuZXdJbnN0YW5jZSA9IHRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPih1bmRlZmluZWQsIGluc3RhbmNlLmFjdGlvbiwgdW5kZWZpbmVkLCBuZXdJbnN0YW5jZVN0YXR1cywgdHJ1ZSk7XG4gICAgICAgICAgICBuZXdJbnN0YW5jZS5yZWFjdGl2YXRpb25QcmV2aW91c0luc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgICAgICAvLyBjb3B5IHNvbWUgYWRkaXRpb25hbCBzZXR0aW5nc1xuICAgICAgICAgICAgbmV3SW5zdGFuY2UuYWN0aXZhdGlvbkRpYWxvZ1JlZiA9IGluc3RhbmNlLmFjdGl2YXRpb25EaWFsb2dSZWY7XG4gICAgICAgICAgICBuZXdJbnN0YW5jZS50cmlnZ2VyUGFyYW1ldGVycyA9IGluc3RhbmNlLnRyaWdnZXJQYXJhbWV0ZXJzO1xuICAgICAgICAgICAgbmV3SW5zdGFuY2UuYWN0aXZhdGlvblBhcmFtZXRlcnMgPSBpbnN0YW5jZS5hY3RpdmF0aW9uUGFyYW1ldGVycztcblxuICAgICAgICAgICAgaWYgKHRoaXMudmlld0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lci5yb3V0ZVRyaWdnZXJlZEFjdGlvbkluc3RhbmNlLnNldChuZXdJbnN0YW5jZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGluc3RhbmNlLnJlYWN0aXZhdGlvbkluc3RhbmNlID0gbmV3SW5zdGFuY2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBmaW5pc2ggcmVsYXRlZCBhY3Rpb25zXG4gICAgICAgIGlmIChpbnN0YW5jZS5uZXh0QWN0aW9uSW5zdGFuY2UgJiYgaW5zdGFuY2UubmV4dEFjdGlvbkluc3RhbmNlIGluc3RhbmNlb2YgQWN0aW9uSW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLmRlYnVnKGBGaW5pc2hpbmcgaW5zdGFuY2UgJHtpbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfSByZWxhdGVkIG5leHQgYWN0aW9uIGluc3RhbmNlOiAke2luc3RhbmNlLm5leHRBY3Rpb25JbnN0YW5jZS5pbnN0YW5jZUxvbmdOYW1lfWApO1xuICAgICAgICAgICAgdGhpcy5maW5pc2hBY3Rpb24oaW5zdGFuY2UubmV4dEFjdGlvbkluc3RhbmNlLCBvbkRlc3Ryb3kpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnN0YW5jZS5lcnJvckFjdGlvbkluc3RhbmNlICYmIGluc3RhbmNlLmVycm9yQWN0aW9uSW5zdGFuY2UgaW5zdGFuY2VvZiBBY3Rpb25JbnN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYEZpbmlzaGluZyBpbnN0YW5jZSAke2luc3RhbmNlLmluc3RhbmNlTG9uZ05hbWV9IHJlbGF0ZWQgZXJyb3IgYWN0aW9uIGluc3RhbmNlOiAke2luc3RhbmNlLmVycm9yQWN0aW9uSW5zdGFuY2UuaW5zdGFuY2VMb25nTmFtZX1gKTtcbiAgICAgICAgICAgIHRoaXMuZmluaXNoQWN0aW9uKGluc3RhbmNlLmVycm9yQWN0aW9uSW5zdGFuY2UsIG9uRGVzdHJveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmlnZ2VycyBhY3Rpb24gd2l0aCBwYXJhbWV0ZXJzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycyBmb3IgYWN0aW9uIGV4ZWN1dGlvbiB0byBjb25zdHJ1Y3QgbmV3IHJvdXRlLlxuICAgICAqIEBwYXJhbSBydW5Db250ZXh0IE1hcmtzIGlmIGNvbnRleHQgc2hvdWxkIGJlIHJ1bi5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEFjdGlvbiBpbnN0YW5jZSAtIGlmIG5vbiBwcm92aWRlZCBpbiBwYXJhbWV0ZXJzLCB0aGUgbmV3bHkgY3JlYXRlZCB3aWxsIGJlIHJldHVybmVkLlxuICAgICAqL1xuICAgIHB1YmxpYyB0cmlnZ2VyQWN0aW9uPEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KGFjdGlvbjogQWN0aW9uRGVzY3JpcHRvckluc3Q8SXRlbT4sIHBhcmFtZXRlcnM6IEFjdGlvblBhcmFtZXRlcnM8SXRlbT4sIHJ1bkNvbnRleHQgPSBmYWxzZSk6IEFjdGlvbkluc3RhbmNlPEl0ZW0sIFNlcnZpY2U+IHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2U8SXRlbSwgU2VydmljZT4odW5kZWZpbmVkLCBhY3Rpb24sIHBhcmFtZXRlcnMpO1xuICAgICAgICBpbnN0YW5jZS50cmlnZ2VyUGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7XG4gICAgICAgIGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uVHJpZ2dlclN0YXJ0O1xuICAgICAgICBpZiAoYWN0aW9uLmFjdGl2YXRpb25UcmlnZ2VyID09PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSkge1xuICAgICAgICAgICAgY29uc3QgYmFzZVVybCA9IHRoaXMucm91dGVyLnVybC5zcGxpdCgnPycpWzBdO1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVXJsOiBVcmxUcmVlID0gdGhpcy5yb3V0ZXIucGFyc2VVcmwodGhpcy5yb3V0ZXIudXJsKTtcbiAgICAgICAgICAgIGxldCBhY3Rpb25VcmwgPSBhY3Rpb24ucm91dGVVcmwgPz8gJyc7XG4gICAgICAgICAgICBpZiAoYWN0aW9uVXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvblVybCA9IGFjdGlvblVybC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGFjdGlvblVybFNlZ21lbnRzID0gdGhpcy5wYXJhbWV0cml6ZS50cmFuc2Zvcm0oYWN0aW9uVXJsLCBwYXJhbWV0ZXJzLml0ZW1JZCwgcGFyYW1ldGVycy5pdGVtLCBwYXJhbWV0ZXJzLmFjdGlvbkRhdGEpLnNwbGl0KCcvJyk7XG5cbiAgICAgICAgICAgIC8vIHNldCBpbnN0YW5jZSBpbiB2aWV3IGNvbnRhaW5lclxuICAgICAgICAgICAgaWYgKHRoaXMudmlld0NvbnRhaW5lcikge1xuICAgICAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lci5yb3V0ZVRyaWdnZXJlZEFjdGlvbkluc3RhbmNlLnNldChpbnN0YW5jZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZyb20odGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Jhc2VVcmwsIC4uLmFjdGlvblVybFNlZ21lbnRzXSwge3JlbGF0aXZlVG86IHBhcmFtZXRlcnMucm91dGUsIHF1ZXJ5UGFyYW1zOiBwYXJzZWRVcmwucXVlcnlQYXJhbXN9KSlcbiAgICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gKGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uVHJpZ2dlckVuZCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5zdGF0ZSA9IEFjdGlvbkluc3RhbmNlU3RhdGVFbnVtLlRyaWdnZXJFbmQ7XG4gICAgICAgICAgICB0aGlzLmFjdGl2YXRlQWN0aW9uKGFjdGlvbiwgcGFyYW1ldGVycywgaW5zdGFuY2UpO1xuXG4gICAgICAgICAgICBpZiAocnVuQ29udGV4dCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICAgICAgICAgICAgICAgIGlmIChjb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucnVuKGNvbnRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVhY3RpdmF0ZXMgb24gcm91dGUgdHJpZ2dlcmVkIGFjdGlvbiBieSB0cnlpbmcgdG8gcmVyb3V0ZSBiYWNrIHRvIGxvY2F0aW9uIHdoZXJlIGFjdGlvbiB3YXMgdHJpZ2dlcmVkLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UuXG4gICAgICovXG4gICAgcHVibGljIGZpbmlzaEFjdGlvblJvdXRlVW50cmlnZ2VyPEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KGluc3RhbmNlOiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPikge1xuICAgICAgICBpZiAoaW5zdGFuY2UuYWN0aW9uLmFjdGl2YXRpb25UcmlnZ2VyICE9PSBBY3Rpb25BY3RpdmF0aW9uVHJpZ2dlckVudW0uT25Sb3V0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5zdGFuY2UgPSB0aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2U8SXRlbSwgU2VydmljZT4oaW5zdGFuY2UpO1xuXG4gICAgICAgIGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoUm91dGVVbnRyaWdnZXJTdGFydDtcblxuICAgICAgICBsZXQgdXJsID0gdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXRDdXJyZW50TG9jYXRpb25Gcm9tSGlzdG9yeSgpID8/IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0Q3VycmVudExvY2F0aW9uRnJvbVVybCgpO1xuICAgICAgICBpZiAoIXVybCkge1xuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5iYWNrKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAodXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICAgICAgICAgIHVybCA9IHVybC5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNwbGl0VXJsUXVlcnlQYXJhbSA9IHVybC5zcGxpdCgnPycpO1xuICAgICAgICAgICAgY29uc3QgdXJsUGF0aFNlZ21lbnRzID0gc3BsaXRVcmxRdWVyeVBhcmFtWzBdLnNwbGl0KCcjJylbMF0uc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW0gPSBzcGxpdFVybFF1ZXJ5UGFyYW1bMV0/LnNwbGl0KCcjJylbMF07XG5cbiAgICAgICAgICAgIGxldCBhY3Rpb25VcmwgPSBpbnN0YW5jZS5hY3Rpb24/LnJvdXRlVXJsID8/ICcnO1xuICAgICAgICAgICAgaWYgKGFjdGlvblVybC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25VcmwgPSBhY3Rpb25Vcmwuc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWN0aW9uVXJsU2VnbWVudHMgPSBhY3Rpb25Vcmwuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIGxldCByZWRpcmVjdFVybCA9ICcvJyArIHVybFBhdGhTZWdtZW50cy5zbGljZSgwLCB1cmxQYXRoU2VnbWVudHMubGVuZ3RoIC0gYWN0aW9uVXJsU2VnbWVudHMubGVuZ3RoKS5qb2luKCcvJyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHF1ZXJ5UGFyYW0gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVcmwgPSBgJHtyZWRpcmVjdFVybH0/JHtxdWVyeVBhcmFtfWA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIE5vIFVSTCByZXBsYWNlcywgcHJvYmFibHkgb2ssIHRvIGFsbG93IGdvaW5nIGJhY2tcbiAgICAgICAgICAgIGZyb20odGhpcy5yb3V0ZXIubmF2aWdhdGVCeVVybChyZWRpcmVjdFVybCkpXG4gICAgICAgICAgICAgICAgLnBpcGUoZmlyc3QoKSwgdGltZW91dCgxMDAwKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogKCkgPT4gKGluc3RhbmNlLnN0YXRlID0gQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0uRmluaXNoUm91dGVVbnRyaWdnZXJFbmRGaW5hbCksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiAoaW5zdGFuY2Uuc3RhdGUgPSBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hSb3V0ZVVudHJpZ2dlclRpbWVvdXRGaW5hbClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybSBlcnJvciBvZiBhbnkgdHlwZSB0byBlcnJvciBieSB1c2luZyBlcnJvciBtYXBwZXIgdGhhdCBjb3VsZCBiZSBwcm92aWRlZCBieSBmaW5hbCBwcm9qZWN0LlxuICAgICAqIEBwYXJhbSBlcnJvciBlcnJvciBvZiBhbnkgdHlwZS5cbiAgICAgKiBAcGFyYW0gY29udGV4dCBBY3Rpb24gY29udGV4dC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIG1hcHBlZCBJQ29tbW9uc0Vycm9yLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b0FjdGlvbkVycm9yKGVycm9yPzogYW55LCBjb250ZXh0PzogQWN0aW9uQ29udGV4dDxhbnksIGFueT4pOiBJQ29tbW9uc0Vycm9yIHtcbiAgICAgICAgbGV0IGNvbW1vbnNFcnJvcjogSUNvbW1vbnNFcnJvcjtcbiAgICAgICAgaWYgKGNvbnRleHQpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnM6IENvbW1vbnNBY3Rpb25FcnJvck9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgY2F1c2U6IGVycm9yLFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiB0aGlzLnJvdXRlci51cmxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuaHR0cEVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbW1vbnNFcnJvciA9IG5ldyBDb21tb25zQWN0aW9uRXJyb3IoZXJyb3I/Lm1lc3NhZ2UgPz8gJ1Vua25vd24gZXJyb3InLCBjb250ZXh0LmNvbnRleHRMb25nTmFtZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwRXJyb3JSZXNwb25zZSkge1xuICAgICAgICAgICAgLy8gc2hvdWxkIG5vdCByZWFsbHkgaGFwcGVuIChzaG91bGQgYWx3YXlzIGJlIHdyYXBwZWQgaW4gTW5nQWN0aW9uRXJyb3IpLCBqdXN0IGluIGNhc2VcbiAgICAgICAgICAgIGNvbW1vbnNFcnJvciA9IG5ldyBDb21tb25zSHR0cEVycm9yKGBIdHRwIEVycm9yIG9jY3VycmVkIGluIGFjdGlvbmAsIGVycm9yLCB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb246IHRoaXMucm91dGVyLnVybFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBub3QgZnJvbSBhY3Rpb24sIHNvIHVua25vd24gc291cmNlIG9mIGVycm9yXG4gICAgICAgICAgICBjb21tb25zRXJyb3IgPSBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoZXJyb3I/Lm1lc3NhZ2UgPz8gJ1Vua25vd24gZXJyb3InLCB7XG4gICAgICAgICAgICAgICAgbmFtZTogZXJyb3I/Lm5hbWUgPz8gJ1Vua25vd25FcnJvcicsXG4gICAgICAgICAgICAgICAgbG9jYXRpb246IHRoaXMucm91dGVyLnVybCxcbiAgICAgICAgICAgICAgICBjYXVzZTogZXJyb3JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8ganVzdCB0cmFjZSBpdCwgYWxsb3cgdXNlciB0byBzZXQgaWYgdGhpcyBpcyBlcnJvciBvciBub3RcbiAgICAgICAgdGhpcy5sb2dnZXIudHJhY2UoY29tbW9uc0Vycm9yKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lcnJvck1hcHBlci50b0NvbW1vbnNFcnJvcihlcnJvciwgY29tbW9uc0Vycm9yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIG9yIGdldHMgZXhpc3RpbmcgYWN0aW9uIGluc3RhbmNlLlxuICAgICAqIEBwYXJhbSBpbnN0YW5jZSBBY3Rpb24gaW5zdGFuY2UuXG4gICAgICogQHBhcmFtIGFjdGlvbiBBY3Rpb24gZGVzY3JpcHRvci5cbiAgICAgKiBAcGFyYW0gcGFyYW1ldGVycyBBY3Rpb24gcGFyYW1ldGVycy5cbiAgICAgKiBAcGFyYW0gaW5zdGFuY2VJbml0aWFsU3RhdHVzIEFjdGlvbiBpbnN0YW5jZSBpbml0aWFsIHN0YXR1cy5cbiAgICAgKiBAcGFyYW0gc2tpcEluaXRpYWxpemF0aW9uRnJvbVZpZXdDb250YWluZXIgSWYgaW5pdGlhbGl6YXRpb24gb2YgaW5zdGFuY2UgZnJvbSB2aWV3IGNvbnRhaW5lciBzaG91bGQgYmUgc2tpcHBlZC5cbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIHByb3RlY3RlZCBnZXRPckNyZWF0ZUluc3RhbmNlPEl0ZW0sIFNlcnZpY2UgPSB1bmRlZmluZWQ+KFxuICAgICAgICBpbnN0YW5jZTogQWN0aW9uSW5zdGFuY2U8SXRlbSwgU2VydmljZT4gfCB1bmRlZmluZWQsXG4gICAgICAgIGFjdGlvbj86IEFjdGlvbkRlc2NyaXB0b3JJbnN0PEl0ZW0sIFNlcnZpY2U+LFxuICAgICAgICBwYXJhbWV0ZXJzPzogQWN0aW9uUGFyYW1ldGVyczxJdGVtPixcbiAgICAgICAgaW5zdGFuY2VJbml0aWFsU3RhdHVzPzogQWN0aW9uSW5zdGFuY2VTdGF0ZUVudW0sXG4gICAgICAgIHNraXBJbml0aWFsaXphdGlvbkZyb21WaWV3Q29udGFpbmVyID0gZmFsc2VcbiAgICApOiBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPiB7XG4gICAgICAgIGlmICghc2tpcEluaXRpYWxpemF0aW9uRnJvbVZpZXdDb250YWluZXIgJiYgIWluc3RhbmNlICYmIGFjdGlvbj8uYWN0aXZhdGlvblRyaWdnZXIgPT09IEFjdGlvbkFjdGl2YXRpb25UcmlnZ2VyRW51bS5PblJvdXRlICYmIHBhcmFtZXRlcnMpIHtcbiAgICAgICAgICAgIGluc3RhbmNlID0gdGhpcy52aWV3Q29udGFpbmVyPy5yb3V0ZVRyaWdnZXJlZEFjdGlvbkluc3RhbmNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgICAgICAgaWYgKCFhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29tbW9uc0ludGVybmFsRXJyb3IoJ0FjdGlvbiBkZXNjcmlwdG9yIGlzIG5vdCBwcm92aWRlZCwgaW5zdGFuY2UgY2Fubm90IGJlIGNyZWF0ZWQuJywge25hbWU6ICdBY3Rpb25FeGVjdXRvclNlcnZpY2VFcnJvcid9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNyZWF0ZSBuZXcgaW5zdGFuY2UgaWYgbm9uIHByb3ZpZGVkXG4gICAgICAgICAgICBpbnN0YW5jZSA9IG5ldyBBY3Rpb25JbnN0YW5jZTxJdGVtLCBTZXJ2aWNlPihhY3Rpb24sIGluc3RhbmNlSW5pdGlhbFN0YXR1cyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb25maWc/LmFjdGlvbnM/LmRlYnVnSW5zdGFuY2VzICYmICF0aGlzLmluc3RhbmNlcy5zb21lKGkgPT4gaS5pbnN0YW5jZUxvbmdOYW1lID09PSBpbnN0YW5jZSEuaW5zdGFuY2VMb25nTmFtZSkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmluc3RhbmNlcy5sZW5ndGggPj0gdGhpcy5pbnN0YW5jZXNCdWZmZXJNYXgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0SW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlcy5zaGlmdCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGxhc3RJbnN0YW5jZSEuc3RhdGUgPCBBY3Rpb25JbnN0YW5jZVN0YXRlRW51bS5GaW5pc2hTdWNjZXNzRmluYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2dnZXIuZGVidWcoYEVSUk9SOiBOb3QgYWxsIGluc3RhbmNlcyBhcmUgZmluaXNoZWQhIEZpbmlzaGluZyBpbnN0YW5jZSAke2luc3RhbmNlLmluc3RhbmNlTG9uZ05hbWV9IHdpdGggZGlzbWlzc2FsLmApO1xuICAgICAgICAgICAgICAgICAgICBsYXN0SW5zdGFuY2UhLmZvcmNlRmluaXNoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlcy5wdXNoKGluc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -10,10 +10,10 @@ export class ComponentActionExecutorService extends ActionExecutorService {
|
|
|
10
10
|
get instances() {
|
|
11
11
|
return this.rootActionExecutorService.instances;
|
|
12
12
|
}
|
|
13
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.
|
|
14
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.
|
|
13
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ComponentActionExecutorService, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
14
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ComponentActionExecutorService }); }
|
|
15
15
|
}
|
|
16
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.
|
|
16
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: ComponentActionExecutorService, decorators: [{
|
|
17
17
|
type: Injectable
|
|
18
18
|
}] });
|
|
19
19
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWFjdGlvbi1leGVjdXRvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9hY3Rpb24vc2VydmljZXMvY29tcG9uZW50LWFjdGlvbi1leGVjdXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBR2pELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQ2hFLE9BQU8sRUFBQyx5QkFBeUIsRUFBQyxNQUFNLGdDQUFnQyxDQUFDOztBQUd6RSxNQUFNLE9BQU8sOEJBQStCLFNBQVEscUJBQXFCO0lBRHpFOztRQUVxQiw4QkFBeUIsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztLQUtsRjtJQUhHLElBQVcsU0FBUztRQUNoQixPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLENBQUM7SUFDcEQsQ0FBQzs4R0FMUSw4QkFBOEI7a0hBQTlCLDhCQUE4Qjs7MkZBQTlCLDhCQUE4QjtrQkFEMUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0YWJsZSwgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtBY3Rpb25JbnN0YW5jZX0gZnJvbSAnLi4vbW9kZWxzL2V4ZWN1dGlvbi9hY3Rpb24taW5zdGFuY2UubW9kZWwnO1xuaW1wb3J0IHtBY3Rpb25FeGVjdXRvclNlcnZpY2V9IGZyb20gJy4vYWN0aW9uLWV4ZWN1dG9yLnNlcnZpY2UnO1xuaW1wb3J0IHtSb290QWN0aW9uRXhlY3V0b3JTZXJ2aWNlfSBmcm9tICcuL3Jvb3QtYWN0aW9uLWV4ZWN1dG9yLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50QWN0aW9uRXhlY3V0b3JTZXJ2aWNlIGV4dGVuZHMgQWN0aW9uRXhlY3V0b3JTZXJ2aWNlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvb3RBY3Rpb25FeGVjdXRvclNlcnZpY2UgPSBpbmplY3QoUm9vdEFjdGlvbkV4ZWN1dG9yU2VydmljZSk7XG5cbiAgICBwdWJsaWMgZ2V0IGluc3RhbmNlcygpOiBBY3Rpb25JbnN0YW5jZTxhbnksIGFueT5bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3RBY3Rpb25FeGVjdXRvclNlcnZpY2UuaW5zdGFuY2VzO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -17,10 +17,10 @@ export class DefaultDataProviderExecutor extends DataProviderExecutor {
|
|
|
17
17
|
runDelete(ctx, fallback) {
|
|
18
18
|
return fallback ? runFnFromDataProviderOrFallback(ctx, runDeleteFromDataProvider, fallback) : runDeleteFromDataProvider(ctx);
|
|
19
19
|
}
|
|
20
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.
|
|
21
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.
|
|
20
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: DefaultDataProviderExecutor, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
21
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: DefaultDataProviderExecutor }); }
|
|
22
22
|
}
|
|
23
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.
|
|
23
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.4", ngImport: i0, type: DefaultDataProviderExecutor, decorators: [{
|
|
24
24
|
type: Injectable
|
|
25
25
|
}] });
|
|
26
26
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1wcm92aWRlci1leGVjdXRvci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9hY3Rpb24vc2VydmljZXMvZGF0YS1wcm92aWRlci1leGVjdXRvci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFLekMsT0FBTyxFQUNILG9CQUFvQixFQUVwQix5QkFBeUIsRUFDekIseUJBQXlCLEVBQ3pCLHdCQUF3QixFQUN4QiwrQkFBK0IsRUFDL0IseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUM1QixNQUFNLHNDQUFzQyxDQUFDOztBQUc5QyxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsb0JBQW9CO0lBSWpELFNBQVMsQ0FBZ0IsR0FBa0MsRUFBRSxRQUEyQztRQUNwSCxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsK0JBQStCLENBQUMsR0FBRyxFQUFFLHlCQUF5QixFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqSSxDQUFDO0lBS2UsUUFBUSxDQUFnQixHQUFrQyxFQUFFLFFBQXFDO1FBQzdHLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQyxHQUFHLEVBQUUsd0JBQXdCLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9ILENBQUM7SUFLZSxTQUFTLENBQWdCLEdBQWtDLEVBQUUsUUFBcUM7UUFDOUcsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLCtCQUErQixDQUFDLEdBQUcsRUFBRSx5QkFBeUIsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMseUJBQXlCLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDakksQ0FBQztJQUtlLFNBQVMsQ0FBZ0IsR0FBa0MsRUFBRSxRQUFxQztRQUM5RyxPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsK0JBQStCLENBQUMsR0FBRyxFQUFFLHlCQUF5QixFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqSSxDQUFDO0lBS2UsU0FBUyxDQUFnQixHQUFrQyxFQUFFLFFBQXFDO1FBQzlHLE9BQU8sUUFBUSxDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQyxHQUFHLEVBQUUseUJBQXlCLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLHlCQUF5QixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pJLENBQUM7OEdBbENRLDJCQUEyQjtrSEFBM0IsMkJBQTJCOzsyRkFBM0IsMkJBQTJCO2tCQUR2QyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtEYXRhTGlzdFJlc3VsdCwgTnVsbGFibGV9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge1xuICAgIERhdGFQcm92aWRlckV4ZWN1dG9yLFxuICAgIElBY3Rpb25Db250ZXh0LFxuICAgIHJ1bkNyZWF0ZUZyb21EYXRhUHJvdmlkZXIsXG4gICAgcnVuRGVsZXRlRnJvbURhdGFQcm92aWRlcixcbiAgICBydW5GZXRjaEZyb21EYXRhUHJvdmlkZXIsXG4gICAgcnVuRm5Gcm9tRGF0YVByb3ZpZGVyT3JGYWxsYmFjayxcbiAgICBydW5HZXRBbGxGcm9tRGF0YVByb3ZpZGVyLFxuICAgIHJ1blVwZGF0ZUZyb21EYXRhUHJvdmlkZXJcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy90YWJsZXZpZXcvYXBpJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERlZmF1bHREYXRhUHJvdmlkZXJFeGVjdXRvciBleHRlbmRzIERhdGFQcm92aWRlckV4ZWN1dG9yIHtcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcnVuR2V0QWxsPEl0ZW0sIFNlcnZpY2U+KGN0eDogSUFjdGlvbkNvbnRleHQ8SXRlbSwgU2VydmljZT4pOiBPYnNlcnZhYmxlPERhdGFMaXN0UmVzdWx0PEl0ZW0+PiB8IG51bGw7XG4gICAgcHVibGljIG92ZXJyaWRlIHJ1bkdldEFsbDxJdGVtLCBTZXJ2aWNlPihjdHg6IElBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+LCBmYWxsYmFjazogT2JzZXJ2YWJsZTxEYXRhTGlzdFJlc3VsdDxJdGVtPj4pOiBPYnNlcnZhYmxlPERhdGFMaXN0UmVzdWx0PEl0ZW0+PjtcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcnVuR2V0QWxsPEl0ZW0sIFNlcnZpY2U+KGN0eDogSUFjdGlvbkNvbnRleHQ8SXRlbSwgU2VydmljZT4sIGZhbGxiYWNrOiB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPERhdGFMaXN0UmVzdWx0PEl0ZW0+PiB8IG51bGw7XG4gICAgcHVibGljIG92ZXJyaWRlIHJ1bkdldEFsbDxJdGVtLCBTZXJ2aWNlPihjdHg6IElBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+LCBmYWxsYmFjaz86IE9ic2VydmFibGU8RGF0YUxpc3RSZXN1bHQ8SXRlbT4+KTogT2JzZXJ2YWJsZTxEYXRhTGlzdFJlc3VsdDxJdGVtPj4gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIGZhbGxiYWNrID8gcnVuRm5Gcm9tRGF0YVByb3ZpZGVyT3JGYWxsYmFjayhjdHgsIHJ1bkdldEFsbEZyb21EYXRhUHJvdmlkZXIsIGZhbGxiYWNrKSA6IHJ1bkdldEFsbEZyb21EYXRhUHJvdmlkZXIoY3R4KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgcnVuRmV0Y2g8SXRlbSwgU2VydmljZT4oY3R4OiBJQWN0aW9uQ29udGV4dDxJdGVtLCBTZXJ2aWNlPik6IE9ic2VydmFibGU8SXRlbT4gfCBudWxsO1xuICAgIHB1YmxpYyBvdmVycmlkZSBydW5GZXRjaDxJdGVtLCBTZXJ2aWNlPihjdHg6IElBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+LCBmYWxsYmFjazogT2JzZXJ2YWJsZTxOdWxsYWJsZTxJdGVtPj4pOiBPYnNlcnZhYmxlPE51bGxhYmxlPEl0ZW0+PjtcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcnVuRmV0Y2g8SXRlbSwgU2VydmljZT4oY3R4OiBJQWN0aW9uQ29udGV4dDxJdGVtLCBTZXJ2aWNlPiwgZmFsbGJhY2s6IHVuZGVmaW5lZCk6IE9ic2VydmFibGU8TnVsbGFibGU8SXRlbT4+IHwgbnVsbDtcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcnVuRmV0Y2g8SXRlbSwgU2VydmljZT4oY3R4OiBJQWN0aW9uQ29udGV4dDxJdGVtLCBTZXJ2aWNlPiwgZmFsbGJhY2s/OiBPYnNlcnZhYmxlPE51bGxhYmxlPEl0ZW0+Pik6IE9ic2VydmFibGU8TnVsbGFibGU8SXRlbT4+IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBmYWxsYmFjayA/IHJ1bkZuRnJvbURhdGFQcm92aWRlck9yRmFsbGJhY2soY3R4LCBydW5GZXRjaEZyb21EYXRhUHJvdmlkZXIsIGZhbGxiYWNrKSA6IHJ1bkZldGNoRnJvbURhdGFQcm92aWRlcihjdHgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvdmVycmlkZSBydW5DcmVhdGU8SXRlbSwgU2VydmljZT4oY3R4OiBJQWN0aW9uQ29udGV4dDxJdGVtLCBTZXJ2aWNlPik6IE9ic2VydmFibGU8SXRlbT4gfCBudWxsO1xuICAgIHB1YmxpYyBvdmVycmlkZSBydW5DcmVhdGU8SXRlbSwgU2VydmljZT4oY3R4OiBJQWN0aW9uQ29udGV4dDxJdGVtLCBTZXJ2aWNlPiwgZmFsbGJhY2s6IE9ic2VydmFibGU8TnVsbGFibGU8SXRlbT4+KTogT2JzZXJ2YWJsZTxOdWxsYWJsZTxJdGVtPj47XG4gICAgcHVibGljIG92ZXJyaWRlIHJ1bkNyZWF0ZTxJdGVtLCBTZXJ2aWNlPihjdHg6IElBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+LCBmYWxsYmFjazogdW5kZWZpbmVkKTogT2JzZXJ2YWJsZTxOdWxsYWJsZTxJdGVtPj4gfCBudWxsO1xuICAgIHB1YmxpYyBvdmVycmlkZSBydW5DcmVhdGU8SXRlbSwgU2VydmljZT4oY3R4OiBJQWN0aW9uQ29udGV4dDxJdGVtLCBTZXJ2aWNlPiwgZmFsbGJhY2s/OiBPYnNlcnZhYmxlPE51bGxhYmxlPEl0ZW0+Pik6IE9ic2VydmFibGU8TnVsbGFibGU8SXRlbT4+IHwgbnVsbCB7XG4gICAgICAgIHJldHVybiBmYWxsYmFjayA/IHJ1bkZuRnJvbURhdGFQcm92aWRlck9yRmFsbGJhY2soY3R4LCBydW5DcmVhdGVGcm9tRGF0YVByb3ZpZGVyLCBmYWxsYmFjaykgOiBydW5DcmVhdGVGcm9tRGF0YVByb3ZpZGVyKGN0eCk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIHJ1blVwZGF0ZTxJdGVtLCBTZXJ2aWNlPihjdHg6IElBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+KTogT2JzZXJ2YWJsZTxJdGVtPiB8IG51bGw7XG4gICAgcHVibGljIG92ZXJyaWRlIHJ1blVwZGF0ZTxJdGVtLCBTZXJ2aWNlPihjdHg6IElBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+LCBmYWxsYmFjazogT2JzZXJ2YWJsZTxOdWxsYWJsZTxJdGVtPj4pOiBPYnNlcnZhYmxlPE51bGxhYmxlPEl0ZW0+PjtcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcnVuVXBkYXRlPEl0ZW0sIFNlcnZpY2U+KGN0eDogSUFjdGlvbkNvbnRleHQ8SXRlbSwgU2VydmljZT4sIGZhbGxiYWNrOiB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPE51bGxhYmxlPEl0ZW0+PiB8IG51bGw7XG4gICAgcHVibGljIG92ZXJyaWRlIHJ1blVwZGF0ZTxJdGVtLCBTZXJ2aWNlPihjdHg6IElBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+LCBmYWxsYmFjaz86IE9ic2VydmFibGU8TnVsbGFibGU8SXRlbT4+KTogT2JzZXJ2YWJsZTxOdWxsYWJsZTxJdGVtPj4gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIGZhbGxiYWNrID8gcnVuRm5Gcm9tRGF0YVByb3ZpZGVyT3JGYWxsYmFjayhjdHgsIHJ1blVwZGF0ZUZyb21EYXRhUHJvdmlkZXIsIGZhbGxiYWNrKSA6IHJ1blVwZGF0ZUZyb21EYXRhUHJvdmlkZXIoY3R4KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgcnVuRGVsZXRlPEl0ZW0sIFNlcnZpY2U+KGN0eDogSUFjdGlvbkNvbnRleHQ8SXRlbSwgU2VydmljZT4pOiBPYnNlcnZhYmxlPE51bGxhYmxlPEl0ZW0+PiB8IG51bGw7XG4gICAgcHVibGljIG92ZXJyaWRlIHJ1bkRlbGV0ZTxJdGVtLCBTZXJ2aWNlPihjdHg6IElBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+LCBmYWxsYmFjazogT2JzZXJ2YWJsZTxOdWxsYWJsZTxJdGVtPj4pOiBPYnNlcnZhYmxlPE51bGxhYmxlPEl0ZW0+PjtcbiAgICBwdWJsaWMgb3ZlcnJpZGUgcnVuRGVsZXRlPEl0ZW0sIFNlcnZpY2U+KGN0eDogSUFjdGlvbkNvbnRleHQ8SXRlbSwgU2VydmljZT4sIGZhbGxiYWNrOiB1bmRlZmluZWQpOiBPYnNlcnZhYmxlPE51bGxhYmxlPEl0ZW0+PiB8IG51bGw7XG4gICAgcHVibGljIG92ZXJyaWRlIHJ1bkRlbGV0ZTxJdGVtLCBTZXJ2aWNlPihjdHg6IElBY3Rpb25Db250ZXh0PEl0ZW0sIFNlcnZpY2U+LCBmYWxsYmFjaz86IE9ic2VydmFibGU8TnVsbGFibGU8SXRlbT4+KTogT2JzZXJ2YWJsZTxOdWxsYWJsZTxJdGVtPj4gfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIGZhbGxiYWNrID8gcnVuRm5Gcm9tRGF0YVByb3ZpZGVyT3JGYWxsYmFjayhjdHgsIHJ1bkRlbGV0ZUZyb21EYXRhUHJvdmlkZXIsIGZhbGxiYWNrKSA6IHJ1bkRlbGV0ZUZyb21EYXRhUHJvdmlkZXIoY3R4KTtcbiAgICB9XG59XG4iXX0=
|