@eqproject/eqp-dynamic-module 2.10.66 → 2.10.67
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.mjs +33 -16
- package/esm2020/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.mjs +656 -32
- package/esm2020/lib/components/private/action-button-creator/action-button-creator.component.mjs +2 -2
- package/esm2020/lib/components/private/add-form-field/add-form-field.component.mjs +809 -15
- package/esm2020/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.mjs +1 -1
- package/esm2020/lib/components/private/field-templates/action-button-field-template/action-button-field-template.component.mjs +98 -20
- package/esm2020/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.mjs +132 -69
- package/esm2020/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.mjs +159 -24
- package/esm2020/lib/components/private/field-templates/date-field-template/date-field-template.component.mjs +152 -7
- package/esm2020/lib/components/private/field-templates/image-field-selector-template/image-field-selector-template.component.mjs +180 -39
- package/esm2020/lib/components/private/field-templates/image-field-template/image-field-template.component.mjs +100 -78
- package/esm2020/lib/components/private/field-templates/image-with-markers-field-template/image-with-markers-field-template.component.mjs +103 -88
- package/esm2020/lib/components/private/field-templates/label-field-template/label-field-template.component.mjs +90 -17
- package/esm2020/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.mjs +217 -54
- package/esm2020/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.mjs +220 -37
- package/esm2020/lib/components/private/field-templates/text-field-template/text-field-template.component.mjs +263 -29
- package/esm2020/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.mjs +210 -18
- package/esm2020/lib/components/private/form-records/add-form-record/add-form-record.component.mjs +33 -13
- package/esm2020/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.mjs +1 -1
- package/esm2020/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.mjs +1 -1
- package/esm2020/lib/components/private/tmw-image-marker/tmw-image-marker.component.mjs +4 -3
- package/esm2020/lib/components/private/trigger-creator/trigger-creator.component.mjs +2 -2
- package/esm2020/lib/models/endPointConfiguration.model.mjs +7 -2
- package/esm2020/lib/models/fields/actionButton.model.mjs +3 -1
- package/esm2020/lib/models/fields/attachmentField.model.mjs +3 -1
- package/esm2020/lib/models/fields/booleanField.model.mjs +3 -1
- package/esm2020/lib/models/fields/dateField.model.mjs +3 -1
- package/esm2020/lib/models/fields/imageField.model.mjs +3 -1
- package/esm2020/lib/models/fields/imageSelectorField.model.mjs +3 -1
- package/esm2020/lib/models/fields/imageWithMarkersField.model.mjs +3 -1
- package/esm2020/lib/models/fields/labelField.model.mjs +3 -1
- package/esm2020/lib/models/fields/listValueField.model.mjs +3 -1
- package/esm2020/lib/models/fields/numericField.model.mjs +8 -1
- package/esm2020/lib/models/fields/textField.model.mjs +3 -1
- package/esm2020/lib/models/fields/textareaField.model.mjs +8 -1
- package/esm2020/lib/models/form.model.mjs +1 -1
- package/fesm2015/eqproject-eqp-dynamic-module.mjs +3533 -528
- package/fesm2015/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/fesm2020/eqproject-eqp-dynamic-module.mjs +3452 -540
- package/fesm2020/eqproject-eqp-dynamic-module.mjs.map +1 -1
- package/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.d.ts +5 -1
- package/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.d.ts +74 -6
- package/lib/components/private/add-form-field/add-form-field.component.d.ts +208 -1
- package/lib/components/private/field-templates/action-button-field-template/action-button-field-template.component.d.ts +16 -10
- package/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.d.ts +17 -33
- package/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.d.ts +24 -11
- package/lib/components/private/field-templates/date-field-template/date-field-template.component.d.ts +21 -4
- package/lib/components/private/field-templates/image-field-selector-template/image-field-selector-template.component.d.ts +20 -16
- package/lib/components/private/field-templates/image-field-template/image-field-template.component.d.ts +15 -36
- package/lib/components/private/field-templates/image-with-markers-field-template/image-with-markers-field-template.component.d.ts +16 -37
- package/lib/components/private/field-templates/label-field-template/label-field-template.component.d.ts +16 -12
- package/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.d.ts +21 -28
- package/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.d.ts +25 -18
- package/lib/components/private/field-templates/text-field-template/text-field-template.component.d.ts +38 -10
- package/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.d.ts +26 -12
- package/lib/components/private/form-records/add-form-record/add-form-record.component.d.ts +12 -2
- package/lib/models/endPointConfiguration.model.d.ts +1 -0
- package/lib/models/fields/actionButton.model.d.ts +12 -0
- package/lib/models/fields/attachmentField.model.d.ts +31 -3
- package/lib/models/fields/booleanField.model.d.ts +15 -0
- package/lib/models/fields/dateField.model.d.ts +46 -0
- package/lib/models/fields/imageField.model.d.ts +9 -0
- package/lib/models/fields/imageSelectorField.model.d.ts +23 -0
- package/lib/models/fields/imageWithMarkersField.model.d.ts +9 -0
- package/lib/models/fields/labelField.model.d.ts +5 -0
- package/lib/models/fields/listValueField.model.d.ts +38 -0
- package/lib/models/fields/numericField.model.d.ts +34 -0
- package/lib/models/fields/textField.model.d.ts +33 -0
- package/lib/models/fields/textareaField.model.d.ts +39 -0
- package/lib/models/form.model.d.ts +6 -0
- package/package.json +3 -3
|
@@ -3,29 +3,57 @@ import { UtilityHelperService } from '../../../../services/utilityHelper.service
|
|
|
3
3
|
import { DynAttachmentSelectObject } from '../../../../models/dynAttachment';
|
|
4
4
|
import { GlobalService } from '../../../../services/global.service';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/material/
|
|
7
|
-
import * as i2 from "
|
|
8
|
-
import * as i3 from "@angular/material/
|
|
9
|
-
import * as i4 from "@angular/
|
|
10
|
-
import * as i5 from "@angular/
|
|
11
|
-
|
|
12
|
-
|
|
6
|
+
import * as i1 from "@angular/material/form-field";
|
|
7
|
+
import * as i2 from "@angular/material/core";
|
|
8
|
+
import * as i3 from "@angular/material/select";
|
|
9
|
+
import * as i4 from "@angular/forms";
|
|
10
|
+
import * as i5 from "@angular/common";
|
|
11
|
+
// Elementi scoped da #fieldUid (mat-form-field DOM interno al wrapper)
|
|
12
|
+
const ELEMENT_SELECTORS = {
|
|
13
|
+
Container: ' mat-form-field',
|
|
14
|
+
CasellaSelezione: ' .mat-mdc-text-field-wrapper',
|
|
15
|
+
Descrizione: ' .mdc-floating-label',
|
|
16
|
+
};
|
|
17
|
+
const STATES = ['Normale', 'Mouseover', 'Selezionato', 'NotValid', 'Readonly'];
|
|
18
|
+
const DEFAULT_FIELD_STYLES = {};
|
|
13
19
|
export class ImageFieldSelectorTemplateComponent {
|
|
14
|
-
constructor(
|
|
15
|
-
this.
|
|
16
|
-
this.utilityService = utilityService;
|
|
20
|
+
constructor(renderer) {
|
|
21
|
+
this.renderer = renderer;
|
|
17
22
|
this.formulaObject = {};
|
|
18
23
|
this.inConfig = false;
|
|
24
|
+
this.styleVersion = 0;
|
|
25
|
+
this.forceState = null;
|
|
19
26
|
this.recordChange = new EventEmitter();
|
|
27
|
+
this.styleEl = null;
|
|
20
28
|
}
|
|
21
29
|
ngOnInit() {
|
|
22
|
-
|
|
23
|
-
|
|
30
|
+
this.fieldUid = 'isf-' + Math.random().toString(36).slice(2, 10);
|
|
31
|
+
this.injectStyles();
|
|
32
|
+
GlobalService.debugLog('ImageFieldSelectorTemplateComponent ngOnInit - record', this.record[this.field.Name]);
|
|
33
|
+
GlobalService.debugLog('ImageFieldSelectorTemplateComponent ngOnInit - field', this.field);
|
|
24
34
|
this.initStyles();
|
|
25
35
|
this.initializeAttachments();
|
|
26
36
|
}
|
|
37
|
+
ngOnChanges(changes) {
|
|
38
|
+
if (changes['styleVersion'] && !changes['styleVersion'].firstChange) {
|
|
39
|
+
this.injectStyles();
|
|
40
|
+
this.updateStateClasses();
|
|
41
|
+
}
|
|
42
|
+
if (changes['forceState']) {
|
|
43
|
+
this.updateStateClasses();
|
|
44
|
+
}
|
|
45
|
+
if (changes['record'] && !changes['record'].firstChange &&
|
|
46
|
+
JSON.stringify(changes['record'].currentValue) !== JSON.stringify(changes['record'].previousValue)) {
|
|
47
|
+
this.record = changes['record'].currentValue;
|
|
48
|
+
this.updateField();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
ngOnDestroy() {
|
|
52
|
+
if (this.styleEl?.parentNode) {
|
|
53
|
+
this.styleEl.parentNode.removeChild(this.styleEl);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
27
56
|
initStyles() {
|
|
28
|
-
//Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html
|
|
29
57
|
if (this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)
|
|
30
58
|
this.FieldstyleObj = UtilityHelperService.initStyles(this.field.FieldstyleCSS);
|
|
31
59
|
if (this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined)
|
|
@@ -34,19 +62,10 @@ export class ImageFieldSelectorTemplateComponent {
|
|
|
34
62
|
ToLowerCase(el) {
|
|
35
63
|
return el.toLowerCase();
|
|
36
64
|
}
|
|
37
|
-
|
|
38
|
-
// Se viene modificato il valore di "ngModelInput" allora aggiorna l'input
|
|
39
|
-
if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {
|
|
40
|
-
this.record = changes['record'].currentValue;
|
|
41
|
-
this.updateField();
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.
|
|
46
|
-
*/
|
|
47
|
-
updateField() {
|
|
48
|
-
}
|
|
65
|
+
updateField() { }
|
|
49
66
|
initializeAttachments() {
|
|
67
|
+
if (!this.field.AttachmentList || this.field.AttachmentList.length === 0)
|
|
68
|
+
return;
|
|
50
69
|
this.field.AttachmentList.forEach((attachment) => {
|
|
51
70
|
attachment.objectToSelect = new DynAttachmentSelectObject();
|
|
52
71
|
attachment.objectToSelect.ID = attachment.ID;
|
|
@@ -58,31 +77,23 @@ export class ImageFieldSelectorTemplateComponent {
|
|
|
58
77
|
this.transformedRecord = this.record[this.field.Name].ID;
|
|
59
78
|
}
|
|
60
79
|
else {
|
|
80
|
+
this.transformedRecord = [];
|
|
61
81
|
this.record[this.field.Name].forEach((element) => {
|
|
62
82
|
this.transformedRecord.push(Number(element.ID));
|
|
63
83
|
});
|
|
64
84
|
}
|
|
65
85
|
}
|
|
66
86
|
}
|
|
67
|
-
/**
|
|
68
|
-
* Metodo per emettere l'evento che il valore del record è cambiato.
|
|
69
|
-
* @param event ID dell'attachment della lista
|
|
70
|
-
*/
|
|
71
87
|
onRecordValueChange(event) {
|
|
72
|
-
// spiano i valori di risposta
|
|
73
88
|
this.record[this.field.Name] = new Array();
|
|
74
89
|
if (!this.field.IsMultiChoiche) {
|
|
75
|
-
// se non è multiscelta
|
|
76
90
|
if (event) {
|
|
77
|
-
// se c'è un valore ho selezionato un'immagine, la recupero e la assegna al valore della risposta
|
|
78
91
|
var dynAttachment = JSON.parse(JSON.stringify(this.field.AttachmentList.find(x => x.ID == event)));
|
|
79
92
|
dynAttachment.FileDataBase64 = null;
|
|
80
93
|
this.record[this.field.Name] = dynAttachment;
|
|
81
94
|
}
|
|
82
95
|
}
|
|
83
96
|
else {
|
|
84
|
-
// se è una multiscelta
|
|
85
|
-
// per ogni elemento selezionato lo aggiungo alla lista dei valori di risposta
|
|
86
97
|
this.transformedRecord?.forEach((element) => {
|
|
87
98
|
var dynAttachment = JSON.parse(JSON.stringify(this.field.AttachmentList.find(x => x.ID == element)));
|
|
88
99
|
dynAttachment.FileDataBase64 = null;
|
|
@@ -91,13 +102,139 @@ export class ImageFieldSelectorTemplateComponent {
|
|
|
91
102
|
}
|
|
92
103
|
this.recordChange.emit(this.record);
|
|
93
104
|
}
|
|
105
|
+
// ─── CSS injection ───────────────────────────────────────────────────────────
|
|
106
|
+
injectStyles() {
|
|
107
|
+
if (!this.fieldUid)
|
|
108
|
+
return;
|
|
109
|
+
const css = this.field?.ImageSelectorFieldStyleCSS ?? {};
|
|
110
|
+
const rules = this.buildCssRules(this.fieldUid, css);
|
|
111
|
+
if (!this.styleEl) {
|
|
112
|
+
this.styleEl = this.renderer.createElement('style');
|
|
113
|
+
this.styleEl.id = 'style-' + this.fieldUid;
|
|
114
|
+
this.renderer.appendChild(document.head, this.styleEl);
|
|
115
|
+
}
|
|
116
|
+
this.styleEl.textContent = rules;
|
|
117
|
+
}
|
|
118
|
+
buildCssRules(uid, css) {
|
|
119
|
+
const lines = [];
|
|
120
|
+
// Elementi scoped da #uid (interni al mat-form-field)
|
|
121
|
+
for (const el of Object.keys(ELEMENT_SELECTORS)) {
|
|
122
|
+
const s = ELEMENT_SELECTORS[el];
|
|
123
|
+
for (const state of STATES) {
|
|
124
|
+
const key = el + state;
|
|
125
|
+
const defaultVal = DEFAULT_FIELD_STYLES[key];
|
|
126
|
+
const userVal = css[key];
|
|
127
|
+
if (!defaultVal?.trim() && !userVal?.trim())
|
|
128
|
+
continue;
|
|
129
|
+
const selector = this.getSelector(uid, state, el, s);
|
|
130
|
+
if (!selector)
|
|
131
|
+
continue;
|
|
132
|
+
if (defaultVal?.trim())
|
|
133
|
+
lines.push(`${selector} { ${defaultVal} }`);
|
|
134
|
+
if (userVal?.trim()) {
|
|
135
|
+
lines.push(`${selector} { ${userVal} }`);
|
|
136
|
+
// CasellaSelezione: inietta anche sul testo selezionato per color/font
|
|
137
|
+
if (el === 'CasellaSelezione') {
|
|
138
|
+
const textSel = this.getSelector(uid, state, el, ' .mat-mdc-select-value');
|
|
139
|
+
if (textSel)
|
|
140
|
+
lines.push(`${textSel} { ${userVal} }`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Selezioni: scoped dal panelClass (overlay fuori da #uid)
|
|
146
|
+
// Normale/Mouseover/Selezionato: per-item (applicati sulla singola opzione)
|
|
147
|
+
// NotValid/Readonly: non applicabili all'overlay, ignorati
|
|
148
|
+
const selezioniOverlayStates = ['Normale', 'Mouseover', 'Selezionato'];
|
|
149
|
+
for (const state of selezioniOverlayStates) {
|
|
150
|
+
const key = 'Selezioni' + state;
|
|
151
|
+
const userVal = css[key];
|
|
152
|
+
if (!userVal?.trim())
|
|
153
|
+
continue;
|
|
154
|
+
const panelSel = this.getSelezioniSelector(uid, state);
|
|
155
|
+
if (!panelSel)
|
|
156
|
+
continue;
|
|
157
|
+
const baseOptionSel = this.getSelezioniBaseSelector(uid, state);
|
|
158
|
+
const valWithImportant = this.forceImportant(userVal);
|
|
159
|
+
lines.push(`${panelSel} { ${valWithImportant} }`);
|
|
160
|
+
// color su Selezioni → cambia testo opzione E checkbox pseudo-checkbox
|
|
161
|
+
const colorVal = this.extractCssPropValue(userVal, 'color');
|
|
162
|
+
if (colorVal) {
|
|
163
|
+
lines.push(`${baseOptionSel} .mdc-list-item__primary-text { color: ${colorVal} !important; }`);
|
|
164
|
+
lines.push(`${baseOptionSel} .mat-pseudo-checkbox { border-color: ${colorVal} !important; }`);
|
|
165
|
+
lines.push(`${baseOptionSel} .mat-pseudo-checkbox-checked { background-color: ${colorVal} !important; }`);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return lines.join('\n');
|
|
169
|
+
}
|
|
170
|
+
// Selettore per elementi interni al mat-form-field (#uid scoping)
|
|
171
|
+
getSelector(uid, state, el, s) {
|
|
172
|
+
switch (state) {
|
|
173
|
+
case 'Normale': return `#${uid}${s}`;
|
|
174
|
+
case 'Mouseover': return `#${uid}:hover${s}, #${uid}.eqp-state-hover${s}`;
|
|
175
|
+
case 'Selezionato': return `#${uid}.eqp-state-selected${s}`;
|
|
176
|
+
case 'NotValid': return `#${uid}.eqp-invalid${s}`;
|
|
177
|
+
case 'Readonly': return `#${uid}.eqp-readonly${s}`;
|
|
178
|
+
default: return null;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
// Selettore per le opzioni nel panel overlay (scoped dal panelClass = uid)
|
|
182
|
+
// panelClass va su .mat-mdc-select-panel (via [ngClass]); mat-option sono figli diretti
|
|
183
|
+
getSelezioniSelector(uid, state) {
|
|
184
|
+
switch (state) {
|
|
185
|
+
case 'Normale': return `.${uid} mat-option, .${uid} .mat-mdc-option`;
|
|
186
|
+
case 'Mouseover': return `.${uid} mat-option:hover, .${uid} .mat-mdc-option:hover`;
|
|
187
|
+
case 'Selezionato': return `.${uid} mat-option.mdc-list-item--selected, .${uid} .mat-mdc-option.mdc-list-item--selected`;
|
|
188
|
+
default: return null;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// Selettore base singolo per i sub-element rules (es. .mdc-list-item__primary-text)
|
|
192
|
+
getSelezioniBaseSelector(uid, state) {
|
|
193
|
+
switch (state) {
|
|
194
|
+
case 'Mouseover': return `.${uid} mat-option:hover`;
|
|
195
|
+
case 'Selezionato': return `.${uid} mat-option.mdc-list-item--selected`;
|
|
196
|
+
default: return `.${uid} mat-option`;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
updateStateClasses() {
|
|
200
|
+
if (!this.fieldUid)
|
|
201
|
+
return;
|
|
202
|
+
const wrapper = document.getElementById(this.fieldUid);
|
|
203
|
+
if (!wrapper)
|
|
204
|
+
return;
|
|
205
|
+
this.toggleClass(wrapper, 'eqp-state-hover', this.forceState === 'Mouseover');
|
|
206
|
+
this.toggleClass(wrapper, 'eqp-state-selected', this.forceState === 'Selezionato');
|
|
207
|
+
this.toggleClass(wrapper, 'eqp-invalid', this.forceState === 'NotValid');
|
|
208
|
+
this.toggleClass(wrapper, 'eqp-readonly', this.forceState === 'Readonly');
|
|
209
|
+
}
|
|
210
|
+
toggleClass(el, cls, condition) {
|
|
211
|
+
if (condition)
|
|
212
|
+
this.renderer.addClass(el, cls);
|
|
213
|
+
else
|
|
214
|
+
this.renderer.removeClass(el, cls);
|
|
215
|
+
}
|
|
216
|
+
forceImportant(css) {
|
|
217
|
+
return css.split(';').map(part => {
|
|
218
|
+
const trimmed = part.trim();
|
|
219
|
+
if (!trimmed)
|
|
220
|
+
return part;
|
|
221
|
+
if (trimmed.toLowerCase().includes('!important'))
|
|
222
|
+
return part;
|
|
223
|
+
return part.replace(/\s+$/, '') + ' !important';
|
|
224
|
+
}).join(';');
|
|
225
|
+
}
|
|
226
|
+
extractCssPropValue(css, prop) {
|
|
227
|
+
const re = new RegExp(`(?:^|;)\\s*${prop}\\s*:\\s*([^;!]+?)(?:\\s*!important)?\\s*(?:;|$)`, 'i');
|
|
228
|
+
const match = css.match(re);
|
|
229
|
+
return match ? match[1].trim() : null;
|
|
230
|
+
}
|
|
94
231
|
}
|
|
95
|
-
ImageFieldSelectorTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ImageFieldSelectorTemplateComponent, deps: [{ token:
|
|
96
|
-
ImageFieldSelectorTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ImageFieldSelectorTemplateComponent, selector: "image-field-selector-template", inputs: { record: "record", formulaObject: "formulaObject", field: "field", inConfig: "inConfig" }, outputs: { recordChange: "recordChange" }, usesOnChanges: true, ngImport: i0, template: "<mat-form-field [formGroup]=\"field.FormFormGroup\" appearance=\"outline\">\r\n
|
|
232
|
+
ImageFieldSelectorTemplateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ImageFieldSelectorTemplateComponent, deps: [{ token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Component });
|
|
233
|
+
ImageFieldSelectorTemplateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ImageFieldSelectorTemplateComponent, selector: "image-field-selector-template", inputs: { record: "record", formulaObject: "formulaObject", field: "field", inConfig: "inConfig", styleVersion: "styleVersion", forceState: "forceState" }, outputs: { recordChange: "recordChange" }, usesOnChanges: true, ngImport: i0, template: "<div id=\"{{fieldUid}}\">\r\n\r\n <mat-form-field [formGroup]=\"field.FormFormGroup\" appearance=\"outline\">\r\n <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\">{{field.Description}}</mat-label>\r\n\r\n <!-- Mat-Select SINGOLA -->\r\n <mat-select *ngIf=\"!field.IsMultiChoiche\" class=\"imageFieldSelectorImages\" [formControlName]=\"field.Name\"\r\n [required]=\"field.Required\" [(ngModel)]=\"transformedRecord\" (ngModelChange)=\"onRecordValueChange($event)\"\r\n [panelClass]=\"fieldUid\">\r\n <mat-option *ngFor=\"let attachment of field.AttachmentList\" [value]=\"attachment.ID\">\r\n <img src='data:image/{{ToLowerCase(attachment.FileExtension)}};base64,{{attachment.FileDataBase64}}' [height]=\"attachment.ResizedImageHeightPx != null ? attachment.ResizedImageHeightPx : 128\">\r\n <span>{{ attachment.ButtonKey }}</span>\r\n </mat-option>\r\n </mat-select>\r\n\r\n <!-- Mat-Select MULTIPLA -->\r\n <mat-select *ngIf=\"field.IsMultiChoiche\" class=\"imageFieldSelectorImages\" [formControlName]=\"field.Name\"\r\n [required]=\"field.Required\" [(ngModel)]=\"transformedRecord\" (ngModelChange)=\"onRecordValueChange($event)\" multiple\r\n [panelClass]=\"fieldUid\">\r\n <mat-option *ngFor=\"let attachment of field.AttachmentList\" [value]=\"attachment.ID\">\r\n <img src='data:image/{{ToLowerCase(attachment.FileExtension)}};base64,{{attachment.FileDataBase64}}' [height]=\"attachment.ResizedImageHeightPx != null ? attachment.ResizedImageHeightPx : 128\">\r\n <span>{{ attachment.ButtonKey }}</span>\r\n </mat-option>\r\n </mat-select>\r\n\r\n </mat-form-field>\r\n\r\n</div>\r\n", styles: [".mdc-list-item__primary-text{margin-right:50px}\n"], dependencies: [{ kind: "component", type: i1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i1.MatLabel, selector: "mat-label" }, { kind: "component", type: i2.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i3.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] });
|
|
97
234
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ImageFieldSelectorTemplateComponent, decorators: [{
|
|
98
235
|
type: Component,
|
|
99
|
-
args: [{ selector: 'image-field-selector-template', template: "<mat-form-field [formGroup]=\"field.FormFormGroup\" appearance=\"outline\">\r\n
|
|
100
|
-
}], ctorParameters: function () { return [{ type:
|
|
236
|
+
args: [{ selector: 'image-field-selector-template', template: "<div id=\"{{fieldUid}}\">\r\n\r\n <mat-form-field [formGroup]=\"field.FormFormGroup\" appearance=\"outline\">\r\n <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\">{{field.Description}}</mat-label>\r\n\r\n <!-- Mat-Select SINGOLA -->\r\n <mat-select *ngIf=\"!field.IsMultiChoiche\" class=\"imageFieldSelectorImages\" [formControlName]=\"field.Name\"\r\n [required]=\"field.Required\" [(ngModel)]=\"transformedRecord\" (ngModelChange)=\"onRecordValueChange($event)\"\r\n [panelClass]=\"fieldUid\">\r\n <mat-option *ngFor=\"let attachment of field.AttachmentList\" [value]=\"attachment.ID\">\r\n <img src='data:image/{{ToLowerCase(attachment.FileExtension)}};base64,{{attachment.FileDataBase64}}' [height]=\"attachment.ResizedImageHeightPx != null ? attachment.ResizedImageHeightPx : 128\">\r\n <span>{{ attachment.ButtonKey }}</span>\r\n </mat-option>\r\n </mat-select>\r\n\r\n <!-- Mat-Select MULTIPLA -->\r\n <mat-select *ngIf=\"field.IsMultiChoiche\" class=\"imageFieldSelectorImages\" [formControlName]=\"field.Name\"\r\n [required]=\"field.Required\" [(ngModel)]=\"transformedRecord\" (ngModelChange)=\"onRecordValueChange($event)\" multiple\r\n [panelClass]=\"fieldUid\">\r\n <mat-option *ngFor=\"let attachment of field.AttachmentList\" [value]=\"attachment.ID\">\r\n <img src='data:image/{{ToLowerCase(attachment.FileExtension)}};base64,{{attachment.FileDataBase64}}' [height]=\"attachment.ResizedImageHeightPx != null ? attachment.ResizedImageHeightPx : 128\">\r\n <span>{{ attachment.ButtonKey }}</span>\r\n </mat-option>\r\n </mat-select>\r\n\r\n </mat-form-field>\r\n\r\n</div>\r\n", styles: [".mdc-list-item__primary-text{margin-right:50px}\n"] }]
|
|
237
|
+
}], ctorParameters: function () { return [{ type: i0.Renderer2 }]; }, propDecorators: { record: [{
|
|
101
238
|
type: Input
|
|
102
239
|
}], formulaObject: [{
|
|
103
240
|
type: Input
|
|
@@ -105,7 +242,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
105
242
|
type: Input
|
|
106
243
|
}], inConfig: [{
|
|
107
244
|
type: Input
|
|
245
|
+
}], styleVersion: [{
|
|
246
|
+
type: Input
|
|
247
|
+
}], forceState: [{
|
|
248
|
+
type: Input
|
|
108
249
|
}], recordChange: [{
|
|
109
250
|
type: Output
|
|
110
251
|
}] } });
|
|
111
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZmllbGQtc2VsZWN0b3ItdGVtcGxhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2ZpZWxkLXRlbXBsYXRlcy9pbWFnZS1maWVsZC1zZWxlY3Rvci10ZW1wbGF0ZS9pbWFnZS1maWVsZC1zZWxlY3Rvci10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2ltYWdlLWZpZWxkLXNlbGVjdG9yLXRlbXBsYXRlL2ltYWdlLWZpZWxkLXNlbGVjdG9yLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBSXRGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ25GLE9BQU8sRUFBaUIseUJBQXlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUM1RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0scUNBQXFDLENBQUM7Ozs7Ozs7OztBQU9wRSxNQUFNLE9BQU8sbUNBQW1DO0lBWTlDLFlBQ1UsTUFBaUIsRUFDbEIsY0FBb0M7UUFEbkMsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQUNsQixtQkFBYyxHQUFkLGNBQWMsQ0FBc0I7UUFYcEMsa0JBQWEsR0FBUSxFQUFFLENBQUM7UUFFeEIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUN6QixpQkFBWSxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO0lBU3RFLENBQUM7SUFFTCxRQUFRO1FBRU4sYUFBYSxD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QyxDQUFDLENBQUM7U0FDSjtRQUVELElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxDQUFDOztpSUF0R1EsbUNBQW1DO3FIQUFuQyxtQ0FBbUMseU9DYmhELHcvQ0FxQmlCOzRGRFJKLG1DQUFtQztrQkFML0MsU0FBUzsrQkFDRSwrQkFBK0I7bUlBTWhDLE1BQU07c0JBQWQsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2csIE1hdERpYWxvZ1JlZiB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IFJlY29yZCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9yZWNvcmQubW9kZWwnO1xyXG5pbXBvcnQgeyBJbWFnZVNlbGVjdG9yRmllbGQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZmllbGRzL2ltYWdlU2VsZWN0b3JGaWVsZC5tb2RlbCc7XHJcbmltcG9ydCB7IFV0aWxpdHlIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vc2VydmljZXMvdXRpbGl0eUhlbHBlci5zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IER5bkF0dGFjaG1lbnQsIER5bkF0dGFjaG1lbnRTZWxlY3RPYmplY3QgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZHluQXR0YWNobWVudCc7XHJcbmltcG9ydCB7IEdsb2JhbFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy9nbG9iYWwuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2ltYWdlLWZpZWxkLXNlbGVjdG9yLXRlbXBsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vaW1hZ2UtZmllbGQtc2VsZWN0b3ItdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2ltYWdlLWZpZWxkLXNlbGVjdG9yLXRlbXBsYXRlLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuZXhwb3J0IGNsYXNzIEltYWdlRmllbGRTZWxlY3RvclRlbXBsYXRlQ29tcG9uZW50IHtcclxuXHJcbiAgQElucHV0KCkgcmVjb3JkOiBSZWNvcmQ7XHJcbiAgQElucHV0KCkgZm9ybXVsYU9iamVjdDogYW55ID0ge307XHJcbiAgQElucHV0KCkgZmllbGQ6IEltYWdlU2VsZWN0b3JGaWVsZDtcclxuICBASW5wdXQoKSBpbkNvbmZpZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBPdXRwdXQoKSByZWNvcmRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcblxyXG4gIEZpZWxkc3R5bGVPYmo6IGFueTtcclxuICBMYWJlbHN0eWxlT2JqOiBhbnk7XHJcbiAgdHJhbnNmb3JtZWRSZWNvcmQ6IGFueTtcclxuIFxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHB1YmxpYyB1dGlsaXR5U2VydmljZTogVXRpbGl0eUhlbHBlclNlcnZpY2VcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKFwiSW1hZ2VGaWVsZFNlbGVjdG9yVGVtcGxhdGVDb21wb25lbnQgLSBSRUNPUkQgbmdPbkluaXQoKSAtIHJlY29yZFwiLCB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdKTtcclxuICAgIEdsb2JhbFNlcnZpY2UuZGVidWdMb2coXCJJbWFnZUZpZWxkU2VsZWN0b3JUZW1wbGF0ZUNvbXBvbmVudCAtIFJFQ09SRCBuZ09uSW5pdCgpIC0gZmllbGRcIiwgdGhpcy5maWVsZCk7XHJcblxyXG4gICAgdGhpcy5pbml0U3R5bGVzKCk7XHJcbiAgICB0aGlzLmluaXRpYWxpemVBdHRhY2htZW50cygpO1xyXG4gICAgXHJcbiAgfVxyXG5cclxuICBpbml0U3R5bGVzKCkge1xyXG4gICAgLy9GdW56aW9uZSBwZXIgcGFyc2FyZSBpbCBjYW1wbyBzdHlsZWNzcyBkZWxsJ29nZ2V0dG8gZmllbGQgZWQgYXBwbGljYXJsbyBhbGwnaHRtbFxyXG4gIGlmKHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSBudWxsIHx8IHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSB1bmRlZmluZWQpICAgXHJcbiAgICB0aGlzLkZpZWxkc3R5bGVPYmo9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmluaXRTdHlsZXModGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTKTtcclxuICBpZih0aGlzLmZpZWxkLkxhYmVsc3R5bGVDU1MgIT0gbnVsbCB8fCB0aGlzLmZpZWxkLkxhYmVsc3R5bGVDU1MgIT0gdW5kZWZpbmVkKSAgIFxyXG4gICAgdGhpcy5MYWJlbHN0eWxlT2JqID0gVXRpbGl0eUhlbHBlclNlcnZpY2UuaW5pdFN0eWxlcyh0aGlzLmZpZWxkLkxhYmVsc3R5bGVDU1MpO1xyXG59ICBcclxuXHJcbiAgVG9Mb3dlckNhc2UoZWw6c3RyaW5nKXtcclxuICAgIHJldHVybiBlbC50b0xvd2VyQ2FzZSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgLy8gU2UgdmllbmUgbW9kaWZpY2F0byBpbCB2YWxvcmUgZGkgXCJuZ01vZGVsSW5wdXRcIiBhbGxvcmEgYWdnaW9ybmEgbCdpbnB1dFxyXG4gICAgaWYgKGNoYW5nZXNbJ3JlY29yZCddICE9IHVuZGVmaW5lZCAmJiBjaGFuZ2VzWydyZWNvcmQnXS5maXJzdENoYW5nZSA9PSBmYWxzZSAmJiBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5jdXJyZW50VmFsdWUpICE9IEpTT04uc3RyaW5naWZ5KGNoYW5nZXNbJ3JlY29yZCddLnByZXZpb3VzVmFsdWUpKSB7XHJcbiAgICAgIHRoaXMucmVjb3JkID0gY2hhbmdlc1sncmVjb3JkJ10uY3VycmVudFZhbHVlO1xyXG4gICAgICB0aGlzLnVwZGF0ZUZpZWxkKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGFnZ2lvcm5hcmUgaWwgdmFsb3JlIGRlbCBjYW1wbyBxdWFuZG8gcXVlc3RvIMOoIHJhcHByZXNlbnRhdG8gZGEgdW5hIGZvcm11bGEuXHJcbiAgICovXHJcbiAgdXBkYXRlRmllbGQoKSB7XHJcblxyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZUF0dGFjaG1lbnRzKCl7XHJcbiAgICB0aGlzLmZpZWxkLkF0dGFjaG1lbnRMaXN0LmZvckVhY2goKGF0dGFjaG1lbnQpID0+IHtcclxuICAgICAgYXR0YWNobWVudC5vYmplY3RUb1NlbGVjdCA9IG5ldyBEeW5BdHRhY2htZW50U2VsZWN0T2JqZWN0KCk7XHJcbiAgICAgIGF0dGFjaG1lbnQub2JqZWN0VG9TZWxlY3QuSUQgPSBhdHRhY2htZW50LklEO1xyXG4gICAgICBhdHRhY2htZW50Lm9iamVjdFRvU2VsZWN0LkJ1dHRvbktleSA9IGF0dGFjaG1lbnQuQnV0dG9uS2V5O1xyXG4gICAgICBhdHRhY2htZW50Lm9iamVjdFRvU2VsZWN0LkJ1dHRvblZhbHVlID0gYXR0YWNobWVudC5CdXR0b25WYWx1ZTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdICE9IG51bGwpe1xyXG4gICAgICBpZiAoIXRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGUpe1xyXG4gICAgICAgIHRoaXMudHJhbnNmb3JtZWRSZWNvcmQgPSB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLklEO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgICh0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdIGFzIEFycmF5PER5bkF0dGFjaG1lbnQ+KS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zZm9ybWVkUmVjb3JkLnB1c2goTnVtYmVyKGVsZW1lbnQuSUQpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgICAvKipcclxuICAgKiBNZXRvZG8gcGVyIGVtZXR0ZXJlIGwnZXZlbnRvIGNoZSBpbCB2YWxvcmUgZGVsIHJlY29yZCDDqCBjYW1iaWF0by5cclxuICAgKiBAcGFyYW0gZXZlbnQgSUQgZGVsbCdhdHRhY2htZW50IGRlbGxhIGxpc3RhXHJcbiAgICovXHJcbiAgICBvblJlY29yZFZhbHVlQ2hhbmdlKGV2ZW50OiBudW1iZXIpIHtcclxuXHJcbiAgICAgIC8vIHNwaWFubyBpIHZhbG9yaSBkaSByaXNwb3N0YVxyXG4gICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdID0gbmV3IEFycmF5PER5bkF0dGFjaG1lbnQ+KCk7XHJcbiAgICAgIFxyXG4gICAgICBpZiAoIXRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGUpe1xyXG4gICAgICAgIC8vIHNlIG5vbiDDqCBtdWx0aXNjZWx0YVxyXG4gICAgICAgIGlmKGV2ZW50KXtcclxuICAgICAgICAgIC8vIHNlIGMnw6ggdW4gdmFsb3JlIGhvIHNlbGV6aW9uYXRvIHVuJ2ltbWFnaW5lLCBsYSByZWN1cGVybyBlIGxhIGFzc2VnbmEgYWwgdmFsb3JlIGRlbGxhIHJpc3Bvc3RhXHJcbiAgICAgICAgICB2YXIgZHluQXR0YWNobWVudDogRHluQXR0YWNobWVudCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5maWVsZC5BdHRhY2htZW50TGlzdC5maW5kKHggPT4geC5JRCA9PSBldmVudCkpKTtcclxuICAgICAgICAgIGR5bkF0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjQgPSBudWxsO1xyXG4gICAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IGR5bkF0dGFjaG1lbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBzZSDDqCB1bmEgbXVsdGlzY2VsdGFcclxuICAgICAgICAvLyBwZXIgb2duaSBlbGVtZW50byBzZWxlemlvbmF0byBsbyBhZ2dpdW5nbyBhbGxhIGxpc3RhIGRlaSB2YWxvcmkgZGkgcmlzcG9zdGFcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybWVkUmVjb3JkPy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgICB2YXIgZHluQXR0YWNobWVudDogRHluQXR0YWNobWVudCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5maWVsZC5BdHRhY2htZW50TGlzdC5maW5kKHggPT4geC5JRCA9PSBlbGVtZW50KSkpO1xyXG4gICAgICAgICAgZHluQXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NCA9IG51bGw7XHJcbiAgICAgICAgICB0aGlzLnJlY29yZFt0aGlzLmZpZWxkLk5hbWVdLnB1c2goZHluQXR0YWNobWVudCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMucmVjb3JkQ2hhbmdlLmVtaXQodGhpcy5yZWNvcmQpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxtYXQtZm9ybS1maWVsZCBbZm9ybUdyb3VwXT1cImZpZWxkLkZvcm1Gb3JtR3JvdXBcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxyXG4gIDxtYXQtbGFiZWwgY2xhc3M9XCJwdC0xXCIgW25nU3R5bGVdPVwiTGFiZWxzdHlsZU9ialwiPnt7ZmllbGQuRGVzY3JpcHRpb259fTwvbWF0LWxhYmVsPlxyXG5cclxuICA8IS0tIE1hdC1TZWxlY3QgU0lOR09MQSAtLT5cclxuICA8bWF0LXNlbGVjdCAqbmdJZj1cIiFmaWVsZC5Jc011bHRpQ2hvaWNoZVwiIGNsYXNzPVwiaW1hZ2VGaWVsZFNlbGVjdG9ySW1hZ2VzXCIgW2Zvcm1Db250cm9sTmFtZV09XCJmaWVsZC5OYW1lXCJcclxuICBbcmVxdWlyZWRdPVwiZmllbGQuUmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cInRyYW5zZm9ybWVkUmVjb3JkXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25SZWNvcmRWYWx1ZUNoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBmaWVsZC5BdHRhY2htZW50TGlzdFwiIFt2YWx1ZV09XCJhdHRhY2htZW50LklEXCI+XHJcbiAgICAgIDxpbWcgc3JjPSdkYXRhOmltYWdlL3t7VG9Mb3dlckNhc2UoYXR0YWNobWVudC5GaWxlRXh0ZW5zaW9uKX19O2Jhc2U2NCx7e2F0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjR9fScgW2hlaWdodF09XCJhdHRhY2htZW50LlJlc2l6ZWRJbWFnZUhlaWdodFB4ICE9IG51bGwgPyBhdHRhY2htZW50LlJlc2l6ZWRJbWFnZUhlaWdodFB4IDogMTI4XCI+IFxyXG4gICAgICA8c3Bhbj57eyBhdHRhY2htZW50LkJ1dHRvbktleSB9fTwvc3Bhbj5cclxuICAgIDwvbWF0LW9wdGlvbj5cclxuICA8L21hdC1zZWxlY3Q+XHJcblxyXG4gIDwhLS0gTWF0LVNlbGVjdCBNVUxUSVBMQSAtLT5cclxuICA8bWF0LXNlbGVjdCAqbmdJZj1cImZpZWxkLklzTXVsdGlDaG9pY2hlXCIgY2xhc3M9XCJpbWFnZUZpZWxkU2VsZWN0b3JJbWFnZXNcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLk5hbWVcIlxyXG4gIFtyZXF1aXJlZF09XCJmaWVsZC5SZXF1aXJlZFwiIFsobmdNb2RlbCldPVwidHJhbnNmb3JtZWRSZWNvcmRcIiAobmdNb2RlbENoYW5nZSk9XCJvblJlY29yZFZhbHVlQ2hhbmdlKCRldmVudClcIiBtdWx0aXBsZT5cclxuICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGZpZWxkLkF0dGFjaG1lbnRMaXN0XCIgW3ZhbHVlXT1cImF0dGFjaG1lbnQuSURcIj5cclxuICAgICAgPGltZyBzcmM9J2RhdGE6aW1hZ2Uve3tUb0xvd2VyQ2FzZShhdHRhY2htZW50LkZpbGVFeHRlbnNpb24pfX07YmFzZTY0LHt7YXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NH19JyBbaGVpZ2h0XT1cImF0dGFjaG1lbnQuUmVzaXplZEltYWdlSGVpZ2h0UHggIT0gbnVsbCA/IGF0dGFjaG1lbnQuUmVzaXplZEltYWdlSGVpZ2h0UHggOiAxMjhcIj4gXHJcbiAgICAgIDxzcGFuPnt7IGF0dGFjaG1lbnQuQnV0dG9uS2V5IH19PC9zcGFuPlxyXG4gICAgPC9tYXQtb3B0aW9uPlxyXG4gIDwvbWF0LXNlbGVjdD5cclxuXHJcbjwvbWF0LWZvcm0tZmllbGQ+Il19
|
|
252
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtZmllbGQtc2VsZWN0b3ItdGVtcGxhdGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXFwLWR5bmFtaWMtbW9kdWxlL3NyYy9saWIvY29tcG9uZW50cy9wcml2YXRlL2ZpZWxkLXRlbXBsYXRlcy9pbWFnZS1maWVsZC1zZWxlY3Rvci10ZW1wbGF0ZS9pbWFnZS1maWVsZC1zZWxlY3Rvci10ZW1wbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcXAtZHluYW1pYy1tb2R1bGUvc3JjL2xpYi9jb21wb25lbnRzL3ByaXZhdGUvZmllbGQtdGVtcGxhdGVzL2ltYWdlLWZpZWxkLXNlbGVjdG9yLXRlbXBsYXRlL2ltYWdlLWZpZWxkLXNlbGVjdG9yLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBZ0MsTUFBTSxFQUE0QixNQUFNLGVBQWUsQ0FBQztBQUcvSCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNuRixPQUFPLEVBQWlCLHlCQUF5QixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7O0FBRXBFLHVFQUF1RTtBQUN2RSxNQUFNLGlCQUFpQixHQUE4QjtJQUNuRCxTQUFTLEVBQVMsaUJBQWlCO0lBQ25DLGdCQUFnQixFQUFFLDhCQUE4QjtJQUNoRCxXQUFXLEVBQU8sc0JBQXNCO0NBQ3pDLENBQUM7QUFFRixNQUFNLE1BQU0sR0FBRyxDQUFDLFNBQVMsRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUMvRSxNQUFNLG9CQUFvQixHQUE4QixFQUFFLENB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Q0FBQztJQUVPLG1CQUFtQixDQUFDLEdBQVcsRUFBRSxJQUFZO1FBQ25ELE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLGNBQWMsSUFBSSxrREFBa0QsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNqRyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUN4QyxDQUFDOztpSUF0T1UsbUNBQW1DO3FIQUFuQyxtQ0FBbUMsaVNDdEJoRCxpcERBNEJBOzRGRE5hLG1DQUFtQztrQkFML0MsU0FBUzsrQkFDRSwrQkFBK0I7Z0dBTWhDLE1BQU07c0JBQWQsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFJlbmRlcmVyMiwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBSZWNvcmQgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvcmVjb3JkLm1vZGVsJztcclxuaW1wb3J0IHsgSW1hZ2VTZWxlY3RvckZpZWxkLCBJbWFnZVNlbGVjdG9yRmllbGRTdHlsZUNTUyB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9maWVsZHMvaW1hZ2VTZWxlY3RvckZpZWxkLm1vZGVsJztcclxuaW1wb3J0IHsgVXRpbGl0eUhlbHBlclNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi8uLi9zZXJ2aWNlcy91dGlsaXR5SGVscGVyLnNlcnZpY2VzJztcclxuaW1wb3J0IHsgRHluQXR0YWNobWVudCwgRHluQXR0YWNobWVudFNlbGVjdE9iamVjdCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9keW5BdHRhY2htZW50JztcclxuaW1wb3J0IHsgR2xvYmFsU2VydmljZSB9IGZyb20gJy4uLy4uLy4uLy4uL3NlcnZpY2VzL2dsb2JhbC5zZXJ2aWNlJztcclxuXHJcbi8vIEVsZW1lbnRpIHNjb3BlZCBkYSAjZmllbGRVaWQgKG1hdC1mb3JtLWZpZWxkIERPTSBpbnRlcm5vIGFsIHdyYXBwZXIpXHJcbmNvbnN0IEVMRU1FTlRfU0VMRUNUT1JTOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xyXG4gIENvbnRhaW5lcjogICAgICAgICcgbWF0LWZvcm0tZmllbGQnLFxyXG4gIENhc2VsbGFTZWxlemlvbmU6ICcgLm1hdC1tZGMtdGV4dC1maWVsZC13cmFwcGVyJyxcclxuICBEZXNjcml6aW9uZTogICAgICAnIC5tZGMtZmxvYXRpbmctbGFiZWwnLFxyXG59O1xyXG5cclxuY29uc3QgU1RBVEVTID0gWydOb3JtYWxlJywgJ01vdXNlb3ZlcicsICdTZWxlemlvbmF0bycsICdOb3RWYWxpZCcsICdSZWFkb25seSddO1xyXG5jb25zdCBERUZBVUxUX0ZJRUxEX1NUWUxFUzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpbWFnZS1maWVsZC1zZWxlY3Rvci10ZW1wbGF0ZScsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2ltYWdlLWZpZWxkLXNlbGVjdG9yLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9pbWFnZS1maWVsZC1zZWxlY3Rvci10ZW1wbGF0ZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbWFnZUZpZWxkU2VsZWN0b3JUZW1wbGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG5cclxuICBASW5wdXQoKSByZWNvcmQ6IFJlY29yZDtcclxuICBASW5wdXQoKSBmb3JtdWxhT2JqZWN0OiBhbnkgPSB7fTtcclxuICBASW5wdXQoKSBmaWVsZDogSW1hZ2VTZWxlY3RvckZpZWxkO1xyXG4gIEBJbnB1dCgpIGluQ29uZmlnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc3R5bGVWZXJzaW9uOiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgpIGZvcmNlU3RhdGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gIEBPdXRwdXQoKSByZWNvcmRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxSZWNvcmQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZWNvcmQ+KCk7XHJcblxyXG4gIEZpZWxkc3R5bGVPYmo6IGFueTtcclxuICBMYWJlbHN0eWxlT2JqOiBhbnk7XHJcbiAgdHJhbnNmb3JtZWRSZWNvcmQ6IGFueTtcclxuXHJcbiAgZmllbGRVaWQ6IHN0cmluZztcclxuICBwcml2YXRlIHN0eWxlRWw6IEhUTUxTdHlsZUVsZW1lbnQgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmZpZWxkVWlkID0gJ2lzZi0nICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgMTApO1xyXG4gICAgdGhpcy5pbmplY3RTdHlsZXMoKTtcclxuXHJcbiAgICBHbG9iYWxTZXJ2aWNlLmRlYnVnTG9nKCdJbWFnZUZpZWxkU2VsZWN0b3JUZW1wbGF0ZUNvbXBvbmVudCBuZ09uSW5pdCAtIHJlY29yZCcsIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0pO1xyXG4gICAgR2xvYmFsU2VydmljZS5kZWJ1Z0xvZygnSW1hZ2VGaWVsZFNlbGVjdG9yVGVtcGxhdGVDb21wb25lbnQgbmdPbkluaXQgLSBmaWVsZCcsIHRoaXMuZmllbGQpO1xyXG5cclxuICAgIHRoaXMuaW5pdFN0eWxlcygpO1xyXG4gICAgdGhpcy5pbml0aWFsaXplQXR0YWNobWVudHMoKTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgIGlmIChjaGFuZ2VzWydzdHlsZVZlcnNpb24nXSAmJiAhY2hhbmdlc1snc3R5bGVWZXJzaW9uJ10uZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5pbmplY3RTdHlsZXMoKTtcclxuICAgICAgdGhpcy51cGRhdGVTdGF0ZUNsYXNzZXMoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydmb3JjZVN0YXRlJ10pIHtcclxuICAgICAgdGhpcy51cGRhdGVTdGF0ZUNsYXNzZXMoKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydyZWNvcmQnXSAmJiAhY2hhbmdlc1sncmVjb3JkJ10uZmlyc3RDaGFuZ2UgJiZcclxuICAgICAgICBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5jdXJyZW50VmFsdWUpICE9PSBKU09OLnN0cmluZ2lmeShjaGFuZ2VzWydyZWNvcmQnXS5wcmV2aW91c1ZhbHVlKSkge1xyXG4gICAgICB0aGlzLnJlY29yZCA9IGNoYW5nZXNbJ3JlY29yZCddLmN1cnJlbnRWYWx1ZTtcclxuICAgICAgdGhpcy51cGRhdGVGaWVsZCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zdHlsZUVsPy5wYXJlbnROb2RlKSB7XHJcbiAgICAgIHRoaXMuc3R5bGVFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuc3R5bGVFbCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0U3R5bGVzKCkge1xyXG4gICAgaWYgKHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSBudWxsIHx8IHRoaXMuZmllbGQuRmllbGRzdHlsZUNTUyAhPSB1bmRlZmluZWQpXHJcbiAgICAgIHRoaXMuRmllbGRzdHlsZU9iaiA9IFV0aWxpdHlIZWxwZXJTZXJ2aWNlLmluaXRTdHlsZXModGhpcy5maWVsZC5GaWVsZHN0eWxlQ1NTKTtcclxuICAgIGlmICh0aGlzLmZpZWxkLkxhYmVsc3R5bGVDU1MgIT0gbnVsbCB8fCB0aGlzLmZpZWxkLkxhYmVsc3R5bGVDU1MgIT0gdW5kZWZpbmVkKVxyXG4gICAgICB0aGlzLkxhYmVsc3R5bGVPYmogPSBVdGlsaXR5SGVscGVyU2VydmljZS5pbml0U3R5bGVzKHRoaXMuZmllbGQuTGFiZWxzdHlsZUNTUyk7XHJcbiAgfVxyXG5cclxuICBUb0xvd2VyQ2FzZShlbDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gZWwudG9Mb3dlckNhc2UoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUZpZWxkKCkgeyB9XHJcblxyXG4gIGluaXRpYWxpemVBdHRhY2htZW50cygpIHtcclxuICAgIGlmICghdGhpcy5maWVsZC5BdHRhY2htZW50TGlzdCB8fCB0aGlzLmZpZWxkLkF0dGFjaG1lbnRMaXN0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuZmllbGQuQXR0YWNobWVudExpc3QuZm9yRWFjaCgoYXR0YWNobWVudCkgPT4ge1xyXG4gICAgICBhdHRhY2htZW50Lm9iamVjdFRvU2VsZWN0ID0gbmV3IER5bkF0dGFjaG1lbnRTZWxlY3RPYmplY3QoKTtcclxuICAgICAgYXR0YWNobWVudC5vYmplY3RUb1NlbGVjdC5JRCA9IGF0dGFjaG1lbnQuSUQ7XHJcbiAgICAgIGF0dGFjaG1lbnQub2JqZWN0VG9TZWxlY3QuQnV0dG9uS2V5ID0gYXR0YWNobWVudC5CdXR0b25LZXk7XHJcbiAgICAgIGF0dGFjaG1lbnQub2JqZWN0VG9TZWxlY3QuQnV0dG9uVmFsdWUgPSBhdHRhY2htZW50LkJ1dHRvblZhbHVlO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gIT0gbnVsbCkge1xyXG4gICAgICBpZiAoIXRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGUpIHtcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybWVkUmVjb3JkID0gdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXS5JRDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnRyYW5zZm9ybWVkUmVjb3JkID0gW107XHJcbiAgICAgICAgKHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gYXMgQXJyYXk8RHluQXR0YWNobWVudD4pLmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICAgIHRoaXMudHJhbnNmb3JtZWRSZWNvcmQucHVzaChOdW1iZXIoZWxlbWVudC5JRCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvblJlY29yZFZhbHVlQ2hhbmdlKGV2ZW50OiBudW1iZXIpIHtcclxuICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0gPSBuZXcgQXJyYXk8RHluQXR0YWNobWVudD4oKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuZmllbGQuSXNNdWx0aUNob2ljaGUpIHtcclxuICAgICAgaWYgKGV2ZW50KSB7XHJcbiAgICAgICAgdmFyIGR5bkF0dGFjaG1lbnQ6IER5bkF0dGFjaG1lbnQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZmllbGQuQXR0YWNobWVudExpc3QuZmluZCh4ID0+IHguSUQgPT0gZXZlbnQpKSk7XHJcbiAgICAgICAgZHluQXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRbdGhpcy5maWVsZC5OYW1lXSA9IGR5bkF0dGFjaG1lbnQ7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudHJhbnNmb3JtZWRSZWNvcmQ/LmZvckVhY2goKGVsZW1lbnQpID0+IHtcclxuICAgICAgICB2YXIgZHluQXR0YWNobWVudDogRHluQXR0YWNobWVudCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5maWVsZC5BdHRhY2htZW50TGlzdC5maW5kKHggPT4geC5JRCA9PSBlbGVtZW50KSkpO1xyXG4gICAgICAgIGR5bkF0dGFjaG1lbnQuRmlsZURhdGFCYXNlNjQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucmVjb3JkW3RoaXMuZmllbGQuTmFtZV0ucHVzaChkeW5BdHRhY2htZW50KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZWNvcmRDaGFuZ2UuZW1pdCh0aGlzLnJlY29yZCk7XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIDilIAgQ1NTIGluamVjdGlvbiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgcHJpdmF0ZSBpbmplY3RTdHlsZXMoKTogdm9pZCB7XHJcbiAgICBpZiAoIXRoaXMuZmllbGRVaWQpIHJldHVybjtcclxuICAgIGNvbnN0IGNzcyA9ICh0aGlzLmZpZWxkIGFzIEltYWdlU2VsZWN0b3JGaWVsZCk/LkltYWdlU2VsZWN0b3JGaWVsZFN0eWxlQ1NTID8/ICh7fSBhcyBJbWFnZVNlbGVjdG9yRmllbGRTdHlsZUNTUyk7XHJcbiAgICBjb25zdCBydWxlcyA9IHRoaXMuYnVpbGRDc3NSdWxlcyh0aGlzLmZpZWxkVWlkLCBjc3MpO1xyXG4gICAgaWYgKCF0aGlzLnN0eWxlRWwpIHtcclxuICAgICAgdGhpcy5zdHlsZUVsID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzdHlsZScpIGFzIEhUTUxTdHlsZUVsZW1lbnQ7XHJcbiAgICAgIHRoaXMuc3R5bGVFbC5pZCA9ICdzdHlsZS0nICsgdGhpcy5maWVsZFVpZDtcclxuICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5oZWFkLCB0aGlzLnN0eWxlRWwpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zdHlsZUVsLnRleHRDb250ZW50ID0gcnVsZXM7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGJ1aWxkQ3NzUnVsZXModWlkOiBzdHJpbmcsIGNzczogSW1hZ2VTZWxlY3RvckZpZWxkU3R5bGVDU1MpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgLy8gRWxlbWVudGkgc2NvcGVkIGRhICN1aWQgKGludGVybmkgYWwgbWF0LWZvcm0tZmllbGQpXHJcbiAgICBmb3IgKGNvbnN0IGVsIG9mIE9iamVjdC5rZXlzKEVMRU1FTlRfU0VMRUNUT1JTKSkge1xyXG4gICAgICBjb25zdCBzID0gRUxFTUVOVF9TRUxFQ1RPUlNbZWxdO1xyXG4gICAgICBmb3IgKGNvbnN0IHN0YXRlIG9mIFNUQVRFUykge1xyXG4gICAgICAgIGNvbnN0IGtleSA9IGVsICsgc3RhdGU7XHJcbiAgICAgICAgY29uc3QgZGVmYXVsdFZhbDogc3RyaW5nIHwgdW5kZWZpbmVkID0gREVGQVVMVF9GSUVMRF9TVFlMRVNba2V5XTtcclxuICAgICAgICBjb25zdCB1c2VyVmFsOiBzdHJpbmcgfCB1bmRlZmluZWQgPSAoY3NzIGFzIGFueSlba2V5XTtcclxuICAgICAgICBpZiAoIWRlZmF1bHRWYWw/LnRyaW0oKSAmJiAhdXNlclZhbD8udHJpbSgpKSBjb250aW51ZTtcclxuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuZ2V0U2VsZWN0b3IodWlkLCBzdGF0ZSwgZWwsIHMpO1xyXG4gICAgICAgIGlmICghc2VsZWN0b3IpIGNvbnRpbnVlO1xyXG4gICAgICAgIGlmIChkZWZhdWx0VmFsPy50cmltKCkpIGxpbmVzLnB1c2goYCR7c2VsZWN0b3J9IHsgJHtkZWZhdWx0VmFsfSB9YCk7XHJcbiAgICAgICAgaWYgKHVzZXJWYWw/LnRyaW0oKSkge1xyXG4gICAgICAgICAgbGluZXMucHVzaChgJHtzZWxlY3Rvcn0geyAke3VzZXJWYWx9IH1gKTtcclxuICAgICAgICAgIC8vIENhc2VsbGFTZWxlemlvbmU6IGluaWV0dGEgYW5jaGUgc3VsIHRlc3RvIHNlbGV6aW9uYXRvIHBlciBjb2xvci9mb250XHJcbiAgICAgICAgICBpZiAoZWwgPT09ICdDYXNlbGxhU2VsZXppb25lJykge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXh0U2VsID0gdGhpcy5nZXRTZWxlY3Rvcih1aWQsIHN0YXRlLCBlbCwgJyAubWF0LW1kYy1zZWxlY3QtdmFsdWUnKTtcclxuICAgICAgICAgICAgaWYgKHRleHRTZWwpIGxpbmVzLnB1c2goYCR7dGV4dFNlbH0geyAke3VzZXJWYWx9IH1gKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBTZWxlemlvbmk6IHNjb3BlZCBkYWwgcGFuZWxDbGFzcyAob3ZlcmxheSBmdW9yaSBkYSAjdWlkKVxyXG4gICAgLy8gTm9ybWFsZS9Nb3VzZW92ZXIvU2VsZXppb25hdG86IHBlci1pdGVtIChhcHBsaWNhdGkgc3VsbGEgc2luZ29sYSBvcHppb25lKVxyXG4gICAgLy8gTm90VmFsaWQvUmVhZG9ubHk6IG5vbiBhcHBsaWNhYmlsaSBhbGwnb3ZlcmxheSwgaWdub3JhdGlcclxuICAgIGNvbnN0IHNlbGV6aW9uaU92ZXJsYXlTdGF0ZXMgPSBbJ05vcm1hbGUnLCAnTW91c2VvdmVyJywgJ1NlbGV6aW9uYXRvJ107XHJcbiAgICBmb3IgKGNvbnN0IHN0YXRlIG9mIHNlbGV6aW9uaU92ZXJsYXlTdGF0ZXMpIHtcclxuICAgICAgY29uc3Qga2V5ID0gJ1NlbGV6aW9uaScgKyBzdGF0ZTtcclxuICAgICAgY29uc3QgdXNlclZhbDogc3RyaW5nIHwgdW5kZWZpbmVkID0gKGNzcyBhcyBhbnkpW2tleV07XHJcbiAgICAgIGlmICghdXNlclZhbD8udHJpbSgpKSBjb250aW51ZTtcclxuICAgICAgY29uc3QgcGFuZWxTZWwgPSB0aGlzLmdldFNlbGV6aW9uaVNlbGVjdG9yKHVpZCwgc3RhdGUpO1xyXG4gICAgICBpZiAoIXBhbmVsU2VsKSBjb250aW51ZTtcclxuICAgICAgY29uc3QgYmFzZU9wdGlvblNlbCA9IHRoaXMuZ2V0U2VsZXppb25pQmFzZVNlbGVjdG9yKHVpZCwgc3RhdGUpO1xyXG4gICAgICBjb25zdCB2YWxXaXRoSW1wb3J0YW50ID0gdGhpcy5mb3JjZUltcG9ydGFudCh1c2VyVmFsKTtcclxuICAgICAgbGluZXMucHVzaChgJHtwYW5lbFNlbH0geyAke3ZhbFdpdGhJbXBvcnRhbnR9IH1gKTtcclxuICAgICAgLy8gY29sb3Igc3UgU2VsZXppb25pIOKGkiBjYW1iaWEgdGVzdG8gb3B6aW9uZSBFIGNoZWNrYm94IHBzZXVkby1jaGVja2JveFxyXG4gICAgICBjb25zdCBjb2xvclZhbCA9IHRoaXMuZXh0cmFjdENzc1Byb3BWYWx1ZSh1c2VyVmFsLCAnY29sb3InKTtcclxuICAgICAgaWYgKGNvbG9yVmFsKSB7XHJcbiAgICAgICAgbGluZXMucHVzaChgJHtiYXNlT3B0aW9uU2VsfSAubWRjLWxpc3QtaXRlbV9fcHJpbWFyeS10ZXh0IHsgY29sb3I6ICR7Y29sb3JWYWx9ICFpbXBvcnRhbnQ7IH1gKTtcclxuICAgICAgICBsaW5lcy5wdXNoKGAke2Jhc2VPcHRpb25TZWx9IC5tYXQtcHNldWRvLWNoZWNrYm94IHsgYm9yZGVyLWNvbG9yOiAke2NvbG9yVmFsfSAhaW1wb3J0YW50OyB9YCk7XHJcbiAgICAgICAgbGluZXMucHVzaChgJHtiYXNlT3B0aW9uU2VsfSAubWF0LXBzZXVkby1jaGVja2JveC1jaGVja2VkIHsgYmFja2dyb3VuZC1jb2xvcjogJHtjb2xvclZhbH0gIWltcG9ydGFudDsgfWApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxpbmVzLmpvaW4oJ1xcbicpO1xyXG4gIH1cclxuXHJcbiAgLy8gU2VsZXR0b3JlIHBlciBlbGVtZW50aSBpbnRlcm5pIGFsIG1hdC1mb3JtLWZpZWxkICgjdWlkIHNjb3BpbmcpXHJcbiAgcHJpdmF0ZSBnZXRTZWxlY3Rvcih1aWQ6IHN0cmluZywgc3RhdGU6IHN0cmluZywgZWw6IHN0cmluZywgczogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgIGNhc2UgJ05vcm1hbGUnOiAgICByZXR1cm4gYCMke3VpZH0ke3N9YDtcclxuICAgICAgY2FzZSAnTW91c2VvdmVyJzogIHJldHVybiBgIyR7dWlkfTpob3ZlciR7c30sICMke3VpZH0uZXFwLXN0YXRlLWhvdmVyJHtzfWA7XHJcbiAgICAgIGNhc2UgJ1NlbGV6aW9uYXRvJzogcmV0dXJuIGAjJHt1aWR9LmVxcC1zdGF0ZS1zZWxlY3RlZCR7c31gO1xyXG4gICAgICBjYXNlICdOb3RWYWxpZCc6ICAgcmV0dXJuIGAjJHt1aWR9LmVxcC1pbnZhbGlkJHtzfWA7XHJcbiAgICAgIGNhc2UgJ1JlYWRvbmx5JzogICByZXR1cm4gYCMke3VpZH0uZXFwLXJlYWRvbmx5JHtzfWA7XHJcbiAgICAgIGRlZmF1bHQ6ICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFNlbGV0dG9yZSBwZXIgbGUgb3B6aW9uaSBuZWwgcGFuZWwgb3ZlcmxheSAoc2NvcGVkIGRhbCBwYW5lbENsYXNzID0gdWlkKVxyXG4gIC8vIHBhbmVsQ2xhc3MgdmEgc3UgLm1hdC1tZGMtc2VsZWN0LXBhbmVsICh2aWEgW25nQ2xhc3NdKTsgbWF0LW9wdGlvbiBzb25vIGZpZ2xpIGRpcmV0dGlcclxuICBwcml2YXRlIGdldFNlbGV6aW9uaVNlbGVjdG9yKHVpZDogc3RyaW5nLCBzdGF0ZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgIGNhc2UgJ05vcm1hbGUnOiAgICAgcmV0dXJuIGAuJHt1aWR9IG1hdC1vcHRpb24sIC4ke3VpZH0gLm1hdC1tZGMtb3B0aW9uYDtcclxuICAgICAgY2FzZSAnTW91c2VvdmVyJzogICByZXR1cm4gYC4ke3VpZH0gbWF0LW9wdGlvbjpob3ZlciwgLiR7dWlkfSAubWF0LW1kYy1vcHRpb246aG92ZXJgO1xyXG4gICAgICBjYXNlICdTZWxlemlvbmF0byc6IHJldHVybiBgLiR7dWlkfSBtYXQtb3B0aW9uLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkLCAuJHt1aWR9IC5tYXQtbWRjLW9wdGlvbi5tZGMtbGlzdC1pdGVtLS1zZWxlY3RlZGA7XHJcbiAgICAgIGRlZmF1bHQ6ICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBTZWxldHRvcmUgYmFzZSBzaW5nb2xvIHBlciBpIHN1Yi1lbGVtZW50IHJ1bGVzIChlcy4gLm1kYy1saXN0LWl0ZW1fX3ByaW1hcnktdGV4dClcclxuICBwcml2YXRlIGdldFNlbGV6aW9uaUJhc2VTZWxlY3Rvcih1aWQ6IHN0cmluZywgc3RhdGU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgIGNhc2UgJ01vdXNlb3Zlcic6ICAgcmV0dXJuIGAuJHt1aWR9IG1hdC1vcHRpb246aG92ZXJgO1xyXG4gICAgICBjYXNlICdTZWxlemlvbmF0byc6IHJldHVybiBgLiR7dWlkfSBtYXQtb3B0aW9uLm1kYy1saXN0LWl0ZW0tLXNlbGVjdGVkYDtcclxuICAgICAgZGVmYXVsdDogICAgICAgICAgICByZXR1cm4gYC4ke3VpZH0gbWF0LW9wdGlvbmA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVN0YXRlQ2xhc3NlcygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5maWVsZFVpZCkgcmV0dXJuO1xyXG4gICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZmllbGRVaWQpO1xyXG4gICAgaWYgKCF3cmFwcGVyKSByZXR1cm47XHJcbiAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtc3RhdGUtaG92ZXInLCAgICB0aGlzLmZvcmNlU3RhdGUgPT09ICdNb3VzZW92ZXInKTtcclxuICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1zdGF0ZS1zZWxlY3RlZCcsIHRoaXMuZm9yY2VTdGF0ZSA9PT0gJ1NlbGV6aW9uYXRvJyk7XHJcbiAgICB0aGlzLnRvZ2dsZUNsYXNzKHdyYXBwZXIsICdlcXAtaW52YWxpZCcsICAgICAgICAgdGhpcy5mb3JjZVN0YXRlID09PSAnTm90VmFsaWQnKTtcclxuICAgIHRoaXMudG9nZ2xlQ2xhc3Mod3JhcHBlciwgJ2VxcC1yZWFkb25seScsICAgICAgICB0aGlzLmZvcmNlU3RhdGUgPT09ICdSZWFkb25seScpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0b2dnbGVDbGFzcyhlbDogRWxlbWVudCwgY2xzOiBzdHJpbmcsIGNvbmRpdGlvbjogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKGNvbmRpdGlvbikgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhlbCwgY2xzKTtcclxuICAgIGVsc2UgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyhlbCwgY2xzKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZm9yY2VJbXBvcnRhbnQoY3NzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGNzcy5zcGxpdCgnOycpLm1hcChwYXJ0ID0+IHtcclxuICAgICAgY29uc3QgdHJpbW1lZCA9IHBhcnQudHJpbSgpO1xyXG4gICAgICBpZiAoIXRyaW1tZWQpIHJldHVybiBwYXJ0O1xyXG4gICAgICBpZiAodHJpbW1lZC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCchaW1wb3J0YW50JykpIHJldHVybiBwYXJ0O1xyXG4gICAgICByZXR1cm4gcGFydC5yZXBsYWNlKC9cXHMrJC8sICcnKSArICcgIWltcG9ydGFudCc7XHJcbiAgICB9KS5qb2luKCc7Jyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4dHJhY3RDc3NQcm9wVmFsdWUoY3NzOiBzdHJpbmcsIHByb3A6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGAoPzpefDspXFxcXHMqJHtwcm9wfVxcXFxzKjpcXFxccyooW147IV0rPykoPzpcXFxccyohaW1wb3J0YW50KT9cXFxccyooPzo7fCQpYCwgJ2knKTtcclxuICAgIGNvbnN0IG1hdGNoID0gY3NzLm1hdGNoKHJlKTtcclxuICAgIHJldHVybiBtYXRjaCA/IG1hdGNoWzFdLnRyaW0oKSA6IG51bGw7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgaWQ9XCJ7e2ZpZWxkVWlkfX1cIj5cclxuXHJcbiAgPG1hdC1mb3JtLWZpZWxkIFtmb3JtR3JvdXBdPVwiZmllbGQuRm9ybUZvcm1Hcm91cFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XHJcbiAgICA8bWF0LWxhYmVsIGNsYXNzPVwicHQtMVwiIFtuZ1N0eWxlXT1cIkxhYmVsc3R5bGVPYmpcIj57e2ZpZWxkLkRlc2NyaXB0aW9ufX08L21hdC1sYWJlbD5cclxuXHJcbiAgICA8IS0tIE1hdC1TZWxlY3QgU0lOR09MQSAtLT5cclxuICAgIDxtYXQtc2VsZWN0ICpuZ0lmPVwiIWZpZWxkLklzTXVsdGlDaG9pY2hlXCIgY2xhc3M9XCJpbWFnZUZpZWxkU2VsZWN0b3JJbWFnZXNcIiBbZm9ybUNvbnRyb2xOYW1lXT1cImZpZWxkLk5hbWVcIlxyXG4gICAgW3JlcXVpcmVkXT1cImZpZWxkLlJlcXVpcmVkXCIgWyhuZ01vZGVsKV09XCJ0cmFuc2Zvcm1lZFJlY29yZFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uUmVjb3JkVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICBbcGFuZWxDbGFzc109XCJmaWVsZFVpZFwiPlxyXG4gICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBmaWVsZC5BdHRhY2htZW50TGlzdFwiIFt2YWx1ZV09XCJhdHRhY2htZW50LklEXCI+XHJcbiAgICAgICAgPGltZyBzcmM9J2RhdGE6aW1hZ2Uve3tUb0xvd2VyQ2FzZShhdHRhY2htZW50LkZpbGVFeHRlbnNpb24pfX07YmFzZTY0LHt7YXR0YWNobWVudC5GaWxlRGF0YUJhc2U2NH19JyBbaGVpZ2h0XT1cImF0dGFjaG1lbnQuUmVzaXplZEltYWdlSGVpZ2h0UHggIT0gbnVsbCA/IGF0dGFjaG1lbnQuUmVzaXplZEltYWdlSGVpZ2h0UHggOiAxMjhcIj5cclxuICAgICAgICA8c3Bhbj57eyBhdHRhY2htZW50LkJ1dHRvbktleSB9fTwvc3Bhbj5cclxuICAgICAgPC9tYXQtb3B0aW9uPlxyXG4gICAgPC9tYXQtc2VsZWN0PlxyXG5cclxuICAgIDwhLS0gTWF0LVNlbGVjdCBNVUxUSVBMQSAtLT5cclxuICAgIDxtYXQtc2VsZWN0ICpuZ0lmPVwiZmllbGQuSXNNdWx0aUNob2ljaGVcIiBjbGFzcz1cImltYWdlRmllbGRTZWxlY3RvckltYWdlc1wiIFtmb3JtQ29udHJvbE5hbWVdPVwiZmllbGQuTmFtZVwiXHJcbiAgICBbcmVxdWlyZWRdPVwiZmllbGQuUmVxdWlyZWRcIiBbKG5nTW9kZWwpXT1cInRyYW5zZm9ybWVkUmVjb3JkXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25SZWNvcmRWYWx1ZUNoYW5nZSgkZXZlbnQpXCIgbXVsdGlwbGVcclxuICAgIFtwYW5lbENsYXNzXT1cImZpZWxkVWlkXCI+XHJcbiAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGZpZWxkLkF0dGFjaG1lbnRMaXN0XCIgW3ZhbHVlXT1cImF0dGFjaG1lbnQuSURcIj5cclxuICAgICAgICA8aW1nIHNyYz0nZGF0YTppbWFnZS97e1RvTG93ZXJDYXNlKGF0dGFjaG1lbnQuRmlsZUV4dGVuc2lvbil9fTtiYXNlNjQse3thdHRhY2htZW50LkZpbGVEYXRhQmFzZTY0fX0nIFtoZWlnaHRdPVwiYXR0YWNobWVudC5SZXNpemVkSW1hZ2VIZWlnaHRQeCAhPSBudWxsID8gYXR0YWNobWVudC5SZXNpemVkSW1hZ2VIZWlnaHRQeCA6IDEyOFwiPlxyXG4gICAgICAgIDxzcGFuPnt7IGF0dGFjaG1lbnQuQnV0dG9uS2V5IH19PC9zcGFuPlxyXG4gICAgICA8L21hdC1vcHRpb24+XHJcbiAgICA8L21hdC1zZWxlY3Q+XHJcblxyXG4gIDwvbWF0LWZvcm0tZmllbGQ+XHJcblxyXG48L2Rpdj5cclxuIl19
|