@qbs-origin/origin-form 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/esm2022/lib/action-step-handler.mjs +163 -0
- package/esm2022/lib/auth-client.service.mjs +69 -0
- package/esm2022/lib/enums/label.keys.mjs +721 -0
- package/esm2022/lib/form-css.helper.mjs +367 -0
- package/esm2022/lib/formly/baseFormlyControlComponent.mjs +52 -0
- package/esm2022/lib/formly/baseFormlyStepComponent.mjs +59 -0
- package/esm2022/lib/formly/custom-section-separator.component.mjs +32 -0
- package/esm2022/lib/formly/form-section-separator.component.mjs +36 -0
- package/esm2022/lib/formly/formly-action.mjs +56 -0
- package/esm2022/lib/formly/formly-checkbox/formly-checkbox.component.mjs +52 -0
- package/esm2022/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.mjs +261 -0
- package/esm2022/lib/formly/formly-download-documents/formly-download-documents.component.mjs +126 -0
- package/esm2022/lib/formly/formly-enrol-card/formly-enrol-card.component.mjs +120 -0
- package/esm2022/lib/formly/formly-field-stepper/formly-field-stepper.component.mjs +762 -0
- package/esm2022/lib/formly/formly-generate-documents/formly-generate-documents.component.mjs +57 -0
- package/esm2022/lib/formly/formly-identification.component.mjs +84 -0
- package/esm2022/lib/formly/formly-open-banking/formly-open-banking.component.mjs +590 -0
- package/esm2022/lib/formly/formly-paragraph/formly-paragraph.component.mjs +35 -0
- package/esm2022/lib/formly/formly-radio/formly-radio-component.mjs +49 -0
- package/esm2022/lib/formly/formly-row-fille.mjs +12 -0
- package/esm2022/lib/formly/formly-scan-id/formly-scan-id.component.mjs +284 -0
- package/esm2022/lib/formly/formly-sign/formly-sign.component.mjs +173 -0
- package/esm2022/lib/formly/formly-upload-documents/formly-upload-documents.component.mjs +198 -0
- package/esm2022/lib/formly/formly-validate-contact-info/formly-validate-contact-info.component.mjs +124 -0
- package/esm2022/lib/formly/formly-view-documents/formly-view-documents.component.mjs +245 -0
- package/esm2022/lib/formly/formly-view-offers/formly-view-offers.component.mjs +160 -0
- package/esm2022/lib/model-population.helper.mjs +265 -0
- package/esm2022/lib/models/application-type.model.mjs +12 -0
- package/esm2022/lib/models/application.model.mjs +30 -0
- package/esm2022/lib/models/auth/users.model.mjs +2 -0
- package/esm2022/lib/models/dictionary.model.mjs +20 -0
- package/esm2022/lib/models/flux.model.mjs +105 -0
- package/esm2022/lib/models/forms.model.mjs +572 -0
- package/esm2022/lib/models/label-info.model.mjs +2 -0
- package/esm2022/lib/models/label.model.mjs +2 -0
- package/esm2022/lib/models/language.model.mjs +3 -0
- package/esm2022/lib/models/list.model.mjs +2 -0
- package/esm2022/lib/models/partner.model.mjs +3 -0
- package/esm2022/lib/models/treeview.model.mjs +15 -0
- package/esm2022/lib/origin-form-auth.service.mjs +40 -0
- package/esm2022/lib/origin-form-config.model.mjs +2 -0
- package/esm2022/lib/origin-form-token.interceptor.mjs +35 -0
- package/esm2022/lib/origin-form.component.mjs +2391 -0
- package/esm2022/lib/origin-form.module.mjs +479 -0
- package/esm2022/lib/origin-form.service.mjs +14 -0
- package/esm2022/lib/others/check-list.database.mjs +55 -0
- package/esm2022/lib/others/config-service.mjs +42 -0
- package/esm2022/lib/others/dictionary-label-info.mjs +3 -0
- package/esm2022/lib/others/environment-type.mjs +21 -0
- package/esm2022/lib/others/external-link.directive.mjs +49 -0
- package/esm2022/lib/others/flux-helper.mjs +1397 -0
- package/esm2022/lib/others/picker.component.mjs +119 -0
- package/esm2022/lib/others/translation.pipe.mjs +21 -0
- package/esm2022/lib/others/translations-helper.mjs +258 -0
- package/esm2022/lib/others/utils.mjs +272 -0
- package/esm2022/lib/services/applicationData.service.mjs +145 -0
- package/esm2022/lib/services/auth-http.service.mjs +80 -0
- package/esm2022/lib/services/dialog.service.mjs +56 -0
- package/esm2022/lib/services/dictionary.service.mjs +198 -0
- package/esm2022/lib/services/forms.service.mjs +47 -0
- package/esm2022/lib/services/labels.service.mjs +29 -0
- package/esm2022/lib/services/language.service.mjs +24 -0
- package/esm2022/lib/services/open-banking.service.mjs +194 -0
- package/esm2022/lib/services/origin-form-signalr-handler.service.mjs +107 -0
- package/esm2022/lib/services/origin-form-signalr.service.mjs +105 -0
- package/esm2022/lib/services/otp.service.mjs +28 -0
- package/esm2022/lib/services/proxy.service.mjs +79 -0
- package/esm2022/lib/services/scroll-to-error.service.mjs +369 -0
- package/esm2022/lib/services/translation.service.mjs +27 -0
- package/esm2022/lib/shared-components/confirmation.component.mjs +34 -0
- package/esm2022/lib/shared-components/dictionaries-tree.component.mjs +301 -0
- package/esm2022/lib/shared-components/grid.component.mjs +241 -0
- package/esm2022/lib/shared-components/treeview/treeview.component.mjs +224 -0
- package/esm2022/lib/theme-css.mjs +2254 -0
- package/esm2022/lib/theme-injector.service.mjs +26 -0
- package/esm2022/public-api.mjs +4 -0
- package/esm2022/qbs-origin-origin-form.mjs +5 -0
- package/fesm2022/qbs-origin-origin-form.mjs +15215 -0
- package/fesm2022/qbs-origin-origin-form.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/action-step-handler.d.ts +49 -0
- package/lib/auth-client.service.d.ts +17 -0
- package/lib/enums/label.keys.d.ts +720 -0
- package/lib/form-css.helper.d.ts +28 -0
- package/lib/formly/baseFormlyControlComponent.d.ts +25 -0
- package/lib/formly/baseFormlyStepComponent.d.ts +29 -0
- package/lib/formly/custom-section-separator.component.d.ts +6 -0
- package/lib/formly/form-section-separator.component.d.ts +10 -0
- package/lib/formly/formly-action.d.ts +13 -0
- package/lib/formly/formly-checkbox/formly-checkbox.component.d.ts +15 -0
- package/lib/formly/formly-dictionary-dropdown-tree/formly-dictionary-dropdown-tree.component.d.ts +45 -0
- package/lib/formly/formly-download-documents/formly-download-documents.component.d.ts +22 -0
- package/lib/formly/formly-enrol-card/formly-enrol-card.component.d.ts +114 -0
- package/lib/formly/formly-field-stepper/formly-field-stepper.component.d.ts +79 -0
- package/lib/formly/formly-generate-documents/formly-generate-documents.component.d.ts +17 -0
- package/lib/formly/formly-identification.component.d.ts +19 -0
- package/lib/formly/formly-open-banking/formly-open-banking.component.d.ts +119 -0
- package/lib/formly/formly-paragraph/formly-paragraph.component.d.ts +10 -0
- package/lib/formly/formly-radio/formly-radio-component.d.ts +15 -0
- package/lib/formly/formly-row-fille.d.ts +6 -0
- package/lib/formly/formly-scan-id/formly-scan-id.component.d.ts +41 -0
- package/lib/formly/formly-sign/formly-sign.component.d.ts +36 -0
- package/lib/formly/formly-upload-documents/formly-upload-documents.component.d.ts +25 -0
- package/lib/formly/formly-validate-contact-info/formly-validate-contact-info.component.d.ts +79 -0
- package/lib/formly/formly-view-documents/formly-view-documents.component.d.ts +33 -0
- package/lib/formly/formly-view-offers/formly-view-offers.component.d.ts +23 -0
- package/lib/model-population.helper.d.ts +8 -0
- package/lib/models/application-type.model.d.ts +27 -0
- package/lib/models/application.model.d.ts +107 -0
- package/lib/models/auth/users.model.d.ts +20 -0
- package/lib/models/dictionary.model.d.ts +77 -0
- package/lib/models/flux.model.d.ts +101 -0
- package/lib/models/forms.model.d.ts +504 -0
- package/lib/models/label-info.model.d.ts +10 -0
- package/lib/models/label.model.d.ts +4 -0
- package/lib/models/language.model.d.ts +5 -0
- package/lib/models/list.model.d.ts +8 -0
- package/lib/models/partner.model.d.ts +12 -0
- package/lib/models/treeview.model.d.ts +17 -0
- package/lib/origin-form-auth.service.d.ts +15 -0
- package/lib/origin-form-config.model.d.ts +12 -0
- package/lib/origin-form-token.interceptor.d.ts +12 -0
- package/lib/origin-form.component.d.ts +231 -0
- package/lib/origin-form.module.d.ts +84 -0
- package/lib/origin-form.service.d.ts +6 -0
- package/lib/others/check-list.database.d.ts +16 -0
- package/lib/others/config-service.d.ts +22 -0
- package/lib/others/dictionary-label-info.d.ts +6 -0
- package/lib/others/environment-type.d.ts +8 -0
- package/lib/others/external-link.directive.d.ts +12 -0
- package/lib/others/flux-helper.d.ts +115 -0
- package/lib/others/picker.component.d.ts +36 -0
- package/lib/others/translation.pipe.d.ts +10 -0
- package/lib/others/translations-helper.d.ts +31 -0
- package/lib/others/utils.d.ts +37 -0
- package/lib/services/applicationData.service.d.ts +35 -0
- package/lib/services/auth-http.service.d.ts +21 -0
- package/lib/services/dialog.service.d.ts +20 -0
- package/lib/services/dictionary.service.d.ts +89 -0
- package/lib/services/forms.service.d.ts +17 -0
- package/lib/services/labels.service.d.ts +13 -0
- package/lib/services/language.service.d.ts +14 -0
- package/lib/services/open-banking.service.d.ts +137 -0
- package/lib/services/origin-form-signalr-handler.service.d.ts +29 -0
- package/lib/services/origin-form-signalr.service.d.ts +24 -0
- package/lib/services/otp.service.d.ts +22 -0
- package/lib/services/proxy.service.d.ts +29 -0
- package/lib/services/scroll-to-error.service.d.ts +54 -0
- package/lib/services/translation.service.d.ts +10 -0
- package/lib/shared-components/confirmation.component.d.ts +77 -0
- package/lib/shared-components/dictionaries-tree.component.d.ts +51 -0
- package/lib/shared-components/grid.component.d.ts +138 -0
- package/lib/shared-components/treeview/treeview.component.d.ts +121 -0
- package/lib/theme-css.d.ts +2 -0
- package/lib/theme-injector.service.d.ts +8 -0
- package/package.json +42 -0
- package/public-api.d.ts +3 -0
- package/schematics-compiled/collection.json +10 -0
- package/schematics-compiled/ng-add/index.d.ts +2 -0
- package/schematics-compiled/ng-add/index.js +67 -0
- package/schematics-compiled/ng-add/index.js.map +1 -0
- package/schematics-compiled/ng-add/schema.json +8 -0
- package/src/lib/assets/fonts/Figtree-Bold.ttf +0 -0
- package/src/lib/assets/fonts/Figtree-Light.ttf +0 -0
- package/src/lib/assets/fonts/Figtree-Regular.ttf +0 -0
- package/src/lib/assets/fonts/Sora-ExtraBold.ttf +0 -0
- package/src/lib/assets/fonts/Sora-Light.ttf +0 -0
- package/src/lib/assets/fonts/Sora-Regular.ttf +0 -0
- package/src/lib/assets/fonts/ttrounds-bold-webfont.woff +0 -0
- package/src/lib/assets/fonts/ttrounds-bold-webfont.woff2 +0 -0
- package/src/lib/assets/fonts/ttrounds-regular-webfont.woff +0 -0
- package/src/lib/assets/fonts/ttrounds-regular-webfont.woff2 +0 -0
- package/src/lib/assets/fonts/ttrounds-thin-webfont.woff +0 -0
- package/src/lib/assets/fonts/ttrounds-thin-webfont.woff2 +0 -0
- package/src/lib/assets/images/flag/icon-flag-de.svg +10 -0
- package/src/lib/assets/images/flag/icon-flag-en.svg +1 -0
- package/src/lib/assets/images/flag/icon-flag-es.svg +11 -0
- package/src/lib/assets/images/flag/icon-flag-fr.svg +1 -0
- package/src/lib/assets/images/flag/icon-flag-ro.svg +11 -0
- package/src/lib/assets/images/flag/origin-form/new-id-card.png +0 -0
- package/src/lib/assets/images/flag/origin-form/old-id-card.png +0 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, } from '@angular/core';
|
|
2
|
+
import { Observable, map, startWith } from 'rxjs';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/forms";
|
|
5
|
+
import * as i2 from "@angular/common";
|
|
6
|
+
import * as i3 from "@angular/material/input";
|
|
7
|
+
import * as i4 from "@angular/material/form-field";
|
|
8
|
+
import * as i5 from "@angular/material/autocomplete";
|
|
9
|
+
import * as i6 from "@angular/material/core";
|
|
10
|
+
import * as i7 from "@angular/material/chips";
|
|
11
|
+
import * as i8 from "@angular/material/icon";
|
|
12
|
+
export class PickerComponent {
|
|
13
|
+
constructor(builder) {
|
|
14
|
+
this.builder = builder;
|
|
15
|
+
this.selections = [];
|
|
16
|
+
this.readonly = false;
|
|
17
|
+
this.inputVisible = true;
|
|
18
|
+
this.displayProperty = 'name';
|
|
19
|
+
this.iconProperty = 'icon';
|
|
20
|
+
this.picked = new EventEmitter();
|
|
21
|
+
this.removed = new EventEmitter();
|
|
22
|
+
this.form = this.builder.group({
|
|
23
|
+
picker: [''],
|
|
24
|
+
});
|
|
25
|
+
this.groups = [];
|
|
26
|
+
}
|
|
27
|
+
ngOnInit() {
|
|
28
|
+
this.refresh();
|
|
29
|
+
}
|
|
30
|
+
ngOnChanges(changes) {
|
|
31
|
+
if (changes['data']) {
|
|
32
|
+
this.refresh();
|
|
33
|
+
}
|
|
34
|
+
if (changes['selections']) {
|
|
35
|
+
this.refresh();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
refresh() {
|
|
39
|
+
if (this.data instanceof Observable) {
|
|
40
|
+
this.data.subscribe({
|
|
41
|
+
next: (data) => {
|
|
42
|
+
this.getItems(data);
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
this.getItems(this.data);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
getItems(data) {
|
|
51
|
+
this.groups = [];
|
|
52
|
+
if (data && data.length) {
|
|
53
|
+
data.forEach((item) => {
|
|
54
|
+
if (item) {
|
|
55
|
+
const letter = item[this.displayProperty][0];
|
|
56
|
+
if (!this.groups.some((i) => i.key == letter)) {
|
|
57
|
+
this.groups.push({ key: letter, values: [] });
|
|
58
|
+
}
|
|
59
|
+
const object = this.groups.find((i) => i.key == letter);
|
|
60
|
+
object?.values.push(item);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
this.groups.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0));
|
|
64
|
+
this.options = this.form.get('picker').valueChanges.pipe(startWith(''), map((value) => this.filter(value || '')));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
filter(value) {
|
|
68
|
+
if (typeof value === 'string') {
|
|
69
|
+
return this.groups
|
|
70
|
+
.map((group) => ({
|
|
71
|
+
key: group.key,
|
|
72
|
+
values: filter(group.values, this.selections, value, this.displayProperty),
|
|
73
|
+
}))
|
|
74
|
+
.filter((group) => group.values.length > 0);
|
|
75
|
+
}
|
|
76
|
+
return [];
|
|
77
|
+
}
|
|
78
|
+
selected(value) {
|
|
79
|
+
this.selections.push(value);
|
|
80
|
+
this.form.get('picker')?.setValue('');
|
|
81
|
+
this.picked.emit(value);
|
|
82
|
+
}
|
|
83
|
+
remove(value) {
|
|
84
|
+
this.selections.splice(this.selections.findIndex((i) => i[this.displayProperty] === value[this.displayProperty]), 1);
|
|
85
|
+
this.form.get('picker')?.setValue('');
|
|
86
|
+
this.removed.emit(value);
|
|
87
|
+
}
|
|
88
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PickerComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
89
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PickerComponent, selector: "shared-picker", inputs: { data: "data", selections: "selections", placeholder: "placeholder", readonly: "readonly", inputVisible: "inputVisible", displayProperty: "displayProperty", iconProperty: "iconProperty" }, outputs: { picked: "picked", removed: "removed" }, usesOnChanges: true, ngImport: i0, template: "<form [formGroup]=\"form\">\n <mat-form-field appearance=\"outline\" class=\"w-100 hide-hint\" [class.disabled]=\"readonly\" [hidden]=\"true\"\n *ngIf=\"inputVisible\">\n <input type=\"text\" matInput [placeholder]=\"placeholder ?? ''\" [readonly]=\"readonly\" [disabled]=\"readonly\"\n formControlName=\"picker\" [matAutocomplete]=\"autocomplete\" />\n <mat-icon matPrefix>\n <i-tabler name=\"arrow-down-right\" class=\"icon-20 d-flex\"></i-tabler>\n </mat-icon>\n\n <mat-autocomplete #autocomplete=\"matAutocomplete\" (optionSelected)=\"selected($event.option.value)\">\n <mat-optgroup *ngFor=\"let group of options | async\" [label]=\"group.key\">\n <mat-option *ngFor=\"let value of group.values\" [value]=\"value\">\n <div class=\"button-cell\">\n <mat-icon *ngIf=\"value[iconProperty]\">{{ value[iconProperty] }}</mat-icon>\n {{ value[displayProperty] }}\n </div>\n </mat-option>\n </mat-optgroup>\n </mat-autocomplete>\n </mat-form-field>\n\n <mat-chip-set>\n <mat-chip *ngFor=\"let value of selections\" (removed)=\"remove(value)\" [disabled]=\"readonly\" class=\"f-s-14\">\n <div class=\"button-cell\">\n <mat-icon *ngIf=\"value[iconProperty]\">{{ value[iconProperty] }}</mat-icon>\n {{ value[displayProperty] }}\n </div>\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip>\n </mat-chip-set>\n</form>", styles: [".button-cell{display:flex;align-items:center}::ng-deep mat-form-field.disabled{opacity:.6;pointer-events:none}::ng-deep mat-form-field.disabled .mat-form-field-outline{border-color:#bdbdbd!important}::ng-deep mat-form-field.disabled .mat-input-element{color:#9e9e9e!important;cursor:not-allowed!important}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i3.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i4.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "component", type: i5.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "component", type: i6.MatOptgroup, selector: "mat-optgroup", inputs: ["label", "disabled"], exportAs: ["matOptgroup"] }, { kind: "directive", type: i5.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i7.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["role", "id", "aria-label", "aria-description", "value", "color", "removable", "highlighted", "disableRipple", "disabled"], outputs: ["removed", "destroyed"], exportAs: ["matChip"] }, { kind: "directive", type: i7.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i7.MatChipSet, selector: "mat-chip-set", inputs: ["disabled", "role", "tabIndex"] }, { kind: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }] }); }
|
|
90
|
+
}
|
|
91
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PickerComponent, decorators: [{
|
|
92
|
+
type: Component,
|
|
93
|
+
args: [{ selector: 'shared-picker', template: "<form [formGroup]=\"form\">\n <mat-form-field appearance=\"outline\" class=\"w-100 hide-hint\" [class.disabled]=\"readonly\" [hidden]=\"true\"\n *ngIf=\"inputVisible\">\n <input type=\"text\" matInput [placeholder]=\"placeholder ?? ''\" [readonly]=\"readonly\" [disabled]=\"readonly\"\n formControlName=\"picker\" [matAutocomplete]=\"autocomplete\" />\n <mat-icon matPrefix>\n <i-tabler name=\"arrow-down-right\" class=\"icon-20 d-flex\"></i-tabler>\n </mat-icon>\n\n <mat-autocomplete #autocomplete=\"matAutocomplete\" (optionSelected)=\"selected($event.option.value)\">\n <mat-optgroup *ngFor=\"let group of options | async\" [label]=\"group.key\">\n <mat-option *ngFor=\"let value of group.values\" [value]=\"value\">\n <div class=\"button-cell\">\n <mat-icon *ngIf=\"value[iconProperty]\">{{ value[iconProperty] }}</mat-icon>\n {{ value[displayProperty] }}\n </div>\n </mat-option>\n </mat-optgroup>\n </mat-autocomplete>\n </mat-form-field>\n\n <mat-chip-set>\n <mat-chip *ngFor=\"let value of selections\" (removed)=\"remove(value)\" [disabled]=\"readonly\" class=\"f-s-14\">\n <div class=\"button-cell\">\n <mat-icon *ngIf=\"value[iconProperty]\">{{ value[iconProperty] }}</mat-icon>\n {{ value[displayProperty] }}\n </div>\n <button matChipRemove>\n <mat-icon>cancel</mat-icon>\n </button>\n </mat-chip>\n </mat-chip-set>\n</form>", styles: [".button-cell{display:flex;align-items:center}::ng-deep mat-form-field.disabled{opacity:.6;pointer-events:none}::ng-deep mat-form-field.disabled .mat-form-field-outline{border-color:#bdbdbd!important}::ng-deep mat-form-field.disabled .mat-input-element{color:#9e9e9e!important;cursor:not-allowed!important}\n"] }]
|
|
94
|
+
}], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { data: [{
|
|
95
|
+
type: Input
|
|
96
|
+
}], selections: [{
|
|
97
|
+
type: Input
|
|
98
|
+
}], placeholder: [{
|
|
99
|
+
type: Input
|
|
100
|
+
}], readonly: [{
|
|
101
|
+
type: Input
|
|
102
|
+
}], inputVisible: [{
|
|
103
|
+
type: Input
|
|
104
|
+
}], displayProperty: [{
|
|
105
|
+
type: Input
|
|
106
|
+
}], iconProperty: [{
|
|
107
|
+
type: Input
|
|
108
|
+
}], picked: [{
|
|
109
|
+
type: Output
|
|
110
|
+
}], removed: [{
|
|
111
|
+
type: Output
|
|
112
|
+
}] } });
|
|
113
|
+
export const filter = (options, selections, value, displayProperty) => {
|
|
114
|
+
return options.filter((item) => (value
|
|
115
|
+
? item[displayProperty].toLowerCase().includes(value.toLowerCase())
|
|
116
|
+
: true) &&
|
|
117
|
+
!selections?.some((i) => i[displayProperty] == item[displayProperty]));
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29yaWdpbi1mb3JtL3NyYy9saWIvb3RoZXJzL3BpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcmlnaW4tZm9ybS9zcmMvbGliL290aGVycy9waWNrZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7QUFPbEQsTUFBTSxPQUFPLGVBQWU7SUFtQjFCLFlBQW9CLE9BQW9CO1FBQXBCLFlBQU8sR0FBUCxPQUFPLENBQWE7UUFqQi9CLGVBQVUsR0FBVSxFQUFFLENBQUM7UUFHaEMsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUNqQixpQkFBWSxHQUFZLElBQUksQ0FBQztRQUM3QixvQkFBZSxHQUFXLE1BQU0sQ0FBQztRQUNqQyxpQkFBWSxHQUFXLE1BQU0sQ0FBQztRQUM3QixXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqQyxZQUFPLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUU1QyxTQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDeEIsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDO1NBQ2IsQ0FBQyxDQUFDO1FBRUgsV0FBTSxHQUFZLEVBQUUsQ0FBQztJQUdzQixDQUFDO0lBRTVDLFFBQVE7UUFDTixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ3BC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LEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTs7QUF3R1QsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLENBQ3BCLE9BQWMsRUFDZCxVQUFpQixFQUNqQixLQUFhLEVBQ2IsZUFBdUIsRUFDYixFQUFFO0lBQ1osT0FBTyxPQUFPLENBQUMsTUFBTSxDQUNuQixDQUFDLElBQUksRUFBRSxFQUFFLENBQ1AsQ0FBQyxLQUFLO1FBQ0osQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25FLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDVCxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FDeEUsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAsIHN0YXJ0V2l0aCB9IGZyb20gJ3J4anMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzaGFyZWQtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BpY2tlci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3BpY2tlci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFBpY2tlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGRhdGE6IGFueTtcbiAgQElucHV0KCkgc2VsZWN0aW9uczogYW55W10gPSBbXTtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgQElucHV0KClcbiAgcmVhZG9ubHk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaW5wdXRWaXNpYmxlOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgZGlzcGxheVByb3BlcnR5OiBzdHJpbmcgPSAnbmFtZSc7XG4gIEBJbnB1dCgpIGljb25Qcm9wZXJ0eTogc3RyaW5nID0gJ2ljb24nO1xuICBAT3V0cHV0KCkgcGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSByZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgZm9ybSA9IHRoaXMuYnVpbGRlci5ncm91cCh7XG4gICAgcGlja2VyOiBbJyddLFxuICB9KTtcblxuICBncm91cHM6IEdyb3VwW10gPSBbXTtcbiAgb3B0aW9uczogT2JzZXJ2YWJsZTxHcm91cFtdPiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGJ1aWxkZXI6IEZvcm1CdWlsZGVyKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVmcmVzaCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10pIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snc2VsZWN0aW9ucyddKSB7XG4gICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICB9XG4gIH1cblxuICByZWZyZXNoKCkge1xuICAgIGlmICh0aGlzLmRhdGEgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7XG4gICAgICB0aGlzLmRhdGEuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGRhdGE6IGFueVtdKSA9PiB7XG4gICAgICAgICAgdGhpcy5nZXRJdGVtcyhkYXRhKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdldEl0ZW1zKHRoaXMuZGF0YSBhcyBhbnlbXSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0SXRlbXMoZGF0YTogYW55W10pIHtcbiAgICB0aGlzLmdyb3VwcyA9IFtdO1xuICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICBkYXRhLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xuICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgIGNvbnN0IGxldHRlciA9IGl0ZW1bdGhpcy5kaXNwbGF5UHJvcGVydHldWzBdO1xuXG4gICAgICAgICAgaWYgKCF0aGlzLmdyb3Vwcy5zb21lKChpKSA9PiBpLmtleSA9PSBsZXR0ZXIpKSB7XG4gICAgICAgICAgICB0aGlzLmdyb3Vwcy5wdXNoKHsga2V5OiBsZXR0ZXIsIHZhbHVlczogW10gfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5ncm91cHMuZmluZCgoaSkgPT4gaS5rZXkgPT0gbGV0dGVyKTtcbiAgICAgICAgICBvYmplY3Q/LnZhbHVlcy5wdXNoKGl0ZW0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5ncm91cHMuc29ydCgoYSwgYikgPT4gKGEua2V5IDwgYi5rZXkgPyAtMSA6IGEua2V5ID4gYi5rZXkgPyAxIDogMCkpO1xuXG4gICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmZvcm0uZ2V0KCdwaWNrZXInKSEudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aCgnJyksXG4gICAgICAgIG1hcCgodmFsdWUpID0+IHRoaXMuZmlsdGVyKHZhbHVlIHx8ICcnKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXIodmFsdWU6IHN0cmluZyk6IEdyb3VwW10ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cHNcbiAgICAgICAgLm1hcCgoZ3JvdXApID0+ICh7XG4gICAgICAgICAga2V5OiBncm91cC5rZXksXG4gICAgICAgICAgdmFsdWVzOiBmaWx0ZXIoXG4gICAgICAgICAgICBncm91cC52YWx1ZXMsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbnMsXG4gICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVByb3BlcnR5XG4gICAgICAgICAgKSxcbiAgICAgICAgfSkpXG4gICAgICAgIC5maWx0ZXIoKGdyb3VwKSA9PiBncm91cC52YWx1ZXMubGVuZ3RoID4gMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgc2VsZWN0ZWQodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9ucy5wdXNoKHZhbHVlKTtcbiAgICB0aGlzLmZvcm0uZ2V0KCdwaWNrZXInKT8uc2V0VmFsdWUoJycpO1xuXG4gICAgdGhpcy5waWNrZWQuZW1pdCh2YWx1ZSk7XG4gIH1cblxuICByZW1vdmUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0aW9ucy5zcGxpY2UoXG4gICAgICB0aGlzLnNlbGVjdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAoaSkgPT4gaVt0aGlzLmRpc3BsYXlQcm9wZXJ0eV0gPT09IHZhbHVlW3RoaXMuZGlzcGxheVByb3BlcnR5XVxuICAgICAgKSxcbiAgICAgIDFcbiAgICApO1xuICAgIHRoaXMuZm9ybS5nZXQoJ3BpY2tlcicpPy5zZXRWYWx1ZSgnJyk7XG5cbiAgICB0aGlzLnJlbW92ZWQuZW1pdCh2YWx1ZSk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBHcm91cCB7XG4gIGtleTogc3RyaW5nO1xuICB2YWx1ZXM6IGFueVtdO1xufVxuXG5leHBvcnQgY29uc3QgZmlsdGVyID0gKFxuICBvcHRpb25zOiBhbnlbXSxcbiAgc2VsZWN0aW9uczogYW55W10sXG4gIHZhbHVlOiBzdHJpbmcsXG4gIGRpc3BsYXlQcm9wZXJ0eTogc3RyaW5nXG4pOiBzdHJpbmdbXSA9PiB7XG4gIHJldHVybiBvcHRpb25zLmZpbHRlcihcbiAgICAoaXRlbSkgPT5cbiAgICAgICh2YWx1ZVxuICAgICAgICA/IGl0ZW1bZGlzcGxheVByb3BlcnR5XS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHZhbHVlLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgIDogdHJ1ZSkgJiZcbiAgICAgICFzZWxlY3Rpb25zPy5zb21lKChpKSA9PiBpW2Rpc3BsYXlQcm9wZXJ0eV0gPT0gaXRlbVtkaXNwbGF5UHJvcGVydHldKVxuICApO1xufTtcbiIsIjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxuICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctMTAwIGhpZGUtaGludFwiIFtjbGFzcy5kaXNhYmxlZF09XCJyZWFkb25seVwiIFtoaWRkZW5dPVwidHJ1ZVwiXG4gICAgKm5nSWY9XCJpbnB1dFZpc2libGVcIj5cbiAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgPz8gJydcIiBbcmVhZG9ubHldPVwicmVhZG9ubHlcIiBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIlxuICAgICAgZm9ybUNvbnRyb2xOYW1lPVwicGlja2VyXCIgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvY29tcGxldGVcIiAvPlxuICAgIDxtYXQtaWNvbiBtYXRQcmVmaXg+XG4gICAgICA8aS10YWJsZXIgbmFtZT1cImFycm93LWRvd24tcmlnaHRcIiBjbGFzcz1cImljb24tMjAgZC1mbGV4XCI+PC9pLXRhYmxlcj5cbiAgICA8L21hdC1pY29uPlxuXG4gICAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG9jb21wbGV0ZT1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJzZWxlY3RlZCgkZXZlbnQub3B0aW9uLnZhbHVlKVwiPlxuICAgICAgPG1hdC1vcHRncm91cCAqbmdGb3I9XCJsZXQgZ3JvdXAgb2Ygb3B0aW9ucyB8IGFzeW5jXCIgW2xhYmVsXT1cImdyb3VwLmtleVwiPlxuICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgdmFsdWUgb2YgZ3JvdXAudmFsdWVzXCIgW3ZhbHVlXT1cInZhbHVlXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1jZWxsXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJ2YWx1ZVtpY29uUHJvcGVydHldXCI+e3sgdmFsdWVbaWNvblByb3BlcnR5XSB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICB7eyB2YWx1ZVtkaXNwbGF5UHJvcGVydHldIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgIDwvbWF0LW9wdGdyb3VwPlxuICAgIDwvbWF0LWF1dG9jb21wbGV0ZT5cbiAgPC9tYXQtZm9ybS1maWVsZD5cblxuICA8bWF0LWNoaXAtc2V0PlxuICAgIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgdmFsdWUgb2Ygc2VsZWN0aW9uc1wiIChyZW1vdmVkKT1cInJlbW92ZSh2YWx1ZSlcIiBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIiBjbGFzcz1cImYtcy0xNFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImJ1dHRvbi1jZWxsXCI+XG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInZhbHVlW2ljb25Qcm9wZXJ0eV1cIj57eyB2YWx1ZVtpY29uUHJvcGVydHldIH19PC9tYXQtaWNvbj5cbiAgICAgICAge3sgdmFsdWVbZGlzcGxheVByb3BlcnR5XSB9fVxuICAgICAgPC9kaXY+XG4gICAgICA8YnV0dG9uIG1hdENoaXBSZW1vdmU+XG4gICAgICAgIDxtYXQtaWNvbj5jYW5jZWw8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9tYXQtY2hpcD5cbiAgPC9tYXQtY2hpcC1zZXQ+XG48L2Zvcm0+Il19
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../services/translation.service";
|
|
4
|
+
export class TranslatePipe {
|
|
5
|
+
constructor(translationService) {
|
|
6
|
+
this.translationService = translationService;
|
|
7
|
+
}
|
|
8
|
+
transform(value, args) {
|
|
9
|
+
return this.translationService.translate(value);
|
|
10
|
+
}
|
|
11
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslatePipe, deps: [{ token: i1.TranslationService }], target: i0.ɵɵFactoryTarget.Pipe }); }
|
|
12
|
+
static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: TranslatePipe, name: "translate", pure: false }); }
|
|
13
|
+
}
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslatePipe, decorators: [{
|
|
15
|
+
type: Pipe,
|
|
16
|
+
args: [{
|
|
17
|
+
name: 'translate',
|
|
18
|
+
pure: false,
|
|
19
|
+
}]
|
|
20
|
+
}], ctorParameters: () => [{ type: i1.TranslationService }] });
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb24ucGlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29yaWdpbi1mb3JtL3NyYy9saWIvb3RoZXJzL3RyYW5zbGF0aW9uLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7OztBQU9wRCxNQUFNLE9BQU8sYUFBYTtJQUN4QixZQUFvQixrQkFBc0M7UUFBdEMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtJQUFJLENBQUM7SUFFL0QsU0FBUyxDQUFDLEtBQVUsRUFBRSxJQUFVO1FBQzlCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDOytHQUxVLGFBQWE7NkdBQWIsYUFBYTs7NEZBQWIsYUFBYTtrQkFKekIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsV0FBVztvQkFDakIsSUFBSSxFQUFFLEtBQUs7aUJBQ1oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi5zZXJ2aWNlJztcblxuQFBpcGUoe1xuICBuYW1lOiAndHJhbnNsYXRlJyxcbiAgcHVyZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0ZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZSkgeyB9XG5cbiAgdHJhbnNmb3JtKHZhbHVlOiBhbnksIGFyZ3M/OiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUodmFsdWUpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { Injectable } from "@angular/core";
|
|
2
|
+
import { StepControlType } from "../models/flux.model";
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class TranslationsHelper {
|
|
5
|
+
static createComponentErrorsTranslations(langs, componentType) {
|
|
6
|
+
switch (componentType) {
|
|
7
|
+
case StepControlType.ManualInput: return this.createInputErrorsTranslations(langs);
|
|
8
|
+
case StepControlType.CheckBox:
|
|
9
|
+
case StepControlType.Dictionary: return this.createDefaultErrorsTranslations(langs);
|
|
10
|
+
case StepControlType.DownloadDocuments: return this.createDownloadErrorsTranslations(langs);
|
|
11
|
+
case StepControlType.UploadDocuments: return this.createUploadErrorsTranslations(langs);
|
|
12
|
+
case StepControlType.ViewDocuments: return this.createViewErrorsTranslations(langs);
|
|
13
|
+
}
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
static createDownloadErrorsTranslations(langs) {
|
|
17
|
+
const tInfo = [
|
|
18
|
+
{
|
|
19
|
+
code: 'failToDownload',
|
|
20
|
+
translations: this.createLabelsInfo(langs, 'Failed to download.', 'Nu am reușit sa descarc.')
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
code: 'noDocumentsToDownload',
|
|
24
|
+
translations: this.createLabelsInfo(langs, 'No documents to download.', 'Nu sunt documente de descărcat.')
|
|
25
|
+
},
|
|
26
|
+
];
|
|
27
|
+
return tInfo;
|
|
28
|
+
}
|
|
29
|
+
static createUploadErrorsTranslations(langs) {
|
|
30
|
+
const tInfo = [
|
|
31
|
+
{
|
|
32
|
+
code: 'invalidType',
|
|
33
|
+
translations: this.createLabelsInfo(langs, 'Invalid type', 'Tip invalid')
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
code: 'maxSize',
|
|
37
|
+
translations: this.createLabelsInfo(langs, 'The item exceeds the maximum size of {0}.', 'Fișierul depașeste dimensiunea maxima de {0}.')
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
code: 'isMandatory',
|
|
41
|
+
translations: this.createLabelsInfo(langs, 'The item is mandatory.', 'Acest fișier este obligatoriu.')
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
code: 'waitForUpload',
|
|
45
|
+
translations: this.createLabelsInfo(langs, 'Please wait for upload to finish.', 'Vă rugam așteptați incărcarea fișierelor.')
|
|
46
|
+
},
|
|
47
|
+
];
|
|
48
|
+
return tInfo;
|
|
49
|
+
}
|
|
50
|
+
static createViewErrorsTranslations(langs) {
|
|
51
|
+
const tInfo = [
|
|
52
|
+
{
|
|
53
|
+
code: 'failToView',
|
|
54
|
+
translations: this.createLabelsInfo(langs, 'Failed to view', 'Nu am reușit sa vizualizez')
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
code: 'noDocumentsToShow',
|
|
58
|
+
translations: this.createLabelsInfo(langs, 'No documents to show', 'Nu sunt documente de afișat')
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
return tInfo;
|
|
62
|
+
}
|
|
63
|
+
static createInputErrorsTranslations(langs) {
|
|
64
|
+
const tInfo = [
|
|
65
|
+
{
|
|
66
|
+
code: 'isMandatoryValidation',
|
|
67
|
+
translations: this.createLabelsInfo(langs, 'This field is required.', 'Acest câmp este obligatoriu.')
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
code: 'simpleValidation',
|
|
71
|
+
translations: this.createLabelsInfo(langs, 'This field is invalid.', 'Acest câmp este invalid.')
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
code: 'throughApiValidation',
|
|
75
|
+
translations: this.createLabelsInfo(langs, 'This field is invalid.', 'Acest câmp este invalid.')
|
|
76
|
+
},
|
|
77
|
+
];
|
|
78
|
+
return tInfo;
|
|
79
|
+
}
|
|
80
|
+
static createDefaultErrorsTranslations(langs) {
|
|
81
|
+
const tInfo = [
|
|
82
|
+
{
|
|
83
|
+
code: 'isMandatoryValidation',
|
|
84
|
+
translations: this.createLabelsInfo(langs, 'This field is required.', 'Acest câmp este obligatoriu.')
|
|
85
|
+
}
|
|
86
|
+
];
|
|
87
|
+
return tInfo;
|
|
88
|
+
}
|
|
89
|
+
static createCheckEmailTranslations(langs) {
|
|
90
|
+
const tInfo = [
|
|
91
|
+
this.createTranslation(langs, 'name', 'common.others.name', 'Check email', 'Verifica email'),
|
|
92
|
+
this.createTranslation(langs, 'description', 'common.others.description', '', ''),
|
|
93
|
+
this.createTranslation(langs, 'emailLabel', 'flux.systemSteps.email.emailLabel', 'Email', 'Email'),
|
|
94
|
+
this.createTranslation(langs, 'emailButtonLabel', 'flux.systemSteps.email.emailButtonLabel', 'Send code', 'Trimite cod'),
|
|
95
|
+
this.createTranslation(langs, 'otpLabel', 'flux.systemSteps.email.otpLabel', 'Verification code', 'Cod de verificare'),
|
|
96
|
+
this.createTranslation(langs, 'otpButtonLabel', 'flux.systemSteps.email.otpButtonLabel', 'Verify', 'Verifică'),
|
|
97
|
+
this.createTranslation(langs, 'emailRequiredLabel', 'flux.components.email.emailRequiredLabel', 'Email is required', 'Email-ul este obligatoriu'),
|
|
98
|
+
this.createTranslation(langs, 'emailErrorLabel', 'flux.systemSteps.email.emailErrorLabel', 'Email is not valid', 'Email-ul nu este valid'),
|
|
99
|
+
this.createTranslation(langs, 'otpErrorLabel', 'flux.systemSteps.email.otpErrorLabel', 'Code verification error', 'Eroare la verificare cod'),
|
|
100
|
+
this.createTranslation(langs, 'otpSuccessLabel', 'flux.systemSteps.email.otpSuccessLabel', 'Code verification successful', 'Verificarea codului a fost realizată cu succes'),
|
|
101
|
+
];
|
|
102
|
+
return tInfo;
|
|
103
|
+
}
|
|
104
|
+
static createCheckPhoneTranslations(langs) {
|
|
105
|
+
const tInfo = [
|
|
106
|
+
this.createTranslation(langs, 'name', 'common.others.name', 'Check phone', 'Verifica telefon'),
|
|
107
|
+
this.createTranslation(langs, 'description', 'common.others.description', '', ''),
|
|
108
|
+
this.createTranslation(langs, 'phoneLabel', 'flux.systemSteps.phone.phoneLabel', 'Phone', 'Telefon'),
|
|
109
|
+
this.createTranslation(langs, 'phoneButtonLabel', 'flux.systemSteps.phone.phoneButtonLabel', 'Send code', 'Trimite cod'),
|
|
110
|
+
this.createTranslation(langs, 'otpLabel', 'flux.systemSteps.email.otpLabel', 'Verification code', 'Cod de verificare'),
|
|
111
|
+
this.createTranslation(langs, 'otpButtonLabel', 'flux.systemSteps.email.otpButtonLabel', 'Verify', 'Verifică'),
|
|
112
|
+
this.createTranslation(langs, 'phoneRequiredLabel', 'flux.components.phone.phoneRequiredLabel', 'Phone number is required', 'Numărul de telefon este obligatoriu'),
|
|
113
|
+
this.createTranslation(langs, 'phoneErrorLabel', 'flux.systemSteps.phone.phoneErrorLabel', 'Phone number is not valid', 'Numărul de telefon nu este valid'),
|
|
114
|
+
this.createTranslation(langs, 'otpErrorLabel', 'flux.systemSteps.email.otpErrorLabel', 'Code verification error', 'Eroare la verificare cod'),
|
|
115
|
+
this.createTranslation(langs, 'otpSuccessLabel', 'flux.systemSteps.email.otpSuccessLabel', 'Code verification successful', 'Verificarea codului a fost realizată cu succes'),
|
|
116
|
+
];
|
|
117
|
+
return tInfo;
|
|
118
|
+
}
|
|
119
|
+
static createIdScanTranslations(langs) {
|
|
120
|
+
const tInfo = [
|
|
121
|
+
this.createTranslation(langs, 'name', 'common.others.name', 'Id scan', 'Scanare act identitate'),
|
|
122
|
+
this.createTranslation(langs, 'description', 'common.others.description', 'Step to scan id document', 'Pas pentru încarcarea documentului de identitate'),
|
|
123
|
+
this.createTranslation(langs, 'uploadFileButtonLabel', 'flux.systemSteps.idScan.uploadButtonTextLabel', 'Upload file', 'Încarcă fișier'),
|
|
124
|
+
this.createTranslation(langs, 'takePictureButtonLabel', 'flux.systemSteps.idScan.takePictureButtonTextLabel', 'Take picture', 'Realizează o fotografie'),
|
|
125
|
+
];
|
|
126
|
+
return tInfo;
|
|
127
|
+
}
|
|
128
|
+
static createPauseTranslations(langs) {
|
|
129
|
+
const tInfo = [
|
|
130
|
+
this.createTranslation(langs, 'name', 'common.others.name', 'Pause', 'Pauză'),
|
|
131
|
+
this.createTranslation(langs, 'description', 'common.others.description', '', ''),
|
|
132
|
+
this.createTranslation(langs, 'offerReadyMessage', 'flux.systemSteps.pause.offerReadyMessageLabel', 'Your offer has been processed. Click on the link below to continue the flow.', 'Oferta dumneavoastra a fost procesata. Click pe link-ul de mai jos pentru a continua fluxul.'),
|
|
133
|
+
this.createTranslation(langs, 'continueOffersLinkMessageLabel', 'flux.systemSteps.pause.continueOffersLinkMessageLabel', 'Continue flow', 'Continuare flux'),
|
|
134
|
+
this.createTranslation(langs, 'offerReadySmsMessageLabel', 'flux.systemSteps.pause.offerReadySmsMessageLabel', 'Your offer has been processed. Click on the link below to continue the flow.', 'Oferta dumneavoastra a fost procesata. Click pe link-ul de mai jos pentru a continua fluxul.'),
|
|
135
|
+
];
|
|
136
|
+
return tInfo;
|
|
137
|
+
}
|
|
138
|
+
static createActionTranslations(langs) {
|
|
139
|
+
const tInfo = [
|
|
140
|
+
this.createTranslation(langs, 'loadingMessageTranslations', 'appConfigEdit.flux.customStep.loadingMessage', 'Loading message', 'Mesaj de așteptare'),
|
|
141
|
+
];
|
|
142
|
+
return tInfo;
|
|
143
|
+
}
|
|
144
|
+
static createStatusTranslations(langs) {
|
|
145
|
+
const tInfo = [
|
|
146
|
+
this.createTranslation(langs, 'loadingMessageTranslations', 'appConfigEdit.flux.customStep.loadingMessage', 'Loading message', 'Mesaj de așteptare'),
|
|
147
|
+
];
|
|
148
|
+
return tInfo;
|
|
149
|
+
}
|
|
150
|
+
static createKycTranslations(langs) {
|
|
151
|
+
const tInfo = [
|
|
152
|
+
this.createTranslation(langs, 'name', 'common.others.name', 'KYC', 'KYC'),
|
|
153
|
+
this.createTranslation(langs, 'description', 'common.others.description', '', ''),
|
|
154
|
+
this.createTranslation(langs, 'loadingMessageTranslations', 'appConfigEdit.flux.customStep.loadingMessage', 'Loading identification step...', 'Se încarcă pasul de identificare...'),
|
|
155
|
+
];
|
|
156
|
+
return tInfo;
|
|
157
|
+
}
|
|
158
|
+
static createPaymentsTranslations(langs) {
|
|
159
|
+
const tInfo = [
|
|
160
|
+
this.createTranslation(langs, 'name', 'common.others.name', 'Payment', 'Plată'),
|
|
161
|
+
this.createTranslation(langs, 'description', 'common.others.description', '', ''),
|
|
162
|
+
this.createTranslation(langs, 'cardenrolButtonLabel', 'cardenrol.cardenrolButtonLabel', 'Enrol card', 'Înrolează card'),
|
|
163
|
+
this.createTranslation(langs, 'cardenrolFailureLabel', 'cardenrol.cardenrolFailureLabel', 'Error enrolling card', 'Eroare la înrolare card'),
|
|
164
|
+
this.createTranslation(langs, 'cardenrolSuccessLabel', 'cardenrol.cardenrolSuccessLabel', 'Success enrolling card', 'Succes la înrolare card'),
|
|
165
|
+
];
|
|
166
|
+
return tInfo;
|
|
167
|
+
}
|
|
168
|
+
static createOpenBankingTranslations(langs) {
|
|
169
|
+
const tInfo = [
|
|
170
|
+
this.createTranslation(langs, 'name', 'common.others.name', 'Open Banking', 'Open Banking'),
|
|
171
|
+
this.createTranslation(langs, 'description', 'common.others.description', 'Connect your bank account', 'Conectați contul bancar'),
|
|
172
|
+
this.createTranslation(langs, 'initialMessageTranslations', 'flux.systemSteps.openBanking.initialMessage', 'To continue, we need to verify your bank account information. Click Next to proceed.', 'Pentru a continua, trebuie să verificăm informațiile contului dvs. bancar. Faceți clic pe Următorul pentru a continua.'),
|
|
173
|
+
this.createTranslation(langs, 'waitingMessageTranslations', 'flux.systemSteps.openBanking.waitingMessage', 'Please wait while we retrieve your account information...', 'Vă rugăm să așteptați până când preluăm informațiile contului dvs...'),
|
|
174
|
+
this.createTranslation(langs, 'consentErrorMessageTranslations', 'flux.systemSteps.openBanking.consentErrorMessage', 'You must provide consent to continue. Please try again.', 'Trebuie să oferiți consimțământul pentru a continua. Vă rugăm să încercați din nou.'),
|
|
175
|
+
this.createTranslation(langs, 'completionMessageTranslations', 'flux.systemSteps.openBanking.completionMessage', 'Account information successfully retrieved.', 'Informațiile contului au fost preluate cu succes.'),
|
|
176
|
+
this.createTranslation(langs, 'retryButtonLabelTranslations', 'flux.systemSteps.openBanking.retryButtonLabel', 'Retry', 'Reîncearcă'),
|
|
177
|
+
// Button translations
|
|
178
|
+
this.createTranslation(langs, 'nextButtonTranslations', 'flux.systemSteps.openBanking.nextButton', 'Next', 'Următorul'),
|
|
179
|
+
this.createTranslation(langs, 'continueButtonTranslations', 'flux.systemSteps.openBanking.continueButton', 'Continue', 'Continuă'),
|
|
180
|
+
// UI labels
|
|
181
|
+
this.createTranslation(langs, 'selectBankTranslations', 'flux.systemSteps.openBanking.selectBank', 'Select your bank', 'Selectați banca dvs.'),
|
|
182
|
+
this.createTranslation(langs, 'consentTitleTranslations', 'flux.systemSteps.openBanking.consentTitle', 'Bank Authorization', 'Autorizare bancară'),
|
|
183
|
+
this.createTranslation(langs, 'consentDescriptionTranslations', 'flux.systemSteps.openBanking.consentDescription', 'Please complete the authorization process with your bank', 'Vă rugăm să completați procesul de autorizare cu banca dvs.'),
|
|
184
|
+
this.createTranslation(langs, 'waitingForAuthorizationTranslations', 'flux.systemSteps.openBanking.waitingForAuthorization', 'Waiting for authorization...', 'Se așteaptă autorizarea...'),
|
|
185
|
+
this.createTranslation(langs, 'popupWindowMessageTranslations', 'flux.systemSteps.openBanking.popupWindowMessage', 'A new window has opened for bank authorization. Please complete the process there.', 'S-a deschis o fereastră nouă pentru autorizare bancară. Vă rugăm să completați procesul acolo.'),
|
|
186
|
+
this.createTranslation(langs, 'popupBlockerMessageTranslations', 'flux.systemSteps.openBanking.popupBlockerMessage', 'If the window didn\'t open, please check your popup blocker settings.', 'Dacă fereastra nu s-a deschis, vă rugăm să verificați setările blocatorului de popup-uri.'),
|
|
187
|
+
this.createTranslation(langs, 'accountsRetrievedTranslations', 'flux.systemSteps.openBanking.accountsRetrieved', 'Accounts retrieved', 'Conturi preluate'),
|
|
188
|
+
this.createTranslation(langs, 'transactionsRetrievedTranslations', 'flux.systemSteps.openBanking.transactionsRetrieved', 'Transactions retrieved', 'Tranzacții preluate'),
|
|
189
|
+
this.createTranslation(langs, 'accountsFoundTranslations', 'flux.systemSteps.openBanking.accountsFound', '{0} account(s) found', '{0} cont(uri) găsite'),
|
|
190
|
+
this.createTranslation(langs, 'transactionsSummaryTranslations', 'flux.systemSteps.openBanking.transactionsSummary', '{0} transaction(s) retrieved for the last {1} month(s)', '{0} tranzacție(i) preluate pentru ultimele {1} lună(i)'),
|
|
191
|
+
];
|
|
192
|
+
return tInfo;
|
|
193
|
+
}
|
|
194
|
+
static createCustomStepTranslations(langs) {
|
|
195
|
+
const tInfo = [
|
|
196
|
+
this.createTranslation(langs, 'name', 'common.others.name', 'Custom step', 'Pas custom'),
|
|
197
|
+
this.createTranslation(langs, 'description', 'common.others.description', '', ''),
|
|
198
|
+
];
|
|
199
|
+
return tInfo;
|
|
200
|
+
}
|
|
201
|
+
static createViewOfferStepTranslations(langs) {
|
|
202
|
+
const tInfo = [
|
|
203
|
+
this.createTranslation(langs, 'name', 'common.others.name', 'View offer', 'Vizualizare ofertă'),
|
|
204
|
+
this.createTranslation(langs, 'description', 'common.others.description', 'View offer step', 'Pas pentru vizualizare ofertă'),
|
|
205
|
+
];
|
|
206
|
+
return tInfo;
|
|
207
|
+
}
|
|
208
|
+
static createSignTranslations(langs) {
|
|
209
|
+
const tInfo = [
|
|
210
|
+
this.createTranslation(langs, 'name', 'common.others.name', 'Sign documents', 'Semnare documente'),
|
|
211
|
+
this.createTranslation(langs, 'description', 'common.others.description', 'Sign documents step', 'Pas pentru semnare documente'),
|
|
212
|
+
];
|
|
213
|
+
return tInfo;
|
|
214
|
+
}
|
|
215
|
+
static createGenerateDocumentsTranslations(langs) {
|
|
216
|
+
const tInfo = [
|
|
217
|
+
this.createTranslation(langs, 'name', 'common.others.name', 'Generate documents', 'Generare documente'),
|
|
218
|
+
this.createTranslation(langs, 'description', 'common.others.description', 'Generate documents step', 'Pas pentru generare documente'),
|
|
219
|
+
];
|
|
220
|
+
return tInfo;
|
|
221
|
+
}
|
|
222
|
+
static createTranslation(langs, name, translationKey, enValue, roValue) {
|
|
223
|
+
return {
|
|
224
|
+
name: name,
|
|
225
|
+
translationKey: translationKey,
|
|
226
|
+
values: this.createLabelsInfo(langs, enValue, roValue),
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
static createLabelsInfo(supportedLanguages, enValue, roValue) {
|
|
230
|
+
return this.createLabelsInfoCore(supportedLanguages, [
|
|
231
|
+
{ iso: 'en', value: enValue },
|
|
232
|
+
{ iso: 'ro', value: roValue },
|
|
233
|
+
]);
|
|
234
|
+
}
|
|
235
|
+
static createLabelsInfoCore(supportedLanguages, values) {
|
|
236
|
+
let list = [];
|
|
237
|
+
values.forEach((v) => {
|
|
238
|
+
const langId = supportedLanguages.find((lang) => lang.iso === v.iso)?.id;
|
|
239
|
+
if (langId && langId > 0) {
|
|
240
|
+
list.push({
|
|
241
|
+
languageId: langId,
|
|
242
|
+
languageIso: v.iso,
|
|
243
|
+
value: v.value,
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
return list;
|
|
248
|
+
}
|
|
249
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslationsHelper, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
250
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslationsHelper, providedIn: 'root' }); }
|
|
251
|
+
}
|
|
252
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TranslationsHelper, decorators: [{
|
|
253
|
+
type: Injectable,
|
|
254
|
+
args: [{
|
|
255
|
+
providedIn: 'root',
|
|
256
|
+
}]
|
|
257
|
+
}] });
|
|
258
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRpb25zLWhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29yaWdpbi1mb3JtL3NyYy9saWIvb3RoZXJzL3RyYW5zbGF0aW9ucy1oZWxwZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBUXZELE1BQU0sT0FBTyxrQkFBa0I7SUFFdEIsTUFBTSxDQUFDLGlDQUFpQyxDQUM3QyxLQUFpQixFQUNqQixhQUE4QjtRQUU5QixRQUFRLGFBQWEsRUFBRSxDQUFDO1lBQ3RCLEtBQUssZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25GLEtBQUssZUFBZSxDQUFDLFFBQVEsQ0FBQztZQUM5QixLQUFLLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQywrQkFBK0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwRixLQUFLLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLGdDQUFnQyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVGLEtBQUssZUFBZSxDQUFDLGVBQWUsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLDhCQUE4QixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hGLEtBQUssZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLDRCQUE0QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RGLENBQUM7UUFDRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFTyxNQUFNLENBQUMsZ0NBQWdDLENBQzdDLEtBQWlCO1FBRWpCLE1BQU0sS0FBSyxHQUF3QjtZQUNqQztnQkFDRSxJQUFJLEVBQUUsZ0JBQWdC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RUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO1lBQzdCLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFO1NBQzlCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxNQUFNLENBQUMsb0JBQW9CLENBQ2pDLGtCQUE4QixFQUM5QixNQUF3QztRQUV4QyxJQUFJLElBQUksR0FBZ0IsRUFBRSxDQUFDO1FBQzNCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUNuQixNQUFNLE1BQU0sR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUN6RSxJQUFJLE1BQU0sSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07b0JBQ2xCLFdBQVcsRUFBRSxDQUFDLENBQUMsR0FBRztvQkFDbEIsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO2lCQUNmLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzsrR0F4ckJVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzRGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcbmltcG9ydCB7IFN0ZXBDb250cm9sVHlwZSB9IGZyb20gXCIuLi9tb2RlbHMvZmx1eC5tb2RlbFwiO1xuaW1wb3J0IHsgRXJyb3JUcmFuc2xhdGlvbnMgfSBmcm9tIFwiLi4vbW9kZWxzL2Zvcm1zLm1vZGVsXCI7XG5pbXBvcnQgeyBUcmFuc2xhdGlvbkluZm8sIExhYmVsSW5mbyB9IGZyb20gXCIuLi9tb2RlbHMvbGFiZWwtaW5mby5tb2RlbFwiO1xuaW1wb3J0IHsgTGFuZ3VhZ2UgfSBmcm9tIFwiLi4vbW9kZWxzL2xhbmd1YWdlLm1vZGVsXCI7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBUcmFuc2xhdGlvbnNIZWxwZXIge1xuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlQ29tcG9uZW50RXJyb3JzVHJhbnNsYXRpb25zKFxuICAgIGxhbmdzOiBMYW5ndWFnZVtdLFxuICAgIGNvbXBvbmVudFR5cGU6IFN0ZXBDb250cm9sVHlwZVxuICApOiBFcnJvclRyYW5zbGF0aW9uc1tdIHtcbiAgICBzd2l0Y2ggKGNvbXBvbmVudFR5cGUpIHtcbiAgICAgIGNhc2UgU3RlcENvbnRyb2xUeXBlLk1hbnVhbElucHV0OiByZXR1cm4gdGhpcy5jcmVhdGVJbnB1dEVycm9yc1RyYW5zbGF0aW9ucyhsYW5ncyk7XG4gICAgICBjYXNlIFN0ZXBDb250cm9sVHlwZS5DaGVja0JveDpcbiAgICAgIGNhc2UgU3RlcENvbnRyb2xUeXBlLkRpY3Rpb25hcnk6IHJldHVybiB0aGlzLmNyZWF0ZURlZmF1bHRFcnJvcnNUcmFuc2xhdGlvbnMobGFuZ3MpO1xuICAgICAgY2FzZSBTdGVwQ29udHJvbFR5cGUuRG93bmxvYWREb2N1bWVudHM6IHJldHVybiB0aGlzLmNyZWF0ZURvd25sb2FkRXJyb3JzVHJhbnNsYXRpb25zKGxhbmdzKTtcbiAgICAgIGNhc2UgU3RlcENvbnRyb2xUeXBlLlVwbG9hZERvY3VtZW50czogcmV0dXJuIHRoaXMuY3JlYXRlVXBsb2FkRXJyb3JzVHJhbnNsYXRpb25zKGxhbmdzKTtcbiAgICAgIGNhc2UgU3RlcENvbnRyb2xUeXBlLlZpZXdEb2N1bWVudHM6IHJldHVybiB0aGlzLmNyZWF0ZVZpZXdFcnJvcnNUcmFuc2xhdGlvbnMobGFuZ3MpO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVEb3dubG9hZEVycm9yc1RyYW5zbGF0aW9ucyhcbiAgICBsYW5nczogTGFuZ3VhZ2VbXVxuICApOiBFcnJvclRyYW5zbGF0aW9uc1tdIHtcbiAgICBjb25zdCB0SW5mbzogRXJyb3JUcmFuc2xhdGlvbnNbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgY29kZTogJ2ZhaWxUb0Rvd25sb2FkJyxcbiAgICAgICAgdHJhbnNsYXRpb25zOiB0aGlzLmNyZWF0ZUxhYmVsc0luZm8obGFuZ3MsICdGYWlsZWQgdG8gZG93bmxvYWQuJywgJ051IGFtIHJldciZaXQgc2EgZGVzY2FyYy4nKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29kZTogJ25vRG9jdW1lbnRzVG9Eb3dubG9hZCcsXG4gICAgICAgIHRyYW5zbGF0aW9uczogdGhpcy5jcmVhdGVMYWJlbHNJbmZvKGxhbmdzLCAnTm8gZG9jdW1lbnRzIHRvIGRvd25sb2FkLicsICdOdSBzdW50IGRvY3VtZW50ZSBkZSBkZXNjxINyY2F0LicpXG4gICAgICB9LFxuICAgIF07XG4gICAgcmV0dXJuIHRJbmZvO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlVXBsb2FkRXJyb3JzVHJhbnNsYXRpb25zKFxuICAgIGxhbmdzOiBMYW5ndWFnZVtdXG4gICk6IEVycm9yVHJhbnNsYXRpb25zW10ge1xuICAgIGNvbnN0IHRJbmZvOiBFcnJvclRyYW5zbGF0aW9uc1tdID0gW1xuICAgICAge1xuICAgICAgICBjb2RlOiAnaW52YWxpZFR5cGUnLFxuICAgICAgICB0cmFuc2xhdGlvbnM6IHRoaXMuY3JlYXRlTGFiZWxzSW5mbyhsYW5ncywgJ0ludmFsaWQgdHlwZScsICdUaXAgaW52YWxpZCcpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb2RlOiAnbWF4U2l6ZScsXG4gICAgICAgIHRyYW5zbGF0aW9uczogdGhpcy5jcmVhdGVMYWJlbHNJbmZvKGxhbmdzLCAnVGhlIGl0ZW0gZXhjZWVkcyB0aGUgbWF4aW11bSBzaXplIG9mIHswfS4nLCAnRmnImWllcnVsIGRlcGHImWVzdGUgZGltZW5zaXVuZWEgbWF4aW1hIGRlIHswfS4nKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29kZTogJ2lzTWFuZGF0b3J5JyxcbiAgICAgICAgdHJhbnNsYXRpb25zOiB0aGlzLmNyZWF0ZUxhYmVsc0luZm8obGFuZ3MsICdUaGUgaXRlbSBpcyBtYW5kYXRvcnkuJywgJ0FjZXN0IGZpyJlpZXIgZXN0ZSBvYmxpZ2F0b3JpdS4nKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29kZTogJ3dhaXRGb3JVcGxvYWQnLFxuICAgICAgICB0cmFuc2xhdGlvbnM6IHRoaXMuY3JlYXRlTGFiZWxzSW5mbyhsYW5ncywgJ1BsZWFzZSB3YWl0IGZvciB1cGxvYWQgdG8gZmluaXNoLicsICdWxIMgcnVnYW0gYciZdGVwdGHIm2kgaW5jxINyY2FyZWEgZmnImWllcmVsb3IuJylcbiAgICAgIH0sXG4gICAgXTtcblxuICAgIHJldHVybiB0SW5mbztcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZVZpZXdFcnJvcnNUcmFuc2xhdGlvbnMoXG4gICAgbGFuZ3M6IExhbmd1YWdlW11cbiAgKTogRXJyb3JUcmFuc2xhdGlvbnNbXSB7XG4gICAgY29uc3QgdEluZm86IEVycm9yVHJhbnNsYXRpb25zW10gPSBbXG4gICAgICB7XG4gICAgICAgIGNvZGU6ICdmYWlsVG9WaWV3JyxcbiAgICAgICAgdHJhbnNsYXRpb25zOiB0aGlzLmNyZWF0ZUxhYmVsc0luZm8obGFuZ3MsICdGYWlsZWQgdG8gdmlldycsICdOdSBhbSByZXXImWl0IHNhIHZpenVhbGl6ZXonKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29kZTogJ25vRG9jdW1lbnRzVG9TaG93JyxcbiAgICAgICAgdHJhbnNsYXRpb25zOiB0aGlzLmNyZWF0ZUxhYmVsc0luZm8obGFuZ3MsICdObyBkb2N1bWVudHMgdG8gc2hvdycsICdOdSBzdW50IGRvY3VtZW50ZSBkZSBhZmnImWF0JylcbiAgICAgIH0sXG4gICAgXTtcbiAgICByZXR1cm4gdEluZm87XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVJbnB1dEVycm9yc1RyYW5zbGF0aW9ucyhcbiAgICBsYW5nczogTGFuZ3VhZ2VbXVxuICApOiBFcnJvclRyYW5zbGF0aW9uc1tdIHtcbiAgICBjb25zdCB0SW5mbzogRXJyb3JUcmFuc2xhdGlvbnNbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgY29kZTogJ2lzTWFuZGF0b3J5VmFsaWRhdGlvbicsXG4gICAgICAgIHRyYW5zbGF0aW9uczogdGhpcy5jcmVhdGVMYWJlbHNJbmZvKGxhbmdzLCAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4nLCAnQWNlc3QgY8OibXAgZXN0ZSBvYmxpZ2F0b3JpdS4nKVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgY29kZTogJ3NpbXBsZVZhbGlkYXRpb24nLFxuICAgICAgICB0cmFuc2xhdGlvbnM6IHRoaXMuY3JlYXRlTGFiZWxzSW5mbyhsYW5ncywgJ1RoaXMgZmllbGQgaXMgaW52YWxpZC4nLCAnQWNlc3QgY8OibXAgZXN0ZSBpbnZhbGlkLicpXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBjb2RlOiAndGhyb3VnaEFwaVZhbGlkYXRpb24nLFxuICAgICAgICB0cmFuc2xhdGlvbnM6IHRoaXMuY3JlYXRlTGFiZWxzSW5mbyhsYW5ncywgJ1RoaXMgZmllbGQgaXMgaW52YWxpZC4nLCAnQWNlc3QgY8OibXAgZXN0ZSBpbnZhbGlkLicpXG4gICAgICB9LFxuICAgIF07XG4gICAgcmV0dXJuIHRJbmZvO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgY3JlYXRlRGVmYXVsdEVycm9yc1RyYW5zbGF0aW9ucyhcbiAgICBsYW5nczogTGFuZ3VhZ2VbXVxuICApOiBFcnJvclRyYW5zbGF0aW9uc1tdIHtcbiAgICBjb25zdCB0SW5mbzogRXJyb3JUcmFuc2xhdGlvbnNbXSA9IFtcbiAgICAgIHtcbiAgICAgICAgY29kZTogJ2lzTWFuZGF0b3J5VmFsaWRhdGlvbicsXG4gICAgICAgIHRyYW5zbGF0aW9uczogdGhpcy5jcmVhdGVMYWJlbHNJbmZvKGxhbmdzLCAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4nLCAnQWNlc3QgY8OibXAgZXN0ZSBvYmxpZ2F0b3JpdS4nKVxuICAgICAgfVxuICAgIF07XG4gICAgcmV0dXJuIHRJbmZvO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVDaGVja0VtYWlsVHJhbnNsYXRpb25zKFxuICAgIGxhbmdzOiBMYW5ndWFnZVtdXG4gICk6IFRyYW5zbGF0aW9uSW5mb1tdIHtcbiAgICBjb25zdCB0SW5mbzogVHJhbnNsYXRpb25JbmZvW10gPSBbXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ25hbWUnLFxuICAgICAgICAnY29tbW9uLm90aGVycy5uYW1lJyxcbiAgICAgICAgJ0NoZWNrIGVtYWlsJyxcbiAgICAgICAgJ1ZlcmlmaWNhIGVtYWlsJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAnY29tbW9uLm90aGVycy5kZXNjcmlwdGlvbicsXG4gICAgICAgICcnLFxuICAgICAgICAnJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnZW1haWxMYWJlbCcsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLmVtYWlsLmVtYWlsTGFiZWwnLFxuICAgICAgICAnRW1haWwnLFxuICAgICAgICAnRW1haWwnXG4gICAgICApLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdlbWFpbEJ1dHRvbkxhYmVsJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMuZW1haWwuZW1haWxCdXR0b25MYWJlbCcsXG4gICAgICAgICdTZW5kIGNvZGUnLFxuICAgICAgICAnVHJpbWl0ZSBjb2QnXG4gICAgICApLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdvdHBMYWJlbCcsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLmVtYWlsLm90cExhYmVsJyxcbiAgICAgICAgJ1ZlcmlmaWNhdGlvbiBjb2RlJyxcbiAgICAgICAgJ0NvZCBkZSB2ZXJpZmljYXJlJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnb3RwQnV0dG9uTGFiZWwnLFxuICAgICAgICAnZmx1eC5zeXN0ZW1TdGVwcy5lbWFpbC5vdHBCdXR0b25MYWJlbCcsXG4gICAgICAgICdWZXJpZnknLFxuICAgICAgICAnVmVyaWZpY8SDJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnZW1haWxSZXF1aXJlZExhYmVsJyxcbiAgICAgICAgJ2ZsdXguY29tcG9uZW50cy5lbWFpbC5lbWFpbFJlcXVpcmVkTGFiZWwnLFxuICAgICAgICAnRW1haWwgaXMgcmVxdWlyZWQnLFxuICAgICAgICAnRW1haWwtdWwgZXN0ZSBvYmxpZ2F0b3JpdSdcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ2VtYWlsRXJyb3JMYWJlbCcsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLmVtYWlsLmVtYWlsRXJyb3JMYWJlbCcsXG4gICAgICAgICdFbWFpbCBpcyBub3QgdmFsaWQnLFxuICAgICAgICAnRW1haWwtdWwgbnUgZXN0ZSB2YWxpZCdcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ290cEVycm9yTGFiZWwnLFxuICAgICAgICAnZmx1eC5zeXN0ZW1TdGVwcy5lbWFpbC5vdHBFcnJvckxhYmVsJyxcbiAgICAgICAgJ0NvZGUgdmVyaWZpY2F0aW9uIGVycm9yJyxcbiAgICAgICAgJ0Vyb2FyZSBsYSB2ZXJpZmljYXJlIGNvZCdcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ290cFN1Y2Nlc3NMYWJlbCcsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLmVtYWlsLm90cFN1Y2Nlc3NMYWJlbCcsXG4gICAgICAgICdDb2RlIHZlcmlmaWNhdGlvbiBzdWNjZXNzZnVsJyxcbiAgICAgICAgJ1ZlcmlmaWNhcmVhIGNvZHVsdWkgYSBmb3N0IHJlYWxpemF0xIMgY3Ugc3VjY2VzJ1xuICAgICAgKSxcbiAgICBdO1xuICAgIHJldHVybiB0SW5mbztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlQ2hlY2tQaG9uZVRyYW5zbGF0aW9ucyhcbiAgICBsYW5nczogTGFuZ3VhZ2VbXVxuICApOiBUcmFuc2xhdGlvbkluZm9bXSB7XG4gICAgY29uc3QgdEluZm86IFRyYW5zbGF0aW9uSW5mb1tdID0gW1xuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICduYW1lJyxcbiAgICAgICAgJ2NvbW1vbi5vdGhlcnMubmFtZScsXG4gICAgICAgICdDaGVjayBwaG9uZScsXG4gICAgICAgICdWZXJpZmljYSB0ZWxlZm9uJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAnY29tbW9uLm90aGVycy5kZXNjcmlwdGlvbicsXG4gICAgICAgICcnLFxuICAgICAgICAnJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAncGhvbmVMYWJlbCcsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLnBob25lLnBob25lTGFiZWwnLFxuICAgICAgICAnUGhvbmUnLFxuICAgICAgICAnVGVsZWZvbidcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ3Bob25lQnV0dG9uTGFiZWwnLFxuICAgICAgICAnZmx1eC5zeXN0ZW1TdGVwcy5waG9uZS5waG9uZUJ1dHRvbkxhYmVsJyxcbiAgICAgICAgJ1NlbmQgY29kZScsXG4gICAgICAgICdUcmltaXRlIGNvZCdcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ290cExhYmVsJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMuZW1haWwub3RwTGFiZWwnLFxuICAgICAgICAnVmVyaWZpY2F0aW9uIGNvZGUnLFxuICAgICAgICAnQ29kIGRlIHZlcmlmaWNhcmUnXG4gICAgICApLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdvdHBCdXR0b25MYWJlbCcsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLmVtYWlsLm90cEJ1dHRvbkxhYmVsJyxcbiAgICAgICAgJ1ZlcmlmeScsXG4gICAgICAgICdWZXJpZmljxIMnXG4gICAgICApLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdwaG9uZVJlcXVpcmVkTGFiZWwnLFxuICAgICAgICAnZmx1eC5jb21wb25lbnRzLnBob25lLnBob25lUmVxdWlyZWRMYWJlbCcsXG4gICAgICAgICdQaG9uZSBudW1iZXIgaXMgcmVxdWlyZWQnLFxuICAgICAgICAnTnVtxINydWwgZGUgdGVsZWZvbiBlc3RlIG9ibGlnYXRvcml1J1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAncGhvbmVFcnJvckxhYmVsJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMucGhvbmUucGhvbmVFcnJvckxhYmVsJyxcbiAgICAgICAgJ1Bob25lIG51bWJlciBpcyBub3QgdmFsaWQnLFxuICAgICAgICAnTnVtxINydWwgZGUgdGVsZWZvbiBudSBlc3RlIHZhbGlkJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnb3RwRXJyb3JMYWJlbCcsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLmVtYWlsLm90cEVycm9yTGFiZWwnLFxuICAgICAgICAnQ29kZSB2ZXJpZmljYXRpb24gZXJyb3InLFxuICAgICAgICAnRXJvYXJlIGxhIHZlcmlmaWNhcmUgY29kJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnb3RwU3VjY2Vzc0xhYmVsJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMuZW1haWwub3RwU3VjY2Vzc0xhYmVsJyxcbiAgICAgICAgJ0NvZGUgdmVyaWZpY2F0aW9uIHN1Y2Nlc3NmdWwnLFxuICAgICAgICAnVmVyaWZpY2FyZWEgY29kdWx1aSBhIGZvc3QgcmVhbGl6YXTEgyBjdSBzdWNjZXMnXG4gICAgICApLFxuICAgIF07XG4gICAgcmV0dXJuIHRJbmZvO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVJZFNjYW5UcmFuc2xhdGlvbnMobGFuZ3M6IExhbmd1YWdlW10pOiBUcmFuc2xhdGlvbkluZm9bXSB7XG4gICAgY29uc3QgdEluZm86IFRyYW5zbGF0aW9uSW5mb1tdID0gW1xuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICduYW1lJyxcbiAgICAgICAgJ2NvbW1vbi5vdGhlcnMubmFtZScsXG4gICAgICAgICdJZCBzY2FuJyxcbiAgICAgICAgJ1NjYW5hcmUgYWN0IGlkZW50aXRhdGUnXG4gICAgICApLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICAgICdjb21tb24ub3RoZXJzLmRlc2NyaXB0aW9uJyxcbiAgICAgICAgJ1N0ZXAgdG8gc2NhbiBpZCBkb2N1bWVudCcsXG4gICAgICAgICdQYXMgcGVudHJ1IMOubmNhcmNhcmVhIGRvY3VtZW50dWx1aSBkZSBpZGVudGl0YXRlJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAndXBsb2FkRmlsZUJ1dHRvbkxhYmVsJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMuaWRTY2FuLnVwbG9hZEJ1dHRvblRleHRMYWJlbCcsXG4gICAgICAgICdVcGxvYWQgZmlsZScsXG4gICAgICAgICfDjm5jYXJjxIMgZmnImWllcidcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ3Rha2VQaWN0dXJlQnV0dG9uTGFiZWwnLFxuICAgICAgICAnZmx1eC5zeXN0ZW1TdGVwcy5pZFNjYW4udGFrZVBpY3R1cmVCdXR0b25UZXh0TGFiZWwnLFxuICAgICAgICAnVGFrZSBwaWN0dXJlJyxcbiAgICAgICAgJ1JlYWxpemVhesSDIG8gZm90b2dyYWZpZSdcbiAgICAgICksXG4gICAgXTtcbiAgICByZXR1cm4gdEluZm87XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZVBhdXNlVHJhbnNsYXRpb25zKGxhbmdzOiBMYW5ndWFnZVtdKTogVHJhbnNsYXRpb25JbmZvW10ge1xuICAgIGNvbnN0IHRJbmZvOiBUcmFuc2xhdGlvbkluZm9bXSA9IFtcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnbmFtZScsXG4gICAgICAgICdjb21tb24ub3RoZXJzLm5hbWUnLFxuICAgICAgICAnUGF1c2UnLFxuICAgICAgICAnUGF1esSDJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAnY29tbW9uLm90aGVycy5kZXNjcmlwdGlvbicsXG4gICAgICAgICcnLFxuICAgICAgICAnJ1xuICAgICAgKSxcblxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdvZmZlclJlYWR5TWVzc2FnZScsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLnBhdXNlLm9mZmVyUmVhZHlNZXNzYWdlTGFiZWwnLFxuICAgICAgICAnWW91ciBvZmZlciBoYXMgYmVlbiBwcm9jZXNzZWQuIENsaWNrIG9uIHRoZSBsaW5rIGJlbG93IHRvIGNvbnRpbnVlIHRoZSBmbG93LicsXG4gICAgICAgICdPZmVydGEgZHVtbmVhdm9hc3RyYSBhIGZvc3QgcHJvY2VzYXRhLiBDbGljayBwZSBsaW5rLXVsIGRlIG1haSBqb3MgcGVudHJ1IGEgY29udGludWEgZmx1eHVsLidcbiAgICAgICksXG5cbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnY29udGludWVPZmZlcnNMaW5rTWVzc2FnZUxhYmVsJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMucGF1c2UuY29udGludWVPZmZlcnNMaW5rTWVzc2FnZUxhYmVsJyxcbiAgICAgICAgJ0NvbnRpbnVlIGZsb3cnLFxuICAgICAgICAnQ29udGludWFyZSBmbHV4J1xuICAgICAgKSxcblxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdvZmZlclJlYWR5U21zTWVzc2FnZUxhYmVsJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMucGF1c2Uub2ZmZXJSZWFkeVNtc01lc3NhZ2VMYWJlbCcsXG4gICAgICAgICdZb3VyIG9mZmVyIGhhcyBiZWVuIHByb2Nlc3NlZC4gQ2xpY2sgb24gdGhlIGxpbmsgYmVsb3cgdG8gY29udGludWUgdGhlIGZsb3cuJyxcbiAgICAgICAgJ09mZXJ0YSBkdW1uZWF2b2FzdHJhIGEgZm9zdCBwcm9jZXNhdGEuIENsaWNrIHBlIGxpbmstdWwgZGUgbWFpIGpvcyBwZW50cnUgYSBjb250aW51YSBmbHV4dWwuJ1xuICAgICAgKSxcbiAgICBdO1xuICAgIHJldHVybiB0SW5mbztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlQWN0aW9uVHJhbnNsYXRpb25zKGxhbmdzOiBMYW5ndWFnZVtdKTogVHJhbnNsYXRpb25JbmZvW10ge1xuICAgIGNvbnN0IHRJbmZvOiBUcmFuc2xhdGlvbkluZm9bXSA9IFtcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnbG9hZGluZ01lc3NhZ2VUcmFuc2xhdGlvbnMnLFxuICAgICAgICAnYXBwQ29uZmlnRWRpdC5mbHV4LmN1c3RvbVN0ZXAubG9hZGluZ01lc3NhZ2UnLFxuICAgICAgICAnTG9hZGluZyBtZXNzYWdlJyxcbiAgICAgICAgJ01lc2FqIGRlIGHImXRlcHRhcmUnXG4gICAgICApLFxuICAgIF07XG4gICAgcmV0dXJuIHRJbmZvO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVTdGF0dXNUcmFuc2xhdGlvbnMobGFuZ3M6IExhbmd1YWdlW10pOiBUcmFuc2xhdGlvbkluZm9bXSB7XG4gICAgY29uc3QgdEluZm86IFRyYW5zbGF0aW9uSW5mb1tdID0gW1xuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdsb2FkaW5nTWVzc2FnZVRyYW5zbGF0aW9ucycsXG4gICAgICAgICdhcHBDb25maWdFZGl0LmZsdXguY3VzdG9tU3RlcC5sb2FkaW5nTWVzc2FnZScsXG4gICAgICAgICdMb2FkaW5nIG1lc3NhZ2UnLFxuICAgICAgICAnTWVzYWogZGUgYciZdGVwdGFyZSdcbiAgICAgICksXG4gICAgXTtcbiAgICByZXR1cm4gdEluZm87XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUt5Y1RyYW5zbGF0aW9ucyhsYW5nczogTGFuZ3VhZ2VbXSk6IFRyYW5zbGF0aW9uSW5mb1tdIHtcbiAgICBjb25zdCB0SW5mbzogVHJhbnNsYXRpb25JbmZvW10gPSBbXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKGxhbmdzLCAnbmFtZScsICdjb21tb24ub3RoZXJzLm5hbWUnLCAnS1lDJywgJ0tZQycpLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICAgICdjb21tb24ub3RoZXJzLmRlc2NyaXB0aW9uJyxcbiAgICAgICAgJycsXG4gICAgICAgICcnXG4gICAgICApLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdsb2FkaW5nTWVzc2FnZVRyYW5zbGF0aW9ucycsXG4gICAgICAgICdhcHBDb25maWdFZGl0LmZsdXguY3VzdG9tU3RlcC5sb2FkaW5nTWVzc2FnZScsXG4gICAgICAgICdMb2FkaW5nIGlkZW50aWZpY2F0aW9uIHN0ZXAuLi4nLFxuICAgICAgICAnU2Ugw65uY2FyY8SDIHBhc3VsIGRlIGlkZW50aWZpY2FyZS4uLidcbiAgICAgICksXG4gICAgXTtcbiAgICByZXR1cm4gdEluZm87XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZVBheW1lbnRzVHJhbnNsYXRpb25zKFxuICAgIGxhbmdzOiBMYW5ndWFnZVtdXG4gICk6IFRyYW5zbGF0aW9uSW5mb1tdIHtcbiAgICBjb25zdCB0SW5mbzogVHJhbnNsYXRpb25JbmZvW10gPSBbXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ25hbWUnLFxuICAgICAgICAnY29tbW9uLm90aGVycy5uYW1lJyxcbiAgICAgICAgJ1BheW1lbnQnLFxuICAgICAgICAnUGxhdMSDJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAnY29tbW9uLm90aGVycy5kZXNjcmlwdGlvbicsXG4gICAgICAgICcnLFxuICAgICAgICAnJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnY2FyZGVucm9sQnV0dG9uTGFiZWwnLFxuICAgICAgICAnY2FyZGVucm9sLmNhcmRlbnJvbEJ1dHRvbkxhYmVsJyxcbiAgICAgICAgJ0Vucm9sIGNhcmQnLFxuICAgICAgICAnw45ucm9sZWF6xIMgY2FyZCdcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ2NhcmRlbnJvbEZhaWx1cmVMYWJlbCcsXG4gICAgICAgICdjYXJkZW5yb2wuY2FyZGVucm9sRmFpbHVyZUxhYmVsJyxcbiAgICAgICAgJ0Vycm9yIGVucm9sbGluZyBjYXJkJyxcbiAgICAgICAgJ0Vyb2FyZSBsYSDDrm5yb2xhcmUgY2FyZCdcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ2NhcmRlbnJvbFN1Y2Nlc3NMYWJlbCcsXG4gICAgICAgICdjYXJkZW5yb2wuY2FyZGVucm9sU3VjY2Vzc0xhYmVsJyxcbiAgICAgICAgJ1N1Y2Nlc3MgZW5yb2xsaW5nIGNhcmQnLFxuICAgICAgICAnU3VjY2VzIGxhIMOubnJvbGFyZSBjYXJkJ1xuICAgICAgKSxcbiAgICBdO1xuICAgIHJldHVybiB0SW5mbztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlT3BlbkJhbmtpbmdUcmFuc2xhdGlvbnMoXG4gICAgbGFuZ3M6IExhbmd1YWdlW11cbiAgKTogVHJhbnNsYXRpb25JbmZvW10ge1xuICAgIGNvbnN0IHRJbmZvOiBUcmFuc2xhdGlvbkluZm9bXSA9IFtcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnbmFtZScsXG4gICAgICAgICdjb21tb24ub3RoZXJzLm5hbWUnLFxuICAgICAgICAnT3BlbiBCYW5raW5nJyxcbiAgICAgICAgJ09wZW4gQmFua2luZydcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICAgJ2NvbW1vbi5vdGhlcnMuZGVzY3JpcHRpb24nLFxuICAgICAgICAnQ29ubmVjdCB5b3VyIGJhbmsgYWNjb3VudCcsXG4gICAgICAgICdDb25lY3RhyJtpIGNvbnR1bCBiYW5jYXInXG4gICAgICApLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdpbml0aWFsTWVzc2FnZVRyYW5zbGF0aW9ucycsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLm9wZW5CYW5raW5nLmluaXRpYWxNZXNzYWdlJyxcbiAgICAgICAgJ1RvIGNvbnRpbnVlLCB3ZSBuZWVkIHRvIHZlcmlmeSB5b3VyIGJhbmsgYWNjb3VudCBpbmZvcm1hdGlvbi4gQ2xpY2sgTmV4dCB0byBwcm9jZWVkLicsXG4gICAgICAgICdQZW50cnUgYSBjb250aW51YSwgdHJlYnVpZSBzxIMgdmVyaWZpY8SDbSBpbmZvcm1hyJtpaWxlIGNvbnR1bHVpIGR2cy4gYmFuY2FyLiBGYWNlyJtpIGNsaWMgcGUgVXJtxIN0b3J1bCBwZW50cnUgYSBjb250aW51YS4nXG4gICAgICApLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICd3YWl0aW5nTWVzc2FnZVRyYW5zbGF0aW9ucycsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLm9wZW5CYW5raW5nLndhaXRpbmdNZXNzYWdlJyxcbiAgICAgICAgJ1BsZWFzZSB3YWl0IHdoaWxlIHdlIHJldHJpZXZlIHlvdXIgYWNjb3VudCBpbmZvcm1hdGlvbi4uLicsXG4gICAgICAgICdWxIMgcnVnxINtIHPEgyBhyJl0ZXB0YcibaSBww6JuxIMgY8OibmQgcHJlbHXEg20gaW5mb3JtYcibaWlsZSBjb250dWx1aSBkdnMuLi4nXG4gICAgICApLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdjb25zZW50RXJyb3JNZXNzYWdlVHJhbnNsYXRpb25zJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMub3BlbkJhbmtpbmcuY29uc2VudEVycm9yTWVzc2FnZScsXG4gICAgICAgICdZb3UgbXVzdCBwcm92aWRlIGNvbnNlbnQgdG8gY29udGludWUuIFBsZWFzZSB0cnkgYWdhaW4uJyxcbiAgICAgICAgJ1RyZWJ1aWUgc8SDIG9mZXJpyJtpIGNvbnNpbcibxINtw6JudHVsIHBlbnRydSBhIGNvbnRpbnVhLiBWxIMgcnVnxINtIHPEgyDDrm5jZXJjYcibaSBkaW4gbm91LidcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ2NvbXBsZXRpb25NZXNzYWdlVHJhbnNsYXRpb25zJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMub3BlbkJhbmtpbmcuY29tcGxldGlvbk1lc3NhZ2UnLFxuICAgICAgICAnQWNjb3VudCBpbmZvcm1hdGlvbiBzdWNjZXNzZnVsbHkgcmV0cmlldmVkLicsXG4gICAgICAgICdJbmZvcm1hyJtpaWxlIGNvbnR1bHVpIGF1IGZvc3QgcHJlbHVhdGUgY3Ugc3VjY2VzLidcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ3JldHJ5QnV0dG9uTGFiZWxUcmFuc2xhdGlvbnMnLFxuICAgICAgICAnZmx1eC5zeXN0ZW1TdGVwcy5vcGVuQmFua2luZy5yZXRyeUJ1dHRvbkxhYmVsJyxcbiAgICAgICAgJ1JldHJ5JyxcbiAgICAgICAgJ1Jlw65uY2VhcmPEgydcbiAgICAgICksXG4gICAgICAvLyBCdXR0b24gdHJhbnNsYXRpb25zXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ25leHRCdXR0b25UcmFuc2xhdGlvbnMnLFxuICAgICAgICAnZmx1eC5zeXN0ZW1TdGVwcy5vcGVuQmFua2luZy5uZXh0QnV0dG9uJyxcbiAgICAgICAgJ05leHQnLFxuICAgICAgICAnVXJtxIN0b3J1bCdcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ2NvbnRpbnVlQnV0dG9uVHJhbnNsYXRpb25zJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMub3BlbkJhbmtpbmcuY29udGludWVCdXR0b24nLFxuICAgICAgICAnQ29udGludWUnLFxuICAgICAgICAnQ29udGludcSDJ1xuICAgICAgKSxcbiAgICAgIC8vIFVJIGxhYmVsc1xuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICdzZWxlY3RCYW5rVHJhbnNsYXRpb25zJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMub3BlbkJhbmtpbmcuc2VsZWN0QmFuaycsXG4gICAgICAgICdTZWxlY3QgeW91ciBiYW5rJyxcbiAgICAgICAgJ1NlbGVjdGHIm2kgYmFuY2EgZHZzLidcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ2NvbnNlbnRUaXRsZVRyYW5zbGF0aW9ucycsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLm9wZW5CYW5raW5nLmNvbnNlbnRUaXRsZScsXG4gICAgICAgICdCYW5rIEF1dGhvcml6YXRpb24nLFxuICAgICAgICAnQXV0b3JpemFyZSBiYW5jYXLEgydcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ2NvbnNlbnREZXNjcmlwdGlvblRyYW5zbGF0aW9ucycsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLm9wZW5CYW5raW5nLmNvbnNlbnREZXNjcmlwdGlvbicsXG4gICAgICAgICdQbGVhc2UgY29tcGxldGUgdGhlIGF1dGhvcml6YXRpb24gcHJvY2VzcyB3aXRoIHlvdXIgYmFuaycsXG4gICAgICAgICdWxIMgcnVnxINtIHPEgyBjb21wbGV0YcibaSBwcm9jZXN1bCBkZSBhdXRvcml6YXJlIGN1IGJhbmNhIGR2cy4nXG4gICAgICApLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICd3YWl0aW5nRm9yQXV0aG9yaXphdGlvblRyYW5zbGF0aW9ucycsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLm9wZW5CYW5raW5nLndhaXRpbmdGb3JBdXRob3JpemF0aW9uJyxcbiAgICAgICAgJ1dhaXRpbmcgZm9yIGF1dGhvcml6YXRpb24uLi4nLFxuICAgICAgICAnU2UgYciZdGVhcHTEgyBhdXRvcml6YXJlYS4uLidcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ3BvcHVwV2luZG93TWVzc2FnZVRyYW5zbGF0aW9ucycsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLm9wZW5CYW5raW5nLnBvcHVwV2luZG93TWVzc2FnZScsXG4gICAgICAgICdBIG5ldyB3aW5kb3cgaGFzIG9wZW5lZCBmb3IgYmFuayBhdXRob3JpemF0aW9uLiBQbGVhc2UgY29tcGxldGUgdGhlIHByb2Nlc3MgdGhlcmUuJyxcbiAgICAgICAgJ1MtYSBkZXNjaGlzIG8gZmVyZWFzdHLEgyBub3XEgyBwZW50cnUgYXV0b3JpemFyZSBiYW5jYXLEgy4gVsSDIHJ1Z8SDbSBzxIMgY29tcGxldGHIm2kgcHJvY2VzdWwgYWNvbG8uJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAncG9wdXBCbG9ja2VyTWVzc2FnZVRyYW5zbGF0aW9ucycsXG4gICAgICAgICdmbHV4LnN5c3RlbVN0ZXBzLm9wZW5CYW5raW5nLnBvcHVwQmxvY2tlck1lc3NhZ2UnLFxuICAgICAgICAnSWYgdGhlIHdpbmRvdyBkaWRuXFwndCBvcGVuLCBwbGVhc2UgY2hlY2sgeW91ciBwb3B1cCBibG9ja2VyIHNldHRpbmdzLicsXG4gICAgICAgICdEYWPEgyBmZXJlYXN0cmEgbnUgcy1hIGRlc2NoaXMsIHbEgyBydWfEg20gc8SDIHZlcmlmaWNhyJtpIHNldMSDcmlsZSBibG9jYXRvcnVsdWkgZGUgcG9wdXAtdXJpLidcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ2FjY291bnRzUmV0cmlldmVkVHJhbnNsYXRpb25zJyxcbiAgICAgICAgJ2ZsdXguc3lzdGVtU3RlcHMub3BlbkJhbmtpbmcuYWNjb3VudHNSZXRyaWV2ZWQnLFxuICAgICAgICAnQWNjb3VudHMgcmV0cmlldmVkJyxcbiAgICAgICAgJ0NvbnR1cmkgcHJlbHVhdGUnXG4gICAgICApLFxuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICd0cmFuc2FjdGlvbnNSZXRyaWV2ZWRUcmFuc2xhdGlvbnMnLFxuICAgICAgICAnZmx1eC5zeXN0ZW1TdGVwcy5vcGVuQmFua2luZy50cmFuc2FjdGlvbnNSZXRyaWV2ZWQnLFxuICAgICAgICAnVHJhbnNhY3Rpb25zIHJldHJpZXZlZCcsXG4gICAgICAgICdUcmFuemFjyJtpaSBwcmVsdWF0ZSdcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ2FjY291bnRzRm91bmRUcmFuc2xhdGlvbnMnLFxuICAgICAgICAnZmx1eC5zeXN0ZW1TdGVwcy5vcGVuQmFua2luZy5hY2NvdW50c0ZvdW5kJyxcbiAgICAgICAgJ3swfSBhY2NvdW50KHMpIGZvdW5kJyxcbiAgICAgICAgJ3swfSBjb250KHVyaSkgZ8SDc2l0ZSdcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ3RyYW5zYWN0aW9uc1N1bW1hcnlUcmFuc2xhdGlvbnMnLFxuICAgICAgICAnZmx1eC5zeXN0ZW1TdGVwcy5vcGVuQmFua2luZy50cmFuc2FjdGlvbnNTdW1tYXJ5JyxcbiAgICAgICAgJ3swfSB0cmFuc2FjdGlvbihzKSByZXRyaWV2ZWQgZm9yIHRoZSBsYXN0IHsxfSBtb250aChzKScsXG4gICAgICAgICd7MH0gdHJhbnphY8ibaWUoaSkgcHJlbHVhdGUgcGVudHJ1IHVsdGltZWxlIHsxfSBsdW7EgyhpKSdcbiAgICAgICksXG4gICAgXTtcbiAgICByZXR1cm4gdEluZm87XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZUN1c3RvbVN0ZXBUcmFuc2xhdGlvbnMoXG4gICAgbGFuZ3M6IExhbmd1YWdlW11cbiAgKTogVHJhbnNsYXRpb25JbmZvW10ge1xuICAgIGNvbnN0IHRJbmZvOiBUcmFuc2xhdGlvbkluZm9bXSA9IFtcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnbmFtZScsXG4gICAgICAgICdjb21tb24ub3RoZXJzLm5hbWUnLFxuICAgICAgICAnQ3VzdG9tIHN0ZXAnLFxuICAgICAgICAnUGFzIGN1c3RvbSdcbiAgICAgICksXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAgICAgJ2NvbW1vbi5vdGhlcnMuZGVzY3JpcHRpb24nLFxuICAgICAgICAnJyxcbiAgICAgICAgJydcbiAgICAgICksXG4gICAgXTtcbiAgICByZXR1cm4gdEluZm87XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGNyZWF0ZVZpZXdPZmZlclN0ZXBUcmFuc2xhdGlvbnMoXG4gICAgbGFuZ3M6IExhbmd1YWdlW11cbiAgKTogVHJhbnNsYXRpb25JbmZvW10ge1xuICAgIGNvbnN0IHRJbmZvOiBUcmFuc2xhdGlvbkluZm9bXSA9IFtcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnbmFtZScsXG4gICAgICAgICdjb21tb24ub3RoZXJzLm5hbWUnLFxuICAgICAgICAnVmlldyBvZmZlcicsXG4gICAgICAgICdWaXp1YWxpemFyZSBvZmVydMSDJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAnY29tbW9uLm90aGVycy5kZXNjcmlwdGlvbicsXG4gICAgICAgICdWaWV3IG9mZmVyIHN0ZXAnLFxuICAgICAgICAnUGFzIHBlbnRydSB2aXp1YWxpemFyZSBvZmVydMSDJ1xuICAgICAgKSxcbiAgICBdO1xuICAgIHJldHVybiB0SW5mbztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlU2lnblRyYW5zbGF0aW9ucyhsYW5nczogTGFuZ3VhZ2VbXSk6IFRyYW5zbGF0aW9uSW5mb1tdIHtcbiAgICBjb25zdCB0SW5mbzogVHJhbnNsYXRpb25JbmZvW10gPSBbXG4gICAgICB0aGlzLmNyZWF0ZVRyYW5zbGF0aW9uKFxuICAgICAgICBsYW5ncyxcbiAgICAgICAgJ25hbWUnLFxuICAgICAgICAnY29tbW9uLm90aGVycy5uYW1lJyxcbiAgICAgICAgJ1NpZ24gZG9jdW1lbnRzJyxcbiAgICAgICAgJ1NlbW5hcmUgZG9jdW1lbnRlJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAnY29tbW9uLm90aGVycy5kZXNjcmlwdGlvbicsXG4gICAgICAgICdTaWduIGRvY3VtZW50cyBzdGVwJyxcbiAgICAgICAgJ1BhcyBwZW50cnUgc2VtbmFyZSBkb2N1bWVudGUnXG4gICAgICApLFxuICAgIF07XG4gICAgcmV0dXJuIHRJbmZvO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBjcmVhdGVHZW5lcmF0ZURvY3VtZW50c1RyYW5zbGF0aW9ucyhcbiAgICBsYW5nczogTGFuZ3VhZ2VbXVxuICApOiBUcmFuc2xhdGlvbkluZm9bXSB7XG4gICAgY29uc3QgdEluZm86IFRyYW5zbGF0aW9uSW5mb1tdID0gW1xuICAgICAgdGhpcy5jcmVhdGVUcmFuc2xhdGlvbihcbiAgICAgICAgbGFuZ3MsXG4gICAgICAgICduYW1lJyxcbiAgICAgICAgJ2NvbW1vbi5vdGhlcnMubmFtZScsXG4gICAgICAgICdHZW5lcmF0ZSBkb2N1bWVudHMnLFxuICAgICAgICAnR2VuZXJhcmUgZG9jdW1lbnRlJ1xuICAgICAgKSxcbiAgICAgIHRoaXMuY3JlYXRlVHJhbnNsYXRpb24oXG4gICAgICAgIGxhbmdzLFxuICAgICAgICAnZGVzY3JpcHRpb24nLFxuICAgICAgICAnY29tbW9uLm90aGVycy5kZXNjcmlwdGlvbicsXG4gICAgICAgICdHZW5lcmF0ZSBkb2N1bWVudHMgc3RlcCcsXG4gICAgICAgICdQYXMgcGVudHJ1IGdlbmVyYXJlIGRvY3VtZW50ZSdcbiAgICAgICksXG4gICAgXTtcbiAgICByZXR1cm4gdEluZm87XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVUcmFuc2xhdGlvbihcbiAgICBsYW5nczogTGFuZ3VhZ2VbXSxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgdHJhbnNsYXRpb25LZXk6IHN0cmluZyxcbiAgICBlblZhbHVlOiBzdHJpbmcsXG4gICAgcm9WYWx1ZTogc3RyaW5nXG4gICk6IFRyYW5zbGF0aW9uSW5mbyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB0cmFuc2xhdGlvbktleTogdHJhbnNsYXRpb25LZXksXG4gICAgICB2YWx1ZXM6IHRoaXMuY3JlYXRlTGFiZWxzSW5mbyhsYW5ncywgZW5WYWx1ZSwgcm9WYWx1ZSksXG4gICAgfTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgY3JlYXRlTGFiZWxzSW5mbyhzdXBwb3J0ZWRMYW5ndWFnZXM6IExhbmd1YWdlW10sIGVuVmFsdWU6IHN0cmluZywgcm9WYWx1ZTogc3RyaW5nKTogTGFiZWxJbmZvW10ge1xuICAgIHJldHVybiB0aGlzLmNyZWF0ZUxhYmVsc0luZm9Db3JlKHN1cHBvcnRlZExhbmd1YWdlcywgW1xuICAgICAgeyBpc286ICdlbicsIHZhbHVlOiBlblZhbHVlIH0sXG4gICAgICB7IGlzbzogJ3JvJywgdmFsdWU6IHJvVmFsdWUgfSxcbiAgICBdKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNyZWF0ZUxhYmVsc0luZm9Db3JlKFxuICAgIHN1cHBvcnRlZExhbmd1YWdlczogTGFuZ3VhZ2VbXSxcbiAgICB2YWx1ZXM6IHsgaXNvOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdXG4gICk6IExhYmVsSW5mb1tdIHtcbiAgICBsZXQgbGlzdDogTGFiZWxJbmZvW10gPSBbXTtcbiAgICB2YWx1ZXMuZm9yRWFjaCgodikgPT4ge1xuICAgICAgY29uc3QgbGFuZ0lkID0gc3VwcG9ydGVkTGFuZ3VhZ2VzLmZpbmQoKGxhbmcpID0+IGxhbmcuaXNvID09PSB2Lmlzbyk/LmlkO1xuICAgICAgaWYgKGxhbmdJZCAmJiBsYW5nSWQgPiAwKSB7XG4gICAgICAgIGxpc3QucHVzaCh7XG4gICAgICAgICAgbGFuZ3VhZ2VJZDogbGFuZ0lkLFxuICAgICAgICAgIGxhbmd1YWdlSXNvOiB2LmlzbyxcbiAgICAgICAgICB2YWx1ZTogdi52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cbn1cbiJdfQ==
|