@mediusinc/mng-commons 0.21.0-rc.1 → 0.21.0-rc.2

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.
Files changed (28) hide show
  1. package/assets/i18n/en.json +12 -2
  2. package/assets/i18n/sl.json +15 -5
  3. package/esm2020/lib/components/form/editor/form-editor.component.mjs +16 -13
  4. package/esm2020/lib/components/form/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +5 -5
  5. package/esm2020/lib/components/tableview/table/table.component.mjs +4 -14
  6. package/esm2020/lib/data-providers/tableview.data-provider.mjs +1 -1
  7. package/esm2020/lib/descriptors/field.descriptor.mjs +2 -2
  8. package/esm2020/lib/descriptors/tableview.descriptor.mjs +5 -1
  9. package/esm2020/lib/mng-commons.module.mjs +5 -4
  10. package/esm2020/lib/pipes/index.mjs +2 -1
  11. package/esm2020/lib/pipes/mngLocaleDefaultRowClass.pipe.mjs +26 -0
  12. package/esm2020/lib/services/commons.service.mjs +2 -2
  13. package/esm2020/lib/utils/notification.util.mjs +6 -1
  14. package/fesm2015/mediusinc-mng-commons.mjs +75 -49
  15. package/fesm2015/mediusinc-mng-commons.mjs.map +1 -1
  16. package/fesm2020/mediusinc-mng-commons.mjs +73 -48
  17. package/fesm2020/mediusinc-mng-commons.mjs.map +1 -1
  18. package/lib/components/form/editor/form-editor.component.d.ts +3 -1
  19. package/lib/components/tableview/table/table.component.d.ts +0 -1
  20. package/lib/mng-commons.module.d.ts +43 -42
  21. package/lib/pipes/index.d.ts +1 -0
  22. package/lib/pipes/mngLocaleDefaultRowClass.pipe.d.ts +10 -0
  23. package/lib/utils/notification.util.d.ts +1 -0
  24. package/{mediusinc-mng-commons-0.21.0-rc.1.tgz → mediusinc-mng-commons-0.21.0-rc.2.tgz} +0 -0
  25. package/package.json +1 -1
  26. package/scss/mng-overrides/_theme_datatable.scss +6 -0
  27. package/scss/mng-overrides/_theme_forms.scss +8 -0
  28. package/version-info.json +5 -5
@@ -60,8 +60,9 @@
60
60
  },
61
61
  "showTranslations": "All translations",
62
62
  "localizations": {
63
- "addInDefaultLanguageTitle": "Warning",
64
- "addInDefaultLanguageDescription": "Adding a new value is supported only in default language."
63
+ "localizationTableviewTitle": "Translations: {{fieldName}}",
64
+ "addInDefaultLanguageTitle": "",
65
+ "addInDefaultLanguageDescription": "Localized item values will be saved in default language ({{defaultLanguage}}). To change values for different locales, open the translations dialog for desired field."
65
66
  },
66
67
  "imageUrlPlaceholder": "Insert image URL ...",
67
68
  "imageUrlAdd": "Add image URL"
@@ -138,6 +139,15 @@
138
139
  "export": {
139
140
  "title": "Export"
140
141
  },
142
+ "localization-details": {
143
+ "title": "Translations"
144
+ },
145
+ "localized-edit": {
146
+ "title": "Translations"
147
+ },
148
+ "localizations-add": {
149
+ "title": "Translations"
150
+ },
141
151
  "mngPrime": {
142
152
  "startsWith": "Starts with",
143
153
  "contains": "Contains",
@@ -23,8 +23,7 @@
23
23
  "general": "Splošno",
24
24
  "searchItem": "{{item}} - išči",
25
25
  "search": "Išči",
26
- "select": "Izberi",
27
- "missingTranslation": "Manjka prevod. Prikazana je privzeta vrednost."
26
+ "select": "Izberi"
28
27
  },
29
28
  "languages": {
30
29
  "en": "English",
@@ -58,10 +57,12 @@
58
57
  "pattern": "Vnos se mora ujemati z vzorcem '{{pattern}}'.",
59
58
  "email": "Neveljaven e-naslov."
60
59
  },
61
- "showTranslations": "Vsi prevodi",
62
60
  "localizations": {
63
- "addInDefaultLanguageTitle": "Pozor",
64
- "addInDefaultLanguageDescription": "Dodajanje nove vrednosti je podprto samo v standardnem jeziku."
61
+ "showTranslations": "Vsi prevodi",
62
+ "missingTranslation": "Manjka prevod. Prikazana je privzeta vrednost.",
63
+ "localizationTableviewTitle": "Prevodi: {{fieldName}}",
64
+ "addInDefaultLanguageTitle": "",
65
+ "addInDefaultLanguageDescription": "Lokalizirane vrednosti bodo shranjene v privzetem jeziku ({{defaultLanguage}}). Če želite urejati vrednosti za različne prevode, odprite pogovorno okno prevodov za želeno polje."
65
66
  },
66
67
  "imageUrlPlaceholder": "Vnesi URL do slike ...",
67
68
  "imageUrlAdd": "Dodaj URL slike"
@@ -138,6 +139,15 @@
138
139
  "export": {
139
140
  "title": "Izvozi"
140
141
  },
