@mediusinc/mng-commons 5.4.0 → 5.5.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/descriptors/table.descriptor.d.ts +4 -2
- package/core/directives/rerender.directive.d.ts +9 -0
- package/core/helpers/route.d.ts +25 -25
- package/core/index.d.ts +2 -0
- package/core/models/version.model.d.ts +16 -4
- package/core/reactivity/effect.d.ts +16 -0
- package/esm2022/core/components/notification/notification-wrapper.component.mjs +4 -4
- package/esm2022/core/components/pages/error/error.page.component.mjs +4 -4
- package/esm2022/core/components/pages/not-found/not-found.page.component.mjs +4 -4
- package/esm2022/core/data-list/data-list-params-helpers.mjs +18 -3
- package/esm2022/core/descriptors/table.descriptor.mjs +1 -1
- package/esm2022/core/directives/component.directive.mjs +4 -4
- package/esm2022/core/directives/rerender.directive.mjs +25 -0
- package/esm2022/core/directives/template.directive.mjs +4 -4
- package/esm2022/core/index.mjs +4 -1
- package/esm2022/core/models/version.model.mjs +1 -1
- package/esm2022/core/pipes/boolean.pipe.mjs +6 -6
- package/esm2022/core/pipes/class-map.pipe.mjs +4 -4
- package/esm2022/core/pipes/enum.pipe.mjs +4 -4
- package/esm2022/core/pipes/enumerate-async.pipe.mjs +4 -4
- package/esm2022/core/pipes/enumerate.pipe.mjs +4 -4
- package/esm2022/core/pipes/getter.pipe.mjs +5 -5
- package/esm2022/core/pipes/i18n-property.pipe.mjs +4 -4
- package/esm2022/core/pipes/json-path.pipe.mjs +4 -4
- package/esm2022/core/pipes/parametrize.pipe.mjs +4 -4
- package/esm2022/core/pipes/template.pipe.mjs +4 -4
- package/esm2022/core/reactivity/effect.mjs +22 -0
- package/esm2022/core/security/permission.service.mjs +4 -4
- package/esm2022/core/services/commons-init.service.mjs +4 -4
- package/esm2022/core/services/commons-router.service.mjs +4 -4
- package/esm2022/core/services/commons-storage.service.mjs +4 -4
- package/esm2022/core/services/commons.service.mjs +8 -8
- package/esm2022/filter/descriptors/filter-lookup.descriptor.mjs +32 -25
- package/esm2022/filter/descriptors/filter.descriptor.mjs +53 -1
- package/esm2022/form/components/autocomplete/autocomplete.component.mjs +4 -4
- package/esm2022/form/components/date-range/date-range.component.mjs +4 -4
- package/esm2022/form/components/dropdown/dropdown.component.mjs +4 -4
- package/esm2022/form/components/number-range/number-range.component.mjs +4 -4
- package/esm2022/form/directives/input-trim.directive.mjs +4 -4
- package/esm2022/table/api/descriptors/sort.descriptor.mjs +2 -2
- package/esm2022/table/api/descriptors/table.descriptor.mjs +31 -7
- package/esm2022/table/components/column-filter/column-filter.component.mjs +33 -40
- package/esm2022/table/components/column-value/column-value.component.mjs +6 -6
- package/esm2022/table/components/filter/filter-active-tag/filter-active-tag.component.mjs +7 -7
- package/esm2022/table/components/filter/filter-form/filter-form.component.mjs +28 -35
- package/esm2022/table/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.mjs +44 -45
- package/esm2022/table/components/table/table.component.mjs +114 -430
- package/esm2022/table/helpers/filters.mjs +9 -25
- package/esm2022/table/helpers/table.mjs +24 -0
- package/esm2022/table/index.mjs +2 -2
- package/esm2022/table/models/column-preferences.model.mjs +1 -1
- package/esm2022/table/models/filter.model.mjs +1 -1
- package/esm2022/table/pipes/filter-value.pipe.mjs +4 -4
- package/esm2022/table/pipes/locale-default-row-class.pipe.mjs +4 -4
- package/esm2022/table/pipes/table-column-filter-class.pipe.mjs +4 -4
- package/esm2022/table/services/table-data.service.mjs +194 -0
- package/esm2022/table/services/table-metadata.service.mjs +136 -0
- package/esm2022/table/services/table-preferences.service.mjs +142 -0
- package/esm2022/tableview/action/components/action/action.component.mjs +6 -7
- package/esm2022/tableview/action/components/editor/action-editor.component.mjs +4 -4
- package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +69 -46
- package/esm2022/tableview/action/components/localization/data-language-dropdown.component.mjs +4 -4
- package/esm2022/tableview/action/components/route/action-route.component.mjs +5 -6
- package/esm2022/tableview/action/components/table/action-table.component.mjs +6 -6
- package/esm2022/tableview/action/helpers/action-execution.mjs +25 -0
- package/esm2022/tableview/action/models/execution/action-instance.model.mjs +2 -3
- package/esm2022/tableview/action/services/action-executor.service.mjs +12 -79
- package/esm2022/tableview/action/services/component-action-executor.service.mjs +4 -4
- package/esm2022/tableview/action/services/data-provider-executor.service.mjs +4 -4
- package/esm2022/tableview/action/services/navigation.service.mjs +4 -4
- package/esm2022/tableview/action/services/root-action-executor.service.mjs +4 -4
- package/esm2022/tableview/action/services/view-container.service.mjs +4 -4
- package/esm2022/tableview/api/action/descriptors/action-confirmation.descriptor.mjs +13 -1
- package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +67 -10
- package/esm2022/tableview/api/action/descriptors/action-link-descriptor.factory.mjs +2 -2
- package/esm2022/tableview/api/action/descriptors/action-link.descriptor.mjs +17 -1
- package/esm2022/tableview/api/action/descriptors/action.descriptor.mjs +32 -7
- package/esm2022/tableview/api/action/models/execution/action-instance-state.model.mjs +2 -2
- package/esm2022/tableview/api/editor/descriptors/field-many.descriptor.mjs +2 -1
- package/esm2022/tableview/api/editor/models/formly-custom-field.model.mjs +4 -4
- package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +13 -5
- package/esm2022/tableview/api/tableview/helpers/tableview-default-actions.mjs +3 -2
- package/esm2022/tableview/api/tableview/helpers/tableview-descriptor-helpers.mjs +2 -2
- package/esm2022/tableview/editor/components/editor/auto-save-status/auto-save-status.component.mjs +4 -4
- package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +31 -38
- package/esm2022/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +7 -5
- package/esm2022/tableview/editor/components/formly/fields/formly-field-custom/formly-field-custom.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.mjs +7 -5
- package/esm2022/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +7 -5
- package/esm2022/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.mjs +5 -5
- package/esm2022/tableview/editor/components/formly/fields/formly-field-label/formly-field-label.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +5 -6
- package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +5 -6
- package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +6 -7
- package/esm2022/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/fields/formly-field-type.abstract.component.mjs +6 -5
- package/esm2022/tableview/editor/components/formly/pipes/formly-field-label.pipe.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +4 -4
- package/esm2022/tableview/editor/helpers/editor-autosave.mjs +2 -2
- package/esm2022/tableview/editor/services/form-editor.service.mjs +4 -4
- package/esm2022/tableview/index.mjs +1 -2
- package/esm2022/tableview/tableview/components/route/tableview-route.component.mjs +4 -4
- package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +4 -4
- package/fesm2022/mediusinc-mng-commons-core.mjs +130 -71
- package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-filter.mjs +83 -24
- package/fesm2022/mediusinc-mng-commons-filter.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-form.mjs +15 -15
- package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table-api.mjs +31 -7
- package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table.mjs +704 -606
- package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +146 -26
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview.mjs +260 -317
- package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
- package/filter/descriptors/filter-lookup.descriptor.d.ts +17 -20
- package/filter/descriptors/filter.descriptor.d.ts +32 -2
- package/form/components/date-range/date-range.component.d.ts +3 -3
- package/form/components/number-range/number-range.component.d.ts +2 -2
- package/package.json +4 -4
- package/table/api/descriptors/column.descriptor.d.ts +1 -1
- package/table/api/descriptors/sort.descriptor.d.ts +2 -2
- package/table/api/descriptors/table.descriptor.d.ts +20 -6
- package/table/components/column-filter/column-filter.component.d.ts +8 -14
- package/table/components/filter/filter-active-tag/filter-active-tag.component.d.ts +5 -5
- package/table/components/filter/filter-form/filter-form.component.d.ts +10 -19
- package/table/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.d.ts +11 -13
- package/table/components/table/table.component.d.ts +20 -64
- package/table/helpers/filters.d.ts +4 -7
- package/table/helpers/table.d.ts +6 -0
- package/table/index.d.ts +1 -1
- package/table/models/column-preferences.model.d.ts +2 -2
- package/table/models/filter.model.d.ts +14 -2
- package/table/services/table-data.service.d.ts +36 -0
- package/table/services/table-metadata.service.d.ts +31 -0
- package/table/services/table-preferences.service.d.ts +25 -0
- package/tableview/action/components/editor/injector-context/action-editor-injector-context.component.d.ts +4 -7
- package/tableview/action/components/localization/data-language-dropdown.component.d.ts +1 -1
- package/tableview/action/helpers/action-execution.d.ts +7 -0
- package/tableview/action/models/execution/action-instance.model.d.ts +1 -2
- package/tableview/action/services/action-executor.service.d.ts +1 -2
- package/tableview/api/action/descriptors/action-confirmation.descriptor.d.ts +1 -0
- package/tableview/api/action/descriptors/action-editor.descriptor.d.ts +12 -4
- package/tableview/api/action/descriptors/action-link.descriptor.d.ts +1 -0
- package/tableview/api/action/descriptors/action.descriptor.d.ts +5 -3
- package/tableview/api/action/models/execution/action-instance-state.model.d.ts +1 -1
- package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +4 -10
- package/tableview/api/editor/descriptors/field-group.descriptor.d.ts +1 -1
- package/tableview/api/tableview/descriptors/tableview.descriptor.d.ts +6 -4
- package/tableview/editor/components/editor/form-editor.component.d.ts +3 -2
- package/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +1 -1
- package/tableview/editor/components/formly/fields/formly-field-type.abstract.component.d.ts +2 -1
- package/tableview/index.d.ts +0 -1
- package/version-info.json +6 -6
- package/esm2022/table/services/data-list.service.mjs +0 -29
- package/esm2022/tableview/action/models/execution/action-instance-state.model.mjs +0 -32
- package/table/services/data-list.service.d.ts +0 -19
- package/tableview/action/models/execution/action-instance-state.model.d.ts +0 -30
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DatePipe } from '@angular/common';
|
|
2
2
|
import { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, afterNextRender, booleanAttribute, computed, effect, inject, input, model, output, signal, untracked, viewChild } from '@angular/core';
|
|
3
3
|
import { outputFromObservable, takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';
|
|
4
4
|
import { FormArray, FormGroup, ReactiveFormsModule, UntypedFormGroup } from '@angular/forms';
|
|
@@ -7,7 +7,7 @@ import { FormlyConfig, FormlyModule } from '@ngx-formly/core';
|
|
|
7
7
|
import { TranslateModule, TranslateService } from '@ngx-translate/core';
|
|
8
8
|
import { ButtonModule } from 'primeng/button';
|
|
9
9
|
import { MessagesModule } from 'primeng/messages';
|
|
10
|
-
import { BehaviorSubject, debounceTime, distinctUntilChanged, tap } from 'rxjs';
|
|
10
|
+
import { BehaviorSubject, debounceTime, delay, distinctUntilChanged, of, switchMap, tap } from 'rxjs';
|
|
11
11
|
import { map } from 'rxjs/operators';
|
|
12
12
|
import { CommonsService, CommonsStorageService, LoggerService, StyleLevelEnum, StyleSizeEnum, objectDeepCopy } from '@mediusinc/mng-commons/core';
|
|
13
13
|
import { ButtonStyleBuilder, ButtonStyleRoundedEnum } from '@mediusinc/mng-commons/form/api';
|
|
@@ -21,8 +21,8 @@ import * as i0 from "@angular/core";
|
|
|
21
21
|
import * as i1 from "@ngx-formly/core";
|
|
22
22
|
import * as i2 from "@angular/forms";
|
|
23
23
|
import * as i3 from "primeng/messages";
|
|
24
|
-
import * as i4 from "primeng/
|
|
25
|
-
import * as i5 from "primeng/
|
|
24
|
+
import * as i4 from "primeng/api";
|
|
25
|
+
import * as i5 from "primeng/button";
|
|
26
26
|
import * as i6 from "@ngx-translate/core";
|
|
27
27
|
export class FormEditorComponent {
|
|
28
28
|
get parent() {
|
|
@@ -129,16 +129,6 @@ export class FormEditorComponent {
|
|
|
129
129
|
this._formlyStateDisabledSubject.next(this._formlyOptions.formState.disabled);
|
|
130
130
|
});
|
|
131
131
|
});
|
|
132
|
-
effect(() => {
|
|
133
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
134
|
-
const key = this.autoSaveStorageKey();
|
|
135
|
-
untracked(() => {
|
|
136
|
-
this.autoSaveStopValueChangeListen();
|
|
137
|
-
this.autoSaveLoadSavedFromStorage();
|
|
138
|
-
this.autoSaveStartEventChangeListen(this.autoSaveStorageKeyCompInit);
|
|
139
|
-
this.autoSaveStorageKeyCompInit = false;
|
|
140
|
-
});
|
|
141
|
-
});
|
|
142
132
|
afterNextRender(() => {
|
|
143
133
|
if (this.autofocusEnabled()) {
|
|
144
134
|
setTimeout(() => {
|
|
@@ -194,12 +184,16 @@ export class FormEditorComponent {
|
|
|
194
184
|
formValue: () => this.getFormValue()
|
|
195
185
|
});
|
|
196
186
|
});
|
|
187
|
+
}
|
|
188
|
+
ngAfterViewInit() {
|
|
197
189
|
// mark form as pristine, should be done in next event hook to allow formly to initialize first
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
190
|
+
this._form.markAsPristine();
|
|
191
|
+
this.autoSaveLoadSavedFromStorage();
|
|
192
|
+
this.autoSaveStartEventChangeListen(this.autoSaveStorageKeyCompInit);
|
|
193
|
+
this.autoSaveStorageKeyCompInit = false;
|
|
201
194
|
}
|
|
202
195
|
ngOnDestroy() {
|
|
196
|
+
this.autoSaveStopValueChangeListen();
|
|
203
197
|
// emit lifecycle event
|
|
204
198
|
this.descriptor().nextEvent(FormEventTypeEnum.ComponentLifecycle, this, {
|
|
205
199
|
eventSubtype: FormFieldEventComponentSubtype.ON_DESTROY
|
|
@@ -229,7 +223,7 @@ export class FormEditorComponent {
|
|
|
229
223
|
const formFields = this._formlyFields;
|
|
230
224
|
if (formFields[0].type === 'tabs' && formFields[0].fieldGroup) {
|
|
231
225
|
for (const tab of formFields[0].fieldGroup) {
|
|
232
|
-
this._formlyOptions.formState['tab_' + (tab.id ? tab.id : tab.key ?? '') + '_invalid'] = this.isAnyFieldInvalid(tab.fieldGroup);
|
|
226
|
+
this._formlyOptions.formState['tab_' + (tab.id ? tab.id : (tab.key ?? '')) + '_invalid'] = this.isAnyFieldInvalid(tab.fieldGroup);
|
|
233
227
|
}
|
|
234
228
|
}
|
|
235
229
|
const event = { success: false, formItem: formSubmitItem };
|
|
@@ -365,6 +359,7 @@ export class FormEditorComponent {
|
|
|
365
359
|
*/
|
|
366
360
|
onAutoSaveDismiss() {
|
|
367
361
|
if (this.autoSaveStorageKey()) {
|
|
362
|
+
this.autoSaveStopValueChangeListen();
|
|
368
363
|
const restore = this.autoSaveRestore();
|
|
369
364
|
if (this.autoSaveStatusSubject.value.state === 'preview' && restore?.original) {
|
|
370
365
|
this.resetFormModel(restore.original);
|
|
@@ -440,21 +435,19 @@ export class FormEditorComponent {
|
|
|
440
435
|
if (!this.descriptor().autoSave) {
|
|
441
436
|
return;
|
|
442
437
|
}
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
}, init ? 0 : 500 // delay initial event listening for all the initializations to take place
|
|
457
|
-
);
|
|
438
|
+
if (!this.autoSaveEventsSubscription) {
|
|
439
|
+
this.autoSaveEventsSubscription = of(void 0)
|
|
440
|
+
.pipe(delay(init ? 0 : 500), // delay initial event listening for all the initializations to take place
|
|
441
|
+
switchMap(() => this._form.valueChanges), debounceTime(250), distinctUntilChanged(),
|
|
442
|
+
// skip first one on init
|
|
443
|
+
tap(() => {
|
|
444
|
+
if (this.autoSaveStatusSubject.value.state !== 'saved' && this.autoSaveStatusSubject.value.state !== 'preview')
|
|
445
|
+
this.autoSaveStatusSubject.next({ ...this.autoSaveStatusSubject.value, state: 'saving' });
|
|
446
|
+
}), debounceTime(750))
|
|
447
|
+
.subscribe(() => {
|
|
448
|
+
this.autoSaveSaveToStorage();
|
|
449
|
+
});
|
|
450
|
+
}
|
|
458
451
|
}
|
|
459
452
|
autoSaveStopValueChangeListen() {
|
|
460
453
|
this.autoSaveEventsSubscription?.unsubscribe();
|
|
@@ -480,11 +473,11 @@ export class FormEditorComponent {
|
|
|
480
473
|
this.autoSaveRestore.set(this.commonsStorageService.getItem(this.cmpTypeName, this.autoSaveStorageKey()) ?? null);
|
|
481
474
|
}
|
|
482
475
|
}
|
|
483
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
484
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.
|
|
476
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FormEditorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
477
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: FormEditorComponent, isStandalone: true, selector: "mng-form-editor", inputs: { descriptor: { classPropertyName: "descriptor", publicName: "descriptor", isSignal: true, isRequired: true, transformFunction: null }, submitLoading: { classPropertyName: "submitLoading", publicName: "submitLoading", isSignal: true, isRequired: false, transformFunction: null }, item: { classPropertyName: "item", publicName: "item", isSignal: true, isRequired: false, transformFunction: null }, isFormDisabled: { classPropertyName: "isFormDisabled", publicName: "isFormDisabled", isSignal: true, isRequired: false, transformFunction: null }, editorId: { classPropertyName: "editorId", publicName: "editorId", isSignal: true, isRequired: false, transformFunction: null }, itemId: { classPropertyName: "itemId", publicName: "itemId", isSignal: true, isRequired: false, transformFunction: null }, showAutoSaveStatus: { classPropertyName: "showAutoSaveStatus", publicName: "showAutoSaveStatus", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { item: "itemChange", formSubmit: "formSubmit", valueChange: "valueChange", autoSaveStatus: "autoSaveStatus" }, providers: [provideFormComponent()], viewQueries: [{ propertyName: "submitButtonElementRef", first: true, predicate: ["submitButton"], descendants: true, isSignal: true }, { propertyName: "focusThiefElRef", first: true, predicate: ["focusThiefInput"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (autoSaveShowRestore()) {\n <p-messages severity=\"warn\">\n <ng-template pTemplate>\n <div class=\"flex flex-grow-1 justify-content-between align-items-center\">\n <h6 class=\"m-0 p-0\">\n <em class=\"pi pi-save mr-4\"></em>\n {{\n 'mngEditor.autoSave.restore.title'\n | translate: {lastChange: autoSaveRestore()?.savedAt ? (autoSaveRestore()?.savedAt! | date: 'dd. MM. YYYY HH:mm:ss') : ''}\n }}\n </h6>\n <div>\n <p-button\n icon=\"pi pi-sync\"\n size=\"small\"\n [label]=\"'mngEditor.autoSave.restore.restore' | translate\"\n [styleClass]=\"restoreLocalStateButtonStyle\"\n [text]=\"true\"\n (click)=\"onAutoSaveRestore()\"></p-button>\n @if (autoSave()?.state !== 'preview' || autoSave()?.state !== 'previewCurrent') {\n <p-button\n icon=\"pi pi-eye\"\n size=\"small\"\n [label]=\"autoSavePreviewButtonLabel() | translate\"\n [styleClass]=\"previewLocalStateButtonStyle\"\n [text]=\"true\"\n (click)=\"onAutoSavePreview()\"></p-button>\n }\n <p-button\n icon=\"pi pi-times\"\n size=\"small\"\n [label]=\"'mngEditor.autoSave.restore.dismiss' | translate\"\n [styleClass]=\"clearLocalStateButtonStyle\"\n (click)=\"onAutoSaveDismiss()\"></p-button>\n </div>\n </div>\n </ng-template>\n </p-messages>\n}\n\n@if (autofocusEnabled()) {\n <input type=\"hidden\" #focusThiefInput tabindex=\"0\" />\n}\n<form [formGroup]=\"form\" (ngSubmit)=\"onSubmit($event)\">\n <formly-form [form]=\"form\" [fields]=\"formlyFields\" [options]=\"formlyOptions\" [model]=\"formlyInitialItem\"></formly-form>\n <button #submitButton pButton type=\"submit\" class=\"hidden\" [disabled]=\"form.disabled\" [loading]=\"submitLoading()\" loadingIcon=\"pi pi-spin pi-spinner\"></button>\n</form>\n<p-messages [value]=\"formMessages()\" [enableService]=\"false\"></p-messages>\n\n@if (descriptor().autoSave && showAutoSaveStatus()) {\n <mng-editor-auto-save-status [status]=\"autoSave()\"></mng-editor-auto-save-status>\n}\n", dependencies: [{ kind: "ngmodule", type: FormlyModule }, { kind: "component", type: i1.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MessagesModule }, { kind: "component", type: i3.Messages, selector: "p-messages", inputs: ["value", "closable", "style", "styleClass", "enableService", "key", "escape", "severity", "showTransitionOptions", "hideTransitionOptions"], outputs: ["valueChange", "onClose"] }, { kind: "directive", type: i4.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "component", type: i5.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }, { kind: "pipe", type: DatePipe, name: "date" }, { kind: "component", type: EditorAutoSaveStatusComponent, selector: "mng-editor-auto-save-status", inputs: ["status"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
485
478
|
}
|
|
486
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
479
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FormEditorComponent, decorators: [{
|
|
487
480
|
type: Component,
|
|
488
|
-
args: [{ standalone: true, selector: 'mng-form-editor', imports: [FormlyModule, ReactiveFormsModule, MessagesModule,
|
|
481
|
+
args: [{ standalone: true, selector: 'mng-form-editor', imports: [FormlyModule, ReactiveFormsModule, MessagesModule, ButtonModule, TranslateModule, DatePipe, EditorAutoSaveStatusComponent], providers: [provideFormComponent()], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (autoSaveShowRestore()) {\n <p-messages severity=\"warn\">\n <ng-template pTemplate>\n <div class=\"flex flex-grow-1 justify-content-between align-items-center\">\n <h6 class=\"m-0 p-0\">\n <em class=\"pi pi-save mr-4\"></em>\n {{\n 'mngEditor.autoSave.restore.title'\n | translate: {lastChange: autoSaveRestore()?.savedAt ? (autoSaveRestore()?.savedAt! | date: 'dd. MM. YYYY HH:mm:ss') : ''}\n }}\n </h6>\n <div>\n <p-button\n icon=\"pi pi-sync\"\n size=\"small\"\n [label]=\"'mngEditor.autoSave.restore.restore' | translate\"\n [styleClass]=\"restoreLocalStateButtonStyle\"\n [text]=\"true\"\n (click)=\"onAutoSaveRestore()\"></p-button>\n @if (autoSave()?.state !== 'preview' || autoSave()?.state !== 'previewCurrent') {\n <p-button\n icon=\"pi pi-eye\"\n size=\"small\"\n [label]=\"autoSavePreviewButtonLabel() | translate\"\n [styleClass]=\"previewLocalStateButtonStyle\"\n [text]=\"true\"\n (click)=\"onAutoSavePreview()\"></p-button>\n }\n <p-button\n icon=\"pi pi-times\"\n size=\"small\"\n [label]=\"'mngEditor.autoSave.restore.dismiss' | translate\"\n [styleClass]=\"clearLocalStateButtonStyle\"\n (click)=\"onAutoSaveDismiss()\"></p-button>\n </div>\n </div>\n </ng-template>\n </p-messages>\n}\n\n@if (autofocusEnabled()) {\n <input type=\"hidden\" #focusThiefInput tabindex=\"0\" />\n}\n<form [formGroup]=\"form\" (ngSubmit)=\"onSubmit($event)\">\n <formly-form [form]=\"form\" [fields]=\"formlyFields\" [options]=\"formlyOptions\" [model]=\"formlyInitialItem\"></formly-form>\n <button #submitButton pButton type=\"submit\" class=\"hidden\" [disabled]=\"form.disabled\" [loading]=\"submitLoading()\" loadingIcon=\"pi pi-spin pi-spinner\"></button>\n</form>\n<p-messages [value]=\"formMessages()\" [enableService]=\"false\"></p-messages>\n\n@if (descriptor().autoSave && showAutoSaveStatus()) {\n <mng-editor-auto-save-status [status]=\"autoSave()\"></mng-editor-auto-save-status>\n}\n" }]
|
|
489
482
|
}], ctorParameters: () => [] });
|
|
490
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9lZGl0b3IvY29tcG9uZW50cy9lZGl0b3IvZm9ybS1lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9lZGl0b3IvY29tcG9uZW50cy9lZGl0b3IvZm9ybS1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsVUFBVSxFQUdWLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLEtBQUssRUFDTCxNQUFNLEVBQ04sTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzlGLE9BQU8sRUFBa0IsU0FBUyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVHLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV2QyxPQUFPLEVBQUMsWUFBWSxFQUFxQixZQUFZLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMvRSxPQUFPLEVBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFdEUsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUNoRCxPQUFP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UztpQ0FDTSxJQUFJLFlBQ04saUJBQWlCLFdBRWxCLENBQUMsWUFBWSxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxRQUFRLEVBQUUsNkJBQTZCLENBQUMsYUFDcEksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLG1CQUNsQix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBc3luY1BpcGUsIERhdGVQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgYWZ0ZXJOZXh0UmVuZGVyLFxuICAgIGJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgY29tcHV0ZWQsXG4gICAgZWZmZWN0LFxuICAgIGluamVjdCxcbiAgICBpbnB1dCxcbiAgICBtb2RlbCxcbiAgICBvdXRwdXQsXG4gICAgc2lnbmFsLFxuICAgIHVudHJhY2tlZCxcbiAgICB2aWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge291dHB1dEZyb21PYnNlcnZhYmxlLCB0YWtlVW50aWxEZXN0cm95ZWQsIHRvU2lnbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge0Fic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFVudHlwZWRGb3JtR3JvdXB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7Um91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbXBvcnQge0Zvcm1seUNvbmZpZywgRm9ybWx5RmllbGRDb25maWcsIEZvcm1seU1vZHVsZX0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZSwgVHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge01lc3NhZ2V9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7QnV0dG9uTW9kdWxlfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQge01lc3NhZ2VzTW9kdWxlfSBmcm9tICdwcmltZW5nL21lc3NhZ2VzJztcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRhcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0NvbW1vbnNTZXJ2aWNlLCBDb21tb25zU3RvcmFnZVNlcnZpY2UsIElkVHlwZSwgTG9nZ2VyU2VydmljZSwgU3R5bGVMZXZlbEVudW0sIFN0eWxlU2l6ZUVudW0sIG9iamVjdERlZXBDb3B5fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtCdXR0b25TdHlsZUJ1aWxkZXIsIEJ1dHRvblN0eWxlUm91bmRlZEVudW19IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvZm9ybS9hcGknO1xuaW1wb3J0IHtcbiAgICBDb21tb25zRm9ybWx5Rm9ybU9wdGlvbnMsXG4gICAgRWRpdG9yRGVzY3JpcHRvckluc3QsXG4gICAgRm9ybUVkaXRvclBhdGNoRmllbGRWYWx1ZU9wdHMsXG4gICAgRm9ybUVkaXRvclJlc2V0RmllbGRWYWx1ZU9wdHMsXG4gICAgRm9ybUVkaXRvclJlc2V0Rm9ybU1vZGVsT3B0cyxcbiAgICBGb3JtRWRpdG9yU2V0RmllbGRWYWx1ZU9wdHMsXG4gICAgRm9ybUVkaXRvclN1Ym1pdEV2ZW50LFxuICAgIEZvcm1FdmVudFR5cGVFbnVtLFxuICAgIEZvcm1GaWVsZEV2ZW50Q29tcG9uZW50U3VidHlwZSxcbiAgICBJRm9ybUVkaXRvckNvbXBvbmVudCxcbiAgICBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bVxufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxldmlldy9hcGknO1xuXG5pbXBvcnQge2dlbmVyYXRlQXV0b3NhdmVFZGl0b3JLZXl9IGZyb20gJy4uLy4uL2hlbHBlcnMvZWRpdG9yLWF1dG9zYXZlJztcbmltcG9ydCB7Y3JlYXRlRm9ybWx5Q29uZmlnRnJvbURlc2NyaXB0b3J9IGZyb20gJy4uLy4uL2hlbHBlcnMvZWRpdG9yLWZvcm1seSc7XG5pbXBvcnQge2dldEZvcm1FZGl0b3JJbmZvTWVzc2FnZSwgZ2V0Rm9ybUVkaXRvcldhcm5pbmdNZXNzYWdlfSBmcm9tICcuLi8uLi9oZWxwZXJzL25vdGlmaWNhdGlvbic7XG5pbXBvcnQge0VkaXRvckF1dG9TYXZlUHJldmlld01vZGVsLCBFZGl0b3JBdXRvU2F2ZVN0YXR1c30gZnJvbSAnLi4vLi4vbW9kZWxzL2VkaXRvci1hdXRvLXNhdmUtcHJldmlldy5tb2RlbCc7XG5pbXBvcnQge0Zvcm1FZGl0b3JTZXJ2aWNlLCBwcm92aWRlRm9ybUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS1lZGl0b3Iuc2VydmljZSc7XG5pbXBvcnQge0VkaXRvckF1dG9TYXZlU3RhdHVzQ29tcG9uZW50fSBmcm9tICcuL2F1dG8tc2F2ZS1zdGF0dXMvYXV0by1zYXZlLXN0YXR1cy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnbW5nLWZvcm0tZWRpdG9yJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIGltcG9ydHM6IFtGb3JtbHlNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIE1lc3NhZ2VzTW9kdWxlLCBBc3luY1BpcGUsIEJ1dHRvbk1vZHVsZSwgVHJhbnNsYXRlTW9kdWxlLCBEYXRlUGlwZSwgRWRpdG9yQXV0b1NhdmVTdGF0dXNDb21wb25lbnRdLFxuICAgIHByb3ZpZGVyczogW3Byb3ZpZGVGb3JtQ29tcG9uZW50KCldLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1FZGl0b3JDb21wb25lbnQ8SXRlbSA9IGFueSwgUGFyZW50SXRlbSA9IGFueT4gaW1wbGVtZW50cyBJRm9ybUVkaXRvckNvbXBvbmVudDxJdGVtLCBQYXJlbnRJdGVtPiwgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmb3JtbHlDb25maWcgPSBpbmplY3QoRm9ybWx5Q29uZmlnKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZVNlcnZpY2UgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21tb25zID0gaW5qZWN0KENvbW1vbnNTZXJ2aWNlKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY21wVHlwZU5hbWUgPSAnRm9ybUVkaXRvckNvbXBvbmVudCc7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2dnZXIgPSBpbmplY3QoTG9nZ2VyU2VydmljZSkuY3JlYXRlKHRoaXMuY21wVHlwZU5hbWUpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybVNlcnZpY2UgPSBpbmplY3QoRm9ybUVkaXRvclNlcnZpY2U8SXRlbSwgUGFyZW50SXRlbT4pO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21tb25zU3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoQ29tbW9uc1N0b3JhZ2VTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlciA9IGluamVjdChSb3V0ZXIpO1xuXG4gICAgcHJpdmF0ZSBhdXRvU2F2ZVN0b3JhZ2VLZXlDb21wSW5pdCA9IHRydWU7XG4gICAgcHJpdmF0ZSBhdXRvU2F2ZVN0b3JhZ2VLZXkgPSBjb21wdXRlZCgoKSA9PiBnZW5lcmF0ZUF1dG9zYXZlRWRpdG9yS2V5KHRoaXMuZGVzY3JpcHRvcigpLCB0aGlzLml0ZW0oKSwgdGhpcy5yb3V0ZXIudXJsLCB7ZWRpdG9ySWQ6IHRoaXMuZWRpdG9ySWQoKSwgaXRlbUlkOiB0aGlzLml0ZW1JZCgpfSkpO1xuXG4gICAgcHVibGljIGRlc2NyaXB0b3IgPSBpbnB1dC5yZXF1aXJlZDxFZGl0b3JEZXNjcmlwdG9ySW5zdDxJdGVtPj4oKTtcbiAgICBwdWJsaWMgc3VibWl0TG9hZGluZyA9IGlucHV0KGZhbHNlLCB7dHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSk7XG4gICAgcHVibGljIGl0ZW0gPSBtb2RlbDxJdGVtIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHB1YmxpYyBpc0Zvcm1EaXNhYmxlZCA9IGlucHV0KGZhbHNlLCB7dHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSk7XG4gICAgcHVibGljIGVkaXRvcklkID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHB1YmxpYyBpdGVtSWQgPSBpbnB1dDxJZFR5cGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gICAgcHVibGljIHNob3dBdXRvU2F2ZVN0YXR1cyA9IGlucHV0KHRydWUsIHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KTtcblxuICAgIC8vIGV2ZW50IG91dHB1dHNcbiAgICBwdWJsaWMgZm9ybVN1Ym1pdCA9IG91dHB1dDxGb3JtRWRpdG9yU3VibWl0RXZlbnQ8SXRlbT4+KCk7XG4gICAgcHVibGljIHZhbHVlQ2hhbmdlID0gb3V0cHV0PEl0ZW0+KCk7XG4gICAgcHJpdmF0ZSBhdXRvU2F2ZVN0YXR1c1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVkaXRvckF1dG9TYXZlU3RhdHVzPih7c3RhdGU6ICdpbml0aWFsJywgdGltZXN0YW1wOiBuZXcgRGF0ZSgpfSk7XG4gICAgcHVibGljIGF1dG9TYXZlU3RhdHVzID0gb3V0cHV0RnJvbU9ic2VydmFibGUodGhpcy5hdXRvU2F2ZVN0YXR1c1N1YmplY3QuYXNPYnNlcnZhYmxlKCkpO1xuXG4gICAgLy8gY29udGVudCBhbmQgdmlldyBxdWVyaWVzXG4gICAgcHVibGljIHN1Ym1pdEJ1dHRvbkVsZW1lbnRSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZiB8IHVuZGVmaW5lZD4oJ3N1Ym1pdEJ1dHRvbicpO1xuICAgIHByaXZhdGUgZm9jdXNUaGllZkVsUmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ+KCdmb2N1c1RoaWVmSW5wdXQnKTtcblxuICAgIC8vIGZvcm1seSBzcGVjaWZpY3NcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mb3JtID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe30pO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Zvcm1seVN0YXRlRGlzYWJsZWRTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZm9ybWx5U3RhdGVEaXNhYmxlZCA9IHRvU2lnbmFsKHRoaXMuX2Zvcm1seVN0YXRlRGlzYWJsZWRTdWJqZWN0KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mb3JtbHlPcHRpb25zOiBDb21tb25zRm9ybWx5Rm9ybU9wdGlvbnM8SXRlbT4gPSB7XG4gICAgICAgIGZvcm1TdGF0ZToge1xuICAgICAgICAgICAgYWRkOiBmYWxzZSxcbiAgICAgICAgICAgIGVkaXQ6IGZhbHNlLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgZGlzYWJsZWQkOiB0aGlzLl9mb3JtbHlTdGF0ZURpc2FibGVkU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAgIH1cbiAgICB9O1xuICAgIHByaXZhdGUgX2Zvcm1seUZpZWxkczogRm9ybWx5RmllbGRDb25maWdbXSA9IFtdOyAvLyBpbml0aWFsaXplZCBpbiBuZ09uSW5pdCwgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIGFmdGVyXG4gICAgcHJpdmF0ZSBfZm9ybWx5SW5pdGlhbEl0ZW0gPSB7fTsgLy8gaW5pdGlhbGl6ZWQgaW4gbmdPbkluaXQsIHNob3VsZCBub3QgYmUgY2hhbmdlZCBhZnRlclxuICAgIHByaXZhdGUgaW5pdGlhbEl0ZW1JbnB1dDogSXRlbSB8IHVuZGVmaW5lZDtcblxuICAgIHByaXZhdGUgc2V0dGVyRmllbGRzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5kZXNjcmlwdG9yKCkuZmllbGRzLmZpbHRlcihmID0+IHR5cGVvZiBmLnNldHRlciA9PT0gJ2Z1bmN0aW9uJykpO1xuXG4gICAgcHVibGljIGZvcm1NZXNzYWdlcyA9IHNpZ25hbDxNZXNzYWdlW10+KFtdKTtcblxuICAgIC8vIGF1dG9zYXZlXG4gICAgcHVibGljIHJlYWRvbmx5IHJlc3RvcmVMb2NhbFN0YXRlQnV0dG9uU3R5bGUgPSBCdXR0b25TdHlsZUJ1aWxkZXIuY3JlYXRlKFN0eWxlTGV2ZWxFbnVtLlN1Y2Nlc3MsIFN0eWxlU2l6ZUVudW0uU21hbGwpLmJ1aWxkKCk7XG4gICAgcHVibGljIHJlYWRvbmx5IHByZXZpZXdMb2NhbFN0YXRlQnV0dG9uU3R5bGUgPSBCdXR0b25TdHlsZUJ1aWxkZXIuY3JlYXRlKFN0eWxlTGV2ZWxFbnVtLkluZm8sIFN0eWxlU2l6ZUVudW0uU21hbGwpLmJ1aWxkKCk7XG4gICAgcHVibGljIHJlYWRvbmx5IGNsZWFyTG9jYWxTdGF0ZUJ1dHRvblN0eWxlID0gQnV0dG9uU3R5bGVCdWlsZGVyLmNyZWF0ZShTdHlsZUxldmVsRW51bS5EYW5nZXIsIFN0eWxlU2l6ZUVudW0uU21hbGwpXG4gICAgICAgIC53aXRoUm91bmRlZEJ1dHRvbihCdXR0b25TdHlsZVJvdW5kZWRFbnVtLlNRVUFSRSlcbiAgICAgICAgLndpdGhUZXh0QnV0dG9uKClcbiAgICAgICAgLmJ1aWxkKCk7XG4gICAgcHVibGljIGF1dG9TYXZlUmVzdG9yZSA9IHNpZ25hbDxFZGl0b3JBdXRvU2F2ZVByZXZpZXdNb2RlbDxJdGVtPiB8IG51bGw+KG51bGwpO1xuICAgIHB1YmxpYyBhdXRvU2F2ZSA9IHRvU2lnbmFsKHRoaXMuYXV0b1NhdmVTdGF0dXNTdWJqZWN0KTtcbiAgICBwdWJsaWMgYXV0b1NhdmVQcmV2aWV3QnV0dG9uTGFiZWwgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5hdXRvU2F2ZSgpPy5zdGF0ZSkge1xuICAgICAgICAgICAgY2FzZSAncHJldmlldyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdtbmdFZGl0b3IuYXV0b1NhdmUucmVzdG9yZS5wcmV2aWV3Q3VycmVudCc7XG4gICAgICAgICAgICBjYXNlICdwcmV2aWV3Q3VycmVudCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdtbmdFZGl0b3IuYXV0b1NhdmUucmVzdG9yZS5wcmV2aWV3QXV0b3NhdmVkJztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuICdtbmdFZGl0b3IuYXV0b1NhdmUucmVzdG9yZS5wcmV2aWV3JztcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHB1YmxpYyBhdXRvU2F2ZVNob3dSZXN0b3JlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hdXRvU2F2ZVJlc3RvcmUoKT8uc2F2ZWQgIT0gbnVsbCk7XG4gICAgcHJpdmF0ZSBhdXRvU2F2ZVByZXZpZXdEaXNhYmxlZEZvcm0gPSBzaWduYWwoZmFsc2UpO1xuICAgIHByaXZhdGUgYXV0b1NhdmVFdmVudHNTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvLyBhdXRvZm9jdXNcbiAgICBwdWJsaWMgYXV0b2ZvY3VzRW5hYmxlZCA9IGNvbXB1dGVkKCgpID0+ICh0aGlzLmRlc2NyaXB0b3IoKS5hdXRvZm9jdXNPbkZpZWxkID8/IHRydWUpICYmICF0aGlzLl9mb3JtbHlTdGF0ZURpc2FibGVkKCkpO1xuXG4gICAgZ2V0IHBhcmVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybVNlcnZpY2UucGFyZW50O1xuICAgIH1cblxuICAgIGdldCBmb3JtKCk6IEZvcm1Hcm91cDx7W0sgaW4ga2V5b2YgSXRlbV06IEFic3RyYWN0Q29udHJvbDxJdGVtW0tdPn0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm07XG4gICAgfVxuXG4gICAgZ2V0IGZvcm1VbnNhZmUoKTogVW50eXBlZEZvcm1Hcm91cCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3JtO1xuICAgIH1cblxuICAgIGdldCBmb3JtbHlPcHRpb25zKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWx5T3B0aW9ucztcbiAgICB9XG5cbiAgICBnZXQgZm9ybWx5RmllbGRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWx5RmllbGRzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9ubHkgdXNlZCBmb3IgZm9ybSBpbml0aWFsaXphdGlvbi4gRnVydGhlciBjaGFuZ2VzIHNob3VsZCBiZSBkb25lIHVzaW5nIHtyZXNldEZvcm1Nb2RlbH0uXG4gICAgICovXG4gICAgZ2V0IGZvcm1seUluaXRpYWxJdGVtKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9ybWx5SW5pdGlhbEl0ZW07XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZm9ybVNlcnZpY2UuaW5pdCh0aGlzKTtcblxuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuaXRlbSgpO1xuICAgICAgICAgICAgaWYgKGl0ZW0gIT09IHRoaXMuaW5pdGlhbEl0ZW1JbnB1dCkge1xuICAgICAgICAgICAgICAgIC8vIG5ldyBpdGVtIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBvbmUgdGhlIGZvcm0gd2FzIGluaXRpYWxpemVkIHdpdGguIE11c3QgdHJpZ2dlciByZXNldCBvZiBmb3JtIG1vZGVsLlxuICAgICAgICAgICAgICAgIC8vIHNob3VsZCBiZSBleGVjdXRlZCBpbiB1bnRyYWNrZWQgbW9kZSwgYmVjYXVzZSBpdCB1cGRhdGVzIG11bHRpcGxlIGNvbXBvbmVudHMgdW5kZXJuZWF0aFxuICAgICAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLnJlc2V0Rm9ybU1vZGVsKGl0ZW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1seU9wdGlvbnMuZm9ybVN0YXRlLmRpc2FibGVkID1cbiAgICAgICAgICAgICAgICB0aGlzLmlzRm9ybURpc2FibGVkKCkgfHwgdGhpcy5hdXRvU2F2ZVByZXZpZXdEaXNhYmxlZEZvcm0oKSB8fCB0aGlzLl9mb3JtbHlPcHRpb25zLmZvcm1TdGF0ZS5kZXNjcmlwdG9yPy5kaXNhYmxlZCA9PT0gdHJ1ZSB8fCB0aGlzLl9mb3JtbHlPcHRpb25zLmZvcm1TdGF0ZS5kZXRhaWxzO1xuICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb3JtbHlTdGF0ZURpc2FibGVkU3ViamVjdC5uZXh0KHRoaXMuX2Zvcm1seU9wdGlvbnMuZm9ybVN0YXRlLmRpc2FibGVkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5hdXRvU2F2ZVN0b3JhZ2VLZXkoKTtcbiAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVN0b3BWYWx1ZUNoYW5nZUxpc3RlbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVMb2FkU2F2ZWRGcm9tU3RvcmFnZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVTdGFydEV2ZW50Q2hhbmdlTGlzdGVuKHRoaXMuYXV0b1NhdmVTdG9yYWdlS2V5Q29tcEluaXQpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVTdG9yYWdlS2V5Q29tcEluaXQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b2ZvY3VzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1GaWVsZHMgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2lucHV0Om5vdChbZGlzYWJsZWRdKSwgc2VsZWN0Om5vdChbZGlzYWJsZWRdKSwgdGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pLCBbcm9sZT1cImNvbWJvYm94XCJdOm5vdChbZGlzYWJsZWRdKSdcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlRWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3RpdmVJbnB1dElkeCA9IGFjdGl2ZUVsID8gWy4uLmZvcm1GaWVsZHNdLmZpbmRJbmRleChlbCA9PiBhY3RpdmVFbC5pc0VxdWFsTm9kZShlbCkpIDogMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZUlucHV0SWR4IDw9IDAgJiYgdGhpcy5mb2N1c1RoaWVmRWxSZWYoKT8ubmF0aXZlRWxlbWVudC5pc0VxdWFsTm9kZShmb3JtRmllbGRzWzBdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb25seSBpZiBmb2N1cyBvbiBmb2N1cyB0aGVpZiAob3Igbm8gZm9jdXMpLCBnbyB0aGUgbmV4dCBmaWVsZCAob2YgZmlyc3Qgb24pXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRJbmRleCA9IChhY3RpdmVJbnB1dElkeCA8PSAwID8gMSA6IGFjdGl2ZUlucHV0SWR4ICsgMSkgJSBmb3JtRmllbGRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZHNbdGFyZ2V0SW5kZXhdLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCA1MDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgICAgIC8vIGluaXQgZm9ybSBzdGF0ZVxuICAgICAgICBpZiAodGhpcy5kZXNjcmlwdG9yKCkudGFibGV2aWV3RWRpdG9yVHlwZSA9PT0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uQWRkKSB7XG4gICAgICAgICAgICB0aGlzLl9mb3JtbHlPcHRpb25zLmZvcm1TdGF0ZS5hZGQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGVzY3JpcHRvcigpLnRhYmxldmlld0VkaXRvclR5cGUgPT09IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkVkaXQpIHtcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1seU9wdGlvbnMuZm9ybVN0YXRlLmVkaXQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGVzY3JpcHRvcigpLnRhYmxldmlld0VkaXRvclR5cGUgPT09IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkRldGFpbHMpIHtcbiAgICAgICAgICAgIHRoaXMuX2Zvcm1seU9wdGlvbnMuZm9ybVN0YXRlLmRldGFpbHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Zvcm1seU9wdGlvbnMuZm9ybVN0YXRlLmRlc2NyaXB0b3IgPSB0aGlzLmRlc2NyaXB0b3IoKTtcblxuICAgICAgICAvLyBpbml0IGZpZWxkcyBmb3IgZm9ybWx5XG4gICAgICAgIHRoaXMuX2Zvcm1seUZpZWxkcyA9IGNyZWF0ZUZvcm1seUNvbmZpZ0Zyb21EZXNjcmlwdG9yKHRoaXMuZGVzY3JpcHRvcigpLCB0aGlzLmZvcm1seUNvbmZpZywgdGhpcyk7XG5cbiAgICAgICAgLy8gaW50IGZvcm0gbW9kZWwgKG9ubHkgaW5pdGlhbCwgbm8gZnVydGhlciBjaGFuZ2VzIHRvIGZvcm1Nb2RlbCBzaG91bGQgYmUgYWxsb3dlZCEpXG4gICAgICAgIHRoaXMuaW5pdGlhbEl0ZW1JbnB1dCA9IHRoaXMuaXRlbSgpO1xuICAgICAgICB0aGlzLl9mb3JtbHlJbml0aWFsSXRlbSA9IHRoaXMuZ2V0Rm9ybU1vZGVsRnJvbUl0ZW0odGhpcy5pdGVtKCkpO1xuXG4gICAgICAgIC8vIGhhbmRsZSBsb2NhbGl6YXRpb25zIGVkaXQvYWRkIG1lc3NhZ2VcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdG9yKCkuaXNMb2NhbGl6ZWQgJiZcbiAgICAgICAgICAgICh0aGlzLmRlc2NyaXB0b3IoKS50YWJsZXZpZXdFZGl0b3JUeXBlID09PSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5BZGQgfHwgdGhpcy5kZXNjcmlwdG9yKCkudGFibGV2aWV3RWRpdG9yVHlwZSA9PT0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uRWRpdClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1NZXNzYWdlcy5zZXQoW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuZm9ybU1lc3NhZ2VzKCksXG4gICAgICAgICAgICAgICAgZ2V0Rm9ybUVkaXRvckluZm9NZXNzYWdlKHRoaXMudHJhbnNsYXRlU2VydmljZSwgJ21uZ0VkaXRvci5sb2NhbGl6YXRpb25zLmFkZEluRGVmYXVsdExhbmd1YWdlVGl0bGUnLCAnbW5nRWRpdG9yLmxvY2FsaXphdGlvbnMuYWRkSW5EZWZhdWx0TGFuZ3VhZ2VEZXNjcmlwdGlvbicsIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdExhbmd1YWdlOiB0aGlzLmNvbW1vbnMuZ2V0RGVmYXVsdExvY2FsZSgpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW1pdCBsaWZlY3ljbGUgZXZlbnRcbiAgICAgICAgdGhpcy5kZXNjcmlwdG9yKCkubmV4dEV2ZW50KEZvcm1FdmVudFR5cGVFbnVtLkNvbXBvbmVudExpZmVjeWNsZSwgdGhpcyBhcyBJRm9ybUVkaXRvckNvbXBvbmVudDxhbnk+LCB7XG4gICAgICAgICAgICBldmVudFN1YnR5cGU6IEZvcm1GaWVsZEV2ZW50Q29tcG9uZW50U3VidHlwZS5PTl9JTklUXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2Zvcm0udmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMTAwKSxcbiAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB0aGlzLl9mb3JtLmdldFJhd1ZhbHVlKCkpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHYgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVDaGFuZ2U/LmVtaXQodik7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXNjcmlwdG9yKCkubmV4dEV2ZW50KEZvcm1FdmVudFR5cGVFbnVtLlZhbHVlQ2hhbmdlLCB0aGlzIGFzIElGb3JtRWRpdG9yQ29tcG9uZW50PGFueT4sIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgICAgICAgICAgICAgIGZvcm1WYWx1ZTogKCkgPT4gdGhpcy5nZXRGb3JtVmFsdWUoKVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gbWFyayBmb3JtIGFzIHByaXN0aW5lLCBzaG91bGQgYmUgZG9uZSBpbiBuZXh0IGV2ZW50IGhvb2sgdG8gYWxsb3cgZm9ybWx5IHRvIGluaXRpYWxpemUgZmlyc3RcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9mb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgLy8gZW1pdCBsaWZlY3ljbGUgZXZlbnRcbiAgICAgICAgdGhpcy5kZXNjcmlwdG9yKCkubmV4dEV2ZW50KEZvcm1FdmVudFR5cGVFbnVtLkNvbXBvbmVudExpZmVjeWNsZSwgdGhpcyBhcyBJRm9ybUVkaXRvckNvbXBvbmVudDxhbnk+LCB7XG4gICAgICAgICAgICBldmVudFN1YnR5cGU6IEZvcm1GaWVsZEV2ZW50Q29tcG9uZW50U3VidHlwZS5PTl9ERVNUUk9ZXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdWJtaXQoKSB7XG4gICAgICAgIHRoaXMuc3VibWl0QnV0dG9uRWxlbWVudFJlZigpPy5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHB1YmxpYyBvblN1Ym1pdChldmVudDogRXZlbnQpIHtcbiAgICAgICAgdGhpcy5fZm9ybWx5T3B0aW9ucy5mb3JtU3RhdGUuc3VibWl0dGVkT24gPSBEYXRlLm5vdygpO1xuICAgICAgICB0aGlzLmZvcm1NZXNzYWdlcy5zZXQoW10pO1xuXG4gICAgICAgIGNvbnN0IGZvcm1TdWJtaXRJdGVtID0gdGhpcy5nZXRGb3JtVmFsdWUoKTtcbiAgICAgICAgaWYgKHRoaXMuX2Zvcm0udmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybVN1Ym1pdC5lbWl0KHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZvcm1JdGVtOiBmb3JtU3VibWl0SXRlbVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0b3IoKS5uZXh0RXZlbnQoRm9ybUV2ZW50VHlwZUVudW0uU3VibWl0LCB0aGlzIGFzIElGb3JtRWRpdG9yQ29tcG9uZW50PGFueT4sIHtcbiAgICAgICAgICAgICAgICBzdWJtaXRWYWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzdWJtaXRWYWx1ZTogZm9ybVN1Ym1pdEl0ZW1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5vbkF1dG9TYXZlRGlzbWlzcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZmluZCBhbmQgbWFyayBpbnZhbGlkIHRhYnNcbiAgICAgICAgICAgIGNvbnN0IGZvcm1GaWVsZHMgPSB0aGlzLl9mb3JtbHlGaWVsZHM7XG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkc1swXS50eXBlID09PSAndGFicycgJiYgZm9ybUZpZWxkc1swXS5maWVsZEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB0YWIgb2YgZm9ybUZpZWxkc1swXS5maWVsZEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1seU9wdGlvbnMuZm9ybVN0YXRlWyd0YWJfJyArICh0YWIuaWQgPyB0YWIuaWQgOiB0YWIua2V5ID8/ICcnKSArICdfaW52YWxpZCddID0gdGhpcy5pc0FueUZpZWxkSW52YWxpZCh0YWIuZmllbGRHcm91cCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBldmVudDogRm9ybUVkaXRvclN1Ym1pdEV2ZW50PEl0ZW0+ID0ge3N1Y2Nlc3M6IGZhbHNlLCBmb3JtSXRlbTogZm9ybVN1Ym1pdEl0ZW19O1xuICAgICAgICAgICAgZXZlbnQuc3VjY2VzcyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5mb3JtTWVzc2FnZXMoKS5wdXNoKGdldEZvcm1FZGl0b3JXYXJuaW5nTWVzc2FnZSh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UsICdtbmdFZGl0b3IuaW52YWxpZEZvcm1Ub2FzdFRpdGxlJywgJ21uZ0VkaXRvci5pbnZhbGlkRm9ybVRvYXN0TWVzc2FnZScpKTtcblxuICAgICAgICAgICAgdGhpcy5mb3JtU3VibWl0LmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgdGhpcy5kZXNjcmlwdG9yKCkubmV4dEV2ZW50KEZvcm1FdmVudFR5cGVFbnVtLlN1Ym1pdCwgdGhpcyBhcyBJRm9ybUVkaXRvckNvbXBvbmVudDxhbnk+LCB7XG4gICAgICAgICAgICAgICAgc3VibWl0VmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHN1Ym1pdFZhbHVlOiBmb3JtU3VibWl0SXRlbVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Rm9ybVZhbHVlKG9wdHM/OiB7b21pdFNldHRlcnM/OiBib29sZWFufSk6IEl0ZW0ge1xuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSBvYmplY3REZWVwQ29weSh0aGlzLl9mb3JtLmdldFJhd1ZhbHVlKCksIHttYXBHZXR0ZXJzVG9Qcm9wZXJ0aWVzOiB0cnVlfSk7XG5cbiAgICAgICAgaWYgKG9wdHM/Lm9taXRTZXR0ZXJzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRlckZpZWxkcygpLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwbGl0UGF0aCA9IGZpZWxkLnByb3BlcnR5LnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgICAgbGV0IGZpZWxkVmFsdWUgPSBmb3JtVmFsdWU7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdFBhdGgubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdWJQYXRoID0gc3BsaXRQYXRoW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZpZWxkVmFsdWVbY3VycmVudFN1YlBhdGhdICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRWYWx1ZVtjdXJyZW50U3ViUGF0aF0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsdWUgPSBmaWVsZFZhbHVlW2N1cnJlbnRTdWJQYXRoXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmaWVsZFZhbHVlID0gZmllbGRWYWx1ZVtzcGxpdFBhdGhbc3BsaXRQYXRoLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgICAgICAgICBmaWVsZC5zZXR0ZXI/Lihmb3JtVmFsdWUsIGZpZWxkVmFsdWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ybVZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNldEZvcm1Nb2RlbChpdGVtPzogSXRlbSwgb3B0cz86IEZvcm1FZGl0b3JSZXNldEZvcm1Nb2RlbE9wdHMpIHtcbiAgICAgICAgLy8gaGF2ZSB0byB1c2UgZm9ybWx5J3MgcmVzZXQgbW9kZWwsIGJlY2F1c2UgX2Zvcm0ucmVzZXQoKSBkb2VzIG5vdCByZXNldCB0aGUgdmFsdWVzIGNvcnJlY3RseVxuICAgICAgICB0aGlzLl9mb3JtbHlPcHRpb25zLnJlc2V0TW9kZWw/Lih0aGlzLmdldEZvcm1Nb2RlbEZyb21JdGVtKGl0ZW0pKTtcblxuICAgICAgICBpZiAob3B0cz8ubWFya0FzUHJpc3RpbmUgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAvLyBtYXJrIGZvcm0gYXMgcHJpc3RpbmUsIHNob3VsZCBiZSBkb25lIGluIG5leHQgZXZlbnQgaG9vayB0byBhbGxvdyBmb3JtbHkgdG8gaW5pdGlhbGl6ZSBmaXJzdFxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9ybS5tYXJrQXNQcmlzdGluZSh7b25seVNlbGY6IG9wdHM/Lm9ubHlTZWxmfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGaWVsZChrZXk6IGtleW9mIEl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RmllbGRVbnNhZmUoa2V5IGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZpZWxkVW5zYWZlKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRGb3JtRmllbGQodGhpcy5fZm9ybSwga2V5LnNwbGl0KCcuJykpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRGaWVsZFZhbHVlPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgSXRlbT4oa2V5OiBQcm9wZXJ0eSwgdmFsdWU6IEl0ZW1bUHJvcGVydHldLCBvcHRzPzogRm9ybUVkaXRvclNldEZpZWxkVmFsdWVPcHRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldEZpZWxkVmFsdWVVbnNhZmUoa2V5IGFzIHN0cmluZywgdmFsdWUsIG9wdHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRGaWVsZFZhbHVlVW5zYWZlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBvcHRzPzogRm9ybUVkaXRvclNldEZpZWxkVmFsdWVPcHRzKSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldEZpZWxkVW5zYWZlKGtleSk7XG4gICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKHZhbHVlLCBvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihgVmFsdWUgd2FzIG5vdCBzZXQsIGJlY2F1c2UgZmllbGQgJHtrZXl9IHdhcyBub3QgZm91bmQuYCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcGF0Y2hGaWVsZFZhbHVlPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgSXRlbT4oa2V5OiBQcm9wZXJ0eSwgdmFsdWU6IEl0ZW1bUHJvcGVydHldLCBvcHRzPzogRm9ybUVkaXRvclBhdGNoRmllbGRWYWx1ZU9wdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGF0Y2hGaWVsZFZhbHVlVW5zYWZlKGtleSBhcyBzdHJpbmcsIHZhbHVlLCBvcHRzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcGF0Y2hGaWVsZFZhbHVlVW5zYWZlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55LCBvcHRzPzogRm9ybUVkaXRvclBhdGNoRmllbGRWYWx1ZU9wdHMpIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0RmllbGRVbnNhZmUoa2V5KTtcbiAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICAgIGNvbnRyb2wucGF0Y2hWYWx1ZSh2YWx1ZSwgb3B0cyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYFZhbHVlIHdhcyBub3Qgc2V0LCBiZWNhdXNlIGZpZWxkICR7a2V5fSB3YXMgbm90IGZvdW5kLmApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0RmllbGRWYWx1ZTxQcm9wZXJ0eSBleHRlbmRzIGtleW9mIEl0ZW0+KGtleTogUHJvcGVydHksIHZhbHVlPzogSXRlbVtQcm9wZXJ0eV0sIG9wdHM/OiBGb3JtRWRpdG9yUmVzZXRGaWVsZFZhbHVlT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNldEZpZWxkVmFsdWVVbnNhZmUoa2V5IGFzIHN0cmluZywgdmFsdWUsIG9wdHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNldEZpZWxkVmFsdWVVbnNhZmUoa2V5OiBzdHJpbmcsIHZhbHVlPzogYW55LCBvcHRzPzogRm9ybUVkaXRvclJlc2V0RmllbGRWYWx1ZU9wdHMpIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0RmllbGRVbnNhZmUoa2V5KTtcbiAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICAgIGNvbnRyb2wucmVzZXQodmFsdWUsIG9wdHMpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBWYWx1ZSB3YXMgbm90IHNldCwgYmVjYXVzZSBmaWVsZCAke2tleX0gd2FzIG5vdCBmb3VuZC5gKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc3RvcmVzIHRoZSBzYXZlZCBsb2NhbCBzdGF0ZS5cbiAgICAgKiBJZiBsb2NhbCBzdG9yYWdlIGtleXMgZXhpc3QgZm9yIGxvY2FsIHN0YXRlIGFuZCBsb2NhbCB0aW1lc3RhbXAsIHJlc3RvcmUgdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gICAgICovXG4gICAgcHVibGljIG9uQXV0b1NhdmVSZXN0b3JlKCkge1xuICAgICAgICBjb25zdCByZXN0b3JlID0gdGhpcy5hdXRvU2F2ZVJlc3RvcmUoKTtcbiAgICAgICAgaWYgKHJlc3RvcmU/LnNhdmVkKSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9TYXZlU3RvcFZhbHVlQ2hhbmdlTGlzdGVuKCk7XG4gICAgICAgICAgICB0aGlzLnJlc2V0Rm9ybU1vZGVsKHJlc3RvcmUuc2F2ZWQpO1xuICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVJlc3RvcmUuc2V0KG51bGwpO1xuICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVN0YXR1c1N1YmplY3QubmV4dCh7c3RhdGU6ICdyZXN0b3JlZCcsIHRpbWVzdGFtcDogcmVzdG9yZS5zYXZlZEF0ID8/IG5ldyBEYXRlKCl9KTtcbiAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVQcmV2aWV3RGlzYWJsZWRGb3JtLnNldChmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmF1dG9TYXZlU3RhcnRFdmVudENoYW5nZUxpc3RlbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJldmlld3MgdGhlIHNhdmVkIGxvY2FsIHN0YXRlLlxuICAgICAqIElmIGxvY2FsIHN0b3JhZ2Uga2V5cyBleGlzdCBmb3IgbG9jYWwgc3RhdGUgYW5kIGxvY2FsIHRpbWVzdGFtcCwgcmVzdG9yZSB0aGVpciBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25BdXRvU2F2ZVByZXZpZXcoKSB7XG4gICAgICAgIGlmICghdGhpcy5hdXRvU2F2ZVJlc3RvcmUoKT8uc2F2ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXV0b1NhdmVTdG9wVmFsdWVDaGFuZ2VMaXN0ZW4oKTtcbiAgICAgICAgdGhpcy5hdXRvU2F2ZVByZXZpZXdEaXNhYmxlZEZvcm0uc2V0KHRydWUpO1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuYXV0b1NhdmVTdGF0dXNTdWJqZWN0LnZhbHVlLnN0YXRlO1xuICAgICAgICBpZiAoc3RhdGUgIT09ICdwcmV2aWV3JyAmJiBzdGF0ZSAhPT0gJ3ByZXZpZXdDdXJyZW50Jykge1xuICAgICAgICAgICAgLy8gbXVzdCBzdG9yZSBvcmlnaW5hbCB2YWx1ZSBmcm9tIGN1cnJlbnQgdmFsdWUgZm9ybVxuICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVJlc3RvcmUudXBkYXRlKGkgPT4gKHsuLi5pLCBvcmlnaW5hbDogdGhpcy5nZXRGb3JtVmFsdWUoKX0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3RvcmUgPSB0aGlzLmF1dG9TYXZlUmVzdG9yZSgpO1xuICAgICAgICBpZiAoc3RhdGUgPT09ICdwcmV2aWV3JyAmJiByZXN0b3JlPy5vcmlnaW5hbCkge1xuICAgICAgICAgICAgdGhpcy5yZXNldEZvcm1Nb2RlbChyZXN0b3JlLm9yaWdpbmFsKTtcbiAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVTdGF0dXNTdWJqZWN0Lm5leHQoe3N0YXRlOiAncHJldmlld0N1cnJlbnQnfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgIT09ICdwcmV2aWV3JyAmJiByZXN0b3JlPy5zYXZlZCkge1xuICAgICAgICAgICAgdGhpcy5yZXNldEZvcm1Nb2RlbChyZXN0b3JlLnNhdmVkKTtcbiAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVTdGF0dXNTdWJqZWN0Lm5leHQoe3N0YXRlOiAncHJldmlldycsIHRpbWVzdGFtcDogcmVzdG9yZS5zYXZlZEF0ID8/IG5ldyBEYXRlKCl9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgbG9jYWwgc3RhdGUgZnJvbSBsb2NhbCBzdG9yYWdlLlxuICAgICAqIElmIGxvY2FsIHN0b3JhZ2Uga2V5cyBleGlzdCBmb3IgbG9jYWwgc3RhdGUgYW5kIGxvY2FsIHRpbWVzdGFtcCwgcmVtb3ZlIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkF1dG9TYXZlRGlzbWlzcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYXV0b1NhdmVTdG9yYWdlS2V5KCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3RvcmUgPSB0aGlzLmF1dG9TYXZlUmVzdG9yZSgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1NhdmVTdGF0dXNTdWJqZWN0LnZhbHVlLnN0YXRlID09PSAncHJldmlldycgJiYgcmVzdG9yZT8ub3JpZ2luYWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0Rm9ybU1vZGVsKHJlc3RvcmUub3JpZ2luYWwpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVTdGF0dXNTdWJqZWN0Lm5leHQoe3N0YXRlOiAnaW5pdGlhbCcsIHRpbWVzdGFtcDogbmV3IERhdGUoKX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb21tb25zU3RvcmFnZVNlcnZpY2UucmVtb3ZlSXRlbSh0aGlzLmNtcFR5cGVOYW1lLCB0aGlzLmF1dG9TYXZlU3RvcmFnZUtleSgpKTtcbiAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVSZXN0b3JlLnNldChudWxsKTtcbiAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVQcmV2aWV3RGlzYWJsZWRGb3JtLnNldChmYWxzZSk7XG4gICAgICAgICAgICB0aGlzLmF1dG9TYXZlU3RhcnRFdmVudENoYW5nZUxpc3RlbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JtTW9kZWxGcm9tSXRlbShpdGVtOiBJdGVtIHwgdW5kZWZpbmVkKTogYW55IHtcbiAgICAgICAgY29uc3QgZm9ybU1vZGVsID0gKG9iamVjdERlZXBDb3B5KGl0ZW0sIHttYXBHZXR0ZXJzVG9Qcm9wZXJ0aWVzOiB0cnVlfSkgYXMgUmVjb3JkPHN0cmluZywgYW55PikgPz8ge307XG5cbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IHRoaXMuZGVzY3JpcHRvcigpO1xuICAgICAgICBkZXNjcmlwdG9yLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIGlmIChmaWVsZC5nZXR0ZXIgJiYgZm9ybU1vZGVsKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BsaXRQYXRoID0gZmllbGQucHJvcGVydHkuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICBsZXQgY3VycmVudE9iamVjdCA9IGZvcm1Nb2RlbDtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3BsaXRQYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdWJQYXRoID0gc3BsaXRQYXRoW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gc3BsaXRQYXRoLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPYmplY3RbY3VycmVudFN1YlBhdGhdID0gZmllbGQuZ2V0dGVyKGZvcm1Nb2RlbD8uW2ZpZWxkLnByb3BlcnR5IGFzIGtleW9mIG9iamVjdF0sIGZvcm1Nb2RlbCBhcyBJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudE9iamVjdFtjdXJyZW50U3ViUGF0aF0gIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE9iamVjdFtjdXJyZW50U3ViUGF0aF0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE9iamVjdCA9IGN1cnJlbnRPYmplY3RbY3VycmVudFN1YlBhdGhdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZm9ybU1vZGVsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluZEZvcm1GaWVsZChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGtleVBhdGg6IHN0cmluZ1tdKTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XG4gICAgICAgIGlmIChrZXlQYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleVBhdGgubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbC5nZXQoa2V5UGF0aFswXSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5leHRDb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsID0gbnVsbDtcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcbiAgICAgICAgICAgIG5leHRDb250cm9sID0gY29udHJvbC5nZXQoa2V5UGF0aFswXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gK2tleVBhdGhbMF07XG4gICAgICAgICAgICBpZiAoIWlzTmFOKGlkeCkpIHtcbiAgICAgICAgICAgICAgICBuZXh0Q29udHJvbCA9IGNvbnRyb2wuYXQoaWR4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZEZvcm1GaWVsZChuZXh0Q29udHJvbCEsIGtleVBhdGguc2xpY2UoMSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBbnlGaWVsZEludmFsaWQoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW10pOiBib29sZWFuIHtcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgIGxldCBmaWVsZEludmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkLmZpZWxkR3JvdXApKSB7XG4gICAgICAgICAgICAgICAgZmllbGRJbnZhbGlkID0gdGhpcy5pc0FueUZpZWxkSW52YWxpZChmaWVsZC5maWVsZEdyb3VwKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpZWxkLnR5cGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgZmllbGRJbnZhbGlkID0gIWZpZWxkLmZvcm1Db250cm9sPy52YWxpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWVsZEludmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhdXRvU2F2ZVN0YXJ0RXZlbnRDaGFuZ2VMaXN0ZW4oaW5pdCA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghdGhpcy5kZXNjcmlwdG9yKCkuYXV0b1NhdmUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHNldFRpbWVvdXQoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmF1dG9TYXZlRXZlbnRzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVFdmVudHNTdWJzY3JpcHRpb24gPSB0aGlzLl9mb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDI1MCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBza2lwIGZpcnN0IG9uZSBvbiBpbml0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1NhdmVTdGF0dXNTdWJqZWN0LnZhbHVlLnN0YXRlICE9PSAnc2F2ZWQnICYmIHRoaXMuYXV0b1NhdmVTdGF0dXNTdWJqZWN0LnZhbHVlLnN0YXRlICE9PSAncHJldmlldycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9TYXZlU3RhdHVzU3ViamVjdC5uZXh0KHsuLi50aGlzLmF1dG9TYXZlU3RhdHVzU3ViamVjdC52YWx1ZSwgc3RhdGU6ICdzYXZpbmcnfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDc1MCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVTYXZlVG9TdG9yYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5pdCA/IDAgOiA1MDAgLy8gZGVsYXkgaW5pdGlhbCBldmVudCBsaXN0ZW5pbmcgZm9yIGFsbCB0aGUgaW5pdGlhbGl6YXRpb25zIHRvIHRha2UgcGxhY2VcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGF1dG9TYXZlU3RvcFZhbHVlQ2hhbmdlTGlzdGVuKCkge1xuICAgICAgICB0aGlzLmF1dG9TYXZlRXZlbnRzU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmF1dG9TYXZlRXZlbnRzU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNhdmVzIHRoZSBmb3JtIHZhbHVlIHRvIGxvY2FsU3RvcmFnZSBpZiBhdXRvU2F2ZSBpcyBlbmFibGVkIGFuZCB0aGUgcmVxdWlyZWQga2V5cyBhcmUgZGVmaW5lZC5cbiAgICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICAgKi9cbiAgICBwcml2YXRlIGF1dG9TYXZlU2F2ZVRvU3RvcmFnZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRvcigpLmF1dG9TYXZlICE9PSB0cnVlIHx8IHRoaXMuYXV0b1NhdmVTdGF0dXNTdWJqZWN0LnZhbHVlLnN0YXRlID09PSAncHJldmlldycgfHwgdGhpcy5hdXRvU2F2ZVN0YXR1c1N1YmplY3QudmFsdWUuc3RhdGUgPT09ICdwcmV2aWV3Q3VycmVudCcpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY29tbW9uc1N0b3JhZ2VTZXJ2aWNlLnNldEl0ZW08RWRpdG9yQXV0b1NhdmVQcmV2aWV3TW9kZWw8SXRlbT4+KHRoaXMuY21wVHlwZU5hbWUsIHRoaXMuYXV0b1NhdmVTdG9yYWdlS2V5KCksIHtzYXZlZDogdGhpcy5nZXRGb3JtVmFsdWUoKSwgc2F2ZWRBdDogbmV3IERhdGUoKX0pO1xuICAgICAgICB0aGlzLmF1dG9TYXZlU3RhdHVzU3ViamVjdC5uZXh0KHtzdGF0ZTogJ3NhdmVkJywgdGltZXN0YW1wOiBuZXcgRGF0ZSgpfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZHMgdGhlIHZhbHVlIGZyb20gdGhlIGxvY2FsIHN0b3JhZ2UgaWYgYXZhaWxhYmxlXG4gICAgICovXG4gICAgcHJpdmF0ZSBhdXRvU2F2ZUxvYWRTYXZlZEZyb21TdG9yYWdlKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB7YXV0b1NhdmUsIG1vZGVsfSA9IHRoaXMuZGVzY3JpcHRvcigpO1xuICAgICAgICBpZiAoYXV0b1NhdmUgJiYgbW9kZWwuaTE4bkJhc2VLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVSZXN0b3JlLnNldCh0aGlzLmNvbW1vbnNTdG9yYWdlU2VydmljZS5nZXRJdGVtPEVkaXRvckF1dG9TYXZlUHJldmlld01vZGVsPEl0ZW0+Pih0aGlzLmNtcFR5cGVOYW1lLCB0aGlzLmF1dG9TYXZlU3RvcmFnZUtleSgpKSA/PyBudWxsKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIkBpZiAoYXV0b1NhdmVTaG93UmVzdG9yZSgpKSB7XG4gICAgPHAtbWVzc2FnZXMgc2V2ZXJpdHk9XCJ3YXJuXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWdyb3ctMSBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8aDYgY2xhc3M9XCJtLTAgcC0wXCI+XG4gICAgICAgICAgICAgICAgICAgIDxlbSBjbGFzcz1cInBpIHBpLXNhdmUgbXItNFwiPjwvZW0+XG4gICAgICAgICAgICAgICAgICAgIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAnbW5nRWRpdG9yLmF1dG9TYXZlLnJlc3RvcmUudGl0bGUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHtsYXN0Q2hhbmdlOiBhdXRvU2F2ZVJlc3RvcmUoKT8uc2F2ZWRBdCA/IChhdXRvU2F2ZVJlc3RvcmUoKT8uc2F2ZWRBdCEgfCBkYXRlOiAnZGQuIE1NLiBZWVlZIEhIOm1tOnNzJykgOiAnJ31cbiAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICA8L2g2PlxuICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj1cInBpIHBpLXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInbW5nRWRpdG9yLmF1dG9TYXZlLnJlc3RvcmUucmVzdG9yZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlQ2xhc3NdPVwicmVzdG9yZUxvY2FsU3RhdGVCdXR0b25TdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkF1dG9TYXZlUmVzdG9yZSgpXCI+PC9wLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChhdXRvU2F2ZSgpPy5zdGF0ZSAhPT0gJ3ByZXZpZXcnIHx8IGF1dG9TYXZlKCk/LnN0YXRlICE9PSAncHJldmlld0N1cnJlbnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktZXllXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJhdXRvU2F2ZVByZXZpZXdCdXR0b25MYWJlbCgpIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVDbGFzc109XCJwcmV2aWV3TG9jYWxTdGF0ZUJ1dHRvblN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGV4dF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BdXRvU2F2ZVByZXZpZXcoKVwiPjwvcC1idXR0b24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktdGltZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCInbW5nRWRpdG9yLmF1dG9TYXZlLnJlc3RvcmUuZGlzbWlzcycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlQ2xhc3NdPVwiY2xlYXJMb2NhbFN0YXRlQnV0dG9uU3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQXV0b1NhdmVEaXNtaXNzKClcIj48L3AtYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9wLW1lc3NhZ2VzPlxufVxuXG5AaWYgKGF1dG9mb2N1c0VuYWJsZWQoKSkge1xuICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgI2ZvY3VzVGhpZWZJbnB1dCB0YWJpbmRleD1cIjBcIiAvPlxufVxuPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0KCRldmVudClcIj5cbiAgICA8Zm9ybWx5LWZvcm0gW2Zvcm1dPVwiZm9ybVwiIFtmaWVsZHNdPVwiZm9ybWx5RmllbGRzXCIgW29wdGlvbnNdPVwiZm9ybWx5T3B0aW9uc1wiIFttb2RlbF09XCJmb3JtbHlJbml0aWFsSXRlbVwiPjwvZm9ybWx5LWZvcm0+XG4gICAgPGJ1dHRvbiAjc3VibWl0QnV0dG9uIHBCdXR0b24gdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiaGlkZGVuXCIgW2Rpc2FibGVkXT1cImZvcm0uZGlzYWJsZWRcIiBbbG9hZGluZ109XCJzdWJtaXRMb2FkaW5nKClcIiBsb2FkaW5nSWNvbj1cInBpIHBpLXNwaW4gcGktc3Bpbm5lclwiPjwvYnV0dG9uPlxuPC9mb3JtPlxuPHAtbWVzc2FnZXMgW3ZhbHVlXT1cImZvcm1NZXNzYWdlcygpXCIgW2VuYWJsZVNlcnZpY2VdPVwiZmFsc2VcIj48L3AtbWVzc2FnZXM+XG5cbkBpZiAoZGVzY3JpcHRvcigpLmF1dG9TYXZlICYmIHNob3dBdXRvU2F2ZVN0YXR1cygpKSB7XG4gICAgPG1uZy1lZGl0b3ItYXV0by1zYXZlLXN0YXR1cyBbc3RhdHVzXT1cImF1dG9TYXZlKClcIj48L21uZy1lZGl0b3ItYXV0by1zYXZlLXN0YXR1cz5cbn1cbiJdfQ==
|
|
483
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9lZGl0b3IvY29tcG9uZW50cy9lZGl0b3IvZm9ybS1lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGV2aWV3L3NyYy9lZGl0b3IvY29tcG9uZW50cy9lZGl0b3IvZm9ybS1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFFSCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFVBQVUsRUFDVixVQUFVLEVBR1YsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsTUFBTSxFQUNOLE1BQU0sRUFDTixLQUFLLEVBQ0wsS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsb0JBQW9CLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDOUYsT0FBTyxFQUFrQixTQUFTLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixFQUFFLGdCQUFnQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUcsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXZDLE9BQU8sRUFBQyxZQUFZLEVBQXFCLFlBQVksRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQy9FLE9BQU8sRUFBQyxlQUFlLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxlQUFl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QUFFLENBQUMsbUJBQ2xCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RhdGVQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBEZXN0cm95UmVmLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBhZnRlck5leHRSZW5kZXIsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBjb21wdXRlZCxcbiAgICBlZmZlY3QsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIG1vZGVsLFxuICAgIG91dHB1dCxcbiAgICBzaWduYWwsXG4gICAgdW50cmFja2VkLFxuICAgIHZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7b3V0cHV0RnJvbU9ic2VydmFibGUsIHRha2VVbnRpbERlc3Ryb3llZCwgdG9TaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Hcm91cCwgUmVhY3RpdmVGb3Jtc01vZHVsZSwgVW50eXBlZEZvcm1Hcm91cH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7Rm9ybWx5Q29uZmlnLCBGb3JtbHlGaWVsZENvbmZpZywgRm9ybWx5TW9kdWxlfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7TWVzc2FnZX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtCdXR0b25Nb2R1bGV9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7TWVzc2FnZXNNb2R1bGV9IGZyb20gJ3ByaW1lbmcvbWVzc2FnZXMnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbiwgZGVib3VuY2VUaW1lLCBkZWxheSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG9mLCBzd2l0Y2hNYXAsIHRhcH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge21hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQge0NvbW1vbnNTZXJ2aWNlLCBDb21tb25zU3RvcmFnZVNlcnZpY2UsIElkVHlwZSwgTG9nZ2VyU2VydmljZSwgU3R5bGVMZXZlbEVudW0sIFN0eWxlU2l6ZUVudW0sIG9iamVjdERlZXBDb3B5fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtCdXR0b25TdHlsZUJ1aWxkZXIsIEJ1dHRvblN0eWxlUm91bmRlZEVudW19IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvZm9ybS9hcGknO1xuaW1wb3J0IHtcbiAgICBDb21tb25zRm9ybWx5Rm9ybU9wdGlvbnMsXG4gICAgRWRpdG9yRGVzY3JpcHRvckluc3QsXG4gICAgRm9ybUVkaXRvclBhdGNoRmllbGRWYWx1ZU9wdHMsXG4gICAgRm9ybUVkaXRvclJlc2V0RmllbGRWYWx1ZU9wdHMsXG4gICAgRm9ybUVkaXRvclJlc2V0Rm9ybU1vZGVsT3B0cyxcbiAgICBGb3JtRWRpdG9yU2V0RmllbGRWYWx1ZU9wdHMsXG4gICAgRm9ybUVkaXRvclN1Ym1pdEV2ZW50LFxuICAgIEZvcm1FdmVudFR5cGVFbnVtLFxuICAgIEZvcm1GaWVsZEV2ZW50Q29tcG9uZW50U3VidHlwZSxcbiAgICBJRm9ybUVkaXRvckNvbXBvbmVudCxcbiAgICBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bVxufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxldmlldy9hcGknO1xuXG5pbXBvcnQge2dlbmVyYXRlQXV0b3NhdmVFZGl0b3JLZXl9IGZyb20gJy4uLy4uL2hlbHBlcnMvZWRpdG9yLWF1dG9zYXZlJztcbmltcG9ydCB7Y3JlYXRlRm9ybWx5Q29uZmlnRnJvbURlc2NyaXB0b3J9IGZyb20gJy4uLy4uL2hlbHBlcnMvZWRpdG9yLWZvcm1seSc7XG5pbXBvcnQge2dldEZvcm1FZGl0b3JJbmZvTWVzc2FnZSwgZ2V0Rm9ybUVkaXRvcldhcm5pbmdNZXNzYWdlfSBmcm9tICcuLi8uLi9oZWxwZXJzL25vdGlmaWNhdGlvbic7XG5pbXBvcnQge0VkaXRvckF1dG9TYXZlUHJldmlld01vZGVsLCBFZGl0b3JBdXRvU2F2ZVN0YXR1c30gZnJvbSAnLi4vLi4vbW9kZWxzL2VkaXRvci1hdXRvLXNhdmUtcHJldmlldy5tb2RlbCc7XG5pbXBvcnQge0Zvcm1FZGl0b3JTZXJ2aWNlLCBwcm92aWRlRm9ybUNvbXBvbmVudH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS1lZGl0b3Iuc2VydmljZSc7XG5pbXBvcnQge0VkaXRvckF1dG9TYXZlU3RhdHVzQ29tcG9uZW50fSBmcm9tICcuL2F1dG8tc2F2ZS1zdGF0dXMvYXV0by1zYXZlLXN0YXR1cy5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnbW5nLWZvcm0tZWRpdG9yJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZm9ybS1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIGltcG9ydHM6IFtGb3JtbHlNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIE1lc3NhZ2VzTW9kdWxlLCBCdXR0b25Nb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZSwgRGF0ZVBpcGUsIEVkaXRvckF1dG9TYXZlU3RhdHVzQ29tcG9uZW50XSxcbiAgICBwcm92aWRlcnM6IFtwcm92aWRlRm9ybUNvbXBvbmVudCgpXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBGb3JtRWRpdG9yQ29tcG9uZW50PEl0ZW0gPSBhbnksIFBhcmVudEl0ZW0gPSBhbnk+IGltcGxlbWVudHMgSUZvcm1FZGl0b3JDb21wb25lbnQ8SXRlbSwgUGFyZW50SXRlbT4sIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybWx5Q29uZmlnID0gaW5qZWN0KEZvcm1seUNvbmZpZyk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVTZXJ2aWNlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29tbW9ucyA9IGluamVjdChDb21tb25zU2VydmljZSk7XG4gICAgcHVibGljIHJlYWRvbmx5IGNtcFR5cGVOYW1lID0gJ0Zvcm1FZGl0b3JDb21wb25lbnQnO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyID0gaW5qZWN0KExvZ2dlclNlcnZpY2UpLmNyZWF0ZSh0aGlzLmNtcFR5cGVOYW1lKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1TZXJ2aWNlID0gaW5qZWN0KEZvcm1FZGl0b3JTZXJ2aWNlPEl0ZW0sIFBhcmVudEl0ZW0+KTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29tbW9uc1N0b3JhZ2VTZXJ2aWNlID0gaW5qZWN0KENvbW1vbnNTdG9yYWdlU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcblxuICAgIHByaXZhdGUgYXV0b1NhdmVTdG9yYWdlS2V5Q29tcEluaXQgPSB0cnVlO1xuICAgIHByaXZhdGUgYXV0b1NhdmVTdG9yYWdlS2V5ID0gY29tcHV0ZWQoKCkgPT4gZ2VuZXJhdGVBdXRvc2F2ZUVkaXRvcktleSh0aGlzLmRlc2NyaXB0b3IoKSwgdGhpcy5pdGVtKCksIHRoaXMucm91dGVyLnVybCwge2VkaXRvcklkOiB0aGlzLmVkaXRvcklkKCksIGl0ZW1JZDogdGhpcy5pdGVtSWQoKX0pKTtcblxuICAgIHB1YmxpYyBkZXNjcmlwdG9yID0gaW5wdXQucmVxdWlyZWQ8RWRpdG9yRGVzY3JpcHRvckluc3Q8SXRlbT4+KCk7XG4gICAgcHVibGljIHN1Ym1pdExvYWRpbmcgPSBpbnB1dChmYWxzZSwge3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pO1xuICAgIHB1YmxpYyBpdGVtID0gbW9kZWw8SXRlbSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBwdWJsaWMgaXNGb3JtRGlzYWJsZWQgPSBpbnB1dChmYWxzZSwge3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pO1xuICAgIHB1YmxpYyBlZGl0b3JJZCA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBwdWJsaWMgaXRlbUlkID0gaW5wdXQ8SWRUeXBlIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHB1YmxpYyBzaG93QXV0b1NhdmVTdGF0dXMgPSBpbnB1dCh0cnVlLCB7dHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSk7XG5cbiAgICAvLyBldmVudCBvdXRwdXRzXG4gICAgcHVibGljIGZvcm1TdWJtaXQgPSBvdXRwdXQ8Rm9ybUVkaXRvclN1Ym1pdEV2ZW50PEl0ZW0+PigpO1xuICAgIHB1YmxpYyB2YWx1ZUNoYW5nZSA9IG91dHB1dDxJdGVtPigpO1xuICAgIHByaXZhdGUgYXV0b1NhdmVTdGF0dXNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFZGl0b3JBdXRvU2F2ZVN0YXR1cz4oe3N0YXRlOiAnaW5pdGlhbCcsIHRpbWVzdGFtcDogbmV3IERhdGUoKX0pO1xuICAgIHB1YmxpYyBhdXRvU2F2ZVN0YXR1cyA9IG91dHB1dEZyb21PYnNlcnZhYmxlKHRoaXMuYXV0b1NhdmVTdGF0dXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpKTtcblxuICAgIC8vIGNvbnRlbnQgYW5kIHZpZXcgcXVlcmllc1xuICAgIHB1YmxpYyBzdWJtaXRCdXR0b25FbGVtZW50UmVmID0gdmlld0NoaWxkPEVsZW1lbnRSZWYgfCB1bmRlZmluZWQ+KCdzdWJtaXRCdXR0b24nKTtcbiAgICBwcml2YXRlIGZvY3VzVGhpZWZFbFJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmIHwgdW5kZWZpbmVkPignZm9jdXNUaGllZklucHV0Jyk7XG5cbiAgICAvLyBmb3JtbHkgc3BlY2lmaWNzXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZm9ybSA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHt9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9mb3JtbHlTdGF0ZURpc2FibGVkU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2Zvcm1seVN0YXRlRGlzYWJsZWQgPSB0b1NpZ25hbCh0aGlzLl9mb3JtbHlTdGF0ZURpc2FibGVkU3ViamVjdCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZm9ybWx5T3B0aW9uczogQ29tbW9uc0Zvcm1seUZvcm1PcHRpb25zPEl0ZW0+ID0ge1xuICAgICAgICBmb3JtU3RhdGU6IHtcbiAgICAgICAgICAgIGFkZDogZmFsc2UsXG4gICAgICAgICAgICBlZGl0OiBmYWxzZSxcbiAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGRpc2FibGVkJDogdGhpcy5fZm9ybWx5U3RhdGVEaXNhYmxlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKVxuICAgICAgICB9XG4gICAgfTtcbiAgICBwcml2YXRlIF9mb3JtbHlGaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXTsgLy8gaW5pdGlhbGl6ZWQgaW4gbmdPbkluaXQsIHNob3VsZCBub3QgYmUgY2hhbmdlZCBhZnRlclxuICAgIHByaXZhdGUgX2Zvcm1seUluaXRpYWxJdGVtID0ge307IC8vIGluaXRpYWxpemVkIGluIG5nT25Jbml0LCBzaG91bGQgbm90IGJlIGNoYW5nZWQgYWZ0ZXJcbiAgICBwcml2YXRlIGluaXRpYWxJdGVtSW5wdXQ6IEl0ZW0gfCB1bmRlZmluZWQ7XG5cbiAgICBwcml2YXRlIHNldHRlckZpZWxkcyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZGVzY3JpcHRvcigpLmZpZWxkcy5maWx0ZXIoZiA9PiB0eXBlb2YgZi5zZXR0ZXIgPT09ICdmdW5jdGlvbicpKTtcblxuICAgIHB1YmxpYyBmb3JtTWVzc2FnZXMgPSBzaWduYWw8TWVzc2FnZVtdPihbXSk7XG5cbiAgICAvLyBhdXRvc2F2ZVxuICAgIHB1YmxpYyByZWFkb25seSByZXN0b3JlTG9jYWxTdGF0ZUJ1dHRvblN0eWxlID0gQnV0dG9uU3R5bGVCdWlsZGVyLmNyZWF0ZShTdHlsZUxldmVsRW51bS5TdWNjZXNzLCBTdHlsZVNpemVFbnVtLlNtYWxsKS5idWlsZCgpO1xuICAgIHB1YmxpYyByZWFkb25seSBwcmV2aWV3TG9jYWxTdGF0ZUJ1dHRvblN0eWxlID0gQnV0dG9uU3R5bGVCdWlsZGVyLmNyZWF0ZShTdHlsZUxldmVsRW51bS5JbmZvLCBTdHlsZVNpemVFbnVtLlNtYWxsKS5idWlsZCgpO1xuICAgIHB1YmxpYyByZWFkb25seSBjbGVhckxvY2FsU3RhdGVCdXR0b25TdHlsZSA9IEJ1dHRvblN0eWxlQnVpbGRlci5jcmVhdGUoU3R5bGVMZXZlbEVudW0uRGFuZ2VyLCBTdHlsZVNpemVFbnVtLlNtYWxsKVxuICAgICAgICAud2l0aFJvdW5kZWRCdXR0b24oQnV0dG9uU3R5bGVSb3VuZGVkRW51bS5TUVVBUkUpXG4gICAgICAgIC53aXRoVGV4dEJ1dHRvbigpXG4gICAgICAgIC5idWlsZCgpO1xuICAgIHB1YmxpYyBhdXRvU2F2ZVJlc3RvcmUgPSBzaWduYWw8RWRpdG9yQXV0b1NhdmVQcmV2aWV3TW9kZWw8SXRlbT4gfCBudWxsPihudWxsKTtcbiAgICBwdWJsaWMgYXV0b1NhdmUgPSB0b1NpZ25hbCh0aGlzLmF1dG9TYXZlU3RhdHVzU3ViamVjdCk7XG4gICAgcHVibGljIGF1dG9TYXZlUHJldmlld0J1dHRvbkxhYmVsID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuYXV0b1NhdmUoKT8uc3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3ByZXZpZXcnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnbW5nRWRpdG9yLmF1dG9TYXZlLnJlc3RvcmUucHJldmlld0N1cnJlbnQnO1xuICAgICAgICAgICAgY2FzZSAncHJldmlld0N1cnJlbnQnOlxuICAgICAgICAgICAgICAgIHJldHVybiAnbW5nRWRpdG9yLmF1dG9TYXZlLnJlc3RvcmUucHJldmlld0F1dG9zYXZlZCc7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAnbW5nRWRpdG9yLmF1dG9TYXZlLnJlc3RvcmUucHJldmlldyc7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBwdWJsaWMgYXV0b1NhdmVTaG93UmVzdG9yZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuYXV0b1NhdmVSZXN0b3JlKCk/LnNhdmVkICE9IG51bGwpO1xuICAgIHByaXZhdGUgYXV0b1NhdmVQcmV2aWV3RGlzYWJsZWRGb3JtID0gc2lnbmFsKGZhbHNlKTtcbiAgICBwcml2YXRlIGF1dG9TYXZlRXZlbnRzU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgLy8gYXV0b2ZvY3VzXG4gICAgcHVibGljIGF1dG9mb2N1c0VuYWJsZWQgPSBjb21wdXRlZCgoKSA9PiAodGhpcy5kZXNjcmlwdG9yKCkuYXV0b2ZvY3VzT25GaWVsZCA/PyB0cnVlKSAmJiAhdGhpcy5fZm9ybWx5U3RhdGVEaXNhYmxlZCgpKTtcblxuICAgIGdldCBwYXJlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1TZXJ2aWNlLnBhcmVudDtcbiAgICB9XG5cbiAgICBnZXQgZm9ybSgpOiBGb3JtR3JvdXA8e1tLIGluIGtleW9mIEl0ZW1dOiBBYnN0cmFjdENvbnRyb2w8SXRlbVtLXT59PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9mb3JtO1xuICAgIH1cblxuICAgIGdldCBmb3JtVW5zYWZlKCk6IFVudHlwZWRGb3JtR3JvdXAge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9ybTtcbiAgICB9XG5cbiAgICBnZXQgZm9ybWx5T3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1seU9wdGlvbnM7XG4gICAgfVxuXG4gICAgZ2V0IGZvcm1seUZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1seUZpZWxkcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPbmx5IHVzZWQgZm9yIGZvcm0gaW5pdGlhbGl6YXRpb24uIEZ1cnRoZXIgY2hhbmdlcyBzaG91bGQgYmUgZG9uZSB1c2luZyB7cmVzZXRGb3JtTW9kZWx9LlxuICAgICAqL1xuICAgIGdldCBmb3JtbHlJbml0aWFsSXRlbSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Zvcm1seUluaXRpYWxJdGVtO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmZvcm1TZXJ2aWNlLmluaXQodGhpcyk7XG5cbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLml0ZW0oKTtcbiAgICAgICAgICAgIGlmIChpdGVtICE9PSB0aGlzLmluaXRpYWxJdGVtSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAvLyBuZXcgaXRlbSBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgb25lIHRoZSBmb3JtIHdhcyBpbml0aWFsaXplZCB3aXRoLiBNdXN0IHRyaWdnZXIgcmVzZXQgb2YgZm9ybSBtb2RlbC5cbiAgICAgICAgICAgICAgICAvLyBzaG91bGQgYmUgZXhlY3V0ZWQgaW4gdW50cmFja2VkIG1vZGUsIGJlY2F1c2UgaXQgdXBkYXRlcyBtdWx0aXBsZSBjb21wb25lbnRzIHVuZGVybmVhdGhcbiAgICAgICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5yZXNldEZvcm1Nb2RlbChpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9mb3JtbHlPcHRpb25zLmZvcm1TdGF0ZS5kaXNhYmxlZCA9XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Zvcm1EaXNhYmxlZCgpIHx8IHRoaXMuYXV0b1NhdmVQcmV2aWV3RGlzYWJsZWRGb3JtKCkgfHwgdGhpcy5fZm9ybWx5T3B0aW9ucy5mb3JtU3RhdGUuZGVzY3JpcHRvcj8uZGlzYWJsZWQgPT09IHRydWUgfHwgdGhpcy5fZm9ybWx5T3B0aW9ucy5mb3JtU3RhdGUuZGV0YWlscztcbiAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZm9ybWx5U3RhdGVEaXNhYmxlZFN1YmplY3QubmV4dCh0aGlzLl9mb3JtbHlPcHRpb25zLmZvcm1TdGF0ZS5kaXNhYmxlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmF1dG9mb2N1c0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmb3JtRmllbGRzID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgICAgICAgICAgICAgICAgICdpbnB1dDpub3QoW2Rpc2FibGVkXSksIHNlbGVjdDpub3QoW2Rpc2FibGVkXSksIHRleHRhcmVhOm5vdChbZGlzYWJsZWRdKSwgW3JvbGU9XCJjb21ib2JveFwiXTpub3QoW2Rpc2FibGVkXSknXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUVsID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlSW5wdXRJZHggPSBhY3RpdmVFbCA/IFsuLi5mb3JtRmllbGRzXS5maW5kSW5kZXgoZWwgPT4gYWN0aXZlRWwuaXNFcXVhbE5vZGUoZWwpKSA6IDA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVJbnB1dElkeCA8PSAwICYmIHRoaXMuZm9jdXNUaGllZkVsUmVmKCk/Lm5hdGl2ZUVsZW1lbnQuaXNFcXVhbE5vZGUoZm9ybUZpZWxkc1swXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9ubHkgaWYgZm9jdXMgb24gZm9jdXMgdGhlaWYgKG9yIG5vIGZvY3VzKSwgZ28gdGhlIG5leHQgZmllbGQgKG9mIGZpcnN0IG9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0SW5kZXggPSAoYWN0aXZlSW5wdXRJZHggPD0gMCA/IDEgOiBhY3RpdmVJbnB1dElkeCArIDEpICUgZm9ybUZpZWxkcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGRzW3RhcmdldEluZGV4XS5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgNTAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICAvLyBpbml0IGZvcm0gc3RhdGVcbiAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRvcigpLnRhYmxldmlld0VkaXRvclR5cGUgPT09IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkFkZCkge1xuICAgICAgICAgICAgdGhpcy5fZm9ybWx5T3B0aW9ucy5mb3JtU3RhdGUuYWRkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRlc2NyaXB0b3IoKS50YWJsZXZpZXdFZGl0b3JUeXBlID09PSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5FZGl0KSB7XG4gICAgICAgICAgICB0aGlzLl9mb3JtbHlPcHRpb25zLmZvcm1TdGF0ZS5lZGl0ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRlc2NyaXB0b3IoKS50YWJsZXZpZXdFZGl0b3JUeXBlID09PSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5EZXRhaWxzKSB7XG4gICAgICAgICAgICB0aGlzLl9mb3JtbHlPcHRpb25zLmZvcm1TdGF0ZS5kZXRhaWxzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9mb3JtbHlPcHRpb25zLmZvcm1TdGF0ZS5kZXNjcmlwdG9yID0gdGhpcy5kZXNjcmlwdG9yKCk7XG5cbiAgICAgICAgLy8gaW5pdCBmaWVsZHMgZm9yIGZvcm1seVxuICAgICAgICB0aGlzLl9mb3JtbHlGaWVsZHMgPSBjcmVhdGVGb3JtbHlDb25maWdGcm9tRGVzY3JpcHRvcih0aGlzLmRlc2NyaXB0b3IoKSwgdGhpcy5mb3JtbHlDb25maWcsIHRoaXMpO1xuXG4gICAgICAgIC8vIGludCBmb3JtIG1vZGVsIChvbmx5IGluaXRpYWwsIG5vIGZ1cnRoZXIgY2hhbmdlcyB0byBmb3JtTW9kZWwgc2hvdWxkIGJlIGFsbG93ZWQhKVxuICAgICAgICB0aGlzLmluaXRpYWxJdGVtSW5wdXQgPSB0aGlzLml0ZW0oKTtcbiAgICAgICAgdGhpcy5fZm9ybWx5SW5pdGlhbEl0ZW0gPSB0aGlzLmdldEZvcm1Nb2RlbEZyb21JdGVtKHRoaXMuaXRlbSgpKTtcblxuICAgICAgICAvLyBoYW5kbGUgbG9jYWxpemF0aW9ucyBlZGl0L2FkZCBtZXNzYWdlXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRvcigpLmlzTG9jYWxpemVkICYmXG4gICAgICAgICAgICAodGhpcy5kZXNjcmlwdG9yKCkudGFibGV2aWV3RWRpdG9yVHlwZSA9PT0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uQWRkIHx8IHRoaXMuZGVzY3JpcHRvcigpLnRhYmxldmlld0VkaXRvclR5cGUgPT09IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkVkaXQpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5mb3JtTWVzc2FnZXMuc2V0KFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmZvcm1NZXNzYWdlcygpLFxuICAgICAgICAgICAgICAgIGdldEZvcm1FZGl0b3JJbmZvTWVzc2FnZSh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UsICdtbmdFZGl0b3IubG9jYWxpemF0aW9ucy5hZGRJbkRlZmF1bHRMYW5ndWFnZVRpdGxlJywgJ21uZ0VkaXRvci5sb2NhbGl6YXRpb25zLmFkZEluRGVmYXVsdExhbmd1YWdlRGVzY3JpcHRpb24nLCB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRMYW5ndWFnZTogdGhpcy5jb21tb25zLmdldERlZmF1bHRMb2NhbGUoKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVtaXQgbGlmZWN5Y2xlIGV2ZW50XG4gICAgICAgIHRoaXMuZGVzY3JpcHRvcigpLm5leHRFdmVudChGb3JtRXZlbnRUeXBlRW51bS5Db21wb25lbnRMaWZlY3ljbGUsIHRoaXMgYXMgSUZvcm1FZGl0b3JDb21wb25lbnQ8YW55Piwge1xuICAgICAgICAgICAgZXZlbnRTdWJ0eXBlOiBGb3JtRmllbGRFdmVudENvbXBvbmVudFN1YnR5cGUuT05fSU5JVFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9mb3JtLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDEwMCksXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5fZm9ybS5nZXRSYXdWYWx1ZSgpKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh2ID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlPy5lbWl0KHYpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzY3JpcHRvcigpLm5leHRFdmVudChGb3JtRXZlbnRUeXBlRW51bS5WYWx1ZUNoYW5nZSwgdGhpcyBhcyBJRm9ybUVkaXRvckNvbXBvbmVudDxhbnk+LCB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2LFxuICAgICAgICAgICAgICAgICAgICBmb3JtVmFsdWU6ICgpID0+IHRoaXMuZ2V0Rm9ybVZhbHVlKClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgLy8gbWFyayBmb3JtIGFzIHByaXN0aW5lLCBzaG91bGQgYmUgZG9uZSBpbiBuZXh0IGV2ZW50IGhvb2sgdG8gYWxsb3cgZm9ybWx5IHRvIGluaXRpYWxpemUgZmlyc3RcbiAgICAgICAgdGhpcy5fZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICB0aGlzLmF1dG9TYXZlTG9hZFNhdmVkRnJvbVN0b3JhZ2UoKTtcbiAgICAgICAgdGhpcy5hdXRvU2F2ZVN0YXJ0RXZlbnRDaGFuZ2VMaXN0ZW4odGhpcy5hdXRvU2F2ZVN0b3JhZ2VLZXlDb21wSW5pdCk7XG4gICAgICAgIHRoaXMuYXV0b1NhdmVTdG9yYWdlS2V5Q29tcEluaXQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuYXV0b1NhdmVTdG9wVmFsdWVDaGFuZ2VMaXN0ZW4oKTtcbiAgICAgICAgLy8gZW1pdCBsaWZlY3ljbGUgZXZlbnRcbiAgICAgICAgdGhpcy5kZXNjcmlwdG9yKCkubmV4dEV2ZW50KEZvcm1FdmVudFR5cGVFbnVtLkNvbXBvbmVudExpZmVjeWNsZSwgdGhpcyBhcyBJRm9ybUVkaXRvckNvbXBvbmVudDxhbnk+LCB7XG4gICAgICAgICAgICBldmVudFN1YnR5cGU6IEZvcm1GaWVsZEV2ZW50Q29tcG9uZW50U3VidHlwZS5PTl9ERVNUUk9ZXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdWJtaXQoKSB7XG4gICAgICAgIHRoaXMuc3VibWl0QnV0dG9uRWxlbWVudFJlZigpPy5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHB1YmxpYyBvblN1Ym1pdChldmVudDogRXZlbnQpIHtcbiAgICAgICAgdGhpcy5fZm9ybWx5T3B0aW9ucy5mb3JtU3RhdGUuc3VibWl0dGVkT24gPSBEYXRlLm5vdygpO1xuICAgICAgICB0aGlzLmZvcm1NZXNzYWdlcy5zZXQoW10pO1xuXG4gICAgICAgIGNvbnN0IGZvcm1TdWJtaXRJdGVtID0gdGhpcy5nZXRGb3JtVmFsdWUoKTtcbiAgICAgICAgaWYgKHRoaXMuX2Zvcm0udmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybVN1Ym1pdC5lbWl0KHtcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiB0cnVlLFxuICAgICAgICAgICAgICAgIGZvcm1JdGVtOiBmb3JtU3VibWl0SXRlbVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0b3IoKS5uZXh0RXZlbnQoRm9ybUV2ZW50VHlwZUVudW0uU3VibWl0LCB0aGlzIGFzIElGb3JtRWRpdG9yQ29tcG9uZW50PGFueT4sIHtcbiAgICAgICAgICAgICAgICBzdWJtaXRWYWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBzdWJtaXRWYWx1ZTogZm9ybVN1Ym1pdEl0ZW1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5vbkF1dG9TYXZlRGlzbWlzcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZmluZCBhbmQgbWFyayBpbnZhbGlkIHRhYnNcbiAgICAgICAgICAgIGNvbnN0IGZvcm1GaWVsZHMgPSB0aGlzLl9mb3JtbHlGaWVsZHM7XG4gICAgICAgICAgICBpZiAoZm9ybUZpZWxkc1swXS50eXBlID09PSAndGFicycgJiYgZm9ybUZpZWxkc1swXS5maWVsZEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB0YWIgb2YgZm9ybUZpZWxkc1swXS5maWVsZEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2Zvcm1seU9wdGlvbnMuZm9ybVN0YXRlWyd0YWJfJyArICh0YWIuaWQgPyB0YWIuaWQgOiAodGFiLmtleSA/PyAnJykpICsgJ19pbnZhbGlkJ10gPSB0aGlzLmlzQW55RmllbGRJbnZhbGlkKHRhYi5maWVsZEdyb3VwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGV2ZW50OiBGb3JtRWRpdG9yU3VibWl0RXZlbnQ8SXRlbT4gPSB7c3VjY2VzczogZmFsc2UsIGZvcm1JdGVtOiBmb3JtU3VibWl0SXRlbX07XG4gICAgICAgICAgICBldmVudC5zdWNjZXNzID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmZvcm1NZXNzYWdlcygpLnB1c2goZ2V0Rm9ybUVkaXRvcldhcm5pbmdNZXNzYWdlKHRoaXMudHJhbnNsYXRlU2VydmljZSwgJ21uZ0VkaXRvci5pbnZhbGlkRm9ybVRvYXN0VGl0bGUnLCAnbW5nRWRpdG9yLmludmFsaWRGb3JtVG9hc3RNZXNzYWdlJykpO1xuXG4gICAgICAgICAgICB0aGlzLmZvcm1TdWJtaXQuZW1pdChldmVudCk7XG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0b3IoKS5uZXh0RXZlbnQoRm9ybUV2ZW50VHlwZUVudW0uU3VibWl0LCB0aGlzIGFzIElGb3JtRWRpdG9yQ29tcG9uZW50PGFueT4sIHtcbiAgICAgICAgICAgICAgICBzdWJtaXRWYWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgc3VibWl0VmFsdWU6IGZvcm1TdWJtaXRJdGVtXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGb3JtVmFsdWUob3B0cz86IHtvbWl0U2V0dGVycz86IGJvb2xlYW59KTogSXRlbSB7XG4gICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IG9iamVjdERlZXBDb3B5KHRoaXMuX2Zvcm0uZ2V0UmF3VmFsdWUoKSwge21hcEdldHRlcnNUb1Byb3BlcnRpZXM6IHRydWV9KTtcblxuICAgICAgICBpZiAob3B0cz8ub21pdFNldHRlcnMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGVyRmllbGRzKCkuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BsaXRQYXRoID0gZmllbGQucHJvcGVydHkuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICBsZXQgZmllbGRWYWx1ZSA9IGZvcm1WYWx1ZTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwbGl0UGF0aC5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFN1YlBhdGggPSBzcGxpdFBhdGhbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZmllbGRWYWx1ZVtjdXJyZW50U3ViUGF0aF0gIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZFZhbHVlW2N1cnJlbnRTdWJQYXRoXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgZmllbGRWYWx1ZSA9IGZpZWxkVmFsdWVbY3VycmVudFN1YlBhdGhdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGZpZWxkVmFsdWUgPSBmaWVsZFZhbHVlW3NwbGl0UGF0aFtzcGxpdFBhdGgubGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgICAgIGZpZWxkLnNldHRlcj8uKGZvcm1WYWx1ZSwgZmllbGRWYWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtVmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0Rm9ybU1vZGVsKGl0ZW0/OiBJdGVtLCBvcHRzPzogRm9ybUVkaXRvclJlc2V0Rm9ybU1vZGVsT3B0cykge1xuICAgICAgICAvLyBoYXZlIHRvIHVzZSBmb3JtbHkncyByZXNldCBtb2RlbCwgYmVjYXVzZSBfZm9ybS5yZXNldCgpIGRvZXMgbm90IHJlc2V0IHRoZSB2YWx1ZXMgY29ycmVjdGx5XG4gICAgICAgIHRoaXMuX2Zvcm1seU9wdGlvbnMucmVzZXRNb2RlbD8uKHRoaXMuZ2V0Rm9ybU1vZGVsRnJvbUl0ZW0oaXRlbSkpO1xuXG4gICAgICAgIGlmIChvcHRzPy5tYXJrQXNQcmlzdGluZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIC8vIG1hcmsgZm9ybSBhcyBwcmlzdGluZSwgc2hvdWxkIGJlIGRvbmUgaW4gbmV4dCBldmVudCBob29rIHRvIGFsbG93IGZvcm1seSB0byBpbml0aWFsaXplIGZpcnN0XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mb3JtLm1hcmtBc1ByaXN0aW5lKHtvbmx5U2VsZjogb3B0cz8ub25seVNlbGZ9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldEZpZWxkKGtleToga2V5b2YgSXRlbSkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRGaWVsZFVuc2FmZShrZXkgYXMgc3RyaW5nKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RmllbGRVbnNhZmUoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZEZvcm1GaWVsZCh0aGlzLl9mb3JtLCBrZXkuc3BsaXQoJy4nKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEZpZWxkVmFsdWU8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBJdGVtPihrZXk6IFByb3BlcnR5LCB2YWx1ZTogSXRlbVtQcm9wZXJ0eV0sIG9wdHM/OiBGb3JtRWRpdG9yU2V0RmllbGRWYWx1ZU9wdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0RmllbGRWYWx1ZVVuc2FmZShrZXkgYXMgc3RyaW5nLCB2YWx1ZSwgb3B0cyk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEZpZWxkVmFsdWVVbnNhZmUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIG9wdHM/OiBGb3JtRWRpdG9yU2V0RmllbGRWYWx1ZU9wdHMpIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0RmllbGRVbnNhZmUoa2V5KTtcbiAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUodmFsdWUsIG9wdHMpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci53YXJuKGBWYWx1ZSB3YXMgbm90IHNldCwgYmVjYXVzZSBmaWVsZCAke2tleX0gd2FzIG5vdCBmb3VuZC5gKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBwYXRjaEZpZWxkVmFsdWU8UHJvcGVydHkgZXh0ZW5kcyBrZXlvZiBJdGVtPihrZXk6IFByb3BlcnR5LCB2YWx1ZTogSXRlbVtQcm9wZXJ0eV0sIG9wdHM/OiBGb3JtRWRpdG9yUGF0Y2hGaWVsZFZhbHVlT3B0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXRjaEZpZWxkVmFsdWVVbnNhZmUoa2V5IGFzIHN0cmluZywgdmFsdWUsIG9wdHMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBwYXRjaEZpZWxkVmFsdWVVbnNhZmUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIG9wdHM/OiBGb3JtRWRpdG9yUGF0Y2hGaWVsZFZhbHVlT3B0cykge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRGaWVsZFVuc2FmZShrZXkpO1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgICAgY29udHJvbC5wYXRjaFZhbHVlKHZhbHVlLCBvcHRzKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihgVmFsdWUgd2FzIG5vdCBzZXQsIGJlY2F1c2UgZmllbGQgJHtrZXl9IHdhcyBub3QgZm91bmQuYCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXRGaWVsZFZhbHVlPFByb3BlcnR5IGV4dGVuZHMga2V5b2YgSXRlbT4oa2V5OiBQcm9wZXJ0eSwgdmFsdWU/OiBJdGVtW1Byb3BlcnR5XSwgb3B0cz86IEZvcm1FZGl0b3JSZXNldEZpZWxkVmFsdWVPcHRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc2V0RmllbGRWYWx1ZVVuc2FmZShrZXkgYXMgc3RyaW5nLCB2YWx1ZSwgb3B0cyk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0RmllbGRWYWx1ZVVuc2FmZShrZXk6IHN0cmluZywgdmFsdWU/OiBhbnksIG9wdHM/OiBGb3JtRWRpdG9yUmVzZXRGaWVsZFZhbHVlT3B0cykge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRGaWVsZFVuc2FmZShrZXkpO1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgICAgY29udHJvbC5yZXNldCh2YWx1ZSwgb3B0cyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9nZ2VyLndhcm4oYFZhbHVlIHdhcyBub3Qgc2V0LCBiZWNhdXNlIGZpZWxkICR7a2V5fSB3YXMgbm90IGZvdW5kLmApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzdG9yZXMgdGhlIHNhdmVkIGxvY2FsIHN0YXRlLlxuICAgICAqIElmIGxvY2FsIHN0b3JhZ2Uga2V5cyBleGlzdCBmb3IgbG9jYWwgc3RhdGUgYW5kIGxvY2FsIHRpbWVzdGFtcCwgcmVzdG9yZSB0aGVpciBjb3JyZXNwb25kaW5nIHZhbHVlcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25BdXRvU2F2ZVJlc3RvcmUoKSB7XG4gICAgICAgIGNvbnN0IHJlc3RvcmUgPSB0aGlzLmF1dG9TYXZlUmVzdG9yZSgpO1xuICAgICAgICBpZiAocmVzdG9yZT8uc2F2ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVTdG9wVmFsdWVDaGFuZ2VMaXN0ZW4oKTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRGb3JtTW9kZWwocmVzdG9yZS5zYXZlZCk7XG4gICAgICAgICAgICB0aGlzLmF1dG9TYXZlUmVzdG9yZS5zZXQobnVsbCk7XG4gICAgICAgICAgICB0aGlzLmF1dG9TYXZlU3RhdHVzU3ViamVjdC5uZXh0KHtzdGF0ZTogJ3Jlc3RvcmVkJywgdGltZXN0YW1wOiByZXN0b3JlLnNhdmVkQXQgPz8gbmV3IERhdGUoKX0pO1xuICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVByZXZpZXdEaXNhYmxlZEZvcm0uc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVTdGFydEV2ZW50Q2hhbmdlTGlzdGVuKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcmV2aWV3cyB0aGUgc2F2ZWQgbG9jYWwgc3RhdGUuXG4gICAgICogSWYgbG9jYWwgc3RvcmFnZSBrZXlzIGV4aXN0IGZvciBsb2NhbCBzdGF0ZSBhbmQgbG9jYWwgdGltZXN0YW1wLCByZXN0b3JlIHRoZWlyIGNvcnJlc3BvbmRpbmcgdmFsdWVzLlxuICAgICAqL1xuICAgIHB1YmxpYyBvbkF1dG9TYXZlUHJldmlldygpIHtcbiAgICAgICAgaWYgKCF0aGlzLmF1dG9TYXZlUmVzdG9yZSgpPy5zYXZlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hdXRvU2F2ZVN0b3BWYWx1ZUNoYW5nZUxpc3RlbigpO1xuICAgICAgICB0aGlzLmF1dG9TYXZlUHJldmlld0Rpc2FibGVkRm9ybS5zZXQodHJ1ZSk7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5hdXRvU2F2ZVN0YXR1c1N1YmplY3QudmFsdWUuc3RhdGU7XG4gICAgICAgIGlmIChzdGF0ZSAhPT0gJ3ByZXZpZXcnICYmIHN0YXRlICE9PSAncHJldmlld0N1cnJlbnQnKSB7XG4gICAgICAgICAgICAvLyBtdXN0IHN0b3JlIG9yaWdpbmFsIHZhbHVlIGZyb20gY3VycmVudCB2YWx1ZSBmb3JtXG4gICAgICAgICAgICB0aGlzLmF1dG9TYXZlUmVzdG9yZS51cGRhdGUoaSA9PiAoey4uLmksIG9yaWdpbmFsOiB0aGlzLmdldEZvcm1WYWx1ZSgpfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVzdG9yZSA9IHRoaXMuYXV0b1NhdmVSZXN0b3JlKCk7XG4gICAgICAgIGlmIChzdGF0ZSA9PT0gJ3ByZXZpZXcnICYmIHJlc3RvcmU/Lm9yaWdpbmFsKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0Rm9ybU1vZGVsKHJlc3RvcmUub3JpZ2luYWwpO1xuICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVN0YXR1c1N1YmplY3QubmV4dCh7c3RhdGU6ICdwcmV2aWV3Q3VycmVudCd9KTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSAhPT0gJ3ByZXZpZXcnICYmIHJlc3RvcmU/LnNhdmVkKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0Rm9ybU1vZGVsKHJlc3RvcmUuc2F2ZWQpO1xuICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVN0YXR1c1N1YmplY3QubmV4dCh7c3RhdGU6ICdwcmV2aWV3JywgdGltZXN0YW1wOiByZXN0b3JlLnNhdmVkQXQgPz8gbmV3IERhdGUoKX0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlcyBsb2NhbCBzdGF0ZSBmcm9tIGxvY2FsIHN0b3JhZ2UuXG4gICAgICogSWYgbG9jYWwgc3RvcmFnZSBrZXlzIGV4aXN0IGZvciBsb2NhbCBzdGF0ZSBhbmQgbG9jYWwgdGltZXN0YW1wLCByZW1vdmUgdGhlaXIgY29ycmVzcG9uZGluZyB2YWx1ZXMuXG4gICAgICovXG4gICAgcHVibGljIG9uQXV0b1NhdmVEaXNtaXNzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hdXRvU2F2ZVN0b3JhZ2VLZXkoKSkge1xuICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVN0b3BWYWx1ZUNoYW5nZUxpc3RlbigpO1xuICAgICAgICAgICAgY29uc3QgcmVzdG9yZSA9IHRoaXMuYXV0b1NhdmVSZXN0b3JlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvU2F2ZVN0YXR1c1N1YmplY3QudmFsdWUuc3RhdGUgPT09ICdwcmV2aWV3JyAmJiByZXN0b3JlPy5vcmlnaW5hbCkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRGb3JtTW9kZWwocmVzdG9yZS5vcmlnaW5hbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVN0YXR1c1N1YmplY3QubmV4dCh7c3RhdGU6ICdpbml0aWFsJywgdGltZXN0YW1wOiBuZXcgRGF0ZSgpfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbW1vbnNTdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKHRoaXMuY21wVHlwZU5hbWUsIHRoaXMuYXV0b1NhdmVTdG9yYWdlS2V5KCkpO1xuICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVJlc3RvcmUuc2V0KG51bGwpO1xuICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVByZXZpZXdEaXNhYmxlZEZvcm0uc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMuYXV0b1NhdmVTdGFydEV2ZW50Q2hhbmdlTGlzdGVuKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZvcm1Nb2RlbEZyb21JdGVtKGl0ZW06IEl0ZW0gfCB1bmRlZmluZWQpOiBhbnkge1xuICAgICAgICBjb25zdCBmb3JtTW9kZWwgPSAob2JqZWN0RGVlcENvcHkoaXRlbSwge21hcEdldHRlcnNUb1Byb3BlcnRpZXM6IHRydWV9KSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA/PyB7fTtcblxuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gdGhpcy5kZXNjcmlwdG9yKCk7XG4gICAgICAgIGRlc2NyaXB0b3IuZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgaWYgKGZpZWxkLmdldHRlciAmJiBmb3JtTW9kZWwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGxpdFBhdGggPSBmaWVsZC5wcm9wZXJ0eS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50T2JqZWN0ID0gZm9ybU1vZGVsO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdFBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFN1YlBhdGggPSBzcGxpdFBhdGhbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSBzcGxpdFBhdGgubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE9iamVjdFtjdXJyZW50U3ViUGF0aF0gPSBmaWVsZC5nZXR0ZXIoZm9ybU1vZGVsPy5bZmllbGQucHJvcGVydHkgYXMga2V5b2Ygb2JqZWN0XSwgZm9ybU1vZGVsIGFzIEl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyZW50T2JqZWN0W2N1cnJlbnRTdWJQYXRoXSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50T2JqZWN0W2N1cnJlbnRTdWJQYXRoXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50T2JqZWN0ID0gY3VycmVudE9iamVjdFtjdXJyZW50U3ViUGF0aF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmb3JtTW9kZWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kRm9ybUZpZWxkKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwga2V5UGF0aDogc3RyaW5nW10pOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsIHtcbiAgICAgICAgaWYgKGtleVBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5UGF0aC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250cm9sLmdldChrZXlQYXRoWzBdKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmV4dENvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgPSBudWxsO1xuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICAgICAgbmV4dENvbnRyb2wgPSBjb250cm9sLmdldChrZXlQYXRoWzBdKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSAra2V5UGF0aFswXTtcbiAgICAgICAgICAgIGlmICghaXNOYU4oaWR4KSkge1xuICAgICAgICAgICAgICAgIG5leHRDb250cm9sID0gY29udHJvbC5hdChpZHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5maW5kRm9ybUZpZWxkKG5leHRDb250cm9sISwga2V5UGF0aC5zbGljZSgxKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0FueUZpZWxkSW52YWxpZChmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXSk6IGJvb2xlYW4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgICAgbGV0IGZpZWxkSW52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQuZmllbGRHcm91cCkpIHtcbiAgICAgICAgICAgICAgICBmaWVsZEludmFsaWQgPSB0aGlzLmlzQW55RmllbGRJbnZhbGlkKGZpZWxkLmZpZWxkR3JvdXApO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmllbGQudHlwZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBmaWVsZEludmFsaWQgPSAhZmllbGQuZm9ybUNvbnRyb2w/LnZhbGlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpZWxkSW52YWxpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGF1dG9TYXZlU3RhcnRFdmVudENoYW5nZUxpc3Rlbihpbml0ID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRlc2NyaXB0b3IoKS5hdXRvU2F2ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmF1dG9TYXZlRXZlbnRzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmF1dG9TYXZlRXZlbnRzU3Vic2NyaXB0aW9uID0gb2Yodm9pZCAwKVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICBkZWxheShpbml0ID8gMCA6IDUwMCksIC8vIGRlbGF5IGluaXRpYWwgZXZlbnQgbGlzdGVuaW5nIGZvciBhbGwgdGhlIGluaXRpYWxpemF0aW9ucyB0byB0YWtlIHBsYWNlXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl9mb3JtLnZhbHVlQ2hhbmdlcyksXG4gICAgICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgyNTApLFxuICAgICAgICAgICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgICAgICAgICAvLyBza2lwIGZpcnN0IG9uZSBvbiBpbml0XG4gICAgICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5hdXRvU2F2ZVN0YXR1c1N1YmplY3QudmFsdWUuc3RhdGUgIT09ICdzYXZlZCcgJiYgdGhpcy5hdXRvU2F2ZVN0YXR1c1N1YmplY3QudmFsdWUuc3RhdGUgIT09ICdwcmV2aWV3JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmF1dG9TYXZlU3RhdHVzU3ViamVjdC5uZXh0KHsuLi50aGlzLmF1dG9TYXZlU3RhdHVzU3ViamVjdC52YWx1ZSwgc3RhdGU6ICdzYXZpbmcnfSk7XG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoNzUwKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVNhdmVUb1N0b3JhZ2UoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXV0b1NhdmVTdG9wVmFsdWVDaGFuZ2VMaXN0ZW4oKSB7XG4gICAgICAgIHRoaXMuYXV0b1NhdmVFdmVudHNTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuYXV0b1NhdmVFdmVudHNTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2F2ZXMgdGhlIGZvcm0gdmFsdWUgdG8gbG9jYWxTdG9yYWdlIGlmIGF1dG9TYXZlIGlzIGVuYWJsZWQgYW5kIHRoZSByZXF1aXJlZCBrZXlzIGFyZSBkZWZpbmVkLlxuICAgICAqIEByZXR1cm5zIHt2b2lkfVxuICAgICAqL1xuICAgIHByaXZhdGUgYXV0b1NhdmVTYXZlVG9TdG9yYWdlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kZXNjcmlwdG9yKCkuYXV0b1NhdmUgIT09IHRydWUgfHwgdGhpcy5hdXRvU2F2ZVN0YXR1c1N1YmplY3QudmFsdWUuc3RhdGUgPT09ICdwcmV2aWV3JyB8fCB0aGlzLmF1dG9TYXZlU3RhdHVzU3ViamVjdC52YWx1ZS5zdGF0ZSA9PT0gJ3ByZXZpZXdDdXJyZW50Jykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jb21tb25zU3RvcmFnZVNlcnZpY2Uuc2V0SXRlbTxFZGl0b3JBdXRvU2F2ZVByZXZpZXdNb2RlbDxJdGVtPj4odGhpcy5jbXBUeXBlTmFtZSwgdGhpcy5hdXRvU2F2ZVN0b3JhZ2VLZXkoKSwge3NhdmVkOiB0aGlzLmdldEZvcm1WYWx1ZSgpLCBzYXZlZEF0OiBuZXcgRGF0ZSgpfSk7XG4gICAgICAgIHRoaXMuYXV0b1NhdmVTdGF0dXNTdWJqZWN0Lm5leHQoe3N0YXRlOiAnc2F2ZWQnLCB0aW1lc3RhbXA6IG5ldyBEYXRlKCl9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkcyB0aGUgdmFsdWUgZnJvbSB0aGUgbG9jYWwgc3RvcmFnZSBpZiBhdmFpbGFibGVcbiAgICAgKi9cbiAgICBwcml2YXRlIGF1dG9TYXZlTG9hZFNhdmVkRnJvbVN0b3JhZ2UoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHthdXRvU2F2ZSwgbW9kZWx9ID0gdGhpcy5kZXNjcmlwdG9yKCk7XG4gICAgICAgIGlmIChhdXRvU2F2ZSAmJiBtb2RlbC5pMThuQmFzZUtleSkge1xuICAgICAgICAgICAgdGhpcy5hdXRvU2F2ZVJlc3RvcmUuc2V0KHRoaXMuY29tbW9uc1N0b3JhZ2VTZXJ2aWNlLmdldEl0ZW08RWRpdG9yQXV0b1NhdmVQcmV2aWV3TW9kZWw8SXRlbT4+KHRoaXMuY21wVHlwZU5hbWUsIHRoaXMuYXV0b1NhdmVTdG9yYWdlS2V5KCkpID8/IG51bGwpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiQGlmIChhdXRvU2F2ZVNob3dSZXN0b3JlKCkpIHtcbiAgICA8cC1tZXNzYWdlcyBzZXZlcml0eT1cIndhcm5cIj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtZ3Jvdy0xIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgIDxoNiBjbGFzcz1cIm0tMCBwLTBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGVtIGNsYXNzPVwicGkgcGktc2F2ZSBtci00XCI+PC9lbT5cbiAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICdtbmdFZGl0b3IuYXV0b1NhdmUucmVzdG9yZS50aXRsZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZToge2xhc3RDaGFuZ2U6IGF1dG9TYXZlUmVzdG9yZSgpPy5zYXZlZEF0ID8gKGF1dG9TYXZlUmVzdG9yZSgpPy5zYXZlZEF0ISB8IGRhdGU6ICdkZC4gTU0uIFlZWVkgSEg6bW06c3MnKSA6ICcnfVxuICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIDwvaDY+XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uPVwicGkgcGktc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidtbmdFZGl0b3IuYXV0b1NhdmUucmVzdG9yZS5yZXN0b3JlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVDbGFzc109XCJyZXN0b3JlTG9jYWxTdGF0ZUJ1dHRvblN0eWxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQXV0b1NhdmVSZXN0b3JlKClcIj48L3AtYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGF1dG9TYXZlKCk/LnN0YXRlICE9PSAncHJldmlldycgfHwgYXV0b1NhdmUoKT8uc3RhdGUgIT09ICdwcmV2aWV3Q3VycmVudCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS1leWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImF1dG9TYXZlUHJldmlld0J1dHRvbkxhYmVsKCkgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZUNsYXNzXT1cInByZXZpZXdMb2NhbFN0YXRlQnV0dG9uU3R5bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkF1dG9TYXZlUHJldmlldygpXCI+PC9wLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8cC1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249XCJwaSBwaS10aW1lc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIidtbmdFZGl0b3IuYXV0b1NhdmUucmVzdG9yZS5kaXNtaXNzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVDbGFzc109XCJjbGVhckxvY2FsU3RhdGVCdXR0b25TdHlsZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25BdXRvU2F2ZURpc21pc3MoKVwiPjwvcC1idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L3AtbWVzc2FnZXM+XG59XG5cbkBpZiAoYXV0b2ZvY3VzRW5hYmxlZCgpKSB7XG4gICAgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiAjZm9jdXNUaGllZklucHV0IHRhYmluZGV4PVwiMFwiIC8+XG59XG48Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAobmdTdWJtaXQpPVwib25TdWJtaXQoJGV2ZW50KVwiPlxuICAgIDxmb3JtbHktZm9ybSBbZm9ybV09XCJmb3JtXCIgW2ZpZWxkc109XCJmb3JtbHlGaWVsZHNcIiBbb3B0aW9uc109XCJmb3JtbHlPcHRpb25zXCIgW21vZGVsXT1cImZvcm1seUluaXRpYWxJdGVtXCI+PC9mb3JtbHktZm9ybT5cbiAgICA8YnV0dG9uICNzdWJtaXRCdXR0b24gcEJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJoaWRkZW5cIiBbZGlzYWJsZWRdPVwiZm9ybS5kaXNhYmxlZFwiIFtsb2FkaW5nXT1cInN1Ym1pdExvYWRpbmcoKVwiIGxvYWRpbmdJY29uPVwicGkgcGktc3BpbiBwaS1zcGlubmVyXCI+PC9idXR0b24+XG48L2Zvcm0+XG48cC1tZXNzYWdlcyBbdmFsdWVdPVwiZm9ybU1lc3NhZ2VzKClcIiBbZW5hYmxlU2VydmljZV09XCJmYWxzZVwiPjwvcC1tZXNzYWdlcz5cblxuQGlmIChkZXNjcmlwdG9yKCkuYXV0b1NhdmUgJiYgc2hvd0F1dG9TYXZlU3RhdHVzKCkpIHtcbiAgICA8bW5nLWVkaXRvci1hdXRvLXNhdmUtc3RhdHVzIFtzdGF0dXNdPVwiYXV0b1NhdmUoKVwiPjwvbW5nLWVkaXRvci1hdXRvLXNhdmUtc3RhdHVzPlxufVxuIl19
|
|
@@ -54,11 +54,11 @@ export class FormlyFieldActionComponent extends ACommonsFormlyFieldType {
|
|
|
54
54
|
this.actionMessage = res.message;
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.
|
|
58
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.
|
|
57
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FormlyFieldActionComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
58
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.12", type: FormlyFieldActionComponent, isStandalone: true, selector: "mng-formly-field-action", usesInheritance: true, ngImport: i0, template: "<div class=\"flex\">\n <button\n type=\"button\"\n pButton\n pRipple\n [icon]=\"$any(descriptor.button.icon)\"\n [label]=\"$any(descriptor.button.label === null ? null : descriptor.button.label ?? props!.label) | translate\"\n [pTooltip]=\"$any(descriptor.button.tooltip) | translate\"\n [disabled]=\"formControl.disabled\"\n (click)=\"onClick()\"\n [class]=\"buttonClass + (actionMessage ? ' mr-2' : '')\"></button>\n @if (actionMessage) {\n <p-message [text]=\"actionMessage.content\" [severity]=\"actionMessage.severity ?? 'success'\"></p-message>\n }\n</div>\n", dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "directive", type: i1.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading", "severity", "raised", "rounded", "text", "outlined", "size", "plain"] }, { kind: "ngmodule", type: RippleModule }, { kind: "directive", type: i2.Ripple, selector: "[pRipple]" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: TooltipModule }, { kind: "directive", type: i4.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "ngmodule", type: MessageModule }, { kind: "component", type: i5.UIMessage, selector: "p-message", inputs: ["severity", "text", "escape", "style", "styleClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
59
59
|
}
|
|
60
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.
|
|
60
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: FormlyFieldActionComponent, decorators: [{
|
|
61
61
|
type: Component,
|
|
62
62
|
args: [{ standalone: true, selector: 'mng-formly-field-action', imports: [ButtonModule, RippleModule, TranslateModule, TooltipModule, JsonPipe, MessageModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex\">\n <button\n type=\"button\"\n pButton\n pRipple\n [icon]=\"$any(descriptor.button.icon)\"\n [label]=\"$any(descriptor.button.label === null ? null : descriptor.button.label ?? props!.label) | translate\"\n [pTooltip]=\"$any(descriptor.button.tooltip) | translate\"\n [disabled]=\"formControl.disabled\"\n (click)=\"onClick()\"\n [class]=\"buttonClass + (actionMessage ? ' mr-2' : '')\"></button>\n @if (actionMessage) {\n <p-message [text]=\"actionMessage.content\" [severity]=\"actionMessage.severity ?? 'success'\"></p-message>\n }\n</div>\n" }]
|
|
63
63
|
}] });
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWZpZWxkLWFjdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi90YWJsZXZpZXcvc3JjL2VkaXRvci9jb21wb25lbnRzL2Zvcm1seS9maWVsZHMvZm9ybWx5LWZpZWxkLWFjdGlvbi9mb3JtbHktZmllbGQtYWN0aW9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3RhYmxldmlldy9zcmMvZWRpdG9yL2NvbXBvbmVudHMvZm9ybWx5L2ZpZWxkcy9mb3JtbHktZmllbGQtYWN0aW9uL2Zvcm1seS1maWVsZC1hY3Rpb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3pDLE9BQU8sRUFBQyx1QkFBdUIsRUFBRSxTQUFTLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBR3BGLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUMsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDOUMsT0FBTyxFQUFlLFlBQVksRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUloRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSx5Q0FBeUMsQ0FBQzs7Ozs7OztBQVNoRixNQUFNLE9BQU8sMEJBQXdDLFNBQVEsdUJBQThFO0lBUDNJOztRQVFXLGdCQUFXLEdBQUcsa0JBQWtCLENBQUM7S0ErQzNDO0lBekNZLFFBQVE7UUFDYixLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakUsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsV0FBVyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELE9BQU87UUFDSCxJQUFJLENBQUMsYUFBYSxHQUFHLFNBQVMsQ0FBQztRQUUvQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3pDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixtQkFBbUIsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLG1CQUF3RDtZQUN4RixNQUFNLEVBQUU7Z0JBQ0osS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNqQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQWdDO2dCQUNsRCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQThFO2dCQUN6RixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQ3pCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztnQkFDckIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2FBQ3BCO1NBQ0osQ0FBQyxDQUFDO1FBRUgsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNULElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDL0UsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0IsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRU8sYUFBYSxDQUFDLEdBQXNCO1FBQ3hDLElBQUksR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQ3JDLENBQUM7SUFDTCxDQUFDOytHQS9DUSwwQkFBMEI7bUdBQTFCLDBCQUEwQiwwR0N0QnZDLHFvQkFlQSwyQ0RJYyxZQUFZLDRPQUFFLFlBQVksNkZBQUUsZUFBZSwyRkFBRSxhQUFhLHFYQUFZLGFBQWE7OzRGQUdwRiwwQkFBMEI7a0JBUHRDLFNBQVM7aUNBQ00sSUFBSSxZQUNOLHlCQUF5QixXQUUxQixDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLG1CQUM3RSx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtKc29uUGlwZX0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBGb3JtR3JvdXB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGV9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtCdXR0b25Nb2R1bGV9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7TWVzc2FnZU1vZHVsZX0gZnJvbSAncHJpbWVuZy9tZXNzYWdlJztcbmltcG9ydCB7UmlwcGxlTW9kdWxlfSBmcm9tICdwcmltZW5nL3JpcHBsZSc7XG5pbXBvcnQge1Rvb2x0aXBNb2R1bGV9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XG5pbXBvcnQge1N1YnNjcmlwdGlvbiwgaXNPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtGaWVsZEFjdGlvbkRlc2NyaXB0b3IsIEZpZWxkQWN0aW9uUmVzdWx0LCBGaWVsZEFjdGlvblJlc3VsdE1lc3NhZ2UsIElGb3JtRWRpdG9yQ29tcG9uZW50fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxldmlldy9hcGknO1xuXG5pbXBvcnQge0FDb21tb25zRm9ybWx5RmllbGRUeXBlfSBmcm9tICcuLi9mb3JtbHktZmllbGQtdHlwZS5hYnN0cmFjdC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnbW5nLWZvcm1seS1maWVsZC1hY3Rpb24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb3JtbHktZmllbGQtYWN0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgICBpbXBvcnRzOiBbQnV0dG9uTW9kdWxlLCBSaXBwbGVNb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZSwgVG9vbHRpcE1vZHVsZSwgSnNvblBpcGUsIE1lc3NhZ2VNb2R1bGVdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1seUZpZWxkQWN0aW9uQ29tcG9uZW50PEVkaXRvck1vZGVsPiBleHRlbmRzIEFDb21tb25zRm9ybWx5RmllbGRUeXBlPHZvaWQsIEVkaXRvck1vZGVsLCBGaWVsZEFjdGlvbkRlc2NyaXB0b3I8RWRpdG9yTW9kZWw+PiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICBwdWJsaWMgYnV0dG9uQ2xhc3MgPSAncC1idXR0b24tcHJpbWFyeSc7XG5cbiAgICBwdWJsaWMgYWN0aW9uTWVzc2FnZT86IEZpZWxkQWN0aW9uUmVzdWx0TWVzc2FnZTtcblxuICAgIHByaXZhdGUgcmVzdWx0U3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXG4gICAgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAgICAgdGhpcy5idXR0b25DbGFzcyA9IHRoaXMuZGVzY3JpcHRvci5idXR0b24uc3R5bGVDbGFzcy5idWlsZCgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnJlc3VsdFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBvbkNsaWNrKCkge1xuICAgICAgICB0aGlzLmFjdGlvbk1lc3NhZ2UgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5kZXNjcmlwdG9yLnJ1bkZ1bmN0aW9uPy4oe1xuICAgICAgICAgICAgZGVzY3JpcHRvcjogdGhpcy5kZXNjcmlwdG9yLFxuICAgICAgICAgICAgZm9ybUVkaXRvckNvbXBvbmVudDogdGhpcy5wcm9wcy5mb3JtRWRpdG9yQ29tcG9uZW50IGFzIElGb3JtRWRpdG9yQ29tcG9uZW50PEVkaXRvck1vZGVsPixcbiAgICAgICAgICAgIGZvcm1seToge1xuICAgICAgICAgICAgICAgIG1vZGVsOiB0aGlzLm1vZGVsLFxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sOiB0aGlzLmZvcm1Db250cm9sIGFzIEZvcm1Db250cm9sPHZvaWQ+LFxuICAgICAgICAgICAgICAgIGZvcm06IHRoaXMuZm9ybSBhcyBGb3JtR3JvdXA8e1tLIGluIGtleW9mIEVkaXRvck1vZGVsXTogQWJzdHJhY3RDb250cm9sPEVkaXRvck1vZGVsW0tdPn0+LFxuICAgICAgICAgICAgICAgIGZvcm1TdGF0ZTogdGhpcy5mb3JtU3RhdGUsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogdGhpcy5vcHRpb25zLFxuICAgICAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChpc09ic2VydmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0U3Vic2NyaXB0aW9uID0gcmVzdWx0LnN1YnNjcmliZShyZXMgPT4gdGhpcy5wcm9jZXNzUmVzdWx0KHJlcykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NSZXN1bHQocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc1Jlc3VsdChyZXM6IEZpZWxkQWN0aW9uUmVzdWx0KSB7XG4gICAgICAgIGlmIChyZXMubWVzc2FnZSkge1xuICAgICAgICAgICAgdGhpcy5hY3Rpb25NZXNzYWdlID0gcmVzLm1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHBCdXR0b25cbiAgICAgICAgcFJpcHBsZVxuICAgICAgICBbaWNvbl09XCIkYW55KGRlc2NyaXB0b3IuYnV0dG9uLmljb24pXCJcbiAgICAgICAgW2xhYmVsXT1cIiRhbnkoZGVzY3JpcHRvci5idXR0b24ubGFiZWwgPT09IG51bGwgPyBudWxsIDogZGVzY3JpcHRvci5idXR0b24ubGFiZWwgPz8gcHJvcHMhLmxhYmVsKSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtwVG9vbHRpcF09XCIkYW55KGRlc2NyaXB0b3IuYnV0dG9uLnRvb2x0aXApIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImZvcm1Db250cm9sLmRpc2FibGVkXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2soKVwiXG4gICAgICAgIFtjbGFzc109XCJidXR0b25DbGFzcyArIChhY3Rpb25NZXNzYWdlID8gJyBtci0yJyA6ICcnKVwiPjwvYnV0dG9uPlxuICAgIEBpZiAoYWN0aW9uTWVzc2FnZSkge1xuICAgICAgICA8cC1tZXNzYWdlIFt0ZXh0XT1cImFjdGlvbk1lc3NhZ2UuY29udGVudFwiIFtzZXZlcml0eV09XCJhY3Rpb25NZXNzYWdlLnNldmVyaXR5ID8/ICdzdWNjZXNzJ1wiPjwvcC1tZXNzYWdlPlxuICAgIH1cbjwvZGl2PlxuIl19
|