142
+ "localization-details": {
143
+ "title": "Prevodi"
144
+ },
145
+ "localized-edit": {
146
+ "title": "Prevodi"
147
+ },
148
+ "localizations-add": {
149
+ "title": "Prevodi"
150
+ },
141
151
  "mngPrime": {
142
152
  "startsWith": "Se začne z",
143
153
  "contains": "Vsebuje",
@@ -6,14 +6,16 @@ import { MngTemplateDirective } from '../../../directives';
6
6
  import { EditorFormlyUtil, NotificationUtil } from '../../../utils';
7
7
  import { MngFormEditorSubmitEvent } from '../models';
8
8
  import * as i0 from "@angular/core";
9
- import * as i1 from "@ngx-translate/core";
10
- import * as i2 from "@angular/forms";
11
- import * as i3 from "@ngx-formly/core";
12
- import * as i4 from "primeng/button";
13
- import * as i5 from "primeng/messages";
14
- import * as i6 from "@angular/common";
9
+ import * as i1 from "../../../services";
10
+ import * as i2 from "@ngx-translate/core";
11
+ import * as i3 from "@angular/forms";
12
+ import * as i4 from "@ngx-formly/core";
13
+ import * as i5 from "primeng/button";
14
+ import * as i6 from "primeng/messages";
15
+ import * as i7 from "@angular/common";
15
16
  export class MngFormEditorComponent {
16
- constructor(translateService) {
17
+ constructor(mngCommonsService, translateService) {
18
+ this.mngCommonsService = mngCommonsService;
17
19
  this.translateService = translateService;
18
20
  this.submitLoading = false;
19
21
  // extra features input
@@ -41,8 +43,9 @@ export class MngFormEditorComponent {
41
43
  this.formFields = EditorFormlyUtil.createFormlyConfigFromDescriptor(this.descriptor, this);
42
44
  this.updateFormState();
43
45
  // let the user know, that adding new value in table view with localizations is only supported in the default language
44
- if (this.descriptor.isLocalized && this.descriptor.tableviewEditorType === TableviewEditorTypeEnum.Add) {
45
- this.formMessages.push(NotificationUtil.getFormEditorWarningMessage(this.translateService, 'mngEditor.localizations.addInDefaultLanguageTitle', 'mngEditor.localizations.addInDefaultLanguageDescription'));
46
+ if (this.descriptor.isLocalized &&
47
+ (this.descriptor.tableviewEditorType === TableviewEditorTypeEnum.Add || this.descriptor.tableviewEditorType === TableviewEditorTypeEnum.Edit)) {
48
+ this.formMessages.push(NotificationUtil.getFormEditorInfoMessage(this.translateService, 'mngEditor.localizations.addInDefaultLanguageTitle', 'mngEditor.localizations.addInDefaultLanguageDescription', { defaultLanguage: this.mngCommonsService.defaultDataLanguage }));
46
49
  }
47
50
  }
48
51
  ngOnDestroy() {
@@ -212,12 +215,12 @@ export class MngFormEditorComponent {
212
215
  }
213
216
  }
214
217
  }
215
- MngFormEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngFormEditorComponent, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
216
- MngFormEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: MngFormEditorComponent, selector: "mng-form-editor", inputs: { descriptor: "descriptor", submitLoading: "submitLoading", item: "item", isSubmitButtonVisible: "isSubmitButtonVisible", isFormDisabled: "isFormDisabled" }, outputs: { formSubmitEventEmitter: "formSubmit" }, queries: [{ propertyName: "templates", predicate: MngTemplateDirective }], viewQueries: [{ propertyName: "submitButtonElementRef", first: true, predicate: ["submitButton"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"form\" (ngSubmit)=\"onSubmit($event)\">\n <formly-form [form]=\"form\" [fields]=\"formFields\" [options]=\"formOptions\" [model]=\"formModel\"></formly-form>\n <button #submitButton pButton type=\"submit\" [class.hidden]=\"!isSubmitButtonVisible\" [disabled]=\"form.disabled\" [loading]=\"(submitLoading$ | async) ?? false\"></button>\n</form>\n<p-messages [value]=\"formMessages\" [enableService]=\"false\"></p-messages>\n", dependencies: [{ 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: "component", type: i3.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "directive", type: i4.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i5.Messages, selector: "p-messages", inputs: ["value", "closable", "style", "styleClass", "enableService", "key", "escape", "severity", "showTransitionOptions", "hideTransitionOptions"], outputs: ["valueChange"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
218
+ MngFormEditorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngFormEditorComponent, deps: [{ token: i1.MngCommonsService }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component });
219
+ MngFormEditorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.1.0", type: MngFormEditorComponent, selector: "mng-form-editor", inputs: { descriptor: "descriptor", submitLoading: "submitLoading", item: "item", isSubmitButtonVisible: "isSubmitButtonVisible", isFormDisabled: "isFormDisabled" }, outputs: { formSubmitEventEmitter: "formSubmit" }, queries: [{ propertyName: "templates", predicate: MngTemplateDirective }], viewQueries: [{ propertyName: "submitButtonElementRef", first: true, predicate: ["submitButton"], descendants: true }], ngImport: i0, template: "<form [formGroup]=\"form\" (ngSubmit)=\"onSubmit($event)\">\n <formly-form [form]=\"form\" [fields]=\"formFields\" [options]=\"formOptions\" [model]=\"formModel\"></formly-form>\n <button #submitButton pButton type=\"submit\" [class.hidden]=\"!isSubmitButtonVisible\" [disabled]=\"form.disabled\" [loading]=\"(submitLoading$ | async) ?? false\"></button>\n</form>\n<p-messages [value]=\"formMessages\" [enableService]=\"false\"></p-messages>\n", dependencies: [{ kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i4.FormlyForm, selector: "formly-form", inputs: ["form", "model", "fields", "options"], outputs: ["modelChange"] }, { kind: "directive", type: i5.ButtonDirective, selector: "[pButton]", inputs: ["iconPos", "loadingIcon", "label", "icon", "loading"] }, { kind: "component", type: i6.Messages, selector: "p-messages", inputs: ["value", "closable", "style", "styleClass", "enableService", "key", "escape", "severity", "showTransitionOptions", "hideTransitionOptions"], outputs: ["valueChange"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
217
220
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: MngFormEditorComponent, decorators: [{
218
221
  type: Component,
219
222
  args: [{ selector: 'mng-form-editor', changeDetection: ChangeDetectionStrategy.OnPush, template: "<form [formGroup]=\"form\" (ngSubmit)=\"onSubmit($event)\">\n <formly-form [form]=\"form\" [fields]=\"formFields\" [options]=\"formOptions\" [model]=\"formModel\"></formly-form>\n <button #submitButton pButton type=\"submit\" [class.hidden]=\"!isSubmitButtonVisible\" [disabled]=\"form.disabled\" [loading]=\"(submitLoading$ | async) ?? false\"></button>\n</form>\n<p-messages [value]=\"formMessages\" [enableService]=\"false\"></p-messages>\n" }]
220
- }], ctorParameters: function () { return [{ type: i1.TranslateService }]; }, propDecorators: { descriptor: [{
223
+ }], ctorParameters: function () { return [{ type: i1.MngCommonsService }, { type: i2.TranslateService }]; }, propDecorators: { descriptor: [{
221
224
  type: Input
222
225
  }], submitLoading: [{
223
226
  type: Input
@@ -237,4 +240,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
237
240
  type: ViewChild,
238
241
  args: ['submitButton']
239
242
  }] } });
240
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vZWRpdG9yL2Zvcm0tZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2VkaXRvci9mb3JtLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWEsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3BLLE9BQU8sRUFBa0IsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBS3JFLE9BQU8sRUFBQyxVQUFVLEVBQWdCLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUdsRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRSxPQUFPLEVBQXVCLHdCQUF3QixFQUFDLE1BQU0sV0FBVyxDQUFDOzs7Ozs7OztBQU96RSxNQUFNLE9BQU8sc0JBQXNCO0lBbUMvQixZQUFvQixnQkFBa0M7UUFBbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQWhDdEMsa0JBQWEsR0FBa0MsS0FBSyxDQUFDO1FBS3JFLHVCQUF1QjtRQUNQLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUM5QixtQkFBYyxHQUFHLElBQUksQ0FBQztRQUV0QyxnQkFBZ0I7UUFDYSwyQkFBc0IsR0FBRyxJQUFJLFlBQVksRUFBK0IsQ0FBQztRQU0vRixTQUFJLEdBQWMsSUFB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QUNoRixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQzlDO0lBQ0wsQ0FBQzs7bUhBek9RLHNCQUFzQjt1R0FBdEIsc0JBQXNCLDBTQWdCZCxvQkFBb0IscUpDcEN6QyxtY0FLQTsyRkRlYSxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0ksaUJBQWlCLG1CQUVWLHVCQUF1QixDQUFDLE1BQU07dUdBSS9CLFVBQVU7c0JBQXpCLEtBQUs7Z0JBQ1UsYUFBYTtzQkFBNUIsS0FBSztnQkFHVSxJQUFJO3NCQUFuQixLQUFLO2dCQUdVLHFCQUFxQjtzQkFBcEMsS0FBSztnQkFDVSxjQUFjO3NCQUE3QixLQUFLO2dCQUd1QixzQkFBc0I7c0JBQWxELE1BQU07dUJBQUMsWUFBWTtnQkFHMEIsU0FBUztzQkFBdEQsZUFBZTt1QkFBQyxvQkFBb0I7Z0JBQ0gsc0JBQXNCO3NCQUF2RCxTQUFTO3VCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIEZvcm1BcnJheSwgRm9ybUdyb3VwfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7Rm9ybWx5RmllbGRDb25maWcsIEZvcm1seUZvcm1PcHRpb25zfSBmcm9tICdAbmd4LWZvcm1seS9jb3JlJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge01lc3NhZ2V9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBvZn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7RWRpdG9yRGVzY3JpcHRvcn0gZnJvbSAnLi4vLi4vLi4vZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHtUYWJsZXZpZXdFZGl0b3JUeXBlRW51bX0gZnJvbSAnLi4vLi4vLi4vZGVzY3JpcHRvcnMvdHlwZXMnO1xuaW1wb3J0IHtNbmdUZW1wbGF0ZURpcmVjdGl2ZX0gZnJvbSAnLi4vLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQge0VkaXRvckZvcm1seVV0aWwsIE5vdGlmaWNhdGlvblV0aWx9IGZyb20gJy4uLy4uLy4uL3V0aWxzJztcbmltcG9ydCB7TW5nRm9ybWx5RmllbGRDb25maWd9IGZyb20gJy4uL2Zvcm1seS9tb2RlbHMnO1xuaW1wb3J0IHtJRm9ybUVkaXRvckNvbXBvbmVudCwgTW5nRm9ybUVkaXRvclN1Ym1pdEV2ZW50fSBmcm9tICcuLi9tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ21uZy1mb3JtLWVkaXRvcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Zvcm0tZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNbmdGb3JtRWRpdG9yQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgSUZvcm1FZGl0b3JDb21wb25lbnQ8VD4sIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgICAvLyBtZXRhZGF0YSBhbmQgZWRpdG9yIG1vZGUgaW5wdXRcbiAgICBASW5wdXQoKSBwdWJsaWMgZGVzY3JpcHRvciE6IEVkaXRvckRlc2NyaXB0b3I8VD47XG4gICAgQElucHV0KCkgcHVibGljIHN1Ym1pdExvYWRpbmc6IE9ic2VydmFibGU8Ym9vbGVhbj4gfCBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvLyBkYXRhIHNvdXJjZSBpbnB1dHM7XG4gICAgQElucHV0KCkgcHVibGljIGl0ZW0/OiBUO1xuXG4gICAgLy8gZXh0cmEgZmVhdHVyZXMgaW5wdXRcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNTdWJtaXRCdXR0b25WaXNpYmxlID0gZmFsc2U7XG4gICAgQElucHV0KCkgcHVibGljIGlzRm9ybURpc2FibGVkID0gbnVsbDtcblxuICAgIC8vIGV2ZW50IG91dHB1dHNcbiAgICBAT3V0cHV0KCdmb3JtU3VibWl0JykgcHVibGljIGZvcm1TdWJtaXRFdmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPE1uZ0Zvcm1FZGl0b3JTdWJtaXRFdmVudDxUPj4oKTtcblxuICAgIC8vIGNvbnRlbnQgYW5kIHZpZXcgcXVlcmllc1xuICAgIEBDb250ZW50Q2hpbGRyZW4oTW5nVGVtcGxhdGVEaXJlY3RpdmUpIHB1YmxpYyB0ZW1wbGF0ZXMhOiBRdWVyeUxpc3Q8TW5nVGVtcGxhdGVEaXJlY3RpdmU+O1xuICAgIEBWaWV3Q2hpbGQoJ3N1Ym1pdEJ1dHRvbicpIHB1YmxpYyBzdWJtaXRCdXR0b25FbGVtZW50UmVmPzogRWxlbWVudFJlZjtcblxuICAgIHB1YmxpYyBmb3JtOiBGb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcbiAgICBwdWJsaWMgZm9ybU9wdGlvbnM6IEZvcm1seUZvcm1PcHRpb25zID0ge1xuICAgICAgICBmb3JtU3RhdGU6IHtcbiAgICAgICAgICAgIGFkZDogZmFsc2UsXG4gICAgICAgICAgICBlZGl0OiBmYWxzZSxcbiAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZVxuICAgICAgICB9XG4gICAgfTtcbiAgICBwdWJsaWMgZm9ybUZpZWxkcyE6IEZvcm1seUZpZWxkQ29uZmlnW107XG4gICAgcHVibGljIGZvcm1PcmlnSXRlbT86IFQ7XG4gICAgcHVibGljIGZvcm1Nb2RlbDogYW55ID0ge307XG4gICAgcHVibGljIGZvcm1NZXNzYWdlczogTWVzc2FnZVtdID0gW107XG4gICAgcHVibGljIHN1Ym1pdExvYWRpbmckITogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSkge31cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXRJbml0aWFsRm9ybVN0YXRlKCk7XG4gICAgICAgIHRoaXMucmVzZXRGb3JtTW9kZWwodGhpcy5pdGVtKTtcbiAgICAgICAgdGhpcy5zdWJtaXRMb2FkaW5nJCA9IHRoaXMuc3VibWl0TG9hZGluZyBpbnN0YW5jZW9mIE9ic2VydmFibGUgPyB0aGlzLnN1Ym1pdExvYWRpbmcgOiBvZih0aGlzLnN1Ym1pdExvYWRpbmcpO1xuXG4gICAgICAgIC8vIGluaXQgZmllbGRzIGZvciBmb3JtbHlcbiAgICAgICAgdGhpcy5mb3JtRmllbGRzID0gRWRpdG9yRm9ybWx5VXRpbC5jcmVhdGVGb3JtbHlDb25maWdGcm9tRGVzY3JpcHRvcih0aGlzLmRlc2NyaXB0b3IsIHRoaXMpO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1TdGF0ZSgpO1xuXG4gICAgICAgIC8vIGxldCB0aGUgdXNlciBrbm93LCB0aGF0IGFkZGluZyBuZXcgdmFsdWUgaW4gdGFibGUgdmlldyB3aXRoIGxvY2FsaXphdGlvbnMgaXMgb25seSBzdXBwb3J0ZWQgaW4gdGhlIGRlZmF1bHQgbGFuZ3VhZ2VcbiAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRvci5pc0xvY2FsaXplZCAmJiB0aGlzLmRlc2NyaXB0b3IudGFibGV2aWV3RWRpdG9yVHlwZSA9PT0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uQWRkKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1NZXNzYWdlcy5wdXNoKFxuICAgICAgICAgICAgICAgIE5vdGlmaWNhdGlvblV0aWwuZ2V0Rm9ybUVkaXRvcldhcm5pbmdNZXNzYWdlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgICAgICAgICAgICAgICdtbmdFZGl0b3IubG9jYWxpemF0aW9ucy5hZGRJbkRlZmF1bHRMYW5ndWFnZVRpdGxlJyxcbiAgICAgICAgICAgICAgICAgICAgJ21uZ0VkaXRvci5sb2NhbGl6YXRpb25zLmFkZEluRGVmYXVsdExhbmd1YWdlRGVzY3JpcHRpb24nXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdWJtaXQoKSB7XG4gICAgICAgIHRoaXMuc3VibWl0QnV0dG9uRWxlbWVudFJlZj8ubmF0aXZlRWxlbWVudC5jbGljaygpO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICBwdWJsaWMgb25TdWJtaXQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIHRoaXMuZm9ybU9wdGlvbnMuZm9ybVN0YXRlLnN1Ym1pdHRlZE9uID0gRGF0ZS5ub3coKTtcbiAgICAgICAgdGhpcy5mb3JtTWVzc2FnZXMgPSBbXTtcblxuICAgICAgICBjb25zdCBmb3JtU3VibWl0SXRlbSA9IHRoaXMuZ2V0Rm9ybVZhbHVlKCk7XG4gICAgICAgIGlmICh0aGlzLmZvcm0udmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybVN1Ym1pdEV2ZW50RW1pdHRlci5uZXh0KG5ldyBNbmdGb3JtRWRpdG9yU3VibWl0RXZlbnQoZm9ybVN1Ym1pdEl0ZW0pKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGZpbmQgYW5kIG1hcmsgaW52YWxpZCB0YWJzXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtRmllbGRzWzBdLnR5cGUgPT09ICd0YWJzJyAmJiB0aGlzLmZvcm1GaWVsZHNbMF0uZmllbGRHcm91cCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdGFiIG9mIHRoaXMuZm9ybUZpZWxkc1swXS5maWVsZEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzSW52YWxpZCA9IHRoaXMuaXNBbnlGaWVsZEludmFsaWQodGFiLmZpZWxkR3JvdXApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1PcHRpb25zLmZvcm1TdGF0ZVsndGFiXycgKyAodGFiLmlkID8gdGFiLmlkIDogKHRhYi5wcm9wcyBhcyBNbmdGb3JtbHlGaWVsZENvbmZpZykucHJvcHMubGFiZWwpICsgJ19pbnZhbGlkJ10gPSBpc0ludmFsaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXZlbnQgPSBuZXcgTW5nRm9ybUVkaXRvclN1Ym1pdEV2ZW50KGZvcm1TdWJtaXRJdGVtKTtcbiAgICAgICAgICAgIGV2ZW50LnN1Y2Nlc3MgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZm9ybU1lc3NhZ2VzLnB1c2goTm90aWZpY2F0aW9uVXRpbC5nZXRGb3JtRWRpdG9yV2FybmluZ01lc3NhZ2UodGhpcy50cmFuc2xhdGVTZXJ2aWNlLCAnbW5nRWRpdG9yLmludmFsaWRGb3JtVG9hc3RUaXRsZScsICdtbmdFZGl0b3IuaW52YWxpZEZvcm1Ub2FzdE1lc3NhZ2UnKSk7XG4gICAgICAgICAgICB0aGlzLmZvcm1TdWJtaXRFdmVudEVtaXR0ZXIubmV4dChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Rm9ybVZhbHVlKCk6IFQge1xuICAgICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKTtcbiAgICAgICAgdGhpcy5kZXNjcmlwdG9yLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIGlmIChmaWVsZCAmJiBmaWVsZC5zZXR0ZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGxpdFBhdGggPSBmaWVsZC5wcm9wZXJ0eS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgIGxldCBmaWVsZFZhbHVlID0gZm9ybVZhbHVlO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3BsaXRQYXRoLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U3ViUGF0aCA9IHNwbGl0UGF0aFtpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmaWVsZFZhbHVlW2N1cnJlbnRTdWJQYXRoXSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsdWVbY3VycmVudFN1YlBhdGhdID0ge307XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBmaWVsZFZhbHVlID0gZmllbGRWYWx1ZVtjdXJyZW50U3ViUGF0aF07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZmllbGRWYWx1ZSA9IGZpZWxkVmFsdWVbc3BsaXRQYXRoW3NwbGl0UGF0aC5sZW5ndGggLSAxXV07XG4gICAgICAgICAgICAgICAgZmllbGQuc2V0dGVyKGZvcm1WYWx1ZSwgZmllbGRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZm9ybVZhbHVlO1xuICAgIH1cblxuICAgIHB1YmxpYyByZXNldEZvcm1Nb2RlbChpdGVtPzogVCkge1xuICAgICAgICB0aGlzLmZvcm1PcmlnSXRlbSA9IGl0ZW07XG4gICAgICAgIC8vIFRPRE86IHRvIGNoZWNrIGlmIHRoaXMgaXMgb2ssIGNvdWxkIGJlIHByb2JsZW1zIHdpdGggZGF0ZXMsIGlmIHNvLCB0cnkgbG9kYXNoXG4gICAgICAgIGNvbnN0IGZvcm1Nb2RlbCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaXRlbSA/PyB7fSkpO1xuXG4gICAgICAgIHRoaXMuZGVzY3JpcHRvci5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICBpZiAoZmllbGQuZ2V0dGVyICYmIGl0ZW0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGxpdFBhdGggPSBmaWVsZC5wcm9wZXJ0eS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgIGxldCBjdXJyZW50T2JqZWN0ID0gZm9ybU1vZGVsO1xuXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdFBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFN1YlBhdGggPSBzcGxpdFBhdGhbaV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChpID09PSBzcGxpdFBhdGgubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE9iamVjdFtjdXJyZW50U3ViUGF0aF0gPSBmaWVsZC5nZXR0ZXIoaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRPYmplY3RbY3VycmVudFN1YlBhdGhdICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPYmplY3RbY3VycmVudFN1YlBhdGhdID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRPYmplY3QgPSBjdXJyZW50T2JqZWN0W2N1cnJlbnRTdWJQYXRoXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5mb3JtT3B0aW9ucy5yZXNldE1vZGVsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAvLyBjb3VsZCBub3QgYmUgaW5pdGlhdGVkIHlldFxuICAgICAgICAgICAgdGhpcy5mb3JtT3B0aW9ucy5yZXNldE1vZGVsKHRoaXMuZm9ybU1vZGVsKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvcm1Nb2RlbCA9IGZvcm1Nb2RlbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Rm9ybUZpZWxkKGtleTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbmRGb3JtRmllbGQodGhpcy5mb3JtLCBrZXkuc3BsaXQoJy4nKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHNldEZvcm1GaWVsZFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldEZvcm1GaWVsZChrZXkpO1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgVmFsdWUgd2FzIG5vdCBzZXQsIGJlY2F1c2UgZmllbGQgJHtrZXl9IHdhcyBub3QgZm91bmQuYCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcGF0Y2hGb3JtRmllbGRWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRGb3JtRmllbGQoa2V5KTtcbiAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICAgIGNvbnRyb2wucGF0Y2hWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihgVmFsdWUgd2FzIG5vdCBzZXQsIGJlY2F1c2UgZmllbGQgJHtrZXl9IHdhcyBub3QgZm91bmQuYCk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVzZXRGb3JtRmllbGRWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU/OiBhbnkpIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Rm9ybUZpZWxkKGtleSk7XG4gICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgICBjb250cm9sLnJlc2V0KHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBWYWx1ZSB3YXMgbm90IHNldCwgYmVjYXVzZSBmaWVsZCAke2tleX0gd2FzIG5vdCBmb3VuZC5gKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZmluZEZvcm1GaWVsZChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wsIGtleVBhdGg6IHN0cmluZ1tdKTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XG4gICAgICAgIGlmIChrZXlQYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbnRyb2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleVBhdGgubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbC5nZXQoa2V5UGF0aFswXSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5leHRDb250cm9sOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsID0gbnVsbDtcbiAgICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcbiAgICAgICAgICAgIG5leHRDb250cm9sID0gY29udHJvbC5nZXQoa2V5UGF0aFswXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gK2tleVBhdGhbMF07XG4gICAgICAgICAgICBpZiAoIWlzTmFOKGlkeCkpIHtcbiAgICAgICAgICAgICAgICBuZXh0Q29udHJvbCA9IGNvbnRyb2wuYXQoaWR4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY29udHJvbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZEZvcm1GaWVsZChuZXh0Q29udHJvbCEsIGtleVBhdGguc2xpY2UoMSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNBbnlGaWVsZEludmFsaWQoZmllbGRzOiBGb3JtbHlGaWVsZENvbmZpZ1tdID0gW10pOiBib29sZWFuIHtcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgIGxldCBmaWVsZEludmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkLmZpZWxkR3JvdXApKSB7XG4gICAgICAgICAgICAgICAgZmllbGRJbnZhbGlkID0gdGhpcy5pc0FueUZpZWxkSW52YWxpZChmaWVsZC5maWVsZEdyb3VwKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpZWxkLnR5cGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgZmllbGRJbnZhbGlkID0gIWZpZWxkLmZvcm1Db250cm9sPy52YWxpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaWVsZEludmFsaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVGb3JtU3RhdGUoKSB7XG4gICAgICAgIHRoaXMuZm9ybU9wdGlvbnMuZm9ybVN0YXRlLmRpc2FibGVkID0gdGhpcy5pc0Zvcm1EaXNhYmxlZCAhPT0gbnVsbCA/IHRoaXMuaXNGb3JtRGlzYWJsZWQgPT09IHRydWUgOiB0aGlzLmRlc2NyaXB0b3IuZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQHByaXZhdGUgU2V0cyBmb3JtIHN0YXRlIGJhc2VkIG9uIGVkaXRvciBkZXNjcmlwdG9yIHR5cGUuXG4gICAgICogUG9zc2libGUgb3B0aW9ucyBhcmU6IGRpc2FibGVkLCBhZGQgb3IgZWRpdC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHNldEluaXRpYWxGb3JtU3RhdGUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRlc2NyaXB0b3IudGFibGV2aWV3RWRpdG9yVHlwZSA9PT0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uQWRkKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1PcHRpb25zLmZvcm1TdGF0ZS5hZGQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGVzY3JpcHRvci50YWJsZXZpZXdFZGl0b3JUeXBlID09PSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5FZGl0KSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1PcHRpb25zLmZvcm1TdGF0ZS5lZGl0ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmRlc2NyaXB0b3IudGFibGV2aWV3RWRpdG9yVHlwZSA9PT0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uRGV0YWlscykge1xuICAgICAgICAgICAgdGhpcy5mb3JtT3B0aW9ucy5mb3JtU3RhdGUuZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgKG5nU3VibWl0KT1cIm9uU3VibWl0KCRldmVudClcIj5cbiAgICA8Zm9ybWx5LWZvcm0gW2Zvcm1dPVwiZm9ybVwiIFtmaWVsZHNdPVwiZm9ybUZpZWxkc1wiIFtvcHRpb25zXT1cImZvcm1PcHRpb25zXCIgW21vZGVsXT1cImZvcm1Nb2RlbFwiPjwvZm9ybWx5LWZvcm0+XG4gICAgPGJ1dHRvbiAjc3VibWl0QnV0dG9uIHBCdXR0b24gdHlwZT1cInN1Ym1pdFwiIFtjbGFzcy5oaWRkZW5dPVwiIWlzU3VibWl0QnV0dG9uVmlzaWJsZVwiIFtkaXNhYmxlZF09XCJmb3JtLmRpc2FibGVkXCIgW2xvYWRpbmddPVwiKHN1Ym1pdExvYWRpbmckIHwgYXN5bmMpID8/IGZhbHNlXCI+PC9idXR0b24+XG48L2Zvcm0+XG48cC1tZXNzYWdlcyBbdmFsdWVdPVwiZm9ybU1lc3NhZ2VzXCIgW2VuYWJsZVNlcnZpY2VdPVwiZmFsc2VcIj48L3AtbWVzc2FnZXM+XG4iXX0=
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vZWRpdG9yL2Zvcm0tZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2VkaXRvci9mb3JtLWVkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWEsU0FBUyxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3BLLE9BQU8sRUFBa0IsU0FBUyxFQUFFLFNBQVMsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBS3JFLE9BQU8sRUFBQyxVQUFVLEVBQWdCLEVBQUUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUdsRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUV6RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRSxPQUFPLEVBQXVCLHdCQUF3QixFQUFDLE1BQU0sV0FBVyxDQUFDOzs7Ozs7Ozs7QUFPekUsTUFBTSxPQUFPLHNCQUFzQjtJQW1DL0IsWUFBb0IsaUJBQW9DLEVBQVUsZ0JBQWtDO1FBQWhGLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFBVSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBaENwRixrQkFBYSxHQUFrQyxLQUFLLENBQUM7UUFLckUsdUJBQXVCO1FBQ1AsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLG1CQUFjLEdBQUcsSUFBSSxDQUFDO1FBRXRDLGdCQUFnQjtRQUNhLDJCQUFzQixHQUFHLElBQUksWUFBWSxFQUErQixDQUFDO1FBTS9GLFNBQUksR0FBYyxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQyxnQkFBVyxHQUFzQjtZQUNwQyxTQUFTLEVBQUU7Z0JBQ1AsR0FBRyxFQUFFLEtBQUs7Z0JBQ1YsSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsUUFBUSxFQUFFLEtBQUs7YUFDbEI7U0FDSixDQUFDO1FBR0ssY0FBUyxHQUFRLEVBQUUsQ0FBQztRQUNwQixpQkFBWSxHQUFjLEVBQUUsQ0FBQztRQUc1QixrQkFBYSxHQUFtQixFQUFFLENBQUM7SUFFNEQsQ0FBQztJQUVqRyxRQUFRO1FBQ1gsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsYUFBYSxZQUFZLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUU3Ryx5QkFBeUI7UUFDekIsSUFBSSxDQUFDLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxnQ0FBZ0MsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNGLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUV2QixzSEFBc0g7UUFDdEgsSUFDSSxJQUFJLENBQUMsVUFBVSxDQUFDLFdBQVc7WUFDM0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixLQUFLLHVCQUF1QixDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixLQUFLLHVCQUF1QixDQUFDLElBQUksQ0FBQyxFQUMvSTtZQUNFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUNsQixnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FDckMsSUFBSSxDQUFDLGdCQUFnQixFQUNyQixtREFBbUQsRUFDbkQseURBQXlELEVBQ3pELEVBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxtQkFBbUIsRUFBQyxDQUNoRSxDQUNKLENBQUM7U0FDTDtJQUNMLENBQUM7SUFFTSxXQUFXO1FBQ2QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRU0sTUFBTTtRQUNULElBQUksQ0FBQyxzQkFBc0IsRUFBRSxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDdkQsQ0FBQztJQUVELDZEQUE2RDtJQUN0RCxRQUFRLENBQUMsS0FBWTtRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3BELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBRXZCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMzQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsSUFBSSx3QkFBd0IsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1NBQ2xGO2FBQU07WUFDSCw2QkFBNkI7WUFDN0IsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUU7Z0JBQ3JFLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUU7b0JBQzdDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7b0JBQ3pELElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFFLEdBQUcsQ0FBQyxLQUE4QixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxTQUFTLENBQUM7aUJBQ3JJO2FBQ0o7WUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLHdCQUF3QixDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzNELEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLDJCQUEyQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxpQ0FBaUMsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDLENBQUM7WUFDcEssSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMzQztJQUNMLENBQUM7SUFFTSxZQUFZO1FBQ2YsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDdkIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVDLElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQztnQkFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUMzQyxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLElBQUksT0FBTyxVQUFVLENBQUMsY0FBYyxDQUFDLEtBQUssUUFBUSxFQUFFO3dCQUNoRCxVQUFVLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxDQUFDO3FCQUNuQztvQkFFRCxVQUFVLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2lCQUMzQztnQkFFRCxVQUFVLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pELEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2FBQ3ZDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRU0sY0FBYyxDQUFDLElBQVE7UUFDMUIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDekIsZ0ZBQWdGO1FBQ2hGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUV6RCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRTtnQkFDdEIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQzVDLElBQUksYUFBYSxHQUFHLFNBQVMsQ0FBQztnQkFFOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ3ZDLE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDcEMsSUFBSSxDQUFDLEtBQUssU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQzVCLGFBQWEsQ0FBQyxjQUFjLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO3FCQUN0RDt5QkFBTTt3QkFDSCxJQUFJLE9BQU8sYUFBYSxDQUFDLGNBQWMsQ0FBQyxLQUFLLFFBQVEsRUFBRTs0QkFDbkQsYUFBYSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt5QkFDdEM7d0JBRUQsYUFBYSxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztxQkFDakQ7aUJBQ0o7YUFDSjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxLQUFLLFVBQVUsRUFBRTtZQUNuRCw2QkFBNkI7WUFDN0IsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1NBQy9DO1FBQ0QsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDL0IsQ0FBQztJQUVNLFlBQVksQ0FBQyxHQUFXO1FBQzNCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRU0saUJBQWlCLENBQUMsR0FBVyxFQUFFLEtBQVU7UUFDNUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxJQUFJLE9BQU8sRUFBRTtZQUNULE9BQU8sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDeEIsT0FBTyxJQUFJLENBQUM7U0FDZjthQUFNO1lBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQyxvQ0FBb0MsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3ZFLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0lBQ0wsQ0FBQztJQUVNLG1CQUFtQixDQUFDLEdBQVcsRUFBRSxLQUFVO1FBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsSUFBSSxPQUFPLEVBQUU7WUFDVCxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFCLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7YUFBTTtZQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsb0NBQW9DLEdBQUcsaUJBQWlCLENBQUMsQ0FBQztZQUN2RSxPQUFPLEtBQUssQ0FBQztTQUNoQjtJQUNMLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxHQUFXLEVBQUUsS0FBVztRQUMvQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksT0FBTyxFQUFFO1lBQ1QsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyQixPQUFPLElBQUksQ0FBQztTQUNmO2FBQU07WUFDSCxPQUFPLENBQUMsSUFBSSxDQUFDLG9DQUFvQyxHQUFHLGlCQUFpQixDQUFDLENBQUM7WUFDdkUsT0FBTyxLQUFLLENBQUM7U0FDaEI7SUFDTCxDQUFDO0lBRU8sYUFBYSxDQUFDLE9BQXdCLEVBQUUsT0FBaUI7UUFDN0QsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN0QixPQUFPLE9BQU8sQ0FBQztTQUNsQjtRQUNELElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDdEIsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xDO1FBQ0QsSUFBSSxXQUFXLEdBQTJCLElBQUksQ0FBQztRQUMvQyxJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUU7WUFDOUIsV0FBVyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekM7YUFBTSxJQUFJLE9BQU8sWUFBWSxTQUFTLEVBQUU7WUFDckMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDYixXQUFXLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNqQztTQUNKO1FBRUQsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNWLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBWSxFQUFFLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRU8saUJBQWlCLENBQUMsU0FBOEIsRUFBRTtRQUN0RCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRTtZQUN4QixJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDekIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDakMsWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7YUFDM0Q7aUJBQU0sSUFBSSxPQUFPLEtBQUssQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO2dCQUMxQyxZQUFZLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQzthQUM1QztZQUNELElBQUksWUFBWSxFQUFFO2dCQUNkLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7U0FDSjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxlQUFlO1FBQ25CLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO0lBQ2pJLENBQUM7SUFFRDs7O09BR0c7SUFDSyxtQkFBbUI7UUFDdkIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixLQUFLLHVCQUF1QixDQUFDLEdBQUcsRUFBRTtZQUNyRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1NBQ3pDO2FBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixLQUFLLHVCQUF1QixDQUFDLElBQUksRUFBRTtZQUM3RSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1NBQzFDO2FBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLG1CQUFtQixLQUFLLHVCQUF1QixDQUFDLE9BQU8sRUFBRTtZQUNoRixJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1NBQzlDO0lBQ0wsQ0FBQzs7bUhBN09RLHNCQUFzQjt1R0FBdEIsc0JBQXNCLDBTQWdCZCxvQkFBb0IscUpDckN6QyxtY0FLQTsyRkRnQmEsc0JBQXNCO2tCQUxsQyxTQUFTOytCQUNJLGlCQUFpQixtQkFFVix1QkFBdUIsQ0FBQyxNQUFNO3VJQUkvQixVQUFVO3NCQUF6QixLQUFLO2dCQUNVLGFBQWE7c0JBQTVCLEtBQUs7Z0JBR1UsSUFBSTtzQkFBbkIsS0FBSztnQkFHVSxxQkFBcUI7c0JBQXBDLEtBQUs7Z0JBQ1UsY0FBYztzQkFBN0IsS0FBSztnQkFHdUIsc0JBQXNCO3NCQUFsRCxNQUFNO3VCQUFDLFlBQVk7Z0JBRzBCLFNBQVM7c0JBQXRELGVBQWU7dUJBQUMsb0JBQW9CO2dCQUNILHNCQUFzQjtzQkFBdkQsU0FBUzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7QWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Hcm91cH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQge0Zvcm1seUZpZWxkQ29uZmlnLCBGb3JtbHlGb3JtT3B0aW9uc30gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtNZXNzYWdlfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgb2Z9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0VkaXRvckRlc2NyaXB0b3J9IGZyb20gJy4uLy4uLy4uL2Rlc2NyaXB0b3JzJztcbmltcG9ydCB7VGFibGV2aWV3RWRpdG9yVHlwZUVudW19IGZyb20gJy4uLy4uLy4uL2Rlc2NyaXB0b3JzL3R5cGVzJztcbmltcG9ydCB7TW5nVGVtcGxhdGVEaXJlY3RpdmV9IGZyb20gJy4uLy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHtNbmdDb21tb25zU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHtFZGl0b3JGb3JtbHlVdGlsLCBOb3RpZmljYXRpb25VdGlsfSBmcm9tICcuLi8uLi8uLi91dGlscyc7XG5pbXBvcnQge01uZ0Zvcm1seUZpZWxkQ29uZmlnfSBmcm9tICcuLi9mb3JtbHkvbW9kZWxzJztcbmltcG9ydCB7SUZvcm1FZGl0b3JDb21wb25lbnQsIE1uZ0Zvcm1FZGl0b3JTdWJtaXRFdmVudH0gZnJvbSAnLi4vbW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdtbmctZm9ybS1lZGl0b3InLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mb3JtLWVkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTW5nRm9ybUVkaXRvckNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIElGb3JtRWRpdG9yQ29tcG9uZW50PFQ+LCBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgLy8gbWV0YWRhdGEgYW5kIGVkaXRvciBtb2RlIGlucHV0XG4gICAgQElucHV0KCkgcHVibGljIGRlc2NyaXB0b3IhOiBFZGl0b3JEZXNjcmlwdG9yPFQ+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzdWJtaXRMb2FkaW5nOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHwgYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLy8gZGF0YSBzb3VyY2UgaW5wdXRzO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpdGVtPzogVDtcblxuICAgIC8vIGV4dHJhIGZlYXR1cmVzIGlucHV0XG4gICAgQElucHV0KCkgcHVibGljIGlzU3VibWl0QnV0dG9uVmlzaWJsZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0Zvcm1EaXNhYmxlZCA9IG51bGw7XG5cbiAgICAvLyBldmVudCBvdXRwdXRzXG4gICAgQE91dHB1dCgnZm9ybVN1Ym1pdCcpIHB1YmxpYyBmb3JtU3VibWl0RXZlbnRFbWl0dGVyID0gbmV3IEV2ZW50RW1pdHRlcjxNbmdGb3JtRWRpdG9yU3VibWl0RXZlbnQ8VD4+KCk7XG5cbiAgICAvLyBjb250ZW50IGFuZCB2aWV3IHF1ZXJpZXNcbiAgICBAQ29udGVudENoaWxkcmVuKE1uZ1RlbXBsYXRlRGlyZWN0aXZlKSBwdWJsaWMgdGVtcGxhdGVzITogUXVlcnlMaXN0PE1uZ1RlbXBsYXRlRGlyZWN0aXZlPjtcbiAgICBAVmlld0NoaWxkKCdzdWJtaXRCdXR0b24nKSBwdWJsaWMgc3VibWl0QnV0dG9uRWxlbWVudFJlZj86IEVsZW1lbnRSZWY7XG5cbiAgICBwdWJsaWMgZm9ybTogRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XG4gICAgcHVibGljIGZvcm1PcHRpb25zOiBGb3JtbHlGb3JtT3B0aW9ucyA9IHtcbiAgICAgICAgZm9ybVN0YXRlOiB7XG4gICAgICAgICAgICBhZGQ6IGZhbHNlLFxuICAgICAgICAgICAgZWRpdDogZmFsc2UsXG4gICAgICAgICAgICBkaXNhYmxlZDogZmFsc2VcbiAgICAgICAgfVxuICAgIH07XG4gICAgcHVibGljIGZvcm1GaWVsZHMhOiBGb3JtbHlGaWVsZENvbmZpZ1tdO1xuICAgIHB1YmxpYyBmb3JtT3JpZ0l0ZW0/OiBUO1xuICAgIHB1YmxpYyBmb3JtTW9kZWw6IGFueSA9IHt9O1xuICAgIHB1YmxpYyBmb3JtTWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuICAgIHB1YmxpYyBzdWJtaXRMb2FkaW5nJCE6IE9ic2VydmFibGU8Ym9vbGVhbj47XG5cbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIG1uZ0NvbW1vbnNTZXJ2aWNlOiBNbmdDb21tb25zU2VydmljZSwgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7fVxuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnNldEluaXRpYWxGb3JtU3RhdGUoKTtcbiAgICAgICAgdGhpcy5yZXNldEZvcm1Nb2RlbCh0aGlzLml0ZW0pO1xuICAgICAgICB0aGlzLnN1Ym1pdExvYWRpbmckID0gdGhpcy5zdWJtaXRMb2FkaW5nIGluc3RhbmNlb2YgT2JzZXJ2YWJsZSA/IHRoaXMuc3VibWl0TG9hZGluZyA6IG9mKHRoaXMuc3VibWl0TG9hZGluZyk7XG5cbiAgICAgICAgLy8gaW5pdCBmaWVsZHMgZm9yIGZvcm1seVxuICAgICAgICB0aGlzLmZvcm1GaWVsZHMgPSBFZGl0b3JGb3JtbHlVdGlsLmNyZWF0ZUZvcm1seUNvbmZpZ0Zyb21EZXNjcmlwdG9yKHRoaXMuZGVzY3JpcHRvciwgdGhpcyk7XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybVN0YXRlKCk7XG5cbiAgICAgICAgLy8gbGV0IHRoZSB1c2VyIGtub3csIHRoYXQgYWRkaW5nIG5ldyB2YWx1ZSBpbiB0YWJsZSB2aWV3IHdpdGggbG9jYWxpemF0aW9ucyBpcyBvbmx5IHN1cHBvcnRlZCBpbiB0aGUgZGVmYXVsdCBsYW5ndWFnZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmRlc2NyaXB0b3IuaXNMb2NhbGl6ZWQgJiZcbiAgICAgICAgICAgICh0aGlzLmRlc2NyaXB0b3IudGFibGV2aWV3RWRpdG9yVHlwZSA9PT0gVGFibGV2aWV3RWRpdG9yVHlwZUVudW0uQWRkIHx8IHRoaXMuZGVzY3JpcHRvci50YWJsZXZpZXdFZGl0b3JUeXBlID09PSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5FZGl0KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybU1lc3NhZ2VzLnB1c2goXG4gICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uVXRpbC5nZXRGb3JtRWRpdG9ySW5mb01lc3NhZ2UoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZSxcbiAgICAgICAgICAgICAgICAgICAgJ21uZ0VkaXRvci5sb2NhbGl6YXRpb25zLmFkZEluRGVmYXVsdExhbmd1YWdlVGl0bGUnLFxuICAgICAgICAgICAgICAgICAgICAnbW5nRWRpdG9yLmxvY2FsaXphdGlvbnMuYWRkSW5EZWZhdWx0TGFuZ3VhZ2VEZXNjcmlwdGlvbicsXG4gICAgICAgICAgICAgICAgICAgIHtkZWZhdWx0TGFuZ3VhZ2U6IHRoaXMubW5nQ29tbW9uc1NlcnZpY2UuZGVmYXVsdERhdGFMYW5ndWFnZX1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN1Ym1pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJtaXRCdXR0b25FbGVtZW50UmVmPy5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgIHB1YmxpYyBvblN1Ym1pdChldmVudDogRXZlbnQpIHtcbiAgICAgICAgdGhpcy5mb3JtT3B0aW9ucy5mb3JtU3RhdGUuc3VibWl0dGVkT24gPSBEYXRlLm5vdygpO1xuICAgICAgICB0aGlzLmZvcm1NZXNzYWdlcyA9IFtdO1xuXG4gICAgICAgIGNvbnN0IGZvcm1TdWJtaXRJdGVtID0gdGhpcy5nZXRGb3JtVmFsdWUoKTtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtU3VibWl0RXZlbnRFbWl0dGVyLm5leHQobmV3IE1uZ0Zvcm1FZGl0b3JTdWJtaXRFdmVudChmb3JtU3VibWl0SXRlbSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZmluZCBhbmQgbWFyayBpbnZhbGlkIHRhYnNcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1GaWVsZHNbMF0udHlwZSA9PT0gJ3RhYnMnICYmIHRoaXMuZm9ybUZpZWxkc1swXS5maWVsZEdyb3VwKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB0YWIgb2YgdGhpcy5mb3JtRmllbGRzWzBdLmZpZWxkR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNJbnZhbGlkID0gdGhpcy5pc0FueUZpZWxkSW52YWxpZCh0YWIuZmllbGRHcm91cCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybU9wdGlvbnMuZm9ybVN0YXRlWyd0YWJfJyArICh0YWIuaWQgPyB0YWIuaWQgOiAodGFiLnByb3BzIGFzIE1uZ0Zvcm1seUZpZWxkQ29uZmlnKS5wcm9wcy5sYWJlbCkgKyAnX2ludmFsaWQnXSA9IGlzSW52YWxpZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBldmVudCA9IG5ldyBNbmdGb3JtRWRpdG9yU3VibWl0RXZlbnQoZm9ybVN1Ym1pdEl0ZW0pO1xuICAgICAgICAgICAgZXZlbnQuc3VjY2VzcyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5mb3JtTWVzc2FnZXMucHVzaChOb3RpZmljYXRpb25VdGlsLmdldEZvcm1FZGl0b3JXYXJuaW5nTWVzc2FnZSh0aGlzLnRyYW5zbGF0ZVNlcnZpY2UsICdtbmdFZGl0b3IuaW52YWxpZEZvcm1Ub2FzdFRpdGxlJywgJ21uZ0VkaXRvci5pbnZhbGlkRm9ybVRvYXN0TWVzc2FnZScpKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybVN1Ym1pdEV2ZW50RW1pdHRlci5uZXh0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGb3JtVmFsdWUoKTogVCB7XG4gICAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpO1xuICAgICAgICB0aGlzLmRlc2NyaXB0b3IuZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgaWYgKGZpZWxkICYmIGZpZWxkLnNldHRlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwbGl0UGF0aCA9IGZpZWxkLnByb3BlcnR5LnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgICAgbGV0IGZpZWxkVmFsdWUgPSBmb3JtVmFsdWU7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzcGxpdFBhdGgubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTdWJQYXRoID0gc3BsaXRQYXRoW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZpZWxkVmFsdWVbY3VycmVudFN1YlBhdGhdICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRWYWx1ZVtjdXJyZW50U3ViUGF0aF0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsdWUgPSBmaWVsZFZhbHVlW2N1cnJlbnRTdWJQYXRoXTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmaWVsZFZhbHVlID0gZmllbGRWYWx1ZVtzcGxpdFBhdGhbc3BsaXRQYXRoLmxlbmd0aCAtIDFdXTtcbiAgICAgICAgICAgICAgICBmaWVsZC5zZXR0ZXIoZm9ybVZhbHVlLCBmaWVsZFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmb3JtVmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0Rm9ybU1vZGVsKGl0ZW0/OiBUKSB7XG4gICAgICAgIHRoaXMuZm9ybU9yaWdJdGVtID0gaXRlbTtcbiAgICAgICAgLy8gVE9ETzogdG8gY2hlY2sgaWYgdGhpcyBpcyBvaywgY291bGQgYmUgcHJvYmxlbXMgd2l0aCBkYXRlcywgaWYgc28sIHRyeSBsb2Rhc2hcbiAgICAgICAgY29uc3QgZm9ybU1vZGVsID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShpdGVtID8/IHt9KSk7XG5cbiAgICAgICAgdGhpcy5kZXNjcmlwdG9yLmZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIGlmIChmaWVsZC5nZXR0ZXIgJiYgaXRlbSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNwbGl0UGF0aCA9IGZpZWxkLnByb3BlcnR5LnNwbGl0KCcuJyk7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRPYmplY3QgPSBmb3JtTW9kZWw7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNwbGl0UGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50U3ViUGF0aCA9IHNwbGl0UGF0aFtpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IHNwbGl0UGF0aC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50T2JqZWN0W2N1cnJlbnRTdWJQYXRoXSA9IGZpZWxkLmdldHRlcihpdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3VycmVudE9iamVjdFtjdXJyZW50U3ViUGF0aF0gIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE9iamVjdFtjdXJyZW50U3ViUGF0aF0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudE9iamVjdCA9IGN1cnJlbnRPYmplY3RbY3VycmVudFN1YlBhdGhdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmZvcm1PcHRpb25zLnJlc2V0TW9kZWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIC8vIGNvdWxkIG5vdCBiZSBpbml0aWF0ZWQgeWV0XG4gICAgICAgICAgICB0aGlzLmZvcm1PcHRpb25zLnJlc2V0TW9kZWwodGhpcy5mb3JtTW9kZWwpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybU1vZGVsID0gZm9ybU1vZGVsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRGb3JtRmllbGQoa2V5OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZEZvcm1GaWVsZCh0aGlzLmZvcm0sIGtleS5zcGxpdCgnLicpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Rm9ybUZpZWxkVmFsdWUoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Rm9ybUZpZWxkKGtleSk7XG4gICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBWYWx1ZSB3YXMgbm90IHNldCwgYmVjYXVzZSBmaWVsZCAke2tleX0gd2FzIG5vdCBmb3VuZC5gKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBwYXRjaEZvcm1GaWVsZFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldEZvcm1GaWVsZChrZXkpO1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgICAgY29udHJvbC5wYXRjaFZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKGBWYWx1ZSB3YXMgbm90IHNldCwgYmVjYXVzZSBmaWVsZCAke2tleX0gd2FzIG5vdCBmb3VuZC5gKTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyByZXNldEZvcm1GaWVsZFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZT86IGFueSkge1xuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRGb3JtRmllbGQoa2V5KTtcbiAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICAgIGNvbnRyb2wucmVzZXQodmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oYFZhbHVlIHdhcyBub3Qgc2V0LCBiZWNhdXNlIGZpZWxkICR7a2V5fSB3YXMgbm90IGZvdW5kLmApO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kRm9ybUZpZWxkKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCwga2V5UGF0aDogc3RyaW5nW10pOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsIHtcbiAgICAgICAgaWYgKGtleVBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gY29udHJvbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5UGF0aC5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBjb250cm9sLmdldChrZXlQYXRoWzBdKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmV4dENvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwgPSBudWxsO1xuICAgICAgICBpZiAoY29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xuICAgICAgICAgICAgbmV4dENvbnRyb2wgPSBjb250cm9sLmdldChrZXlQYXRoWzBdKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSAra2V5UGF0aFswXTtcbiAgICAgICAgICAgIGlmICghaXNOYU4oaWR4KSkge1xuICAgICAgICAgICAgICAgIG5leHRDb250cm9sID0gY29udHJvbC5hdChpZHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5maW5kRm9ybUZpZWxkKG5leHRDb250cm9sISwga2V5UGF0aC5zbGljZSgxKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0FueUZpZWxkSW52YWxpZChmaWVsZHM6IEZvcm1seUZpZWxkQ29uZmlnW10gPSBbXSk6IGJvb2xlYW4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICAgICAgbGV0IGZpZWxkSW52YWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGQuZmllbGRHcm91cCkpIHtcbiAgICAgICAgICAgICAgICBmaWVsZEludmFsaWQgPSB0aGlzLmlzQW55RmllbGRJbnZhbGlkKGZpZWxkLmZpZWxkR3JvdXApO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmllbGQudHlwZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBmaWVsZEludmFsaWQgPSAhZmllbGQuZm9ybUNvbnRyb2w/LnZhbGlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpZWxkSW52YWxpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUZvcm1TdGF0ZSgpIHtcbiAgICAgICAgdGhpcy5mb3JtT3B0aW9ucy5mb3JtU3RhdGUuZGlzYWJsZWQgPSB0aGlzLmlzRm9ybURpc2FibGVkICE9PSBudWxsID8gdGhpcy5pc0Zvcm1EaXNhYmxlZCA9PT0gdHJ1ZSA6IHRoaXMuZGVzY3JpcHRvci5kaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAcHJpdmF0ZSBTZXRzIGZvcm0gc3RhdGUgYmFzZWQgb24gZWRpdG9yIGRlc2NyaXB0b3IgdHlwZS5cbiAgICAgKiBQb3NzaWJsZSBvcHRpb25zIGFyZTogZGlzYWJsZWQsIGFkZCBvciBlZGl0LlxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0SW5pdGlhbEZvcm1TdGF0ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRvci50YWJsZXZpZXdFZGl0b3JUeXBlID09PSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5BZGQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybU9wdGlvbnMuZm9ybVN0YXRlLmFkZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5kZXNjcmlwdG9yLnRhYmxldmlld0VkaXRvclR5cGUgPT09IFRhYmxldmlld0VkaXRvclR5cGVFbnVtLkVkaXQpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybU9wdGlvbnMuZm9ybVN0YXRlLmVkaXQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZGVzY3JpcHRvci50YWJsZXZpZXdFZGl0b3JUeXBlID09PSBUYWJsZXZpZXdFZGl0b3JUeXBlRW51bS5EZXRhaWxzKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1PcHRpb25zLmZvcm1TdGF0ZS5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8Zm9ybSBbZm9ybUdyb3VwXT1cImZvcm1cIiAobmdTdWJtaXQpPVwib25TdWJtaXQoJGV2ZW50KVwiPlxuICAgIDxmb3JtbHktZm9ybSBbZm9ybV09XCJmb3JtXCIgW2ZpZWxkc109XCJmb3JtRmllbGRzXCIgW29wdGlvbnNdPVwiZm9ybU9wdGlvbnNcIiBbbW9kZWxdPVwiZm9ybU1vZGVsXCI+PC9mb3JtbHktZm9ybT5cbiAgICA8YnV0dG9uICNzdWJtaXRCdXR0b24gcEJ1dHRvbiB0eXBlPVwic3VibWl0XCIgW2NsYXNzLmhpZGRlbl09XCIhaXNTdWJtaXRCdXR0b25WaXNpYmxlXCIgW2Rpc2FibGVkXT1cImZvcm0uZGlzYWJsZWRcIiBbbG9hZGluZ109XCIoc3VibWl0TG9hZGluZyQgfCBhc3luYykgPz8gZmFsc2VcIj48L2J1dHRvbj5cbjwvZm9ybT5cbjxwLW1lc3NhZ2VzIFt2YWx1ZV09XCJmb3JtTWVzc2FnZXNcIiBbZW5hYmxlU2VydmljZV09XCJmYWxzZVwiPjwvcC1tZXNzYWdlcz5cbiJdfQ==
@@ -20,7 +20,7 @@ export class MngFormlyFieldWrapperComponent extends FieldWrapper {
20
20
  .withDialogSize(StyleSizeEnum.Small)
21
21
  .withButtonDescriptor(new ActionButtonDescriptor()
22
22
  .withIcon('pi pi-language')
23
- .withLabel('mngEditor.showTranslations')
23
+ .withLabel('mngEditor.localizations.showTranslations')
24
24
  .withStyleClass(new ButtonStyleBuilder().withTextButton().withCustomClass('py-0 mb-1 w-auto')))
25
25
  .withFetchFunction(() => of(this.model));
26
26
  viewLocalizationsAction.withEditorActions([new ActionEditorSubmitDescriptor(viewLocalizationsAction, ActionEditorSubmitTypeEnum.Cancel)]);
@@ -33,7 +33,7 @@ export class MngFormlyFieldWrapperComponent extends FieldWrapper {
33
33
  .withDialogSize(StyleSizeEnum.Small)
34
34
  .withButtonDescriptor(new ActionButtonDescriptor()
35
35
  .withIcon('pi pi-language')
36
- .withLabel('mngEditor.showTranslations')
36
+ .withLabel('mngEditor.localizations.showTranslations')
37
37
  .withStyleClass(new ButtonStyleBuilder().withTextButton().withCustomClass('py-0 mb-1 w-auto')))
38
38
  .withFetchFunction(() => of(this.model))
39
39
  .withSubmitFunction(ctx => {
@@ -49,7 +49,7 @@ export class MngFormlyFieldWrapperComponent extends FieldWrapper {
49
49
  .withDialogSize(StyleSizeEnum.Small)
50
50
  .withButtonDescriptor(new ActionButtonDescriptor()
51
51
  .withIcon('pi pi-language')
52
- .withLabel('mngEditor.showTranslations')
52
+ .withLabel('mngEditor.localizations.showTranslations')
53
53
  .withStyleClass(new ButtonStyleBuilder().withTextButton().withCustomClass('py-0 mb-1 w-auto')))
54
54
  .withSubmitFunction(ctx => {
55
55
  this.form
@@ -62,7 +62,7 @@ export class MngFormlyFieldWrapperComponent extends FieldWrapper {
62
62
  }
63
63
  addMissingTranslationHelperText() {
64
64
  if (!this.model[this.props?.['descriptor'].property + 'Translated']) {
65
- this.props?.['descriptor']?.withHelpText('general.missingTranslation');
65
+ this.props?.['descriptor']?.withHelpText('mngEditor.localizations.missingTranslation');
66
66
  this.field.className += ' localized-input-border-orange';
67
67
  }
68
68
  else {
@@ -76,4 +76,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImpor
76
76
  type: Component,
77
77
  args: [{ selector: 'mng-formly-field-wrapper', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div [class]=\"props?.['descriptor']?.['fieldClassName'] ?? 'field'\">\n <div class=\"grid mt-0\">\n <label *ngIf=\"props?.label\" [for]=\"key\" class=\"col\" [class]=\"props?.['descriptor']?.['labelClassName'] ?? ''\"\n >{{ props!.label! | translate }} <span *ngIf=\"props.required && props['hideRequiredMarker'] !== true\">*</span></label\n >\n <mng-action *ngIf=\"props?.['descriptor']?.['_isLocalized']\" class=\"col text-right\" [action]=\"localizationAction\"></mng-action>\n </div>\n <ng-container #fieldComponent></ng-container>\n <small *ngIf=\"props?.['descriptor']?.['helpText']\">{{ props?.['descriptor']?.['helpText'] | translate }}</small>\n <small *ngIf=\"showError\" class=\"p-error\">\n <formly-validation-message [field]=\"field\"></formly-validation-message>\n </small>\n</div>\n" }]
78
78
  }] });
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWZpZWxkLXdyYXBwZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vZm9ybWx5L3dyYXBwZXJzL2Zvcm1seS1maWVsZC13cmFwcGVyL2Zvcm1seS1maWVsZC13cmFwcGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2Zvcm1seS93cmFwcGVycy9mb3JtbHktZmllbGQtd3JhcHBlci9mb3JtbHktZmllbGQtd3JhcHBlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBRXpFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXhCLE9BQU8sRUFBQyxzQkFBc0IsRUFBb0Isc0JBQXNCLEVBQUUsNEJBQTRCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUMxSSxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sOEJBQThCLENBQUM7Ozs7OztBQU8zRCxNQUFNLE9BQU8sOEJBQStCLFNBQVEsWUFBWTtJQUdyRCxRQUFRO1FBQ1gsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsV0FBVyxFQUFFO1lBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFDO2dCQUN2QyxNQUFNLHVCQUF1QixHQUFHLElB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QkFBa0IsQ0FBQyxDQUFDLENBQ3JHO3FCQUNBLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUN0QixJQUFJLENBQUMsSUFBSTt5QkFDSixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBRTt5QkFDeEUsVUFBVSxDQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxDQUFDO29CQUNsSCxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuQyxDQUFDLENBQUMsQ0FBQzthQUNWO1NBQ0o7SUFDTCxDQUFDO0lBRU8sK0JBQStCO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDLEVBQUU7WUFDakUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLGdDQUFnQyxDQUFDO1NBQzVEO2FBQU07WUFDSCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2hEO0lBQ0wsQ0FBQzs7MkhBaEVRLDhCQUE4QjsrR0FBOUIsOEJBQThCLHVGQ2YzQyx5MUJBYUE7MkZERWEsOEJBQThCO2tCQUwxQyxTQUFTOytCQUNJLDBCQUEwQixtQkFFbkIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtGaWVsZFdyYXBwZXJ9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHtvZn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7QWN0aW9uQnV0dG9uRGVzY3JpcHRvciwgQWN0aW9uRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvcn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHtBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZGVzY3JpcHRvcnMvdHlwZXMnO1xuaW1wb3J0IHtCdXR0b25TdHlsZUJ1aWxkZXJ9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3N0eWxlcyc7XG5pbXBvcnQge1N0eWxlU2l6ZUVudW19IGZyb20gJy4uLy4uLy4uLy4uLy4uL3N0eWxlcy9tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ21uZy1mb3JtbHktZmllbGQtd3JhcHBlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Zvcm1seS1maWVsZC13cmFwcGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNbmdGb3JtbHlGaWVsZFdyYXBwZXJDb21wb25lbnQgZXh0ZW5kcyBGaWVsZFdyYXBwZXIgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHB1YmxpYyBsb2NhbGl6YXRpb25BY3Rpb24hOiBBY3Rpb25EZXNjcmlwdG9yPHVua25vd24+O1xuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5wcm9wcz8uWydkZXNjcmlwdG9yJ10/LmlzTG9jYWxpemVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtU3RhdGUuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZE1pc3NpbmdUcmFuc2xhdGlvbkhlbHBlclRleHQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3TG9jYWxpemF0aW9uc0FjdGlvbiA9IG5ldyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yKHRoaXMucHJvcHM/LlsnZGVzY3JpcHRvciddPy5sb2NhbGl6YXRpb25UYWJsZXZpZXcuZGV0YWlsc0VkaXRvciwgJ2xvY2FsaXphdGlvbi1kZXRhaWxzJylcbiAgICAgICAgICAgICAgICAgICAgLndpdGhEaWFsb2dDbGFzc05hbWUoJ21uZy1maWVsZC1kaWFsb2cgbW5nLWFjdGlvbi1lZGl0b3ItZGlhbG9nJylcbiAgICAgICAgICAgICAgICAgICAgLndpdGhEaWFsb2dTaXplKFN0eWxlU2l6ZUVudW0uU21hbGwpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoQnV0dG9uRGVzY3JpcHRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBY3Rpb25CdXR0b25EZXNjcmlwdG9yKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aEljb24oJ3BpIHBpLWxhbmd1YWdlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aExhYmVsKCdtbmdFZGl0b3Iuc2hvd1RyYW5zbGF0aW9ucycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhTdHlsZUNsYXNzKG5ldyBCdXR0b25TdHlsZUJ1aWxkZXIoKS53aXRoVGV4dEJ1dHRvbigpLndpdGhDdXN0b21DbGFzcygncHktMCBtYi0xIHctYXV0bycpKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC53aXRoRmV0Y2hGdW5jdGlvbigoKSA9PiBvZih0aGlzLm1vZGVsKSk7XG4gICAgICAgICAgICAgICAgdmlld0xvY2FsaXphdGlvbnNBY3Rpb24ud2l0aEVkaXRvckFjdGlvbnMoW25ldyBBY3Rpb25FZGl0b3JTdWJtaXREZXNjcmlwdG9yKHZpZXdMb2NhbGl6YXRpb25zQWN0aW9uLCBBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bS5DYW5jZWwpXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25BY3Rpb24gPSB2aWV3TG9jYWxpemF0aW9uc0FjdGlvbjtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5mb3JtU3RhdGUuZWRpdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkTWlzc2luZ1RyYW5zbGF0aW9uSGVscGVyVGV4dCgpO1xuICAgICAgICAgICAgICAgIHRoaXMubG9jYWxpemF0aW9uQWN0aW9uID0gbmV3IEFjdGlvbkVkaXRvckRlc2NyaXB0b3IodGhpcy5wcm9wcz8uWydkZXNjcmlwdG9yJ10/LmxvY2FsaXphdGlvblRhYmxldmlldy5lZGl0RWRpdG9yLCAnbG9jYWxpemVkLWVkaXQnKVxuICAgICAgICAgICAgICAgICAgICAud2l0aERpYWxvZ0NsYXNzTmFtZSgnbW5nLWZpZWxkLWRpYWxvZyBtbmctYWN0aW9uLWVkaXRvci1kaWFsb2cnKVxuICAgICAgICAgICAgICAgICAgICAud2l0aERpYWxvZ1NpemUoU3R5bGVTaXplRW51bS5TbWFsbClcbiAgICAgICAgICAgICAgICAgICAgLndpdGhCdXR0b25EZXNjcmlwdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEFjdGlvbkJ1dHRvbkRlc2NyaXB0b3IoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoSWNvbigncGkgcGktbGFuZ3VhZ2UnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoTGFiZWwoJ21uZ0VkaXRvci5zaG93VHJhbnNsYXRpb25zJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aFN0eWxlQ2xhc3MobmV3IEJ1dHRvblN0eWxlQnVpbGRlcigpLndpdGhUZXh0QnV0dG9uKCkud2l0aEN1c3RvbUNsYXNzKCdweS0wIG1iLTEgdy1hdXRvJykpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLndpdGhGZXRjaEZ1bmN0aW9uKCgpID0+IG9mKHRoaXMubW9kZWwpKVxuICAgICAgICAgICAgICAgICAgICAud2l0aFN1Ym1pdEZ1bmN0aW9uKGN0eCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KHRoaXMucHJvcHM/LlsnZGVzY3JpcHRvciddLmVkaXRvci5sb2NhbGl6YXRpb25Mb2NhbGl6YXRpb25Qcm9wZXJ0eSkhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBhdGNoVmFsdWUoKGN0eC5wYXJhbWV0ZXJzLml0ZW0gYXMgYW55KVt0aGlzLnByb3BzPy5bJ2Rlc2NyaXB0b3InXS5lZGl0b3IubG9jYWxpemF0aW9uTG9jYWxpemF0aW9uUHJvcGVydHldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihjdHgucGFyYW1ldGVycy5pdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZm9ybVN0YXRlLmFkZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9jYWxpemF0aW9uQWN0aW9uID0gbmV3IEFjdGlvbkVkaXRvckRlc2NyaXB0b3IodGhpcy5wcm9wcz8uWydkZXNjcmlwdG9yJ10/LmxvY2FsaXphdGlvblRhYmxldmlldy5hZGRFZGl0b3IsICdsb2NhbGl6YXRpb25zLWFkZCcpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoRGlhbG9nQ2xhc3NOYW1lKCdtbmctZmllbGQtZGlhbG9nIG1uZy1hY3Rpb24tZWRpdG9yLWRpYWxvZycpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoRGlhbG9nU2l6ZShTdHlsZVNpemVFbnVtLlNtYWxsKVxuICAgICAgICAgICAgICAgICAgICAud2l0aEJ1dHRvbkRlc2NyaXB0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgQWN0aW9uQnV0dG9uRGVzY3JpcHRvcigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhJY29uKCdwaSBwaS1sYW5ndWFnZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhMYWJlbCgnbW5nRWRpdG9yLnNob3dUcmFuc2xhdGlvbnMnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoU3R5bGVDbGFzcyhuZXcgQnV0dG9uU3R5bGVCdWlsZGVyKCkud2l0aFRleHRCdXR0b24oKS53aXRoQ3VzdG9tQ2xhc3MoJ3B5LTAgbWItMSB3LWF1dG8nKSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAud2l0aFN1Ym1pdEZ1bmN0aW9uKGN0eCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KHRoaXMucHJvcHM/LlsnZGVzY3JpcHRvciddLmVkaXRvci5sb2NhbGl6YXRpb25Mb2NhbGl6YXRpb25Qcm9wZXJ0eSkhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBhdGNoVmFsdWUoKGN0eC5wYXJhbWV0ZXJzLml0ZW0gYXMgYW55KVt0aGlzLnByb3BzPy5bJ2Rlc2NyaXB0b3InXS5lZGl0b3IubG9jYWxpemF0aW9uTG9jYWxpemF0aW9uUHJvcGVydHldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihjdHgucGFyYW1ldGVycy5pdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZE1pc3NpbmdUcmFuc2xhdGlvbkhlbHBlclRleHQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5tb2RlbFt0aGlzLnByb3BzPy5bJ2Rlc2NyaXB0b3InXS5wcm9wZXJ0eSArICdUcmFuc2xhdGVkJ10pIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHM/LlsnZGVzY3JpcHRvciddPy53aXRoSGVscFRleHQoJ2dlbmVyYWwubWlzc2luZ1RyYW5zbGF0aW9uJyk7XG4gICAgICAgICAgICB0aGlzLmZpZWxkLmNsYXNzTmFtZSArPSAnIGxvY2FsaXplZC1pbnB1dC1ib3JkZXItb3JhbmdlJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHM/LlsnZGVzY3JpcHRvciddPy53aXRoSGVscFRleHQoJycpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdiBbY2xhc3NdPVwicHJvcHM/LlsnZGVzY3JpcHRvciddPy5bJ2ZpZWxkQ2xhc3NOYW1lJ10gPz8gJ2ZpZWxkJ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJncmlkIG10LTBcIj5cbiAgICAgICAgPGxhYmVsICpuZ0lmPVwicHJvcHM/LmxhYmVsXCIgW2Zvcl09XCJrZXlcIiBjbGFzcz1cImNvbFwiIFtjbGFzc109XCJwcm9wcz8uWydkZXNjcmlwdG9yJ10/LlsnbGFiZWxDbGFzc05hbWUnXSA/PyAnJ1wiXG4gICAgICAgICAgICA+e3sgcHJvcHMhLmxhYmVsISB8IHRyYW5zbGF0ZSB9fSA8c3BhbiAqbmdJZj1cInByb3BzLnJlcXVpcmVkICYmIHByb3BzWydoaWRlUmVxdWlyZWRNYXJrZXInXSAhPT0gdHJ1ZVwiPio8L3NwYW4+PC9sYWJlbFxuICAgICAgICA+XG4gICAgICAgIDxtbmctYWN0aW9uICpuZ0lmPVwicHJvcHM/LlsnZGVzY3JpcHRvciddPy5bJ19pc0xvY2FsaXplZCddXCIgY2xhc3M9XCJjb2wgdGV4dC1yaWdodFwiIFthY3Rpb25dPVwibG9jYWxpemF0aW9uQWN0aW9uXCI+PC9tbmctYWN0aW9uPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgI2ZpZWxkQ29tcG9uZW50PjwvbmctY29udGFpbmVyPlxuICAgIDxzbWFsbCAqbmdJZj1cInByb3BzPy5bJ2Rlc2NyaXB0b3InXT8uWydoZWxwVGV4dCddXCI+e3sgcHJvcHM/LlsnZGVzY3JpcHRvciddPy5bJ2hlbHBUZXh0J10gfCB0cmFuc2xhdGUgfX08L3NtYWxsPlxuICAgIDxzbWFsbCAqbmdJZj1cInNob3dFcnJvclwiIGNsYXNzPVwicC1lcnJvclwiPlxuICAgICAgICA8Zm9ybWx5LXZhbGlkYXRpb24tbWVzc2FnZSBbZmllbGRdPVwiZmllbGRcIj48L2Zvcm1seS12YWxpZGF0aW9uLW1lc3NhZ2U+XG4gICAgPC9zbWFsbD5cbjwvZGl2PlxuIl19
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybWx5LWZpZWxkLXdyYXBwZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL2Zvcm0vZm9ybWx5L3dyYXBwZXJzL2Zvcm1seS1maWVsZC13cmFwcGVyL2Zvcm1seS1maWVsZC13cmFwcGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9mb3JtL2Zvcm1seS93cmFwcGVycy9mb3JtbHktZmllbGQtd3JhcHBlci9mb3JtbHktZmllbGQtd3JhcHBlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBRXpFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsRUFBRSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRXhCLE9BQU8sRUFBQyxzQkFBc0IsRUFBb0Isc0JBQXNCLEVBQUUsNEJBQTRCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUMxSSxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RSxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUN6RCxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sOEJBQThCLENBQUM7Ozs7OztBQU8zRCxNQUFNLE9BQU8sOEJBQStCLFNBQVEsWUFBWTtJQUdyRCxRQUFRO1FBQ1gsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsV0FBVyxFQUFFO1lBQ3pDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFDO2dCQUN2QyxNQUFNLHVCQUF1QixHQUFHLElB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QkFBa0IsQ0FBQyxDQUFDLENBQ3JHO3FCQUNBLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUN0QixJQUFJLENBQUMsSUFBSTt5QkFDSixHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxnQ0FBZ0MsQ0FBRTt5QkFDeEUsVUFBVSxDQUFFLEdBQUcsQ0FBQyxVQUFVLENBQUMsSUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsZ0NBQWdDLENBQUMsQ0FBQyxDQUFDO29CQUNsSCxPQUFPLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuQyxDQUFDLENBQUMsQ0FBQzthQUNWO1NBQ0o7SUFDTCxDQUFDO0lBRU8sK0JBQStCO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxRQUFRLEdBQUcsWUFBWSxDQUFDLEVBQUU7WUFDakUsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFlBQVksQ0FBQyxFQUFFLFlBQVksQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1lBQ3ZGLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxJQUFJLGdDQUFnQyxDQUFDO1NBQzVEO2FBQU07WUFDSCxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2hEO0lBQ0wsQ0FBQzs7MkhBaEVRLDhCQUE4QjsrR0FBOUIsOEJBQThCLHVGQ2YzQyx5MUJBYUE7MkZERWEsOEJBQThCO2tCQUwxQyxTQUFTOytCQUNJLDBCQUEwQixtQkFFbkIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtGaWVsZFdyYXBwZXJ9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHtvZn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7QWN0aW9uQnV0dG9uRGVzY3JpcHRvciwgQWN0aW9uRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yRGVzY3JpcHRvciwgQWN0aW9uRWRpdG9yU3VibWl0RGVzY3JpcHRvcn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZGVzY3JpcHRvcnMnO1xuaW1wb3J0IHtBY3Rpb25FZGl0b3JTdWJtaXRUeXBlRW51bX0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZGVzY3JpcHRvcnMvdHlwZXMnO1xuaW1wb3J0IHtCdXR0b25TdHlsZUJ1aWxkZXJ9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3N0eWxlcyc7XG5pbXBvcnQge1N0eWxlU2l6ZUVudW19IGZyb20gJy4uLy4uLy4uLy4uLy4uL3N0eWxlcy9tb2RlbHMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ21uZy1mb3JtbHktZmllbGQtd3JhcHBlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2Zvcm1seS1maWVsZC13cmFwcGVyLmNvbXBvbmVudC5odG1sJyxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNbmdGb3JtbHlGaWVsZFdyYXBwZXJDb21wb25lbnQgZXh0ZW5kcyBGaWVsZFdyYXBwZXIgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIHB1YmxpYyBsb2NhbGl6YXRpb25BY3Rpb24hOiBBY3Rpb25EZXNjcmlwdG9yPHVua25vd24+O1xuXG4gICAgcHVibGljIG5nT25Jbml0KCkge1xuICAgICAgICBpZiAodGhpcy5wcm9wcz8uWydkZXNjcmlwdG9yJ10/LmlzTG9jYWxpemVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtU3RhdGUuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZE1pc3NpbmdUcmFuc2xhdGlvbkhlbHBlclRleHQoKTtcbiAgICAgICAgICAgICAgICBjb25zdCB2aWV3TG9jYWxpemF0aW9uc0FjdGlvbiA9IG5ldyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yKHRoaXMucHJvcHM/LlsnZGVzY3JpcHRvciddPy5sb2NhbGl6YXRpb25UYWJsZXZpZXcuZGV0YWlsc0VkaXRvciwgJ2xvY2FsaXphdGlvbi1kZXRhaWxzJylcbiAgICAgICAgICAgICAgICAgICAgLndpdGhEaWFsb2dDbGFzc05hbWUoJ21uZy1maWVsZC1kaWFsb2cgbW5nLWFjdGlvbi1lZGl0b3ItZGlhbG9nJylcbiAgICAgICAgICAgICAgICAgICAgLndpdGhEaWFsb2dTaXplKFN0eWxlU2l6ZUVudW0uU21hbGwpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoQnV0dG9uRGVzY3JpcHRvcihcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBBY3Rpb25CdXR0b25EZXNjcmlwdG9yKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aEljb24oJ3BpIHBpLWxhbmd1YWdlJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aExhYmVsKCdtbmdFZGl0b3IubG9jYWxpemF0aW9ucy5zaG93VHJhbnNsYXRpb25zJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aFN0eWxlQ2xhc3MobmV3IEJ1dHRvblN0eWxlQnVpbGRlcigpLndpdGhUZXh0QnV0dG9uKCkud2l0aEN1c3RvbUNsYXNzKCdweS0wIG1iLTEgdy1hdXRvJykpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLndpdGhGZXRjaEZ1bmN0aW9uKCgpID0+IG9mKHRoaXMubW9kZWwpKTtcbiAgICAgICAgICAgICAgICB2aWV3TG9jYWxpemF0aW9uc0FjdGlvbi53aXRoRWRpdG9yQWN0aW9ucyhbbmV3IEFjdGlvbkVkaXRvclN1Ym1pdERlc2NyaXB0b3Iodmlld0xvY2FsaXphdGlvbnNBY3Rpb24sIEFjdGlvbkVkaXRvclN1Ym1pdFR5cGVFbnVtLkNhbmNlbCldKTtcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsaXphdGlvbkFjdGlvbiA9IHZpZXdMb2NhbGl6YXRpb25zQWN0aW9uO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZvcm1TdGF0ZS5lZGl0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRNaXNzaW5nVHJhbnNsYXRpb25IZWxwZXJUZXh0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbGl6YXRpb25BY3Rpb24gPSBuZXcgQWN0aW9uRWRpdG9yRGVzY3JpcHRvcih0aGlzLnByb3BzPy5bJ2Rlc2NyaXB0b3InXT8ubG9jYWxpemF0aW9uVGFibGV2aWV3LmVkaXRFZGl0b3IsICdsb2NhbGl6ZWQtZWRpdCcpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoRGlhbG9nQ2xhc3NOYW1lKCdtbmctZmllbGQtZGlhbG9nIG1uZy1hY3Rpb24tZWRpdG9yLWRpYWxvZycpXG4gICAgICAgICAgICAgICAgICAgIC53aXRoRGlhbG9nU2l6ZShTdHlsZVNpemVFbnVtLlNtYWxsKVxuICAgICAgICAgICAgICAgICAgICAud2l0aEJ1dHRvbkRlc2NyaXB0b3IoXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgQWN0aW9uQnV0dG9uRGVzY3JpcHRvcigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhJY29uKCdwaSBwaS1sYW5ndWFnZScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhMYWJlbCgnbW5nRWRpdG9yLmxvY2FsaXphdGlvbnMuc2hvd1RyYW5zbGF0aW9ucycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLndpdGhTdHlsZUNsYXNzKG5ldyBCdXR0b25TdHlsZUJ1aWxkZXIoKS53aXRoVGV4dEJ1dHRvbigpLndpdGhDdXN0b21DbGFzcygncHktMCBtYi0xIHctYXV0bycpKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIC53aXRoRmV0Y2hGdW5jdGlvbigoKSA9PiBvZih0aGlzLm1vZGVsKSlcbiAgICAgICAgICAgICAgICAgICAgLndpdGhTdWJtaXRGdW5jdGlvbihjdHggPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCh0aGlzLnByb3BzPy5bJ2Rlc2NyaXB0b3InXS5lZGl0b3IubG9jYWxpemF0aW9uTG9jYWxpemF0aW9uUHJvcGVydHkpIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wYXRjaFZhbHVlKChjdHgucGFyYW1ldGVycy5pdGVtIGFzIGFueSlbdGhpcy5wcm9wcz8uWydkZXNjcmlwdG9yJ10uZWRpdG9yLmxvY2FsaXphdGlvbkxvY2FsaXphdGlvblByb3BlcnR5XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoY3R4LnBhcmFtZXRlcnMuaXRlbSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmZvcm1TdGF0ZS5hZGQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsaXphdGlvbkFjdGlvbiA9IG5ldyBBY3Rpb25FZGl0b3JEZXNjcmlwdG9yKHRoaXMucHJvcHM/LlsnZGVzY3JpcHRvciddPy5sb2NhbGl6YXRpb25UYWJsZXZpZXcuYWRkRWRpdG9yLCAnbG9jYWxpemF0aW9ucy1hZGQnKVxuICAgICAgICAgICAgICAgICAgICAud2l0aERpYWxvZ0NsYXNzTmFtZSgnbW5nLWZpZWxkLWRpYWxvZyBtbmctYWN0aW9uLWVkaXRvci1kaWFsb2cnKVxuICAgICAgICAgICAgICAgICAgICAud2l0aERpYWxvZ1NpemUoU3R5bGVTaXplRW51bS5TbWFsbClcbiAgICAgICAgICAgICAgICAgICAgLndpdGhCdXR0b25EZXNjcmlwdG9yKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEFjdGlvbkJ1dHRvbkRlc2NyaXB0b3IoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoSWNvbigncGkgcGktbGFuZ3VhZ2UnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoTGFiZWwoJ21uZ0VkaXRvci5sb2NhbGl6YXRpb25zLnNob3dUcmFuc2xhdGlvbnMnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC53aXRoU3R5bGVDbGFzcyhuZXcgQnV0dG9uU3R5bGVCdWlsZGVyKCkud2l0aFRleHRCdXR0b24oKS53aXRoQ3VzdG9tQ2xhc3MoJ3B5LTAgbWItMSB3LWF1dG8nKSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAud2l0aFN1Ym1pdEZ1bmN0aW9uKGN0eCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KHRoaXMucHJvcHM/LlsnZGVzY3JpcHRvciddLmVkaXRvci5sb2NhbGl6YXRpb25Mb2NhbGl6YXRpb25Qcm9wZXJ0eSkhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnBhdGNoVmFsdWUoKGN0eC5wYXJhbWV0ZXJzLml0ZW0gYXMgYW55KVt0aGlzLnByb3BzPy5bJ2Rlc2NyaXB0b3InXS5lZGl0b3IubG9jYWxpemF0aW9uTG9jYWxpemF0aW9uUHJvcGVydHldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihjdHgucGFyYW1ldGVycy5pdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZE1pc3NpbmdUcmFuc2xhdGlvbkhlbHBlclRleHQoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5tb2RlbFt0aGlzLnByb3BzPy5bJ2Rlc2NyaXB0b3InXS5wcm9wZXJ0eSArICdUcmFuc2xhdGVkJ10pIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHM/LlsnZGVzY3JpcHRvciddPy53aXRoSGVscFRleHQoJ21uZ0VkaXRvci5sb2NhbGl6YXRpb25zLm1pc3NpbmdUcmFuc2xhdGlvbicpO1xuICAgICAgICAgICAgdGhpcy5maWVsZC5jbGFzc05hbWUgKz0gJyBsb2NhbGl6ZWQtaW5wdXQtYm9yZGVyLW9yYW5nZSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzPy5bJ2Rlc2NyaXB0b3InXT8ud2l0aEhlbHBUZXh0KCcnKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsIjxkaXYgW2NsYXNzXT1cInByb3BzPy5bJ2Rlc2NyaXB0b3InXT8uWydmaWVsZENsYXNzTmFtZSddID8/ICdmaWVsZCdcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZ3JpZCBtdC0wXCI+XG4gICAgICAgIDxsYWJlbCAqbmdJZj1cInByb3BzPy5sYWJlbFwiIFtmb3JdPVwia2V5XCIgY2xhc3M9XCJjb2xcIiBbY2xhc3NdPVwicHJvcHM/LlsnZGVzY3JpcHRvciddPy5bJ2xhYmVsQ2xhc3NOYW1lJ10gPz8gJydcIlxuICAgICAgICAgICAgPnt7IHByb3BzIS5sYWJlbCEgfCB0cmFuc2xhdGUgfX0gPHNwYW4gKm5nSWY9XCJwcm9wcy5yZXF1aXJlZCAmJiBwcm9wc1snaGlkZVJlcXVpcmVkTWFya2VyJ10gIT09IHRydWVcIj4qPC9zcGFuPjwvbGFiZWxcbiAgICAgICAgPlxuICAgICAgICA8bW5nLWFjdGlvbiAqbmdJZj1cInByb3BzPy5bJ2Rlc2NyaXB0b3InXT8uWydfaXNMb2NhbGl6ZWQnXVwiIGNsYXNzPVwiY29sIHRleHQtcmlnaHRcIiBbYWN0aW9uXT1cImxvY2FsaXphdGlvbkFjdGlvblwiPjwvbW5nLWFjdGlvbj5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyICNmaWVsZENvbXBvbmVudD48L25nLWNvbnRhaW5lcj5cbiAgICA8c21hbGwgKm5nSWY9XCJwcm9wcz8uWydkZXNjcmlwdG9yJ10/LlsnaGVscFRleHQnXVwiPnt7IHByb3BzPy5bJ2Rlc2NyaXB0b3InXT8uWydoZWxwVGV4dCddIHwgdHJhbnNsYXRlIH19PC9zbWFsbD5cbiAgICA8c21hbGwgKm5nSWY9XCJzaG93RXJyb3JcIiBjbGFzcz1cInAtZXJyb3JcIj5cbiAgICAgICAgPGZvcm1seS12YWxpZGF0aW9uLW1lc3NhZ2UgW2ZpZWxkXT1cImZpZWxkXCI+PC9mb3JtbHktdmFsaWRhdGlvbi1tZXNzYWdlPlxuICAgIDwvc21hbGw+XG48L2Rpdj5cbiJdfQ==