tango-app-ui-analyse-trax 3.0.0-dev → 3.3.1-alpha.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/esm2022/lib/components/add-checklist/add-checklist.component.mjs +1389 -0
- package/esm2022/lib/components/checklist/checklist.component.mjs +235 -0
- package/esm2022/lib/components/checklist-configure/checklist-configure.component.mjs +1809 -0
- package/esm2022/lib/components/dashboard/dashboard.component.mjs +515 -0
- package/esm2022/lib/components/dashboard-info/dashboard-info.component.mjs +503 -0
- package/esm2022/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.mjs +169 -0
- package/esm2022/lib/components/flags/flags.component.mjs +188 -0
- package/esm2022/lib/components/flags/flags.interface.mjs +2 -0
- package/esm2022/lib/components/flags-info/flags-info.component.mjs +257 -0
- package/esm2022/lib/components/flags-info/flags-info.interface.mjs +2 -0
- package/esm2022/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.mjs +71 -0
- package/esm2022/lib/components/gallery/gallery.component.mjs +280 -0
- package/esm2022/lib/components/managechecklist/managechecklist.component.mjs +11 -0
- package/esm2022/lib/components/pagination/pagination.component.mjs +62 -0
- package/esm2022/lib/components/reactive-select/reactive-select.component.mjs +101 -0
- package/esm2022/lib/components/reports/reports.component.mjs +204 -0
- package/esm2022/lib/components/reports/reports.interface.mjs +2 -0
- package/esm2022/lib/components/tango-analyse-trax/tango-analyse-trax.component.mjs +27 -6
- package/esm2022/lib/components/trax-store/trax-store.component.mjs +144 -0
- package/esm2022/lib/components/traxpopup/traxpopup.component.mjs +64 -0
- package/esm2022/lib/services/trax.service.mjs +200 -0
- package/esm2022/lib/tango-analyse-trax-routing.module.mjs +62 -6
- package/esm2022/lib/tango-analyse-trax.module.mjs +82 -9
- package/fesm2022/tango-app-ui-analyse-trax.mjs +6211 -24
- package/fesm2022/tango-app-ui-analyse-trax.mjs.map +1 -1
- package/lib/components/add-checklist/add-checklist.component.d.ts +91 -0
- package/lib/components/checklist/checklist.component.d.ts +38 -0
- package/lib/components/checklist-configure/checklist-configure.component.d.ts +162 -0
- package/lib/components/dashboard/dashboard.component.d.ts +62 -0
- package/lib/components/dashboard-info/dashboard-info.component.d.ts +92 -0
- package/lib/components/dashboard-info/monthlyperformance-datepicker/monthlyperformance-datepicker.component.d.ts +39 -0
- package/lib/components/flags/flags.component.d.ts +40 -0
- package/lib/components/flags/flags.interface.d.ts +61 -0
- package/lib/components/flags-info/flags-info.component.d.ts +50 -0
- package/lib/components/flags-info/flags-info.interface.d.ts +207 -0
- package/lib/components/flags-info/unattended-pie-chart/unattended-pie-chart.component.d.ts +13 -0
- package/lib/components/gallery/gallery.component.d.ts +64 -0
- package/lib/components/managechecklist/managechecklist.component.d.ts +5 -0
- package/lib/components/pagination/pagination.component.d.ts +16 -0
- package/lib/components/reactive-select/reactive-select.component.d.ts +31 -0
- package/lib/components/reports/reports.component.d.ts +43 -0
- package/lib/components/reports/reports.interface.d.ts +44 -0
- package/lib/components/tango-analyse-trax/tango-analyse-trax.component.d.ts +10 -1
- package/lib/components/trax-store/trax-store.component.d.ts +43 -0
- package/lib/components/traxpopup/traxpopup.component.d.ts +22 -0
- package/lib/services/trax.service.d.ts +65 -0
- package/lib/tango-analyse-trax.module.d.ts +23 -3
- package/package.json +1 -1
|
@@ -0,0 +1,1389 @@
|
|
|
1
|
+
import { Component, ViewChild } from '@angular/core';
|
|
2
|
+
import { FormGroup, Validators, FormArray } from '@angular/forms';
|
|
3
|
+
import { moveItemInArray, transferArrayItem } from '@angular/cdk/drag-drop';
|
|
4
|
+
import { timer } from 'rxjs';
|
|
5
|
+
import { TraxpopupComponent } from '../traxpopup/traxpopup.component';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "tango-app-ui-global";
|
|
8
|
+
import * as i2 from "@angular/forms";
|
|
9
|
+
import * as i3 from "@ng-bootstrap/ng-bootstrap";
|
|
10
|
+
import * as i4 from "@angular/router";
|
|
11
|
+
import * as i5 from "tango-app-ui-shared";
|
|
12
|
+
import * as i6 from "../../services/trax.service";
|
|
13
|
+
import * as i7 from "@angular/common";
|
|
14
|
+
import * as i8 from "@angular/cdk/drag-drop";
|
|
15
|
+
export class AddChecklistComponent {
|
|
16
|
+
pageInfo;
|
|
17
|
+
fb;
|
|
18
|
+
changedetector;
|
|
19
|
+
dialog;
|
|
20
|
+
route;
|
|
21
|
+
toast;
|
|
22
|
+
router;
|
|
23
|
+
sopService;
|
|
24
|
+
formRef;
|
|
25
|
+
ChecklistForm;
|
|
26
|
+
show = 0;
|
|
27
|
+
sectionIndex = 0;
|
|
28
|
+
getobject;
|
|
29
|
+
editvalue;
|
|
30
|
+
isDisabled = true;
|
|
31
|
+
nosection = false;
|
|
32
|
+
showvalue;
|
|
33
|
+
refImgQIdx = 0;
|
|
34
|
+
checklistLoading = false;
|
|
35
|
+
popupCount = 0;
|
|
36
|
+
constructor(pageInfo, fb, changedetector, dialog, route, toast, router, sopService) {
|
|
37
|
+
this.pageInfo = pageInfo;
|
|
38
|
+
this.fb = fb;
|
|
39
|
+
this.changedetector = changedetector;
|
|
40
|
+
this.dialog = dialog;
|
|
41
|
+
this.route = route;
|
|
42
|
+
this.toast = toast;
|
|
43
|
+
this.router = router;
|
|
44
|
+
this.sopService = sopService;
|
|
45
|
+
this.route.queryParams.subscribe((params) => {
|
|
46
|
+
this.editvalue = params.checklistId;
|
|
47
|
+
if (params.checklistId) {
|
|
48
|
+
this.showvalue = 'edit';
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
this.showvalue = 'add';
|
|
52
|
+
}
|
|
53
|
+
if (this.showvalue == 'edit' || params.type) {
|
|
54
|
+
let obj = {};
|
|
55
|
+
if (params.checklistId) {
|
|
56
|
+
obj.checkListId = params.checklistId;
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
obj.type = params.type;
|
|
60
|
+
}
|
|
61
|
+
this.checklistLoading = true;
|
|
62
|
+
this.sopService.getconfig(obj)
|
|
63
|
+
.subscribe((res) => {
|
|
64
|
+
if (res) {
|
|
65
|
+
if (res.code == 200) {
|
|
66
|
+
this.getobject = res.data.checkListDetails;
|
|
67
|
+
this.formChecklistQuestions();
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
this.checklistLoading = false;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
this.checklistLoading = false;
|
|
75
|
+
}
|
|
76
|
+
}, (error) => {
|
|
77
|
+
this.checklistLoading = false;
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
this.initChecklist();
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
ngOnInit() {
|
|
86
|
+
this.initChecklist();
|
|
87
|
+
this.setPageData();
|
|
88
|
+
}
|
|
89
|
+
setPageData() {
|
|
90
|
+
this.pageInfo.setTitle("Trax");
|
|
91
|
+
this.pageInfo.setDescription("Automate or create checklists to improve operational efficiency");
|
|
92
|
+
this.pageInfo.setBreadcrumbs([
|
|
93
|
+
{ title: "Analyze", path: "/Analyze", isActive: false, isSeparator: false },
|
|
94
|
+
{ title: "Analyze", path: "/Analyze", isActive: false, isSeparator: true },
|
|
95
|
+
{ title: "Manage", path: "/manage", isActive: false, isSeparator: false },
|
|
96
|
+
{ title: "Manage", path: "/manage", isActive: false, isSeparator: true },
|
|
97
|
+
]);
|
|
98
|
+
}
|
|
99
|
+
updateInputValue(sectionIndex, sectionName) {
|
|
100
|
+
if (sectionName.trim() === '') {
|
|
101
|
+
this.getSectionFormControl(sectionIndex, 'name')?.setValue(`Section ${sectionIndex + 1}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
scrollToQuestion(sectionIndex, questionIndex) {
|
|
105
|
+
const questionId = `q-${sectionIndex}-${questionIndex}`;
|
|
106
|
+
setTimeout(() => {
|
|
107
|
+
const questionElement = this.formRef.nativeElement.querySelector(`#${questionId}`);
|
|
108
|
+
if (questionElement) {
|
|
109
|
+
questionElement.scrollIntoView({ block: 'center', behavior: 'smooth' });
|
|
110
|
+
}
|
|
111
|
+
}, 100);
|
|
112
|
+
}
|
|
113
|
+
formChecklistQuestions() {
|
|
114
|
+
let sectionsarray = [];
|
|
115
|
+
let sections = [];
|
|
116
|
+
sectionsarray = this.getobject.sections;
|
|
117
|
+
sectionsarray.forEach((i, sectionIndex) => {
|
|
118
|
+
let questions = [];
|
|
119
|
+
i.questions.forEach((j, questionIndex) => {
|
|
120
|
+
let answer = [];
|
|
121
|
+
j.answers?.forEach((k, answerIndex) => {
|
|
122
|
+
answer.push(this.fb.group({
|
|
123
|
+
...(!['image', 'descriptiveImage', 'multipleImage'].includes(j?.answerType) && j?.answerType != 'video' ? { 'answer': this.fb.control(k?.answer, [Validators.required]) } : {}),
|
|
124
|
+
'answeroptionNumber': this.fb.control(answerIndex),
|
|
125
|
+
...(!['image', 'descriptiveImage', 'multipleImage'].includes(j?.answerType) && j?.answerType != 'video' ? { 'sopFlag': this.fb.control(k?.sopFlag ? k?.sopFlag : false, [Validators.required]) } : {}),
|
|
126
|
+
...(!['image', 'descriptiveImage', 'multipleImage'].includes(j?.answerType) && j?.answerType != 'video' ? { 'validation': this.fb.control(k?.validation, [Validators.required]) } : {}),
|
|
127
|
+
...(!['image', 'descriptiveImage', 'multipleImage'].includes(j?.answerType) && j?.answerType != 'video' ? { 'validationType': this.fb.control(k?.validationType, this.allowedValuesValidator(["Capture Image", "Descriptive Answer", "Capture Video"])) } : {}),
|
|
128
|
+
...(['image', 'descriptiveImage', 'multipleImage'].includes(j?.answerType) ? { 'referenceImage': this.fb.control(k?.referenceImage) } : {}),
|
|
129
|
+
...((['image', 'descriptiveImage', 'multipleImage'].includes(j?.answerType) || j?.answerType == 'video') ? { 'allowUploadfromGallery': this.fb.control(j?.allowUploadfromGallery ? true : false) } : {}),
|
|
130
|
+
...(['image', 'descriptiveImage', 'multipleImage'].includes(j?.answerType) ? { 'runAI': this.fb.control((j?.runAI) ? j?.runAI : false) } : {}),
|
|
131
|
+
...(['multiplechoicesingle', 'yes/no'].includes(j?.answerType) ? { 'showLinked': this.fb.control((k?.showLinked) ? k?.showLinked : false) } : {}),
|
|
132
|
+
...(['multiplechoicesingle', 'yes/no'].includes(j?.answerType) ? { 'linkedQuestion': this.fb.control((k?.linkedQuestion) ? k?.linkedQuestion : 0) } : {}),
|
|
133
|
+
...(!['descriptive', 'image', 'descriptiveImage', 'multipleImage', 'date'].includes(j?.answerType) ? { 'referenceImage': this.fb.control(k?.referenceImage) } : {}),
|
|
134
|
+
...((!['descriptive', 'image', 'descriptiveImage', 'video', 'multipleImage', 'date'].includes(j?.answerType)) ? { 'allowUploadfromGallery': this.fb.control(k?.allowUploadfromGallery ? true : false) } : {}),
|
|
135
|
+
...(!['descriptive', 'image', 'descriptiveImage', 'multipleImage', 'date'].includes(j?.answerType) ? { 'runAI': this.fb.control((k?.runAI) ? k?.runAI : false) } : {}),
|
|
136
|
+
...(!['date'].includes(j?.answerType) ? { 'descriptivetype': this.fb.control(k.descriptivetype) } : {}),
|
|
137
|
+
}));
|
|
138
|
+
});
|
|
139
|
+
questions.push(this.fb.group({
|
|
140
|
+
"qno": this.fb.control(questionIndex + 1),
|
|
141
|
+
'qname': this.fb.control(j?.qname, [Validators.required]),
|
|
142
|
+
'answerType': this.fb.control(j?.answerType, this.allowedValuesValidator(["descriptive", "yes/no", "multiplechoicesingle", "multiplechoicemultiple", "image", "video", "descriptiveImage", "multipleImage", 'date'])),
|
|
143
|
+
...(!['descriptive', 'date'].includes(j?.answerType)) ? { 'answers': (['image', 'descriptiveImage', 'video', 'multipleImage'].includes(j?.answerType)) ? answer[0] : this.fb.array(answer) } : {},
|
|
144
|
+
'runAI': this.fb.control((['image', 'descriptiveImage', "multipleImage"].includes(j?.answerType)) ? (j?.runAI) ? true : false : false, [Validators.required]),
|
|
145
|
+
'allowUploadfromGallery': this.fb.control((['image', 'descriptiveImage', 'video', 'multipleImage'].includes(j?.answerType)) ? (j?.allowUploadfromGallery) ? true : false : false, [Validators.required]),
|
|
146
|
+
'runAIDescription': this.fb.control((['image', 'descriptiveImage', 'multipleImage'].includes(j?.answerType)) ? (j?.runAIDescription) : ''),
|
|
147
|
+
'linkType': this.fb.control(j?.linkType),
|
|
148
|
+
'questionReferenceImage': this.fb.control(j.questionReferenceImage),
|
|
149
|
+
'descriptivetype': this.fb.control(j.descriptivetype),
|
|
150
|
+
}));
|
|
151
|
+
answer = [];
|
|
152
|
+
});
|
|
153
|
+
sections.push(this.fb.group({
|
|
154
|
+
"name": this.fb.control(i?.name, [Validators.required, Validators.minLength(1)]),
|
|
155
|
+
"sectionNumber": this.fb.control(sectionIndex + 1),
|
|
156
|
+
"questions": this.fb.array(questions)
|
|
157
|
+
}));
|
|
158
|
+
questions = [];
|
|
159
|
+
});
|
|
160
|
+
this.ChecklistForm = this.fb.group({
|
|
161
|
+
'checklistName': this.fb.control(this.getobject.checkListName, [Validators.required]),
|
|
162
|
+
'checklistDescription': this.fb.control(this.getobject.checkListDescription),
|
|
163
|
+
'sections': this.fb.array(sections)
|
|
164
|
+
});
|
|
165
|
+
this.ChecklistForm.updateValueAndValidity();
|
|
166
|
+
this.checklistLoading = false;
|
|
167
|
+
}
|
|
168
|
+
initChecklist() {
|
|
169
|
+
// console.log(moment().tz('Asia/Singapore').format('DD-MM-YYYY hh:mm A'),'test')
|
|
170
|
+
this.ChecklistForm = this.fb.group({
|
|
171
|
+
'checklistName': this.fb.control('', [Validators.required]),
|
|
172
|
+
'checklistDescription': this.fb.control(''),
|
|
173
|
+
'sections': this.fb.array([
|
|
174
|
+
this.fb.group({
|
|
175
|
+
"name": this.fb.control('Section 1', [Validators.required, Validators.minLength(1)]),
|
|
176
|
+
"sectionNumber": this.fb.control(1, [Validators.required]),
|
|
177
|
+
"questions": this.fb.array([
|
|
178
|
+
this.fb.group({
|
|
179
|
+
"qno": this.fb.control(1, [Validators.required]),
|
|
180
|
+
'qname': this.fb.control('', [Validators.required]),
|
|
181
|
+
'answerType': this.fb.control('descriptive', this.allowedValuesValidator(["descriptive", "yes/no", "multiplechoicesingle", "multiplechoicemultiple", "descriptiveImage", "image", "video", 'multipleImage', 'date'])),
|
|
182
|
+
'runAI': this.fb.control(false, [Validators.required]),
|
|
183
|
+
'runAIDescription': this.fb.control(''),
|
|
184
|
+
'allowUploadfromGallery': this.fb.control(false, [Validators.required]),
|
|
185
|
+
'linkType': this.fb.control(false, [Validators.required]),
|
|
186
|
+
'questionReferenceImage': this.fb.control(''),
|
|
187
|
+
'descriptivetype': this.fb.control('text'),
|
|
188
|
+
})
|
|
189
|
+
])
|
|
190
|
+
})
|
|
191
|
+
])
|
|
192
|
+
});
|
|
193
|
+
this.checklistLoading = false;
|
|
194
|
+
}
|
|
195
|
+
allowedValuesValidator(allowedValues) {
|
|
196
|
+
return (control) => {
|
|
197
|
+
const value = control.value;
|
|
198
|
+
if (value && allowedValues.indexOf(value) === -1) {
|
|
199
|
+
return { invalidValue: true };
|
|
200
|
+
}
|
|
201
|
+
return null;
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
addNewSection() {
|
|
205
|
+
let sections = this.ChecklistForm.get('sections');
|
|
206
|
+
let sectionLength = sections.length;
|
|
207
|
+
this.ChecklistForm.get('sections').push(this.fb.group({
|
|
208
|
+
"name": this.fb.control(`Section ${sectionLength + 1}`, [Validators.required, Validators.minLength(1)]),
|
|
209
|
+
"sectionNumber": this.fb.control(sectionLength + 1, [Validators.required]),
|
|
210
|
+
"questions": this.fb.array([
|
|
211
|
+
this.fb.group({
|
|
212
|
+
"qno": this.fb.control(1, [Validators.required]),
|
|
213
|
+
'qname': this.fb.control('', [Validators.required]),
|
|
214
|
+
'answerType': this.fb.control('descriptive', this.allowedValuesValidator(["descriptive", "yes/no", "multiplechoicesingle", "multiplechoicemultiple", "descriptiveImage", "image", "video", 'multipleImage', 'date'])),
|
|
215
|
+
'runAI': this.fb.control(false, [Validators.required]),
|
|
216
|
+
'runAIDescription': this.fb.control(''),
|
|
217
|
+
'allowUploadfromGallery': this.fb.control(false, [Validators.required]),
|
|
218
|
+
'linkType': this.fb.control(false, [Validators.required]),
|
|
219
|
+
'questionReferenceImage': this.fb.control(''),
|
|
220
|
+
'descriptivetype': this.fb.control('text'),
|
|
221
|
+
})
|
|
222
|
+
])
|
|
223
|
+
}));
|
|
224
|
+
if (sectionLength == 0) {
|
|
225
|
+
this.show = -1;
|
|
226
|
+
}
|
|
227
|
+
this.accordian(sectionLength);
|
|
228
|
+
this.swalToast('New section added!');
|
|
229
|
+
}
|
|
230
|
+
removeSection(sectionIndex) {
|
|
231
|
+
this.ChecklistForm.get('sections').removeAt(sectionIndex);
|
|
232
|
+
}
|
|
233
|
+
dragDrop(sectionIndex, event) {
|
|
234
|
+
if (event.previousContainer === event.container) {
|
|
235
|
+
moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);
|
|
236
|
+
// this.updatelinkedQuestionNo(sectionIndex,event.previousIndex,event.currentIndex)
|
|
237
|
+
this.updateQuestionQnos(sectionIndex);
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
updatelinkedQuestionNo(secIdx, prevIdx, qnIdx) {
|
|
244
|
+
let questions = this.getSectionFormArray().at(secIdx).get('questions');
|
|
245
|
+
for (let i = 0; i < questions.length - 1; i++) {
|
|
246
|
+
let answers = questions.at(i).get('answers');
|
|
247
|
+
for (let j = 0; j < answers?.length - 1; j++) {
|
|
248
|
+
let linked = answers.at(j).get('showLinked')?.value;
|
|
249
|
+
if (linked) {
|
|
250
|
+
let linkedNo = answers.at(j).get('linkedQuestion')?.value;
|
|
251
|
+
if (linkedNo == prevIdx + 1) {
|
|
252
|
+
answers.at(j).get('linkedQuestion')?.setValue(qnIdx + 1);
|
|
253
|
+
}
|
|
254
|
+
else if (linkedNo <= qnIdx + 1) {
|
|
255
|
+
answers.at(j).get('linkedQuestion')?.setValue(linkedNo - 1);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
answerTypeSelection(sectionIndex, questionIndex, event, ansIndex = -1, linkQuestionIndex = -1) {
|
|
262
|
+
let selectvalue = event.target.value;
|
|
263
|
+
this.ChecklistForm.get('sections')
|
|
264
|
+
.at(sectionIndex)
|
|
265
|
+
.get('questions')
|
|
266
|
+
.at(questionIndex).get('questionReferenceImage')?.setValue('');
|
|
267
|
+
if (!['descriptive', 'multipleImage'].includes(selectvalue)) {
|
|
268
|
+
this.ChecklistForm.get('sections')
|
|
269
|
+
.at(sectionIndex)
|
|
270
|
+
.get('questions')
|
|
271
|
+
.at(questionIndex).get('descriptivetype')?.setValue('');
|
|
272
|
+
}
|
|
273
|
+
else {
|
|
274
|
+
this.ChecklistForm.get('sections')
|
|
275
|
+
.at(sectionIndex)
|
|
276
|
+
.get('questions')
|
|
277
|
+
.at(questionIndex).get('descriptivetype')?.setValue('text');
|
|
278
|
+
}
|
|
279
|
+
if (event.target.value == 'yes/no' || event.target.value == 'multiplechoicesingle') {
|
|
280
|
+
this.setAnswerAsFormArray(sectionIndex, questionIndex, selectvalue, ansIndex, linkQuestionIndex);
|
|
281
|
+
}
|
|
282
|
+
else if (event.target.value == 'descriptive') {
|
|
283
|
+
}
|
|
284
|
+
else if (event.target.value == 'descriptiveImage') {
|
|
285
|
+
this.setAnswerAsFormGroup(sectionIndex, questionIndex, selectvalue, ansIndex, linkQuestionIndex);
|
|
286
|
+
}
|
|
287
|
+
else if (event.target.value == 'multiplechoicemultiple') {
|
|
288
|
+
this.setAnswerAsFormArray(sectionIndex, questionIndex, selectvalue, ansIndex, linkQuestionIndex);
|
|
289
|
+
}
|
|
290
|
+
else if (event.target.value == 'image') {
|
|
291
|
+
this.setAnswerAsFormGroup(sectionIndex, questionIndex, 'image', ansIndex, linkQuestionIndex);
|
|
292
|
+
}
|
|
293
|
+
else if (event.target.value == 'video') {
|
|
294
|
+
this.setAnswerAsFormGroup(sectionIndex, questionIndex, 'video', ansIndex, linkQuestionIndex);
|
|
295
|
+
}
|
|
296
|
+
else if (event.target.value == 'multipleImage') {
|
|
297
|
+
this.setAnswerAsFormGroup(sectionIndex, questionIndex, 'multipleImage', ansIndex, linkQuestionIndex);
|
|
298
|
+
}
|
|
299
|
+
else if (event.target.value == 'date') { }
|
|
300
|
+
this.removedNestedQuestion(sectionIndex, questionIndex);
|
|
301
|
+
}
|
|
302
|
+
updateValidationType(event, section, question, answer) {
|
|
303
|
+
if (event.target.value == 'Descriptive Answer') {
|
|
304
|
+
this.ChecklistForm.get('sections')
|
|
305
|
+
.at(section)
|
|
306
|
+
.get('questions')
|
|
307
|
+
.at(question).get('answers').at(answer).get('descriptivetype')?.setValue('text');
|
|
308
|
+
}
|
|
309
|
+
this.ChecklistForm.get('sections')
|
|
310
|
+
.at(section)
|
|
311
|
+
.get('questions')
|
|
312
|
+
.at(question).get('answers').at(answer).get('allowUploadfromGallery')?.setValue(false);
|
|
313
|
+
}
|
|
314
|
+
setAnswerAsFormArray(sectionIndex, questionIndex, selectvalue, ansIndex, linkQuestionIndex) {
|
|
315
|
+
let question = this.ChecklistForm.get('sections')
|
|
316
|
+
.at(sectionIndex)
|
|
317
|
+
.get('questions')
|
|
318
|
+
.at(questionIndex);
|
|
319
|
+
if (ansIndex != -1) {
|
|
320
|
+
question = this.ChecklistForm.get('sections')
|
|
321
|
+
.at(sectionIndex)
|
|
322
|
+
.get('questions')
|
|
323
|
+
.at(questionIndex)
|
|
324
|
+
.get('answers')
|
|
325
|
+
.at(ansIndex)
|
|
326
|
+
.get('linkQuestionAnswers')
|
|
327
|
+
.at(linkQuestionIndex);
|
|
328
|
+
}
|
|
329
|
+
if (selectvalue == 'yes/no') {
|
|
330
|
+
question.setControl('answers', this.fb.array([
|
|
331
|
+
this.fb.group({
|
|
332
|
+
'answer': this.fb.control('Yes', [Validators.required]),
|
|
333
|
+
'answeroptionNumber': this.fb.control(1),
|
|
334
|
+
'sopFlag': this.fb.control(false, [Validators.required]),
|
|
335
|
+
// 'linkQuestion':this.fb.control(false,[Validators.required]),
|
|
336
|
+
// 'answerInputStyle': this.fb.control('radio',[Validators.required]),
|
|
337
|
+
'validation': this.fb.control(false, [Validators.required]),
|
|
338
|
+
'validationType': this.fb.control('Capture Image', this.allowedValuesValidator(["Capture Image", "Descriptive Answer", "Capture Video"])),
|
|
339
|
+
'linkedQuestion': this.fb.control(0, [Validators.required]),
|
|
340
|
+
'showLinked': this.fb.control(false, [Validators.required]),
|
|
341
|
+
'referenceImage': this.fb.control(''),
|
|
342
|
+
'runAI': this.fb.control(false),
|
|
343
|
+
'allowUploadfromGallery': this.fb.control(false),
|
|
344
|
+
'descriptivetype': this.fb.control('')
|
|
345
|
+
}),
|
|
346
|
+
this.fb.group({
|
|
347
|
+
'answer': this.fb.control('No', [Validators.required]),
|
|
348
|
+
'answeroptionNumber': this.fb.control(2),
|
|
349
|
+
'sopFlag': this.fb.control(false, [Validators.required]),
|
|
350
|
+
// 'linkQuestion':this.fb.control(false,[Validators.required]),
|
|
351
|
+
// 'linkQuestionAnswers':this.fb.group({
|
|
352
|
+
// "qno": this.fb.control(1, [Validators.required]),
|
|
353
|
+
// 'qname': this.fb.control('', [Validators.required]),
|
|
354
|
+
// 'answerType': this.fb.control('descriptive',
|
|
355
|
+
// this.allowedValuesValidator(["descriptive", "yes/no", "multiplechoicesingle", "multiplechoicemultiple","descriptiveImage", "image", "video"])),
|
|
356
|
+
// // 'answers': this.fb.array([
|
|
357
|
+
// // this.fb.group({
|
|
358
|
+
// // 'answer': this.fb.control('', [Validators.required]),
|
|
359
|
+
// // 'answeroptionNumber': this.fb.control(1),
|
|
360
|
+
// // 'sopFlag': this.fb.control(false, [Validators.required]),
|
|
361
|
+
// // // 'answerInputStyle':'descriptive',
|
|
362
|
+
// // 'validation': this.fb.control(false, [Validators.required]),
|
|
363
|
+
// // 'validationType': this.fb.control('Capture Image', this.allowedValuesValidator(["Capture Image", "Descriptive Answer","Capture Video"])),
|
|
364
|
+
// // 'referenceImage': this.fb.control('referenceImage'),
|
|
365
|
+
// // 'allowUploadfromGallery': this.fb.control(false),
|
|
366
|
+
// // })
|
|
367
|
+
// // ]),
|
|
368
|
+
// 'runAI': this.fb.control(false, [Validators.required]),
|
|
369
|
+
// 'runAIDescription': this.fb.control(''),
|
|
370
|
+
// 'allowUploadfromGallery': this.fb.control(false, [Validators.required]),
|
|
371
|
+
// }),
|
|
372
|
+
// 'answerInputStyle': this.fb.control('radio',[Validators.required]),
|
|
373
|
+
'validation': this.fb.control(false, [Validators.required]),
|
|
374
|
+
'validationType': this.fb.control('Capture Image', this.allowedValuesValidator(["Capture Image", "Descriptive Answer", "Capture Video"])),
|
|
375
|
+
'linkedQuestion': this.fb.control(0, [Validators.required]),
|
|
376
|
+
'showLinked': this.fb.control(false, [Validators.required]),
|
|
377
|
+
'referenceImage': this.fb.control(''),
|
|
378
|
+
'runAI': this.fb.control(false),
|
|
379
|
+
'allowUploadfromGallery': this.fb.control(false),
|
|
380
|
+
'descriptivetype': this.fb.control('')
|
|
381
|
+
})
|
|
382
|
+
]));
|
|
383
|
+
}
|
|
384
|
+
else {
|
|
385
|
+
question.setControl('answers', this.fb.array([
|
|
386
|
+
this.fb.group({
|
|
387
|
+
'answer': this.fb.control('', [Validators.required]),
|
|
388
|
+
'answeroptionNumber': this.fb.control(1),
|
|
389
|
+
'sopFlag': this.fb.control(false, [Validators.required]),
|
|
390
|
+
// ...(selectvalue=='multiplechoicesingle' ? {'linkQuestion':this.fb.control(true,[Validators.required])} : {}),
|
|
391
|
+
// 'answerInputStyle': this.fb.control(question.get('answerType')?.value,[Validators.required]),
|
|
392
|
+
'validation': this.fb.control(false, [Validators.required]),
|
|
393
|
+
'validationType': this.fb.control('Capture Image', this.allowedValuesValidator(["Capture Image", "Descriptive Answer", "Capture Video"])),
|
|
394
|
+
...(selectvalue == 'multiplechoicesingle' ? { "linkedQuestion": this.fb.control(0, [Validators.required]), 'showLinked': this.fb.control(false, [Validators.required]) } : {}),
|
|
395
|
+
'referenceImage': this.fb.control(''),
|
|
396
|
+
'runAI': this.fb.control(false),
|
|
397
|
+
'allowUploadfromGallery': this.fb.control(false),
|
|
398
|
+
'descriptivetype': this.fb.control('')
|
|
399
|
+
}),
|
|
400
|
+
this.fb.group({
|
|
401
|
+
'answer': this.fb.control('', [Validators.required]),
|
|
402
|
+
'answeroptionNumber': this.fb.control(1),
|
|
403
|
+
'sopFlag': this.fb.control(false, [Validators.required]),
|
|
404
|
+
// ...(selectvalue=='multiplechoicesingle' ? {'linkQuestion':this.fb.control(true,[Validators.required])} : {}),
|
|
405
|
+
// 'answerInputStyle': this.fb.control(question.get('answerType')?.value,[Validators.required]),
|
|
406
|
+
'validation': this.fb.control(false, [Validators.required]),
|
|
407
|
+
'validationType': this.fb.control('Capture Image', this.allowedValuesValidator(["Capture Image", "Descriptive Answer", "Capture Video"])),
|
|
408
|
+
...(selectvalue == 'multiplechoicesingle' ? { "linkedQuestion": this.fb.control(0, [Validators.required]), 'showLinked': this.fb.control(false, [Validators.required]) } : {}),
|
|
409
|
+
'referenceImage': this.fb.control(''),
|
|
410
|
+
'runAI': this.fb.control(false),
|
|
411
|
+
'allowUploadfromGallery': this.fb.control(false),
|
|
412
|
+
'descriptivetype': this.fb.control('')
|
|
413
|
+
})
|
|
414
|
+
]));
|
|
415
|
+
}
|
|
416
|
+
this.ChecklistForm.updateValueAndValidity();
|
|
417
|
+
}
|
|
418
|
+
setAnswerAsFormGroup(sectionIndex, questionIndex, answerType, ansIndex = -1, linkQuestionIndex = -1) {
|
|
419
|
+
if (['image', 'descriptiveImage', 'multipleImage'].includes(answerType)) {
|
|
420
|
+
if (ansIndex == -1) {
|
|
421
|
+
this.ChecklistForm.get('sections').at(sectionIndex)
|
|
422
|
+
.get('questions').at(questionIndex)
|
|
423
|
+
.setControl('answers', this.fb.group({
|
|
424
|
+
'referenceImage': this.fb.control(''),
|
|
425
|
+
'runAI': this.fb.control(false),
|
|
426
|
+
'allowUploadfromGallery': this.fb.control(false),
|
|
427
|
+
...(answerType == 'multipleImage' ? { 'descriptivetype': this.fb.control('text') } : {})
|
|
428
|
+
// 'answerInputStyle': this.fb.control(answerType, [Validators.required]),
|
|
429
|
+
}));
|
|
430
|
+
}
|
|
431
|
+
else {
|
|
432
|
+
this.ChecklistForm.get('sections').at(sectionIndex)
|
|
433
|
+
.get('questions').at(questionIndex)
|
|
434
|
+
.get('answers').at(ansIndex)
|
|
435
|
+
.get('linkQuestionAnswers').at(linkQuestionIndex)
|
|
436
|
+
.setControl('answers', this.fb.group({
|
|
437
|
+
'referenceImage': this.fb.control(''),
|
|
438
|
+
'runAI': this.fb.control(false),
|
|
439
|
+
'allowUploadfromGallery': this.fb.control(false),
|
|
440
|
+
...(answerType == 'multipleImage' ? { 'descriptivetype': this.fb.control('text') } : {})
|
|
441
|
+
// 'answerInputStyle': this.fb.control(answerType, [Validators.required]),
|
|
442
|
+
}));
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
else {
|
|
446
|
+
let question = this.ChecklistForm.get('sections')
|
|
447
|
+
.at(sectionIndex)
|
|
448
|
+
.get('questions')
|
|
449
|
+
.at(questionIndex);
|
|
450
|
+
if (ansIndex != -1) {
|
|
451
|
+
question = this.ChecklistForm.get('sections')
|
|
452
|
+
.at(sectionIndex)
|
|
453
|
+
.get('questions')
|
|
454
|
+
.at(questionIndex)
|
|
455
|
+
.get('answers')
|
|
456
|
+
.at(ansIndex);
|
|
457
|
+
}
|
|
458
|
+
question.setControl('answers', this.fb.group({
|
|
459
|
+
'allowUploadfromGallery': this.fb.control(false),
|
|
460
|
+
// 'answerInputStyle': this.fb.control(answerType, [Validators.required]),
|
|
461
|
+
}));
|
|
462
|
+
}
|
|
463
|
+
this.ChecklistForm.updateValueAndValidity();
|
|
464
|
+
}
|
|
465
|
+
loadImageFromDevice(secIdx, qIdx, event, ansIdx = -1, ctrlName = '') {
|
|
466
|
+
if (event.target.files != undefined && event.target.files.length) {
|
|
467
|
+
}
|
|
468
|
+
let formData = new FormData();
|
|
469
|
+
let file = event.target.files[0];
|
|
470
|
+
formData.append('file', file, file.name);
|
|
471
|
+
this.sopService.imageupload(formData).subscribe((res) => {
|
|
472
|
+
// console.log(res,'res');
|
|
473
|
+
if (ctrlName)
|
|
474
|
+
this.getAnswerFormGroup_FormControl(secIdx, qIdx, 'questionReferenceImage')?.setValue(res.data.imgUrl);
|
|
475
|
+
else
|
|
476
|
+
this.getAnswerFormGroup_FormControl(secIdx, qIdx, 'referenceImage', ansIdx)?.setValue(res.data.imgUrl);
|
|
477
|
+
this.ChecklistForm.updateValueAndValidity();
|
|
478
|
+
this.changedetector.detectChanges();
|
|
479
|
+
});
|
|
480
|
+
}
|
|
481
|
+
clearReferenceImage(secIdx, qIdx, ansIdx = -1) {
|
|
482
|
+
this.getAnswerFormGroup_FormControl(secIdx, qIdx, 'referenceImage', ansIdx)?.setValue('');
|
|
483
|
+
this.getAnswerFormGroup_FormControl(secIdx, qIdx, 'runAI', ansIdx)?.setValue(false);
|
|
484
|
+
this.getAnswerFormGroup_FormControl(secIdx, qIdx, 'questionReferenceImage')?.setValue('');
|
|
485
|
+
}
|
|
486
|
+
getvalidation(sectionIndex, questionIndex, addmoreqnIndex, event) {
|
|
487
|
+
this.ChecklistForm.get('sections').at(sectionIndex).get('questions').at(questionIndex).get('answers').at(addmoreqnIndex).get('validation')?.setValue(event.target.checked);
|
|
488
|
+
}
|
|
489
|
+
addNewQuestion(sectionIndex) {
|
|
490
|
+
if (this.sectionIndex > -1) {
|
|
491
|
+
if (!(this.ChecklistForm.get('sections').at(sectionIndex).get('questions'))) {
|
|
492
|
+
this.ChecklistForm.get('sections').at(sectionIndex).setControl('questions', this.fb.array([]));
|
|
493
|
+
}
|
|
494
|
+
let questions = this.ChecklistForm.get('sections').at(sectionIndex).get('questions');
|
|
495
|
+
let questionsLength = questions.length;
|
|
496
|
+
questions.push(this.fb.group({
|
|
497
|
+
"qno": this.fb.control(questionsLength + 1),
|
|
498
|
+
'qname': this.fb.control('', [Validators.required]),
|
|
499
|
+
'answerType': this.fb.control('descriptive', this.allowedValuesValidator(["descriptive", "yes/no", "multiplechoicesingle", "multiplechoicemultiple", "descriptiveImage", "image", "video", 'multipleImage', 'date'])),
|
|
500
|
+
'runAI': this.fb.control(false, [Validators.required]),
|
|
501
|
+
'runAIDescription': this.fb.control(''),
|
|
502
|
+
'allowUploadfromGallery': this.fb.control(false, [Validators.required]),
|
|
503
|
+
'linkType': this.fb.control(false, [Validators.required]),
|
|
504
|
+
'questionReferenceImage': this.fb.control(''),
|
|
505
|
+
'descriptivetype': this.fb.control('text'),
|
|
506
|
+
}));
|
|
507
|
+
this.changedetector.detectChanges();
|
|
508
|
+
this.swalToast('New question added!');
|
|
509
|
+
setTimeout(() => {
|
|
510
|
+
this.scrollToQuestion(sectionIndex, questionsLength);
|
|
511
|
+
}, 100);
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
deleteQuestion(sectionIndex, questionIndex) {
|
|
515
|
+
let question = this.getQuestionFormControl(sectionIndex, questionIndex, 'qname')?.value || '';
|
|
516
|
+
let qno = this.getQuestionFormControl(sectionIndex, questionIndex, 'qno')?.value;
|
|
517
|
+
question = question ? question : `Question ${this.getQuestionFormControl(sectionIndex, questionIndex, 'qno')?.value || ''}`;
|
|
518
|
+
question = question.length > 20 ? question.slice(0, 20) + '...' : question;
|
|
519
|
+
const dialogRef = this.dialog.open(TraxpopupComponent, { centered: true, size: 'md' });
|
|
520
|
+
dialogRef.componentInstance.data = {
|
|
521
|
+
imagesrc: `<span><svg xmlns="http://www.w3.org/2000/svg" width="56" height="56" viewBox="0 0 56 56" fill="none"><rect x="4" y="4" width="48" height="48" rx="24" fill="#FEE4E2"/><path d="M28 24V28M28 32H28.01M38 28C38 33.5228 33.5228 38 28 38C22.4772 38 18 33.5228 18 28C18 22.4772 22.4772 18 28 18C33.5228 18 38 22.4772 38 28Z" stroke="#D92D20" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><rect x="4" y="4" width="48" height="48" rx="24" stroke="#FEF3F2" stroke-width="8"/></svg></span>`,
|
|
522
|
+
title: `Delete '${question}'?`,
|
|
523
|
+
content: `Are you sure you want to delete <b>'${question}'</b>? This action cannot be undone.`,
|
|
524
|
+
buttontype: 'delete'
|
|
525
|
+
};
|
|
526
|
+
dialogRef.result.then((res) => {
|
|
527
|
+
if (res == 'delete') {
|
|
528
|
+
let linkedQuestion = this.getSectionFormArray().at(sectionIndex).get('questions').at(questionIndex).get('answers');
|
|
529
|
+
let type = this.getSectionFormArray().at(sectionIndex).get('questions').at(questionIndex).get('answerType')?.value;
|
|
530
|
+
if (!['descriptive', 'image', 'descriptiveImage', 'multipleImage', 'video'].includes(type)) {
|
|
531
|
+
for (let i = 0; i < linkedQuestion?.length; i++) {
|
|
532
|
+
let linkedQn = (linkedQuestion.at(i).get('linkedQuestion')?.value);
|
|
533
|
+
if (linkedQn) {
|
|
534
|
+
let no = linkedQn - 1;
|
|
535
|
+
this.getSectionFormArray().at(sectionIndex).get('questions').at(no).get('linkType')?.setValue(false);
|
|
536
|
+
if (linkedQn && parseInt(linkedQn) > questionIndex) {
|
|
537
|
+
this.subtractQuestionno(sectionIndex, linkedQn - 1);
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
this.getSectionFormControl(sectionIndex, 'questions').removeAt(questionIndex);
|
|
543
|
+
this.removedNestedQuestion(sectionIndex, qno);
|
|
544
|
+
this.updateQuestionQnos(sectionIndex);
|
|
545
|
+
this.swalToast(`${question} has been deleted!`);
|
|
546
|
+
this.changedetector.detectChanges();
|
|
547
|
+
}
|
|
548
|
+
});
|
|
549
|
+
}
|
|
550
|
+
subtractQuestionno(sectionIndex, questionIndex) {
|
|
551
|
+
let linkedQuestionAnswers = this.getSectionFormArray().at(sectionIndex).get('questions').at(questionIndex).get('answers');
|
|
552
|
+
for (let j = 0; j < linkedQuestionAnswers?.length; j++) {
|
|
553
|
+
let linkedQn = (linkedQuestionAnswers.at(j).get('linkedQuestion')?.value);
|
|
554
|
+
if (linkedQn && parseInt(linkedQn) > questionIndex) {
|
|
555
|
+
(linkedQuestionAnswers.at(j).get('linkedQuestion'))?.setValue(linkedQn - 1);
|
|
556
|
+
this.subtractQuestionno(sectionIndex, linkedQn - 1);
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
raiseflag(sectionIndex, questionIndex, ansIdx, value, linkIndex = -1, linkAnsIndex = -1) {
|
|
561
|
+
let question = (this.ChecklistForm.get('sections')?.at(sectionIndex)).get('questions').at(questionIndex);
|
|
562
|
+
if (value == true) {
|
|
563
|
+
let answers = question.get('answers').value;
|
|
564
|
+
if (linkIndex == -1) {
|
|
565
|
+
if (answers.filter((x) => x.sopFlag == true).length == (answers.length - 1)) {
|
|
566
|
+
question.get('answers').at(ansIdx).addControl('showSOPFlagError', this.fb.control(true));
|
|
567
|
+
timer(5000).subscribe(() => {
|
|
568
|
+
question.get('answers').at(ansIdx).removeControl('showSOPFlagError');
|
|
569
|
+
});
|
|
570
|
+
return;
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
else {
|
|
574
|
+
let answers = question.get('answers').at(ansIdx);
|
|
575
|
+
let linkQuestion = answers.get('linkQuestionAnswers').at(linkIndex);
|
|
576
|
+
let linkAnswers = linkQuestion.get('answers').value;
|
|
577
|
+
if (linkAnswers.filter((x) => x.sopFlag == true).length == (linkAnswers.length - 1)) {
|
|
578
|
+
linkQuestion.get('answers').at(linkAnsIndex).addControl('showSOPFlagError', this.fb.control(true));
|
|
579
|
+
timer(5000).subscribe(() => {
|
|
580
|
+
linkQuestion.get('answers').at(linkAnsIndex).removeControl('showSOPFlagError');
|
|
581
|
+
});
|
|
582
|
+
return;
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
if (linkIndex == -1)
|
|
587
|
+
question.get('answers')?.at(ansIdx)?.get('sopFlag')?.setValue(value);
|
|
588
|
+
else {
|
|
589
|
+
let answers = question.get('answers').at(ansIdx);
|
|
590
|
+
let linkQuestion = answers.get('linkQuestionAnswers').at(linkIndex);
|
|
591
|
+
linkQuestion.get('answers')?.at(linkAnsIndex)?.get('sopFlag')?.setValue(value);
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
addNestedQuestion(sectionIndex, questionIndex, ansIdx, value, linkedQuestionIndex = -1, linkedAnswer = -1) {
|
|
595
|
+
let answer = this.ChecklistForm.get('sections')
|
|
596
|
+
.at(sectionIndex)
|
|
597
|
+
.get('questions')
|
|
598
|
+
.at(questionIndex)
|
|
599
|
+
.get('answers')
|
|
600
|
+
.at(ansIdx);
|
|
601
|
+
if (!answer?.get('linkQuestionAnswers')?.value.length) {
|
|
602
|
+
answer.setControl('linkQuestionAnswers', this.fb.array([
|
|
603
|
+
this.fb.group({
|
|
604
|
+
"qno": this.fb.control(1),
|
|
605
|
+
'qname': this.fb.control('', [Validators.required]),
|
|
606
|
+
'answerType': this.fb.control('descriptive', this.allowedValuesValidator(["descriptive", "yes/no", "multiplechoicesingle", "multiplechoicemultiple", "descriptiveImage", "image", "video", 'multipleImage', 'date'])),
|
|
607
|
+
'runAI': this.fb.control(false, [Validators.required]),
|
|
608
|
+
'runAIDescription': this.fb.control(''),
|
|
609
|
+
'allowUploadfromGallery': this.fb.control(false, [Validators.required]),
|
|
610
|
+
'questionReferenceImage': this.fb.control(''),
|
|
611
|
+
'descriptivetype': this.fb.control('text'),
|
|
612
|
+
})
|
|
613
|
+
]));
|
|
614
|
+
}
|
|
615
|
+
else {
|
|
616
|
+
let nestedQuestion = answer.get('linkQuestionAnswers');
|
|
617
|
+
nestedQuestion.push(this.fb.group({
|
|
618
|
+
"qno": this.fb.control(1),
|
|
619
|
+
'qname': this.fb.control('', [Validators.required]),
|
|
620
|
+
'answerType': this.fb.control('descriptive', this.allowedValuesValidator(["descriptive", "yes/no", "multiplechoicesingle", "multiplechoicemultiple", "descriptiveImage", "image", "video", 'multipleImage', 'date'])),
|
|
621
|
+
'runAI': this.fb.control(false, [Validators.required]),
|
|
622
|
+
'runAIDescription': this.fb.control(''),
|
|
623
|
+
'allowUploadfromGallery': this.fb.control(false, [Validators.required]),
|
|
624
|
+
'questionReferenceImage': this.fb.control(''),
|
|
625
|
+
'descriptivetype': this.fb.control('text'),
|
|
626
|
+
}));
|
|
627
|
+
}
|
|
628
|
+
this.ChecklistForm.updateValueAndValidity();
|
|
629
|
+
}
|
|
630
|
+
accordian(index) {
|
|
631
|
+
if (this.show == index) {
|
|
632
|
+
this.show = -1;
|
|
633
|
+
this.sectionIndex = -1;
|
|
634
|
+
}
|
|
635
|
+
else {
|
|
636
|
+
this.show = index;
|
|
637
|
+
this.sectionIndex = index;
|
|
638
|
+
}
|
|
639
|
+
}
|
|
640
|
+
deleteSection(sectionIndex) {
|
|
641
|
+
let section = this.ChecklistForm.get('sections').at(sectionIndex);
|
|
642
|
+
let sectionLength = " " + section.get('questions').length;
|
|
643
|
+
let sectionName = section.get('name')?.value;
|
|
644
|
+
sectionName = sectionName.length > 20 ? (sectionName.slice(0, 20) + "...") : sectionName;
|
|
645
|
+
let question_text = '';
|
|
646
|
+
if (sectionLength == 1)
|
|
647
|
+
question_text = 'Question';
|
|
648
|
+
else
|
|
649
|
+
question_text = 'Questions';
|
|
650
|
+
const popupcontent = {
|
|
651
|
+
displayprop: false,
|
|
652
|
+
imagesrc: `<svg xmlns="http://www.w3.org/2000/svg" width="56" height="56" viewBox="0 0 56 56" fill="none"><rect x="4" y="4" width="48" height="48" rx="24" fill="#FEE4E2"/><path d="M28 24V28M28 32H28.01M38 28C38 33.5228 33.5228 38 28 38C22.4772 38 18 33.5228 18 28C18 22.4772 22.4772 18 28 18C33.5228 18 38 22.4772 38 28Z" stroke="#D92D20" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><rect x="4" y="4" width="48" height="48" rx="24" stroke="#FEF3F2" stroke-width="8"/></svg>`,
|
|
653
|
+
title: `Delete '${sectionName} Section'?`,
|
|
654
|
+
content: `Are you sure you want to delete' <b>'${sectionName}'</b>? with <b>${sectionLength} ${question_text}</b> This action cannot be undone.`,
|
|
655
|
+
buttontype: 'delete'
|
|
656
|
+
};
|
|
657
|
+
const dialogRef = this.dialog.open(TraxpopupComponent, { centered: true, size: 'md' });
|
|
658
|
+
dialogRef.componentInstance.data = popupcontent;
|
|
659
|
+
dialogRef.result.then((res) => {
|
|
660
|
+
if (res == 'delete') {
|
|
661
|
+
this.ChecklistForm.get('sections').removeAt(sectionIndex);
|
|
662
|
+
this.changedetector.detectChanges();
|
|
663
|
+
}
|
|
664
|
+
});
|
|
665
|
+
}
|
|
666
|
+
AddMoreAns(sectionindex, questionIndex, type) {
|
|
667
|
+
let ansoption = this.ChecklistForm.get('sections')
|
|
668
|
+
.at(sectionindex)
|
|
669
|
+
.get('questions')
|
|
670
|
+
.at(questionIndex)
|
|
671
|
+
.get('answers');
|
|
672
|
+
let ansoptionLength = ansoption.length;
|
|
673
|
+
if (ansoptionLength <= 29) {
|
|
674
|
+
ansoption.push(this.fb.group({
|
|
675
|
+
'answer': this.fb.control(``, [Validators.required]),
|
|
676
|
+
'answeroptionNumber': this.fb.control(ansoptionLength + 1),
|
|
677
|
+
'sopFlag': this.fb.control(false, [Validators.required]),
|
|
678
|
+
'validation': this.fb.control(false, [Validators.required]),
|
|
679
|
+
'validationType': this.fb.control('Capture Image', this.allowedValuesValidator(["Capture Image", "Descriptive Answer", "Capture Video"])),
|
|
680
|
+
'referenceImage': this.fb.control(''),
|
|
681
|
+
'allowUploadfromGallery': this.fb.control(false),
|
|
682
|
+
...(type == 'multiplechoicesingle' ? { "linkedQuestion": this.fb.control(0, [Validators.required]), 'showLinked': this.fb.control(false, [Validators.required]) } : {}),
|
|
683
|
+
'runAI': this.fb.control(false),
|
|
684
|
+
'descriptivetype': this.fb.control(''),
|
|
685
|
+
...(type == 'multipleImage' ? { 'descriptivetype': this.fb.control('text') } : {})
|
|
686
|
+
}));
|
|
687
|
+
}
|
|
688
|
+
}
|
|
689
|
+
deleteAnswer(sectionIndex, questionIndex, addmoreqnIndex, ansIndex = -1) {
|
|
690
|
+
if (ansIndex != -1) {
|
|
691
|
+
this.getFormArrayQuestionsAnswer(sectionIndex, questionIndex, 'answers', ansIndex).removeAt(addmoreqnIndex);
|
|
692
|
+
}
|
|
693
|
+
else {
|
|
694
|
+
this.getFormArrayQuestionsAnswer(sectionIndex, questionIndex, 'answers', ansIndex).removeAt(addmoreqnIndex);
|
|
695
|
+
}
|
|
696
|
+
this.ChecklistForm.updateValueAndValidity();
|
|
697
|
+
}
|
|
698
|
+
cloneQuestion(sectionindex, questionindex) {
|
|
699
|
+
let cloneQuestion = this.getSectionFormControl(sectionindex, 'questions').at(questionindex).value;
|
|
700
|
+
let question;
|
|
701
|
+
let answer;
|
|
702
|
+
if (cloneQuestion.answers) {
|
|
703
|
+
if (Array.isArray(cloneQuestion.answers) && cloneQuestion.answers.length) {
|
|
704
|
+
answer = [];
|
|
705
|
+
cloneQuestion.answers.forEach((k) => {
|
|
706
|
+
answer.push(this.fb.group({
|
|
707
|
+
...(!['image', 'descriptiveImage', 'multipleImage'].includes(cloneQuestion?.answerType) && cloneQuestion?.answerType != 'video' ? { 'answer': this.fb.control(k?.answer, [Validators.required]) } : {}),
|
|
708
|
+
...(!['image', 'descriptiveImage', 'multipleImage'].includes(cloneQuestion?.answerType) && cloneQuestion?.answerType != 'video' ? { 'answeroptionNumber': this.fb.control(k?.answeroptionNumber + 1) } : {}),
|
|
709
|
+
...(!['image', 'descriptiveImage', 'multipleImage'].includes(cloneQuestion?.answerType) && cloneQuestion?.answerType != 'video' ? { 'sopFlag': this.fb.control(k?.sopFlag ? k?.sopFlag : false, [Validators.required]) } : {}),
|
|
710
|
+
...(!['image', 'descriptiveImage', 'multipleImage'].includes(cloneQuestion?.answerType) && cloneQuestion?.answerType != 'video' ? { 'validation': this.fb.control(k?.validation, [Validators.required]) } : {}),
|
|
711
|
+
...(!['image', 'descriptiveImage', 'multipleImage'].includes(cloneQuestion?.answerType) && cloneQuestion?.answerType != 'video' ? { 'validationType': this.fb.control(k?.validationType, this.allowedValuesValidator(["Capture Image", "Descriptive Answer", "Capture Video"])) } : {}),
|
|
712
|
+
...(!['descriptive', 'image', 'descriptiveImage', 'multipleImage', 'date'].includes(cloneQuestion?.answerType) ? { 'referenceImage': this.fb.control(k?.referenceImage) } : {}),
|
|
713
|
+
...((!['descriptive', 'image', 'descriptiveImage', 'multipleImage', 'date'].includes(cloneQuestion?.answerType)) ? { 'allowUploadfromGallery': this.fb.control(k?.allowUploadfromGallery == true ? true : false) } : {}),
|
|
714
|
+
...(!['descriptive', 'image', 'descriptiveImage', 'multipleImage', 'date'].includes(cloneQuestion?.answerType) ? { 'runAI': this.fb.control(k?.runAI ? k?.runAI : false) } : {}),
|
|
715
|
+
...(['multiplechoicesingle', 'yes/no'].includes(cloneQuestion?.answerType) ? { 'showLinked': false } : {}),
|
|
716
|
+
...(['multiplechoicesingle', 'yes/no'].includes(cloneQuestion?.answerType) ? { 'linkedQuestion': 0 } : {}),
|
|
717
|
+
...(['multiplechoicesingle', 'yes/no'].includes(cloneQuestion?.answerType) ? { 'linkedQuestion': 0 } : {}),
|
|
718
|
+
descriptivetype: this.fb.control(k?.descriptivetype)
|
|
719
|
+
}));
|
|
720
|
+
});
|
|
721
|
+
}
|
|
722
|
+
else if (typeof cloneQuestion.answers === 'object' && cloneQuestion.answers !== null) {
|
|
723
|
+
answer = this.fb.group({
|
|
724
|
+
...(['image', 'descriptiveImage', 'multipleImage'].includes(cloneQuestion?.answerType) ? { 'referenceImage': this.fb.control(cloneQuestion?.answers?.referenceImage) } : {}),
|
|
725
|
+
...((['image', 'descriptiveImage', 'multipleImage'].includes(cloneQuestion?.answerType) || cloneQuestion?.answerType == 'video') ? { 'allowUploadfromGallery': this.fb.control(cloneQuestion?.answers?.allowUploadfromGallery == true ? true : false) } : {}),
|
|
726
|
+
...(['image', 'descriptiveImage', 'multipleImage'].includes(cloneQuestion?.answerType) ? { 'runAI': this.fb.control(cloneQuestion?.answers?.runAI ? cloneQuestion?.answers?.runAI : false) } : {}),
|
|
727
|
+
...(['multipleImage'].includes(cloneQuestion?.answerType) ? { descriptivetype: this.fb.control(cloneQuestion?.answers?.descriptivetype) } : {}),
|
|
728
|
+
});
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
question = this.fb.group({
|
|
732
|
+
"qno": this.fb.control(cloneQuestion?.qno + 1),
|
|
733
|
+
'qname': this.fb.control(cloneQuestion?.qname, [Validators.required]),
|
|
734
|
+
'answerType': this.fb.control(cloneQuestion?.answerType, this.allowedValuesValidator(["descriptive", "yes/no", "multiplechoicesingle", "multiplechoicemultiple", "descriptiveImage", "image", "video", 'multipleImage', 'date'])),
|
|
735
|
+
...(!['descriptive', 'date'].includes(cloneQuestion?.answerType) ? { 'answers': (['image', 'descriptiveImage', 'video', 'multipleImage'].includes(cloneQuestion?.answerType)) ? answer : this.fb.array(answer) } : {}),
|
|
736
|
+
'runAI': this.fb.control(cloneQuestion?.runAI, [Validators.required]),
|
|
737
|
+
'runAIDescription': this.fb.control(cloneQuestion?.runAIDescription),
|
|
738
|
+
'allowUploadfromGallery': this.fb.control(cloneQuestion?.allowUploadfromGallery),
|
|
739
|
+
'linkType': this.fb.control(false),
|
|
740
|
+
'descriptivetype': this.fb.control(cloneQuestion?.descriptivetype),
|
|
741
|
+
'questionReferenceImage': this.fb.control(cloneQuestion?.questionReferenceImage)
|
|
742
|
+
});
|
|
743
|
+
// this.updateClonedlinkedQuestionNo(sectionindex, cloneQuestion?.qno);
|
|
744
|
+
this.getSectionFormControl(sectionindex, 'questions').insert(cloneQuestion?.qno, question);
|
|
745
|
+
this.ChecklistForm.updateValueAndValidity();
|
|
746
|
+
this.updateQuestionQnos(sectionindex);
|
|
747
|
+
this.swalToast(`Question ${cloneQuestion?.qno} has been duplicated!`);
|
|
748
|
+
this.changedetector.detectChanges();
|
|
749
|
+
}
|
|
750
|
+
updateClonedlinkedQuestionNo(secIdx, qidx) {
|
|
751
|
+
let questions = this.getSectionFormArray().at(secIdx).get('questions');
|
|
752
|
+
for (let i = 0; i < questions.length; i++) {
|
|
753
|
+
let answers = questions.at(i)?.get('answers');
|
|
754
|
+
if (answers) {
|
|
755
|
+
for (let j = 0; j < answers.length; j++) {
|
|
756
|
+
let linked = answers.at(j)?.get('showLinked')?.value;
|
|
757
|
+
if (linked) {
|
|
758
|
+
let questionNo = answers.at(j)?.get('linkedQuestion')?.value;
|
|
759
|
+
if (questionNo > qidx) {
|
|
760
|
+
answers.at(j)?.get('linkedQuestion')?.setValue(questionNo + 1);
|
|
761
|
+
}
|
|
762
|
+
}
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
saveChecklistQuestions(type) {
|
|
768
|
+
let checklist = this.ChecklistForm.value;
|
|
769
|
+
if (!this.ChecklistForm.get('checklistName')?.valid) {
|
|
770
|
+
let err = 'Please enter checklist name!';
|
|
771
|
+
this.swalToast(err, 'error');
|
|
772
|
+
return;
|
|
773
|
+
}
|
|
774
|
+
// console.log(this.ChecklistForm);
|
|
775
|
+
// return;
|
|
776
|
+
if (!this.ChecklistForm.valid) {
|
|
777
|
+
this.markFormControlsAsTouched(this.ChecklistForm, 0);
|
|
778
|
+
this.scrollToErrors(this.ChecklistForm.get('sections'));
|
|
779
|
+
return;
|
|
780
|
+
}
|
|
781
|
+
let sections = checklist.sections;
|
|
782
|
+
if (type == 'saveAsDraft') {
|
|
783
|
+
checklist.submitType = 'save';
|
|
784
|
+
}
|
|
785
|
+
else {
|
|
786
|
+
checklist.submitType = 'configure';
|
|
787
|
+
}
|
|
788
|
+
if (!sections.length) {
|
|
789
|
+
let err = 'Please add atleast one section!';
|
|
790
|
+
this.swalToast(err, 'error');
|
|
791
|
+
return;
|
|
792
|
+
}
|
|
793
|
+
for (let i = 0; i < sections.length; i++) {
|
|
794
|
+
if (type == 'configure' && !sections[i].questions.length) {
|
|
795
|
+
let err = 'Please add atleast one question in section!';
|
|
796
|
+
this.swalToast(err, 'error');
|
|
797
|
+
return;
|
|
798
|
+
}
|
|
799
|
+
for (let j = 0; j < sections[i].questions.length; j++) {
|
|
800
|
+
let ansType = sections[i].questions[j].answerType;
|
|
801
|
+
if (ansType != 'descriptive') {
|
|
802
|
+
delete sections[i].questions[j].descriptivetype;
|
|
803
|
+
}
|
|
804
|
+
if (["multiplechoicemultiple"].includes(ansType)) {
|
|
805
|
+
for (let k = 0; k < sections[i].questions[j].answers.length; k++) {
|
|
806
|
+
sections[i].questions[j].answers[k]['showLinked'] = false;
|
|
807
|
+
sections[i].questions[j].answers[k]['linkedQuestion'] = 0;
|
|
808
|
+
}
|
|
809
|
+
sections[i].questions[j].allowUploadfromGallery = false;
|
|
810
|
+
}
|
|
811
|
+
else {
|
|
812
|
+
if (typeof sections[i].questions[j].answers === 'object' &&
|
|
813
|
+
sections[i].questions[j].answers !== null &&
|
|
814
|
+
!Array.isArray(sections[i].questions[j].answers) || ['descriptive', 'date'].includes(ansType)) {
|
|
815
|
+
let item = {
|
|
816
|
+
"answer": "",
|
|
817
|
+
"answeroptionNumber": 1,
|
|
818
|
+
"sopFlag": false,
|
|
819
|
+
"validation": false,
|
|
820
|
+
"validationType": "",
|
|
821
|
+
"validationAnswer": "",
|
|
822
|
+
"referenceImage": sections[i].questions[j].answers?.referenceImage ? sections[i].questions[j].answers?.referenceImage : "",
|
|
823
|
+
"showLinked": false,
|
|
824
|
+
"linkedQuestion": 0,
|
|
825
|
+
...(ansType == 'multipleImage' ? { 'descriptivetype': sections[i].questions[j].answers?.descriptivetype } : {})
|
|
826
|
+
};
|
|
827
|
+
sections[i].questions[j].allowUploadfromGallery = sections[i].questions[j].answers?.allowUploadfromGallery ? sections[i].questions[j].answers?.allowUploadfromGallery : false;
|
|
828
|
+
if (ansType == 'multipleImage') {
|
|
829
|
+
sections[i].questions[j].descriptivetype = sections[i].questions[j].answers?.descriptivetype ? sections[i].questions[j].answers?.descriptivetype : 'text';
|
|
830
|
+
sections[i].questions[j].questionReferenceImage = sections[i].questions[j].answers?.referenceImage ? sections[i].questions[j].answers?.referenceImage : '';
|
|
831
|
+
}
|
|
832
|
+
sections[i].questions[j].answers = [item];
|
|
833
|
+
}
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
checklist.sections = sections;
|
|
838
|
+
checklist.checklistName = checklist.checklistName.charAt(0).toUpperCase() + checklist.checklistName.slice(1);
|
|
839
|
+
this.sopService.createchecklist(checklist).subscribe((res) => {
|
|
840
|
+
if (res) {
|
|
841
|
+
if (res?.code == 200) {
|
|
842
|
+
if (type == 'configure') {
|
|
843
|
+
this.router.navigateByUrl(`/manage/trax/configure?checkListId=${res.data.checklistId}`);
|
|
844
|
+
}
|
|
845
|
+
else {
|
|
846
|
+
this.router.navigateByUrl('/manage/trax/checklist');
|
|
847
|
+
}
|
|
848
|
+
}
|
|
849
|
+
else {
|
|
850
|
+
this.swalToast('Unable to create checklist!', 'error');
|
|
851
|
+
}
|
|
852
|
+
}
|
|
853
|
+
else {
|
|
854
|
+
this.swalToast('Unable to create checklist!', 'error');
|
|
855
|
+
}
|
|
856
|
+
}, (error) => {
|
|
857
|
+
if (error.code == 400) {
|
|
858
|
+
let err = error?.error?.message;
|
|
859
|
+
this.swalToast(err, 'error');
|
|
860
|
+
}
|
|
861
|
+
else {
|
|
862
|
+
this.swalToast('Unable to create checklist!Server Error!', 'error');
|
|
863
|
+
}
|
|
864
|
+
});
|
|
865
|
+
}
|
|
866
|
+
saveAsDraftPop(type) {
|
|
867
|
+
this.popupCount = this.popupCount + 1;
|
|
868
|
+
const dialogRef = this.dialog.open(TraxpopupComponent, { centered: true, size: 'md' });
|
|
869
|
+
dialogRef.componentInstance.data = {
|
|
870
|
+
imagesrc: `<svg xmlns="http://www.w3.org/2000/svg" width="56" height="56" viewBox="0 0 56 56" fill="none"><rect x="4" y="4" width="48" height="48" rx="24" fill="#FEF0C7"/><path d="M27.9998 24.0012V28.0012M27.9998 32.0012H28.0098M26.2898 18.8612L17.8198 33.0012C17.6451 33.3036 17.5527 33.6465 17.5518 33.9957C17.5508 34.3449 17.6413 34.6883 17.8142 34.9917C17.9871 35.2951 18.2365 35.5479 18.5375 35.725C18.8385 35.9021 19.1806 35.9973 19.5298 36.0012H36.4698C36.819 35.9973 37.1611 35.9021 37.4621 35.725C37.7631 35.5479 38.0124 35.2951 38.1854 34.9917C38.3583 34.6883 38.4488 34.3449 38.4478 33.9957C38.4468 33.6465 38.3544 33.3036 38.1798 33.0012L29.7098 18.8612C29.5315 18.5673 29.2805 18.3243 28.981 18.1557C28.6814 17.987 28.3435 17.8984 27.9998 17.8984C27.656 17.8984 27.3181 17.987 27.0186 18.1557C26.7191 18.3243 26.468 18.5673 26.2898 18.8612Z" stroke="#DC6803" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/><rect x="4" y="4" width="48" height="48" rx="24" stroke="#FFFAEB" stroke-width="8"/></svg>`,
|
|
871
|
+
title: `Unsaved changes`,
|
|
872
|
+
content: `Do you want to save as draft?`,
|
|
873
|
+
buttontype: 'draft'
|
|
874
|
+
};
|
|
875
|
+
dialogRef.result.then((res) => {
|
|
876
|
+
if (!res) {
|
|
877
|
+
this.popupCount = 0;
|
|
878
|
+
}
|
|
879
|
+
if (res) {
|
|
880
|
+
if (type == 'create') {
|
|
881
|
+
this.saveChecklistQuestions('saveAsDraft');
|
|
882
|
+
}
|
|
883
|
+
else {
|
|
884
|
+
this.updateChecklistQuestions('saveAsDraft');
|
|
885
|
+
}
|
|
886
|
+
}
|
|
887
|
+
});
|
|
888
|
+
}
|
|
889
|
+
updateChecklistQuestions(type) {
|
|
890
|
+
let sectionsarray = [];
|
|
891
|
+
let checklist;
|
|
892
|
+
if (!this.ChecklistForm.get('checklistName')?.valid) {
|
|
893
|
+
let err = 'Please enter checklist name!';
|
|
894
|
+
this.swalToast(err, 'error');
|
|
895
|
+
return;
|
|
896
|
+
}
|
|
897
|
+
// console.log(this.ChecklistForm);
|
|
898
|
+
// return;
|
|
899
|
+
checklist = this.ChecklistForm.value;
|
|
900
|
+
if (!this.ChecklistForm.valid) {
|
|
901
|
+
this.markFormControlsAsTouched(this.ChecklistForm, 0);
|
|
902
|
+
this.scrollToErrors(this.ChecklistForm.get('sections'));
|
|
903
|
+
return;
|
|
904
|
+
}
|
|
905
|
+
sectionsarray = checklist.sections;
|
|
906
|
+
if (!this.ChecklistForm.get('checklistName')?.valid) {
|
|
907
|
+
let err = 'Please enter checklist name!';
|
|
908
|
+
this.swalToast(err, 'error');
|
|
909
|
+
return;
|
|
910
|
+
}
|
|
911
|
+
if (type == 'saveAsDraft') {
|
|
912
|
+
checklist.submitType = 'save';
|
|
913
|
+
}
|
|
914
|
+
else {
|
|
915
|
+
checklist.submitType = 'configure';
|
|
916
|
+
}
|
|
917
|
+
if (!sectionsarray.length) {
|
|
918
|
+
let err = 'Please add atleast one section!';
|
|
919
|
+
this.swalToast(err, 'error');
|
|
920
|
+
return;
|
|
921
|
+
}
|
|
922
|
+
for (let i = 0; i < sectionsarray.length; i++) {
|
|
923
|
+
if (type == 'configure' && !sectionsarray[i].questions.length) {
|
|
924
|
+
let err = 'Please add atleast one question in section!';
|
|
925
|
+
this.swalToast(err, 'error');
|
|
926
|
+
return;
|
|
927
|
+
}
|
|
928
|
+
for (let j = 0; j < sectionsarray[i].questions.length; j++) {
|
|
929
|
+
if (sectionsarray[i].questions[j].answerType != 'descriptive') {
|
|
930
|
+
delete sectionsarray[i].questions[j].descriptivetype;
|
|
931
|
+
}
|
|
932
|
+
if (["multiplechoicemultiple"].includes(sectionsarray[i].questions[j].answerType)) {
|
|
933
|
+
for (let k = 0; k < sectionsarray[i].questions[j].answers.length; k++) {
|
|
934
|
+
// sectionsarray[i].questions[j].answers[k]['answerInputStyle'] = sectionsarray[i].questions[j].answerType;
|
|
935
|
+
// sectionsarray[i].questions[j].answers[k]['referenceImage'] = "";
|
|
936
|
+
// sectionsarray[i].questions[j].answers[k]['allowUploadfromGallery'] = false;
|
|
937
|
+
// sectionsarray[i].questions[j].answers[k]['validationAnswer'] = "";
|
|
938
|
+
// sectionsarray[i].questions[j].answers[k]['runAI'] = false;
|
|
939
|
+
sectionsarray[i].questions[j].answers[k]['showLinked'] = false;
|
|
940
|
+
sectionsarray[i].questions[j].answers[k]['linkedQuestion'] = 0;
|
|
941
|
+
}
|
|
942
|
+
sectionsarray[i].questions[j].allowUploadfromGallery = false;
|
|
943
|
+
}
|
|
944
|
+
else {
|
|
945
|
+
if (typeof sectionsarray[i].questions[j].answers === 'object' &&
|
|
946
|
+
sectionsarray[i].questions[j].answers !== null &&
|
|
947
|
+
!Array.isArray(sectionsarray[i].questions[j].answers) || ['descriptive', 'date'].includes(sectionsarray[i].questions[j].answerType)) {
|
|
948
|
+
let item = {
|
|
949
|
+
"answer": "",
|
|
950
|
+
"answeroptionNumber": 1,
|
|
951
|
+
"sopFlag": false,
|
|
952
|
+
"validation": false,
|
|
953
|
+
"validationAnswer": "",
|
|
954
|
+
"validationType": "",
|
|
955
|
+
"referenceImage": sectionsarray[i].questions[j].answers?.referenceImage ? sectionsarray[i].questions[j].answers?.referenceImage : "",
|
|
956
|
+
"showLinked": false,
|
|
957
|
+
"linkedQuestion": 0,
|
|
958
|
+
...(sectionsarray[i].questions[j].answerType == 'multipleImage' ? { 'descriptivetype': sectionsarray[i].questions[j].answers?.descriptivetype } : {})
|
|
959
|
+
// "allowUploadfromGallery": sectionsarray[i].questions[j].answers?.allowUploadfromGallery ? sectionsarray[i].questions[j].answers?.allowUploadfromGallery : false,
|
|
960
|
+
// "answerInputStyle": sectionsarray[i].questions[j].answers?.answerInputStyle ? sectionsarray[i].questions[j].answers?.answerInputStyle : "",
|
|
961
|
+
// "runAI": sectionsarray[i].questions[j].answers.runAI ? sectionsarray[i].questions[j].answers.runAI : false,
|
|
962
|
+
};
|
|
963
|
+
sectionsarray[i].questions[j].allowUploadfromGallery = sectionsarray[i].questions[j].answers?.allowUploadfromGallery ? sectionsarray[i].questions[j].answers?.allowUploadfromGallery : false;
|
|
964
|
+
if (sectionsarray[i].questions[j].answerType == 'multipleImage') {
|
|
965
|
+
sectionsarray[i].questions[j].descriptivetype = sectionsarray[i].questions[j].answers?.descriptivetype ? sectionsarray[i].questions[j].answers?.descriptivetype : 'text';
|
|
966
|
+
}
|
|
967
|
+
sectionsarray[i].questions[j].answers = [item];
|
|
968
|
+
}
|
|
969
|
+
}
|
|
970
|
+
}
|
|
971
|
+
}
|
|
972
|
+
checklist.sections = sectionsarray;
|
|
973
|
+
this.sopService.getupdatechecklist(this.editvalue, checklist).subscribe((res) => {
|
|
974
|
+
if (res) {
|
|
975
|
+
if (res?.code == 200) {
|
|
976
|
+
if (type == 'configure') {
|
|
977
|
+
this.router.navigateByUrl(`/manage/trax/configure?checkListId=${res.data.checklistId}`);
|
|
978
|
+
}
|
|
979
|
+
else {
|
|
980
|
+
this.router.navigateByUrl('/manage/trax/checklist');
|
|
981
|
+
}
|
|
982
|
+
}
|
|
983
|
+
else {
|
|
984
|
+
this.swalToast('Unable to update checklist!', 'error');
|
|
985
|
+
}
|
|
986
|
+
}
|
|
987
|
+
else {
|
|
988
|
+
this.swalToast('Unable to update checklist!', 'error');
|
|
989
|
+
}
|
|
990
|
+
}, (error) => {
|
|
991
|
+
if (error.code == 403) {
|
|
992
|
+
this.router.navigate(['/error403']);
|
|
993
|
+
}
|
|
994
|
+
if (error.code == 400) {
|
|
995
|
+
let err = error?.error?.message;
|
|
996
|
+
this.swalToast(err);
|
|
997
|
+
}
|
|
998
|
+
else {
|
|
999
|
+
this.swalToast('Unable to create checklist!Server Error!', 'error');
|
|
1000
|
+
}
|
|
1001
|
+
});
|
|
1002
|
+
}
|
|
1003
|
+
markFormControlsAsTouched(control, sectionIndex) {
|
|
1004
|
+
control.markAsTouched();
|
|
1005
|
+
if (control instanceof FormGroup) {
|
|
1006
|
+
for (const controlName in control.controls) {
|
|
1007
|
+
this.markFormControlsAsTouched(control.get(controlName));
|
|
1008
|
+
}
|
|
1009
|
+
}
|
|
1010
|
+
else if (control instanceof FormArray) {
|
|
1011
|
+
control.controls.forEach(formControl => {
|
|
1012
|
+
this.markFormControlsAsTouched(formControl);
|
|
1013
|
+
});
|
|
1014
|
+
}
|
|
1015
|
+
}
|
|
1016
|
+
scrollToErrors(sections) {
|
|
1017
|
+
for (let i = 0; i < sections.length; i++) {
|
|
1018
|
+
let section = sections.at(i);
|
|
1019
|
+
if (section.invalid) {
|
|
1020
|
+
let questions = section.get('questions');
|
|
1021
|
+
for (let j = 0; j < questions.length; j++) {
|
|
1022
|
+
let question = questions.at(j);
|
|
1023
|
+
console.log(question, 'question');
|
|
1024
|
+
if (question.invalid) {
|
|
1025
|
+
this.show = i;
|
|
1026
|
+
this.scrollToQuestion(i, j);
|
|
1027
|
+
this.swalToast('Please fill out all the fields!', 'error');
|
|
1028
|
+
return;
|
|
1029
|
+
}
|
|
1030
|
+
}
|
|
1031
|
+
return;
|
|
1032
|
+
}
|
|
1033
|
+
}
|
|
1034
|
+
}
|
|
1035
|
+
swalToast(err, type, icon) {
|
|
1036
|
+
if (type == 'error') {
|
|
1037
|
+
this.toast.getErrorToast(err);
|
|
1038
|
+
}
|
|
1039
|
+
else {
|
|
1040
|
+
this.toast.getSuccessToast(err);
|
|
1041
|
+
}
|
|
1042
|
+
// Swal.fire({
|
|
1043
|
+
// toast: true,
|
|
1044
|
+
// ...( icon ? { iconHtml: icon } : {}),
|
|
1045
|
+
// // titleText: `Checklist Form Error`,
|
|
1046
|
+
// html: `<div class="row ">
|
|
1047
|
+
// <div class="col-12 mt-2">
|
|
1048
|
+
// <div class="toasttitile">${err}</div>
|
|
1049
|
+
// </div>
|
|
1050
|
+
// </div>`,
|
|
1051
|
+
// position: 'bottom',
|
|
1052
|
+
// showConfirmButton: false,
|
|
1053
|
+
// showCloseButton: true,
|
|
1054
|
+
// timer: 6000,
|
|
1055
|
+
// timerProgressBar: true,
|
|
1056
|
+
// didOpen: (toast) => {
|
|
1057
|
+
// toast.addEventListener('mouseenter', Swal.stopTimer)
|
|
1058
|
+
// toast.addEventListener('mouseleave', Swal.resumeTimer)
|
|
1059
|
+
// $("#kt_create_account_form_account_type_personal")?.val('');
|
|
1060
|
+
// this.changedetector.detectChanges();
|
|
1061
|
+
// }
|
|
1062
|
+
// });
|
|
1063
|
+
}
|
|
1064
|
+
RunAI(sIdx, qIdx, ansIdx = -1) {
|
|
1065
|
+
let dialogRef;
|
|
1066
|
+
let question = this.getQuestionFormControl(sIdx, qIdx, 'qname')?.value;
|
|
1067
|
+
if (this.getAnswerFormGroup_FormControl(sIdx, qIdx, 'runAI', ansIdx)?.value == false) {
|
|
1068
|
+
if (!question || !this.ChecklistForm.get('checklistName')?.value) {
|
|
1069
|
+
let err = !question ? 'Please enter question to continue!' : 'Please enter Checklist Name to continue!';
|
|
1070
|
+
this.swalToast(err, 'error');
|
|
1071
|
+
this.runAIOff(sIdx, qIdx, false, ansIdx);
|
|
1072
|
+
return;
|
|
1073
|
+
}
|
|
1074
|
+
else {
|
|
1075
|
+
const dialogRef = this.dialog.open(TraxpopupComponent, { centered: true, size: 'md' });
|
|
1076
|
+
dialogRef.componentInstance.data = {
|
|
1077
|
+
imagesrc: `<svg xmlns="http://www.w3.org/2000/svg" width="56" height="56" viewBox="0 0 56 56" fill="none"><rect x="4" y="4" width="48" height="48" rx="24" fill="#D1FADF"/><path d="M23.3564 19.3525C24.1748 18.7327 25.1738 18.3985 26.2004 18.4009C26.5549 18.393 26.9057 18.4746 27.2204 18.6382C27.535 18.8018 27.8033 19.0421 28.0004 19.3369C28.1975 19.0421 28.4658 18.8018 28.7804 18.6382C29.095 18.4746 29.4459 18.393 29.8004 18.4009C30.827 18.3985 31.826 18.7327 32.6444 19.3525C33.2744 19.8421 33.7604 20.5201 33.932 21.3397C34.3256 21.3697 34.6856 21.5329 34.988 21.7789C35.4464 22.1509 35.78 22.7089 35.99 23.2993C36.3188 24.2173 36.4076 25.3873 36.0668 26.3833C36.1532 26.4241 36.2384 26.4721 36.3212 26.5273C36.6512 26.7469 36.902 27.0613 37.0868 27.4321C37.4504 28.1581 37.6004 29.1709 37.6004 30.4009C37.6004 31.7701 37.0784 32.6893 36.416 33.2569C36.0497 33.571 35.6174 33.7986 35.1512 33.9229C35.0312 34.5925 34.6952 35.3677 34.1684 36.0253C33.4844 36.8833 32.4236 37.6009 31.0004 37.6009C29.8724 37.6009 28.9748 36.9769 28.3916 36.3649C28.2522 36.2188 28.1215 36.0645 28.0004 35.9029C27.8793 36.0645 27.7486 36.2188 27.6092 36.3649C27.026 36.9769 26.1296 37.6009 25.0004 37.6009C23.5772 37.6009 22.5176 36.8833 21.8324 36.0253C21.3401 35.414 21.0029 34.6927 20.8496 33.9229C20.3834 33.7986 19.9511 33.571 19.5848 33.2569C18.9224 32.6893 18.4004 31.7689 18.4004 30.4009C18.4004 29.1709 18.5516 28.1569 18.914 27.4321C19.0857 27.0685 19.3497 26.7561 19.6796 26.5261C19.7606 26.4725 19.8457 26.4251 19.934 26.3845C19.5932 25.3861 19.682 24.2173 20.0108 23.2993C20.2208 22.7089 20.5544 22.1509 21.0128 21.7789C21.3152 21.5329 21.6752 21.3709 22.0688 21.3397C22.2416 20.5201 22.7264 19.8421 23.3564 19.3525ZM27.4004 21.4009V21.3889L27.398 21.3289C27.3803 21.0161 27.3181 20.7074 27.2132 20.4121C27.1385 20.1892 27.0113 19.9876 26.8424 19.8241C26.6651 19.6698 26.4352 19.5898 26.2004 19.6009C25.4407 19.5983 24.7009 19.8435 24.0932 20.2993C23.5364 20.7325 23.2004 21.3193 23.2004 22.0009C23.2003 22.0959 23.1777 22.1896 23.1343 22.2741C23.091 22.3587 23.0282 22.4318 22.9511 22.4873C22.874 22.5428 22.7848 22.5793 22.6909 22.5936C22.5969 22.6079 22.5009 22.5997 22.4108 22.5697C22.1852 22.4953 21.9836 22.5373 21.7688 22.7101C21.5336 22.9021 21.3044 23.2429 21.14 23.7025C20.8052 24.6409 20.84 25.7773 21.2996 26.4685C21.3652 26.567 21.4003 26.6826 21.4004 26.8009H22.3004C23.0165 26.8009 23.7032 27.0854 24.2096 27.5917C24.7159 28.0981 25.0004 28.7848 25.0004 29.5009V29.9029C25.4007 30.0445 25.7381 30.323 25.953 30.6892C26.1678 31.0555 26.2463 31.4859 26.1745 31.9044C26.1027 32.3229 25.8852 32.7025 25.5606 32.9762C25.2359 33.2499 24.825 33.4 24.4004 33.4C23.9758 33.4 23.5648 33.2499 23.2402 32.9762C22.9156 32.7025 22.6981 32.3229 22.6263 31.9044C22.5545 31.4859 22.633 31.0555 22.8478 30.6892C23.0627 30.323 23.4001 30.0445 23.8004 29.9029V29.5009C23.8004 28.6729 23.1284 28.0009 22.3004 28.0009H20.2004C20.1287 28.0008 20.0575 27.9878 19.9904 27.9625L19.9868 27.9697C19.7492 28.4437 19.6004 29.2309 19.6004 30.4009C19.6004 31.4317 19.9784 32.0125 20.366 32.3449C20.7824 32.7025 21.2444 32.8009 21.4004 32.8009C21.5595 32.8009 21.7121 32.8641 21.8247 32.9767C21.9372 33.0892 22.0004 33.2418 22.0004 33.4009C22.0004 33.8425 22.2404 34.6141 22.7684 35.2765C23.2832 35.9185 24.0236 36.4009 25.0004 36.4009C25.6724 36.4009 26.2748 36.0253 26.7404 35.5369C26.9696 35.2969 27.1484 35.0485 27.2648 34.8445C27.3178 34.7541 27.3631 34.6593 27.4004 34.5613V25.0009H26.0984C25.9569 25.4012 25.6783 25.7387 25.3121 25.9535C24.9459 26.1683 24.5154 26.2468 24.097 26.175C23.6785 26.1032 23.2988 25.8858 23.0251 25.5611C22.7514 25.2365 22.6013 24.8255 22.6013 24.4009C22.6013 23.9763 22.7514 23.5654 23.0251 23.2407C23.2988 22.9161 23.6785 22.6986 24.097 22.6268C24.5154 22.555 24.9459 22.6335 25.3121 22.8483C25.6783 23.0632 25.9569 23.4006 26.0984 23.8009H27.4004V21.4009ZM28.6004 33.3997V34.5601C28.6377 34.6581 28.683 34.7528 28.736 34.8433C28.8536 35.0473 29.0312 35.2957 29.2592 35.5357C29.726 36.0241 30.3296 36.3997 31.0004 36.3997C31.9772 36.3997 32.7176 35.9173 33.2324 35.2753C33.7604 34.6129 34.0004 33.8413 34.0004 33.3997C34.0004 33.2406 34.0636 33.088 34.1761 32.9755C34.2886 32.8629 34.4413 32.7997 34.6004 32.7997C34.7564 32.7997 35.2184 32.7013 35.6348 32.3437C36.0224 32.0113 36.4004 31.4305 36.4004 30.3997C36.4004 29.2297 36.2504 28.4437 36.014 27.9685C35.9349 27.7916 35.8108 27.6385 35.654 27.5245C35.5189 27.4381 35.3606 27.395 35.2004 27.4009C35.0919 27.4009 34.9854 27.3714 34.8923 27.3156C34.7992 27.2598 34.723 27.1798 34.6717 27.0841C34.6205 26.9884 34.5962 26.8807 34.6014 26.7723C34.6066 26.6638 34.6411 26.5589 34.7012 26.4685C35.162 25.7773 35.1956 24.6409 34.8608 23.7025C34.6964 23.2429 34.4672 22.9009 34.232 22.7101C34.0172 22.5373 33.8156 22.4941 33.59 22.5697C33.4998 22.5997 33.4038 22.6079 33.3099 22.5936C33.216 22.5793 33.1268 22.5428 33.0497 22.4873C32.9726 22.4318 32.9098 22.3587 32.8664 22.2741C32.8231 22.1896 32.8005 22.0959 32.8004 22.0009C32.8004 21.3193 32.4644 20.7325 31.9064 20.2993C31.299 19.8438 30.5596 19.5986 29.8004 19.6009C29.5656 19.5898 29.3356 19.6698 29.1584 19.8241C28.9889 19.9874 28.8613 20.1891 28.7864 20.4121C28.6721 20.7256 28.6093 21.0554 28.6004 21.3889V32.2009H29.5004C30.3284 32.2009 31.0004 31.5289 31.0004 30.7009V28.4989C30.6001 28.3574 30.2627 28.0789 30.0478 27.7126C29.833 27.3464 29.7545 26.916 29.8263 26.4975C29.8981 26.079 30.1156 25.6993 30.4402 25.4257C30.7648 25.152 31.1758 25.0019 31.6004 25.0019C32.025 25.0019 32.4359 25.152 32.7606 25.4257C33.0852 25.6993 33.3027 26.079 33.3745 26.4975C33.4463 26.916 33.3678 27.3464 33.153 27.7126C32.9381 28.0789 32.6007 28.3574 32.2004 28.4989V30.7009C32.2004 31.417 31.9159 32.1038 31.4096 32.6101C30.9032 33.1165 30.2165 33.4009 29.5004 33.4009H28.6004V33.3997ZM23.8004 24.4009C23.8004 24.5601 23.8636 24.7127 23.9761 24.8252C24.0886 24.9377 24.2413 25.0009 24.4004 25.0009C24.5595 25.0009 24.7121 24.9377 24.8247 24.8252C24.9372 24.7127 25.0004 24.5601 25.0004 24.4009C25.0004 24.2418 24.9372 24.0892 24.8247 23.9767C24.7121 23.8641 24.5595 23.8009 24.4004 23.8009C24.2413 23.8009 24.0886 23.8641 23.9761 23.9767C23.8636 24.0892 23.8004 24.2418 23.8004 24.4009ZM31.6004 27.4009C31.7595 27.4009 31.9121 27.3377 32.0247 27.2252C32.1372 27.1127 32.2004 26.9601 32.2004 26.8009C32.2004 26.6418 32.1372 26.4892 32.0247 26.3767C31.9121 26.2641 31.7595 26.2009 31.6004 26.2009C31.4413 26.2009 31.2886 26.2641 31.1761 26.3767C31.0636 26.4892 31.0004 26.6418 31.0004 26.8009C31.0004 26.9601 31.0636 27.1127 31.1761 27.2252C31.2886 27.3377 31.4413 27.4009 31.6004 27.4009ZM24.4004 31.0009C24.2413 31.0009 24.0886 31.0641 23.9761 31.1767C23.8636 31.2892 23.8004 31.4418 23.8004 31.6009C23.8004 31.7601 23.8636 31.9127 23.9761 32.0252C24.0886 32.1377 24.2413 32.2009 24.4004 32.2009C24.5595 32.2009 24.7121 32.1377 24.8247 32.0252C24.9372 31.9127 25.0004 31.7601 25.0004 31.6009C25.0004 31.4418 24.9372 31.2892 24.8247 31.1767C24.7121 31.0641 24.5595 31.0009 24.4004 31.0009Z" fill="#039855"/><rect x="4" y="4" width="48" height="48" rx="24" stroke="#ECFDF3" stroke-width="8"/></svg>`,
|
|
1078
|
+
title: `Run AI on image uploaded`,
|
|
1079
|
+
content: `Use the power of AI to compare and detect anomalies between uploaded and reference image.`,
|
|
1080
|
+
inputlabel1: 'Question',
|
|
1081
|
+
inputtype1: 'text',
|
|
1082
|
+
input1: 'true',
|
|
1083
|
+
inputlabel2: 'Specify your request',
|
|
1084
|
+
inputtype2: 'text',
|
|
1085
|
+
resType: 'custom',
|
|
1086
|
+
input2: 'true',
|
|
1087
|
+
placeholder1: question,
|
|
1088
|
+
placeholder2: 'Please compare the uploaded images a..',
|
|
1089
|
+
buttontype: 'Request'
|
|
1090
|
+
};
|
|
1091
|
+
dialogRef.result.then((res) => {
|
|
1092
|
+
if (res && res.status == 'confirm') {
|
|
1093
|
+
let req = {
|
|
1094
|
+
checklistName: this.ChecklistForm.get('checklistName')?.value,
|
|
1095
|
+
questionName: question,
|
|
1096
|
+
runAIDescription: res.data.requestText,
|
|
1097
|
+
answerType: "image",
|
|
1098
|
+
referenceImage: this.getAnswerFormGroup_FormControl(sIdx, qIdx, 'referenceImage', ansIdx)?.value || ''
|
|
1099
|
+
};
|
|
1100
|
+
this.sopService.runAIInsert(req).subscribe((apires) => {
|
|
1101
|
+
if (apires) {
|
|
1102
|
+
if (apires.code == 200) {
|
|
1103
|
+
this.getAnswerFormGroup_FormControl(sIdx, qIdx, 'runAI', ansIdx)?.patchValue(true);
|
|
1104
|
+
this.getQuestionFormControl(sIdx, qIdx, 'runAI', ansIdx)?.patchValue(true);
|
|
1105
|
+
this.getQuestionFormControl(sIdx, qIdx, 'runAIDescription', ansIdx)?.patchValue(res.data.requestText);
|
|
1106
|
+
this.swalToast(`<span style="padding-right: 36px;">${apires.data.message}</span>
|
|
1107
|
+
<a
|
|
1108
|
+
href="/support/view-tickets"
|
|
1109
|
+
target="_blank"
|
|
1110
|
+
style="color: var(--primary-700, #009BF3);font-family: Roboto;font-size: 15px;font-weight: 700;text-decoration: underline;cursor: pointer;">
|
|
1111
|
+
View Ticket
|
|
1112
|
+
</a>`, `<img src="../../../../assets/Icons/sop-runai-tosticon.svg" />`);
|
|
1113
|
+
}
|
|
1114
|
+
else {
|
|
1115
|
+
this.runAIOff(sIdx, qIdx, true, ansIdx);
|
|
1116
|
+
}
|
|
1117
|
+
}
|
|
1118
|
+
else {
|
|
1119
|
+
this.runAIOff(sIdx, qIdx, true, ansIdx);
|
|
1120
|
+
}
|
|
1121
|
+
}, (error) => {
|
|
1122
|
+
this.runAIOff(sIdx, qIdx, true, ansIdx);
|
|
1123
|
+
});
|
|
1124
|
+
}
|
|
1125
|
+
else {
|
|
1126
|
+
this.runAIOff(sIdx, qIdx, false, ansIdx);
|
|
1127
|
+
}
|
|
1128
|
+
});
|
|
1129
|
+
}
|
|
1130
|
+
}
|
|
1131
|
+
else {
|
|
1132
|
+
const dialogRef = this.dialog.open(TraxpopupComponent, { centered: true, size: 'md' });
|
|
1133
|
+
dialogRef.componentInstance.data = {
|
|
1134
|
+
imagesrc: `<svg xmlns="http://www.w3.org/2000/svg" width="56" height="56" viewBox="0 0 56 56" fill="none"><rect x="4" y="4" width="48" height="48" rx="24" fill="#D1FADF"/><path d="M23.3564 19.3525C24.1748 18.7327 25.1738 18.3985 26.2004 18.4009C26.5549 18.393 26.9057 18.4746 27.2204 18.6382C27.535 18.8018 27.8033 19.0421 28.0004 19.3369C28.1975 19.0421 28.4658 18.8018 28.7804 18.6382C29.095 18.4746 29.4459 18.393 29.8004 18.4009C30.827 18.3985 31.826 18.7327 32.6444 19.3525C33.2744 19.8421 33.7604 20.5201 33.932 21.3397C34.3256 21.3697 34.6856 21.5329 34.988 21.7789C35.4464 22.1509 35.78 22.7089 35.99 23.2993C36.3188 24.2173 36.4076 25.3873 36.0668 26.3833C36.1532 26.4241 36.2384 26.4721 36.3212 26.5273C36.6512 26.7469 36.902 27.0613 37.0868 27.4321C37.4504 28.1581 37.6004 29.1709 37.6004 30.4009C37.6004 31.7701 37.0784 32.6893 36.416 33.2569C36.0497 33.571 35.6174 33.7986 35.1512 33.9229C35.0312 34.5925 34.6952 35.3677 34.1684 36.0253C33.4844 36.8833 32.4236 37.6009 31.0004 37.6009C29.8724 37.6009 28.9748 36.9769 28.3916 36.3649C28.2522 36.2188 28.1215 36.0645 28.0004 35.9029C27.8793 36.0645 27.7486 36.2188 27.6092 36.3649C27.026 36.9769 26.1296 37.6009 25.0004 37.6009C23.5772 37.6009 22.5176 36.8833 21.8324 36.0253C21.3401 35.414 21.0029 34.6927 20.8496 33.9229C20.3834 33.7986 19.9511 33.571 19.5848 33.2569C18.9224 32.6893 18.4004 31.7689 18.4004 30.4009C18.4004 29.1709 18.5516 28.1569 18.914 27.4321C19.0857 27.0685 19.3497 26.7561 19.6796 26.5261C19.7606 26.4725 19.8457 26.4251 19.934 26.3845C19.5932 25.3861 19.682 24.2173 20.0108 23.2993C20.2208 22.7089 20.5544 22.1509 21.0128 21.7789C21.3152 21.5329 21.6752 21.3709 22.0688 21.3397C22.2416 20.5201 22.7264 19.8421 23.3564 19.3525ZM27.4004 21.4009V21.3889L27.398 21.3289C27.3803 21.0161 27.3181 20.7074 27.2132 20.4121C27.1385 20.1892 27.0113 19.9876 26.8424 19.8241C26.6651 19.6698 26.4352 19.5898 26.2004 19.6009C25.4407 19.5983 24.7009 19.8435 24.0932 20.2993C23.5364 20.7325 23.2004 21.3193 23.2004 22.0009C23.2003 22.0959 23.1777 22.1896 23.1343 22.2741C23.091 22.3587 23.0282 22.4318 22.9511 22.4873C22.874 22.5428 22.7848 22.5793 22.6909 22.5936C22.5969 22.6079 22.5009 22.5997 22.4108 22.5697C22.1852 22.4953 21.9836 22.5373 21.7688 22.7101C21.5336 22.9021 21.3044 23.2429 21.14 23.7025C20.8052 24.6409 20.84 25.7773 21.2996 26.4685C21.3652 26.567 21.4003 26.6826 21.4004 26.8009H22.3004C23.0165 26.8009 23.7032 27.0854 24.2096 27.5917C24.7159 28.0981 25.0004 28.7848 25.0004 29.5009V29.9029C25.4007 30.0445 25.7381 30.323 25.953 30.6892C26.1678 31.0555 26.2463 31.4859 26.1745 31.9044C26.1027 32.3229 25.8852 32.7025 25.5606 32.9762C25.2359 33.2499 24.825 33.4 24.4004 33.4C23.9758 33.4 23.5648 33.2499 23.2402 32.9762C22.9156 32.7025 22.6981 32.3229 22.6263 31.9044C22.5545 31.4859 22.633 31.0555 22.8478 30.6892C23.0627 30.323 23.4001 30.0445 23.8004 29.9029V29.5009C23.8004 28.6729 23.1284 28.0009 22.3004 28.0009H20.2004C20.1287 28.0008 20.0575 27.9878 19.9904 27.9625L19.9868 27.9697C19.7492 28.4437 19.6004 29.2309 19.6004 30.4009C19.6004 31.4317 19.9784 32.0125 20.366 32.3449C20.7824 32.7025 21.2444 32.8009 21.4004 32.8009C21.5595 32.8009 21.7121 32.8641 21.8247 32.9767C21.9372 33.0892 22.0004 33.2418 22.0004 33.4009C22.0004 33.8425 22.2404 34.6141 22.7684 35.2765C23.2832 35.9185 24.0236 36.4009 25.0004 36.4009C25.6724 36.4009 26.2748 36.0253 26.7404 35.5369C26.9696 35.2969 27.1484 35.0485 27.2648 34.8445C27.3178 34.7541 27.3631 34.6593 27.4004 34.5613V25.0009H26.0984C25.9569 25.4012 25.6783 25.7387 25.3121 25.9535C24.9459 26.1683 24.5154 26.2468 24.097 26.175C23.6785 26.1032 23.2988 25.8858 23.0251 25.5611C22.7514 25.2365 22.6013 24.8255 22.6013 24.4009C22.6013 23.9763 22.7514 23.5654 23.0251 23.2407C23.2988 22.9161 23.6785 22.6986 24.097 22.6268C24.5154 22.555 24.9459 22.6335 25.3121 22.8483C25.6783 23.0632 25.9569 23.4006 26.0984 23.8009H27.4004V21.4009ZM28.6004 33.3997V34.5601C28.6377 34.6581 28.683 34.7528 28.736 34.8433C28.8536 35.0473 29.0312 35.2957 29.2592 35.5357C29.726 36.0241 30.3296 36.3997 31.0004 36.3997C31.9772 36.3997 32.7176 35.9173 33.2324 35.2753C33.7604 34.6129 34.0004 33.8413 34.0004 33.3997C34.0004 33.2406 34.0636 33.088 34.1761 32.9755C34.2886 32.8629 34.4413 32.7997 34.6004 32.7997C34.7564 32.7997 35.2184 32.7013 35.6348 32.3437C36.0224 32.0113 36.4004 31.4305 36.4004 30.3997C36.4004 29.2297 36.2504 28.4437 36.014 27.9685C35.9349 27.7916 35.8108 27.6385 35.654 27.5245C35.5189 27.4381 35.3606 27.395 35.2004 27.4009C35.0919 27.4009 34.9854 27.3714 34.8923 27.3156C34.7992 27.2598 34.723 27.1798 34.6717 27.0841C34.6205 26.9884 34.5962 26.8807 34.6014 26.7723C34.6066 26.6638 34.6411 26.5589 34.7012 26.4685C35.162 25.7773 35.1956 24.6409 34.8608 23.7025C34.6964 23.2429 34.4672 22.9009 34.232 22.7101C34.0172 22.5373 33.8156 22.4941 33.59 22.5697C33.4998 22.5997 33.4038 22.6079 33.3099 22.5936C33.216 22.5793 33.1268 22.5428 33.0497 22.4873C32.9726 22.4318 32.9098 22.3587 32.8664 22.2741C32.8231 22.1896 32.8005 22.0959 32.8004 22.0009C32.8004 21.3193 32.4644 20.7325 31.9064 20.2993C31.299 19.8438 30.5596 19.5986 29.8004 19.6009C29.5656 19.5898 29.3356 19.6698 29.1584 19.8241C28.9889 19.9874 28.8613 20.1891 28.7864 20.4121C28.6721 20.7256 28.6093 21.0554 28.6004 21.3889V32.2009H29.5004C30.3284 32.2009 31.0004 31.5289 31.0004 30.7009V28.4989C30.6001 28.3574 30.2627 28.0789 30.0478 27.7126C29.833 27.3464 29.7545 26.916 29.8263 26.4975C29.8981 26.079 30.1156 25.6993 30.4402 25.4257C30.7648 25.152 31.1758 25.0019 31.6004 25.0019C32.025 25.0019 32.4359 25.152 32.7606 25.4257C33.0852 25.6993 33.3027 26.079 33.3745 26.4975C33.4463 26.916 33.3678 27.3464 33.153 27.7126C32.9381 28.0789 32.6007 28.3574 32.2004 28.4989V30.7009C32.2004 31.417 31.9159 32.1038 31.4096 32.6101C30.9032 33.1165 30.2165 33.4009 29.5004 33.4009H28.6004V33.3997ZM23.8004 24.4009C23.8004 24.5601 23.8636 24.7127 23.9761 24.8252C24.0886 24.9377 24.2413 25.0009 24.4004 25.0009C24.5595 25.0009 24.7121 24.9377 24.8247 24.8252C24.9372 24.7127 25.0004 24.5601 25.0004 24.4009C25.0004 24.2418 24.9372 24.0892 24.8247 23.9767C24.7121 23.8641 24.5595 23.8009 24.4004 23.8009C24.2413 23.8009 24.0886 23.8641 23.9761 23.9767C23.8636 24.0892 23.8004 24.2418 23.8004 24.4009ZM31.6004 27.4009C31.7595 27.4009 31.9121 27.3377 32.0247 27.2252C32.1372 27.1127 32.2004 26.9601 32.2004 26.8009C32.2004 26.6418 32.1372 26.4892 32.0247 26.3767C31.9121 26.2641 31.7595 26.2009 31.6004 26.2009C31.4413 26.2009 31.2886 26.2641 31.1761 26.3767C31.0636 26.4892 31.0004 26.6418 31.0004 26.8009C31.0004 26.9601 31.0636 27.1127 31.1761 27.2252C31.2886 27.3377 31.4413 27.4009 31.6004 27.4009ZM24.4004 31.0009C24.2413 31.0009 24.0886 31.0641 23.9761 31.1767C23.8636 31.2892 23.8004 31.4418 23.8004 31.6009C23.8004 31.7601 23.8636 31.9127 23.9761 32.0252C24.0886 32.1377 24.2413 32.2009 24.4004 32.2009C24.5595 32.2009 24.7121 32.1377 24.8247 32.0252C24.9372 31.9127 25.0004 31.7601 25.0004 31.6009C25.0004 31.4418 24.9372 31.2892 24.8247 31.1767C24.7121 31.0641 24.5595 31.0009 24.4004 31.0009Z" fill="#039855"/><rect x="4" y="4" width="48" height="48" rx="24" stroke="#ECFDF3" stroke-width="8"/></svg>`,
|
|
1135
|
+
title: `Don't run AI on image uploaded`,
|
|
1136
|
+
content: `Do you wish to not run AI in the image?`,
|
|
1137
|
+
buttontype: 'confirm'
|
|
1138
|
+
};
|
|
1139
|
+
dialogRef.result.then((res) => {
|
|
1140
|
+
if (res) {
|
|
1141
|
+
this.runAIOff(sIdx, qIdx, false, ansIdx);
|
|
1142
|
+
}
|
|
1143
|
+
else {
|
|
1144
|
+
this.getAnswerFormGroup_FormControl(sIdx, qIdx, 'runAI')?.patchValue(true);
|
|
1145
|
+
this.getQuestionFormControl(sIdx, qIdx, 'runAI')?.patchValue(true);
|
|
1146
|
+
}
|
|
1147
|
+
});
|
|
1148
|
+
}
|
|
1149
|
+
}
|
|
1150
|
+
runAIOff(sIdx, qIdx, showError, ansIdx = -1) {
|
|
1151
|
+
const answerFormGroup = this.getAnswerFormGroup_FormControl(sIdx, qIdx, 'runAI', ansIdx);
|
|
1152
|
+
if (answerFormGroup) {
|
|
1153
|
+
answerFormGroup.patchValue(false);
|
|
1154
|
+
}
|
|
1155
|
+
const questionControl = this.getQuestionFormControl(sIdx, qIdx, 'runAI', ansIdx);
|
|
1156
|
+
if (questionControl) {
|
|
1157
|
+
questionControl.patchValue(false);
|
|
1158
|
+
}
|
|
1159
|
+
// console.log(questionControl);
|
|
1160
|
+
const descriptionControl = this.getQuestionFormControl(sIdx, qIdx, 'runAIDescription', ansIdx);
|
|
1161
|
+
if (descriptionControl) {
|
|
1162
|
+
descriptionControl.patchValue('');
|
|
1163
|
+
}
|
|
1164
|
+
if (showError) {
|
|
1165
|
+
this.swalToast('Unable to process runAI request! Try again after some time!', 'error');
|
|
1166
|
+
}
|
|
1167
|
+
}
|
|
1168
|
+
getSectionFormArray() {
|
|
1169
|
+
return this.ChecklistForm.get('sections');
|
|
1170
|
+
}
|
|
1171
|
+
getFormControl(formControl) {
|
|
1172
|
+
return this.ChecklistForm.get(formControl);
|
|
1173
|
+
}
|
|
1174
|
+
getSectionFormControl(sectionIndex, formControlName) {
|
|
1175
|
+
return this.ChecklistForm.get('sections')
|
|
1176
|
+
.at(sectionIndex)
|
|
1177
|
+
.get(formControlName);
|
|
1178
|
+
}
|
|
1179
|
+
getQuestionFormControl(sectionIndex, questionIndex, formControlName, ansIdx = -1) {
|
|
1180
|
+
const sections = this.ChecklistForm.get('sections');
|
|
1181
|
+
if (!sections)
|
|
1182
|
+
return null;
|
|
1183
|
+
const section = sections.at(sectionIndex);
|
|
1184
|
+
if (!section)
|
|
1185
|
+
return null;
|
|
1186
|
+
const questions = section.get('questions');
|
|
1187
|
+
if (!questions)
|
|
1188
|
+
return null;
|
|
1189
|
+
let question = questions.at(questionIndex);
|
|
1190
|
+
if (!question)
|
|
1191
|
+
return null;
|
|
1192
|
+
if (ansIdx != -1) {
|
|
1193
|
+
let answerList = question.get('answers');
|
|
1194
|
+
if (!answerList)
|
|
1195
|
+
return null;
|
|
1196
|
+
question = answerList.at(ansIdx);
|
|
1197
|
+
if (!question)
|
|
1198
|
+
return null;
|
|
1199
|
+
}
|
|
1200
|
+
const control = question.get(formControlName);
|
|
1201
|
+
return control;
|
|
1202
|
+
}
|
|
1203
|
+
getFormArrayQuestions(sectionIndex) {
|
|
1204
|
+
return this.ChecklistForm.get('sections').at(sectionIndex).get('questions');
|
|
1205
|
+
}
|
|
1206
|
+
// individual question
|
|
1207
|
+
getQuestionsFormGroup(sectionIndex, questionIndex) {
|
|
1208
|
+
return this.ChecklistForm.get('sections').at(sectionIndex).get('questions').at(questionIndex);
|
|
1209
|
+
}
|
|
1210
|
+
getFormArrayQuestionsAnswer(sectionIndex, questionIndex, formArrayName, ansIndex = -1, linkquestionIndex = -1) {
|
|
1211
|
+
let section = this.ChecklistForm.get('sections')?.at(sectionIndex);
|
|
1212
|
+
let questions = section.get('questions')?.at(questionIndex);
|
|
1213
|
+
if (ansIndex == -1) {
|
|
1214
|
+
return questions.get(formArrayName);
|
|
1215
|
+
}
|
|
1216
|
+
else {
|
|
1217
|
+
let answers = questions.get('answers')?.at(ansIndex);
|
|
1218
|
+
let linkedIndex = answers.get('linkQuestionAnswers').at(linkquestionIndex);
|
|
1219
|
+
return linkedIndex.get('answers');
|
|
1220
|
+
}
|
|
1221
|
+
}
|
|
1222
|
+
getFormArrayLinkedQuestions(sectionIndex, questionIndex, answerIndex) {
|
|
1223
|
+
let section = this.ChecklistForm.get('sections')?.at(sectionIndex);
|
|
1224
|
+
let questions = section.get('questions')?.at(questionIndex);
|
|
1225
|
+
let answer = questions.get('answers')?.at(answerIndex);
|
|
1226
|
+
return answer.get('linkQuestionAnswers');
|
|
1227
|
+
}
|
|
1228
|
+
getQuestionsFormArrayValues(sectionIndex) {
|
|
1229
|
+
return this.ChecklistForm.get('sections').at(sectionIndex).get('questions').getRawValue() || [];
|
|
1230
|
+
}
|
|
1231
|
+
// onKeydown(event: any) {
|
|
1232
|
+
// if (event.key === "Enter") {
|
|
1233
|
+
// this.addvalue = false;
|
|
1234
|
+
// }
|
|
1235
|
+
// }
|
|
1236
|
+
getAnswerFormGroup_FormControl(sectionIndex, questionIndex, formControlName, ansIdx = -1) {
|
|
1237
|
+
const sections = this.ChecklistForm.get('sections');
|
|
1238
|
+
if (!sections)
|
|
1239
|
+
return null;
|
|
1240
|
+
const section = sections.at(sectionIndex);
|
|
1241
|
+
if (!section)
|
|
1242
|
+
return null;
|
|
1243
|
+
const questions = section.get('questions');
|
|
1244
|
+
if (!questions)
|
|
1245
|
+
return null;
|
|
1246
|
+
const question = questions.at(questionIndex);
|
|
1247
|
+
if (!question)
|
|
1248
|
+
return null;
|
|
1249
|
+
if (formControlName == 'questionReferenceImage') {
|
|
1250
|
+
const control = question.get(formControlName);
|
|
1251
|
+
return control;
|
|
1252
|
+
}
|
|
1253
|
+
else {
|
|
1254
|
+
let answers = question.get('answers');
|
|
1255
|
+
if (!answers)
|
|
1256
|
+
return null;
|
|
1257
|
+
if (ansIdx != -1) {
|
|
1258
|
+
let answerList = question.get('answers');
|
|
1259
|
+
if (!answerList)
|
|
1260
|
+
return null;
|
|
1261
|
+
answers = answerList.at(ansIdx);
|
|
1262
|
+
if (!answers)
|
|
1263
|
+
return null;
|
|
1264
|
+
}
|
|
1265
|
+
const control = answers.get(formControlName);
|
|
1266
|
+
return control;
|
|
1267
|
+
}
|
|
1268
|
+
}
|
|
1269
|
+
removedNestedQuestion(sectionindex, qno) {
|
|
1270
|
+
let questions = this.getSectionFormArray().at(sectionindex).get('questions');
|
|
1271
|
+
for (let i = 0; i < questions.length; i++) {
|
|
1272
|
+
let answers = questions.at(i)?.get('answers');
|
|
1273
|
+
if (answers) {
|
|
1274
|
+
for (let j = 0; j < answers.length; j++) {
|
|
1275
|
+
let linked = answers.at(j)?.get('showLinked')?.value;
|
|
1276
|
+
if (linked) {
|
|
1277
|
+
let questionNo = answers.at(j)?.get('linkedQuestion')?.value;
|
|
1278
|
+
if (questionNo == qno) {
|
|
1279
|
+
answers.at(j)?.get('linkedQuestion')?.setValue(0);
|
|
1280
|
+
answers.at(j)?.get('showLinked')?.setValue(false);
|
|
1281
|
+
}
|
|
1282
|
+
}
|
|
1283
|
+
}
|
|
1284
|
+
}
|
|
1285
|
+
}
|
|
1286
|
+
}
|
|
1287
|
+
updateQuestionQnos(sectionindex) {
|
|
1288
|
+
let questions = this.getSectionFormArray().at(sectionindex).get('questions');
|
|
1289
|
+
for (let i = 0; i < questions.length; i++) {
|
|
1290
|
+
questions.at(i)?.get('qno')?.setValue(i + 1);
|
|
1291
|
+
}
|
|
1292
|
+
this.ChecklistForm.updateValueAndValidity();
|
|
1293
|
+
}
|
|
1294
|
+
getQuestionsAnswerFormGroup(sectionIndex, questionIndex, ansIndex) {
|
|
1295
|
+
return this.ChecklistForm.get('sections').at(sectionIndex).get('questions').at(questionIndex).get('answers').at(ansIndex);
|
|
1296
|
+
}
|
|
1297
|
+
setActiveQuestion(secIdx, questionIndex, activestatus, answerIndex = -1) {
|
|
1298
|
+
if (activestatus == 1) {
|
|
1299
|
+
if (answerIndex != -1) {
|
|
1300
|
+
this.getQuestionsAnswerFormGroup(secIdx, questionIndex, answerIndex).addControl('active', this.fb.control(true));
|
|
1301
|
+
}
|
|
1302
|
+
this.getQuestionsFormGroup(secIdx, questionIndex).addControl('active', this.fb.control(true));
|
|
1303
|
+
}
|
|
1304
|
+
else {
|
|
1305
|
+
if (answerIndex != -1) {
|
|
1306
|
+
this.getQuestionsAnswerFormGroup(secIdx, questionIndex, answerIndex).removeControl('active');
|
|
1307
|
+
}
|
|
1308
|
+
this.getQuestionsFormGroup(secIdx, questionIndex).removeControl('active');
|
|
1309
|
+
}
|
|
1310
|
+
}
|
|
1311
|
+
allowAddAnswer(answers) {
|
|
1312
|
+
return answers.length < 30;
|
|
1313
|
+
}
|
|
1314
|
+
getQuestionList(secIdx, qntIdx, ansIdx) {
|
|
1315
|
+
// for(let answer of question?.answers) {
|
|
1316
|
+
// if((answer.linkedQuestion && answer.linkedQuestion == `${question.qno}` && question.qno == (qntIdx+1)) || (!answer.linkedQuestion.length && question.qno != (qntIdx+1))) {
|
|
1317
|
+
// questionList.push(question.qno)
|
|
1318
|
+
// }
|
|
1319
|
+
// }
|
|
1320
|
+
let questionDetails = this.ChecklistForm.get('sections').at(secIdx).get('questions').getRawValue() || [];
|
|
1321
|
+
let questionList = [];
|
|
1322
|
+
let linkedQuestions = [];
|
|
1323
|
+
if (questionDetails.length) {
|
|
1324
|
+
for (let question of questionDetails) {
|
|
1325
|
+
if (question.answers) {
|
|
1326
|
+
if (['video', 'image', 'descriptiveImage', 'multipleImage'].includes(question.answerType)) {
|
|
1327
|
+
question.answers = [question.answers];
|
|
1328
|
+
}
|
|
1329
|
+
for (let [index, answer] of question.answers.entries()) {
|
|
1330
|
+
if (answer?.linkedQuestion) {
|
|
1331
|
+
linkedQuestions.push({
|
|
1332
|
+
qno: question.qno,
|
|
1333
|
+
ansIdx: index,
|
|
1334
|
+
linkedQuestion: parseInt(answer.linkedQuestion)
|
|
1335
|
+
});
|
|
1336
|
+
}
|
|
1337
|
+
}
|
|
1338
|
+
}
|
|
1339
|
+
}
|
|
1340
|
+
// questionDetails = questionDetails.filter((item:any) => item.qno != (qntIdx+1));
|
|
1341
|
+
for (let question of questionDetails) {
|
|
1342
|
+
if (question?.answers) {
|
|
1343
|
+
let findExists = linkedQuestions.find((item) => item.qno == question.qno && item.ansIdx == ansIdx && item.qno == (qntIdx + 1));
|
|
1344
|
+
let checkLinked = linkedQuestions.find((item) => item.linkedQuestion == question.qno);
|
|
1345
|
+
if (!checkLinked && !findExists && question.qno != (qntIdx + 1) && !questionList.includes(question.qno)) {
|
|
1346
|
+
questionList.push(question.qno);
|
|
1347
|
+
}
|
|
1348
|
+
if (findExists && !questionList.includes(findExists.linkedQuestion)) {
|
|
1349
|
+
questionList.push(findExists.linkedQuestion);
|
|
1350
|
+
}
|
|
1351
|
+
}
|
|
1352
|
+
else {
|
|
1353
|
+
let findExists = linkedQuestions.find((item) => item.linkedQuestion == question.qno);
|
|
1354
|
+
if (!findExists && question.qno != (qntIdx + 1) && !questionList.includes(question.qno)) {
|
|
1355
|
+
questionList.push(question.qno);
|
|
1356
|
+
}
|
|
1357
|
+
}
|
|
1358
|
+
}
|
|
1359
|
+
return questionList;
|
|
1360
|
+
}
|
|
1361
|
+
}
|
|
1362
|
+
updateLinked(secIdx, qnIdx, ansIdx) {
|
|
1363
|
+
let linkValue = this.ChecklistForm.get('sections').at(secIdx).get('questions').at(qnIdx).get('answers').at(ansIdx).get('showLinked')?.value;
|
|
1364
|
+
if (linkValue) {
|
|
1365
|
+
this.ChecklistForm.get('sections').at(secIdx).get('questions').at(qnIdx).get('answers').at(ansIdx).get('linkedQuestion')?.setValue(0);
|
|
1366
|
+
}
|
|
1367
|
+
if (!linkValue) {
|
|
1368
|
+
this.ChecklistForm.get('sections').at(secIdx).get('questions').at(qnIdx).get('answers').at(ansIdx).get('validation')?.setValue(false);
|
|
1369
|
+
this.clearReferenceImage(secIdx, qnIdx, ansIdx);
|
|
1370
|
+
}
|
|
1371
|
+
this.ChecklistForm.get('sections').at(secIdx).get('questions').at(qnIdx).get('answers').at(ansIdx).get('showLinked')?.setValue(!linkValue);
|
|
1372
|
+
}
|
|
1373
|
+
updateQuestionType(secIdx, event) {
|
|
1374
|
+
if (event.target.value) {
|
|
1375
|
+
let index = parseInt(event.target.value) - 1;
|
|
1376
|
+
this.ChecklistForm.get('sections').at(secIdx).get('questions').at(index).get('linkType')?.setValue(true);
|
|
1377
|
+
}
|
|
1378
|
+
}
|
|
1379
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AddChecklistComponent, deps: [{ token: i1.PageInfoService }, { token: i2.FormBuilder }, { token: i0.ChangeDetectorRef }, { token: i3.NgbModal }, { token: i4.ActivatedRoute }, { token: i5.ToastService }, { token: i4.Router }, { token: i6.TraxService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1380
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AddChecklistComponent, selector: "lib-add-checklist", viewQueries: [{ propertyName: "formRef", first: true, predicate: ["formRef"], descendants: true }], ngImport: i0, template: "<div class=\"card\">\r\n <ng-container [formGroup]=\"ChecklistForm\">\r\n <div class=\"card-header border-0 pt-3 pb-3\">\r\n <h3 class=\"card-title align-items-start flex-column w-85\">\r\n <div class=\"editablecontent mb-4\"><input type=\"text\" class=\"checklist plain-input\" #checklistName placeholder=\"Enter Checklist Name\" formControlName=\"checklistName\"></div>\r\n <div class=\"editablecontent\"><input type=\"text\" class=\"checklistDescription plain-input\" #checklistDescription placeholder=\"Enter Checklist Description\" formControlName=\"checklistDescription\"></div>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" class=\"btn btn-primary mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\" *ngIf=\"showvalue === 'add'\" (click)=\"saveChecklistQuestions('configure')\"><span class=\"ms-2\">Configure</span> </button>\r\n \r\n <button type=\"button\" class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\" *ngIf=\"showvalue === 'add'\" (click)=\"saveAsDraftPop('create')\"><span class=\"ms-2\">Save as Draft</span> </button>\r\n \r\n <button type=\"button\" class=\"btn btn-primary mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\" *ngIf=\"showvalue === 'edit'\" (click)=\"updateChecklistQuestions('configure')\"><span class=\"ms-2\">Configure</span> </button>\r\n <button type=\"button\" class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\" *ngIf=\"showvalue === 'edit'\" (click)=\"saveAsDraftPop('update')\"><span class=\"ms-2\">Save as Draft</span> </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</div>\r\n\r\n<div class=\"row\" *ngIf=\"!checklistLoading\">\r\n <div class=\"col-lg-3 mt-2\">\r\n <ng-container [formGroup]=\"ChecklistForm\">\r\n <div class=\"section-left card px-7 py-7\">\r\n <div class=\"fs-18px fw-600 text-left mb-3 concise-checklistname\">\r\n {{getFormControl('checklistName').value ? getFormControl('checklistName').value : 'ChecklistName'}}\r\n </div>\r\n <div class=\"left-panel-container\" formArrayName=\"sections\">\r\n <div *ngFor=\"let section of getSectionFormArray().controls;let i=index;\">\r\n <ng-container [formGroupName]=\"i\">\r\n <div class=\"d-flex section align-items-center justify-content-between\">\r\n <div class=\"fs-18px fw-bold editablecontent-left\">{{\r\n getSectionFormControl(i,'name')?.value === '' ? \"Section \" : ''}}{{\r\n getSectionFormControl(i,'name')?.value ? getSectionFormControl(i,'name')?.value\r\n : getSectionFormControl(i,'sectionNumber')?.value}}</div>\r\n <hr class=\"mx-2\">\r\n <svg (click)=\"deleteSection(i)\" xmlns=\"http://www.w3.org/2000/svg\" width=\"35\"\r\n height=\"35\" viewBox=\"0 0 18 18\" matTooltip=\"Delete section\"\r\n matTooltipPosition=\"above\" matTooltipClass=\"custom-test\" fill=\"none\">\r\n <path\r\n d=\"M2.25 4.5H3.75M3.75 4.5H15.75M3.75 4.5V15C3.75 15.3978 3.90804 15.7794 4.18934 16.0607C4.47064 16.342 4.85218 16.5 5.25 16.5H12.75C13.1478 16.5 13.5294 16.342 13.8107 16.0607C14.092 15.7794 14.25 15.3978 14.25 15V4.5H3.75ZM6 4.5V3C6 2.60218 6.15804 2.22064 6.43934 1.93934C6.72064 1.65804 7.10218 1.5 7.5 1.5H10.5C10.8978 1.5 11.2794 1.65804 11.5607 1.93934C11.842 2.22064 12 2.60218 12 3V4.5M7.5 8.25V12.75M10.5 8.25V12.75\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg (click)=\"accordian(i)\" [ngClass]=\"{'rotate' : show !== i}\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"35\" height=\"35\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <ng-container *ngIf=\"show===i\">\r\n <div cdkDropList (cdkDropListDropped)=\"dragDrop(i,$event)\"\r\n [cdkDropListData]=\"getFormArrayQuestions(i).controls\" class=\"question-left\">\r\n <ng-container formArrayName=\"questions\">\r\n <div *ngFor=\"let question of getFormArrayQuestions(i).controls;let j=index;\"\r\n class=\"my-2\"\r\n [ngClass]=\"question.get('active')?.value === true ? 'active-question' : 'q-btn'\"\r\n cdkDrag (mouseenter)=\"setActiveQuestion(i,j,1)\"\r\n (click)=\"scrollToQuestion(i,j);\"\r\n (mouseleave)=\"setActiveQuestion(i,j,-1)\">\r\n <ng-container [formGroupName]=\"j\">\r\n <div class=\"concise-question\">\r\n {{getQuestionFormControl(i,j,'qname')?.value ? '' : \"Question\"}}{{ getQuestionFormControl(i,j,'qname')?.value ?\r\n getQuestionFormControl(i,j,'qname')?.value :\r\n getQuestionFormControl(i,j,'qno')?.value }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"col-lg-9 mt-2\">\r\n <form [formGroup]=\"ChecklistForm\" #formRef>\r\n <div class=\"card px-7\">\r\n <!-- <div class=\"checklist-card py-5\">\r\n <input type=\"text\" class=\"mt-2\" style=\"text-transform: capitalize;\"\r\n placeholder=\"Enter checklist name here\" formControlName=\"checklistName\">\r\n <input type=\"text\" class=\"mt-4\" placeholder=\"Enter checklist description here\"\r\n formControlName=\"checklistDescription\">\r\n </div> -->\r\n <ng-container formArrayName=\"sections\" >\r\n <div class=\"sectionArea mt-5\" *ngFor=\"let section of getSectionFormArray().controls;let i=index;\">\r\n <ng-container [formGroupName]=\"i\">\r\n <div class=\"section d-flex align-items-center justify-content-between\">\r\n\r\n <div class=\"fs-18px fw-bold editablecontent\"><input type=\"text\" class=\"plain-input\"\r\n #sectionName (change)=\"updateInputValue(i,sectionName.value)\"\r\n formControlName=\"name\"></div>\r\n <hr>\r\n <svg class=\"ml-5\" (click)=\"deleteSection(i)\" xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" matTooltip=\"Delete section\" matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path\r\n d=\"M2.25 4.5H3.75M3.75 4.5H15.75M3.75 4.5V15C3.75 15.3978 3.90804 15.7794 4.18934 16.0607C4.47064 16.342 4.85218 16.5 5.25 16.5H12.75C13.1478 16.5 13.5294 16.342 13.8107 16.0607C14.092 15.7794 14.25 15.3978 14.25 15V4.5H3.75ZM6 4.5V3C6 2.60218 6.15804 2.22064 6.43934 1.93934C6.72064 1.65804 7.10218 1.5 7.5 1.5H10.5C10.8978 1.5 11.2794 1.65804 11.5607 1.93934C11.842 2.22064 12 2.60218 12 3V4.5M7.5 8.25V12.75M10.5 8.25V12.75\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg (click)=\"accordian(i)\" [ngClass]=\"{'rotate' : show !== i}\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <div class=\"questionsArea\" *ngIf=\"show === i\">\r\n <ng-container formArrayName=\"questions\">\r\n <div class=\"Question-sec mt-5\"\r\n *ngFor=\"let question of getFormArrayQuestions(i).controls;let j = index;\"\r\n (mouseenter)=\"setActiveQuestion(i,j,1)\"\r\n (mouseleave)=\"setActiveQuestion(i,j,-1)\">\r\n <ng-container [formGroupName]=\"j\">\r\n <span class=\"fs-18px fw-bolder editablecontent questiontitle\"\r\n style=\"cursor: default;\"> Question {{j+1}}</span>\r\n\r\n <div class=\"checklist-card pb-5\">\r\n <textarea class=\"form-control form-control-solid\" rows=\"1\"\r\n type=\"text\" class=\"mt-0\" [id]=\"'q-' + i + '-' + j\"\r\n placeholder=\"Enter question here\"\r\n formControlName=\"qname\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <p style=\"color: red;\"\r\n *ngIf=\"question.get('qname')?.hasError('required')\">*\r\n Question is required.</p>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"row\"\r\n *ngIf=\"!['descriptiveImage','image','multipleImage'].includes(question.get('answerType')?.value)\">\r\n <div *ngIf=\"getAnswerFormGroup_FormControl(i,j,'questionReferenceImage')?.value\"\r\n class=\"ref_img_cont mb-4 mt-5\">\r\n <img [src]=\"getAnswerFormGroup_FormControl(i,j,'questionReferenceImage')?.value\"\r\n width=\"100%\" height=\"300px\" class=\"auto-adjust\"\r\n alt=\"Tango Eye\" />\r\n <div class=\"ref_del_icon\" (click)=\"clearReferenceImage(i,j);\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"d-flex mb-3\">\r\n <div *ngIf=\"getAnswerFormGroup_FormControl(i,j,'questionReferenceImage')?.value\"\r\n class=\"col-lg-3 btn btn-light-primary mt-2\">\r\n <input class=\"d-none\" [id]=\"'fileupload_'+i+j\" type=\"file\"\r\n name=\"answerFile\" accept=\"image/png, image/jpeg\"\r\n (change)=\"loadImageFromDevice(i,refImgQIdx,$event,-1,'questionReferenceImage')\">\r\n <label [for]=\"'fileupload_'+i+j\" (click)=\"refImgQIdx=j;\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\"\r\n width=\"21\" height=\"20\" viewBox=\"0 0 21 20\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>Reupload Image</label>\r\n </div>\r\n <div *ngIf=\"!getAnswerFormGroup_FormControl(i,j,'questionReferenceImage')?.value\"\r\n class=\"col-lg-3 btn add-ref-btn btn-light-primary my-2\">\r\n <input class=\"d-none\" [id]=\"'fileupload_'+i+j\" type=\"file\"\r\n name=\"file\" accept=\"image/png, image/jpeg\"\r\n (change)=\"loadImageFromDevice(i,refImgQIdx,$event,-1,'questionReferenceImage')\">\r\n <label class=\"pointer\" [for]=\"'fileupload_'+i+j\"\r\n (click)=\"refImgQIdx=j;\"> <svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>Add Reference Image </label>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"checklist-card pb-5\">\r\n <select class=\"mt-5\" name=\"selectoption\"\r\n (change)=\"answerTypeSelection(i,j,$event)\"\r\n formControlName=\"answerType\">\r\n <option name=\"descriptive\" value=\"descriptive\">Descriptive\r\n Answer</option>\r\n <option name=\"yes/no\" value=\"yes/no\">A/B Question</option>\r\n <option name=\"multiplechoicesingle\"\r\n value=\"multiplechoicesingle\">Multiple Choice Question -\r\n Single Answer</option>\r\n <option name=\"multiplechoicemultiple\"\r\n value=\"multiplechoicemultiple\">Multiple Choice Question -\r\n Multiple Answer</option>\r\n <option name=\"descriptiveImage\" value=\"descriptiveImage\">Capture\r\n Image with Description</option>\r\n <option name=\"image\" value=\"image\">Capture Image as answer\r\n </option>\r\n <option name=\"video\" value=\"video\">Capture video as answer\r\n </option>\r\n <option name=\"multipleImage\" value=\"multipleImage\">Capture\r\n Multiple Image</option>\r\n <option name=\"date\" value=\"date\">Date - DD/MM/YYYY</option>\r\n </select>\r\n\r\n </div>\r\n <div class=\"col-lg-3 mx-4 d-flex mt-3\" *ngIf=\"['descriptive'].includes(question.get('answerType')?.value)\">\r\n <div class=\"form-check\" >\r\n <input formControlName=\"descriptivetype\" class=\"form-check-input cursor-pointer\" type=\"radio\" value=\"text\" [name]=\"'descriptivetype'\" [id]=\"'inlineRadio' + j\">\r\n <label class=\"cursor-pointer dscriptiveType\" for=\"inlineRadio1\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\" class=\"form-check-input cursor-pointer\" type=\"radio\" value=\"number\" [name]=\"'descriptivetype'\" [id]=\"'inlineRadio' + j\">\r\n <label class=\"cursor-pointer dscriptiveType\" for=\"inlineRadio1\">Number</label>\r\n </div>\r\n </div>\r\n <ng-container\r\n *ngIf=\"question.get('answerType')?.value === 'yes/no' || question.get('answerType')?.value === 'multiplechoicesingle' || question.get('answerType')?.value === 'multiplechoicemultiple'\">\r\n <div class=\"fs-18px fw-bolder\" style=\"cursor: default;\">Answer\r\n Options</div>\r\n <ng-container formArrayName=\"answers\">\r\n <ng-container\r\n *ngFor=\"let answer of getFormArrayQuestionsAnswer(i,j,'answers')?.controls;let k = index;\">\r\n <div class=\"row\" [formGroupName]=\"k\">\r\n <ng-container *ngIf=\"!answer.get('isdeleted')?.value\">\r\n <div class=\"col-lg-6 Answer1\">\r\n <div class=\"checklist-card pb-0 mt-5\">\r\n <input type=\"text\" class=\"mt-0\"\r\n placeholder=\"Enter answer here\"\r\n formControlName=\"answer\">\r\n <span class=\"vl\"></span>\r\n <ng-container\r\n *ngIf=\"question.get('answerType')?.value === 'yes/no' || question.get('answerType')?.value === 'multiplechoicesingle'\"\r\n ngDefaultControl>\r\n <span class=\"vl2\"></span>\r\n <svg class=\"imgAdd\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\"\r\n (click)=\"updateLinked(i,j,k)\">\r\n <path\r\n d=\"M9.99999 4.16602V15.8327M4.16666 9.99935H15.8333\"\r\n stroke=\"#344054\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"answer.get('answer')?.invalid && answer.get('answer')?.touched\">\r\n <p style=\"color: red;\"\r\n *ngIf=\"answer.get('answer')?.hasError('required')\">\r\n * Answer is required.</p>\r\n </ng-container>\r\n <p style=\"color: red;\"\r\n *ngIf=\"answer.get('showSOPFlagError')?.value === true\">\r\n Every answer can\u2019t be a flag.</p>\r\n\r\n <ng-container formControlName=\"sopFlag\"\r\n ngDefaultControl>\r\n\r\n <svg (click)=\"raiseflag(i,j,k,true)\"\r\n matTooltip=\"Raise a flag if this answer is selected\"\r\n matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\"\r\n *ngIf=\"answer.get('sopFlag')?.value === false\"\r\n class=\"kiwi\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\">\r\n <path\r\n d=\"M2.66669 10.0007C2.66669 10.0007 3.33335 9.33398 5.33335 9.33398C7.33335 9.33398 8.66669 10.6673 10.6667 10.6673C12.6667 10.6673 13.3334 10.0007 13.3334 10.0007V2.00065C13.3334 2.00065 12.6667 2.66732 10.6667 2.66732C8.66669 2.66732 7.33335 1.33398 5.33335 1.33398C3.33335 1.33398 2.66669 2.00065 2.66669 2.00065V10.0007ZM2.66669 10.0007V14.6673\"\r\n stroke=\"#D0D5DD\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <svg (click)=\"raiseflag(i,j,k,false)\"\r\n matTooltip=\"Raise a flag if this answer is selected\"\r\n matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\"\r\n *ngIf=\"answer.get('sopFlag')?.value === true\"\r\n class=\"active-flag\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\">\r\n <path\r\n d=\"M2.66669 10.0007C2.66669 10.0007 3.33335 9.33398 5.33335 9.33398C7.33335 9.33398 8.66669 10.6673 10.6667 10.6673C12.6667 10.6673 13.3334 10.0007 13.3334 10.0007V2.00065C13.3334 2.00065 12.6667 2.66732 10.6667 2.66732C8.66669 2.66732 7.33335 1.33398 5.33335 1.33398C3.33335 1.33398 2.66669 2.00065 2.66669 2.00065V10.0007ZM2.66669 10.0007V14.6673\"\r\n stroke=\"#D0D5DD\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\"\r\n *ngIf=\"!answer.get('showLinked')?.value\">\r\n <div class=\"d-flex justify-content-between\">\r\n <div class=\"d-flex answervalidation\">\r\n <input class=\"mt-7\" type=\"checkbox\"\r\n style=\"width:16px;height:16px;cursor: pointer;\"\r\n value=\"1\"\r\n (change)=\"getvalidation(i,j,k,$event)\"\r\n formControlName=\"validation\">\r\n <div class=\"chackbox pt-4 mt-2 mx-2\"\r\n style=\"cursor: default;\">\r\n <h3>Validate response</h3>\r\n <p class=\"mb-0\">Trigger an action\r\n for each response to validate it\r\n </p>\r\n </div>\r\n </div>\r\n <svg *ngIf=\"question.get('answerType')?.value !== 'yes/no'\"\r\n (click)=\"deleteAnswer(i,j,k)\"\r\n class=\"mt-8\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n matTooltip=\"Delete answer\"\r\n matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path d=\"M15 5L5 15M5 5L15 15\"\r\n stroke=\"#667085\"\r\n stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n </div>\r\n <!-- *ngIf=\"moreqn.validation\" -->\r\n <div *ngIf=\"answer.get('validation')?.value\"\r\n class=\"row\">\r\n <div class=\"col-lg-3 pt-7 fs-4 fw-400 mt-1\">\r\n If the response is this, then\r\n </div>\r\n <div class=\"col-lg-3\">\r\n <select class=\"mt-5 mx-1\"\r\n formControlName=\"validationType\"\r\n (change)=\"updateValidationType($event,i,j,k)\">\r\n <option>Descriptive Answer</option>\r\n <option>Capture Image</option>\r\n <option>Capture Video</option>\r\n </select>\r\n </div>\r\n <div class=\"col-lg-3 mx-4 d-flex pt-8\" *ngIf=\"answer.get('validationType')?.value === 'Descriptive Answer'\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\" class=\"form-check-input cursor-pointer\" type=\"radio\" id=\"inlineRadio1\"\r\n value=\"text\" [name]=\"'descriptivetype'\">\r\n <label class=\"cursor-pointer dscriptiveType\" for=\"inlineRadio1\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\" class=\"form-check-input cursor-pointer\" type=\"radio\" id=\"inlineRadio1\"\r\n value=\"number\" [name]=\"'descriptivetype'\">\r\n <label class=\"cursor-pointer dscriptiveType\" for=\"inlineRadio1\">Number</label>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\"\r\n *ngIf=\"answer.get('showLinked')?.value\">\r\n <div class=\"col-lg-3 pt-7 fs-4 fw-400 mt-1\">\r\n Linked Question\r\n </div>\r\n <div class=\"col-lg-9\">\r\n <select [id]=\"i+'-'+k\" [name]=\"i+'-'+k\"\r\n class=\"mt-5\"\r\n formControlName=\"linkedQuestion\"\r\n (change)=\"updateQuestionType(i,$event)\">\r\n <option value=\"\">Select Question\r\n </option>\r\n <option\r\n *ngFor=\"let option of getQuestionList(i,j,k)\"\r\n [value]=\"option\">Question {{option}}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"row\"\r\n *ngIf=\"answer.get('validation')?.value && answer.get('validationType')?.value === 'Capture Image'\">\r\n <div *ngIf=\"getAnswerFormGroup_FormControl(i,j,'referenceImage',k)?.value\"\r\n class=\"ref_img_cont mb-4 mt-5\">\r\n <img [src]=\"getAnswerFormGroup_FormControl(i,j,'referenceImage',k)?.value\"\r\n width=\"100%\" height=\"300px\"\r\n class=\"auto-adjust\" alt=\"Tango Eye\" />\r\n <div class=\"ref_del_icon\"\r\n (click)=\"clearReferenceImage(i,j,k);\">\r\n <svg width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"d-flex mb-3\">\r\n <div *ngIf=\"getAnswerFormGroup_FormControl(i,j,'referenceImage',k)?.value\"\r\n class=\"col-lg-3 btn btn-light-primary mt-2\">\r\n <input class=\"d-none\"\r\n [id]=\"'fileupload_'+i+j+k\"\r\n type=\"file\" name=\"answerFile\"\r\n accept=\"image/png, image/jpeg\"\r\n (change)=\"loadImageFromDevice(i,refImgQIdx,$event,k)\">\r\n <label [for]=\"'fileupload_'+i+j+k\"\r\n (click)=\"refImgQIdx=j;\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"mx-2\" width=\"21\"\r\n height=\"20\" viewBox=\"0 0 21 20\"\r\n fill=\"none\">\r\n <g\r\n clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath\r\n id=\"clip0_4082_3122\">\r\n <rect width=\"20\"\r\n height=\"20\"\r\n fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>Reupload Image</label>\r\n </div>\r\n <div *ngIf=\"!getAnswerFormGroup_FormControl(i,j,'referenceImage',k)?.value\"\r\n class=\"col-lg-3 btn add-ref-btn btn-light-primary my-2\">\r\n <input class=\"d-none\"\r\n [id]=\"'fileupload_'+i+j+k\"\r\n type=\"file\" name=\"file\"\r\n accept=\"image/png, image/jpeg\"\r\n (change)=\"loadImageFromDevice(i,refImgQIdx,$event,k)\">\r\n <label class=\"pointer\"\r\n [for]=\"'fileupload_'+i+j+k\"\r\n (click)=\"refImgQIdx=j;\"> <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\"\r\n stroke=\"#009BF3\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>Add Reference Image </label>\r\n </div>\r\n <div\r\n class=\"col-lg-4 form-check form-switch mx-2 btn-sec mt-6 text-left align-items-center\">\r\n <input\r\n class=\"form-check-input mx-0 pointer\"\r\n type=\"checkbox\" name=\"toc\" value=\"1\"\r\n ngDefaultControl\r\n formControlName=\"allowUploadfromGallery\">\r\n <label class=\"form-check-label pointer\"\r\n for=\"flexSwitchCheckDefault\"></label>\r\n Allow upload from gallery\r\n </div>\r\n <div class=\"col-lg-2\"></div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container class=\"row\"\r\n *ngIf=\"(question.get('answerType')?.value === 'multiplechoicemultiple' || \r\n question.get('answerType')?.value === 'multiplechoicesingle') && \r\n allowAddAnswer(question.get('answers')?.value)\">\r\n <div (click)=\"AddMoreAns(i,j,question.get('answerType')?.value)\"\r\n class=\"btn col-lg-12 btn-light-primary my-3\">\r\n Add More Answer</div>\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Image -->\r\n <ng-container\r\n *ngIf=\"['image','descriptiveImage','multipleImage'].includes(question.get('answerType')?.value)\"\r\n class=\"row\">\r\n <ng-container formGroupName=\"answers\">\r\n <div *ngIf=\"getAnswerFormGroup_FormControl(i,j,'referenceImage')?.value\"\r\n class=\"ref_img_cont mb-4\">\r\n <img [src]=\"getAnswerFormGroup_FormControl(i,j,'referenceImage')?.value\"\r\n width=\"100%\" height=\"300px\" class=\"auto-adjust\"\r\n alt=\"Tango Eye\" />\r\n <div class=\"ref_del_icon\"\r\n (click)=\"clearReferenceImage(i,j);\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"d-flex mb-3\">\r\n <div *ngIf=\"getAnswerFormGroup_FormControl(i,j,'referenceImage')?.value\"\r\n class=\"col-lg-3 btn btn-light-primary mt-2\">\r\n <input class=\"d-none\" id=\"fileupload\" type=\"file\"\r\n name=\"file\" accept=\"image/png, image/jpeg\"\r\n (change)=\"loadImageFromDevice(i,refImgQIdx,$event)\">\r\n <label for=\"fileupload\" (click)=\"refImgQIdx=j;\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\"\r\n width=\"21\" height=\"20\" viewBox=\"0 0 21 20\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\"\r\n fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>Reupload Image</label>\r\n </div>\r\n <div *ngIf=\"!getAnswerFormGroup_FormControl(i,j,'referenceImage')?.value\"\r\n class=\"col-lg-3 btn add-ref-btn btn-light-primary my-2\">\r\n <input class=\"d-none\" id=\"fileupload\" type=\"file\"\r\n name=\"file\" accept=\"image/png, image/jpeg\"\r\n (change)=\"loadImageFromDevice(i,refImgQIdx,$event)\">\r\n <label class=\"pointer\" for=\"fileupload\"\r\n (click)=\"refImgQIdx=j;\"> <svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>Add Reference Image </label>\r\n </div>\r\n <div\r\n class=\"col-lg-4 form-check form-switch mx-2 btn-sec mt-6 text-left align-items-center\">\r\n <input class=\"form-check-input mx-0 pointer\"\r\n type=\"checkbox\" name=\"toc\" value=\"1\"\r\n ngDefaultControl\r\n formControlName=\"allowUploadfromGallery\">\r\n <label class=\"form-check-label pointer\"\r\n for=\"flexSwitchCheckDefault\"></label>\r\n Allow upload from gallery\r\n </div>\r\n <div\r\n [ngClass]=\"(['multipleImage'].includes(question.get('answerType')?.value) && getAnswerFormGroup_FormControl(i,j,'referenceImage')?.value === '') ? 'col-lg-4 mt-6' : ['image'].includes(question.get('answerType')?.value) ? 'col-lg-2' : ''\">\r\n <div class=\"d-flex\" *ngIf=\"(['multipleImage'].includes(question.get('answerType')?.value) && getAnswerFormGroup_FormControl(i,j,'referenceImage')?.value === '')\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\" class=\"form-check-input cursor-pointer\" type=\"radio\" id=\"inlineRadio1\"\r\n value=\"text\" [name]=\"'descriptivetype'\">\r\n <label class=\"cursor-pointer dscriptiveType\" for=\"inlineRadio1\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\" class=\"form-check-input cursor-pointer\" type=\"radio\" id=\"inlineRadio1\"\r\n value=\"number\" [name]=\"'descriptivetype'\">\r\n <label class=\"cursor-pointer dscriptiveType\" for=\"inlineRadio1\">Number</label>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"getAnswerFormGroup_FormControl(i,j,'referenceImage')?.value && ['image','multipleImage'].includes(question.get('answerType')?.value)\"\r\n [ngClass]=\"question.get('answerType')?.value === 'multipleImage' ? 'col-lg-5 d-flex mt-6' : 'col-lg-3 d-flex justify-content-center align-items-center mt-2'\">\r\n <div class=\"d-flex\" *ngIf=\"question.get('answerType')?.value === 'multipleImage'\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\" class=\"form-check-input cursor-pointer\" type=\"radio\" id=\"inlineRadio1\"\r\n value=\"text\" [name]=\"'descriptivetype'\">\r\n <label class=\"cursor-pointer dscriptiveType\" for=\"inlineRadio1\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\" class=\"form-check-input cursor-pointer\" type=\"radio\" id=\"inlineRadio1\"\r\n value=\"number\" [name]=\"'descriptivetype'\">\r\n <label class=\"cursor-pointer dscriptiveType\" for=\"inlineRadio1\">Number</label>\r\n </div>\r\n </div>\r\n <h3 class=\"fs16-600 px-12\"> Run AI \u2728</h3>\r\n <div class=\"form-check form-switch align-items-center btn-sec ml-5\"\r\n (click)=\"RunAI(i,j)\">\r\n <input class=\"form-check-input\" type=\"checkbox\"\r\n formControlName=\"runAI\" name=\"toc\" value=\"1\">\r\n <label class=\"form-check-label\"\r\n for=\"flexSwitchCheckDefault\"></label>\r\n </div>\r\n <svg [ngClass]=\"question.get('answerType')?.value === 'multipleImage' ? 'mt-1' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\r\n matTooltip=\"Enable AI where you want tango to identify, track and alert instances.\"\r\n matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\">\r\n <g clip-path=\"url(#clip0_2301_100038)\">\r\n <path\r\n d=\"M7.99967 10.6654V7.9987M7.99967 5.33203H8.00634M14.6663 7.9987C14.6663 11.6806 11.6816 14.6654 7.99967 14.6654C4.31778 14.6654 1.33301 11.6806 1.33301 7.9987C1.33301 4.3168 4.31778 1.33203 7.99967 1.33203C11.6816 1.33203 14.6663 4.3168 14.6663 7.9987Z\"\r\n stroke=\"#98A2B3\" stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2301_100038\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Video -->\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'video'\"\r\n class=\"row\">\r\n <ng-container formGroupName=\"answers\">\r\n <div\r\n class=\" col-lg-4 form-check form-switch text-left align-items-center btn-sec mt-2\">\r\n <input class=\"form-check-input mx-0 pointer\" type=\"checkbox\"\r\n name=\"toc\" value=\"1\" ngDefaultControl\r\n formControlName=\"allowUploadfromGallery\">\r\n <label class=\"form-check-label pointer\"\r\n for=\"flexSwitchCheckDefault\"></label>\r\n Allow upload from gallery\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <div class=\"d-flex justify-content-end py-2\">\r\n <div class=\"pt-1\">\r\n <svg (click)=\"cloneQuestion(i,j)\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n matTooltip=\"Duplicate\" matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_3385_10578)\">\r\n <path\r\n d=\"M4.16663 12.4993H3.33329C2.89127 12.4993 2.46734 12.3238 2.15478 12.0112C1.84222 11.6986 1.66663 11.2747 1.66663 10.8327V3.33268C1.66663 2.89065 1.84222 2.46673 2.15478 2.15417C2.46734 1.84161 2.89127 1.66602 3.33329 1.66602H10.8333C11.2753 1.66602 11.6992 1.84161 12.0118 2.15417C12.3244 2.46673 12.5 2.89065 12.5 3.33268V4.16602M9.16663 7.49935H16.6666C17.5871 7.49935 18.3333 8.24554 18.3333 9.16602V16.666C18.3333 17.5865 17.5871 18.3327 16.6666 18.3327H9.16663C8.24615 18.3327 7.49996 17.5865 7.49996 16.666V9.16602C7.49996 8.24554 8.24615 7.49935 9.16663 7.49935Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3385_10578\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <svg (click)=\"deleteQuestion(i,j)\"\r\n style=\"margin-left: 24px !important;\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n matTooltip=\"Delete question\" matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M2.5 4.99935H4.16667M4.16667 4.99935H17.5M4.16667 4.99935V16.666C4.16667 17.108 4.34226 17.532 4.65482 17.8445C4.96738 18.1571 5.39131 18.3327 5.83333 18.3327H14.1667C14.6087 18.3327 15.0326 18.1571 15.3452 17.8445C15.6577 17.532 15.8333 17.108 15.8333 16.666V4.99935H4.16667ZM6.66667 4.99935V3.33268C6.66667 2.89065 6.84226 2.46673 7.15482 2.15417C7.46738 1.84161 7.89131 1.66602 8.33333 1.66602H11.6667C12.1087 1.66602 12.5326 1.84161 12.8452 2.15417C13.1577 2.46673 13.3333 2.89065 13.3333 3.33268V4.99935M8.33333 9.16602V14.166M11.6667 9.16602V14.166\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <div>\r\n <div class=\"row mx-0\">\r\n <div class=\"col-lg-6 px-0\" *ngIf=\"ChecklistForm.get('sections')\">\r\n <div class=\"checklist-card py-7 text-center\">\r\n <div (click)=\"addNewQuestion(sectionIndex)\"\r\n [attr.disabled]=\"isDisabled ? 'disabled' : null\" class=\"mt-2 btn-sec pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M9.99999 4.16602V15.8327M4.16666 9.99935H15.8333\" stroke=\"#344054\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> Add New Question</div>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6 pl-5\">\r\n <div class=\"checklist-card py-7 text-center\">\r\n <div (click)=\"addNewSection()\" class=\"mt-2 px-0 btn-sec pointer\"> <svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M9.99999 4.16602V15.8327M4.16666 9.99935H15.8333\" stroke=\"#344054\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> Add New Section</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n</div>", styles: [".checklist-card div,input[type=text]:not(.plain-input),select{color:#101828;border:1px solid #D0D5DD;box-shadow:0 1px 2px #1018280d;border-radius:8px;font-size:16px;width:100%;padding:10px 14px;font-family:Inter;font-weight:400;line-height:24px}.checklist-card input{padding-right:20%}.card{border-radius:16px}.row>*{padding-right:0}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}input[type=checkbox]:focus{border:none!important;outline:none!important;box-shadow:none!important}input:focus{border:#F9FAFB!important;outline:1px solid var(--primary-300, #6BCAFF);box-shadow:0 0 0 4px #d5effe,0 1px 2px #1018280d;color:#101828}select{-webkit-appearance:none!important;-moz-appearance:none!important;height:45px;width:100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAUCAMAAACtdX32AAAAdVBMVEUAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhMdQaAAAAJ3RSTlMAAAECAwQGBwsOFBwkJTg5RUZ4eYCHkJefpaytrsXGy8zW3+Do8vNn0bsyAAAAYElEQVR42tXROwJDQAAA0Ymw1p9kiT+L5P5HVEi3qJn2lcPjtIuzUIJ/rhIGy762N3XaThqMN1ZPALsZPEzG1x8LrFL77DHBnEMxBewz0fJ6LyFHTPL7xhwzWYrJ9z22AqmQBV757MHfAAAAAElFTkSuQmCC);background-position:100%;background-repeat:no-repeat}select:focus{border:#F9FAFB!important;outline:1px solid var(--primary-300, #6BCAFF);box-shadow:0 0 0 4px #d5effe,0 1px 2px #1018280d;color:#101828}textarea:focus{border:#F9FAFB!important;outline:1px solid var(--primary-300, #6BCAFF);box-shadow:0 0 0 4px #d5effe,0 1px 2px #1018280d;color:#101828}textarea,select{color:#101828;border:1px solid #D0D5DD;box-shadow:0 1px 2px #1018280d;border-radius:8px;font-size:16px;width:100%;padding:10px 14px;font-family:Inter;font-weight:400;line-height:24px}.btn-outline{border:1px solid lightgrey;padding:calc(.75rem + 1px) calc(1.5rem + 1px)}.btn-light-primary{color:var(--primary-700, #009BF3);font-family:Inter;font-size:16px;font-style:normal;font-weight:600;line-height:24px;text-transform:capitalize}.newbutton{border:1px solid lightgrey;padding:calc(.75rem + 1px) calc(1.5rem + 1px);color:#000;background-color:#fff}.newbutton:hover,.newbutton:active{background-color:#009bf3;color:#fff}.btn.btn-light-primary:hover:not(.btn-active),.btn-light-primary:active{color:var(--primary-700, #009BF3);font-family:Inter;font-size:16px;font-style:normal;font-weight:600;outline:none!important;background-color:#d1f0ff82!important}.ml-5{margin-left:10px}.pl-5{padding-left:10px!important}.btn-left{display:inline-block;width:100%;font-size:16px;white-space:nowrap;overflow:hidden!important;text-overflow:ellipsis!important}.card hr{width:-webkit-fill-available}.card{height:100%!important}.rotate{transform:rotate(180deg);transition:1s}.hidesec{visibility:hidden;opacity:.1;transition:1s}.fs-16px{font-size:16px}.card svg{margin-left:5px!important;cursor:pointer}.form-switch,.form-check-label{padding-left:5px!important}.webkitwidth{width:-webkit-fill-available}.fs-18px{font-size:18px;color:var(--black, #000);font-family:inter}.Answer1 .checklist-card,.Answer2 .checklist-card{position:relative}.Answer1 svg,.Answer2 svg{position:absolute;top:15px;right:15px}.Answer1 .imgAdd,.Answer2 .imgAdd{position:absolute;top:13px!important;right:57px!important}.Answer1 .flag,.Answer2 .flag{color:red!important}.Answer1 .flag>.flag-path,.Answer2 .flag>.flag-path{fill:red!important;stroke:red}.Answer1 .vl,.Answer2 .vl{position:absolute;top:1px;right:45px;border-left:1px solid #D0D5DD;height:43px}.Answer1 .vl2,.Answer2 .vl2{position:absolute;top:1px;right:90px;border-left:1px solid #D0D5DD;height:43px}.Answer1 svg:hover,.Answer2 svg:hover{fill:#d0d5dd!important}.editablecontent{display:inline-block;max-width:25ch;white-space:nowrap;outline:none!important;border:none!important;box-shadow:none!important;overflow:hidden!important;text-overflow:ellipsis!important}.editablecontent-left{display:inline-block;width:180px;white-space:nowrap;outline:none!important;border:none!important;box-shadow:none!important;overflow:hidden!important;text-overflow:ellipsis!important}[contenteditable]{outline:0px solid transparent}.min-width-popup{min-width:46%!important}.max-w-128px{max-width:128px}.fw-600{font-weight:600!important}.fw-400{font-weight:400}.footer1 span{color:#000;font-family:inter;font-size:14px;font-weight:500px;line-height:20px}.footer1 a{font-family:inter;font-size:14px;font-weight:600;text-decoration:underline;color:var(--primary-700, #009BF3)}.footer1 a:hover{color:var(--primary-700, #009BF3);text-decoration-line:underline!important;text-decoration-thickness:1px!important}.btn-sec{color:var(--gray-700, #344054)!important;font-family:Inter;font-size:14px;font-style:normal;font-weight:500!important;line-height:24px}.question-left{max-height:85vh;overflow:auto;overflow-x:hidden}.Question-sec{position:relative;border-radius:8px;border:1px solid var(--gray-300, #D0D5DD);background:var(--gray-50, #F9FAFB);width:100%;padding:24px 16px 16px}.Question-sec .questiontitle{position:absolute;top:-10px}.Question-sec h3{color:var(--gray-700, #344054);font-family:Inter;font-size:14px;font-style:normal;font-weight:500;line-height:20px;margin-bottom:0!important}.Question-sec .fs16-600{font-size:14px;font-style:normal;font-weight:600;line-height:20px}.Question-sec p{color:var(--gray-500, #667085);font-family:Inter;font-size:14px;font-style:normal;font-weight:400;line-height:20px}.swal2-confirm{font-family:Inter!important;font-size:30px!important;background-color:var(--white, #FFF)!important;border:solid var(--gray-300, #D0D5DD)!important}.Overlay{top:0;left:0;width:100%;height:100%;z-index:200!important;position:fixed;background:#58575799}.popup{position:absolute;top:50%;left:50%;opacity:1;transform:translate(-50%,-50%);background:var(--white, #FFF);border-radius:12px!important;border-radius:12px;box-shadow:0 8px 8px -4px #10182808,0 20px 24px -4px #10182814;padding:30px;width:400px;height:fit-content}.kiwi:hover{fill:#d0d5dd!important;stroke:#d0d5dd!important}.kiwi:hover path{fill:#d0d5dd!important;stroke:#d0d5dd!important}.kiwi{fill:#fff!important;stroke:#d0d5dd!important}.kiwi path{fill:#fff!important;stroke:#d0d5dd!important}.kiwi:active{fill:#d0d5dd!important;stroke:#d0d5dd!important}.kiwi:active path{fill:#d0d5dd!important;stroke:#d0d5dd!important}.active-flag{fill:red!important;stroke:red!important}.active-flag path{fill:red!important;stroke:red!important}.active-flag:active{fill:red!important;stroke:red!important}.active-flag:active path{fill:red!important;stroke:red!important}.toasttitile{color:#3f4254;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:140%}.ref_del_icon{position:absolute;top:24px;right:24px;transform:translate(50%,-50%);padding:6px;border-radius:8px;border:1px solid var(--error-50, #FEF3F2);background:var(--error-50, #FEF3F2);box-shadow:0 1px 2px #1018280d}.ref_del_icon svg{margin:0!important}.ref_img_cont{position:relative}::ng-deep .swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;min-width:2em;height:0em;margin:0 .5em 0 0}::ng-deep .listitem{display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.5rem 1rem;background-color:#f3f6f9;margin-top:.75rem;border-radius:.42rem}::ng-deep .toasttitile{color:#3f4254;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:140%}::ng-deep .list{overflow-y:auto}::ng-deep .listitemlabel{font-size:13px!important;font-weight:600;font-family:Inter;color:#7e8299}::ng-deep .swal2-container{padding:.4em!important}::ng-deep .swal2-icon{border:1px solid white!important}::ng-deep body.swal2-toast-shown .swal2-container{width:500px!important}::ng-deep .swal2-popup.swal2-toast{border-left:4px solid #009EF7}::ng-deep .swal2-popup.swal2-toast .swal2-title{margin:9px 5px auto!important}::ng-deep .label{color:#3f4254;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:140%}::ng-deep .custom-test{color:var(--gray-700, #344054)!important;text-align:start;font-family:Inter;font-size:12px;font-style:normal;border-radius:8px;box-shadow:0 4px 6px -2px #10182808,0 12px 16px -4px #10182814;font-weight:600;line-height:18px;background:#fff}.text-gray-700{color:#344054!important}.mandatoryfield input,.answervalidation input{border:none;padding:0!important}.mandatoryfield input[type=checkbox],.answervalidation input[type=checkbox]{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #D0D5DD)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}.mandatoryfield input[type=checkbox]:checked,.answervalidation input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF)!important;background-color:var(--primary-50, #EAF8FF)}.mandatoryfield input[type=checkbox]:checked:after,.answervalidation input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.concise-checklistname{display:inline-block;width:100%;white-space:nowrap;overflow:hidden!important;text-overflow:ellipsis!important;text-transform:capitalize}.concise-question{display:inline-block;width:100%;white-space:nowrap;overflow:hidden!important;text-overflow:ellipsis!important;text-align:left}.active-question{color:var(--primary-700, #009BF3);font-size:16px;font-style:normal;font-weight:500;line-height:24px;display:flex;padding:8px 12px;align-items:center;gap:105px;align-self:stretch;border-radius:6px;background:var(--primary-50, #EAF8FF)}.q-btn{color:var(--gray-700, #344054);font-size:16px;font-style:normal;font-weight:500;line-height:24px;display:flex;padding:8px 12px;align-items:center;gap:105px;align-self:stretch;border-radius:6px;background:var(--primary-50, white)}.pointer{cursor:pointer}select option{padding:4px}.add-ref-btn{border-radius:8px;border:1px solid var(--primary-50, #EAF8FF);box-shadow:0 1px 2px #1018280d;padding:14px 0!important}::ng-deep .form-switch .form-check-input{border:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='rgba(255, 255, 255, 1)'/%3E%3C/svg%3E\")!important}::ng-deep .form-switch .form-check-input:not(:checked){background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='rgba(255, 255, 255, 1)'/%3E%3C/svg%3E\")!important;background-color:var(--gray-100, #F2F4F7)!important}.plain-input{border:none;outline:none;background:transparent;padding:0;margin:0;width:100%;overflow:hidden;color:var(--black, #101828);text-overflow:ellipsis;font-family:Inter;font-size:18px;font-style:normal;font-weight:500;line-height:28px}.plain-input:focus{border-radius:0!important;border:white!important;outline:none!important;box-shadow:none!important}.auto-adjust{max-width:100%;max-height:100%;object-fit:contain;background-color:#fff}.createbuttons{padding:10px 18px;justify-content:center;align-items:center;gap:8px;border-radius:8px;border:1px solid var(--primary-600, #00A3FF);background:var(--primary-600, #00A3FF);box-shadow:0 1px 2px #1018280d}.create{color:var(--white, #FFF);font-family:Inter;font-size:16px;font-style:normal;font-weight:600;line-height:24px;text-transform:capitalize}.savedraft{border-radius:8px;border:1px solid var(--gray-300, #D0D5DD);background:var(--white, #FFF);padding:10px 18px;justify-content:center;align-items:center;gap:8px;box-shadow:0 1px 2px #1018280d}.savedraft:hover{background:#f3f8fd!important;border:1px solid var(--gray-300, #D0D5DD)!important}.savedrafttext{color:var(--gray-700, #344054);font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-transform:capitalize}.questionsArea{overflow-y:scroll;max-height:60vh;padding:4px}::ng-deep .questionsArea::-webkit-scrollbar-thumb{-webkit-border-radius:10px!important;border-radius:10px!important;background:var(--gray-100, #eaeaea)!important;height:50px!important}::ng-deep .questionsArea::-webkit-scrollbar{width:10px!important}::ng-deep .questionsArea::-webkit-scrollbar-track{background:none!important;box-shadow:none!important}::ng-deep .swal2-html-container{overflow:hidden!important}.ansoptions{color:var(--gray-700, #344054);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.checklist{font-family:Inter;font-size:20px;font-weight:600;line-height:28px;text-align:left;color:#667085!important}.checklistDescription{font-family:Inter;font-size:14px;font-weight:400;line-height:18px;text-align:left}.dscriptiveType{font-size:15px!important}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i2.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: i2.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i2.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i2.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i8.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "cdkDropListData", "cdkDropListOrientation", "id", "cdkDropListLockAxis", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListAutoScrollDisabled", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { kind: "directive", type: i8.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }] });
|
|
1381
|
+
}
|
|
1382
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AddChecklistComponent, decorators: [{
|
|
1383
|
+
type: Component,
|
|
1384
|
+
args: [{ selector: 'lib-add-checklist', template: "<div class=\"card\">\r\n <ng-container [formGroup]=\"ChecklistForm\">\r\n <div class=\"card-header border-0 pt-3 pb-3\">\r\n <h3 class=\"card-title align-items-start flex-column w-85\">\r\n <div class=\"editablecontent mb-4\"><input type=\"text\" class=\"checklist plain-input\" #checklistName placeholder=\"Enter Checklist Name\" formControlName=\"checklistName\"></div>\r\n <div class=\"editablecontent\"><input type=\"text\" class=\"checklistDescription plain-input\" #checklistDescription placeholder=\"Enter Checklist Description\" formControlName=\"checklistDescription\"></div>\r\n </h3>\r\n <div class=\"card-toolbar\">\r\n <div class=\"d-flex\">\r\n <div class=\"d-flex align-items-center position-relative my-1\">\r\n <button type=\"button\" class=\"btn btn-primary mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\" *ngIf=\"showvalue === 'add'\" (click)=\"saveChecklistQuestions('configure')\"><span class=\"ms-2\">Configure</span> </button>\r\n \r\n <button type=\"button\" class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\" *ngIf=\"showvalue === 'add'\" (click)=\"saveAsDraftPop('create')\"><span class=\"ms-2\">Save as Draft</span> </button>\r\n \r\n <button type=\"button\" class=\"btn btn-primary mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\" *ngIf=\"showvalue === 'edit'\" (click)=\"updateChecklistQuestions('configure')\"><span class=\"ms-2\">Configure</span> </button>\r\n <button type=\"button\" class=\"btn btn-default mx-2 btn-outline btn-outline-default rounded-3 text-nowrap border-val\" *ngIf=\"showvalue === 'edit'\" (click)=\"saveAsDraftPop('update')\"><span class=\"ms-2\">Save as Draft</span> </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</div>\r\n\r\n<div class=\"row\" *ngIf=\"!checklistLoading\">\r\n <div class=\"col-lg-3 mt-2\">\r\n <ng-container [formGroup]=\"ChecklistForm\">\r\n <div class=\"section-left card px-7 py-7\">\r\n <div class=\"fs-18px fw-600 text-left mb-3 concise-checklistname\">\r\n {{getFormControl('checklistName').value ? getFormControl('checklistName').value : 'ChecklistName'}}\r\n </div>\r\n <div class=\"left-panel-container\" formArrayName=\"sections\">\r\n <div *ngFor=\"let section of getSectionFormArray().controls;let i=index;\">\r\n <ng-container [formGroupName]=\"i\">\r\n <div class=\"d-flex section align-items-center justify-content-between\">\r\n <div class=\"fs-18px fw-bold editablecontent-left\">{{\r\n getSectionFormControl(i,'name')?.value === '' ? \"Section \" : ''}}{{\r\n getSectionFormControl(i,'name')?.value ? getSectionFormControl(i,'name')?.value\r\n : getSectionFormControl(i,'sectionNumber')?.value}}</div>\r\n <hr class=\"mx-2\">\r\n <svg (click)=\"deleteSection(i)\" xmlns=\"http://www.w3.org/2000/svg\" width=\"35\"\r\n height=\"35\" viewBox=\"0 0 18 18\" matTooltip=\"Delete section\"\r\n matTooltipPosition=\"above\" matTooltipClass=\"custom-test\" fill=\"none\">\r\n <path\r\n d=\"M2.25 4.5H3.75M3.75 4.5H15.75M3.75 4.5V15C3.75 15.3978 3.90804 15.7794 4.18934 16.0607C4.47064 16.342 4.85218 16.5 5.25 16.5H12.75C13.1478 16.5 13.5294 16.342 13.8107 16.0607C14.092 15.7794 14.25 15.3978 14.25 15V4.5H3.75ZM6 4.5V3C6 2.60218 6.15804 2.22064 6.43934 1.93934C6.72064 1.65804 7.10218 1.5 7.5 1.5H10.5C10.8978 1.5 11.2794 1.65804 11.5607 1.93934C11.842 2.22064 12 2.60218 12 3V4.5M7.5 8.25V12.75M10.5 8.25V12.75\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg (click)=\"accordian(i)\" [ngClass]=\"{'rotate' : show !== i}\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"35\" height=\"35\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <ng-container *ngIf=\"show===i\">\r\n <div cdkDropList (cdkDropListDropped)=\"dragDrop(i,$event)\"\r\n [cdkDropListData]=\"getFormArrayQuestions(i).controls\" class=\"question-left\">\r\n <ng-container formArrayName=\"questions\">\r\n <div *ngFor=\"let question of getFormArrayQuestions(i).controls;let j=index;\"\r\n class=\"my-2\"\r\n [ngClass]=\"question.get('active')?.value === true ? 'active-question' : 'q-btn'\"\r\n cdkDrag (mouseenter)=\"setActiveQuestion(i,j,1)\"\r\n (click)=\"scrollToQuestion(i,j);\"\r\n (mouseleave)=\"setActiveQuestion(i,j,-1)\">\r\n <ng-container [formGroupName]=\"j\">\r\n <div class=\"concise-question\">\r\n {{getQuestionFormControl(i,j,'qname')?.value ? '' : \"Question\"}}{{ getQuestionFormControl(i,j,'qname')?.value ?\r\n getQuestionFormControl(i,j,'qname')?.value :\r\n getQuestionFormControl(i,j,'qno')?.value }}\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"col-lg-9 mt-2\">\r\n <form [formGroup]=\"ChecklistForm\" #formRef>\r\n <div class=\"card px-7\">\r\n <!-- <div class=\"checklist-card py-5\">\r\n <input type=\"text\" class=\"mt-2\" style=\"text-transform: capitalize;\"\r\n placeholder=\"Enter checklist name here\" formControlName=\"checklistName\">\r\n <input type=\"text\" class=\"mt-4\" placeholder=\"Enter checklist description here\"\r\n formControlName=\"checklistDescription\">\r\n </div> -->\r\n <ng-container formArrayName=\"sections\" >\r\n <div class=\"sectionArea mt-5\" *ngFor=\"let section of getSectionFormArray().controls;let i=index;\">\r\n <ng-container [formGroupName]=\"i\">\r\n <div class=\"section d-flex align-items-center justify-content-between\">\r\n\r\n <div class=\"fs-18px fw-bold editablecontent\"><input type=\"text\" class=\"plain-input\"\r\n #sectionName (change)=\"updateInputValue(i,sectionName.value)\"\r\n formControlName=\"name\"></div>\r\n <hr>\r\n <svg class=\"ml-5\" (click)=\"deleteSection(i)\" xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\" matTooltip=\"Delete section\" matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path\r\n d=\"M2.25 4.5H3.75M3.75 4.5H15.75M3.75 4.5V15C3.75 15.3978 3.90804 15.7794 4.18934 16.0607C4.47064 16.342 4.85218 16.5 5.25 16.5H12.75C13.1478 16.5 13.5294 16.342 13.8107 16.0607C14.092 15.7794 14.25 15.3978 14.25 15V4.5H3.75ZM6 4.5V3C6 2.60218 6.15804 2.22064 6.43934 1.93934C6.72064 1.65804 7.10218 1.5 7.5 1.5H10.5C10.8978 1.5 11.2794 1.65804 11.5607 1.93934C11.842 2.22064 12 2.60218 12 3V4.5M7.5 8.25V12.75M10.5 8.25V12.75\"\r\n stroke=\"#667085\" stroke-width=\"1.4\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n <svg (click)=\"accordian(i)\" [ngClass]=\"{'rotate' : show !== i}\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path d=\"M5 7.5L10 12.5L15 7.5\" stroke=\"#667085\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n <div class=\"questionsArea\" *ngIf=\"show === i\">\r\n <ng-container formArrayName=\"questions\">\r\n <div class=\"Question-sec mt-5\"\r\n *ngFor=\"let question of getFormArrayQuestions(i).controls;let j = index;\"\r\n (mouseenter)=\"setActiveQuestion(i,j,1)\"\r\n (mouseleave)=\"setActiveQuestion(i,j,-1)\">\r\n <ng-container [formGroupName]=\"j\">\r\n <span class=\"fs-18px fw-bolder editablecontent questiontitle\"\r\n style=\"cursor: default;\"> Question {{j+1}}</span>\r\n\r\n <div class=\"checklist-card pb-5\">\r\n <textarea class=\"form-control form-control-solid\" rows=\"1\"\r\n type=\"text\" class=\"mt-0\" [id]=\"'q-' + i + '-' + j\"\r\n placeholder=\"Enter question here\"\r\n formControlName=\"qname\"></textarea>\r\n <ng-container\r\n *ngIf=\"question.get('qname')?.invalid && question.get('qname')?.touched\">\r\n <p style=\"color: red;\"\r\n *ngIf=\"question.get('qname')?.hasError('required')\">*\r\n Question is required.</p>\r\n </ng-container>\r\n </div>\r\n\r\n <div class=\"row\"\r\n *ngIf=\"!['descriptiveImage','image','multipleImage'].includes(question.get('answerType')?.value)\">\r\n <div *ngIf=\"getAnswerFormGroup_FormControl(i,j,'questionReferenceImage')?.value\"\r\n class=\"ref_img_cont mb-4 mt-5\">\r\n <img [src]=\"getAnswerFormGroup_FormControl(i,j,'questionReferenceImage')?.value\"\r\n width=\"100%\" height=\"300px\" class=\"auto-adjust\"\r\n alt=\"Tango Eye\" />\r\n <div class=\"ref_del_icon\" (click)=\"clearReferenceImage(i,j);\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"d-flex mb-3\">\r\n <div *ngIf=\"getAnswerFormGroup_FormControl(i,j,'questionReferenceImage')?.value\"\r\n class=\"col-lg-3 btn btn-light-primary mt-2\">\r\n <input class=\"d-none\" [id]=\"'fileupload_'+i+j\" type=\"file\"\r\n name=\"answerFile\" accept=\"image/png, image/jpeg\"\r\n (change)=\"loadImageFromDevice(i,refImgQIdx,$event,-1,'questionReferenceImage')\">\r\n <label [for]=\"'fileupload_'+i+j\" (click)=\"refImgQIdx=j;\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\"\r\n width=\"21\" height=\"20\" viewBox=\"0 0 21 20\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>Reupload Image</label>\r\n </div>\r\n <div *ngIf=\"!getAnswerFormGroup_FormControl(i,j,'questionReferenceImage')?.value\"\r\n class=\"col-lg-3 btn add-ref-btn btn-light-primary my-2\">\r\n <input class=\"d-none\" [id]=\"'fileupload_'+i+j\" type=\"file\"\r\n name=\"file\" accept=\"image/png, image/jpeg\"\r\n (change)=\"loadImageFromDevice(i,refImgQIdx,$event,-1,'questionReferenceImage')\">\r\n <label class=\"pointer\" [for]=\"'fileupload_'+i+j\"\r\n (click)=\"refImgQIdx=j;\"> <svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>Add Reference Image </label>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"checklist-card pb-5\">\r\n <select class=\"mt-5\" name=\"selectoption\"\r\n (change)=\"answerTypeSelection(i,j,$event)\"\r\n formControlName=\"answerType\">\r\n <option name=\"descriptive\" value=\"descriptive\">Descriptive\r\n Answer</option>\r\n <option name=\"yes/no\" value=\"yes/no\">A/B Question</option>\r\n <option name=\"multiplechoicesingle\"\r\n value=\"multiplechoicesingle\">Multiple Choice Question -\r\n Single Answer</option>\r\n <option name=\"multiplechoicemultiple\"\r\n value=\"multiplechoicemultiple\">Multiple Choice Question -\r\n Multiple Answer</option>\r\n <option name=\"descriptiveImage\" value=\"descriptiveImage\">Capture\r\n Image with Description</option>\r\n <option name=\"image\" value=\"image\">Capture Image as answer\r\n </option>\r\n <option name=\"video\" value=\"video\">Capture video as answer\r\n </option>\r\n <option name=\"multipleImage\" value=\"multipleImage\">Capture\r\n Multiple Image</option>\r\n <option name=\"date\" value=\"date\">Date - DD/MM/YYYY</option>\r\n </select>\r\n\r\n </div>\r\n <div class=\"col-lg-3 mx-4 d-flex mt-3\" *ngIf=\"['descriptive'].includes(question.get('answerType')?.value)\">\r\n <div class=\"form-check\" >\r\n <input formControlName=\"descriptivetype\" class=\"form-check-input cursor-pointer\" type=\"radio\" value=\"text\" [name]=\"'descriptivetype'\" [id]=\"'inlineRadio' + j\">\r\n <label class=\"cursor-pointer dscriptiveType\" for=\"inlineRadio1\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\" class=\"form-check-input cursor-pointer\" type=\"radio\" value=\"number\" [name]=\"'descriptivetype'\" [id]=\"'inlineRadio' + j\">\r\n <label class=\"cursor-pointer dscriptiveType\" for=\"inlineRadio1\">Number</label>\r\n </div>\r\n </div>\r\n <ng-container\r\n *ngIf=\"question.get('answerType')?.value === 'yes/no' || question.get('answerType')?.value === 'multiplechoicesingle' || question.get('answerType')?.value === 'multiplechoicemultiple'\">\r\n <div class=\"fs-18px fw-bolder\" style=\"cursor: default;\">Answer\r\n Options</div>\r\n <ng-container formArrayName=\"answers\">\r\n <ng-container\r\n *ngFor=\"let answer of getFormArrayQuestionsAnswer(i,j,'answers')?.controls;let k = index;\">\r\n <div class=\"row\" [formGroupName]=\"k\">\r\n <ng-container *ngIf=\"!answer.get('isdeleted')?.value\">\r\n <div class=\"col-lg-6 Answer1\">\r\n <div class=\"checklist-card pb-0 mt-5\">\r\n <input type=\"text\" class=\"mt-0\"\r\n placeholder=\"Enter answer here\"\r\n formControlName=\"answer\">\r\n <span class=\"vl\"></span>\r\n <ng-container\r\n *ngIf=\"question.get('answerType')?.value === 'yes/no' || question.get('answerType')?.value === 'multiplechoicesingle'\"\r\n ngDefaultControl>\r\n <span class=\"vl2\"></span>\r\n <svg class=\"imgAdd\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\"\r\n (click)=\"updateLinked(i,j,k)\">\r\n <path\r\n d=\"M9.99999 4.16602V15.8327M4.16666 9.99935H15.8333\"\r\n stroke=\"#344054\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </ng-container>\r\n <ng-container\r\n *ngIf=\"answer.get('answer')?.invalid && answer.get('answer')?.touched\">\r\n <p style=\"color: red;\"\r\n *ngIf=\"answer.get('answer')?.hasError('required')\">\r\n * Answer is required.</p>\r\n </ng-container>\r\n <p style=\"color: red;\"\r\n *ngIf=\"answer.get('showSOPFlagError')?.value === true\">\r\n Every answer can\u2019t be a flag.</p>\r\n\r\n <ng-container formControlName=\"sopFlag\"\r\n ngDefaultControl>\r\n\r\n <svg (click)=\"raiseflag(i,j,k,true)\"\r\n matTooltip=\"Raise a flag if this answer is selected\"\r\n matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\"\r\n *ngIf=\"answer.get('sopFlag')?.value === false\"\r\n class=\"kiwi\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\">\r\n <path\r\n d=\"M2.66669 10.0007C2.66669 10.0007 3.33335 9.33398 5.33335 9.33398C7.33335 9.33398 8.66669 10.6673 10.6667 10.6673C12.6667 10.6673 13.3334 10.0007 13.3334 10.0007V2.00065C13.3334 2.00065 12.6667 2.66732 10.6667 2.66732C8.66669 2.66732 7.33335 1.33398 5.33335 1.33398C3.33335 1.33398 2.66669 2.00065 2.66669 2.00065V10.0007ZM2.66669 10.0007V14.6673\"\r\n stroke=\"#D0D5DD\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n\r\n <svg (click)=\"raiseflag(i,j,k,false)\"\r\n matTooltip=\"Raise a flag if this answer is selected\"\r\n matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\"\r\n *ngIf=\"answer.get('sopFlag')?.value === true\"\r\n class=\"active-flag\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"16\" height=\"16\"\r\n viewBox=\"0 0 16 16\">\r\n <path\r\n d=\"M2.66669 10.0007C2.66669 10.0007 3.33335 9.33398 5.33335 9.33398C7.33335 9.33398 8.66669 10.6673 10.6667 10.6673C12.6667 10.6673 13.3334 10.0007 13.3334 10.0007V2.00065C13.3334 2.00065 12.6667 2.66732 10.6667 2.66732C8.66669 2.66732 7.33335 1.33398 5.33335 1.33398C3.33335 1.33398 2.66669 2.00065 2.66669 2.00065V10.0007ZM2.66669 10.0007V14.6673\"\r\n stroke=\"#D0D5DD\"\r\n stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6\"\r\n *ngIf=\"!answer.get('showLinked')?.value\">\r\n <div class=\"d-flex justify-content-between\">\r\n <div class=\"d-flex answervalidation\">\r\n <input class=\"mt-7\" type=\"checkbox\"\r\n style=\"width:16px;height:16px;cursor: pointer;\"\r\n value=\"1\"\r\n (change)=\"getvalidation(i,j,k,$event)\"\r\n formControlName=\"validation\">\r\n <div class=\"chackbox pt-4 mt-2 mx-2\"\r\n style=\"cursor: default;\">\r\n <h3>Validate response</h3>\r\n <p class=\"mb-0\">Trigger an action\r\n for each response to validate it\r\n </p>\r\n </div>\r\n </div>\r\n <svg *ngIf=\"question.get('answerType')?.value !== 'yes/no'\"\r\n (click)=\"deleteAnswer(i,j,k)\"\r\n class=\"mt-8\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n matTooltip=\"Delete answer\"\r\n matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path d=\"M15 5L5 15M5 5L15 15\"\r\n stroke=\"#667085\"\r\n stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n\r\n </div>\r\n <!-- *ngIf=\"moreqn.validation\" -->\r\n <div *ngIf=\"answer.get('validation')?.value\"\r\n class=\"row\">\r\n <div class=\"col-lg-3 pt-7 fs-4 fw-400 mt-1\">\r\n If the response is this, then\r\n </div>\r\n <div class=\"col-lg-3\">\r\n <select class=\"mt-5 mx-1\"\r\n formControlName=\"validationType\"\r\n (change)=\"updateValidationType($event,i,j,k)\">\r\n <option>Descriptive Answer</option>\r\n <option>Capture Image</option>\r\n <option>Capture Video</option>\r\n </select>\r\n </div>\r\n <div class=\"col-lg-3 mx-4 d-flex pt-8\" *ngIf=\"answer.get('validationType')?.value === 'Descriptive Answer'\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\" class=\"form-check-input cursor-pointer\" type=\"radio\" id=\"inlineRadio1\"\r\n value=\"text\" [name]=\"'descriptivetype'\">\r\n <label class=\"cursor-pointer dscriptiveType\" for=\"inlineRadio1\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\" class=\"form-check-input cursor-pointer\" type=\"radio\" id=\"inlineRadio1\"\r\n value=\"number\" [name]=\"'descriptivetype'\">\r\n <label class=\"cursor-pointer dscriptiveType\" for=\"inlineRadio1\">Number</label>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"row\"\r\n *ngIf=\"answer.get('showLinked')?.value\">\r\n <div class=\"col-lg-3 pt-7 fs-4 fw-400 mt-1\">\r\n Linked Question\r\n </div>\r\n <div class=\"col-lg-9\">\r\n <select [id]=\"i+'-'+k\" [name]=\"i+'-'+k\"\r\n class=\"mt-5\"\r\n formControlName=\"linkedQuestion\"\r\n (change)=\"updateQuestionType(i,$event)\">\r\n <option value=\"\">Select Question\r\n </option>\r\n <option\r\n *ngFor=\"let option of getQuestionList(i,j,k)\"\r\n [value]=\"option\">Question {{option}}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n <div class=\"row\"\r\n *ngIf=\"answer.get('validation')?.value && answer.get('validationType')?.value === 'Capture Image'\">\r\n <div *ngIf=\"getAnswerFormGroup_FormControl(i,j,'referenceImage',k)?.value\"\r\n class=\"ref_img_cont mb-4 mt-5\">\r\n <img [src]=\"getAnswerFormGroup_FormControl(i,j,'referenceImage',k)?.value\"\r\n width=\"100%\" height=\"300px\"\r\n class=\"auto-adjust\" alt=\"Tango Eye\" />\r\n <div class=\"ref_del_icon\"\r\n (click)=\"clearReferenceImage(i,j,k);\">\r\n <svg width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"d-flex mb-3\">\r\n <div *ngIf=\"getAnswerFormGroup_FormControl(i,j,'referenceImage',k)?.value\"\r\n class=\"col-lg-3 btn btn-light-primary mt-2\">\r\n <input class=\"d-none\"\r\n [id]=\"'fileupload_'+i+j+k\"\r\n type=\"file\" name=\"answerFile\"\r\n accept=\"image/png, image/jpeg\"\r\n (change)=\"loadImageFromDevice(i,refImgQIdx,$event,k)\">\r\n <label [for]=\"'fileupload_'+i+j+k\"\r\n (click)=\"refImgQIdx=j;\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\"\r\n class=\"mx-2\" width=\"21\"\r\n height=\"20\" viewBox=\"0 0 21 20\"\r\n fill=\"none\">\r\n <g\r\n clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath\r\n id=\"clip0_4082_3122\">\r\n <rect width=\"20\"\r\n height=\"20\"\r\n fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>Reupload Image</label>\r\n </div>\r\n <div *ngIf=\"!getAnswerFormGroup_FormControl(i,j,'referenceImage',k)?.value\"\r\n class=\"col-lg-3 btn add-ref-btn btn-light-primary my-2\">\r\n <input class=\"d-none\"\r\n [id]=\"'fileupload_'+i+j+k\"\r\n type=\"file\" name=\"file\"\r\n accept=\"image/png, image/jpeg\"\r\n (change)=\"loadImageFromDevice(i,refImgQIdx,$event,k)\">\r\n <label class=\"pointer\"\r\n [for]=\"'fileupload_'+i+j+k\"\r\n (click)=\"refImgQIdx=j;\"> <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\"\r\n stroke=\"#009BF3\"\r\n stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>Add Reference Image </label>\r\n </div>\r\n <div\r\n class=\"col-lg-4 form-check form-switch mx-2 btn-sec mt-6 text-left align-items-center\">\r\n <input\r\n class=\"form-check-input mx-0 pointer\"\r\n type=\"checkbox\" name=\"toc\" value=\"1\"\r\n ngDefaultControl\r\n formControlName=\"allowUploadfromGallery\">\r\n <label class=\"form-check-label pointer\"\r\n for=\"flexSwitchCheckDefault\"></label>\r\n Allow upload from gallery\r\n </div>\r\n <div class=\"col-lg-2\"></div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container class=\"row\"\r\n *ngIf=\"(question.get('answerType')?.value === 'multiplechoicemultiple' || \r\n question.get('answerType')?.value === 'multiplechoicesingle') && \r\n allowAddAnswer(question.get('answers')?.value)\">\r\n <div (click)=\"AddMoreAns(i,j,question.get('answerType')?.value)\"\r\n class=\"btn col-lg-12 btn-light-primary my-3\">\r\n Add More Answer</div>\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Image -->\r\n <ng-container\r\n *ngIf=\"['image','descriptiveImage','multipleImage'].includes(question.get('answerType')?.value)\"\r\n class=\"row\">\r\n <ng-container formGroupName=\"answers\">\r\n <div *ngIf=\"getAnswerFormGroup_FormControl(i,j,'referenceImage')?.value\"\r\n class=\"ref_img_cont mb-4\">\r\n <img [src]=\"getAnswerFormGroup_FormControl(i,j,'referenceImage')?.value\"\r\n width=\"100%\" height=\"300px\" class=\"auto-adjust\"\r\n alt=\"Tango Eye\" />\r\n <div class=\"ref_del_icon\"\r\n (click)=\"clearReferenceImage(i,j);\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\"\r\n fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <path\r\n d=\"M2.5 5.0013H4.16667M4.16667 5.0013H17.5M4.16667 5.0013V16.668C4.16667 17.11 4.34226 17.5339 4.65482 17.8465C4.96738 18.159 5.39131 18.3346 5.83333 18.3346H14.1667C14.6087 18.3346 15.0326 18.159 15.3452 17.8465C15.6577 17.5339 15.8333 17.11 15.8333 16.668V5.0013H4.16667ZM6.66667 5.0013V3.33464C6.66667 2.89261 6.84226 2.46868 7.15482 2.15612C7.46738 1.84356 7.89131 1.66797 8.33333 1.66797H11.6667C12.1087 1.66797 12.5326 1.84356 12.8452 2.15612C13.1577 2.46868 13.3333 2.89261 13.3333 3.33464V5.0013M8.33333 9.16797V14.168M11.6667 9.16797V14.168\"\r\n stroke=\"#B42318\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n <div class=\"d-flex mb-3\">\r\n <div *ngIf=\"getAnswerFormGroup_FormControl(i,j,'referenceImage')?.value\"\r\n class=\"col-lg-3 btn btn-light-primary mt-2\">\r\n <input class=\"d-none\" id=\"fileupload\" type=\"file\"\r\n name=\"file\" accept=\"image/png, image/jpeg\"\r\n (change)=\"loadImageFromDevice(i,refImgQIdx,$event)\">\r\n <label for=\"fileupload\" (click)=\"refImgQIdx=j;\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"mx-2\"\r\n width=\"21\" height=\"20\" viewBox=\"0 0 21 20\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_4082_3122)\">\r\n <path\r\n d=\"M19.6667 3.33527V8.33527M19.6667 8.33527H14.6667M19.6667 8.33527L15.8 4.70193C14.9044 3.80586 13.7964 3.15127 12.5793 2.79925C11.3623 2.44722 10.0759 2.40923 8.84025 2.68882C7.60456 2.96841 6.45984 3.55646 5.5129 4.39812C4.56595 5.23977 3.84765 6.30759 3.42501 7.50193M1.33334 16.6686V11.6686M1.33334 11.6686H6.33334M1.33334 11.6686L5.20001 15.3019C6.09563 16.198 7.20365 16.8526 8.42068 17.2046C9.63771 17.5567 10.9241 17.5946 12.1598 17.3151C13.3955 17.0355 14.5402 16.4474 15.4871 15.6058C16.4341 14.7641 17.1524 13.6963 17.575 12.5019\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_4082_3122\">\r\n <rect width=\"20\" height=\"20\"\r\n fill=\"white\"\r\n transform=\"translate(0.5)\" />\r\n </clipPath>\r\n </defs>\r\n </svg>Reupload Image</label>\r\n </div>\r\n <div *ngIf=\"!getAnswerFormGroup_FormControl(i,j,'referenceImage')?.value\"\r\n class=\"col-lg-3 btn add-ref-btn btn-light-primary my-2\">\r\n <input class=\"d-none\" id=\"fileupload\" type=\"file\"\r\n name=\"file\" accept=\"image/png, image/jpeg\"\r\n (change)=\"loadImageFromDevice(i,refImgQIdx,$event)\">\r\n <label class=\"pointer\" for=\"fileupload\"\r\n (click)=\"refImgQIdx=j;\"> <svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\"\r\n height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path\r\n d=\"M10 4.16797V15.8346M4.16669 10.0013H15.8334\"\r\n stroke=\"#009BF3\" stroke-width=\"1.67\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>Add Reference Image </label>\r\n </div>\r\n <div\r\n class=\"col-lg-4 form-check form-switch mx-2 btn-sec mt-6 text-left align-items-center\">\r\n <input class=\"form-check-input mx-0 pointer\"\r\n type=\"checkbox\" name=\"toc\" value=\"1\"\r\n ngDefaultControl\r\n formControlName=\"allowUploadfromGallery\">\r\n <label class=\"form-check-label pointer\"\r\n for=\"flexSwitchCheckDefault\"></label>\r\n Allow upload from gallery\r\n </div>\r\n <div\r\n [ngClass]=\"(['multipleImage'].includes(question.get('answerType')?.value) && getAnswerFormGroup_FormControl(i,j,'referenceImage')?.value === '') ? 'col-lg-4 mt-6' : ['image'].includes(question.get('answerType')?.value) ? 'col-lg-2' : ''\">\r\n <div class=\"d-flex\" *ngIf=\"(['multipleImage'].includes(question.get('answerType')?.value) && getAnswerFormGroup_FormControl(i,j,'referenceImage')?.value === '')\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\" class=\"form-check-input cursor-pointer\" type=\"radio\" id=\"inlineRadio1\"\r\n value=\"text\" [name]=\"'descriptivetype'\">\r\n <label class=\"cursor-pointer dscriptiveType\" for=\"inlineRadio1\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\" class=\"form-check-input cursor-pointer\" type=\"radio\" id=\"inlineRadio1\"\r\n value=\"number\" [name]=\"'descriptivetype'\">\r\n <label class=\"cursor-pointer dscriptiveType\" for=\"inlineRadio1\">Number</label>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"getAnswerFormGroup_FormControl(i,j,'referenceImage')?.value && ['image','multipleImage'].includes(question.get('answerType')?.value)\"\r\n [ngClass]=\"question.get('answerType')?.value === 'multipleImage' ? 'col-lg-5 d-flex mt-6' : 'col-lg-3 d-flex justify-content-center align-items-center mt-2'\">\r\n <div class=\"d-flex\" *ngIf=\"question.get('answerType')?.value === 'multipleImage'\">\r\n <div class=\"form-check\">\r\n <input formControlName=\"descriptivetype\" class=\"form-check-input cursor-pointer\" type=\"radio\" id=\"inlineRadio1\"\r\n value=\"text\" [name]=\"'descriptivetype'\">\r\n <label class=\"cursor-pointer dscriptiveType\" for=\"inlineRadio1\">Text</label>\r\n </div>\r\n <div class=\"form-check ms-5\">\r\n <input formControlName=\"descriptivetype\" class=\"form-check-input cursor-pointer\" type=\"radio\" id=\"inlineRadio1\"\r\n value=\"number\" [name]=\"'descriptivetype'\">\r\n <label class=\"cursor-pointer dscriptiveType\" for=\"inlineRadio1\">Number</label>\r\n </div>\r\n </div>\r\n <h3 class=\"fs16-600 px-12\"> Run AI \u2728</h3>\r\n <div class=\"form-check form-switch align-items-center btn-sec ml-5\"\r\n (click)=\"RunAI(i,j)\">\r\n <input class=\"form-check-input\" type=\"checkbox\"\r\n formControlName=\"runAI\" name=\"toc\" value=\"1\">\r\n <label class=\"form-check-label\"\r\n for=\"flexSwitchCheckDefault\"></label>\r\n </div>\r\n <svg [ngClass]=\"question.get('answerType')?.value === 'multipleImage' ? 'mt-1' : ''\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"16\"\r\n height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\"\r\n matTooltip=\"Enable AI where you want tango to identify, track and alert instances.\"\r\n matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\">\r\n <g clip-path=\"url(#clip0_2301_100038)\">\r\n <path\r\n d=\"M7.99967 10.6654V7.9987M7.99967 5.33203H8.00634M14.6663 7.9987C14.6663 11.6806 11.6816 14.6654 7.99967 14.6654C4.31778 14.6654 1.33301 11.6806 1.33301 7.9987C1.33301 4.3168 4.31778 1.33203 7.99967 1.33203C11.6816 1.33203 14.6663 4.3168 14.6663 7.9987Z\"\r\n stroke=\"#98A2B3\" stroke-width=\"2\"\r\n stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_2301_100038\">\r\n <rect width=\"16\" height=\"16\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Video -->\r\n <ng-container *ngIf=\"question.get('answerType')?.value === 'video'\"\r\n class=\"row\">\r\n <ng-container formGroupName=\"answers\">\r\n <div\r\n class=\" col-lg-4 form-check form-switch text-left align-items-center btn-sec mt-2\">\r\n <input class=\"form-check-input mx-0 pointer\" type=\"checkbox\"\r\n name=\"toc\" value=\"1\" ngDefaultControl\r\n formControlName=\"allowUploadfromGallery\">\r\n <label class=\"form-check-label pointer\"\r\n for=\"flexSwitchCheckDefault\"></label>\r\n Allow upload from gallery\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <div class=\"d-flex justify-content-end py-2\">\r\n <div class=\"pt-1\">\r\n <svg (click)=\"cloneQuestion(i,j)\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n matTooltip=\"Duplicate\" matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_3385_10578)\">\r\n <path\r\n d=\"M4.16663 12.4993H3.33329C2.89127 12.4993 2.46734 12.3238 2.15478 12.0112C1.84222 11.6986 1.66663 11.2747 1.66663 10.8327V3.33268C1.66663 2.89065 1.84222 2.46673 2.15478 2.15417C2.46734 1.84161 2.89127 1.66602 3.33329 1.66602H10.8333C11.2753 1.66602 11.6992 1.84161 12.0118 2.15417C12.3244 2.46673 12.5 2.89065 12.5 3.33268V4.16602M9.16663 7.49935H16.6666C17.5871 7.49935 18.3333 8.24554 18.3333 9.16602V16.666C18.3333 17.5865 17.5871 18.3327 16.6666 18.3327H9.16663C8.24615 18.3327 7.49996 17.5865 7.49996 16.666V9.16602C7.49996 8.24554 8.24615 7.49935 9.16663 7.49935Z\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_3385_10578\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n <svg (click)=\"deleteQuestion(i,j)\"\r\n style=\"margin-left: 24px !important;\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n matTooltip=\"Delete question\" matTooltipPosition=\"above\"\r\n matTooltipClass=\"custom-test\" viewBox=\"0 0 20 20\"\r\n fill=\"none\">\r\n <path\r\n d=\"M2.5 4.99935H4.16667M4.16667 4.99935H17.5M4.16667 4.99935V16.666C4.16667 17.108 4.34226 17.532 4.65482 17.8445C4.96738 18.1571 5.39131 18.3327 5.83333 18.3327H14.1667C14.6087 18.3327 15.0326 18.1571 15.3452 17.8445C15.6577 17.532 15.8333 17.108 15.8333 16.666V4.99935H4.16667ZM6.66667 4.99935V3.33268C6.66667 2.89065 6.84226 2.46673 7.15482 2.15417C7.46738 1.84161 7.89131 1.66602 8.33333 1.66602H11.6667C12.1087 1.66602 12.5326 1.84161 12.8452 2.15417C13.1577 2.46673 13.3333 2.89065 13.3333 3.33268V4.99935M8.33333 9.16602V14.166M11.6667 9.16602V14.166\"\r\n stroke=\"#667085\" stroke-width=\"1.66667\"\r\n stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n <div>\r\n <div class=\"row mx-0\">\r\n <div class=\"col-lg-6 px-0\" *ngIf=\"ChecklistForm.get('sections')\">\r\n <div class=\"checklist-card py-7 text-center\">\r\n <div (click)=\"addNewQuestion(sectionIndex)\"\r\n [attr.disabled]=\"isDisabled ? 'disabled' : null\" class=\"mt-2 btn-sec pointer\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M9.99999 4.16602V15.8327M4.16666 9.99935H15.8333\" stroke=\"#344054\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> Add New Question</div>\r\n </div>\r\n </div>\r\n <div class=\"col-lg-6 pl-5\">\r\n <div class=\"checklist-card py-7 text-center\">\r\n <div (click)=\"addNewSection()\" class=\"mt-2 px-0 btn-sec pointer\"> <svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\"\r\n viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M9.99999 4.16602V15.8327M4.16666 9.99935H15.8333\" stroke=\"#344054\"\r\n stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg> Add New Section</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n </div>\r\n</div>", styles: [".checklist-card div,input[type=text]:not(.plain-input),select{color:#101828;border:1px solid #D0D5DD;box-shadow:0 1px 2px #1018280d;border-radius:8px;font-size:16px;width:100%;padding:10px 14px;font-family:Inter;font-weight:400;line-height:24px}.checklist-card input{padding-right:20%}.card{border-radius:16px}.row>*{padding-right:0}.cdk-drag-preview{box-sizing:border-box;border-radius:4px;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.cdk-drag-placeholder{opacity:0}.cdk-drag-animating{transition:transform .25s cubic-bezier(0,0,.2,1)}input[type=checkbox]:focus{border:none!important;outline:none!important;box-shadow:none!important}input:focus{border:#F9FAFB!important;outline:1px solid var(--primary-300, #6BCAFF);box-shadow:0 0 0 4px #d5effe,0 1px 2px #1018280d;color:#101828}select{-webkit-appearance:none!important;-moz-appearance:none!important;height:45px;width:100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAUCAMAAACtdX32AAAAdVBMVEUAAAD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhMdQaAAAAJ3RSTlMAAAECAwQGBwsOFBwkJTg5RUZ4eYCHkJefpaytrsXGy8zW3+Do8vNn0bsyAAAAYElEQVR42tXROwJDQAAA0Ymw1p9kiT+L5P5HVEi3qJn2lcPjtIuzUIJ/rhIGy762N3XaThqMN1ZPALsZPEzG1x8LrFL77DHBnEMxBewz0fJ6LyFHTPL7xhwzWYrJ9z22AqmQBV757MHfAAAAAElFTkSuQmCC);background-position:100%;background-repeat:no-repeat}select:focus{border:#F9FAFB!important;outline:1px solid var(--primary-300, #6BCAFF);box-shadow:0 0 0 4px #d5effe,0 1px 2px #1018280d;color:#101828}textarea:focus{border:#F9FAFB!important;outline:1px solid var(--primary-300, #6BCAFF);box-shadow:0 0 0 4px #d5effe,0 1px 2px #1018280d;color:#101828}textarea,select{color:#101828;border:1px solid #D0D5DD;box-shadow:0 1px 2px #1018280d;border-radius:8px;font-size:16px;width:100%;padding:10px 14px;font-family:Inter;font-weight:400;line-height:24px}.btn-outline{border:1px solid lightgrey;padding:calc(.75rem + 1px) calc(1.5rem + 1px)}.btn-light-primary{color:var(--primary-700, #009BF3);font-family:Inter;font-size:16px;font-style:normal;font-weight:600;line-height:24px;text-transform:capitalize}.newbutton{border:1px solid lightgrey;padding:calc(.75rem + 1px) calc(1.5rem + 1px);color:#000;background-color:#fff}.newbutton:hover,.newbutton:active{background-color:#009bf3;color:#fff}.btn.btn-light-primary:hover:not(.btn-active),.btn-light-primary:active{color:var(--primary-700, #009BF3);font-family:Inter;font-size:16px;font-style:normal;font-weight:600;outline:none!important;background-color:#d1f0ff82!important}.ml-5{margin-left:10px}.pl-5{padding-left:10px!important}.btn-left{display:inline-block;width:100%;font-size:16px;white-space:nowrap;overflow:hidden!important;text-overflow:ellipsis!important}.card hr{width:-webkit-fill-available}.card{height:100%!important}.rotate{transform:rotate(180deg);transition:1s}.hidesec{visibility:hidden;opacity:.1;transition:1s}.fs-16px{font-size:16px}.card svg{margin-left:5px!important;cursor:pointer}.form-switch,.form-check-label{padding-left:5px!important}.webkitwidth{width:-webkit-fill-available}.fs-18px{font-size:18px;color:var(--black, #000);font-family:inter}.Answer1 .checklist-card,.Answer2 .checklist-card{position:relative}.Answer1 svg,.Answer2 svg{position:absolute;top:15px;right:15px}.Answer1 .imgAdd,.Answer2 .imgAdd{position:absolute;top:13px!important;right:57px!important}.Answer1 .flag,.Answer2 .flag{color:red!important}.Answer1 .flag>.flag-path,.Answer2 .flag>.flag-path{fill:red!important;stroke:red}.Answer1 .vl,.Answer2 .vl{position:absolute;top:1px;right:45px;border-left:1px solid #D0D5DD;height:43px}.Answer1 .vl2,.Answer2 .vl2{position:absolute;top:1px;right:90px;border-left:1px solid #D0D5DD;height:43px}.Answer1 svg:hover,.Answer2 svg:hover{fill:#d0d5dd!important}.editablecontent{display:inline-block;max-width:25ch;white-space:nowrap;outline:none!important;border:none!important;box-shadow:none!important;overflow:hidden!important;text-overflow:ellipsis!important}.editablecontent-left{display:inline-block;width:180px;white-space:nowrap;outline:none!important;border:none!important;box-shadow:none!important;overflow:hidden!important;text-overflow:ellipsis!important}[contenteditable]{outline:0px solid transparent}.min-width-popup{min-width:46%!important}.max-w-128px{max-width:128px}.fw-600{font-weight:600!important}.fw-400{font-weight:400}.footer1 span{color:#000;font-family:inter;font-size:14px;font-weight:500px;line-height:20px}.footer1 a{font-family:inter;font-size:14px;font-weight:600;text-decoration:underline;color:var(--primary-700, #009BF3)}.footer1 a:hover{color:var(--primary-700, #009BF3);text-decoration-line:underline!important;text-decoration-thickness:1px!important}.btn-sec{color:var(--gray-700, #344054)!important;font-family:Inter;font-size:14px;font-style:normal;font-weight:500!important;line-height:24px}.question-left{max-height:85vh;overflow:auto;overflow-x:hidden}.Question-sec{position:relative;border-radius:8px;border:1px solid var(--gray-300, #D0D5DD);background:var(--gray-50, #F9FAFB);width:100%;padding:24px 16px 16px}.Question-sec .questiontitle{position:absolute;top:-10px}.Question-sec h3{color:var(--gray-700, #344054);font-family:Inter;font-size:14px;font-style:normal;font-weight:500;line-height:20px;margin-bottom:0!important}.Question-sec .fs16-600{font-size:14px;font-style:normal;font-weight:600;line-height:20px}.Question-sec p{color:var(--gray-500, #667085);font-family:Inter;font-size:14px;font-style:normal;font-weight:400;line-height:20px}.swal2-confirm{font-family:Inter!important;font-size:30px!important;background-color:var(--white, #FFF)!important;border:solid var(--gray-300, #D0D5DD)!important}.Overlay{top:0;left:0;width:100%;height:100%;z-index:200!important;position:fixed;background:#58575799}.popup{position:absolute;top:50%;left:50%;opacity:1;transform:translate(-50%,-50%);background:var(--white, #FFF);border-radius:12px!important;border-radius:12px;box-shadow:0 8px 8px -4px #10182808,0 20px 24px -4px #10182814;padding:30px;width:400px;height:fit-content}.kiwi:hover{fill:#d0d5dd!important;stroke:#d0d5dd!important}.kiwi:hover path{fill:#d0d5dd!important;stroke:#d0d5dd!important}.kiwi{fill:#fff!important;stroke:#d0d5dd!important}.kiwi path{fill:#fff!important;stroke:#d0d5dd!important}.kiwi:active{fill:#d0d5dd!important;stroke:#d0d5dd!important}.kiwi:active path{fill:#d0d5dd!important;stroke:#d0d5dd!important}.active-flag{fill:red!important;stroke:red!important}.active-flag path{fill:red!important;stroke:red!important}.active-flag:active{fill:red!important;stroke:red!important}.active-flag:active path{fill:red!important;stroke:red!important}.toasttitile{color:#3f4254;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:140%}.ref_del_icon{position:absolute;top:24px;right:24px;transform:translate(50%,-50%);padding:6px;border-radius:8px;border:1px solid var(--error-50, #FEF3F2);background:var(--error-50, #FEF3F2);box-shadow:0 1px 2px #1018280d}.ref_del_icon svg{margin:0!important}.ref_img_cont{position:relative}::ng-deep .swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;min-width:2em;height:0em;margin:0 .5em 0 0}::ng-deep .listitem{display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.5rem 1rem;background-color:#f3f6f9;margin-top:.75rem;border-radius:.42rem}::ng-deep .toasttitile{color:#3f4254;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:140%}::ng-deep .list{overflow-y:auto}::ng-deep .listitemlabel{font-size:13px!important;font-weight:600;font-family:Inter;color:#7e8299}::ng-deep .swal2-container{padding:.4em!important}::ng-deep .swal2-icon{border:1px solid white!important}::ng-deep body.swal2-toast-shown .swal2-container{width:500px!important}::ng-deep .swal2-popup.swal2-toast{border-left:4px solid #009EF7}::ng-deep .swal2-popup.swal2-toast .swal2-title{margin:9px 5px auto!important}::ng-deep .label{color:#3f4254;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:140%}::ng-deep .custom-test{color:var(--gray-700, #344054)!important;text-align:start;font-family:Inter;font-size:12px;font-style:normal;border-radius:8px;box-shadow:0 4px 6px -2px #10182808,0 12px 16px -4px #10182814;font-weight:600;line-height:18px;background:#fff}.text-gray-700{color:#344054!important}.mandatoryfield input,.answervalidation input{border:none;padding:0!important}.mandatoryfield input[type=checkbox],.answervalidation input[type=checkbox]{width:16px!important;height:16px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-600, #D0D5DD)!important;box-shadow:none;font-size:.5em;text-align:center;line-height:1em;background:#fff}.mandatoryfield input[type=checkbox]:checked,.answervalidation input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF)!important;background-color:var(--primary-50, #EAF8FF)}.mandatoryfield input[type=checkbox]:checked:after,.answervalidation input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:3px;padding-top:10px;padding-right:0}.concise-checklistname{display:inline-block;width:100%;white-space:nowrap;overflow:hidden!important;text-overflow:ellipsis!important;text-transform:capitalize}.concise-question{display:inline-block;width:100%;white-space:nowrap;overflow:hidden!important;text-overflow:ellipsis!important;text-align:left}.active-question{color:var(--primary-700, #009BF3);font-size:16px;font-style:normal;font-weight:500;line-height:24px;display:flex;padding:8px 12px;align-items:center;gap:105px;align-self:stretch;border-radius:6px;background:var(--primary-50, #EAF8FF)}.q-btn{color:var(--gray-700, #344054);font-size:16px;font-style:normal;font-weight:500;line-height:24px;display:flex;padding:8px 12px;align-items:center;gap:105px;align-self:stretch;border-radius:6px;background:var(--primary-50, white)}.pointer{cursor:pointer}select option{padding:4px}.add-ref-btn{border-radius:8px;border:1px solid var(--primary-50, #EAF8FF);box-shadow:0 1px 2px #1018280d;padding:14px 0!important}::ng-deep .form-switch .form-check-input{border:none;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='rgba(255, 255, 255, 1)'/%3E%3C/svg%3E\")!important}::ng-deep .form-switch .form-check-input:not(:checked){background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='rgba(255, 255, 255, 1)'/%3E%3C/svg%3E\")!important;background-color:var(--gray-100, #F2F4F7)!important}.plain-input{border:none;outline:none;background:transparent;padding:0;margin:0;width:100%;overflow:hidden;color:var(--black, #101828);text-overflow:ellipsis;font-family:Inter;font-size:18px;font-style:normal;font-weight:500;line-height:28px}.plain-input:focus{border-radius:0!important;border:white!important;outline:none!important;box-shadow:none!important}.auto-adjust{max-width:100%;max-height:100%;object-fit:contain;background-color:#fff}.createbuttons{padding:10px 18px;justify-content:center;align-items:center;gap:8px;border-radius:8px;border:1px solid var(--primary-600, #00A3FF);background:var(--primary-600, #00A3FF);box-shadow:0 1px 2px #1018280d}.create{color:var(--white, #FFF);font-family:Inter;font-size:16px;font-style:normal;font-weight:600;line-height:24px;text-transform:capitalize}.savedraft{border-radius:8px;border:1px solid var(--gray-300, #D0D5DD);background:var(--white, #FFF);padding:10px 18px;justify-content:center;align-items:center;gap:8px;box-shadow:0 1px 2px #1018280d}.savedraft:hover{background:#f3f8fd!important;border:1px solid var(--gray-300, #D0D5DD)!important}.savedrafttext{color:var(--gray-700, #344054);font-family:Inter;font-size:16px;font-weight:600;line-height:24px;text-transform:capitalize}.questionsArea{overflow-y:scroll;max-height:60vh;padding:4px}::ng-deep .questionsArea::-webkit-scrollbar-thumb{-webkit-border-radius:10px!important;border-radius:10px!important;background:var(--gray-100, #eaeaea)!important;height:50px!important}::ng-deep .questionsArea::-webkit-scrollbar{width:10px!important}::ng-deep .questionsArea::-webkit-scrollbar-track{background:none!important;box-shadow:none!important}::ng-deep .swal2-html-container{overflow:hidden!important}.ansoptions{color:var(--gray-700, #344054);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.checklist{font-family:Inter;font-size:20px;font-weight:600;line-height:28px;text-align:left;color:#667085!important}.checklistDescription{font-family:Inter;font-size:14px;font-weight:400;line-height:18px;text-align:left}.dscriptiveType{font-size:15px!important}\n"] }]
|
|
1385
|
+
}], ctorParameters: () => [{ type: i1.PageInfoService }, { type: i2.FormBuilder }, { type: i0.ChangeDetectorRef }, { type: i3.NgbModal }, { type: i4.ActivatedRoute }, { type: i5.ToastService }, { type: i4.Router }, { type: i6.TraxService }], propDecorators: { formRef: [{
|
|
1386
|
+
type: ViewChild,
|
|
1387
|
+
args: ['formRef']
|
|
1388
|
+
}] } });
|
|
1389
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWNoZWNrbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2FkZC1jaGVja2xpc3QvYWRkLWNoZWNrbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hbmFseXNlLXRyYXgvc3JjL2xpYi9jb21wb25lbnRzL2FkZC1jaGVja2xpc3QvYWRkLWNoZWNrbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBc0IsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVGLE9BQU8sRUFBRSxTQUFTLEVBQWUsVUFBVSxFQUFFLFNBQVMsRUFBcUIsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRyxPQUFPLEVBQWUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDekYsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQzs7Ozs7Ozs7OztBQVV0RSxNQUFNLE9BQU8scUJBQXFCO0lBZVo7SUFBaUM7SUFBd0I7SUFBeUM7SUFBd0I7SUFBNkI7SUFBMkI7SUFBc0I7SUFkdE0sT0FBTyxDQUFhO0lBRTFDLGFBQWEsQ0FBYTtJQUMxQixJQUFJLEdBQVcsQ0FBQyxDQUFDO0lBQ2pCLFlBQVksR0FBVyxDQUFDLENBQUM7SUFDekIsU0FBUyxDQUFNO0lBQ2YsU0FBUyxDQUFNO0lBQ2YsVUFBVSxHQUFZLElBQUksQ0FBQztJQUMzQixTQUFTLEdBQVcsS0FBSyxDQUFDO0lBQzFCLFNBQVMsQ0FBUztJQUNsQixVQUFVLEdBQVcsQ0FBQyxDQUFDO0lBQ3ZCLGdCQUFnQixHQUFZLEtBQUssQ0FBQztJQUNsQyxVQUFV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TSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQWUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBZSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQWUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZKO0lBQ0gsQ0FBQzt3R0E3NUNVLHFCQUFxQjs0RkFBckIscUJBQXFCLDZKQ2hCbEMscW8xRUFndEJNOzs0RkRoc0JPLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxtQkFBbUI7NFFBS1AsT0FBTztzQkFBNUIsU0FBUzt1QkFBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycywgRm9ybUFycmF5LCBGb3JtQnVpbGRlciwgRm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLWdsb2JhbCc7XHJcbmltcG9ydCB7IENka0RyYWdEcm9wLCBtb3ZlSXRlbUluQXJyYXksIHRyYW5zZmVyQXJyYXlJdGVtIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IHRpbWVyIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgeyBUcmF4cG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi90cmF4cG9wdXAvdHJheHBvcHVwLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xyXG5pbXBvcnQgeyBUcmF4U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RyYXguc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1hZGQtY2hlY2tsaXN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLWNoZWNrbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2FkZC1jaGVja2xpc3QuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRDaGVja2xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBWaWV3Q2hpbGQoJ2Zvcm1SZWYnKSBmb3JtUmVmOiBFbGVtZW50UmVmO1xyXG5cclxuICBDaGVja2xpc3RGb3JtITogRm9ybUdyb3VwO1xyXG4gIHNob3c6IG51bWJlciA9IDA7XHJcbiAgc2VjdGlvbkluZGV4OiBudW1iZXIgPSAwO1xyXG4gIGdldG9iamVjdDogYW55O1xyXG4gIGVkaXR2YWx1ZTogYW55O1xyXG4gIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIG5vc2VjdGlvbjpib29sZWFuID0gZmFsc2U7XHJcbiAgc2hvd3ZhbHVlOiBzdHJpbmc7XHJcbiAgcmVmSW1nUUlkeDogbnVtYmVyID0gMDtcclxuICBjaGVja2xpc3RMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcG9wdXBDb3VudDpudW1iZXIgPSAwO1xyXG4gIFxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcGFnZUluZm86UGFnZUluZm9TZXJ2aWNlLHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLHByaXZhdGUgY2hhbmdlZGV0ZWN0b3I6Q2hhbmdlRGV0ZWN0b3JSZWYscHJpdmF0ZSBkaWFsb2c6TmdiTW9kYWwscHJpdmF0ZSByb3V0ZTpBY3RpdmF0ZWRSb3V0ZSxwcml2YXRlIHRvYXN0OlRvYXN0U2VydmljZSxwcml2YXRlIHJvdXRlcjpSb3V0ZXIscHJpdmF0ZSBzb3BTZXJ2aWNlOlRyYXhTZXJ2aWNlKSB7XHJcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW1zOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmVkaXR2YWx1ZSA9IHBhcmFtcy5jaGVja2xpc3RJZFxyXG4gICAgICAgIGlmIChwYXJhbXMuY2hlY2tsaXN0SWQpIHtcclxuICAgICAgICAgIHRoaXMuc2hvd3ZhbHVlID0gJ2VkaXQnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNob3d2YWx1ZSA9ICdhZGQnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNob3d2YWx1ZSA9PSAnZWRpdCcgfHwgcGFyYW1zLnR5cGUpIHtcclxuICAgICAgICAgIGxldCBvYmo6IGFueSA9IHt9O1xyXG4gICAgICAgICAgaWYgKHBhcmFtcy5jaGVja2xpc3RJZCkge1xyXG4gICAgICAgICAgICBvYmouY2hlY2tMaXN0SWQgPSBwYXJhbXMuY2hlY2tsaXN0SWRcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9iai50eXBlID0gcGFyYW1zLnR5cGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmNoZWNrbGlzdExvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5zb3BTZXJ2aWNlLmdldGNvbmZpZyhvYmopXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgaWYocmVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZihyZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5nZXRvYmplY3QgPSByZXMuZGF0YS5jaGVja0xpc3REZXRhaWxzO1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmZvcm1DaGVja2xpc3RRdWVzdGlvbnMoKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tsaXN0TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tsaXN0TG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jaGVja2xpc3RMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmluaXRDaGVja2xpc3QoKTtcclxuICAgICAgICB9XHJcbiAgICB9KTsgXHJcbiAgfVxyXG4gIFxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pbml0Q2hlY2tsaXN0KCk7XHJcbiAgICB0aGlzLnNldFBhZ2VEYXRhKCk7XHJcbiAgfVxyXG5cclxuICBzZXRQYWdlRGF0YSgpIHtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0VGl0bGUoXCJUcmF4XCIpO1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXREZXNjcmlwdGlvbihcIkF1dG9tYXRlIG9yIGNyZWF0ZSBjaGVja2xpc3RzIHRvIGltcHJvdmUgb3BlcmF0aW9uYWwgZWZmaWNpZW5jeVwiKTtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0QnJlYWRjcnVtYnMoW1xyXG4gICAgICB7IHRpdGxlOiBcIkFuYWx5emVcIiwgcGF0aDogXCIvQW5hbHl6ZVwiLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiBmYWxzZSB9LFxyXG4gICAgICB7IHRpdGxlOiBcIkFuYWx5emVcIiwgcGF0aDogXCIvQW5hbHl6ZVwiLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiB0cnVlIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwiTWFuYWdlXCIsIHBhdGg6IFwiL21hbmFnZVwiLCBpc0FjdGl2ZTogZmFsc2UsIGlzU2VwYXJhdG9yOiBmYWxzZSB9LFxyXG4gICAgICB7IHRpdGxlOiBcIk1hbmFnZVwiLCBwYXRoOiBcIi9tYW5hZ2VcIiwgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogdHJ1ZSB9LFxyXG4gICAgXSk7XHJcbiAgfVxyXG4gIFxyXG4gIHVwZGF0ZUlucHV0VmFsdWUoc2VjdGlvbkluZGV4OiBudW1iZXIsc2VjdGlvbk5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgaWYgKHNlY3Rpb25OYW1lLnRyaW0oKSA9PT0gJycpIHtcclxuICAgICAgdGhpcy5nZXRTZWN0aW9uRm9ybUNvbnRyb2woc2VjdGlvbkluZGV4LCduYW1lJyk/LnNldFZhbHVlKGBTZWN0aW9uICR7c2VjdGlvbkluZGV4KzF9YCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHNjcm9sbFRvUXVlc3Rpb24oc2VjdGlvbkluZGV4OiBudW1iZXIsIHF1ZXN0aW9uSW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgY29uc3QgcXVlc3Rpb25JZCA9IGBxLSR7c2VjdGlvbkluZGV4fS0ke3F1ZXN0aW9uSW5kZXh9YDtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBxdWVzdGlvbkVsZW1lbnQgPSB0aGlzLmZvcm1SZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGAjJHtxdWVzdGlvbklkfWApO1xyXG4gIFxyXG4gICAgICBpZiAocXVlc3Rpb25FbGVtZW50KSB7XHJcbiAgICAgICAgcXVlc3Rpb25FbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmxvY2s6ICdjZW50ZXInLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICBmb3JtQ2hlY2tsaXN0UXVlc3Rpb25zKCkgeyBcclxuICAgIGxldCBzZWN0aW9uc2FycmF5OiBhbnkgPSBbXTtcclxuICAgIGxldCBzZWN0aW9uczogYW55W10gPSBbXTtcclxuICAgIHNlY3Rpb25zYXJyYXkgPSB0aGlzLmdldG9iamVjdC5zZWN0aW9uc1xyXG4gICAgXHJcbiAgICBzZWN0aW9uc2FycmF5LmZvckVhY2goKGk6IGFueSxzZWN0aW9uSW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICBsZXQgcXVlc3Rpb25zOiBhbnlbXSA9IFtdO1xyXG4gICAgICBpLnF1ZXN0aW9ucy5mb3JFYWNoKChqOiBhbnkscXVlc3Rpb25JbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgbGV0IGFuc3dlcjogYW55W10gPSBbXTtcclxuICAgICAgICBqLmFuc3dlcnM/LmZvckVhY2goKGs6IGFueSxhbnN3ZXJJbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICBhbnN3ZXIucHVzaChcclxuICAgICAgICAgICAgdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgICAgLi4uKCFbJ2ltYWdlJywnZGVzY3JpcHRpdmVJbWFnZScsJ211bHRpcGxlSW1hZ2UnXS5pbmNsdWRlcyhqPy5hbnN3ZXJUeXBlKSAmJiBqPy5hbnN3ZXJUeXBlICE9ICd2aWRlbyc/IHsgJ2Fuc3dlcic6IHRoaXMuZmIuY29udHJvbChrPy5hbnN3ZXIsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSkgfSA6IHt9KSxcclxuICAgICAgICAgICAgICAnYW5zd2Vyb3B0aW9uTnVtYmVyJzogdGhpcy5mYi5jb250cm9sKGFuc3dlckluZGV4KSxcclxuICAgICAgICAgICAgICAuLi4oIVsnaW1hZ2UnLCdkZXNjcmlwdGl2ZUltYWdlJywnbXVsdGlwbGVJbWFnZSddLmluY2x1ZGVzKGo/LmFuc3dlclR5cGUpICYmIGo/LmFuc3dlclR5cGUgIT0gJ3ZpZGVvJz8geyAnc29wRmxhZyc6IHRoaXMuZmIuY29udHJvbChrPy5zb3BGbGFnID8gaz8uc29wRmxhZyA6IGZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pIH0gOiB7fSksXHJcbiAgICAgICAgICAgICAgLi4uKCFbJ2ltYWdlJywnZGVzY3JpcHRpdmVJbWFnZScsJ211bHRpcGxlSW1hZ2UnXS5pbmNsdWRlcyhqPy5hbnN3ZXJUeXBlKSAmJiBqPy5hbnN3ZXJUeXBlICE9ICd2aWRlbyc/IHsgJ3ZhbGlkYXRpb24nOiB0aGlzLmZiLmNvbnRyb2woaz8udmFsaWRhdGlvbiwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSB9IDoge30pLFxyXG4gICAgICAgICAgICAgIC4uLighWydpbWFnZScsJ2Rlc2NyaXB0aXZlSW1hZ2UnLCdtdWx0aXBsZUltYWdlJ10uaW5jbHVkZXMoaj8uYW5zd2VyVHlwZSkgJiYgaj8uYW5zd2VyVHlwZSAhPSAndmlkZW8nPyB7ICd2YWxpZGF0aW9uVHlwZSc6IHRoaXMuZmIuY29udHJvbChrPy52YWxpZGF0aW9uVHlwZSwgdGhpcy5hbGxvd2VkVmFsdWVzVmFsaWRhdG9yKFtcIkNhcHR1cmUgSW1hZ2VcIiwgXCJEZXNjcmlwdGl2ZSBBbnN3ZXJcIiwgXCJDYXB0dXJlIFZpZGVvXCJdKSkgfSA6IHt9KSxcclxuICAgICAgICAgICAgICAuLi4oWydpbWFnZScsJ2Rlc2NyaXB0aXZlSW1hZ2UnLCdtdWx0aXBsZUltYWdlJ10uaW5jbHVkZXMoaj8uYW5zd2VyVHlwZSkgPyB7ICdyZWZlcmVuY2VJbWFnZSc6IHRoaXMuZmIuY29udHJvbChrPy5yZWZlcmVuY2VJbWFnZSkgfSA6IHt9KSxcclxuICAgICAgICAgICAgICAuLi4oKFsnaW1hZ2UnLCdkZXNjcmlwdGl2ZUltYWdlJywnbXVsdGlwbGVJbWFnZSddLmluY2x1ZGVzKGo/LmFuc3dlclR5cGUpIHx8IGo/LmFuc3dlclR5cGUgPT0gJ3ZpZGVvJykgPyB7ICdhbGxvd1VwbG9hZGZyb21HYWxsZXJ5JzogdGhpcy5mYi5jb250cm9sKGo/LmFsbG93VXBsb2FkZnJvbUdhbGxlcnkgPyB0cnVlIDogZmFsc2UpIH0gOiB7fSksXHJcbiAgICAgICAgICAgICAgLi4uKFsnaW1hZ2UnLCdkZXNjcmlwdGl2ZUltYWdlJywnbXVsdGlwbGVJbWFnZSddLmluY2x1ZGVzKGo/LmFuc3dlclR5cGUpID8geyAncnVuQUknOiB0aGlzLmZiLmNvbnRyb2woKGo/LnJ1bkFJKSA/IGo/LnJ1bkFJIDogZmFsc2UpIH0gOiB7fSksXHJcbiAgICAgICAgICAgICAgLi4uKFsnbXVsdGlwbGVjaG9pY2VzaW5nbGUnLCd5ZXMvbm8nXS5pbmNsdWRlcyhqPy5hbnN3ZXJUeXBlKSA/IHsgJ3Nob3dMaW5rZWQnOiB0aGlzLmZiLmNvbnRyb2woKGs/LnNob3dMaW5rZWQpID8gaz8uc2hvd0xpbmtlZCA6IGZhbHNlKSB9IDoge30pLFxyXG4gICAgICAgICAgICAgIC4uLihbJ211bHRpcGxlY2hvaWNlc2luZ2xlJywneWVzL25vJ10uaW5jbHVkZXMoaj8uYW5zd2VyVHlwZSkgPyB7ICdsaW5rZWRRdWVzdGlvbic6IHRoaXMuZmIuY29udHJvbCgoaz8ubGlua2VkUXVlc3Rpb24pID8gaz8ubGlua2VkUXVlc3Rpb24gOiAwKSB9IDoge30pLFxyXG4gICAgICAgICAgICAgICAuLi4oIVsnZGVzY3JpcHRpdmUnLCdpbWFnZScsICdkZXNjcmlwdGl2ZUltYWdlJywnbXVsdGlwbGVJbWFnZScsJ2RhdGUnXS5pbmNsdWRlcyhqPy5hbnN3ZXJUeXBlKSA/IHsgJ3JlZmVyZW5jZUltYWdlJzogdGhpcy5mYi5jb250cm9sKGs/LnJlZmVyZW5jZUltYWdlKSB9IDoge30pLFxyXG4gICAgICAgICAgICAgIC4uLigoIVsnZGVzY3JpcHRpdmUnLCdpbWFnZScsICdkZXNjcmlwdGl2ZUltYWdlJywndmlkZW8nLCdtdWx0aXBsZUltYWdlJywnZGF0ZSddLmluY2x1ZGVzKGo/LmFuc3dlclR5cGUpKSA/IHsgJ2FsbG93VXBsb2FkZnJvbUdhbGxlcnknOiB0aGlzLmZiLmNvbnRyb2woaz8uYWxsb3dVcGxvYWRmcm9tR2FsbGVyeSA/IHRydWUgOiBmYWxzZSkgfSA6IHt9KSxcclxuICAgICAgICAgICAgICAuLi4oIVsnZGVzY3JpcHRpdmUnLCdpbWFnZScsICdkZXNjcmlwdGl2ZUltYWdlJywnbXVsdGlwbGVJbWFnZScsJ2RhdGUnXS5pbmNsdWRlcyhqPy5hbnN3ZXJUeXBlKSA/IHsgJ3J1bkFJJzogdGhpcy5mYi5jb250cm9sKChrPy5ydW5BSSkgPyBrPy5ydW5BSSA6IGZhbHNlKSB9IDoge30pLFxyXG4gICAgICAgICAgICAgIC4uLighWydkYXRlJ10uaW5jbHVkZXMoaj8uYW5zd2VyVHlwZSkgPyB7ICdkZXNjcmlwdGl2ZXR5cGUnOnRoaXMuZmIuY29udHJvbChrLmRlc2NyaXB0aXZldHlwZSkgfSA6IHt9KSxcclxuICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHF1ZXN0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgIFwicW5vXCI6IHRoaXMuZmIuY29udHJvbChxdWVzdGlvbkluZGV4KzEpLFxyXG4gICAgICAgICAgICAncW5hbWUnOiB0aGlzLmZiLmNvbnRyb2woaj8ucW5hbWUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgICAgICAgICdhbnN3ZXJUeXBlJzogdGhpcy5mYi5jb250cm9sKGo/LmFuc3dlclR5cGUsIHRoaXMuYWxsb3dlZFZhbHVlc1ZhbGlkYXRvcihbXCJkZXNjcmlwdGl2ZVwiLCBcInllcy9ub1wiLCBcIm11bHRpcGxlY2hvaWNlc2luZ2xlXCIsIFwibXVsdGlwbGVjaG9pY2VtdWx0aXBsZVwiLCBcImltYWdlXCIsIFwidmlkZW9cIixcImRlc2NyaXB0aXZlSW1hZ2VcIixcIm11bHRpcGxlSW1hZ2VcIiwnZGF0ZSddKSksXHJcbiAgICAgICAgICAgIC4uLighWydkZXNjcmlwdGl2ZScsJ2RhdGUnXS5pbmNsdWRlcyhqPy5hbnN3ZXJUeXBlKSkgPyB7ICdhbnN3ZXJzJzogKFsnaW1hZ2UnLCdkZXNjcmlwdGl2ZUltYWdlJywgJ3ZpZGVvJywnbXVsdGlwbGVJbWFnZSddLmluY2x1ZGVzKGo/LmFuc3dlclR5cGUpKSA/IGFuc3dlclswXSA6IHRoaXMuZmIuYXJyYXkoYW5zd2VyKSB9IDoge30sXHJcbiAgICAgICAgICAgICdydW5BSSc6IHRoaXMuZmIuY29udHJvbCgoWydpbWFnZScsJ2Rlc2NyaXB0aXZlSW1hZ2UnLFwibXVsdGlwbGVJbWFnZVwiXS5pbmNsdWRlcyhqPy5hbnN3ZXJUeXBlKSkgPyAoaj8ucnVuQUkpID8gdHJ1ZSA6IGZhbHNlIDogZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgICAgICAgICdhbGxvd1VwbG9hZGZyb21HYWxsZXJ5JzogdGhpcy5mYi5jb250cm9sKChbJ2ltYWdlJywnZGVzY3JpcHRpdmVJbWFnZScsJ3ZpZGVvJywnbXVsdGlwbGVJbWFnZSddLmluY2x1ZGVzKGo/LmFuc3dlclR5cGUpKSA/IChqPy5hbGxvd1VwbG9hZGZyb21HYWxsZXJ5KSA/IHRydWUgOiBmYWxzZSA6IGZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgICAgICAncnVuQUlEZXNjcmlwdGlvbic6IHRoaXMuZmIuY29udHJvbCgoWydpbWFnZScsJ2Rlc2NyaXB0aXZlSW1hZ2UnLCdtdWx0aXBsZUltYWdlJ10uaW5jbHVkZXMoaj8uYW5zd2VyVHlwZSkpID8gKGo/LnJ1bkFJRGVzY3JpcHRpb24pIDogJycpLFxyXG4gICAgICAgICAgICAnbGlua1R5cGUnOiB0aGlzLmZiLmNvbnRyb2woaj8ubGlua1R5cGUpLFxyXG4gICAgICAgICAgICAncXVlc3Rpb25SZWZlcmVuY2VJbWFnZSc6dGhpcy5mYi5jb250cm9sKGoucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSksXHJcbiAgICAgICAgICAgICdkZXNjcmlwdGl2ZXR5cGUnOnRoaXMuZmIuY29udHJvbChqLmRlc2NyaXB0aXZldHlwZSksXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYW5zd2VyID0gW107XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgc2VjdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgIFwibmFtZVwiOiB0aGlzLmZiLmNvbnRyb2woaT8ubmFtZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEpXSksXHJcbiAgICAgICAgICBcInNlY3Rpb25OdW1iZXJcIjogdGhpcy5mYi5jb250cm9sKHNlY3Rpb25JbmRleCsxKSxcclxuICAgICAgICAgIFwicXVlc3Rpb25zXCI6IHRoaXMuZmIuYXJyYXkocXVlc3Rpb25zKVxyXG4gICAgICB9KSk7XHJcbiAgICAgIHF1ZXN0aW9ucyA9IFtdO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5DaGVja2xpc3RGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICdjaGVja2xpc3ROYW1lJzogdGhpcy5mYi5jb250cm9sKHRoaXMuZ2V0b2JqZWN0LmNoZWNrTGlzdE5hbWUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgICdjaGVja2xpc3REZXNjcmlwdGlvbic6IHRoaXMuZmIuY29udHJvbCh0aGlzLmdldG9iamVjdC5jaGVja0xpc3REZXNjcmlwdGlvbiksXHJcbiAgICAgICdzZWN0aW9ucyc6IHRoaXMuZmIuYXJyYXkoc2VjdGlvbnMpXHJcbiAgICB9KTsgICBcclxuICAgIHRoaXMuQ2hlY2tsaXN0Rm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB0aGlzLmNoZWNrbGlzdExvYWRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGluaXRDaGVja2xpc3QoKSB7XHJcbiAgICAvLyAgY29uc29sZS5sb2cobW9tZW50KCkudHooJ0FzaWEvU2luZ2Fwb3JlJykuZm9ybWF0KCdERC1NTS1ZWVlZIGhoOm1tIEEnKSwndGVzdCcpXHJcbiAgICB0aGlzLkNoZWNrbGlzdEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgJ2NoZWNrbGlzdE5hbWUnOiB0aGlzLmZiLmNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgICdjaGVja2xpc3REZXNjcmlwdGlvbic6IHRoaXMuZmIuY29udHJvbCgnJyksXHJcbiAgICAgICdzZWN0aW9ucyc6IHRoaXMuZmIuYXJyYXkoW1xyXG4gICAgICAgIHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgXCJuYW1lXCI6IHRoaXMuZmIuY29udHJvbCgnU2VjdGlvbiAxJywgW1ZhbGlkYXRvcnMucmVxdWlyZWQsVmFsaWRhdG9ycy5taW5MZW5ndGgoMSldKSxcclxuICAgICAgICAgIFwic2VjdGlvbk51bWJlclwiOiB0aGlzLmZiLmNvbnRyb2woMSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuICAgICAgICAgIFwicXVlc3Rpb25zXCI6IHRoaXMuZmIuYXJyYXkoW1xyXG4gICAgICAgICAgICB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgICAgICBcInFub1wiOiB0aGlzLmZiLmNvbnRyb2woMSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuICAgICAgICAgICAgICAncW5hbWUnOiB0aGlzLmZiLmNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgICAgICAgICAgJ2Fuc3dlclR5cGUnOiB0aGlzLmZiLmNvbnRyb2woJ2Rlc2NyaXB0aXZlJyxcclxuICAgICAgICAgICAgICAgIHRoaXMuYWxsb3dlZFZhbHVlc1ZhbGlkYXRvcihbXCJkZXNjcmlwdGl2ZVwiLCBcInllcy9ub1wiLCBcIm11bHRpcGxlY2hvaWNlc2luZ2xlXCIsIFwibXVsdGlwbGVjaG9pY2VtdWx0aXBsZVwiLFwiZGVzY3JpcHRpdmVJbWFnZVwiLCBcImltYWdlXCIsIFwidmlkZW9cIiwnbXVsdGlwbGVJbWFnZScsJ2RhdGUnXSkpLFxyXG4gICAgICAgICAgICAgICdydW5BSSc6IHRoaXMuZmIuY29udHJvbChmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuICAgICAgICAgICAgICAncnVuQUlEZXNjcmlwdGlvbic6IHRoaXMuZmIuY29udHJvbCgnJyksXHJcbiAgICAgICAgICAgICAgJ2FsbG93VXBsb2FkZnJvbUdhbGxlcnknOiB0aGlzLmZiLmNvbnRyb2woZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgICAgICAgICAgJ2xpbmtUeXBlJzogdGhpcy5mYi5jb250cm9sKGZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgICAgICAgICdxdWVzdGlvblJlZmVyZW5jZUltYWdlJzp0aGlzLmZiLmNvbnRyb2woJycpLFxyXG4gICAgICAgICAgICAgICdkZXNjcmlwdGl2ZXR5cGUnOnRoaXMuZmIuY29udHJvbCgndGV4dCcpLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgXSlcclxuICAgICAgICB9KVxyXG4gICAgICBdKVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmNoZWNrbGlzdExvYWRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGFsbG93ZWRWYWx1ZXNWYWxpZGF0b3IoYWxsb3dlZFZhbHVlczogc3RyaW5nW10pIHtcclxuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gY29udHJvbC52YWx1ZTtcclxuICAgICAgaWYgKHZhbHVlICYmIGFsbG93ZWRWYWx1ZXMuaW5kZXhPZih2YWx1ZSkgPT09IC0xKSB7XHJcbiAgICAgICAgcmV0dXJuIHsgaW52YWxpZFZhbHVlOiB0cnVlIH07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgYWRkTmV3U2VjdGlvbigpIHtcclxuICAgIGxldCBzZWN0aW9ucyA9IHRoaXMuQ2hlY2tsaXN0Rm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5O1xyXG4gICAgbGV0IHNlY3Rpb25MZW5ndGggPSBzZWN0aW9ucy5sZW5ndGg7XHJcbiAgICAodGhpcy5DaGVja2xpc3RGb3JtLmdldCgnc2VjdGlvbnMnKSBhcyBGb3JtQXJyYXkpLnB1c2goXHJcbiAgICAgIHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgIFwibmFtZVwiOiB0aGlzLmZiLmNvbnRyb2woYFNlY3Rpb24gJHtzZWN0aW9uTGVuZ3RoICsgMX1gLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCxWYWxpZGF0b3JzLm1pbkxlbmd0aCgxKV0pLFxyXG4gICAgICAgIFwic2VjdGlvbk51bWJlclwiOiB0aGlzLmZiLmNvbnRyb2woc2VjdGlvbkxlbmd0aCArIDEsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgICAgXCJxdWVzdGlvbnNcIjogdGhpcy5mYi5hcnJheShbXHJcbiAgICAgICAgICB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgICAgXCJxbm9cIjogdGhpcy5mYi5jb250cm9sKDEsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgICAgICAgICdxbmFtZSc6IHRoaXMuZmIuY29udHJvbCgnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuICAgICAgICAgICAgJ2Fuc3dlclR5cGUnOiB0aGlzLmZiLmNvbnRyb2woJ2Rlc2NyaXB0aXZlJyxcclxuICAgICAgICAgICAgICB0aGlzLmFsbG93ZWRWYWx1ZXNWYWxpZGF0b3IoW1wiZGVzY3JpcHRpdmVcIiwgXCJ5ZXMvbm9cIiwgXCJtdWx0aXBsZWNob2ljZXNpbmdsZVwiLCBcIm11bHRpcGxlY2hvaWNlbXVsdGlwbGVcIixcImRlc2NyaXB0aXZlSW1hZ2VcIiwgXCJpbWFnZVwiLCBcInZpZGVvXCIsJ211bHRpcGxlSW1hZ2UnLCdkYXRlJ10pKSxcclxuICAgICAgICAgICAgJ3J1bkFJJzogdGhpcy5mYi5jb250cm9sKGZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgICAgICAncnVuQUlEZXNjcmlwdGlvbic6IHRoaXMuZmIuY29udHJvbCgnJyksXHJcbiAgICAgICAgICAgICdhbGxvd1VwbG9hZGZyb21HYWxsZXJ5JzogdGhpcy5mYi5jb250cm9sKGZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgICAgICAnbGlua1R5cGUnOiB0aGlzLmZiLmNvbnRyb2woZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgICAgICAgICdxdWVzdGlvblJlZmVyZW5jZUltYWdlJzp0aGlzLmZiLmNvbnRyb2woJycpLFxyXG4gICAgICAgICAgICAnZGVzY3JpcHRpdmV0eXBlJzp0aGlzLmZiLmNvbnRyb2woJ3RleHQnKSxcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIF0pXHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgaWYoc2VjdGlvbkxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIHRoaXMuc2hvdyA9IC0xO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hY2NvcmRpYW4oc2VjdGlvbkxlbmd0aCk7XHJcbiAgICB0aGlzLnN3YWxUb2FzdCgnTmV3IHNlY3Rpb24gYWRkZWQhJyk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVTZWN0aW9uKHNlY3Rpb25JbmRleDogbnVtYmVyKSB7XHJcbiAgICAodGhpcy5DaGVja2xpc3RGb3JtLmdldCgnc2VjdGlvbnMnKSBhcyBGb3JtQXJyYXkpLnJlbW92ZUF0KHNlY3Rpb25JbmRleCk7XHJcbiAgfVxyXG5cclxuICBkcmFnRHJvcChzZWN0aW9uSW5kZXg6IGFueSwgZXZlbnQ6IENka0RyYWdEcm9wPGFueVtdPikge1xyXG4gICAgaWYgKGV2ZW50LnByZXZpb3VzQ29udGFpbmVyID09PSBldmVudC5jb250YWluZXIpIHtcclxuICAgICAgbW92ZUl0ZW1JbkFycmF5KGV2ZW50LmNvbnRhaW5lci5kYXRhLCBldmVudC5wcmV2aW91c0luZGV4LCBldmVudC5jdXJyZW50SW5kZXgpO1xyXG4gICAgICAvLyB0aGlzLnVwZGF0ZWxpbmtlZFF1ZXN0aW9uTm8oc2VjdGlvbkluZGV4LGV2ZW50LnByZXZpb3VzSW5kZXgsZXZlbnQuY3VycmVudEluZGV4KVxyXG4gICAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uUW5vcyhzZWN0aW9uSW5kZXgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdHJhbnNmZXJBcnJheUl0ZW0oXHJcbiAgICAgICAgZXZlbnQucHJldmlvdXNDb250YWluZXIuZGF0YSxcclxuICAgICAgICBldmVudC5jb250YWluZXIuZGF0YSxcclxuICAgICAgICBldmVudC5wcmV2aW91c0luZGV4LFxyXG4gICAgICAgIGV2ZW50LmN1cnJlbnRJbmRleFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlbGlua2VkUXVlc3Rpb25ObyhzZWNJZHg6bnVtYmVyLHByZXZJZHg6bnVtYmVyLHFuSWR4Om51bWJlcikge1xyXG4gICAgbGV0IHF1ZXN0aW9ucyA9ICh0aGlzLmdldFNlY3Rpb25Gb3JtQXJyYXkoKS5hdChzZWNJZHgpLmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5KTtcclxuICAgIGZvcihsZXQgaT0wO2k8cXVlc3Rpb25zLmxlbmd0aC0xO2krKykge1xyXG4gICAgICBsZXQgYW5zd2VycyA9ICgocXVlc3Rpb25zLmF0KGkpIGFzIEZvcm1Hcm91cCkuZ2V0KCdhbnN3ZXJzJykgYXMgRm9ybUFycmF5KTtcclxuICAgICAgZm9yKGxldCBqPTA7ajxhbnN3ZXJzPy5sZW5ndGggLTE7aisrKSB7XHJcbiAgICAgICAgbGV0IGxpbmtlZCA9IChhbnN3ZXJzLmF0KGopIGFzIEZvcm1Hcm91cCkuZ2V0KCdzaG93TGlua2VkJyk/LnZhbHVlO1xyXG4gICAgICAgIGlmKGxpbmtlZCkge1xyXG4gICAgICAgICAgbGV0IGxpbmtlZE5vID0gKGFuc3dlcnMuYXQoaikgYXMgRm9ybUdyb3VwKS5nZXQoJ2xpbmtlZFF1ZXN0aW9uJyk/LnZhbHVlO1xyXG4gICAgICAgICAgaWYobGlua2VkTm8gPT0gcHJldklkeCArIDEpIHtcclxuICAgICAgICAgICAgKGFuc3dlcnMuYXQoaikgYXMgRm9ybUdyb3VwKS5nZXQoJ2xpbmtlZFF1ZXN0aW9uJyk/LnNldFZhbHVlKHFuSWR4ICsgMSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmKGxpbmtlZE5vIDw9IHFuSWR4ICsgMSkge1xyXG4gICAgICAgICAgICAoYW5zd2Vycy5hdChqKSBhcyBGb3JtR3JvdXApLmdldCgnbGlua2VkUXVlc3Rpb24nKT8uc2V0VmFsdWUobGlua2VkTm8gLSAxKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGFuc3dlclR5cGVTZWxlY3Rpb24oc2VjdGlvbkluZGV4OiBhbnksIHF1ZXN0aW9uSW5kZXg6IGFueSwgZXZlbnQ6IGFueSxhbnNJbmRleDpudW1iZXIgPSAtMSxsaW5rUXVlc3Rpb25JbmRleDpudW1iZXIgPSAtMSkge1xyXG4gICAgbGV0IHNlbGVjdHZhbHVlOiBzdHJpbmcgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICAoKCgodGhpcy5DaGVja2xpc3RGb3JtLmdldCgnc2VjdGlvbnMnKSBhcyBGb3JtQXJyYXkpXHJcbiAgICAgIC5hdChzZWN0aW9uSW5kZXgpIGFzIEZvcm1Hcm91cClcclxuICAgICAgLmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5KVxyXG4gICAgICAuYXQocXVlc3Rpb25JbmRleCkgYXMgRm9ybUdyb3VwKS5nZXQoJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8uc2V0VmFsdWUoJycpO1xyXG4gICAgaWYoIVsnZGVzY3JpcHRpdmUnLCdtdWx0aXBsZUltYWdlJ10uaW5jbHVkZXMoc2VsZWN0dmFsdWUpKSB7XHJcbiAgICAgICAoKCgodGhpcy5DaGVja2xpc3RGb3JtLmdldCgnc2VjdGlvbnMnKSBhcyBGb3JtQXJyYXkpXHJcbiAgICAgIC5hdChzZWN0aW9uSW5kZXgpIGFzIEZvcm1Hcm91cClcclxuICAgICAgLmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5KVxyXG4gICAgICAuYXQocXVlc3Rpb25JbmRleCkgYXMgRm9ybUdyb3VwKS5nZXQoJ2Rlc2NyaXB0aXZldHlwZScpPy5zZXRWYWx1ZSgnJyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgKCgoKHRoaXMuQ2hlY2tsaXN0Rm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5KVxyXG4gICAgICAuYXQoc2VjdGlvbkluZGV4KSBhcyBGb3JtR3JvdXApXHJcbiAgICAgIC5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheSlcclxuICAgICAgLmF0KHF1ZXN0aW9uSW5kZXgpIGFzIEZvcm1Hcm91cCkuZ2V0KCdkZXNjcmlwdGl2ZXR5cGUnKT8uc2V0VmFsdWUoJ3RleHQnKTtcclxuICAgIH1cclxuICAgIGlmIChldmVudC50YXJnZXQudmFsdWUgPT0gJ3llcy9ubycgfHwgZXZlbnQudGFyZ2V0LnZhbHVlID09ICdtdWx0aXBsZWNob2ljZXNpbmdsZScpIHtcclxuICAgICAgdGhpcy5zZXRBbnN3ZXJBc0Zvcm1BcnJheShzZWN0aW9uSW5kZXgsIHF1ZXN0aW9uSW5kZXgsc2VsZWN0dmFsdWUsYW5zSW5kZXgsbGlua1F1ZXN0aW9uSW5kZXgpO1xyXG4gICAgfSBlbHNlIGlmIChldmVudC50YXJnZXQudmFsdWUgPT0gJ2Rlc2NyaXB0aXZlJykge1xyXG4gICAgfSBlbHNlIGlmIChldmVudC50YXJnZXQudmFsdWUgPT0gJ2Rlc2NyaXB0aXZlSW1hZ2UnKSB7XHJcbiAgICAgIHRoaXMuc2V0QW5zd2VyQXNGb3JtR3JvdXAoc2VjdGlvbkluZGV4LCBxdWVzdGlvbkluZGV4LCBzZWxlY3R2YWx1ZSxhbnNJbmRleCxsaW5rUXVlc3Rpb25JbmRleCk7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSA9PSAnbXVsdGlwbGVjaG9pY2VtdWx0aXBsZScpIHtcclxuICAgICAgdGhpcy5zZXRBbnN3ZXJBc0Zvcm1BcnJheShzZWN0aW9uSW5kZXgsIHF1ZXN0aW9uSW5kZXgsc2VsZWN0dmFsdWUsYW5zSW5kZXgsbGlua1F1ZXN0aW9uSW5kZXgpO1xyXG4gICAgfSBlbHNlIGlmIChldmVudC50YXJnZXQudmFsdWUgPT0gJ2ltYWdlJykge1xyXG4gICAgICB0aGlzLnNldEFuc3dlckFzRm9ybUdyb3VwKHNlY3Rpb25JbmRleCwgcXVlc3Rpb25JbmRleCwgJ2ltYWdlJyxhbnNJbmRleCxsaW5rUXVlc3Rpb25JbmRleCk7XHJcbiAgICB9IGVsc2UgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSA9PSAndmlkZW8nKSB7XHJcbiAgICAgIHRoaXMuc2V0QW5zd2VyQXNGb3JtR3JvdXAoc2VjdGlvbkluZGV4LCBxdWVzdGlvbkluZGV4LCAndmlkZW8nLGFuc0luZGV4LGxpbmtRdWVzdGlvbkluZGV4KTtcclxuICAgIH1lbHNlIGlmIChldmVudC50YXJnZXQudmFsdWUgPT0gJ211bHRpcGxlSW1hZ2UnKSB7XHJcbiAgICAgIHRoaXMuc2V0QW5zd2VyQXNGb3JtR3JvdXAoc2VjdGlvbkluZGV4LCBxdWVzdGlvbkluZGV4LCAnbXVsdGlwbGVJbWFnZScsYW5zSW5kZXgsbGlua1F1ZXN0aW9uSW5kZXgpO1xyXG4gICAgfWVsc2UgaWYgKGV2ZW50LnRhcmdldC52YWx1ZSA9PSAnZGF0ZScpIHt9XHJcbiAgICB0aGlzLnJlbW92ZWROZXN0ZWRRdWVzdGlvbihzZWN0aW9uSW5kZXgscXVlc3Rpb25JbmRleCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVWYWxpZGF0aW9uVHlwZShldmVudDphbnksc2VjdGlvbjpudW1iZXIscXVlc3Rpb246bnVtYmVyLGFuc3dlcjpudW1iZXIpIHtcclxuICAgIGlmKGV2ZW50LnRhcmdldC52YWx1ZSA9PSAnRGVzY3JpcHRpdmUgQW5zd2VyJykge1xyXG4gICAgICAoKCgoKCh0aGlzLkNoZWNrbGlzdEZvcm0uZ2V0KCdzZWN0aW9ucycpIGFzIEZvcm1BcnJheSlcclxuICAgICAgLmF0KHNlY3Rpb24pIGFzIEZvcm1Hcm91cClcclxuICAgICAgLmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5KVxyXG4gICAgICAuYXQocXVlc3Rpb24pIGFzIEZvcm1Hcm91cCkuZ2V0KCdhbnN3ZXJzJykgYXMgRm9ybUFycmF5KS5hdChhbnN3ZXIpIGFzIEZvcm1Hcm91cCkuZ2V0KCdkZXNjcmlwdGl2ZXR5cGUnKT8uc2V0VmFsdWUoJ3RleHQnKTtcclxuICAgIH1cclxuICAgICgoKCgoKHRoaXMuQ2hlY2tsaXN0Rm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5KVxyXG4gICAgICAuYXQoc2VjdGlvbikgYXMgRm9ybUdyb3VwKVxyXG4gICAgICAuZ2V0KCdxdWVzdGlvbnMnKSBhcyBGb3JtQXJyYXkpXHJcbiAgICAgIC5hdChxdWVzdGlvbikgYXMgRm9ybUdyb3VwKS5nZXQoJ2Fuc3dlcnMnKSBhcyBGb3JtQXJyYXkpLmF0KGFuc3dlcikgYXMgRm9ybUdyb3VwKS5nZXQoJ2FsbG93VXBsb2FkZnJvbUdhbGxlcnknKT8uc2V0VmFsdWUoZmFsc2UpO1xyXG4gIH1cclxuXHJcbiAgc2V0QW5zd2VyQXNGb3JtQXJyYXkoc2VjdGlvbkluZGV4OiBudW1iZXIsIHF1ZXN0aW9uSW5kZXg6IG51bWJlcixzZWxlY3R2YWx1ZTogc3RyaW5nLGFuc0luZGV4Om51bWJlcixsaW5rUXVlc3Rpb25JbmRleDpudW1iZXIpIHtcclxuICAgIGxldCBxdWVzdGlvbiA9ICgoKCh0aGlzLkNoZWNrbGlzdEZvcm0uZ2V0KCdzZWN0aW9ucycpIGFzIEZvcm1BcnJheSlcclxuICAgICAgLmF0KHNlY3Rpb25JbmRleCkgYXMgRm9ybUdyb3VwKVxyXG4gICAgICAuZ2V0KCdxdWVzdGlvbnMnKSBhcyBGb3JtQXJyYXkpXHJcbiAgICAgIC5hdChxdWVzdGlvbkluZGV4KSBhcyBGb3JtR3JvdXApO1xyXG4gICAgXHJcbiAgaWYoYW5zSW5kZXggIT0gLTEpIHtcclxuICAgIHF1ZXN0aW9uID0gKCgoKCgoKHRoaXMuQ2hlY2tsaXN0Rm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5KVxyXG4gICAgICAuYXQoc2VjdGlvbkluZGV4KSBhcyBGb3JtR3JvdXApXHJcbiAgICAgIC5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheSlcclxuICAgICAgLmF0KHF1ZXN0aW9uSW5kZXgpIGFzIEZvcm1Hcm91cClcclxuICAgICAgLmdldCgnYW5zd2VycycpIGFzIEZvcm1BcnJheSlcclxuICAgICAgLmF0KGFuc0luZGV4KSBhcyBGb3JtR3JvdXApXHJcbiAgICAgIC5nZXQoJ2xpbmtRdWVzdGlvbkFuc3dlcnMnKSBhcyBGb3JtQXJyYXkpXHJcbiAgICAgIC5hdChsaW5rUXVlc3Rpb25JbmRleCkgYXMgRm9ybUdyb3VwXHJcbiAgfVxyXG5cclxuICAgIGlmIChzZWxlY3R2YWx1ZSA9PSAneWVzL25vJykge1xyXG4gICAgICBxdWVzdGlvbi5zZXRDb250cm9sKCdhbnN3ZXJzJyxcclxuICAgICAgICB0aGlzLmZiLmFycmF5KFtcclxuICAgICAgICAgIHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICAnYW5zd2VyJzogdGhpcy5mYi5jb250cm9sKCdZZXMnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgICAgICAnYW5zd2Vyb3B0aW9uTnVtYmVyJzogdGhpcy5mYi5jb250cm9sKDEpLFxyXG4gICAgICAgICAgICAnc29wRmxhZyc6IHRoaXMuZmIuY29udHJvbChmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuICAgICAgICAgICAgLy8gJ2xpbmtRdWVzdGlvbic6dGhpcy5mYi5jb250cm9sKGZhbHNlLFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgICAgICAgIC8vICdhbnN3ZXJJbnB1dFN0eWxlJzogdGhpcy5mYi5jb250cm9sKCdyYWRpbycsW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuICAgICAgICAgICAgJ3ZhbGlkYXRpb24nOiB0aGlzLmZiLmNvbnRyb2woZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgICAgICAgICd2YWxpZGF0aW9uVHlwZSc6IHRoaXMuZmIuY29udHJvbCgnQ2FwdHVyZSBJbWFnZScsIHRoaXMuYWxsb3dlZFZhbHVlc1ZhbGlkYXRvcihbXCJDYXB0dXJlIEltYWdlXCIsIFwiRGVzY3JpcHRpdmUgQW5zd2VyXCIsXCJDYXB0dXJlIFZpZGVvXCJdKSksXHJcbiAgICAgICAgICAgICdsaW5rZWRRdWVzdGlvbic6dGhpcy5mYi5jb250cm9sKDAsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgICAgICAgICdzaG93TGlua2VkJzp0aGlzLmZiLmNvbnRyb2woZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgICAgICAgICdyZWZlcmVuY2VJbWFnZSc6IHRoaXMuZmIuY29udHJvbCgnJyksXHJcbiAgICAgICAgICAgICdydW5BSSc6IHRoaXMuZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgICAgICAgICdhbGxvd1VwbG9hZGZyb21HYWxsZXJ5JzogdGhpcy5mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgICAgICAgJ2Rlc2NyaXB0aXZldHlwZSc6dGhpcy5mYi5jb250cm9sKCcnKVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgICAgJ2Fuc3dlcic6IHRoaXMuZmIuY29udHJvbCgnTm8nLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgICAgICAnYW5zd2Vyb3B0aW9uTnVtYmVyJzogdGhpcy5mYi5jb250cm9sKDIpLFxyXG4gICAgICAgICAgICAnc29wRmxhZyc6IHRoaXMuZmIuY29udHJvbChmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuICAgICAgICAgICAgLy8gJ2xpbmtRdWVzdGlvbic6dGhpcy5mYi5jb250cm9sKGZhbHNlLFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgICAgICAgIC8vICdsaW5rUXVlc3Rpb25BbnN3ZXJzJzp0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgICAgLy8gICAgICAgXCJxbm9cIjogdGhpcy5mYi5jb250cm9sKDEsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgICAgICAgIC8vICAgICAgICdxbmFtZSc6IHRoaXMuZmIuY29udHJvbCgnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuICAgICAgICAgICAgLy8gICAgICAgJ2Fuc3dlclR5cGUnOiB0aGlzLmZiLmNvbnRyb2woJ2Rlc2NyaXB0aXZlJyxcclxuICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLmFsbG93ZWRWYWx1ZXNWYWxpZGF0b3IoW1wiZGVzY3JpcHRpdmVcIiwgXCJ5ZXMvbm9cIiwgXCJtdWx0aXBsZWNob2ljZXNpbmdsZVwiLCBcIm11bHRpcGxlY2hvaWNlbXVsdGlwbGVcIixcImRlc2NyaXB0aXZlSW1hZ2VcIiwgXCJpbWFnZVwiLCBcInZpZGVvXCJdKSksXHJcbiAgICAgICAgICAgIC8vICAgICAgIC8vICdhbnN3ZXJzJzogdGhpcy5mYi5hcnJheShbXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgLy8gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgIC8vICAgICAgICAgLy8gICAnYW5zd2VyJzogdGhpcy5mYi5jb250cm9sKCcnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgICAgICAvLyAgICAgICAgIC8vICAgJ2Fuc3dlcm9wdGlvbk51bWJlcic6IHRoaXMuZmIuY29udHJvbCgxKSxcclxuICAgICAgICAgICAgLy8gICAgICAgICAvLyAgICdzb3BGbGFnJzogdGhpcy5mYi5jb250cm9sKGZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgICAgICAvLyAgICAgICAgIC8vICAgLy8gJ2Fuc3dlcklucHV0U3R5bGUnOidkZXNjcmlwdGl2ZScsXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgLy8gICAndmFsaWRhdGlvbic6IHRoaXMuZmIuY29udHJvbChmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuICAgICAgICAgICAgLy8gICAgICAgICAvLyAgICd2YWxpZGF0aW9uVHlwZSc6IHRoaXMuZmIuY29udHJvbCgnQ2FwdHVyZSBJbWFnZScsIHRoaXMuYWxsb3dlZFZhbHVlc1ZhbGlkYXRvcihbXCJDYXB0dXJlIEltYWdlXCIsIFwiRGVzY3JpcHRpdmUgQW5zd2VyXCIsXCJDYXB0dXJlIFZpZGVvXCJdKSksXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgLy8gICAncmVmZXJlbmNlSW1hZ2UnOiB0aGlzLmZiLmNvbnRyb2woJ3JlZmVyZW5jZUltYWdlJyksXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgLy8gICAnYWxsb3dVcGxvYWRmcm9tR2FsbGVyeSc6IHRoaXMuZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgLy8gfSlcclxuICAgICAgICAgICAgLy8gICAgICAgLy8gXSksICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIC8vICAgICAgICdydW5BSSc6IHRoaXMuZmIuY29udHJvbChmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuICAgICAgICAgICAgLy8gICAgICAgJ3J1bkFJRGVzY3JpcHRpb24nOiB0aGlzLmZiLmNvbnRyb2woJycpLFxyXG4gICAgICAgICAgICAvLyAgICAgICAnYWxsb3dVcGxvYWRmcm9tR2FsbGVyeSc6IHRoaXMuZmIuY29udHJvbChmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuICAgICAgICAgICAgLy8gICAgIH0pLFxyXG4gICAgICAgICAgICAvLyAnYW5zd2VySW5wdXRTdHlsZSc6IHRoaXMuZmIuY29udHJvbCgncmFkaW8nLFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgICAgICAgICd2YWxpZGF0aW9uJzogdGhpcy5mYi5jb250cm9sKGZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgICAgICAndmFsaWRhdGlvblR5cGUnOiB0aGlzLmZiLmNvbnRyb2woJ0NhcHR1cmUgSW1hZ2UnLCB0aGlzLmFsbG93ZWRWYWx1ZXNWYWxpZGF0b3IoW1wiQ2FwdHVyZSBJbWFnZVwiLCBcIkRlc2NyaXB0aXZlIEFuc3dlclwiLFwiQ2FwdHVyZSBWaWRlb1wiXSkpLFxyXG4gICAgICAgICAgICAnbGlua2VkUXVlc3Rpb24nOnRoaXMuZmIuY29udHJvbCgwLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgICAgICAnc2hvd0xpbmtlZCc6dGhpcy5mYi5jb250cm9sKGZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgICAgICAncmVmZXJlbmNlSW1hZ2UnOiB0aGlzLmZiLmNvbnRyb2woJycpLFxyXG4gICAgICAgICAgICAncnVuQUknOiB0aGlzLmZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICAnYWxsb3dVcGxvYWRmcm9tR2FsbGVyeSc6IHRoaXMuZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgICAgICAgICdkZXNjcmlwdGl2ZXR5cGUnOnRoaXMuZmIuY29udHJvbCgnJylcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgXSlcclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHF1ZXN0aW9uLnNldENvbnRyb2woJ2Fuc3dlcnMnLFxyXG4gICAgICAgIHRoaXMuZmIuYXJyYXkoW1xyXG4gICAgICAgICAgdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgICdhbnN3ZXInOiB0aGlzLmZiLmNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgICAgICAgICdhbnN3ZXJvcHRpb25OdW1iZXInOiB0aGlzLmZiLmNvbnRyb2woMSksXHJcbiAgICAgICAgICAgICdzb3BGbGFnJzogdGhpcy5mYi5jb250cm9sKGZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgICAgICAvLyAuLi4oc2VsZWN0dmFsdWU9PSdtdWx0aXBsZWNob2ljZXNpbmdsZScgPyB7J2xpbmtRdWVzdGlvbic6dGhpcy5mYi5jb250cm9sKHRydWUsW1ZhbGlkYXRvcnMucmVxdWlyZWRdKX0gOiB7fSksXHJcbiAgICAgICAgICAgIC8vICdhbnN3ZXJJbnB1dFN0eWxlJzogdGhpcy5mYi5jb250cm9sKHF1ZXN0aW9uLmdldCgnYW5zd2VyVHlwZScpPy52YWx1ZSxbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgICAgICAndmFsaWRhdGlvbic6IHRoaXMuZmIuY29udHJvbChmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuICAgICAgICAgICAgJ3ZhbGlkYXRpb25UeXBlJzogdGhpcy5mYi5jb250cm9sKCdDYXB0dXJlIEltYWdlJywgdGhpcy5hbGxvd2VkVmFsdWVzVmFsaWRhdG9yKFtcIkNhcHR1cmUgSW1hZ2VcIiwgXCJEZXNjcmlwdGl2ZSBBbnN3ZXJcIixcIkNhcHR1cmUgVmlkZW9cIl0pKSxcclxuICAgICAgICAgICAgLi4uKHNlbGVjdHZhbHVlID09ICdtdWx0aXBsZWNob2ljZXNpbmdsZScgPyB7XCJsaW5rZWRRdWVzdGlvblwiOnRoaXMuZmIuY29udHJvbCgwLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLCdzaG93TGlua2VkJzp0aGlzLmZiLmNvbnRyb2woZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSl9IDoge30pLFxyXG4gICAgICAgICAgICAncmVmZXJlbmNlSW1hZ2UnOiB0aGlzLmZiLmNvbnRyb2woJycpLFxyXG4gICAgICAgICAgICAncnVuQUknOiB0aGlzLmZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICAnYWxsb3dVcGxvYWRmcm9tR2FsbGVyeSc6IHRoaXMuZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgICAgICAgICdkZXNjcmlwdGl2ZXR5cGUnOnRoaXMuZmIuY29udHJvbCgnJylcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAgICdhbnN3ZXInOiB0aGlzLmZiLmNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgICAgICAgICdhbnN3ZXJvcHRpb25OdW1iZXInOiB0aGlzLmZiLmNvbnRyb2woMSksXHJcbiAgICAgICAgICAgICdzb3BGbGFnJzogdGhpcy5mYi5jb250cm9sKGZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgICAgICAvLyAuLi4oc2VsZWN0dmFsdWU9PSdtdWx0aXBsZWNob2ljZXNpbmdsZScgPyB7J2xpbmtRdWVzdGlvbic6dGhpcy5mYi5jb250cm9sKHRydWUsW1ZhbGlkYXRvcnMucmVxdWlyZWRdKX0gOiB7fSksXHJcbiAgICAgICAgICAgIC8vICdhbnN3ZXJJbnB1dFN0eWxlJzogdGhpcy5mYi5jb250cm9sKHF1ZXN0aW9uLmdldCgnYW5zd2VyVHlwZScpPy52YWx1ZSxbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgICAgICAndmFsaWRhdGlvbic6IHRoaXMuZmIuY29udHJvbChmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuICAgICAgICAgICAgJ3ZhbGlkYXRpb25UeXBlJzogdGhpcy5mYi5jb250cm9sKCdDYXB0dXJlIEltYWdlJywgdGhpcy5hbGxvd2VkVmFsdWVzVmFsaWRhdG9yKFtcIkNhcHR1cmUgSW1hZ2VcIiwgXCJEZXNjcmlwdGl2ZSBBbnN3ZXJcIixcIkNhcHR1cmUgVmlkZW9cIl0pKSxcclxuICAgICAgICAgICAgLi4uKHNlbGVjdHZhbHVlID09ICdtdWx0aXBsZWNob2ljZXNpbmdsZScgPyB7XCJsaW5rZWRRdWVzdGlvblwiOnRoaXMuZmIuY29udHJvbCgwLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLCdzaG93TGlua2VkJzp0aGlzLmZiLmNvbnRyb2woZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSl9IDoge30pLFxyXG4gICAgICAgICAgICAncmVmZXJlbmNlSW1hZ2UnOiB0aGlzLmZiLmNvbnRyb2woJycpLFxyXG4gICAgICAgICAgICAncnVuQUknOiB0aGlzLmZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICAnYWxsb3dVcGxvYWRmcm9tR2FsbGVyeSc6IHRoaXMuZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgICAgICAgICdkZXNjcmlwdGl2ZXR5cGUnOnRoaXMuZmIuY29udHJvbCgnJylcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgXSksXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLkNoZWNrbGlzdEZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0QW5zd2VyQXNGb3JtR3JvdXAoc2VjdGlvbkluZGV4OiBudW1iZXIsIHF1ZXN0aW9uSW5kZXg6IG51bWJlciwgYW5zd2VyVHlwZTogc3RyaW5nLGFuc0luZGV4Om51bWJlciA9IC0xLGxpbmtRdWVzdGlvbkluZGV4Om51bWJlciA9IC0xKSB7XHJcbiAgICBpZiAoWydpbWFnZScsICdkZXNjcmlwdGl2ZUltYWdlJywnbXVsdGlwbGVJbWFnZSddLmluY2x1ZGVzKGFuc3dlclR5cGUpKSB7XHJcbiAgICAgIGlmKGFuc0luZGV4ID09IC0xKSB7XHJcbiAgICAgICAgKCgoKHRoaXMuQ2hlY2tsaXN0Rm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5KS5hdChzZWN0aW9uSW5kZXgpIGFzIEZvcm1Hcm91cClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5KS5hdChxdWVzdGlvbkluZGV4KSBhcyBGb3JtR3JvdXApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zZXRDb250cm9sKCdhbnN3ZXJzJywgXHJcbiAgICAgICAgICB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgICAgJ3JlZmVyZW5jZUltYWdlJzogdGhpcy5mYi5jb250cm9sKCcnKSxcclxuICAgICAgICAgICAgJ3J1bkFJJzogdGhpcy5mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgICAgICAgJ2FsbG93VXBsb2FkZnJvbUdhbGxlcnknOiB0aGlzLmZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICAuLi4oYW5zd2VyVHlwZSA9PSAnbXVsdGlwbGVJbWFnZScgPyB7J2Rlc2NyaXB0aXZldHlwZSc6dGhpcy5mYi5jb250cm9sKCd0ZXh0Jyl9Ont9KVxyXG4gICAgICAgICAgICAvLyAnYW5zd2VySW5wdXRTdHlsZSc6IHRoaXMuZmIuY29udHJvbChhbnN3ZXJUeXBlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgICAgfSkpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgICgoKCgoKCgodGhpcy5DaGVja2xpc3RGb3JtLmdldCgnc2VjdGlvbnMnKSBhcyBGb3JtQXJyYXkpLmF0KHNlY3Rpb25JbmRleCkgYXMgRm9ybUdyb3VwKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KCdxdWVzdGlvbnMnKSBhcyBGb3JtQXJyYXkpLmF0KHF1ZXN0aW9uSW5kZXgpIGFzIEZvcm1Hcm91cClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgnYW5zd2VycycpIGFzIEZvcm1BcnJheSkuYXQoYW5zSW5kZXgpIGFzIEZvcm1Hcm91cClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldCgnbGlua1F1ZXN0aW9uQW5zd2VycycpIGFzIEZvcm1BcnJheSkuYXQobGlua1F1ZXN0aW9uSW5kZXgpIGFzIEZvcm1Hcm91cClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNldENvbnRyb2woJ2Fuc3dlcnMnLCBcclxuICAgICAgICAgIHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICAncmVmZXJlbmNlSW1hZ2UnOiB0aGlzLmZiLmNvbnRyb2woJycpLFxyXG4gICAgICAgICAgICAncnVuQUknOiB0aGlzLmZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICAnYWxsb3dVcGxvYWRmcm9tR2FsbGVyeSc6IHRoaXMuZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgICAgICAgIC4uLihhbnN3ZXJUeXBlID09ICdtdWx0aXBsZUltYWdlJyA/IHsnZGVzY3JpcHRpdmV0eXBlJzp0aGlzLmZiLmNvbnRyb2woJ3RleHQnKX06e30pXHJcbiAgICAgICAgICAgIC8vICdhbnN3ZXJJbnB1dFN0eWxlJzogdGhpcy5mYi5jb250cm9sKGFuc3dlclR5cGUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgICAgICB9KSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBxdWVzdGlvbiA9ICgoKCh0aGlzLkNoZWNrbGlzdEZvcm0uZ2V0KCdzZWN0aW9ucycpIGFzIEZvcm1BcnJheSlcclxuICAgICAgICAuYXQoc2VjdGlvbkluZGV4KSBhcyBGb3JtR3JvdXApXHJcbiAgICAgICAgLmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5KVxyXG4gICAgICAgIC5hdChxdWVzdGlvbkluZGV4KSBhcyBGb3JtR3JvdXApXHJcblxyXG4gICAgICAgIGlmKGFuc0luZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgICBxdWVzdGlvbiA9ICgoKCgoKHRoaXMuQ2hlY2tsaXN0Rm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5KVxyXG4gICAgICAgICAgLmF0KHNlY3Rpb25JbmRleCkgYXMgRm9ybUdyb3VwKVxyXG4gICAgICAgICAgLmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5KVxyXG4gICAgICAgICAgLmF0KHF1ZXN0aW9uSW5kZXgpIGFzIEZvcm1Hcm91cClcclxuICAgICAgICAgIC5nZXQoJ2Fuc3dlcnMnKSBhcyBGb3JtQXJyYXkpXHJcbiAgICAgICAgICAuYXQoYW5zSW5kZXgpIGFzIEZvcm1Hcm91cClcclxuICAgICAgICB9XHJcblxyXG4gICAgICBxdWVzdGlvbi5zZXRDb250cm9sKCdhbnN3ZXJzJywgdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgJ2FsbG93VXBsb2FkZnJvbUdhbGxlcnknOiB0aGlzLmZiLmNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgIC8vICdhbnN3ZXJJbnB1dFN0eWxlJzogdGhpcy5mYi5jb250cm9sKGFuc3dlclR5cGUsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgIH0pXHJcbiAgICAgIClcclxuICAgIH1cclxuICAgIHRoaXMuQ2hlY2tsaXN0Rm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG5cclxuICBsb2FkSW1hZ2VGcm9tRGV2aWNlKHNlY0lkeDogbnVtYmVyLHFJZHg6IG51bWJlcixldmVudDogYW55LGFuc0lkeDpudW1iZXI9LTEsY3RybE5hbWU6c3RyaW5nID0gJycpIHtcclxuICAgIGlmIChldmVudC50YXJnZXQuZmlsZXMgIT0gdW5kZWZpbmVkICYmIGV2ZW50LnRhcmdldC5maWxlcy5sZW5ndGgpIHtcclxuICAgIH1cclxuICAgIGxldCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgbGV0IGZpbGU6IEZpbGUgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XHJcbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2ZpbGUnLCBmaWxlLCBmaWxlLm5hbWUpO1xyXG4gICAgdGhpcy5zb3BTZXJ2aWNlLmltYWdldXBsb2FkKGZvcm1EYXRhKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKHJlcywncmVzJyk7XHJcbiAgICAgIGlmKGN0cmxOYW1lKVxyXG4gICAgICAgIHRoaXMuZ2V0QW5zd2VyRm9ybUdyb3VwX0Zvcm1Db250cm9sKHNlY0lkeCxxSWR4LCdxdWVzdGlvblJlZmVyZW5jZUltYWdlJyk/LnNldFZhbHVlKHJlcy5kYXRhLmltZ1VybCk7XHJcbiAgICAgIGVsc2VcclxuICAgICAgICB0aGlzLmdldEFuc3dlckZvcm1Hcm91cF9Gb3JtQ29udHJvbChzZWNJZHgscUlkeCwncmVmZXJlbmNlSW1hZ2UnLGFuc0lkeCk/LnNldFZhbHVlKHJlcy5kYXRhLmltZ1VybCk7XHJcbiAgICAgIFxyXG4gICAgICB0aGlzLkNoZWNrbGlzdEZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdG9yLmRldGVjdENoYW5nZXMoKTsgICAgICBcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBjbGVhclJlZmVyZW5jZUltYWdlKHNlY0lkeDogbnVtYmVyLHFJZHg6IG51bWJlcixhbnNJZHg6bnVtYmVyPS0xKSB7XHJcbiAgICB0aGlzLmdldEFuc3dlckZvcm1Hcm91cF9Gb3JtQ29udHJvbChzZWNJZHgscUlkeCwncmVmZXJlbmNlSW1hZ2UnLGFuc0lkeCk/LnNldFZhbHVlKCcnKTtcclxuICAgIHRoaXMuZ2V0QW5zd2VyRm9ybUdyb3VwX0Zvcm1Db250cm9sKHNlY0lkeCxxSWR4LCdydW5BSScsYW5zSWR4KT8uc2V0VmFsdWUoZmFsc2UpO1xyXG4gICAgdGhpcy5nZXRBbnN3ZXJGb3JtR3JvdXBfRm9ybUNvbnRyb2woc2VjSWR4LHFJZHgsJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8uc2V0VmFsdWUoJycpO1xyXG4gIH1cclxuXHJcbiAgZ2V0dmFsaWRhdGlvbihzZWN0aW9uSW5kZXg6IGFueSwgcXVlc3Rpb25JbmRleDogYW55LCBhZGRtb3JlcW5JbmRleDogYW55LCBldmVudDogYW55KSB7XHJcbiAgICAoKCgoKCh0aGlzLkNoZWNrbGlzdEZvcm0uZ2V0KCdzZWN0aW9ucycpIGFzIEZvcm1BcnJheSkuYXQoc2VjdGlvbkluZGV4KSBhcyBGb3JtR3JvdXApLmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5KS5hdChxdWVzdGlvbkluZGV4KSBhcyBGb3JtR3JvdXApLmdldCgnYW5zd2VycycpIGFzIEZvcm1BcnJheSkuYXQoYWRkbW9yZXFuSW5kZXgpIGFzIEZvcm1Hcm91cCkuZ2V0KCd2YWxpZGF0aW9uJyk/LnNldFZhbHVlKGV2ZW50LnRhcmdldC5jaGVja2VkKTtcclxuICB9XHJcblxyXG4gIGFkZE5ld1F1ZXN0aW9uKHNlY3Rpb25JbmRleDogbnVtYmVyKSB7XHJcbiAgICBpZiAodGhpcy5zZWN0aW9uSW5kZXggPiAtMSkge1xyXG4gICAgICBpZiAoISgoKHRoaXMuQ2hlY2tsaXN0Rm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5KS5hdChzZWN0aW9uSW5kZXgpIGFzIEZvcm1Hcm91cCkuZ2V0KCdxdWVzdGlvbnMnKSkpIHtcclxuICAgICAgICAoKHRoaXMuQ2hlY2tsaXN0Rm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5KS5hdChzZWN0aW9uSW5kZXgpIGFzIEZvcm1Hcm91cCkuc2V0Q29udHJvbCgncXVlc3Rpb25zJywgdGhpcy5mYi5hcnJheShbXSkpO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBxdWVzdGlvbnMgPSAoKCh0aGlzLkNoZWNrbGlzdEZvcm0uZ2V0KCdzZWN0aW9ucycpIGFzIEZvcm1BcnJheSkuYXQoc2VjdGlvbkluZGV4KSBhcyBGb3JtR3JvdXApLmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5KTtcclxuICAgICAgbGV0IHF1ZXN0aW9uc0xlbmd0aCA9IHF1ZXN0aW9ucy5sZW5ndGg7XHJcbiAgICAgIHF1ZXN0aW9ucy5wdXNoKHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgIFwicW5vXCI6IHRoaXMuZmIuY29udHJvbChxdWVzdGlvbnNMZW5ndGggKyAxLCksXHJcbiAgICAgICAgJ3FuYW1lJzogdGhpcy5mYi5jb250cm9sKCcnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgICdhbnN3ZXJUeXBlJzogdGhpcy5mYi5jb250cm9sKCdkZXNjcmlwdGl2ZScsXHJcbiAgICAgICAgICB0aGlzLmFsbG93ZWRWYWx1ZXNWYWxpZGF0b3IoW1wiZGVzY3JpcHRpdmVcIiwgXCJ5ZXMvbm9cIiwgXCJtdWx0aXBsZWNob2ljZXNpbmdsZVwiLCBcIm11bHRpcGxlY2hvaWNlbXVsdGlwbGVcIixcImRlc2NyaXB0aXZlSW1hZ2VcIiwgXCJpbWFnZVwiLCBcInZpZGVvXCIsJ211bHRpcGxlSW1hZ2UnLCdkYXRlJ10pKSxcclxuICAgICAgICAncnVuQUknOiB0aGlzLmZiLmNvbnRyb2woZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgICAgJ3J1bkFJRGVzY3JpcHRpb24nOiB0aGlzLmZiLmNvbnRyb2woJycpLFxyXG4gICAgICAgICdhbGxvd1VwbG9hZGZyb21HYWxsZXJ5JzogdGhpcy5mYi5jb250cm9sKGZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgICdsaW5rVHlwZSc6IHRoaXMuZmIuY29udHJvbChmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuICAgICAgICAncXVlc3Rpb25SZWZlcmVuY2VJbWFnZSc6dGhpcy5mYi5jb250cm9sKCcnKSxcclxuICAgICAgICAnZGVzY3JpcHRpdmV0eXBlJzp0aGlzLmZiLmNvbnRyb2woJ3RleHQnKSxcclxuICAgICAgfSkpOyAgICAgIFxyXG4gICAgICB0aGlzLmNoYW5nZWRldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgdGhpcy5zd2FsVG9hc3QoJ05ldyBxdWVzdGlvbiBhZGRlZCEnKTtcclxuICAgICAgc2V0VGltZW91dCgoKT0+IHtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvUXVlc3Rpb24oc2VjdGlvbkluZGV4LHF1ZXN0aW9uc0xlbmd0aCk7XHJcbiAgICAgIH0sMTAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRlbGV0ZVF1ZXN0aW9uKHNlY3Rpb25JbmRleDogYW55LCBxdWVzdGlvbkluZGV4OiBhbnkpIHtcclxuICAgIGxldCBxdWVzdGlvbiA9IHRoaXMuZ2V0UXVlc3Rpb25Gb3JtQ29udHJvbChzZWN0aW9uSW5kZXgsIHF1ZXN0aW9uSW5kZXgsICdxbmFtZScpPy52YWx1ZSB8fCAnJztcclxuICAgIGxldCBxbm8gPSB0aGlzLmdldFF1ZXN0aW9uRm9ybUNvbnRyb2woc2VjdGlvbkluZGV4LCBxdWVzdGlvbkluZGV4LCAncW5vJyk/LnZhbHVlO1xyXG4gICAgcXVlc3Rpb24gPSBxdWVzdGlvbiA/IHF1ZXN0aW9uIDogYFF1ZXN0aW9uICR7dGhpcy5nZXRRdWVzdGlvbkZvcm1Db250cm9sKHNlY3Rpb25JbmRleCwgcXVlc3Rpb25JbmRleCwgJ3FubycpPy52YWx1ZSB8fCAnJ31gO1xyXG4gICAgcXVlc3Rpb24gPSBxdWVzdGlvbi5sZW5ndGggPiAyMCA/IHF1ZXN0aW9uLnNsaWNlKDAsMjApICsgJy4uLicgOiBxdWVzdGlvbjtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oVHJheHBvcHVwQ29tcG9uZW50LHtjZW50ZXJlZDogdHJ1ZSwgc2l6ZTogJ21kJ30pO1xyXG4gICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmRhdGEgPSB7XHJcbiAgICAgIGltYWdlc3JjOiBgPHNwYW4+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI1NlwiIGhlaWdodD1cIjU2XCIgdmlld0JveD1cIjAgMCA1NiA1NlwiIGZpbGw9XCJub25lXCI+PHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBmaWxsPVwiI0ZFRTRFMlwiLz48cGF0aCBkPVwiTTI4IDI0VjI4TTI4IDMySDI4LjAxTTM4IDI4QzM4IDMzLjUyMjggMzMuNTIyOCAzOCAyOCAzOEMyMi40NzcyIDM4IDE4IDMzLjUyMjggMTggMjhDMTggMjIuNDc3MiAyMi40NzcyIDE4IDI4IDE4QzMzLjUyMjggMTggMzggMjIuNDc3MiAzOCAyOFpcIiBzdHJva2U9XCIjRDkyRDIwXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIHN0cm9rZT1cIiNGRUYzRjJcIiBzdHJva2Utd2lkdGg9XCI4XCIvPjwvc3ZnPjwvc3Bhbj5gLFxyXG4gICAgICB0aXRsZTogYERlbGV0ZSAnJHtxdWVzdGlvbn0nP2AsXHJcbiAgICAgIGNvbnRlbnQ6IGBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIDxiPicke3F1ZXN0aW9ufSc8L2I+PyBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdW5kb25lLmAsXHJcbiAgICAgIGJ1dHRvbnR5cGU6ICdkZWxldGUnXHJcbiAgICB9XHJcbiAgICBkaWFsb2dSZWYucmVzdWx0LnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICBpZiAocmVzID09ICdkZWxldGUnKSB7XHJcbiAgICAgICAgbGV0IGxpbmtlZFF1ZXN0aW9uOmFueSA9ICgoKHRoaXMuZ2V0U2VjdGlvbkZvcm1BcnJheSgpLmF0KHNlY3Rpb25JbmRleCkuZ2V0KCdxdWVzdGlvbnMnKSBhcyBGb3JtQXJyYXkpLmF0KHF1ZXN0aW9uSW5kZXgpIGFzIEZvcm1Hcm91cCkuZ2V0KCdhbnN3ZXJzJykgYXMgRm9ybUFycmF5KTtcclxuICAgICAgICBsZXQgdHlwZTphbnkgPSAoKHRoaXMuZ2V0U2VjdGlvbkZvcm1BcnJheSgpLmF0KHNlY3Rpb25JbmRleCkuZ2V0KCdxdWVzdGlvbnMnKSBhcyBGb3JtQXJyYXkpLmF0KHF1ZXN0aW9uSW5kZXgpIGFzIEZvcm1Hcm91cCkuZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlO1xyXG4gICAgICAgIGlmKCFbJ2Rlc2NyaXB0aXZlJywnaW1hZ2UnLCAnZGVzY3JpcHRpdmVJbWFnZScsJ211bHRpcGxlSW1hZ2UnLCd2aWRlbyddLmluY2x1ZGVzKHR5cGUpKSB7XHJcbiAgICAgICAgICBmb3IobGV0IGk9MDtpPGxpbmtlZFF1ZXN0aW9uPy5sZW5ndGg7aSsrKSB7XHJcbiAgICAgICAgICAgIGxldCBsaW5rZWRRbiA9ICgobGlua2VkUXVlc3Rpb24uYXQoaSkgYXMgRm9ybUdyb3VwKS5nZXQoJ2xpbmtlZFF1ZXN0aW9uJyk/LnZhbHVlKTtcclxuICAgICAgICAgICAgaWYobGlua2VkUW4pIHtcclxuICAgICAgICAgICAgICBsZXQgbm8gPSBsaW5rZWRRbiAtMTtcclxuICAgICAgICAgICAgICAoKHRoaXMuZ2V0U2VjdGlvbkZvcm1BcnJheSgpLmF0KHNlY3Rpb25JbmRleCkuZ2V0KCdxdWVzdGlvbnMnKSBhcyBGb3JtQXJyYXkpLmF0KG5vKSBhcyBGb3JtR3JvdXApLmdldCgnbGlua1R5cGUnKT8uc2V0VmFsdWUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgIGlmKGxpbmtlZFFuICYmIHBhcnNlSW50KGxpbmtlZFFuKSA+IHF1ZXN0aW9uSW5kZXgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3VidHJhY3RRdWVzdGlvbm5vKHNlY3Rpb25JbmRleCxsaW5rZWRRbi0xKVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAodGhpcy5nZXRTZWN0aW9uRm9ybUNvbnRyb2woc2VjdGlvbkluZGV4LCAncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5KS5yZW1vdmVBdChxdWVzdGlvbkluZGV4KTtcclxuICAgICAgICB0aGlzLnJlbW92ZWROZXN0ZWRRdWVzdGlvbihzZWN0aW9uSW5kZXgscW5vKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVF1ZXN0aW9uUW5vcyhzZWN0aW9uSW5kZXgpO1xyXG4gICAgICAgIHRoaXMuc3dhbFRvYXN0KGAke3F1ZXN0aW9ufSBoYXMgYmVlbiBkZWxldGVkIWApO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlZGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBzdWJ0cmFjdFF1ZXN0aW9ubm8oc2VjdGlvbkluZGV4Om51bWJlcixxdWVzdGlvbkluZGV4OmFueSkge1xyXG4gICAgbGV0IGxpbmtlZFF1ZXN0aW9uQW5zd2VycyA9ICgoKHRoaXMuZ2V0U2VjdGlvbkZvcm1BcnJheSgpLmF0KHNlY3Rpb25JbmRleCkuZ2V0KCdxdWVzdGlvbnMnKSBhcyBGb3JtQXJyYXkpLmF0KHF1ZXN0aW9uSW5kZXgpIGFzIEZvcm1Hcm91cCkuZ2V0KCdhbnN3ZXJzJykgYXMgRm9ybUFycmF5KTtcclxuICAgIGZvcihsZXQgaj0wO2o8bGlua2VkUXVlc3Rpb25BbnN3ZXJzPy5sZW5ndGg7aisrKSB7XHJcbiAgICAgIGxldCBsaW5rZWRRbiA9ICgobGlua2VkUXVlc3Rpb25BbnN3ZXJzLmF0KGopIGFzIEZvcm1Hcm91cCkuZ2V0KCdsaW5rZWRRdWVzdGlvbicpPy52YWx1ZSk7XHJcbiAgICAgIGlmKGxpbmtlZFFuICYmIHBhcnNlSW50KGxpbmtlZFFuKSA+IHF1ZXN0aW9uSW5kZXgpIHtcclxuICAgICAgICAoKGxpbmtlZFF1ZXN0aW9uQW5zd2Vycy5hdChqKSBhcyBGb3JtR3JvdXApLmdldCgnbGlua2VkUXVlc3Rpb24nKSk/LnNldFZhbHVlKGxpbmtlZFFuIC0gMSk7XHJcbiAgICAgICAgdGhpcy5zdWJ0cmFjdFF1ZXN0aW9ubm8oc2VjdGlvbkluZGV4LGxpbmtlZFFuLTEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByYWlzZWZsYWcoc2VjdGlvbkluZGV4OiBudW1iZXIsIHF1ZXN0aW9uSW5kZXg6IG51bWJlciwgYW5zSWR4OiBudW1iZXIsdmFsdWU6IGJvb2xlYW4sbGlua0luZGV4Om51bWJlciA9IC0xLGxpbmtBbnNJbmRleDpudW1iZXIgPSAtMSkge1xyXG4gICAgbGV0IHF1ZXN0aW9uID0gKCgoKHRoaXMuQ2hlY2tsaXN0Rm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5KT8uYXQoc2VjdGlvbkluZGV4KSBhcyBGb3JtR3JvdXApLmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5KS5hdChxdWVzdGlvbkluZGV4KSBhcyBGb3JtR3JvdXApO1xyXG4gICAgaWYodmFsdWUgPT0gdHJ1ZSkge1xyXG4gICAgICBsZXQgYW5zd2VycyA9IChxdWVzdGlvbi5nZXQoJ2Fuc3dlcnMnKSBhcyBGb3JtQXJyYXkpLnZhbHVlO1xyXG4gICAgICBpZihsaW5rSW5kZXggPT0gLTEpIHtcclxuICAgICAgICBpZihhbnN3ZXJzLmZpbHRlcigoeDphbnkpPT4geC5zb3BGbGFnID09IHRydWUpLmxlbmd0aCA9PSAoYW5zd2Vycy5sZW5ndGggLTEpKSB7XHJcbiAgICAgICAgICAoKHF1ZXN0aW9uLmdldCgnYW5zd2VycycpIGFzIEZvcm1BcnJheSkuYXQoYW5zSWR4KSBhcyBGb3JtR3JvdXApLmFkZENvbnRyb2woJ3Nob3dTT1BGbGFnRXJyb3InLHRoaXMuZmIuY29udHJvbCh0cnVlKSk7XHJcbiAgICAgICAgICB0aW1lcig1MDAwKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAoKHF1ZXN0aW9uLmdldCgnYW5zd2VycycpIGFzIEZvcm1BcnJheSkuYXQoYW5zSWR4KSBhcyBGb3JtR3JvdXApLnJlbW92ZUNvbnRyb2woJ3Nob3dTT1BGbGFnRXJyb3InKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBsZXQgYW5zd2VycyA9ICgocXVlc3Rpb24uZ2V0KCdhbnN3ZXJzJykgYXMgRm9ybUFycmF5KS5hdChhbnNJZHgpIGFzIEZvcm1Hcm91cCk7XHJcbiAgICAgICAgbGV0IGxpbmtRdWVzdGlvbiA9ICgoYW5zd2Vycy5nZXQoJ2xpbmtRdWVzdGlvbkFuc3dlcnMnKSBhcyBGb3JtQXJyYXkpLmF0KGxpbmtJbmRleCkgYXMgRm9ybUdyb3VwKTtcclxuICAgICAgICBsZXQgbGlua0Fuc3dlcnMgPSAobGlua1F1ZXN0aW9uLmdldCgnYW5zd2VycycpIGFzIEZvcm1BcnJheSkudmFsdWVcclxuICAgICAgICBpZihsaW5rQW5zd2Vycy5maWx0ZXIoKHg6YW55KT0+IHguc29wRmxhZyA9PSB0cnVlKS5sZW5ndGggPT0gKGxpbmtBbnN3ZXJzLmxlbmd0aCAtMSkpIHtcclxuICAgICAgICAgICgobGlua1F1ZXN0aW9uLmdldCgnYW5zd2VycycpIGFzIEZvcm1BcnJheSkuYXQobGlua0Fuc0luZGV4KSBhcyBGb3JtR3JvdXApLmFkZENvbnRyb2woJ3Nob3dTT1BGbGFnRXJyb3InLHRoaXMuZmIuY29udHJvbCh0cnVlKSk7XHJcbiAgICAgICAgICB0aW1lcig1MDAwKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICgobGlua1F1ZXN0aW9uLmdldCgnYW5zd2VycycpIGFzIEZvcm1BcnJheSkuYXQobGlua0Fuc0luZGV4KSBhcyBGb3JtR3JvdXApLnJlbW92ZUNvbnRyb2woJ3Nob3dTT1BGbGFnRXJyb3InKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgICBpZihsaW5rSW5kZXggPT0gLTEpXHJcbiAgICAgICAgKCgoKHF1ZXN0aW9uLmdldCgnYW5zd2VycycpIGFzIEZvcm1BcnJheSk/LmF0KGFuc0lkeCkgYXMgRm9ybUdyb3VwKT8uZ2V0KCdzb3BGbGFnJykgYXMgRm9ybUNvbnRyb2wpKT8uc2V0VmFsdWUodmFsdWUpOyBcclxuICAgIGVsc2UgICB7XHJcbiAgICAgICBsZXQgYW5zd2VycyA9ICgocXVlc3Rpb24uZ2V0KCdhbnN3ZXJzJykgYXMgRm9ybUFycmF5KS5hdChhbnNJZHgpIGFzIEZvcm1Hcm91cCk7XHJcbiAgICAgICAgbGV0IGxpbmtRdWVzdGlvbiA9ICgoYW5zd2Vycy5nZXQoJ2xpbmtRdWVzdGlvbkFuc3dlcnMnKSBhcyBGb3JtQXJyYXkpLmF0KGxpbmtJbmRleCkgYXMgRm9ybUdyb3VwKTtcclxuICAgICAgKCgoKGxpbmtRdWVzdGlvbi5nZXQoJ2Fuc3dlcnMnKSBhcyBGb3JtQXJyYXkpPy5hdChsaW5rQW5zSW5kZXgpIGFzIEZvcm1Hcm91cCk/LmdldCgnc29wRmxhZycpIGFzIEZvcm1Db250cm9sKSk/LnNldFZhbHVlKHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZE5lc3RlZFF1ZXN0aW9uKHNlY3Rpb25JbmRleDogbnVtYmVyLCBxdWVzdGlvbkluZGV4OiBudW1iZXIsIGFuc0lkeDogbnVtYmVyLHZhbHVlOiBib29sZWFuLGxpbmtlZFF1ZXN0aW9uSW5kZXg6bnVtYmVyPS0xLGxpbmtlZEFuc3dlcjpudW1iZXIgPSAtMSkge1xyXG4gICAgIGxldCBhbnN3ZXIgPSAoKCgoKHRoaXMuQ2hlY2tsaXN0Rm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5KVxyXG4gICAgICAuYXQoc2VjdGlvbkluZGV4KSBhcyBGb3JtR3JvdXApXHJcbiAgICAgIC5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheSlcclxuICAgICAgLmF0KHF1ZXN0aW9uSW5kZXgpIGFzIEZvcm1Hcm91cClcclxuICAgICAgLmdldCgnYW5zd2VycycpIGFzIEZvcm1BcnJheSlcclxuICAgICAgLmF0KGFuc0lkeCkgYXMgRm9ybUdyb3VwXHJcblxyXG4gICAgICBcclxuICAgICAgXHJcbiAgICBpZighYW5zd2VyPy5nZXQoJ2xpbmtRdWVzdGlvbkFuc3dlcnMnKT8udmFsdWUubGVuZ3RoKSB7XHJcbiAgICAgIGFuc3dlci5zZXRDb250cm9sKCdsaW5rUXVlc3Rpb25BbnN3ZXJzJyxcclxuICAgICAgICB0aGlzLmZiLmFycmF5KFtcclxuICAgICAgICAgIHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICBcInFub1wiOiB0aGlzLmZiLmNvbnRyb2woMSksXHJcbiAgICAgICAgICAgICdxbmFtZSc6IHRoaXMuZmIuY29udHJvbCgnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuICAgICAgICAgICAgJ2Fuc3dlclR5cGUnOiB0aGlzLmZiLmNvbnRyb2woJ2Rlc2NyaXB0aXZlJyxcclxuICAgICAgICAgICAgICB0aGlzLmFsbG93ZWRWYWx1ZXNWYWxpZGF0b3IoW1wiZGVzY3JpcHRpdmVcIiwgXCJ5ZXMvbm9cIiwgXCJtdWx0aXBsZWNob2ljZXNpbmdsZVwiLCBcIm11bHRpcGxlY2hvaWNlbXVsdGlwbGVcIixcImRlc2NyaXB0aXZlSW1hZ2VcIiwgXCJpbWFnZVwiLCBcInZpZGVvXCIsJ211bHRpcGxlSW1hZ2UnLCdkYXRlJ10pKSxcclxuICAgICAgICAgICAgJ3J1bkFJJzogdGhpcy5mYi5jb250cm9sKGZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgICAgICAncnVuQUlEZXNjcmlwdGlvbic6IHRoaXMuZmIuY29udHJvbCgnJyksXHJcbiAgICAgICAgICAgICdhbGxvd1VwbG9hZGZyb21HYWxsZXJ5JzogdGhpcy5mYi5jb250cm9sKGZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgICAgICAncXVlc3Rpb25SZWZlcmVuY2VJbWFnZSc6dGhpcy5mYi5jb250cm9sKCcnKSxcclxuICAgICAgICAgICAgJ2Rlc2NyaXB0aXZldHlwZSc6dGhpcy5mYi5jb250cm9sKCd0ZXh0JyksXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIF0pXHJcbiAgICAgIClcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBsZXQgbmVzdGVkUXVlc3Rpb24gPSBhbnN3ZXIuZ2V0KCdsaW5rUXVlc3Rpb25BbnN3ZXJzJykgYXMgRm9ybUFycmF5XHJcbiAgICAgIG5lc3RlZFF1ZXN0aW9uLnB1c2godGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgXCJxbm9cIjogdGhpcy5mYi5jb250cm9sKDEpLFxyXG4gICAgICAgICdxbmFtZSc6IHRoaXMuZmIuY29udHJvbCgnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuICAgICAgICAnYW5zd2VyVHlwZSc6IHRoaXMuZmIuY29udHJvbCgnZGVzY3JpcHRpdmUnLFxyXG4gICAgICAgICAgdGhpcy5hbGxvd2VkVmFsdWVzVmFsaWRhdG9yKFtcImRlc2NyaXB0aXZlXCIsIFwieWVzL25vXCIsIFwibXVsdGlwbGVjaG9pY2VzaW5nbGVcIiwgXCJtdWx0aXBsZWNob2ljZW11bHRpcGxlXCIsXCJkZXNjcmlwdGl2ZUltYWdlXCIsIFwiaW1hZ2VcIiwgXCJ2aWRlb1wiLCdtdWx0aXBsZUltYWdlJywnZGF0ZSddKSksXHJcbiAgICAgICAgJ3J1bkFJJzogdGhpcy5mYi5jb250cm9sKGZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgICdydW5BSURlc2NyaXB0aW9uJzogdGhpcy5mYi5jb250cm9sKCcnKSxcclxuICAgICAgICAnYWxsb3dVcGxvYWRmcm9tR2FsbGVyeSc6IHRoaXMuZmIuY29udHJvbChmYWxzZSwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdKSxcclxuICAgICAgICAncXVlc3Rpb25SZWZlcmVuY2VJbWFnZSc6dGhpcy5mYi5jb250cm9sKCcnKSxcclxuICAgICAgICAnZGVzY3JpcHRpdmV0eXBlJzp0aGlzLmZiLmNvbnRyb2woJ3RleHQnKSxcclxuICAgICAgfSkpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5DaGVja2xpc3RGb3JtLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICB9XHJcbiBcclxuICBhY2NvcmRpYW4oaW5kZXg6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuc2hvdyA9PSBpbmRleCkge1xyXG4gICAgICB0aGlzLnNob3cgPSAtMTtcclxuICAgICAgdGhpcy5zZWN0aW9uSW5kZXggPSAtMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2hvdyA9IGluZGV4O1xyXG4gICAgICB0aGlzLnNlY3Rpb25JbmRleCA9IGluZGV4O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGVsZXRlU2VjdGlvbihzZWN0aW9uSW5kZXg6IGFueSkge1xyXG4gICAgbGV0IHNlY3Rpb24gPSAoKHRoaXMuQ2hlY2tsaXN0Rm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5KS5hdChzZWN0aW9uSW5kZXgpIGFzIEZvcm1Hcm91cCk7XHJcbiAgICBsZXQgc2VjdGlvbkxlbmd0aDphbnkgPSBcIiBcIiArIChzZWN0aW9uLmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5KS5sZW5ndGg7XHJcbiAgICBsZXQgc2VjdGlvbk5hbWU6c3RyaW5nID0gc2VjdGlvbi5nZXQoJ25hbWUnKT8udmFsdWU7XHJcbiAgICBzZWN0aW9uTmFtZSA9IHNlY3Rpb25OYW1lLmxlbmd0aCA+IDIwID8gKHNlY3Rpb25OYW1lLnNsaWNlKDAsIDIwKSArIFwiLi4uXCIpIDogc2VjdGlvbk5hbWU7XHJcbiAgICBsZXQgcXVlc3Rpb25fdGV4dCA9ICcnXHJcbiAgICBpZiAoc2VjdGlvbkxlbmd0aCA9PSAxKVxyXG4gICAgICBxdWVzdGlvbl90ZXh0ID0gJ1F1ZXN0aW9uJ1xyXG4gICAgZWxzZVxyXG4gICAgIHF1ZXN0aW9uX3RleHQgPSAnUXVlc3Rpb25zJ1xyXG4gICAgY29uc3QgcG9wdXBjb250ZW50ID0ge1xyXG4gICAgICBkaXNwbGF5cHJvcDogZmFsc2UsXHJcbiAgICAgIGltYWdlc3JjOiBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI1NlwiIGhlaWdodD1cIjU2XCIgdmlld0JveD1cIjAgMCA1NiA1NlwiIGZpbGw9XCJub25lXCI+PHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBmaWxsPVwiI0ZFRTRFMlwiLz48cGF0aCBkPVwiTTI4IDI0VjI4TTI4IDMySDI4LjAxTTM4IDI4QzM4IDMzLjUyMjggMzMuNTIyOCAzOCAyOCAzOEMyMi40NzcyIDM4IDE4IDMzLjUyMjggMTggMjhDMTggMjIuNDc3MiAyMi40NzcyIDE4IDI4IDE4QzMzLjUyMjggMTggMzggMjIuNDc3MiAzOCAyOFpcIiBzdHJva2U9XCIjRDkyRDIwXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIHN0cm9rZT1cIiNGRUYzRjJcIiBzdHJva2Utd2lkdGg9XCI4XCIvPjwvc3ZnPmAsXHJcbiAgICAgIHRpdGxlOiBgRGVsZXRlICcke3NlY3Rpb25OYW1lfSBTZWN0aW9uJz9gLFxyXG4gICAgICBjb250ZW50OiBgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZScgPGI+JyR7c2VjdGlvbk5hbWV9JzwvYj4/IHdpdGggPGI+JHtzZWN0aW9uTGVuZ3RofSAke3F1ZXN0aW9uX3RleHR9PC9iPiBUaGlzIGFjdGlvbiBjYW5ub3QgYmUgdW5kb25lLmAsXHJcbiAgICAgIGJ1dHRvbnR5cGU6ICdkZWxldGUnXHJcbiAgICB9XHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFRyYXhwb3B1cENvbXBvbmVudCx7Y2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCd9KTtcclxuICAgIGRpYWxvZ1JlZi5jb21wb25lbnRJbnN0YW5jZS5kYXRhID0gcG9wdXBjb250ZW50XHJcbiAgICBkaWFsb2dSZWYucmVzdWx0LnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICBpZiAocmVzID09ICdkZWxldGUnKSB7XHJcbiAgICAgICAgKHRoaXMuQ2hlY2tsaXN0Rm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5KS5yZW1vdmVBdChzZWN0aW9uSW5kZXgpXHJcbiAgICAgICAgdGhpcy5jaGFuZ2VkZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgQWRkTW9yZUFucyhzZWN0aW9uaW5kZXg6IGFueSwgcXVlc3Rpb25JbmRleDogYW55LHR5cGU6c3RyaW5nKSB7XHJcbiAgICBsZXQgYW5zb3B0aW9uID1cclxuICAgICAgKCgoKHRoaXMuQ2hlY2tsaXN0Rm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5KVxyXG4gICAgICAgIC5hdChzZWN0aW9uaW5kZXgpIGFzIEZvcm1Hcm91cClcclxuICAgICAgICAuZ2V0KCdxdWVzdGlvbnMnKSBhcyBGb3JtQXJyYXkpXHJcbiAgICAgICAgLmF0KHF1ZXN0aW9uSW5kZXgpXHJcbiAgICAgICAgLmdldCgnYW5zd2VycycpIGFzIEZvcm1BcnJheSk7XHJcbiAgICBsZXQgYW5zb3B0aW9uTGVuZ3RoID0gYW5zb3B0aW9uLmxlbmd0aDtcclxuICAgIGlmIChhbnNvcHRpb25MZW5ndGggPD0gMjkpIHtcclxuICAgICAgYW5zb3B0aW9uLnB1c2goXHJcbiAgICAgICAgdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgICAnYW5zd2VyJzogdGhpcy5mYi5jb250cm9sKGBgLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgICAgJ2Fuc3dlcm9wdGlvbk51bWJlcic6IHRoaXMuZmIuY29udHJvbChhbnNvcHRpb25MZW5ndGggKyAxKSxcclxuICAgICAgICAgICdzb3BGbGFnJzogdGhpcy5mYi5jb250cm9sKGZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAgICAgJ3ZhbGlkYXRpb24nOiB0aGlzLmZiLmNvbnRyb2woZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSksXHJcbiAgICAgICAgICAndmFsaWRhdGlvblR5cGUnOiB0aGlzLmZiLmNvbnRyb2woJ0NhcHR1cmUgSW1hZ2UnLCB0aGlzLmFsbG93ZWRWYWx1ZXNWYWxpZGF0b3IoW1wiQ2FwdHVyZSBJbWFnZVwiLCBcIkRlc2NyaXB0aXZlIEFuc3dlclwiLFwiQ2FwdHVyZSBWaWRlb1wiXSkpLFxyXG4gICAgICAgICAgJ3JlZmVyZW5jZUltYWdlJzogdGhpcy5mYi5jb250cm9sKCcnKSxcclxuICAgICAgICAgICdhbGxvd1VwbG9hZGZyb21HYWxsZXJ5JzogdGhpcy5mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgICAgIC4uLih0eXBlID09ICdtdWx0aXBsZWNob2ljZXNpbmdsZScgPyB7XCJsaW5rZWRRdWVzdGlvblwiOnRoaXMuZmIuY29udHJvbCgwLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLCdzaG93TGlua2VkJzp0aGlzLmZiLmNvbnRyb2woZmFsc2UsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXSl9IDoge30pLFxyXG4gICAgICAgICAgJ3J1bkFJJzogdGhpcy5mYi5jb250cm9sKGZhbHNlKSxcclxuICAgICAgICAgICdkZXNjcmlwdGl2ZXR5cGUnOnRoaXMuZmIuY29udHJvbCgnJyksXHJcbiAgICAgICAgICAuLi4odHlwZSA9PSAnbXVsdGlwbGVJbWFnZScgPyB7J2Rlc2NyaXB0aXZldHlwZSc6dGhpcy5mYi5jb250cm9sKCd0ZXh0Jyl9Ont9KVxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkZWxldGVBbnN3ZXIoc2VjdGlvbkluZGV4OiBudW1iZXIsIHF1ZXN0aW9uSW5kZXg6IG51bWJlciwgYWRkbW9yZXFuSW5kZXg6IG51bWJlcixhbnNJbmRleDpudW1iZXIgPSAtMSkge1xyXG4gICAgaWYoYW5zSW5kZXggIT0gLTEpIHtcclxuICAgICAgdGhpcy5nZXRGb3JtQXJyYXlRdWVzdGlvbnNBbnN3ZXIoc2VjdGlvbkluZGV4LCBxdWVzdGlvbkluZGV4LCAnYW5zd2VycycsYW5zSW5kZXgpLnJlbW92ZUF0KGFkZG1vcmVxbkluZGV4KTsgICAgXHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5nZXRGb3JtQXJyYXlRdWVzdGlvbnNBbnN3ZXIoc2VjdGlvbkluZGV4LCBxdWVzdGlvbkluZGV4LCAnYW5zd2VycycsYW5zSW5kZXgpLnJlbW92ZUF0KGFkZG1vcmVxbkluZGV4KTsgICAgXHJcbiAgICB9XHJcbiAgICB0aGlzLkNoZWNrbGlzdEZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxuXHJcbiAgY2xvbmVRdWVzdGlvbihzZWN0aW9uaW5kZXg6IGFueSwgcXVlc3Rpb25pbmRleDogYW55KSB7XHJcbiAgICBsZXQgY2xvbmVRdWVzdGlvbiA9ICgodGhpcy5nZXRTZWN0aW9uRm9ybUNvbnRyb2woc2VjdGlvbmluZGV4LCAncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5KS5hdChxdWVzdGlvbmluZGV4KSBhcyBGb3JtR3JvdXApLnZhbHVlO1xyXG4gICAgbGV0IHF1ZXN0aW9uOiBhbnk7XHJcbiAgICBsZXQgYW5zd2VyOiBhbnk7XHJcbiAgICBpZiAoY2xvbmVRdWVzdGlvbi5hbnN3ZXJzKSB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNsb25lUXVlc3Rpb24uYW5zd2VycykgJiYgY2xvbmVRdWVzdGlvbi5hbnN3ZXJzLmxlbmd0aCkge1xyXG4gICAgICAgIGFuc3dlciA9IFtdO1xyXG4gICAgICAgIGNsb25lUXVlc3Rpb24uYW5zd2Vycy5mb3JFYWNoKChrOiBhbnkpID0+IHtcclxuICAgICAgICAgIGFuc3dlci5wdXNoKFxyXG4gICAgICAgICAgICB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgICAgICAuLi4oIVsnaW1hZ2UnLCAnZGVzY3JpcHRpdmVJbWFnZScsJ211bHRpcGxlSW1hZ2UnXS5pbmNsdWRlcyhjbG9uZVF1ZXN0aW9uPy5hbnN3ZXJUeXBlKSAmJiBjbG9uZVF1ZXN0aW9uPy5hbnN3ZXJUeXBlICE9ICd2aWRlbycgPyB7ICdhbnN3ZXInOiB0aGlzLmZiLmNvbnRyb2woaz8uYW5zd2VyLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pIH0gOiB7fSksXHJcbiAgICAgICAgICAgICAgLi4uKCFbJ2ltYWdlJywgJ2Rlc2NyaXB0aXZlSW1hZ2UnLCdtdWx0aXBsZUltYWdlJ10uaW5jbHVkZXMoY2xvbmVRdWVzdGlvbj8uYW5zd2VyVHlwZSkgJiYgY2xvbmVRdWVzdGlvbj8uYW5zd2VyVHlwZSAhPSAndmlkZW8nID8geyAnYW5zd2Vyb3B0aW9uTnVtYmVyJzogdGhpcy5mYi5jb250cm9sKGs/LmFuc3dlcm9wdGlvbk51bWJlciArIDEpIH0gOiB7fSksXHJcbiAgICAgICAgICAgICAgLi4uKCFbJ2ltYWdlJywgJ2Rlc2NyaXB0aXZlSW1hZ2UnLCdtdWx0aXBsZUltYWdlJ10uaW5jbHVkZXMoY2xvbmVRdWVzdGlvbj8uYW5zd2VyVHlwZSkgJiYgY2xvbmVRdWVzdGlvbj8uYW5zd2VyVHlwZSAhPSAndmlkZW8nID8geyAnc29wRmxhZyc6IHRoaXMuZmIuY29udHJvbChrPy5zb3BGbGFnID8gaz8uc29wRmxhZyA6IGZhbHNlLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pIH0gOiB7fSksXHJcbiAgICAgICAgICAgICAgLi4uKCFbJ2ltYWdlJywgJ2Rlc2NyaXB0aXZlSW1hZ2UnLCdtdWx0aXBsZUltYWdlJ10uaW5jbHVkZXMoY2xvbmVRdWVzdGlvbj8uYW5zd2VyVHlwZSkgJiYgY2xvbmVRdWVzdGlvbj8uYW5zd2VyVHlwZSAhPSAndmlkZW8nID8geyAndmFsaWRhdGlvbic6IHRoaXMuZmIuY29udHJvbChrPy52YWxpZGF0aW9uLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pIH0gOiB7fSksXHJcbiAgICAgICAgICAgICAgLi4uKCFbJ2ltYWdlJywgJ2Rlc2NyaXB0aXZlSW1hZ2UnLCdtdWx0aXBsZUltYWdlJ10uaW5jbHVkZXMoY2xvbmVRdWVzdGlvbj8uYW5zd2VyVHlwZSkgJiYgY2xvbmVRdWVzdGlvbj8uYW5zd2VyVHlwZSAhPSAndmlkZW8nID8geyAndmFsaWRhdGlvblR5cGUnOiB0aGlzLmZiLmNvbnRyb2woaz8udmFsaWRhdGlvblR5cGUsIHRoaXMuYWxsb3dlZFZhbHVlc1ZhbGlkYXRvcihbXCJDYXB0dXJlIEltYWdlXCIsIFwiRGVzY3JpcHRpdmUgQW5zd2VyXCIsIFwiQ2FwdHVyZSBWaWRlb1wiXSkpIH0gOiB7fSksXHJcbiAgICAgICAgICAgICAgLi4uKCFbJ2Rlc2NyaXB0aXZlJywnaW1hZ2UnLCAnZGVzY3JpcHRpdmVJbWFnZScsJ211bHRpcGxlSW1hZ2UnLCdkYXRlJ10uaW5jbHVkZXMoY2xvbmVRdWVzdGlvbj8uYW5zd2VyVHlwZSkgPyB7ICdyZWZlcmVuY2VJbWFnZSc6IHRoaXMuZmIuY29udHJvbChrPy5yZWZlcmVuY2VJbWFnZSkgfSA6IHt9KSxcclxuICAgICAgICAgICAgICAuLi4oKCFbJ2Rlc2NyaXB0aXZlJywnaW1hZ2UnLCAnZGVzY3JpcHRpdmVJbWFnZScsJ211bHRpcGxlSW1hZ2UnLCdkYXRlJ10uaW5jbHVkZXMoY2xvbmVRdWVzdGlvbj8uYW5zd2VyVHlwZSkpID8geyAnYWxsb3dVcGxvYWRmcm9tR2FsbGVyeSc6IHRoaXMuZmIuY29udHJvbChrPy5hbGxvd1VwbG9hZGZyb21HYWxsZXJ5ID09IHRydWUgPyB0cnVlIDogZmFsc2UpIH0gOiB7fSksXHJcbiAgICAgICAgICAgICAgLi4uKCFbJ2Rlc2NyaXB0aXZlJywnaW1hZ2UnLCAnZGVzY3JpcHRpdmVJbWFnZScsJ211bHRpcGxlSW1hZ2UnLCdkYXRlJ10uaW5jbHVkZXMoY2xvbmVRdWVzdGlvbj8uYW5zd2VyVHlwZSkgPyB7ICdydW5BSSc6IHRoaXMuZmIuY29udHJvbChrPy5ydW5BSSA/IGs/LnJ1bkFJIDogZmFsc2UpIH0gOiB7fSksXHJcbiAgICAgICAgICAgICAgLi4uKFsnbXVsdGlwbGVjaG9pY2VzaW5nbGUnLCd5ZXMvbm8nXS5pbmNsdWRlcyhjbG9uZVF1ZXN0aW9uPy5hbnN3ZXJUeXBlKSA/IHsgJ3Nob3dMaW5rZWQnOiBmYWxzZSB9IDoge30pLFxyXG4gICAgICAgICAgICAgIC4uLihbJ211bHRpcGxlY2hvaWNlc2luZ2xlJywneWVzL25vJ10uaW5jbHVkZXMoY2xvbmVRdWVzdGlvbj8uYW5zd2VyVHlwZSkgPyB7ICdsaW5rZWRRdWVzdGlvbic6IDAgfSA6IHt9KSxcclxuICAgICAgICAgICAgICAuLi4oWydtdWx0aXBsZWNob2ljZXNpbmdsZScsJ3llcy9ubyddLmluY2x1ZGVzKGNsb25lUXVlc3Rpb24/LmFuc3dlclR5cGUpID8geyAnbGlua2VkUXVlc3Rpb24nOiAwIH0gOiB7fSksXHJcbiAgICAgICAgICAgICAgZGVzY3JpcHRpdmV0eXBlOnRoaXMuZmIuY29udHJvbChrPy5kZXNjcmlwdGl2ZXR5cGUpXHJcblxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZih0eXBlb2YgY2xvbmVRdWVzdGlvbi5hbnN3ZXJzID09PSAnb2JqZWN0JyAmJiBjbG9uZVF1ZXN0aW9uLmFuc3dlcnMgIT09IG51bGwpIHtcclxuICAgICAgICBhbnN3ZXIgPSB0aGlzLmZiLmdyb3VwKHsgICAgICAgICAgXHJcbiAgICAgICAgICAuLi4oWydpbWFnZScsICdkZXNjcmlwdGl2ZUltYWdlJywnbXVsdGlwbGVJbWFnZSddLmluY2x1ZGVzKGNsb25lUXVlc3Rpb24/LmFuc3dlclR5cGUpID8geyAncmVmZXJlbmNlSW1hZ2UnOiB0aGlzLmZiLmNvbnRyb2woY2xvbmVRdWVzdGlvbj8uYW5zd2Vycz8ucmVmZXJlbmNlSW1hZ2UpIH0gOiB7fSksXHJcbiAgICAgICAgICAuLi4oKFsnaW1hZ2UnLCAnZGVzY3JpcHRpdmVJbWFnZScsJ211bHRpcGxlSW1hZ2UnXS5pbmNsdWRlcyhjbG9uZVF1ZXN0aW9uPy5hbnN3ZXJUeXBlKSB8fCBjbG9uZVF1ZXN0aW9uPy5hbnN3ZXJUeXBlID09ICd2aWRlbycpID8geyAnYWxsb3dVcGxvYWRmcm9tR2FsbGVyeSc6IHRoaXMuZmIuY29udHJvbChjbG9uZVF1ZXN0aW9uPy5hbnN3ZXJzPy5hbGxvd1VwbG9hZGZyb21HYWxsZXJ5ID09IHRydWUgPyB0cnVlIDogZmFsc2UpIH0gOiB7fSksXHJcbiAgICAgICAgICAuLi4oWydpbWFnZScsICdkZXNjcmlwdGl2ZUltYWdlJywnbXVsdGlwbGVJbWFnZSddLmluY2x1ZGVzKGNsb25lUXVlc3Rpb24/LmFuc3dlclR5cGUpID8geyAncnVuQUknOiB0aGlzLmZiLmNvbnRyb2woY2xvbmVRdWVzdGlvbj8uYW5zd2Vycz8ucnVuQUkgPyBjbG9uZVF1ZXN0aW9uPy5hbnN3ZXJzPy5ydW5BSSA6IGZhbHNlKSB9IDoge30pLFxyXG4gICAgICAgICAgLi4uKFsnbXVsdGlwbGVJbWFnZSddLmluY2x1ZGVzKGNsb25lUXVlc3Rpb24/LmFuc3dlclR5cGUpID8geyBkZXNjcmlwdGl2ZXR5cGU6dGhpcy5mYi5jb250cm9sKGNsb25lUXVlc3Rpb24/LmFuc3dlcnM/LmRlc2NyaXB0aXZldHlwZSkgfSA6IHt9KSxcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcXVlc3Rpb24gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgXCJxbm9cIjogdGhpcy5mYi5jb250cm9sKGNsb25lUXVlc3Rpb24/LnFubysxKSxcclxuICAgICAgJ3FuYW1lJzogdGhpcy5mYi5jb250cm9sKGNsb25lUXVlc3Rpb24/LnFuYW1lLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAnYW5zd2VyVHlwZSc6IHRoaXMuZmIuY29udHJvbChjbG9uZVF1ZXN0aW9uPy5hbnN3ZXJUeXBlLCB0aGlzLmFsbG93ZWRWYWx1ZXNWYWxpZGF0b3IoW1wiZGVzY3JpcHRpdmVcIiwgXCJ5ZXMvbm9cIiwgXCJtdWx0aXBsZWNob2ljZXNpbmdsZVwiLCBcIm11bHRpcGxlY2hvaWNlbXVsdGlwbGVcIixcImRlc2NyaXB0aXZlSW1hZ2VcIiwgXCJpbWFnZVwiLCBcInZpZGVvXCIsJ211bHRpcGxlSW1hZ2UnLCdkYXRlJ10pKSxcclxuICAgICAgLi4uKCFbJ2Rlc2NyaXB0aXZlJywnZGF0ZSddLmluY2x1ZGVzKGNsb25lUXVlc3Rpb24/LmFuc3dlclR5cGUpID8geyAnYW5zd2Vycyc6IChbJ2ltYWdlJywnZGVzY3JpcHRpdmVJbWFnZScsICd2aWRlbycsJ211bHRpcGxlSW1hZ2UnXS5pbmNsdWRlcyhjbG9uZVF1ZXN0aW9uPy5hbnN3ZXJUeXBlKSkgPyBhbnN3ZXIgOiB0aGlzLmZiLmFycmF5KGFuc3dlcikgfSA6IHt9KSxcclxuICAgICAgJ3J1bkFJJzogdGhpcy5mYi5jb250cm9sKGNsb25lUXVlc3Rpb24/LnJ1bkFJLCBbVmFsaWRhdG9ycy5yZXF1aXJlZF0pLFxyXG4gICAgICAncnVuQUlEZXNjcmlwdGlvbic6IHRoaXMuZmIuY29udHJvbChjbG9uZVF1ZXN0aW9uPy5ydW5BSURlc2NyaXB0aW9uKSxcclxuICAgICAgJ2FsbG93VXBsb2FkZnJvbUdhbGxlcnknOiB0aGlzLmZiLmNvbnRyb2woY2xvbmVRdWVzdGlvbj8uYWxsb3dVcGxvYWRmcm9tR2FsbGVyeSksXHJcbiAgICAgICdsaW5rVHlwZSc6IHRoaXMuZmIuY29udHJvbChmYWxzZSksXHJcbiAgICAgICdkZXNjcmlwdGl2ZXR5cGUnOnRoaXMuZmIuY29udHJvbChjbG9uZVF1ZXN0aW9uPy5kZXNjcmlwdGl2ZXR5cGUpLFxyXG4gICAgICAncXVlc3Rpb25SZWZlcmVuY2VJbWFnZSc6dGhpcy5mYi5jb250cm9sKGNsb25lUXVlc3Rpb24/LnF1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UpXHJcblxyXG4gICAgfSk7XHJcbiAgICAvLyB0aGlzLnVwZGF0ZUNsb25lZGxpbmtlZFF1ZXN0aW9uTm8oc2VjdGlvbmluZGV4LCBjbG9uZVF1ZXN0aW9uPy5xbm8pO1xyXG4gICAgKHRoaXMuZ2V0U2VjdGlvbkZvcm1Db250cm9sKHNlY3Rpb25pbmRleCwgJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheSkuaW5zZXJ0KGNsb25lUXVlc3Rpb24/LnFubyxxdWVzdGlvbik7XHJcbiAgICB0aGlzLkNoZWNrbGlzdEZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgdGhpcy51cGRhdGVRdWVzdGlvblFub3Moc2VjdGlvbmluZGV4KTtcclxuICAgIHRoaXMuc3dhbFRvYXN0KGBRdWVzdGlvbiAke2Nsb25lUXVlc3Rpb24/LnFub30gaGFzIGJlZW4gZHVwbGljYXRlZCFgKTtcclxuICAgIHRoaXMuY2hhbmdlZGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQ2xvbmVkbGlua2VkUXVlc3Rpb25ObyhzZWNJZHg6bnVtYmVyLHFpZHg6bnVtYmVyKSB7XHJcbiAgICBsZXQgcXVlc3Rpb25zID0gKHRoaXMuZ2V0U2VjdGlvbkZvcm1BcnJheSgpLmF0KHNlY0lkeCkuZ2V0KCdxdWVzdGlvbnMnKSBhcyBGb3JtQXJyYXkpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBxdWVzdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGFuc3dlcnMgPSAocXVlc3Rpb25zLmF0KGkpIGFzIEZvcm1Hcm91cCk/LmdldCgnYW5zd2VycycpIGFzIEZvcm1BcnJheTtcclxuICAgICAgaWYoYW5zd2Vycykge1xyXG4gICAgICAgIGZvcihsZXQgaj0wO2o8YW5zd2Vycy5sZW5ndGg7aisrKSB7XHJcbiAgICAgICAgICBsZXQgbGlua2VkID0gKGFuc3dlcnMuYXQoaikgYXMgRm9ybUdyb3VwKT8uZ2V0KCdzaG93TGlua2VkJyk/LnZhbHVlO1xyXG4gICAgICAgICAgaWYobGlua2VkKSB7XHJcbiAgICAgICAgICAgIGxldCBxdWVzdGlvbk5vID0gKGFuc3dlcnMuYXQoaikgYXMgRm9ybUdyb3VwKT8uZ2V0KCdsaW5rZWRRdWVzdGlvbicpPy52YWx1ZTtcclxuICAgICAgICAgICAgaWYocXVlc3Rpb25ObyA+IHFpZHgpIHtcclxuICAgICAgICAgICAgICAoYW5zd2Vycy5hdChqKSBhcyBGb3JtR3JvdXApPy5nZXQoJ2xpbmtlZFF1ZXN0aW9uJyk/LnNldFZhbHVlKHF1ZXN0aW9uTm8gKyAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2F2ZUNoZWNrbGlzdFF1ZXN0aW9ucyh0eXBlOiBzdHJpbmcpIHtcclxuICAgICAgbGV0IGNoZWNrbGlzdCA9IHRoaXMuQ2hlY2tsaXN0Rm9ybS52YWx1ZTtcclxuICAgICAgaWYoIXRoaXMuQ2hlY2tsaXN0Rm9ybS5nZXQoJ2NoZWNrbGlzdE5hbWUnKT8udmFsaWQpIHtcclxuICAgICAgICBsZXQgZXJyOiBzdHJpbmcgPSAnUGxlYXNlIGVudGVyIGNoZWNrbGlzdCBuYW1lISc7XHJcbiAgICAgICAgdGhpcy5zd2FsVG9hc3QoZXJyLCdlcnJvcicpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfSAgICAgIFxyXG4gICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLkNoZWNrbGlzdEZvcm0pO1xyXG4gICAgICAvLyByZXR1cm47XHJcbiAgICAgIFxyXG4gICAgICBpZiAoIXRoaXMuQ2hlY2tsaXN0Rm9ybS52YWxpZCkge1xyXG4gICAgICAgIHRoaXMubWFya0Zvcm1Db250cm9sc0FzVG91Y2hlZCh0aGlzLkNoZWNrbGlzdEZvcm0sMCk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxUb0Vycm9ycyh0aGlzLkNoZWNrbGlzdEZvcm0uZ2V0KCdzZWN0aW9ucycpIGFzIEZvcm1BcnJheSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBzZWN0aW9ucyA9IGNoZWNrbGlzdC5zZWN0aW9ucztcclxuICAgICAgaWYodHlwZSA9PSAnc2F2ZUFzRHJhZnQnKSB7XHJcbiAgICAgICAgY2hlY2tsaXN0LnN1Ym1pdFR5cGUgPSAnc2F2ZSc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2hlY2tsaXN0LnN1Ym1pdFR5cGUgPSAnY29uZmlndXJlJztcclxuICAgICAgfVxyXG4gICAgICBpZighc2VjdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IGVycjogc3RyaW5nID0gJ1BsZWFzZSBhZGQgYXRsZWFzdCBvbmUgc2VjdGlvbiEnO1xyXG4gICAgICAgIHRoaXMuc3dhbFRvYXN0KGVyciwnZXJyb3InKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmKHR5cGUgPT0gJ2NvbmZpZ3VyZScgJiYgIXNlY3Rpb25zW2ldLnF1ZXN0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgIGxldCBlcnI6IHN0cmluZyA9ICdQbGVhc2UgYWRkIGF0bGVhc3Qgb25lIHF1ZXN0aW9uIGluIHNlY3Rpb24hJztcclxuICAgICAgICAgIHRoaXMuc3dhbFRvYXN0KGVyciwnZXJyb3InKTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzZWN0aW9uc1tpXS5xdWVzdGlvbnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGxldCBhbnNUeXBlID0gc2VjdGlvbnNbaV0ucXVlc3Rpb25zW2pdLmFuc3dlclR5cGU7XHJcbiAgICAgICAgICBpZihhbnNUeXBlICE9ICdkZXNjcmlwdGl2ZScpIHtcclxuICAgICAgICAgICAgZGVsZXRlIHNlY3Rpb25zW2ldLnF1ZXN0aW9uc1tqXS5kZXNjcmlwdGl2ZXR5cGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoW1wibXVsdGlwbGVjaG9pY2VtdWx0aXBsZVwiXS5pbmNsdWRlcyhhbnNUeXBlKSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IHNlY3Rpb25zW2ldLnF1ZXN0aW9uc1tqXS5hbnN3ZXJzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgc2VjdGlvbnNbaV0ucXVlc3Rpb25zW2pdLmFuc3dlcnNba11bJ3Nob3dMaW5rZWQnXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHNlY3Rpb25zW2ldLnF1ZXN0aW9uc1tqXS5hbnN3ZXJzW2tdWydsaW5rZWRRdWVzdGlvbiddID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZWN0aW9uc1tpXS5xdWVzdGlvbnNbal0uYWxsb3dVcGxvYWRmcm9tR2FsbGVyeSA9IGZhbHNlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBzZWN0aW9uc1tpXS5xdWVzdGlvbnNbal0uYW5zd2VycyA9PT0gJ29iamVjdCcgJiZcclxuICAgICAgICAgICAgICBzZWN0aW9uc1tpXS5xdWVzdGlvbnNbal0uYW5zd2VycyAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHNlY3Rpb25zW2ldLnF1ZXN0aW9uc1tqXS5hbnN3ZXJzKSB8fCBbJ2Rlc2NyaXB0aXZlJywnZGF0ZSddLmluY2x1ZGVzKGFuc1R5cGUpKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGl0ZW0gPSB7XHJcbiAgICAgICAgICAgICAgICBcImFuc3dlclwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgXCJhbnN3ZXJvcHRpb25OdW1iZXJcIjogMSxcclxuICAgICAgICAgICAgICAgIFwic29wRmxhZ1wiOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIFwidmFsaWRhdGlvblwiOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIFwidmFsaWRhdGlvblR5cGVcIjogXCJcIixcclxuICAgICAgICAgICAgICAgIFwidmFsaWRhdGlvbkFuc3dlclwiOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgXCJyZWZlcmVuY2VJbWFnZVwiOiBzZWN0aW9uc1tpXS5xdWVzdGlvbnNbal0uYW5zd2Vycz8ucmVmZXJlbmNlSW1hZ2UgPyBzZWN0aW9uc1tpXS5xdWVzdGlvbnNbal0uYW5zd2Vycz8ucmVmZXJlbmNlSW1hZ2UgOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgXCJzaG93TGlua2VkXCI6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBcImxpbmtlZFF1ZXN0aW9uXCI6MCxcclxuICAgICAgICAgICAgICAgIC4uLihhbnNUeXBlID09ICdtdWx0aXBsZUltYWdlJyA/IHsnZGVzY3JpcHRpdmV0eXBlJzpzZWN0aW9uc1tpXS5xdWVzdGlvbnNbal0uYW5zd2Vycz8uZGVzY3JpcHRpdmV0eXBlfTp7fSlcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIHNlY3Rpb25zW2ldLnF1ZXN0aW9uc1tqXS5hbGxvd1VwbG9hZGZyb21HYWxsZXJ5ID0gc2VjdGlvbnNbaV0ucXVlc3Rpb25zW2pdLmFuc3dlcnM/LmFsbG93VXBsb2FkZnJvbUdhbGxlcnkgPyBzZWN0aW9uc1tpXS5xdWVzdGlvbnNbal0uYW5zd2Vycz8uYWxsb3dVcGxvYWRmcm9tR2FsbGVyeSA6IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGlmKGFuc1R5cGUgPT0gJ211bHRpcGxlSW1hZ2UnKSB7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uc1tpXS5xdWVzdGlvbnNbal0uZGVzY3JpcHRpdmV0eXBlID0gc2VjdGlvbnNbaV0ucXVlc3Rpb25zW2pdLmFuc3dlcnM/LmRlc2NyaXB0aXZldHlwZSA/IHNlY3Rpb25zW2ldLnF1ZXN0aW9uc1tqXS5hbnN3ZXJzPy5kZXNjcmlwdGl2ZXR5cGUgOiAndGV4dCc7XHJcbiAgICAgICAgICAgICAgICBzZWN0aW9uc1tpXS5xdWVzdGlvbnNbal0ucXVlc3Rpb25SZWZlcmVuY2VJbWFnZSA9IHNlY3Rpb25zW2ldLnF1ZXN0aW9uc1tqXS5hbnN3ZXJzPy5yZWZlcmVuY2VJbWFnZSA/IHNlY3Rpb25zW2ldLnF1ZXN0aW9uc1tqXS5hbnN3ZXJzPy5yZWZlcmVuY2VJbWFnZSA6ICcnO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBzZWN0aW9uc1tpXS5xdWVzdGlvbnNbal0uYW5zd2VycyA9IFtpdGVtXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBjaGVja2xpc3Quc2VjdGlvbnMgPSBzZWN0aW9ucztcclxuICAgICAgY2hlY2tsaXN0LmNoZWNrbGlzdE5hbWUgPWNoZWNrbGlzdC5jaGVja2xpc3ROYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgY2hlY2tsaXN0LmNoZWNrbGlzdE5hbWUuc2xpY2UoMSk7XHJcbiAgICAgIHRoaXMuc29wU2VydmljZS5jcmVhdGVjaGVja2xpc3QoY2hlY2tsaXN0KS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYocmVzKSB7XHJcbiAgICAgICAgICBpZiAocmVzPy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgICBpZih0eXBlPT0nY29uZmlndXJlJykge1xyXG4gICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9tYW5hZ2UvdHJheC9jb25maWd1cmU/Y2hlY2tMaXN0SWQ9JHtyZXMuZGF0YS5jaGVja2xpc3RJZH1gKTsgICAgIFxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy9tYW5hZ2UvdHJheC9jaGVja2xpc3QnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zd2FsVG9hc3QoJ1VuYWJsZSB0byBjcmVhdGUgY2hlY2tsaXN0IScsJ2Vycm9yJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3dhbFRvYXN0KCdVbmFibGUgdG8gY3JlYXRlIGNoZWNrbGlzdCEnLCdlcnJvcicpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmKGVycm9yLmNvZGU9PSA0MDApIHtcclxuICAgICAgICAgIGxldCBlcnIgPSBlcnJvcj8uZXJyb3I/Lm1lc3NhZ2U7XHJcbiAgICAgICAgICB0aGlzLnN3YWxUb2FzdChlcnIsJ2Vycm9yJyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc3dhbFRvYXN0KCdVbmFibGUgdG8gY3JlYXRlIGNoZWNrbGlzdCFTZXJ2ZXIgRXJyb3IhJywnZXJyb3InKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIClcclxuICB9XHJcblxyXG4gIHNhdmVBc0RyYWZ0UG9wKHR5cGU6IHN0cmluZykge1xyXG4gICAgICB0aGlzLnBvcHVwQ291bnQgPSB0aGlzLnBvcHVwQ291bnQgKyAxO1xyXG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFRyYXhwb3B1cENvbXBvbmVudCx7Y2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCd9KTtcclxuICAgICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmRhdGEgPSB7XHJcbiAgICAgICAgaW1hZ2VzcmM6ICBgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCI1NlwiIGhlaWdodD1cIjU2XCIgdmlld0JveD1cIjAgMCA1NiA1NlwiIGZpbGw9XCJub25lXCI+PHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBmaWxsPVwiI0ZFRjBDN1wiLz48cGF0aCBkPVwiTTI3Ljk5OTggMjQuMDAxMlYyOC4wMDEyTTI3Ljk5OTggMzIuMDAxMkgyOC4wMDk4TTI2LjI4OTggMTguODYxMkwxNy44MTk4IDMzLjAwMTJDMTcuNjQ1MSAzMy4zMDM2IDE3LjU1MjcgMzMuNjQ2NSAxNy41NTE4IDMzLjk5NTdDMTcuNTUwOCAzNC4zNDQ5IDE3LjY0MTMgMzQuNjg4MyAxNy44MTQyIDM0Ljk5MTdDMTcuOTg3MSAzNS4yOTUxIDE4LjIzNjUgMzUuNTQ3OSAxOC41Mzc1IDM1LjcyNUMxOC44Mzg1IDM1LjkwMjEgMTkuMTgwNiAzNS45OTczIDE5LjUyOTggMzYuMDAxMkgzNi40Njk4QzM2LjgxOSAzNS45OTczIDM3LjE2MTEgMzUuOTAyMSAzNy40NjIxIDM1LjcyNUMzNy43NjMxIDM1LjU0NzkgMzguMDEyNCAzNS4yOTUxIDM4LjE4NTQgMzQuOTkxN0MzOC4zNTgzIDM0LjY4ODMgMzguNDQ4OCAzNC4zNDQ5IDM4LjQ0NzggMzMuOTk1N0MzOC40NDY4IDMzLjY0NjUgMzguMzU0NCAzMy4zMDM2IDM4LjE3OTggMzMuMDAxMkwyOS43MDk4IDE4Ljg2MTJDMjkuNTMxNSAxOC41NjczIDI5LjI4MDUgMTguMzI0MyAyOC45ODEgMTguMTU1N0MyOC42ODE0IDE3Ljk4NyAyOC4zNDM1IDE3Ljg5ODQgMjcuOTk5OCAxNy44OTg0QzI3LjY1NiAxNy44OTg0IDI3LjMxODEgMTcuOTg3IDI3LjAxODYgMTguMTU1N0MyNi43MTkxIDE4LjMyNDMgMjYuNDY4IDE4LjU2NzMgMjYuMjg5OCAxOC44NjEyWlwiIHN0cm9rZT1cIiNEQzY4MDNcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgc3Ryb2tlPVwiI0ZGRkFFQlwiIHN0cm9rZS13aWR0aD1cIjhcIi8+PC9zdmc+YCxcclxuICAgICAgICB0aXRsZTpgVW5zYXZlZCBjaGFuZ2VzYCxcclxuICAgICAgICBjb250ZW50OmBEbyB5b3Ugd2FudCB0byBzYXZlIGFzIGRyYWZ0P2AsXHJcbiAgICAgICAgYnV0dG9udHlwZTonZHJhZnQnXHJcbiAgICAgIH1cclxuICAgICAgZGlhbG9nUmVmLnJlc3VsdC50aGVuKChyZXMpPT57XHJcbiAgICAgICAgaWYoIXJlcykge1xyXG4gICAgICAgICAgdGhpcy5wb3B1cENvdW50ID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYocmVzKSB7XHJcbiAgICAgICAgICBpZih0eXBlID09ICdjcmVhdGUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZUNoZWNrbGlzdFF1ZXN0aW9ucygnc2F2ZUFzRHJhZnQnKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQ2hlY2tsaXN0UXVlc3Rpb25zKCdzYXZlQXNEcmFmdCcpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDaGVja2xpc3RRdWVzdGlvbnModHlwZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgc2VjdGlvbnNhcnJheTogYW55ID0gW107XHJcbiAgICBsZXQgY2hlY2tsaXN0OiBhbnk7XHJcbiAgICBcclxuICAgIGlmKCF0aGlzLkNoZWNrbGlzdEZvcm0uZ2V0KCdjaGVja2xpc3ROYW1lJyk/LnZhbGlkKSB7XHJcbiAgICAgIGxldCBlcnI6IHN0cmluZyA9ICdQbGVhc2UgZW50ZXIgY2hlY2tsaXN0IG5hbWUhJztcclxuICAgICAgdGhpcy5zd2FsVG9hc3QoZXJyLCdlcnJvcicpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9ICAgICAgXHJcbiAgICBcclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuQ2hlY2tsaXN0Rm9ybSk7XHJcbiAgICAvLyByZXR1cm47XHJcbiAgICBjaGVja2xpc3QgPSB0aGlzLkNoZWNrbGlzdEZvcm0udmFsdWU7XHJcbiAgICBpZiAoIXRoaXMuQ2hlY2tsaXN0Rm9ybS52YWxpZCkge1xyXG4gICAgICB0aGlzLm1hcmtGb3JtQ29udHJvbHNBc1RvdWNoZWQodGhpcy5DaGVja2xpc3RGb3JtLDApO1xyXG4gICAgICB0aGlzLnNjcm9sbFRvRXJyb3JzKHRoaXMuQ2hlY2tsaXN0Rm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgc2VjdGlvbnNhcnJheSA9IGNoZWNrbGlzdC5zZWN0aW9ucztcclxuICAgIGlmKCF0aGlzLkNoZWNrbGlzdEZvcm0uZ2V0KCdjaGVja2xpc3ROYW1lJyk/LnZhbGlkKSB7XHJcbiAgICAgIGxldCBlcnI6IHN0cmluZyA9ICdQbGVhc2UgZW50ZXIgY2hlY2tsaXN0IG5hbWUhJztcclxuICAgICAgdGhpcy5zd2FsVG9hc3QoZXJyLCdlcnJvcicpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZih0eXBlID09ICdzYXZlQXNEcmFmdCcpIHtcclxuICAgICAgY2hlY2tsaXN0LnN1Ym1pdFR5cGUgPSAnc2F2ZSc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjaGVja2xpc3Quc3VibWl0VHlwZSA9ICdjb25maWd1cmUnO1xyXG4gICAgfVxyXG4gICAgaWYoIXNlY3Rpb25zYXJyYXkubGVuZ3RoKSB7XHJcbiAgICAgIGxldCBlcnI6IHN0cmluZyA9ICdQbGVhc2UgYWRkIGF0bGVhc3Qgb25lIHNlY3Rpb24hJztcclxuICAgICAgdGhpcy5zd2FsVG9hc3QoZXJyLCdlcnJvcicpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlY3Rpb25zYXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYodHlwZSA9PSAnY29uZmlndXJlJyAmJiAhc2VjdGlvbnNhcnJheVtpXS5xdWVzdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgbGV0IGVycjogc3RyaW5nID0gJ1BsZWFzZSBhZGQgYXRsZWFzdCBvbmUgcXVlc3Rpb24gaW4gc2VjdGlvbiEnO1xyXG4gICAgICAgIHRoaXMuc3dhbFRvYXN0KGVyciwnZXJyb3InKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzZWN0aW9uc2FycmF5W2ldLnF1ZXN0aW9ucy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGlmKHNlY3Rpb25zYXJyYXlbaV0ucXVlc3Rpb25zW2pdLmFuc3dlclR5cGUgIT0gJ2Rlc2NyaXB0aXZlJykge1xyXG4gICAgICAgICAgICBkZWxldGUgc2VjdGlvbnNhcnJheVtpXS5xdWVzdGlvbnNbal0uZGVzY3JpcHRpdmV0eXBlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIGlmIChbXCJtdWx0aXBsZWNob2ljZW11bHRpcGxlXCJdLmluY2x1ZGVzKHNlY3Rpb25zYXJyYXlbaV0ucXVlc3Rpb25zW2pdLmFuc3dlclR5cGUpKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IHNlY3Rpb25zYXJyYXlbaV0ucXVlc3Rpb25zW2pdLmFuc3dlcnMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgLy8gc2VjdGlvbnNhcnJheVtpXS5xdWVzdGlvbnNbal0uYW5zd2Vyc1trXVsnYW5zd2VySW5wdXRTdHlsZSddID0gc2VjdGlvbnNhcnJheVtpXS5xdWVzdGlvbnNbal0uYW5zd2VyVHlwZTtcclxuICAgICAgICAgICAgLy8gc2VjdGlvbnNhcnJheVtpXS5xdWVzdGlvbnNbal0uYW5zd2Vyc1trXVsncmVmZXJlbmNlSW1hZ2UnXSA9IFwiXCI7XHJcbiAgICAgICAgICAgIC8vIHNlY3Rpb25zYXJyYXlbaV0ucXVlc3Rpb25zW2pdLmFuc3dlcnNba11bJ2FsbG93VXBsb2FkZnJvbUdhbGxlcnknXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAvLyBzZWN0aW9uc2FycmF5W2ldLnF1ZXN0aW9uc1tqXS5hbnN3ZXJzW2tdWyd2YWxpZGF0aW9uQW5zd2VyJ10gPSBcIlwiOyAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAvLyBzZWN0aW9uc2FycmF5W2ldLnF1ZXN0aW9uc1tqXS5hbnN3ZXJzW2tdWydydW5BSSddID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNlY3Rpb25zYXJyYXlbaV0ucXVlc3Rpb25zW2pdLmFuc3dlcnNba11bJ3Nob3dMaW5rZWQnXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZWN0aW9uc2FycmF5W2ldLnF1ZXN0aW9uc1tqXS5hbnN3ZXJzW2tdWydsaW5rZWRRdWVzdGlvbiddID0gMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHNlY3Rpb25zYXJyYXlbaV0ucXVlc3Rpb25zW2pdLmFsbG93VXBsb2FkZnJvbUdhbGxlcnkgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBzZWN0aW9uc2FycmF5W2ldLnF1ZXN0aW9uc1tqXS5hbnN3ZXJzID09PSAnb2JqZWN0JyAmJlxyXG4gICAgICAgICAgICBzZWN0aW9uc2FycmF5W2ldLnF1ZXN0aW9uc1tqXS5hbnN3ZXJzICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHNlY3Rpb25zYXJyYXlbaV0ucXVlc3Rpb25zW2pdLmFuc3dlcnMpIHx8IFsnZGVzY3JpcHRpdmUnLCdkYXRlJ10uaW5jbHVkZXMoc2VjdGlvbnNhcnJheVtpXS5xdWVzdGlvbnNbal0uYW5zd2VyVHlwZSkpIHtcclxuICAgICAgICAgICAgICBsZXQgaXRlbSA9IHtcclxuICAgICAgICAgICAgICAgIFwiYW5zd2VyXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBcImFuc3dlcm9wdGlvbk51bWJlclwiOiAxLFxyXG4gICAgICAgICAgICAgICAgXCJzb3BGbGFnXCI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgXCJ2YWxpZGF0aW9uXCI6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgXCJ2YWxpZGF0aW9uQW5zd2VyXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBcInZhbGlkYXRpb25UeXBlXCI6IFwiXCIsXHJcbiAgICAgICAgICAgICAgICBcInJlZmVyZW5jZUltYWdlXCI6IHNlY3Rpb25zYXJyYXlbaV0ucXVlc3Rpb25zW2pdLmFuc3dlcnM/LnJlZmVyZW5jZUltYWdlID8gc2VjdGlvbnNhcnJheVtpXS5xdWVzdGlvbnNbal0uYW5zd2Vycz8ucmVmZXJlbmNlSW1hZ2UgOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgXCJzaG93TGlua2VkXCI6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBcImxpbmtlZFF1ZXN0aW9uXCI6MCxcclxuICAgICAgICAgICAgICAgIC4uLihzZWN0aW9uc2FycmF5W2ldLnF1ZXN0aW9uc1tqXS5hbnN3ZXJUeXBlID09ICdtdWx0aXBsZUltYWdlJyA/IHsnZGVzY3JpcHRpdmV0eXBlJzpzZWN0aW9uc2FycmF5W2ldLnF1ZXN0aW9uc1tqXS5hbnN3ZXJzPy5kZXNjcmlwdGl2ZXR5cGV9Ont9KVxyXG4gICAgICAgICAgICAgICAgLy8gXCJhbGxvd1VwbG9hZGZyb21HYWxsZXJ5XCI6IHNlY3Rpb25zYXJyYXlbaV0ucXVlc3Rpb25zW2pdLmFuc3dlcnM/LmFsbG93VXBsb2FkZnJvbUdhbGxlcnkgPyBzZWN0aW9uc2FycmF5W2ldLnF1ZXN0aW9uc1tqXS5hbnN3ZXJzPy5hbGxvd1VwbG9hZGZyb21HYWxsZXJ5IDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAvLyBcImFuc3dlcklucHV0U3R5bGVcIjogc2VjdGlvbnNhcnJheVtpXS5xdWVzdGlvbnNbal0uYW5zd2Vycz8uYW5zd2VySW5wdXRTdHlsZSA/IHNlY3Rpb25zYXJyYXlbaV0ucXVlc3Rpb25zW2pdLmFuc3dlcnM/LmFuc3dlcklucHV0U3R5bGUgOiBcIlwiLFxyXG4gICAgICAgICAgICAgICAgLy8gXCJydW5BSVwiOiBzZWN0aW9uc2FycmF5W2ldLnF1ZXN0aW9uc1tqXS5hbnN3ZXJzLnJ1bkFJID8gc2VjdGlvbnNhcnJheVtpXS5xdWVzdGlvbnNbal0uYW5zd2Vycy5ydW5BSSA6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgc2VjdGlvbnNhcnJheVtpXS5xdWVzdGlvbnNbal0uYWxsb3dVcGxvYWRmcm9tR2FsbGVyeSA9IHNlY3Rpb25zYXJyYXlbaV0ucXVlc3Rpb25zW2pdLmFuc3dlcnM/LmFsbG93VXBsb2FkZnJvbUdhbGxlcnkgPyBzZWN0aW9uc2FycmF5W2ldLnF1ZXN0aW9uc1tqXS5hbnN3ZXJzPy5hbGxvd1VwbG9hZGZyb21HYWxsZXJ5IDogZmFsc2U7XHJcbiAgICAgICAgICAgICAgaWYoc2VjdGlvbnNhcnJheVtpXS5xdWVzdGlvbnNbal0uYW5zd2VyVHlwZSA9PSAnbXVsdGlwbGVJbWFnZScpIHtcclxuICAgICAgICAgICAgICAgIHNlY3Rpb25zYXJyYXlbaV0ucXVlc3Rpb25zW2pdLmRlc2NyaXB0aXZldHlwZSA9IHNlY3Rpb25zYXJyYXlbaV0ucXVlc3Rpb25zW2pdLmFuc3dlcnM/LmRlc2NyaXB0aXZldHlwZSA/IHNlY3Rpb25zYXJyYXlbaV0ucXVlc3Rpb25zW2pdLmFuc3dlcnM/LmRlc2NyaXB0aXZldHlwZSA6ICd0ZXh0JztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgc2VjdGlvbnNhcnJheVtpXS5xdWVzdGlvbnNbal0uYW5zd2VycyA9IFtpdGVtXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNoZWNrbGlzdC5zZWN0aW9ucyA9IHNlY3Rpb25zYXJyYXk7XHJcbiAgICB0aGlzLnNvcFNlcnZpY2UuZ2V0dXBkYXRlY2hlY2tsaXN0KHRoaXMuZWRpdHZhbHVlLCBjaGVja2xpc3QpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYocmVzKSB7XHJcbiAgICAgICAgaWYgKHJlcz8uY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIGlmKHR5cGU9PSdjb25maWd1cmUnKSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoYC9tYW5hZ2UvdHJheC9jb25maWd1cmU/Y2hlY2tMaXN0SWQ9JHtyZXMuZGF0YS5jaGVja2xpc3RJZH1gKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlQnlVcmwoJy9tYW5hZ2UvdHJheC9jaGVja2xpc3QnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zd2FsVG9hc3QoJ1VuYWJsZSB0byB1cGRhdGUgY2hlY2tsaXN0IScsJ2Vycm9yJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3dhbFRvYXN0KCdVbmFibGUgdG8gdXBkYXRlIGNoZWNrbGlzdCEnLCdlcnJvcicpO1xyXG4gICAgICB9XHJcbiAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgaWYgKGVycm9yLmNvZGUgPT0gNDAzKSB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvZXJyb3I0MDMnXSlcclxuICAgICAgfVxyXG4gICAgICBpZihlcnJvci5jb2RlPT0gNDAwKSB7XHJcbiAgICAgICAgbGV0IGVyciA9IGVycm9yPy5lcnJvcj8ubWVzc2FnZTtcclxuICAgICAgICB0aGlzLnN3YWxUb2FzdChlcnIpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3dhbFRvYXN0KCdVbmFibGUgdG8gY3JlYXRlIGNoZWNrbGlzdCFTZXJ2ZXIgRXJyb3IhJywnZXJyb3InKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBtYXJrRm9ybUNvbnRyb2xzQXNUb3VjaGVkKGNvbnRyb2w6IEZvcm1Hcm91cCB8IEZvcm1BcnJheSxzZWN0aW9uSW5kZXg/OiBudW1iZXIpIHtcclxuICAgIGNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG5cclxuICAgIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUdyb3VwKSB7XHJcbiAgICAgIGZvciAoY29uc3QgY29udHJvbE5hbWUgaW4gY29udHJvbC5jb250cm9scykge1xyXG4gICAgICAgIHRoaXMubWFya0Zvcm1Db250cm9sc0FzVG91Y2hlZChjb250cm9sLmdldChjb250cm9sTmFtZSkgYXMgRm9ybUdyb3VwKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChjb250cm9sIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgIGNvbnRyb2wuY29udHJvbHMuZm9yRWFjaChmb3JtQ29udHJvbCA9PiB7XHJcbiAgICAgICAgdGhpcy5tYXJrRm9ybUNvbnRyb2xzQXNUb3VjaGVkKGZvcm1Db250cm9sIGFzIEZvcm1Hcm91cCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2Nyb2xsVG9FcnJvcnMoc2VjdGlvbnM6IEZvcm1BcnJheSkge1xyXG4gICAgZm9yKGxldCBpPTA7aTxzZWN0aW9ucy5sZW5ndGg7aSsrKSB7XHJcbiAgICAgIGxldCBzZWN0aW9uID0gc2VjdGlvbnMuYXQoaSkgYXMgRm9ybUdyb3VwO1xyXG4gICAgICBpZiAoc2VjdGlvbi5pbnZhbGlkKSB7XHJcbiAgICAgICAgbGV0IHF1ZXN0aW9ucyA9IHNlY3Rpb24uZ2V0KCdxdWVzdGlvbnMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgICAgICAgZm9yKGxldCBqPTA7ajxxdWVzdGlvbnMubGVuZ3RoO2orKykge1xyXG4gICAgICAgICAgbGV0IHF1ZXN0aW9uID0gcXVlc3Rpb25zLmF0KGopIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKHF1ZXN0aW9uLCdxdWVzdGlvbicpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgaWYgKHF1ZXN0aW9uLmludmFsaWQpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNob3cgPSBpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9RdWVzdGlvbihpLCBqKTtcclxuICAgICAgICAgICAgICB0aGlzLnN3YWxUb2FzdCgnUGxlYXNlIGZpbGwgb3V0IGFsbCB0aGUgZmllbGRzIScsJ2Vycm9yJyk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3dhbFRvYXN0KGVycjogc3RyaW5nLHR5cGU/OnN0cmluZyxpY29uPzogc3RyaW5nKSB7XHJcbiAgICBpZih0eXBlID09ICdlcnJvcicpIHtcclxuICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KGVycik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy50b2FzdC5nZXRTdWNjZXNzVG9hc3QoZXJyKTtcclxuICAgIH1cclxuICAgIC8vIFN3YWwuZmlyZSh7XHJcbiAgICAvLyAgIHRvYXN0OiB0cnVlLFxyXG4gICAgLy8gICAuLi4oIGljb24gPyB7IGljb25IdG1sOiBpY29uIH0gOiB7fSksXHJcbiAgICAvLyAgIC8vIHRpdGxlVGV4dDogYENoZWNrbGlzdCBGb3JtIEVycm9yYCxcclxuICAgIC8vICAgaHRtbDogYDxkaXYgY2xhc3M9XCJyb3cgXCI+XHJcbiAgICAvLyAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgbXQtMlwiPlxyXG4gICAgLy8gICA8ZGl2IGNsYXNzPVwidG9hc3R0aXRpbGVcIj4ke2Vycn08L2Rpdj5cclxuICAgIC8vICAgPC9kaXY+XHJcbiAgICAgXHJcbiAgICAvLyAgIDwvZGl2PmAsXHJcbiAgICAvLyAgIHBvc2l0aW9uOiAnYm90dG9tJyxcclxuICAgIC8vICAgc2hvd0NvbmZpcm1CdXR0b246IGZhbHNlLFxyXG4gICAgLy8gICBzaG93Q2xvc2VCdXR0b246IHRydWUsXHJcbiAgICAvLyAgIHRpbWVyOiA2MDAwLFxyXG4gICAgLy8gICB0aW1lclByb2dyZXNzQmFyOiB0cnVlLFxyXG4gICAgLy8gICBkaWRPcGVuOiAodG9hc3QpID0+IHtcclxuICAgIC8vICAgICB0b2FzdC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgU3dhbC5zdG9wVGltZXIpXHJcbiAgICAvLyAgICAgdG9hc3QuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIFN3YWwucmVzdW1lVGltZXIpXHJcbiAgICAvLyAgICAgJChcIiNrdF9jcmVhdGVfYWNjb3VudF9mb3JtX2FjY291bnRfdHlwZV9wZXJzb25hbFwiKT8udmFsKCcnKTtcclxuICAgIC8vICAgICB0aGlzLmNoYW5nZWRldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG5cclxuICBSdW5BSShzSWR4Om51bWJlcixxSWR4OiBudW1iZXIsYW5zSWR4Om51bWJlcj0tMSkge1xyXG4gICAgbGV0IGRpYWxvZ1JlZjogYW55O1xyXG4gICAgbGV0IHF1ZXN0aW9uOiBhbnkgPSB0aGlzLmdldFF1ZXN0aW9uRm9ybUNvbnRyb2woc0lkeCxxSWR4LCdxbmFtZScpPy52YWx1ZTtcclxuICAgIGlmKHRoaXMuZ2V0QW5zd2VyRm9ybUdyb3VwX0Zvcm1Db250cm9sKHNJZHgscUlkeCwncnVuQUknLGFuc0lkeCk/LnZhbHVlID09IGZhbHNlKSB7XHJcbiAgICAgIGlmKCFxdWVzdGlvbiB8fCAhdGhpcy5DaGVja2xpc3RGb3JtLmdldCgnY2hlY2tsaXN0TmFtZScpPy52YWx1ZSkge1xyXG4gICAgICAgIGxldCBlcnI6IHN0cmluZyA9ICFxdWVzdGlvbiA/ICdQbGVhc2UgZW50ZXIgcXVlc3Rpb24gdG8gY29udGludWUhJyA6ICdQbGVhc2UgZW50ZXIgQ2hlY2tsaXN0IE5hbWUgdG8gY29udGludWUhJztcclxuICAgICAgICB0aGlzLnN3YWxUb2FzdChlcnIsJ2Vycm9yJyk7ICAgICAgICBcclxuICAgICAgICB0aGlzLnJ1bkFJT2ZmKHNJZHgsIHFJZHgsZmFsc2UsYW5zSWR4KTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgZGlhbG9nUmVmID0gdGhpcy5kaWFsb2cub3BlbihUcmF4cG9wdXBDb21wb25lbnQse2NlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnfSk7XHJcbiAgICAgICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmRhdGEgPSB7XHJcbiAgICAgICAgICBpbWFnZXNyYzogYDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiNTZcIiBoZWlnaHQ9XCI1NlwiIHZpZXdCb3g9XCIwIDAgNTYgNTZcIiBmaWxsPVwibm9uZVwiPjxyZWN0IHg9XCI0XCIgeT1cIjRcIiB3aWR0aD1cIjQ4XCIgaGVpZ2h0PVwiNDhcIiByeD1cIjI0XCIgZmlsbD1cIiNEMUZBREZcIi8+PHBhdGggZD1cIk0yMy4zNTY0IDE5LjM1MjVDMjQuMTc0OCAxOC43MzI3IDI1LjE3MzggMTguMzk4NSAyNi4yMDA0IDE4LjQwMDlDMjYuNTU0OSAxOC4zOTMgMjYuOTA1NyAxOC40NzQ2IDI3LjIyMDQgMTguNjM4MkMyNy41MzUgMTguODAxOCAyNy44MDMzIDE5LjA0MjEgMjguMDAwNCAxOS4zMzY5QzI4LjE5NzUgMTkuMDQyMSAyOC40NjU4IDE4LjgwMTggMjguNzgwNCAxOC42MzgyQzI5LjA5NSAxOC40NzQ2IDI5LjQ0NTkgMTguMzkzIDI5LjgwMDQgMTguNDAwOUMzMC44MjcgMTguMzk4NSAzMS44MjYgMTguNzMyNyAzMi42NDQ0IDE5LjM1MjVDMzMuMjc0NCAxOS44NDIxIDMzLjc2MDQgMjAuNTIwMSAzMy45MzIgMjEuMzM5N0MzNC4zMjU2IDIxLjM2OTcgMzQuNjg1NiAyMS41MzI5IDM0Ljk4OCAyMS43Nzg5QzM1LjQ0NjQgMjIuMTUwOSAzNS43OCAyMi43MDg5IDM1Ljk5IDIzLjI5OTNDMzYuMzE4OCAyNC4yMTczIDM2LjQwNzYgMjUuMzg3MyAzNi4wNjY4IDI2LjM4MzNDMzYuMTUzMiAyNi40MjQxIDM2LjIzODQgMjYuNDcyMSAzNi4zMjEyIDI2LjUyNzNDMzYuNjUxMiAyNi43NDY5IDM2LjkwMiAyNy4wNjEzIDM3LjA4NjggMjcuNDMyMUMzNy40NTA0IDI4LjE1ODEgMzcuNjAwNCAyOS4xNzA5IDM3LjYwMDQgMzAuNDAwOUMzNy42MDA0IDMxLjc3MDEgMzcuMDc4NCAzMi42ODkzIDM2LjQxNiAzMy4yNTY5QzM2LjA0OTcgMzMuNTcxIDM1LjYxNzQgMzMuNzk4NiAzNS4xNTEyIDMzLjkyMjlDMzUuMDMxMiAzNC41OTI1IDM0LjY5NTIgMzUuMzY3NyAzNC4xNjg0IDM2LjAyNTNDMzMuNDg0NCAzNi44ODMzIDMyLjQyMzYgMzcuNjAwOSAzMS4wMDA0IDM3LjYwMDlDMjkuODcyNCAzNy42MDA5IDI4Ljk3NDggMzYuOTc2OSAyOC4zOTE2IDM2LjM2NDlDMjguMjUyMiAzNi4yMTg4IDI4LjEyMTUgMzYuMDY0NSAyOC4wMDA0IDM1LjkwMjlDMjcuODc5MyAzNi4wNjQ1IDI3Ljc0ODYgMzYuMjE4OCAyNy42MDkyIDM2LjM2NDlDMjcuMDI2IDM2Ljk3NjkgMjYuMTI5NiAzNy42MDA5IDI1LjAwMDQgMzcuNjAwOUMyMy41NzcyIDM3LjYwMDkgMjIuNTE3NiAzNi44ODMzIDIxLjgzMjQgMzYuMDI1M0MyMS4zNDAxIDM1LjQxNCAyMS4wMDI5IDM0LjY5MjcgMjAuODQ5NiAzMy45MjI5QzIwLjM4MzQgMzMuNzk4NiAxOS45NTExIDMzLjU3MSAxOS41ODQ4IDMzLjI1NjlDMTguOTIyNCAzMi42ODkzIDE4LjQwMDQgMzEuNzY4OSAxOC40MDA0IDMwLjQwMDlDMTguNDAwNCAyOS4xNzA5IDE4LjU1MTYgMjguMTU2OSAxOC45MTQgMjcuNDMyMUMxOS4wODU3IDI3LjA2ODUgMTkuMzQ5NyAyNi43NTYxIDE5LjY3OTYgMjYuNTI2MUMxOS43NjA2IDI2LjQ3MjUgMTkuODQ1NyAyNi40MjUxIDE5LjkzNCAyNi4zODQ1QzE5LjU5MzIgMjUuMzg2MSAxOS42ODIgMjQuMjE3MyAyMC4wMTA4IDIzLjI5OTNDMjAuMjIwOCAyMi43MDg5IDIwLjU1NDQgMjIuMTUwOSAyMS4wMTI4IDIxLjc3ODlDMjEuMzE1MiAyMS41MzI5IDIxLjY3NTIgMjEuMzcwOSAyMi4wNjg4IDIxLjMzOTdDMjIuMjQxNiAyMC41MjAxIDIyLjcyNjQgMTkuODQyMSAyMy4zNTY0IDE5LjM1MjVaTTI3LjQwMDQgMjEuNDAwOVYyMS4zODg5TDI3LjM5OCAyMS4zMjg5QzI3LjM4MDMgMjEuMDE2MSAyNy4zMTgxIDIwLjcwNzQgMjcuMjEzMiAyMC40MTIxQzI3LjEzODUgMjAuMTg5MiAyNy4wMTEzIDE5Ljk4NzYgMjYuODQyNCAxOS44MjQxQzI2LjY2NTEgMTkuNjY5OCAyNi40MzUyIDE5LjU4OTggMjYuMjAwNCAxOS42MDA5QzI1LjQ0MDcgMTkuNTk4MyAyNC43MDA5IDE5Ljg0MzUgMjQuMDkzMiAyMC4yOTkzQzIzLjUzNjQgMjAuNzMyNSAyMy4yMDA0IDIxLjMxOTMgMjMuMjAwNCAyMi4wMDA5QzIzLjIwMDMgMjIuMDk1OSAyMy4xNzc3IDIyLjE4OTYgMjMuMTM0MyAyMi4yNzQxQzIzLjA5MSAyMi4zNTg3IDIzLjAyODIgMjIuNDMxOCAyMi45NTExIDIyLjQ4NzNDMjIuODc0IDIyLjU0MjggMjIuNzg0OCAyMi41NzkzIDIyLjY5MDkgMjIuNTkzNkMyMi41OTY5IDIyLjYwNzkgMjIuNTAwOSAyMi41OTk3IDIyLjQxMDggMjIuNTY5N0MyMi4xODUyIDIyLjQ5NTMgMjEuOTgzNiAyMi41MzczIDIxLjc2ODggMjIuNzEwMUMyMS41MzM2IDIyLjkwMjEgMjEuMzA0NCAyMy4yNDI5IDIxLjE0IDIzLjcwMjVDMjAuODA1MiAyNC42NDA5IDIwLjg0IDI1Ljc3NzMgMjEuMjk5NiAyNi40Njg1QzIxLjM2NTIgMjYuNTY3IDIxLjQwMDMgMjYuNjgyNiAyMS40MDA0IDI2LjgwMDlIMjIuMzAwNEMyMy4wMTY1IDI2LjgwMDkgMjMuNzAzMiAyNy4wODU0IDI0LjIwOTYgMjcuNTkxN0MyNC43MTU5IDI4LjA5ODEgMjUuMDAwNCAyOC43ODQ4IDI1LjAwMDQgMjkuNTAwOVYyOS45MDI5QzI1LjQwMDcgMzAuMDQ0NSAyNS43MzgxIDMwLjMyMyAyNS45NTMgMzAuNjg5MkMyNi4xNjc4IDMxLjA1NTUgMjYuMjQ2MyAzMS40ODU5IDI2LjE3NDUgMzEuOTA0NEMyNi4xMDI3IDMyLjMyMjkgMjUuODg1MiAzMi43MDI1IDI1LjU2MDYgMzIuOTc2MkMyNS4yMzU5IDMzLjI0OTkgMjQuODI1IDMzLjQgMjQuNDAwNCAzMy40QzIzLjk3NTggMzMuNCAyMy41NjQ4IDMzLjI0OTkgMjMuMjQwMiAzMi45NzYyQzIyLjkxNTYgMzIuNzAyNSAyMi42OTgxIDMyLjMyMjkgMjIuNjI2MyAzMS45MDQ0QzIyLjU1NDUgMzEuNDg1OSAyMi42MzMgMzEuMDU1NSAyMi44NDc4IDMwLjY4OTJDMjMuMDYyNyAzMC4zMjMgMjMuNDAwMSAzMC4wNDQ1IDIzLjgwMDQgMjkuOTAyOVYyOS41MDA5QzIzLjgwMDQgMjguNjcyOSAyMy4xMjg0IDI4LjAwMDkgMjIuMzAwNCAyOC4wMDA5SDIwLjIwMDRDMjAuMTI4NyAyOC4wMDA4IDIwLjA1NzUgMjcuOTg3OCAxOS45OTA0IDI3Ljk2MjVMMTkuOTg2OCAyNy45Njk3QzE5Ljc0OTIgMjguNDQzNyAxOS42MDA0IDI5LjIzMDkgMTkuNjAwNCAzMC40MDA5QzE5LjYwMDQgMzEuNDMxNyAxOS45Nzg0IDMyLjAxMjUgMjAuMzY2IDMyLjM0NDlDMjAuNzgyNCAzMi43MDI1IDIxLjI0NDQgMzIuODAwOSAyMS40MDA0IDMyLjgwMDlDMjEuNTU5NSAzMi44MDA5IDIxLjcxMjEgMzIuODY0MSAyMS44MjQ3IDMyLjk3NjdDMjEuOTM3MiAzMy4wODkyIDIyLjAwMDQgMzMuMjQxOCAyMi4wMDA0IDMzLjQwMDlDMjIuMDAwNCAzMy44NDI1IDIyLjI0MDQgMzQuNjE0MSAyMi43Njg0IDM1LjI3NjVDMjMuMjgzMiAzNS45MTg1IDI0LjAyMzYgMzYuNDAwOSAyNS4wMDA0IDM2LjQwMDlDMjUuNjcyNCAzNi40MDA5IDI2LjI3NDggMzYuMDI1MyAyNi43NDA0IDM1LjUzNjlDMjYuOTY5NiAzNS4yOTY5IDI3LjE0ODQgMzUuMDQ4NSAyNy4yNjQ4IDM0Ljg0NDVDMjcuMzE3OCAzNC43NTQxIDI3LjM2MzEgMzQuNjU5MyAyNy40MDA0IDM0LjU2MTNWMjUuMDAwOUgyNi4wOTg0QzI1Ljk1NjkgMjUuNDAxMiAyNS42NzgzIDI1LjczODcgMjUuMzEyMSAyNS45NTM1QzI0Ljk0NTkgMjYuMTY4MyAyNC41MTU0IDI2LjI0NjggMjQuMDk3IDI2LjE3NUMyMy42Nzg1IDI2LjEwMzIgMjMuMjk4OCAyNS44ODU4IDIzLjAyNTEgMjUuNTYxMUMyMi43NTE0IDI1LjIzNjUgMjIuNjAxMyAyNC44MjU1IDIyLjYwMTMgMjQuNDAwOUMyMi42MDEzIDIzLjk3NjMgMjIuNzUxNCAyMy41NjU0IDIzLjAyNTEgMjMuMjQwN0MyMy4yOTg4IDIyLjkxNjEgMjMuNjc4NSAyMi42OTg2IDI0LjA5NyAyMi42MjY4QzI0LjUxNTQgMjIuNTU1IDI0Ljk0NTkgMjIuNjMzNSAyNS4zMTIxIDIyLjg0ODNDMjUuNjc4MyAyMy4wNjMyIDI1Ljk1NjkgMjMuNDAwNiAyNi4wOTg0IDIzLjgwMDlIMjcuNDAwNFYyMS40MDA5Wk0yOC42MDA0IDMzLjM5OTdWMzQuNTYwMUMyOC42Mzc3IDM0LjY1ODEgMjguNjgzIDM0Ljc1MjggMjguNzM2IDM0Ljg0MzNDMjguODUzNiAzNS4wNDczIDI5LjAzMTIgMzUuMjk1NyAyOS4yNTkyIDM1LjUzNTdDMjkuNzI2IDM2LjAyNDEgMzAuMzI5NiAzNi4zOTk3IDMxLjAwMDQgMzYuMzk5N0MzMS45NzcyIDM2LjM5OTcgMzIuNzE3NiAzNS45MTczIDMzLjIzMjQgMzUuMjc1M0MzMy43NjA0IDM0LjYxMjkgMzQuMDAwNCAzMy44NDEzIDM0LjAwMDQgMzMuMzk5N0MzNC4wMDA0IDMzLjI0MDYgMzQuMDYzNiAzMy4wODggMzQuMTc2MSAzMi45NzU1QzM0LjI4ODYgMzIuODYyOSAzNC40NDEzIDMyLjc5OTcgMzQuNjAwNCAzMi43OTk3QzM0Ljc1NjQgMzIuNzk5NyAzNS4yMTg0IDMyLjcwMTMgMzUuNjM0OCAzMi4zNDM3QzM2LjAyMjQgMzIuMDExMyAzNi40MDA0IDMxLjQzMDUgMzYuNDAwNCAzMC4zOTk3QzM2LjQwMDQgMjkuMjI5NyAzNi4yNTA0IDI4LjQ0MzcgMzYuMDE0IDI3Ljk2ODVDMzUuOTM0OSAyNy43OTE2IDM1LjgxMDggMjcuNjM4NSAzNS42NTQgMjcuNTI0NUMzNS41MTg5IDI3LjQzODEgMzUuMzYwNiAyNy4zOTUgMzUuMjAwNCAyNy40MDA5QzM1LjA5MTkgMjcuNDAwOSAzNC45ODU0IDI3LjM3MTQgMzQuODkyMyAyNy4zMTU2QzM0Ljc5OTIgMjcuMjU5OCAzNC43MjMgMjcuMTc5OCAzNC42NzE3IDI3LjA4NDFDMzQuNjIwNSAyNi45ODg0IDM0LjU5NjIgMjYuODgwNyAzNC42MDE0IDI2Ljc3MjNDMzQuNjA2NiAyNi42NjM4IDM0LjY0MTEgMjYuNTU4OSAzNC43MDEyIDI2LjQ2ODVDMzUuMTYyIDI1Ljc3NzMgMzUuMTk1NiAyNC42NDA5IDM0Ljg2MDggMjMuNzAyNUMzNC42OTY0IDIzLjI0MjkgMzQuNDY3MiAyMi45MDA5IDM0LjIzMiAyMi43MTAxQzM0LjAxNzIgMjIuNTM3MyAzMy44MTU2IDIyLjQ5NDEgMzMuNTkgMjIuNTY5N0MzMy40OTk4IDIyLjU5OTcgMzMuNDAzOCAyMi42MDc5IDMzLjMwOTkgMjIuNTkzNkMzMy4yMTYgMjIuNTc5MyAzMy4xMjY4IDIyLjU0MjggMzMuMDQ5NyAyMi40ODczQzMyLjk3MjYgMjIuNDMxOCAzMi45MDk4IDIyLjM1ODcgMzIuODY2NCAyMi4yNzQxQzMyLjgyMzEgMjIuMTg5NiAzMi44MDA1IDIyLjA5NTkgMzIuODAwNCAyMi4wMDA5QzMyLjgwMDQgMjEuMzE5MyAzMi40NjQ0IDIwLjczMjUgMzEuOTA2NCAyMC4yOTkzQzMxLjI5OSAxOS44NDM4IDMwLjU1OTYgMTkuNTk4NiAyOS44MDA0IDE5LjYwMDlDMjkuNTY1NiAxOS41ODk4IDI5LjMzNTYgMTkuNjY5OCAyOS4xNTg0IDE5LjgyNDFDMjguOTg4OSAxOS45ODc0IDI4Ljg2MTMgMjAuMTg5MSAyOC43ODY0IDIwLjQxMjFDMjguNjcyMSAyMC43MjU2IDI4LjYwOTMgMjEuMDU1NCAyOC42MDA0IDIxLjM4ODlWMzIuMjAwOUgyOS41MDA0QzMwLjMyODQgMzIuMjAwOSAzMS4wMDA0IDMxLjUyODkgMzEuMDAwNCAzMC43MDA5VjI4LjQ5ODlDMzAuNjAwMSAyOC4zNTc0IDMwLjI2MjcgMjguMDc4OSAzMC4wNDc4IDI3LjcxMjZDMjkuODMzIDI3LjM0NjQgMjkuNzU0NSAyNi45MTYgMjkuODI2MyAyNi40OTc1QzI5Ljg5ODEgMjYuMDc5IDMwLjExNTYgMjUuNjk5MyAzMC40NDAyIDI1LjQyNTdDMzAuNzY0OCAyNS4xNTIgMzEuMTc1OCAyNS4wMDE5IDMxLjYwMDQgMjUuMDAxOUMzMi4wMjUgMjUuMDAxOSAzMi40MzU5IDI1LjE1MiAzMi43NjA2IDI1LjQyNTdDMzMuMDg1MiAyNS42OTkzIDMzLjMwMjcgMjYuMDc5IDMzLjM3NDUgMjYuNDk3NUMzMy40NDYzIDI2LjkxNiAzMy4zNjc4IDI3LjM0NjQgMzMuMTUzIDI3LjcxMjZDMzIuOTM4MSAyOC4wNzg5IDMyLjYwMDcgMjguMzU3NCAzMi4yMDA0IDI4LjQ5ODlWMzAuNzAwOUMzMi4yMDA0IDMxLjQxNyAzMS45MTU5IDMyLjEwMzggMzEuNDA5NiAzMi42MTAxQzMwLjkwMzIgMzMuMTE2NSAzMC4yMTY1IDMzLjQwMDkgMjkuNTAwNCAzMy40MDA5SDI4LjYwMDRWMzMuMzk5N1pNMjMuODAwNCAyNC40MDA5QzIzLjgwMDQgMjQuNTYwMSAyMy44NjM2IDI0LjcxMjcgMjMuOTc2MSAyNC44MjUyQzI0LjA4ODYgMjQuOTM3NyAyNC4yNDEzIDI1LjAwMDkgMjQuNDAwNCAyNS4wMDA5QzI0LjU1OTUgMjUuMDAwOSAyNC43MTIxIDI0LjkzNzcgMjQuODI0NyAyNC44MjUyQzI0LjkzNzIgMjQuNzEyNyAyNS4wMDA0IDI0LjU2MDEgMjUuMDAwNCAyNC40MDA5QzI1LjAwMDQgMjQuMjQxOCAyNC45MzcyIDI0LjA4OTIgMjQuODI0NyAyMy45NzY3QzI0LjcxMjEgMjMuODY0MSAyNC41NTk1IDIzLjgwMDkgMjQuNDAwNCAyMy44MDA5QzI0LjI0MTMgMjMuODAwOSAyNC4wODg2IDIzLjg2NDEgMjMuOTc2MSAyMy45NzY3QzIzLjg2MzYgMjQuMDg5MiAyMy44MDA0IDI0LjI0MTggMjMuODAwNCAyNC40MDA5Wk0zMS42MDA0IDI3LjQwMDlDMzEuNzU5NSAyNy40MDA5IDMxLjkxMjEgMjcuMzM3NyAzMi4wMjQ3IDI3LjIyNTJDMzIuMTM3MiAyNy4xMTI3IDMyLjIwMDQgMjYuOTYwMSAzMi4yMDA0IDI2LjgwMDlDMzIuMjAwNCAyNi42NDE4IDMyLjEzNzIgMjYuNDg5MiAzMi4wMjQ3IDI2LjM3NjdDMzEuOTEyMSAyNi4yNjQxIDMxLjc1OTUgMjYuMjAwOSAzMS42MDA0IDI2LjIwMDlDMzEuNDQxMyAyNi4yMDA5IDMxLjI4ODYgMjYuMjY0MSAzMS4xNzYxIDI2LjM3NjdDMzEuMDYzNiAyNi40ODkyIDMxLjAwMDQgMjYuNjQxOCAzMS4wMDA0IDI2LjgwMDlDMzEuMDAwNCAyNi45NjAxIDMxLjA2MzYgMjcuMTEyNyAzMS4xNzYxIDI3LjIyNTJDMzEuMjg4NiAyNy4zMzc3IDMxLjQ0MTMgMjcuNDAwOSAzMS42MDA0IDI3LjQwMDlaTTI0LjQwMDQgMzEuMDAwOUMyNC4yNDEzIDMxLjAwMDkgMjQuMDg4NiAzMS4wNjQxIDIzLjk3NjEgMzEuMTc2N0MyMy44NjM2IDMxLjI4OTIgMjMuODAwNCAzMS40NDE4IDIzLjgwMDQgMzEuNjAwOUMyMy44MDA0IDMxLjc2MDEgMjMuODYzNiAzMS45MTI3IDIzLjk3NjEgMzIuMDI1MkMyNC4wODg2IDMyLjEzNzcgMjQuMjQxMyAzMi4yMDA5IDI0LjQwMDQgMzIuMjAwOUMyNC41NTk1IDMyLjIwMDkgMjQuNzEyMSAzMi4xMzc3IDI0LjgyNDcgMzIuMDI1MkMyNC45MzcyIDMxLjkxMjcgMjUuMDAwNCAzMS43NjAxIDI1LjAwMDQgMzEuNjAwOUMyNS4wMDA0IDMxLjQ0MTggMjQuOTM3MiAzMS4yODkyIDI0LjgyNDcgMzEuMTc2N0MyNC43MTIxIDMxLjA2NDEgMjQuNTU5NSAzMS4wMDA5IDI0LjQwMDQgMzEuMDAwOVpcIiBmaWxsPVwiIzAzOTg1NVwiLz48cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIHN0cm9rZT1cIiNFQ0ZERjNcIiBzdHJva2Utd2lkdGg9XCI4XCIvPjwvc3ZnPmAsXHJcbiAgICAgICAgICB0aXRsZTogYFJ1biBBSSBvbiBpbWFnZSB1cGxvYWRlZGAsXHJcbiAgICAgICAgICBjb250ZW50OiBgVXNlIHRoZSBwb3dlciBvZiBBSSB0byBjb21wYXJlIGFuZCBkZXRlY3QgYW5vbWFsaWVzIGJldHdlZW4gdXBsb2FkZWQgYW5kIHJlZmVyZW5jZSBpbWFnZS5gLFxyXG4gICAgICAgICAgaW5wdXRsYWJlbDE6ICdRdWVzdGlvbicsXHJcbiAgICAgICAgICBpbnB1dHR5cGUxOiAndGV4dCcsXHJcbiAgICAgICAgICBpbnB1dDE6ICd0cnVlJyxcclxuICAgICAgICAgIGlucHV0bGFiZWwyOiAnU3BlY2lmeSB5b3VyIHJlcXVlc3QnLFxyXG4gICAgICAgICAgaW5wdXR0eXBlMjogJ3RleHQnLFxyXG4gICAgICAgICAgcmVzVHlwZTogJ2N1c3RvbScsXHJcbiAgICAgICAgICBpbnB1dDI6ICd0cnVlJyxcclxuICAgICAgICAgIHBsYWNlaG9sZGVyMTogcXVlc3Rpb24sXHJcbiAgICAgICAgICBwbGFjZWhvbGRlcjI6ICdQbGVhc2UgY29tcGFyZSB0aGUgdXBsb2FkZWQgaW1hZ2VzIGEuLicsXHJcbiAgICAgICAgICBidXR0b250eXBlOiAnUmVxdWVzdCdcclxuICAgICAgICB9XHJcbiAgICAgICAgZGlhbG9nUmVmLnJlc3VsdC50aGVuKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuc3RhdHVzID09ICdjb25maXJtJykge1xyXG4gICAgICAgICAgICBsZXQgcmVxOiBhbnkgPSB7XHJcbiAgICAgICAgICAgICAgY2hlY2tsaXN0TmFtZTogdGhpcy5DaGVja2xpc3RGb3JtLmdldCgnY2hlY2tsaXN0TmFtZScpPy52YWx1ZSxcclxuICAgICAgICAgICAgICBxdWVzdGlvbk5hbWU6IHF1ZXN0aW9uLFxyXG4gICAgICAgICAgICAgIHJ1bkFJRGVzY3JpcHRpb246IHJlcy5kYXRhLnJlcXVlc3RUZXh0LFxyXG4gICAgICAgICAgICAgIGFuc3dlclR5cGU6IFwiaW1hZ2VcIixcclxuICAgICAgICAgICAgICByZWZlcmVuY2VJbWFnZTogdGhpcy5nZXRBbnN3ZXJGb3JtR3JvdXBfRm9ybUNvbnRyb2woc0lkeCwgcUlkeCwgJ3JlZmVyZW5jZUltYWdlJyxhbnNJZHgpPy52YWx1ZSB8fCAnJ1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc29wU2VydmljZS5ydW5BSUluc2VydChyZXEpLnN1YnNjcmliZSgoYXBpcmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoYXBpcmVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXBpcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0QW5zd2VyRm9ybUdyb3VwX0Zvcm1Db250cm9sKHNJZHgsIHFJZHgsICdydW5BSScsYW5zSWR4KT8ucGF0Y2hWYWx1ZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5nZXRRdWVzdGlvbkZvcm1Db250cm9sKHNJZHgsIHFJZHgsICdydW5BSScsYW5zSWR4KT8ucGF0Y2hWYWx1ZSh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5nZXRRdWVzdGlvbkZvcm1Db250cm9sKHNJZHgsIHFJZHgsICdydW5BSURlc2NyaXB0aW9uJyxhbnNJZHgpPy5wYXRjaFZhbHVlKHJlcy5kYXRhLnJlcXVlc3RUZXh0KTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zd2FsVG9hc3QoXHJcbiAgICAgICAgICAgICAgICAgICAgYDxzcGFuIHN0eWxlPVwicGFkZGluZy1yaWdodDogMzZweDtcIj4ke2FwaXJlcy5kYXRhLm1lc3NhZ2V9PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICA8YSBcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cIi9zdXBwb3J0L3ZpZXctdGlja2V0c1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIiBcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjb2xvcjogdmFyKC0tcHJpbWFyeS03MDAsICMwMDlCRjMpO2ZvbnQtZmFtaWx5OiBSb2JvdG87Zm9udC1zaXplOiAxNXB4O2ZvbnQtd2VpZ2h0OiA3MDA7dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Y3Vyc29yOiBwb2ludGVyO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFZpZXcgVGlja2V0XHJcbiAgICAgICAgICAgICAgICAgICAgPC9hPmAsXHJcbiAgICAgICAgICAgICAgICAgICAgYDxpbWcgc3JjPVwiLi4vLi4vLi4vLi4vYXNzZXRzL0ljb25zL3NvcC1ydW5haS10b3N0aWNvbi5zdmdcIiAvPmBcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucnVuQUlPZmYoc0lkeCwgcUlkeCx0cnVlLGFuc0lkeCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucnVuQUlPZmYoc0lkeCwgcUlkeCx0cnVlLGFuc0lkeCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAoZXJyb3IpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnJ1bkFJT2ZmKHNJZHgsIHFJZHgsdHJ1ZSxhbnNJZHgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucnVuQUlPZmYoc0lkeCwgcUlkeCxmYWxzZSxhbnNJZHgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFRyYXhwb3B1cENvbXBvbmVudCx7Y2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCd9KTtcclxuICAgICAgZGlhbG9nUmVmLmNvbXBvbmVudEluc3RhbmNlLmRhdGEgPSB7XHJcbiAgICAgICAgaW1hZ2VzcmM6IGA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjU2XCIgaGVpZ2h0PVwiNTZcIiB2aWV3Qm94PVwiMCAwIDU2IDU2XCIgZmlsbD1cIm5vbmVcIj48cmVjdCB4PVwiNFwiIHk9XCI0XCIgd2lkdGg9XCI0OFwiIGhlaWdodD1cIjQ4XCIgcng9XCIyNFwiIGZpbGw9XCIjRDFGQURGXCIvPjxwYXRoIGQ9XCJNMjMuMzU2NCAxOS4zNTI1QzI0LjE3NDggMTguNzMyNyAyNS4xNzM4IDE4LjM5ODUgMjYuMjAwNCAxOC40MDA5QzI2LjU1NDkgMTguMzkzIDI2LjkwNTcgMTguNDc0NiAyNy4yMjA0IDE4LjYzODJDMjcuNTM1IDE4LjgwMTggMjcuODAzMyAxOS4wNDIxIDI4LjAwMDQgMTkuMzM2OUMyOC4xOTc1IDE5LjA0MjEgMjguNDY1OCAxOC44MDE4IDI4Ljc4MDQgMTguNjM4MkMyOS4wOTUgMTguNDc0NiAyOS40NDU5IDE4LjM5MyAyOS44MDA0IDE4LjQwMDlDMzAuODI3IDE4LjM5ODUgMzEuODI2IDE4LjczMjcgMzIuNjQ0NCAxOS4zNTI1QzMzLjI3NDQgMTkuODQyMSAzMy43NjA0IDIwLjUyMDEgMzMuOTMyIDIxLjMzOTdDMzQuMzI1NiAyMS4zNjk3IDM0LjY4NTYgMjEuNTMyOSAzNC45ODggMjEuNzc4OUMzNS40NDY0IDIyLjE1MDkgMzUuNzggMjIuNzA4OSAzNS45OSAyMy4yOTkzQzM2LjMxODggMjQuMjE3MyAzNi40MDc2IDI1LjM4NzMgMzYuMDY2OCAyNi4zODMzQzM2LjE1MzIgMjYuNDI0MSAzNi4yMzg0IDI2LjQ3MjEgMzYuMzIxMiAyNi41MjczQzM2LjY1MTIgMjYuNzQ2OSAzNi45MDIgMjcuMDYxMyAzNy4wODY4IDI3LjQzMjFDMzcuNDUwNCAyOC4xNTgxIDM3LjYwMDQgMjkuMTcwOSAzNy42MDA0IDMwLjQwMDlDMzcuNjAwNCAzMS43NzAxIDM3LjA3ODQgMzIuNjg5MyAzNi40MTYgMzMuMjU2OUMzNi4wNDk3IDMzLjU3MSAzNS42MTc0IDMzLjc5ODYgMzUuMTUxMiAzMy45MjI5QzM1LjAzMTIgMzQuNTkyNSAzNC42OTUyIDM1LjM2NzcgMzQuMTY4NCAzNi4wMjUzQzMzLjQ4NDQgMzYuODgzMyAzMi40MjM2IDM3LjYwMDkgMzEuMDAwNCAzNy42MDA5QzI5Ljg3MjQgMzcuNjAwOSAyOC45NzQ4IDM2Ljk3NjkgMjguMzkxNiAzNi4zNjQ5QzI4LjI1MjIgMzYuMjE4OCAyOC4xMjE1IDM2LjA2NDUgMjguMDAwNCAzNS45MDI5QzI3Ljg3OTMgMzYuMDY0NSAyNy43NDg2IDM2LjIxODggMjcuNjA5MiAzNi4zNjQ5QzI3LjAyNiAzNi45NzY5IDI2LjEyOTYgMzcuNjAwOSAyNS4wMDA0IDM3LjYwMDlDMjMuNTc3MiAzNy42MDA5IDIyLjUxNzYgMzYuODgzMyAyMS44MzI0IDM2LjAyNTNDMjEuMzQwMSAzNS40MTQgMjEuMDAyOSAzNC42OTI3IDIwLjg0OTYgMzMuOTIyOUMyMC4zODM0IDMzLjc5ODYgMTkuOTUxMSAzMy41NzEgMTkuNTg0OCAzMy4yNTY5QzE4LjkyMjQgMzIuNjg5MyAxOC40MDA0IDMxLjc2ODkgMTguNDAwNCAzMC40MDA5QzE4LjQwMDQgMjkuMTcwOSAxOC41NTE2IDI4LjE1NjkgMTguOTE0IDI3LjQzMjFDMTkuMDg1NyAyNy4wNjg1IDE5LjM0OTcgMjYuNzU2MSAxOS42Nzk2IDI2LjUyNjFDMTkuNzYwNiAyNi40NzI1IDE5Ljg0NTcgMjYuNDI1MSAxOS45MzQgMjYuMzg0NUMxOS41OTMyIDI1LjM4NjEgMTkuNjgyIDI0LjIxNzMgMjAuMDEwOCAyMy4yOTkzQzIwLjIyMDggMjIuNzA4OSAyMC41NTQ0IDIyLjE1MDkgMjEuMDEyOCAyMS43Nzg5QzIxLjMxNTIgMjEuNTMyOSAyMS42NzUyIDIxLjM3MDkgMjIuMDY4OCAyMS4zMzk3QzIyLjI0MTYgMjAuNTIwMSAyMi43MjY0IDE5Ljg0MjEgMjMuMzU2NCAxOS4zNTI1Wk0yNy40MDA0IDIxLjQwMDlWMjEuMzg4OUwyNy4zOTggMjEuMzI4OUMyNy4zODAzIDIxLjAxNjEgMjcuMzE4MSAyMC43MDc0IDI3LjIxMzIgMjAuNDEyMUMyNy4xMzg1IDIwLjE4OTIgMjcuMDExMyAxOS45ODc2IDI2Ljg0MjQgMTkuODI0MUMyNi42NjUxIDE5LjY2OTggMjYuNDM1MiAxOS41ODk4IDI2LjIwMDQgMTkuNjAwOUMyNS40NDA3IDE5LjU5ODMgMjQuNzAwOSAxOS44NDM1IDI0LjA5MzIgMjAuMjk5M0MyMy41MzY0IDIwLjczMjUgMjMuMjAwNCAyMS4zMTkzIDIzLjIwMDQgMjIuMDAwOUMyMy4yMDAzIDIyLjA5NTkgMjMuMTc3NyAyMi4xODk2IDIzLjEzNDMgMjIuMjc0MUMyMy4wOTEgMjIuMzU4NyAyMy4wMjgyIDIyLjQzMTggMjIuOTUxMSAyMi40ODczQzIyLjg3NCAyMi41NDI4IDIyLjc4NDggMjIuNTc5MyAyMi42OTA5IDIyLjU5MzZDMjIuNTk2OSAyMi42MDc5IDIyLjUwMDkgMjIuNTk5NyAyMi40MTA4IDIyLjU2OTdDMjIuMTg1MiAyMi40OTUzIDIxLjk4MzYgMjIuNTM3MyAyMS43Njg4IDIyLjcxMDFDMjEuNTMzNiAyMi45MDIxIDIxLjMwNDQgMjMuMjQyOSAyMS4xNCAyMy43MDI1QzIwLjgwNTIgMjQuNjQwOSAyMC44NCAyNS43NzczIDIxLjI5OTYgMjYuNDY4NUMyMS4zNjUyIDI2LjU2NyAyMS40MDAzIDI2LjY4MjYgMjEuNDAwNCAyNi44MDA5SDIyLjMwMDRDMjMuMDE2NSAyNi44MDA5IDIzLjcwMzIgMjcuMDg1NCAyNC4yMDk2IDI3LjU5MTdDMjQuNzE1OSAyOC4wOTgxIDI1LjAwMDQgMjguNzg0OCAyNS4wMDA0IDI5LjUwMDlWMjkuOTAyOUMyNS40MDA3IDMwLjA0NDUgMjUuNzM4MSAzMC4zMjMgMjUuOTUzIDMwLjY4OTJDMjYuMTY3OCAzMS4wNTU1IDI2LjI0NjMgMzEuNDg1OSAyNi4xNzQ1IDMxLjkwNDRDMjYuMTAyNyAzMi4zMjI5IDI1Ljg4NTIgMzIuNzAyNSAyNS41NjA2IDMyLjk3NjJDMjUuMjM1OSAzMy4yNDk5IDI0LjgyNSAzMy40IDI0LjQwMDQgMzMuNEMyMy45NzU4IDMzLjQgMjMuNTY0OCAzMy4yNDk5IDIzLjI0MDIgMzIuOTc2MkMyMi45MTU2IDMyLjcwMjUgMjIuNjk4MSAzMi4zMjI5IDIyLjYyNjMgMzEuOTA0NEMyMi41NTQ1IDMxLjQ4NTkgMjIuNjMzIDMxLjA1NTUgMjIuODQ3OCAzMC42ODkyQzIzLjA2MjcgMzAuMzIzIDIzLjQwMDEgMzAuMDQ0NSAyMy44MDA0IDI5LjkwMjlWMjkuNTAwOUMyMy44MDA0IDI4LjY3MjkgMjMuMTI4NCAyOC4wMDA5IDIyLjMwMDQgMjguMDAwOUgyMC4yMDA0QzIwLjEyODcgMjguMDAwOCAyMC4wNTc1IDI3Ljk4NzggMTkuOTkwNCAyNy45NjI1TDE5Ljk4NjggMjcuOTY5N0MxOS43NDkyIDI4LjQ0MzcgMTkuNjAwNCAyOS4yMzA5IDE5LjYwMDQgMzAuNDAwOUMxOS42MDA0IDMxLjQzMTcgMTkuOTc4NCAzMi4wMTI1IDIwLjM2NiAzMi4zNDQ5QzIwLjc4MjQgMzIuNzAyNSAyMS4yNDQ0IDMyLjgwMDkgMjEuNDAwNCAzMi44MDA5QzIxLjU1OTUgMzIuODAwOSAyMS43MTIxIDMyLjg2NDEgMjEuODI0NyAzMi45NzY3QzIxLjkzNzIgMzMuMDg5MiAyMi4wMDA0IDMzLjI0MTggMjIuMDAwNCAzMy40MDA5QzIyLjAwMDQgMzMuODQyNSAyMi4yNDA0IDM0LjYxNDEgMjIuNzY4NCAzNS4yNzY1QzIzLjI4MzIgMzUuOTE4NSAyNC4wMjM2IDM2LjQwMDkgMjUuMDAwNCAzNi40MDA5QzI1LjY3MjQgMzYuNDAwOSAyNi4yNzQ4IDM2LjAyNTMgMjYuNzQwNCAzNS41MzY5QzI2Ljk2OTYgMzUuMjk2OSAyNy4xNDg0IDM1LjA0ODUgMjcuMjY0OCAzNC44NDQ1QzI3LjMxNzggMzQuNzU0MSAyNy4zNjMxIDM0LjY1OTMgMjcuNDAwNCAzNC41NjEzVjI1LjAwMDlIMjYuMDk4NEMyNS45NTY5IDI1LjQwMTIgMjUuNjc4MyAyNS43Mzg3IDI1LjMxMjEgMjUuOTUzNUMyNC45NDU5IDI2LjE2ODMgMjQuNTE1NCAyNi4yNDY4IDI0LjA5NyAyNi4xNzVDMjMuNjc4NSAyNi4xMDMyIDIzLjI5ODggMjUuODg1OCAyMy4wMjUxIDI1LjU2MTFDMjIuNzUxNCAyNS4yMzY1IDIyLjYwMTMgMjQuODI1NSAyMi42MDEzIDI0LjQwMDlDMjIuNjAxMyAyMy45NzYzIDIyLjc1MTQgMjMuNTY1NCAyMy4wMjUxIDIzLjI0MDdDMjMuMjk4OCAyMi45MTYxIDIzLjY3ODUgMjIuNjk4NiAyNC4wOTcgMjIuNjI2OEMyNC41MTU0IDIyLjU1NSAyNC45NDU5IDIyLjYzMzUgMjUuMzEyMSAyMi44NDgzQzI1LjY3ODMgMjMuMDYzMiAyNS45NTY5IDIzLjQwMDYgMjYuMDk4NCAyMy44MDA5SDI3LjQwMDRWMjEuNDAwOVpNMjguNjAwNCAzMy4zOTk3VjM0LjU2MDFDMjguNjM3NyAzNC42NTgxIDI4LjY4MyAzNC43NTI4IDI4LjczNiAzNC44NDMzQzI4Ljg1MzYgMzUuMDQ3MyAyOS4wMzEyIDM1LjI5NTcgMjkuMjU5MiAzNS41MzU3QzI5LjcyNiAzNi4wMjQxIDMwLjMyOTYgMzYuMzk5NyAzMS4wMDA0IDM2LjM5OTdDMzEuOTc3MiAzNi4zOTk3IDMyLjcxNzYgMzUuOTE3MyAzMy4yMzI0IDM1LjI3NTNDMzMuNzYwNCAzNC42MTI5IDM0LjAwMDQgMzMuODQxMyAzNC4wMDA0IDMzLjM5OTdDMzQuMDAwNCAzMy4yNDA2IDM0LjA2MzYgMzMuMDg4IDM0LjE3NjEgMzIuOTc1NUMzNC4yODg2IDMyLjg2MjkgMzQuNDQxMyAzMi43OTk3IDM0LjYwMDQgMzIuNzk5N0MzNC43NTY0IDMyLjc5OTcgMzUuMjE4NCAzMi43MDEzIDM1LjYzNDggMzIuMzQzN0MzNi4wMjI0IDMyLjAxMTMgMzYuNDAwNCAzMS40MzA1IDM2LjQwMDQgMzAuMzk5N0MzNi40MDA0IDI5LjIyOTcgMzYuMjUwNCAyOC40NDM3IDM2LjAxNCAyNy45Njg1QzM1LjkzNDkgMjcuNzkxNiAzNS44MTA4IDI3LjYzODUgMzUuNjU0IDI3LjUyNDVDMzUuNTE4OSAyNy40MzgxIDM1LjM2MDYgMjcuMzk1IDM1LjIwMDQgMjcuNDAwOUMzNS4wOTE5IDI3LjQwMDkgMzQuOTg1NCAyNy4zNzE0IDM0Ljg5MjMgMjcuMzE1NkMzNC43OTkyIDI3LjI1OTggMzQuNzIzIDI3LjE3OTggMzQuNjcxNyAyNy4wODQxQzM0LjYyMDUgMjYuOTg4NCAzNC41OTYyIDI2Ljg4MDcgMzQuNjAxNCAyNi43NzIzQzM0LjYwNjYgMjYuNjYzOCAzNC42NDExIDI2LjU1ODkgMzQuNzAxMiAyNi40Njg1QzM1LjE2MiAyNS43NzczIDM1LjE5NTYgMjQuNjQwOSAzNC44NjA4IDIzLjcwMjVDMzQuNjk2NCAyMy4yNDI5IDM0LjQ2NzIgMjIuOTAwOSAzNC4yMzIgMjIuNzEwMUMzNC4wMTcyIDIyLjUzNzMgMzMuODE1NiAyMi40OTQxIDMzLjU5IDIyLjU2OTdDMzMuNDk5OCAyMi41OTk3IDMzLjQwMzggMjIuNjA3OSAzMy4zMDk5IDIyLjU5MzZDMzMuMjE2IDIyLjU3OTMgMzMuMTI2OCAyMi41NDI4IDMzLjA0OTcgMjIuNDg3M0MzMi45NzI2IDIyLjQzMTggMzIuOTA5OCAyMi4zNTg3IDMyLjg2NjQgMjIuMjc0MUMzMi44MjMxIDIyLjE4OTYgMzIuODAwNSAyMi4wOTU5IDMyLjgwMDQgMjIuMDAwOUMzMi44MDA0IDIxLjMxOTMgMzIuNDY0NCAyMC43MzI1IDMxLjkwNjQgMjAuMjk5M0MzMS4yOTkgMTkuODQzOCAzMC41NTk2IDE5LjU5ODYgMjkuODAwNCAxOS42MDA5QzI5LjU2NTYgMTkuNTg5OCAyOS4zMzU2IDE5LjY2OTggMjkuMTU4NCAxOS44MjQxQzI4Ljk4ODkgMTkuOTg3NCAyOC44NjEzIDIwLjE4OTEgMjguNzg2NCAyMC40MTIxQzI4LjY3MjEgMjAuNzI1NiAyOC42MDkzIDIxLjA1NTQgMjguNjAwNCAyMS4zODg5VjMyLjIwMDlIMjkuNTAwNEMzMC4zMjg0IDMyLjIwMDkgMzEuMDAwNCAzMS41Mjg5IDMxLjAwMDQgMzAuNzAwOVYyOC40OTg5QzMwLjYwMDEgMjguMzU3NCAzMC4yNjI3IDI4LjA3ODkgMzAuMDQ3OCAyNy43MTI2QzI5LjgzMyAyNy4zNDY0IDI5Ljc1NDUgMjYuOTE2IDI5LjgyNjMgMjYuNDk3NUMyOS44OTgxIDI2LjA3OSAzMC4xMTU2IDI1LjY5OTMgMzAuNDQwMiAyNS40MjU3QzMwLjc2NDggMjUuMTUyIDMxLjE3NTggMjUuMDAxOSAzMS42MDA0IDI1LjAwMTlDMzIuMDI1IDI1LjAwMTkgMzIuNDM1OSAyNS4xNTIgMzIuNzYwNiAyNS40MjU3QzMzLjA4NTIgMjUuNjk5MyAzMy4zMDI3IDI2LjA3OSAzMy4zNzQ1IDI2LjQ5NzVDMzMuNDQ2MyAyNi45MTYgMzMuMzY3OCAyNy4zNDY0IDMzLjE1MyAyNy43MTI2QzMyLjkzODEgMjguMDc4OSAzMi42MDA3IDI4LjM1NzQgMzIuMjAwNCAyOC40OTg5VjMwLjcwMDlDMzIuMjAwNCAzMS40MTcgMzEuOTE1OSAzMi4xMDM4IDMxLjQwOTYgMzIuNjEwMUMzMC45MDMyIDMzLjExNjUgMzAuMjE2NSAzMy40MDA5IDI5LjUwMDQgMzMuNDAwOUgyOC42MDA0VjMzLjM5OTdaTTIzLjgwMDQgMjQuNDAwOUMyMy44MDA0IDI0LjU2MDEgMjMuODYzNiAyNC43MTI3IDIzLjk3NjEgMjQuODI1MkMyNC4wODg2IDI0LjkzNzcgMjQuMjQxMyAyNS4wMDA5IDI0LjQwMDQgMjUuMDAwOUMyNC41NTk1IDI1LjAwMDkgMjQuNzEyMSAyNC45Mzc3IDI0LjgyNDcgMjQuODI1MkMyNC45MzcyIDI0LjcxMjcgMjUuMDAwNCAyNC41NjAxIDI1LjAwMDQgMjQuNDAwOUMyNS4wMDA0IDI0LjI0MTggMjQuOTM3MiAyNC4wODkyIDI0LjgyNDcgMjMuOTc2N0MyNC43MTIxIDIzLjg2NDEgMjQuNTU5NSAyMy44MDA5IDI0LjQwMDQgMjMuODAwOUMyNC4yNDEzIDIzLjgwMDkgMjQuMDg4NiAyMy44NjQxIDIzLjk3NjEgMjMuOTc2N0MyMy44NjM2IDI0LjA4OTIgMjMuODAwNCAyNC4yNDE4IDIzLjgwMDQgMjQuNDAwOVpNMzEuNjAwNCAyNy40MDA5QzMxLjc1OTUgMjcuNDAwOSAzMS45MTIxIDI3LjMzNzcgMzIuMDI0NyAyNy4yMjUyQzMyLjEzNzIgMjcuMTEyNyAzMi4yMDA0IDI2Ljk2MDEgMzIuMjAwNCAyNi44MDA5QzMyLjIwMDQgMjYuNjQxOCAzMi4xMzcyIDI2LjQ4OTIgMzIuMDI0NyAyNi4zNzY3QzMxLjkxMjEgMjYuMjY0MSAzMS43NTk1IDI2LjIwMDkgMzEuNjAwNCAyNi4yMDA5QzMxLjQ0MTMgMjYuMjAwOSAzMS4yODg2IDI2LjI2NDEgMzEuMTc2MSAyNi4zNzY3QzMxLjA2MzYgMjYuNDg5MiAzMS4wMDA0IDI2LjY0MTggMzEuMDAwNCAyNi44MDA5QzMxLjAwMDQgMjYuOTYwMSAzMS4wNjM2IDI3LjExMjcgMzEuMTc2MSAyNy4yMjUyQzMxLjI4ODYgMjcuMzM3NyAzMS40NDEzIDI3LjQwMDkgMzEuNjAwNCAyNy40MDA5Wk0yNC40MDA0IDMxLjAwMDlDMjQuMjQxMyAzMS4wMDA5IDI0LjA4ODYgMzEuMDY0MSAyMy45NzYxIDMxLjE3NjdDMjMuODYzNiAzMS4yODkyIDIzLjgwMDQgMzEuNDQxOCAyMy44MDA0IDMxLjYwMDlDMjMuODAwNCAzMS43NjAxIDIzLjg2MzYgMzEuOTEyNyAyMy45NzYxIDMyLjAyNTJDMjQuMDg4NiAzMi4xMzc3IDI0LjI0MTMgMzIuMjAwOSAyNC40MDA0IDMyLjIwMDlDMjQuNTU5NSAzMi4yMDA5IDI0LjcxMjEgMzIuMTM3NyAyNC44MjQ3IDMyLjAyNTJDMjQuOTM3MiAzMS45MTI3IDI1LjAwMDQgMzEuNzYwMSAyNS4wMDA0IDMxLjYwMDlDMjUuMDAwNCAzMS40NDE4IDI0LjkzNzIgMzEuMjg5MiAyNC44MjQ3IDMxLjE3NjdDMjQuNzEyMSAzMS4wNjQxIDI0LjU1OTUgMzEuMDAwOSAyNC40MDA0IDMxLjAwMDlaXCIgZmlsbD1cIiMwMzk4NTVcIi8+PHJlY3QgeD1cIjRcIiB5PVwiNFwiIHdpZHRoPVwiNDhcIiBoZWlnaHQ9XCI0OFwiIHJ4PVwiMjRcIiBzdHJva2U9XCIjRUNGREYzXCIgc3Ryb2tlLXdpZHRoPVwiOFwiLz48L3N2Zz5gLFxyXG4gICAgICAgIHRpdGxlOiBgRG9uJ3QgcnVuIEFJIG9uIGltYWdlIHVwbG9hZGVkYCxcclxuICAgICAgICBjb250ZW50OiBgRG8geW91IHdpc2ggdG8gbm90IHJ1biBBSSBpbiB0aGUgaW1hZ2U/YCxcclxuICAgICAgICBidXR0b250eXBlOiAnY29uZmlybSdcclxuICAgICAgfVxyXG4gICAgICBkaWFsb2dSZWYucmVzdWx0LnRoZW4oKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcykge1xyXG4gICAgICAgICAgdGhpcy5ydW5BSU9mZihzSWR4LHFJZHgsZmFsc2UsYW5zSWR4KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5nZXRBbnN3ZXJGb3JtR3JvdXBfRm9ybUNvbnRyb2woc0lkeCwgcUlkeCwgJ3J1bkFJJyk/LnBhdGNoVmFsdWUodHJ1ZSk7XHJcbiAgICAgICAgICB0aGlzLmdldFF1ZXN0aW9uRm9ybUNvbnRyb2woc0lkeCwgcUlkeCwgJ3J1bkFJJyk/LnBhdGNoVmFsdWUodHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJ1bkFJT2ZmKHNJZHg6IG51bWJlciwgcUlkeDogbnVtYmVyLCBzaG93RXJyb3I/OiBib29sZWFuLGFuc0lkeDpudW1iZXI9LTEpIHtcclxuICAgIGNvbnN0IGFuc3dlckZvcm1Hcm91cCA9IHRoaXMuZ2V0QW5zd2VyRm9ybUdyb3VwX0Zvcm1Db250cm9sKHNJZHgsIHFJZHgsICdydW5BSScsYW5zSWR4KTtcclxuICAgIGlmIChhbnN3ZXJGb3JtR3JvdXApIHtcclxuICAgICAgYW5zd2VyRm9ybUdyb3VwLnBhdGNoVmFsdWUoZmFsc2UpO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgY29uc3QgcXVlc3Rpb25Db250cm9sID0gdGhpcy5nZXRRdWVzdGlvbkZvcm1Db250cm9sKHNJZHgsIHFJZHgsICdydW5BSScsYW5zSWR4KTtcclxuICAgIGlmIChxdWVzdGlvbkNvbnRyb2wpIHtcclxuICAgICAgcXVlc3Rpb25Db250cm9sLnBhdGNoVmFsdWUoZmFsc2UpO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgLy8gY29uc29sZS5sb2cocXVlc3Rpb25Db250cm9sKTtcclxuICAgIFxyXG4gICAgY29uc3QgZGVzY3JpcHRpb25Db250cm9sID0gdGhpcy5nZXRRdWVzdGlvbkZvcm1Db250cm9sKHNJZHgsIHFJZHgsICdydW5BSURlc2NyaXB0aW9uJyxhbnNJZHgpO1xyXG4gICAgaWYgKGRlc2NyaXB0aW9uQ29udHJvbCkge1xyXG4gICAgICBkZXNjcmlwdGlvbkNvbnRyb2wucGF0Y2hWYWx1ZSgnJyk7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBpZiAoc2hvd0Vycm9yKSB7XHJcbiAgICAgIHRoaXMuc3dhbFRvYXN0KCdVbmFibGUgdG8gcHJvY2VzcyBydW5BSSByZXF1ZXN0ISBUcnkgYWdhaW4gYWZ0ZXIgc29tZSB0aW1lIScsJ2Vycm9yJyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG5cclxuICBnZXRTZWN0aW9uRm9ybUFycmF5KCkge1xyXG4gICAgcmV0dXJuICh0aGlzLkNoZWNrbGlzdEZvcm0uZ2V0KCdzZWN0aW9ucycpIGFzIEZvcm1BcnJheSk7XHJcbiAgfVxyXG5cclxuICBnZXRGb3JtQ29udHJvbChmb3JtQ29udHJvbDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gKHRoaXMuQ2hlY2tsaXN0Rm9ybS5nZXQoZm9ybUNvbnRyb2wpIGFzIEZvcm1Db250cm9sKTtcclxuICB9XHJcblxyXG4gIGdldFNlY3Rpb25Gb3JtQ29udHJvbChzZWN0aW9uSW5kZXg6IG51bWJlciwgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICh0aGlzLkNoZWNrbGlzdEZvcm0uZ2V0KCdzZWN0aW9ucycpIGFzIEZvcm1BcnJheSlcclxuICAgICAgICAuYXQoc2VjdGlvbkluZGV4KSBhcyBGb3JtR3JvdXApXHJcbiAgICAgIC5nZXQoZm9ybUNvbnRyb2xOYW1lKTtcclxuICB9XHJcblxyXG4gIGdldFF1ZXN0aW9uRm9ybUNvbnRyb2woc2VjdGlvbkluZGV4OiBudW1iZXIsIHF1ZXN0aW9uSW5kZXg6IG51bWJlciwgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmcsYW5zSWR4Om51bWJlciA9IC0xKSB7XHJcbiAgICBjb25zdCBzZWN0aW9ucyA9IHRoaXMuQ2hlY2tsaXN0Rm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5IHwgbnVsbDtcclxuICAgIGlmICghc2VjdGlvbnMpIHJldHVybiBudWxsO1xyXG4gIFxyXG4gICAgY29uc3Qgc2VjdGlvbiA9IHNlY3Rpb25zLmF0KHNlY3Rpb25JbmRleCkgYXMgRm9ybUdyb3VwIHwgbnVsbDtcclxuICAgIGlmICghc2VjdGlvbikgcmV0dXJuIG51bGw7XHJcbiAgXHJcbiAgICBjb25zdCBxdWVzdGlvbnMgPSBzZWN0aW9uLmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5IHwgbnVsbDtcclxuICAgIGlmICghcXVlc3Rpb25zKSByZXR1cm4gbnVsbDtcclxuICBcclxuICAgIGxldCBxdWVzdGlvbiA9IHF1ZXN0aW9ucy5hdChxdWVzdGlvbkluZGV4KSBhcyBGb3JtR3JvdXAgfCBudWxsO1xyXG4gICAgaWYgKCFxdWVzdGlvbikgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgaWYoYW5zSWR4ICE9IC0xKSB7XHJcbiAgICAgIGxldCBhbnN3ZXJMaXN0ID0gcXVlc3Rpb24uZ2V0KCdhbnN3ZXJzJykgYXMgRm9ybUFycmF5IHwgbnVsbDtcclxuICAgICAgaWYoIWFuc3dlckxpc3QpIHJldHVybiBudWxsO1xyXG4gICAgICBxdWVzdGlvbiA9IGFuc3dlckxpc3QuYXQoYW5zSWR4KSBhcyBGb3JtR3JvdXAgfCBudWxsO1xyXG4gICAgICBpZighcXVlc3Rpb24pIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgY29uc3QgY29udHJvbCA9IHF1ZXN0aW9uLmdldChmb3JtQ29udHJvbE5hbWUpIGFzIEZvcm1Db250cm9sIHwgbnVsbDtcclxuICAgIHJldHVybiBjb250cm9sO1xyXG4gIH1cclxuICBcclxuXHJcbiAgZ2V0Rm9ybUFycmF5UXVlc3Rpb25zKHNlY3Rpb25JbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gKCh0aGlzLkNoZWNrbGlzdEZvcm0uZ2V0KCdzZWN0aW9ucycpIGFzIEZvcm1BcnJheSkuYXQoc2VjdGlvbkluZGV4KS5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheSk7XHJcbiAgfVxyXG5cclxuICAvLyBpbmRpdmlkdWFsIHF1ZXN0aW9uXHJcbiAgZ2V0UXVlc3Rpb25zRm9ybUdyb3VwKHNlY3Rpb25JbmRleDogbnVtYmVyLCBxdWVzdGlvbkluZGV4OiBudW1iZXIpIHtcclxuICAgIHJldHVybiAoKCh0aGlzLkNoZWNrbGlzdEZvcm0uZ2V0KCdzZWN0aW9ucycpIGFzIEZvcm1BcnJheSkuYXQoc2VjdGlvbkluZGV4KS5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheSkuYXQocXVlc3Rpb25JbmRleCkgYXMgRm9ybUdyb3VwKTtcclxuICB9XHJcblxyXG4gIGdldEZvcm1BcnJheVF1ZXN0aW9uc0Fuc3dlcihzZWN0aW9uSW5kZXg6IG51bWJlciwgcXVlc3Rpb25JbmRleDogbnVtYmVyLCBmb3JtQXJyYXlOYW1lOiBzdHJpbmcsYW5zSW5kZXg6bnVtYmVyID0gLTEsbGlua3F1ZXN0aW9uSW5kZXg6bnVtYmVyID0gLTEpIHtcclxuICAgIGxldCBzZWN0aW9uID0gKCh0aGlzLkNoZWNrbGlzdEZvcm0uZ2V0KCdzZWN0aW9ucycpIGFzIEZvcm1BcnJheSk/LmF0KHNlY3Rpb25JbmRleCkgYXMgRm9ybUdyb3VwKTtcclxuICAgIGxldCBxdWVzdGlvbnMgPSAoKHNlY3Rpb24uZ2V0KCdxdWVzdGlvbnMnKSBhcyBGb3JtQXJyYXkpPy5hdChxdWVzdGlvbkluZGV4KSBhcyBGb3JtR3JvdXApO1xyXG4gICAgaWYoYW5zSW5kZXggPT0gLTEpIHtcclxuICAgICAgcmV0dXJuIChxdWVzdGlvbnMuZ2V0KGZvcm1BcnJheU5hbWUpIGFzIEZvcm1BcnJheSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgbGV0IGFuc3dlcnMgPSAoKHF1ZXN0aW9ucy5nZXQoJ2Fuc3dlcnMnKSBhcyBGb3JtQXJyYXkpPy5hdChhbnNJbmRleCkgYXMgRm9ybUdyb3VwKTtcclxuICAgICAgbGV0IGxpbmtlZEluZGV4ID0gKChhbnN3ZXJzLmdldCgnbGlua1F1ZXN0aW9uQW5zd2VycycpIGFzIEZvcm1BcnJheSkuYXQobGlua3F1ZXN0aW9uSW5kZXgpIGFzIEZvcm1Hcm91cCk7XHJcbiAgICAgIHJldHVybiAobGlua2VkSW5kZXguZ2V0KCdhbnN3ZXJzJykgYXMgRm9ybUFycmF5KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Rm9ybUFycmF5TGlua2VkUXVlc3Rpb25zKHNlY3Rpb25JbmRleDogbnVtYmVyLCBxdWVzdGlvbkluZGV4OiBudW1iZXIsYW5zd2VySW5kZXg6bnVtYmVyKSB7XHJcbiAgICBsZXQgc2VjdGlvbiA9ICgodGhpcy5DaGVja2xpc3RGb3JtLmdldCgnc2VjdGlvbnMnKSBhcyBGb3JtQXJyYXkpPy5hdChzZWN0aW9uSW5kZXgpIGFzIEZvcm1Hcm91cCk7XHJcbiAgICBsZXQgcXVlc3Rpb25zID0gKChzZWN0aW9uLmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5KT8uYXQocXVlc3Rpb25JbmRleCkgYXMgRm9ybUdyb3VwKTtcclxuICAgIGxldCBhbnN3ZXIgPSAocXVlc3Rpb25zLmdldCgnYW5zd2VycycpIGFzIEZvcm1BcnJheSk/LmF0KGFuc3dlckluZGV4KSBhcyBGb3JtR3JvdXA7XHJcbiAgICByZXR1cm4gKGFuc3dlci5nZXQoJ2xpbmtRdWVzdGlvbkFuc3dlcnMnKSBhcyBGb3JtQXJyYXkpXHJcbiAgfVxyXG5cclxuICBnZXRRdWVzdGlvbnNGb3JtQXJyYXlWYWx1ZXMoc2VjdGlvbkluZGV4OiBudW1iZXIpOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gKCh0aGlzLkNoZWNrbGlzdEZvcm0uZ2V0KCdzZWN0aW9ucycpIGFzIEZvcm1BcnJheSkuYXQoc2VjdGlvbkluZGV4KS5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheSkuZ2V0UmF3VmFsdWUoKSB8fCBbXTtcclxuICB9XHJcblxyXG4gIC8vIG9uS2V5ZG93bihldmVudDogYW55KSB7XHJcbiAgLy8gICBpZiAoZXZlbnQua2V5ID09PSBcIkVudGVyXCIpIHtcclxuICAvLyAgICAgdGhpcy5hZGR2YWx1ZSA9IGZhbHNlO1xyXG4gIC8vICAgfVxyXG4gIC8vIH1cclxuXHJcbiAgZ2V0QW5zd2VyRm9ybUdyb3VwX0Zvcm1Db250cm9sKHNlY3Rpb25JbmRleDogbnVtYmVyLCBxdWVzdGlvbkluZGV4OiBudW1iZXIsIGZvcm1Db250cm9sTmFtZTogc3RyaW5nLGFuc0lkeDpudW1iZXI9IC0xKSB7XHJcbiAgICBjb25zdCBzZWN0aW9ucyA9IHRoaXMuQ2hlY2tsaXN0Rm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5IHwgbnVsbDtcclxuICAgIGlmICghc2VjdGlvbnMpIHJldHVybiBudWxsO1xyXG4gIFxyXG4gICAgY29uc3Qgc2VjdGlvbiA9IHNlY3Rpb25zLmF0KHNlY3Rpb25JbmRleCkgYXMgRm9ybUdyb3VwIHwgbnVsbDtcclxuICAgIGlmICghc2VjdGlvbikgcmV0dXJuIG51bGw7XHJcbiAgXHJcbiAgICBjb25zdCBxdWVzdGlvbnMgPSBzZWN0aW9uLmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5IHwgbnVsbDtcclxuICAgIGlmICghcXVlc3Rpb25zKSByZXR1cm4gbnVsbDtcclxuICBcclxuICAgIGNvbnN0IHF1ZXN0aW9uID0gcXVlc3Rpb25zLmF0KHF1ZXN0aW9uSW5kZXgpIGFzIEZvcm1Hcm91cCB8IG51bGw7XHJcbiAgICBpZiAoIXF1ZXN0aW9uKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBpZihmb3JtQ29udHJvbE5hbWUgPT0gJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKSB7XHJcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBxdWVzdGlvbi5nZXQoZm9ybUNvbnRyb2xOYW1lKSBhcyBGb3JtQ29udHJvbCB8IG51bGw7XHJcbiAgICAgIHJldHVybiBjb250cm9sO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIGxldCBhbnN3ZXJzID0gcXVlc3Rpb24uZ2V0KCdhbnN3ZXJzJykgYXMgRm9ybUdyb3VwIHwgbnVsbDtcclxuICAgICAgaWYgKCFhbnN3ZXJzKSByZXR1cm4gbnVsbDtcclxuICBcclxuICAgICAgaWYoYW5zSWR4ICE9IC0xKSB7XHJcbiAgXHJcbiAgICAgICAgbGV0IGFuc3dlckxpc3QgPSBxdWVzdGlvbi5nZXQoJ2Fuc3dlcnMnKSBhcyBGb3JtQXJyYXkgfCBudWxsO1xyXG4gICAgICAgIGlmKCFhbnN3ZXJMaXN0KSByZXR1cm4gbnVsbDtcclxuICAgICAgICBhbnN3ZXJzID0gYW5zd2VyTGlzdC5hdChhbnNJZHgpIGFzIEZvcm1Hcm91cCB8IG51bGw7XHJcbiAgICAgICAgaWYgKCFhbnN3ZXJzKSByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgY29uc3QgY29udHJvbCA9IGFuc3dlcnMuZ2V0KGZvcm1Db250cm9sTmFtZSkgYXMgRm9ybUNvbnRyb2wgfCBudWxsO1xyXG4gICAgICBcclxuICAgICAgcmV0dXJuIGNvbnRyb2w7XHJcbiAgICB9XHJcbiAgXHJcbiAgfVxyXG5cclxuICByZW1vdmVkTmVzdGVkUXVlc3Rpb24oc2VjdGlvbmluZGV4OiBudW1iZXIscW5vOmFueSkge1xyXG4gICAgbGV0IHF1ZXN0aW9ucyA9ICh0aGlzLmdldFNlY3Rpb25Gb3JtQXJyYXkoKS5hdChzZWN0aW9uaW5kZXgpLmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5KTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcXVlc3Rpb25zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBhbnN3ZXJzID0gKHF1ZXN0aW9ucy5hdChpKSBhcyBGb3JtR3JvdXApPy5nZXQoJ2Fuc3dlcnMnKSBhcyBGb3JtQXJyYXk7XHJcbiAgICAgIGlmKGFuc3dlcnMpIHtcclxuICAgICAgICBmb3IobGV0IGo9MDtqPGFuc3dlcnMubGVuZ3RoO2orKykge1xyXG4gICAgICAgICAgbGV0IGxpbmtlZCA9IChhbnN3ZXJzLmF0KGopIGFzIEZvcm1Hcm91cCk/LmdldCgnc2hvd0xpbmtlZCcpPy52YWx1ZTtcclxuICAgICAgICAgIGlmKGxpbmtlZCkge1xyXG4gICAgICAgICAgICBsZXQgcXVlc3Rpb25ObyA9IChhbnN3ZXJzLmF0KGopIGFzIEZvcm1Hcm91cCk/LmdldCgnbGlua2VkUXVlc3Rpb24nKT8udmFsdWU7XHJcbiAgICAgICAgICAgIGlmKHF1ZXN0aW9uTm8gPT0gcW5vKSB7XHJcbiAgICAgICAgICAgICAgKGFuc3dlcnMuYXQoaikgYXMgRm9ybUdyb3VwKT8uZ2V0KCdsaW5rZWRRdWVzdGlvbicpPy5zZXRWYWx1ZSgwKTtcclxuICAgICAgICAgICAgICAoYW5zd2Vycy5hdChqKSBhcyBGb3JtR3JvdXApPy5nZXQoJ3Nob3dMaW5rZWQnKT8uc2V0VmFsdWUoZmFsc2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIFxyXG5cclxuICB1cGRhdGVRdWVzdGlvblFub3Moc2VjdGlvbmluZGV4OiBudW1iZXIpIHtcclxuICAgIGxldCBxdWVzdGlvbnMgPSAodGhpcy5nZXRTZWN0aW9uRm9ybUFycmF5KCkuYXQoc2VjdGlvbmluZGV4KS5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheSk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHF1ZXN0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAocXVlc3Rpb25zLmF0KGkpIGFzIEZvcm1Hcm91cCk/LmdldCgncW5vJyk/LnNldFZhbHVlKGkrMSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLkNoZWNrbGlzdEZvcm0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UXVlc3Rpb25zQW5zd2VyRm9ybUdyb3VwKHNlY3Rpb25JbmRleDogbnVtYmVyLCBxdWVzdGlvbkluZGV4OiBudW1iZXIsYW5zSW5kZXg6bnVtYmVyKSB7XHJcbiAgICByZXR1cm4gKCgoKCh0aGlzLkNoZWNrbGlzdEZvcm0uZ2V0KCdzZWN0aW9ucycpIGFzIEZvcm1BcnJheSkuYXQoc2VjdGlvbkluZGV4KS5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheSkuYXQocXVlc3Rpb25JbmRleCkgYXMgRm9ybUdyb3VwKS5nZXQoJ2Fuc3dlcnMnKSBhcyBGb3JtQXJyYXkpLmF0KGFuc0luZGV4KSBhcyBGb3JtR3JvdXApO1xyXG4gIH1cclxuXHJcbiAgc2V0QWN0aXZlUXVlc3Rpb24oc2VjSWR4OiBudW1iZXIsIHF1ZXN0aW9uSW5kZXg6IG51bWJlciwgYWN0aXZlc3RhdHVzOiBudW1iZXIsYW5zd2VySW5kZXg6bnVtYmVyID0gLTEpIHtcclxuICAgIGlmKGFjdGl2ZXN0YXR1cyA9PSAxKSB7XHJcbiAgICAgIGlmKGFuc3dlckluZGV4ICE9IC0xKSB7XHJcbiAgICAgICAgdGhpcy5nZXRRdWVzdGlvbnNBbnN3ZXJGb3JtR3JvdXAoc2VjSWR4LHF1ZXN0aW9uSW5kZXgsYW5zd2VySW5kZXgpLmFkZENvbnRyb2woJ2FjdGl2ZScsdGhpcy5mYi5jb250cm9sKHRydWUpKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmdldFF1ZXN0aW9uc0Zvcm1Hcm91cChzZWNJZHgscXVlc3Rpb25JbmRleCkuYWRkQ29udHJvbCgnYWN0aXZlJyx0aGlzLmZiLmNvbnRyb2wodHJ1ZSkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYoYW5zd2VySW5kZXggIT0gLTEpIHtcclxuICAgICAgICB0aGlzLmdldFF1ZXN0aW9uc0Fuc3dlckZvcm1Hcm91cChzZWNJZHgscXVlc3Rpb25JbmRleCxhbnN3ZXJJbmRleCkucmVtb3ZlQ29udHJvbCgnYWN0aXZlJyk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5nZXRRdWVzdGlvbnNGb3JtR3JvdXAoc2VjSWR4LHF1ZXN0aW9uSW5kZXgpLnJlbW92ZUNvbnRyb2woJ2FjdGl2ZScpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWxsb3dBZGRBbnN3ZXIoYW5zd2VyczogYW55W10pIHtcclxuICAgIHJldHVybiBhbnN3ZXJzLmxlbmd0aCA8IDMwO1xyXG4gIH1cclxuXHJcbiAgZ2V0UXVlc3Rpb25MaXN0KHNlY0lkeDpudW1iZXIscW50SWR4Om51bWJlcixhbnNJZHg6bnVtYmVyKSB7XHJcbiAgICAvLyBmb3IobGV0IGFuc3dlciBvZiBxdWVzdGlvbj8uYW5zd2Vycykge1xyXG4gICAgLy8gICAgICAgICBpZigoYW5zd2VyLmxpbmtlZFF1ZXN0aW9uICYmIGFuc3dlci5saW5rZWRRdWVzdGlvbiA9PSBgJHtxdWVzdGlvbi5xbm99YCAmJiBxdWVzdGlvbi5xbm8gPT0gKHFudElkeCsxKSkgfHwgKCFhbnN3ZXIubGlua2VkUXVlc3Rpb24ubGVuZ3RoICYmIHF1ZXN0aW9uLnFubyAhPSAocW50SWR4KzEpKSkge1xyXG4gICAgLy8gICAgICAgICAgICAgcXVlc3Rpb25MaXN0LnB1c2gocXVlc3Rpb24ucW5vKVxyXG4gICAgLy8gICAgICAgICB9XHJcbiAgICAvLyAgICAgICB9XHJcbiAgICBsZXQgcXVlc3Rpb25EZXRhaWxzID0gKCh0aGlzLkNoZWNrbGlzdEZvcm0uZ2V0KCdzZWN0aW9ucycpIGFzIEZvcm1BcnJheSkuYXQoc2VjSWR4KS5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheSkuZ2V0UmF3VmFsdWUoKSB8fCBbXTtcclxuICAgIFxyXG4gICAgbGV0IHF1ZXN0aW9uTGlzdDphbnkgPSBbXTtcclxuICAgIGxldCBsaW5rZWRRdWVzdGlvbnM6YW55ID0gW107XHJcbiAgICBpZihxdWVzdGlvbkRldGFpbHMubGVuZ3RoKSB7XHJcbiAgICAgIGZvcihsZXQgcXVlc3Rpb24gb2YgcXVlc3Rpb25EZXRhaWxzKSB7XHJcbiAgICAgICAgaWYocXVlc3Rpb24uYW5zd2Vycykge1xyXG4gICAgICAgICAgaWYoWyd2aWRlbycsJ2ltYWdlJywnZGVzY3JpcHRpdmVJbWFnZScsJ211bHRpcGxlSW1hZ2UnXS5pbmNsdWRlcyhxdWVzdGlvbi5hbnN3ZXJUeXBlKSkge1xyXG4gICAgICAgICAgICBxdWVzdGlvbi5hbnN3ZXJzID0gW3F1ZXN0aW9uLmFuc3dlcnNdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgIGZvcihsZXQgW2luZGV4LGFuc3dlcl0gb2YgcXVlc3Rpb24uYW5zd2Vycy5lbnRyaWVzKCkpIHtcclxuICAgICAgICAgICAgaWYoYW5zd2VyPy5saW5rZWRRdWVzdGlvbikge1xyXG4gICAgICAgICAgICAgIGxpbmtlZFF1ZXN0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHFubzpxdWVzdGlvbi5xbm8sXHJcbiAgICAgICAgICAgICAgICBhbnNJZHg6aW5kZXgsXHJcbiAgICAgICAgICAgICAgICBsaW5rZWRRdWVzdGlvbjpwYXJzZUludChhbnN3ZXIubGlua2VkUXVlc3Rpb24pXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICAvLyBxdWVzdGlvbkRldGFpbHMgPSBxdWVzdGlvbkRldGFpbHMuZmlsdGVyKChpdGVtOmFueSkgPT4gaXRlbS5xbm8gIT0gKHFudElkeCsxKSk7XHJcbiAgICAgIGZvcihsZXQgcXVlc3Rpb24gb2YgcXVlc3Rpb25EZXRhaWxzKSB7XHJcbiAgICAgICAgaWYocXVlc3Rpb24/LmFuc3dlcnMpIHtcclxuICAgICAgICAgIGxldCBmaW5kRXhpc3RzID0gbGlua2VkUXVlc3Rpb25zLmZpbmQoKGl0ZW06YW55KSA9PiAgaXRlbS5xbm8gPT0gcXVlc3Rpb24ucW5vICYmIGl0ZW0uYW5zSWR4ID09IGFuc0lkeCAmJiBpdGVtLnFubyA9PSAocW50SWR4KzEpKTtcclxuICAgICAgICAgIGxldCBjaGVja0xpbmtlZCA9IGxpbmtlZFF1ZXN0aW9ucy5maW5kKChpdGVtOmFueSkgPT4gaXRlbS5saW5rZWRRdWVzdGlvbiA9PSBxdWVzdGlvbi5xbm8pO1xyXG4gICAgICAgICAgICBpZighY2hlY2tMaW5rZWQgJiYgIWZpbmRFeGlzdHMgJiYgcXVlc3Rpb24ucW5vICE9IChxbnRJZHgrMSkgJiYgIXF1ZXN0aW9uTGlzdC5pbmNsdWRlcyhxdWVzdGlvbi5xbm8pKSB7XHJcbiAgICAgICAgICAgICAgcXVlc3Rpb25MaXN0LnB1c2gocXVlc3Rpb24ucW5vKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZihmaW5kRXhpc3RzICYmICFxdWVzdGlvbkxpc3QuaW5jbHVkZXMoZmluZEV4aXN0cy5saW5rZWRRdWVzdGlvbikgKSB7XHJcbiAgICAgICAgICAgICAgcXVlc3Rpb25MaXN0LnB1c2goZmluZEV4aXN0cy5saW5rZWRRdWVzdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBsZXQgZmluZEV4aXN0cyA9IGxpbmtlZFF1ZXN0aW9ucy5maW5kKChpdGVtOmFueSkgPT4gIGl0ZW0ubGlua2VkUXVlc3Rpb24gPT0gcXVlc3Rpb24ucW5vKTtcclxuICAgICAgICAgIGlmKCFmaW5kRXhpc3RzICYmIHF1ZXN0aW9uLnFubyAhPSAocW50SWR4KzEpICYmICFxdWVzdGlvbkxpc3QuaW5jbHVkZXMocXVlc3Rpb24ucW5vKSkge1xyXG4gICAgICAgICAgICBxdWVzdGlvbkxpc3QucHVzaChxdWVzdGlvbi5xbm8pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBcclxuICAgICAgcmV0dXJuIHF1ZXN0aW9uTGlzdDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUxpbmtlZChzZWNJZHg6bnVtYmVyLHFuSWR4Om51bWJlcixhbnNJZHg6bnVtYmVyKSB7XHJcbiAgICBsZXQgbGlua1ZhbHVlID0gKCgoKCgodGhpcy5DaGVja2xpc3RGb3JtLmdldCgnc2VjdGlvbnMnKSBhcyBGb3JtQXJyYXkpLmF0KHNlY0lkeCkgYXMgRm9ybUdyb3VwKS5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheSkuYXQocW5JZHgpIGFzIEZvcm1Hcm91cCkuZ2V0KCdhbnN3ZXJzJykgYXMgRm9ybUFycmF5KS5hdChhbnNJZHgpIGFzIEZvcm1Hcm91cCkuZ2V0KCdzaG93TGlua2VkJyk/LnZhbHVlO1xyXG4gICAgaWYobGlua1ZhbHVlKSB7XHJcbiAgICAgICgoKCgoKHRoaXMuQ2hlY2tsaXN0Rm9ybS5nZXQoJ3NlY3Rpb25zJykgYXMgRm9ybUFycmF5KS5hdChzZWNJZHgpIGFzIEZvcm1Hcm91cCkuZ2V0KCdxdWVzdGlvbnMnKSBhcyBGb3JtQXJyYXkpLmF0KHFuSWR4KSBhcyBGb3JtR3JvdXApLmdldCgnYW5zd2VycycpIGFzIEZvcm1BcnJheSkuYXQoYW5zSWR4KSBhcyBGb3JtR3JvdXApLmdldCgnbGlua2VkUXVlc3Rpb24nKT8uc2V0VmFsdWUoMCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYoIWxpbmtWYWx1ZSkge1xyXG4gICAgICAoKCgoKCh0aGlzLkNoZWNrbGlzdEZvcm0uZ2V0KCdzZWN0aW9ucycpIGFzIEZvcm1BcnJheSkuYXQoc2VjSWR4KSBhcyBGb3JtR3JvdXApLmdldCgncXVlc3Rpb25zJykgYXMgRm9ybUFycmF5KS5hdChxbklkeCkgYXMgRm9ybUdyb3VwKS5nZXQoJ2Fuc3dlcnMnKSBhcyBGb3JtQXJyYXkpLmF0KGFuc0lkeCkgYXMgRm9ybUdyb3VwKS5nZXQoJ3ZhbGlkYXRpb24nKT8uc2V0VmFsdWUoZmFsc2UpO1xyXG4gICAgICB0aGlzLmNsZWFyUmVmZXJlbmNlSW1hZ2Uoc2VjSWR4LHFuSWR4LGFuc0lkeCk7XHJcbiAgICB9XHJcblxyXG4gICAgKCgoKCgodGhpcy5DaGVja2xpc3RGb3JtLmdldCgnc2VjdGlvbnMnKSBhcyBGb3JtQXJyYXkpLmF0KHNlY0lkeCkgYXMgRm9ybUdyb3VwKS5nZXQoJ3F1ZXN0aW9ucycpIGFzIEZvcm1BcnJheSkuYXQocW5JZHgpIGFzIEZvcm1Hcm91cCkuZ2V0KCdhbnN3ZXJzJykgYXMgRm9ybUFycmF5KS5hdChhbnNJZHgpIGFzIEZvcm1Hcm91cCkuZ2V0KCdzaG93TGlua2VkJyk/LnNldFZhbHVlKCFsaW5rVmFsdWUpXHJcbiAgfVxyXG5cclxuICB1cGRhdGVRdWVzdGlvblR5cGUoc2VjSWR4Om51bWJlcixldmVudDphbnkpIHtcclxuICAgIGlmKGV2ZW50LnRhcmdldC52YWx1ZSkge1xyXG4gICAgICBsZXQgaW5kZXggPSBwYXJzZUludChldmVudC50YXJnZXQudmFsdWUpIC0gMTtcclxuICAgICAgKCgodGhpcy5DaGVja2xpc3RGb3JtLmdldCgnc2VjdGlvbnMnKSBhcyBGb3JtQXJyYXkpLmF0KHNlY0lkeCkuZ2V0KCdxdWVzdGlvbnMnKSBhcyBGb3JtQXJyYXkpLmF0KGluZGV4KSBhcyBGb3JtR3JvdXApLmdldCgnbGlua1R5cGUnKT8uc2V0VmFsdWUodHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjYXJkXCI+XHJcbiAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBdPVwiQ2hlY2tsaXN0Rm9ybVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBib3JkZXItMCBwdC0zIHBiLTNcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiB3LTg1XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdGFibGVjb250ZW50IG1iLTRcIj48aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImNoZWNrbGlzdCBwbGFpbi1pbnB1dFwiICNjaGVja2xpc3ROYW1lIHBsYWNlaG9sZGVyPVwiRW50ZXIgQ2hlY2tsaXN0IE5hbWVcIiBmb3JtQ29udHJvbE5hbWU9XCJjaGVja2xpc3ROYW1lXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZWRpdGFibGVjb250ZW50XCI+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJjaGVja2xpc3REZXNjcmlwdGlvbiBwbGFpbi1pbnB1dFwiICNjaGVja2xpc3REZXNjcmlwdGlvbiBwbGFjZWhvbGRlcj1cIkVudGVyIENoZWNrbGlzdCBEZXNjcmlwdGlvblwiIGZvcm1Db250cm9sTmFtZT1cImNoZWNrbGlzdERlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IG14LTIgYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtZGVmYXVsdCByb3VuZGVkLTMgdGV4dC1ub3dyYXAgYm9yZGVyLXZhbFwiICpuZ0lmPVwic2hvd3ZhbHVlID09PSAnYWRkJ1wiIChjbGljayk9XCJzYXZlQ2hlY2tsaXN0UXVlc3Rpb25zKCdjb25maWd1cmUnKVwiPjxzcGFuIGNsYXNzPVwibXMtMlwiPkNvbmZpZ3VyZTwvc3Bhbj4gPC9idXR0b24+XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBteC0yIGJ0bi1vdXRsaW5lIGJ0bi1vdXRsaW5lLWRlZmF1bHQgcm91bmRlZC0zIHRleHQtbm93cmFwIGJvcmRlci12YWxcIiAqbmdJZj1cInNob3d2YWx1ZSA9PT0gJ2FkZCdcIiAoY2xpY2spPVwic2F2ZUFzRHJhZnRQb3AoJ2NyZWF0ZScpXCI+PHNwYW4gY2xhc3M9XCJtcy0yXCI+U2F2ZSBhcyBEcmFmdDwvc3Bhbj4gPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBteC0yIGJ0bi1vdXRsaW5lIGJ0bi1vdXRsaW5lLWRlZmF1bHQgcm91bmRlZC0zIHRleHQtbm93cmFwIGJvcmRlci12YWxcIiAqbmdJZj1cInNob3d2YWx1ZSA9PT0gJ2VkaXQnXCIgKGNsaWNrKT1cInVwZGF0ZUNoZWNrbGlzdFF1ZXN0aW9ucygnY29uZmlndXJlJylcIj48c3BhbiBjbGFzcz1cIm1zLTJcIj5Db25maWd1cmU8L3NwYW4+IDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBteC0yIGJ0bi1vdXRsaW5lIGJ0bi1vdXRsaW5lLWRlZmF1bHQgcm91bmRlZC0zIHRleHQtbm93cmFwIGJvcmRlci12YWxcIiAqbmdJZj1cInNob3d2YWx1ZSA9PT0gJ2VkaXQnXCIgKGNsaWNrKT1cInNhdmVBc0RyYWZ0UG9wKCd1cGRhdGUnKVwiPjxzcGFuIGNsYXNzPVwibXMtMlwiPlNhdmUgYXMgRHJhZnQ8L3NwYW4+IDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cInJvd1wiICpuZ0lmPVwiIWNoZWNrbGlzdExvYWRpbmdcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMyBtdC0yXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwXT1cIkNoZWNrbGlzdEZvcm1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24tbGVmdCBjYXJkIHB4LTcgcHktN1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTE4cHggZnctNjAwIHRleHQtbGVmdCBtYi0zIGNvbmNpc2UtY2hlY2tsaXN0bmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7Z2V0Rm9ybUNvbnRyb2woJ2NoZWNrbGlzdE5hbWUnKS52YWx1ZSA/IGdldEZvcm1Db250cm9sKCdjaGVja2xpc3ROYW1lJykudmFsdWUgOiAnQ2hlY2tsaXN0TmFtZSd9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGVmdC1wYW5lbC1jb250YWluZXJcIiBmb3JtQXJyYXlOYW1lPVwic2VjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIGdldFNlY3Rpb25Gb3JtQXJyYXkoKS5jb250cm9scztsZXQgaT1pbmRleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwTmFtZV09XCJpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IHNlY3Rpb24gYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTE4cHggZnctYm9sZCBlZGl0YWJsZWNvbnRlbnQtbGVmdFwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFNlY3Rpb25Gb3JtQ29udHJvbChpLCduYW1lJyk/LnZhbHVlID09PSAnJyA/IFwiU2VjdGlvbiBcIiA6ICcnfX17e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRTZWN0aW9uRm9ybUNvbnRyb2woaSwnbmFtZScpPy52YWx1ZSA/IGdldFNlY3Rpb25Gb3JtQ29udHJvbChpLCduYW1lJyk/LnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZ2V0U2VjdGlvbkZvcm1Db250cm9sKGksJ3NlY3Rpb25OdW1iZXInKT8udmFsdWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxociBjbGFzcz1cIm14LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIChjbGljayk9XCJkZWxldGVTZWN0aW9uKGkpXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMzVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIzNVwiIHZpZXdCb3g9XCIwIDAgMTggMThcIiBtYXRUb29sdGlwPVwiRGVsZXRlIHNlY3Rpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10ZXN0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMi4yNSA0LjVIMy43NU0zLjc1IDQuNUgxNS43NU0zLjc1IDQuNVYxNUMzLjc1IDE1LjM5NzggMy45MDgwNCAxNS43Nzk0IDQuMTg5MzQgMTYuMDYwN0M0LjQ3MDY0IDE2LjM0MiA0Ljg1MjE4IDE2LjUgNS4yNSAxNi41SDEyLjc1QzEzLjE0NzggMTYuNSAxMy41Mjk0IDE2LjM0MiAxMy44MTA3IDE2LjA2MDdDMTQuMDkyIDE1Ljc3OTQgMTQuMjUgMTUuMzk3OCAxNC4yNSAxNVY0LjVIMy43NVpNNiA0LjVWM0M2IDIuNjAyMTggNi4xNTgwNCAyLjIyMDY0IDYuNDM5MzQgMS45MzkzNEM2LjcyMDY0IDEuNjU4MDQgNy4xMDIxOCAxLjUgNy41IDEuNUgxMC41QzEwLjg5NzggMS41IDExLjI3OTQgMS42NTgwNCAxMS41NjA3IDEuOTM5MzRDMTEuODQyIDIuMjIwNjQgMTIgMi42MDIxOCAxMiAzVjQuNU03LjUgOC4yNVYxMi43NU0xMC41IDguMjVWMTIuNzVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNFwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKGNsaWNrKT1cImFjY29yZGlhbihpKVwiIFtuZ0NsYXNzXT1cInsncm90YXRlJyA6IHNob3cgIT09IGl9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMzVcIiBoZWlnaHQ9XCIzNVwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTUgNy41TDEwIDEyLjVMMTUgNy41XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3c9PT1pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjZGtEcm9wTGlzdCAoY2RrRHJvcExpc3REcm9wcGVkKT1cImRyYWdEcm9wKGksJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwiZ2V0Rm9ybUFycmF5UXVlc3Rpb25zKGkpLmNvbnRyb2xzXCIgY2xhc3M9XCJxdWVzdGlvbi1sZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUFycmF5TmFtZT1cInF1ZXN0aW9uc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgcXVlc3Rpb24gb2YgZ2V0Rm9ybUFycmF5UXVlc3Rpb25zKGkpLmNvbnRyb2xzO2xldCBqPWluZGV4O1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJteS0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJxdWVzdGlvbi5nZXQoJ2FjdGl2ZScpPy52YWx1ZSA9PT0gdHJ1ZSA/ICdhY3RpdmUtcXVlc3Rpb24nIDogJ3EtYnRuJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RrRHJhZyAobW91c2VlbnRlcik9XCJzZXRBY3RpdmVRdWVzdGlvbihpLGosMSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzY3JvbGxUb1F1ZXN0aW9uKGksaik7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJzZXRBY3RpdmVRdWVzdGlvbihpLGosLTEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwTmFtZV09XCJqXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25jaXNlLXF1ZXN0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2dldFF1ZXN0aW9uRm9ybUNvbnRyb2woaSxqLCdxbmFtZScpPy52YWx1ZSA/ICcnIDogXCJRdWVzdGlvblwifX17eyBnZXRRdWVzdGlvbkZvcm1Db250cm9sKGksaiwncW5hbWUnKT8udmFsdWUgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0UXVlc3Rpb25Gb3JtQ29udHJvbChpLGosJ3FuYW1lJyk/LnZhbHVlIDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldFF1ZXN0aW9uRm9ybUNvbnRyb2woaSxqLCdxbm8nKT8udmFsdWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTkgbXQtMlwiPlxyXG4gICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiQ2hlY2tsaXN0Rm9ybVwiICNmb3JtUmVmPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBweC03XCI+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjaGVja2xpc3QtY2FyZCBweS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJtdC0yXCIgc3R5bGU9XCJ0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIGNoZWNrbGlzdCBuYW1lIGhlcmVcIiBmb3JtQ29udHJvbE5hbWU9XCJjaGVja2xpc3ROYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJtdC00XCIgcGxhY2Vob2xkZXI9XCJFbnRlciBjaGVja2xpc3QgZGVzY3JpcHRpb24gaGVyZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNoZWNrbGlzdERlc2NyaXB0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1BcnJheU5hbWU9XCJzZWN0aW9uc1wiID5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbkFyZWEgbXQtNVwiICpuZ0Zvcj1cImxldCBzZWN0aW9uIG9mIGdldFNlY3Rpb25Gb3JtQXJyYXkoKS5jb250cm9scztsZXQgaT1pbmRleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbZm9ybUdyb3VwTmFtZV09XCJpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy0xOHB4IGZ3LWJvbGQgZWRpdGFibGVjb250ZW50XCI+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJwbGFpbi1pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjc2VjdGlvbk5hbWUgKGNoYW5nZSk9XCJ1cGRhdGVJbnB1dFZhbHVlKGksc2VjdGlvbk5hbWUudmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cIm1sLTVcIiAoY2xpY2spPVwiZGVsZXRlU2VjdGlvbihpKVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBtYXRUb29sdGlwPVwiRGVsZXRlIHNlY3Rpb25cIiBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10ZXN0XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIuMjUgNC41SDMuNzVNMy43NSA0LjVIMTUuNzVNMy43NSA0LjVWMTVDMy43NSAxNS4zOTc4IDMuOTA4MDQgMTUuNzc5NCA0LjE4OTM0IDE2LjA2MDdDNC40NzA2NCAxNi4zNDIgNC44NTIxOCAxNi41IDUuMjUgMTYuNUgxMi43NUMxMy4xNDc4IDE2LjUgMTMuNTI5NCAxNi4zNDIgMTMuODEwNyAxNi4wNjA3QzE0LjA5MiAxNS43Nzk0IDE0LjI1IDE1LjM5NzggMTQuMjUgMTVWNC41SDMuNzVaTTYgNC41VjNDNiAyLjYwMjE4IDYuMTU4MDQgMi4yMjA2NCA2LjQzOTM0IDEuOTM5MzRDNi43MjA2NCAxLjY1ODA0IDcuMTAyMTggMS41IDcuNSAxLjVIMTAuNUMxMC44OTc4IDEuNSAxMS4yNzk0IDEuNjU4MDQgMTEuNTYwNyAxLjkzOTM0QzExLjg0MiAyLjIyMDY0IDEyIDIuNjAyMTggMTIgM1Y0LjVNNy41IDguMjVWMTIuNzVNMTAuNSA4LjI1VjEyLjc1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjRcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIChjbGljayk9XCJhY2NvcmRpYW4oaSlcIiBbbmdDbGFzc109XCJ7J3JvdGF0ZScgOiBzaG93ICE9PSBpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk01IDcuNUwxMCAxMi41TDE1IDcuNVwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJxdWVzdGlvbnNBcmVhXCIgKm5nSWY9XCJzaG93ID09PSBpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtQXJyYXlOYW1lPVwicXVlc3Rpb25zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJRdWVzdGlvbi1zZWMgbXQtNVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgcXVlc3Rpb24gb2YgZ2V0Rm9ybUFycmF5UXVlc3Rpb25zKGkpLmNvbnRyb2xzO2xldCBqID0gaW5kZXg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInNldEFjdGl2ZVF1ZXN0aW9uKGksaiwxKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJzZXRBY3RpdmVRdWVzdGlvbihpLGosLTEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtmb3JtR3JvdXBOYW1lXT1cImpcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZzLTE4cHggZnctYm9sZGVyIGVkaXRhYmxlY29udGVudCBxdWVzdGlvbnRpdGxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IGRlZmF1bHQ7XCI+IFF1ZXN0aW9uIHt7aisxfX08L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2xpc3QtY2FyZCBwYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc29saWRcIiByb3dzPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiIGNsYXNzPVwibXQtMFwiIFtpZF09XCIncS0nICsgaSArICctJyArIGpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBxdWVzdGlvbiBoZXJlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInFuYW1lXCI+PC90ZXh0YXJlYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ3FuYW1lJyk/LmludmFsaWQgJiYgcXVlc3Rpb24uZ2V0KCdxbmFtZScpPy50b3VjaGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT1cImNvbG9yOiByZWQ7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLmdldCgncW5hbWUnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj4qXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUXVlc3Rpb24gaXMgcmVxdWlyZWQuPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIVsnZGVzY3JpcHRpdmVJbWFnZScsJ2ltYWdlJywnbXVsdGlwbGVJbWFnZSddLmluY2x1ZGVzKHF1ZXN0aW9uLmdldCgnYW5zd2VyVHlwZScpPy52YWx1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEFuc3dlckZvcm1Hcm91cF9Gb3JtQ29udHJvbChpLGosJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZWZfaW1nX2NvbnQgbWItNCBtdC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiZ2V0QW5zd2VyRm9ybUdyb3VwX0Zvcm1Db250cm9sKGksaiwncXVlc3Rpb25SZWZlcmVuY2VJbWFnZScpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMzAwcHhcIiBjbGFzcz1cImF1dG8tYWRqdXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJUYW5nbyBFeWVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlZl9kZWxfaWNvblwiIChjbGljayk9XCJjbGVhclJlZmVyZW5jZUltYWdlKGksaik7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIuNSA1LjAwMTNINC4xNjY2N000LjE2NjY3IDUuMDAxM0gxNy41TTQuMTY2NjcgNS4wMDEzVjE2LjY2OEM0LjE2NjY3IDE3LjExIDQuMzQyMjYgMTcuNTMzOSA0LjY1NDgyIDE3Ljg0NjVDNC45NjczOCAxOC4xNTkgNS4zOTEzMSAxOC4zMzQ2IDUuODMzMzMgMTguMzM0NkgxNC4xNjY3QzE0LjYwODcgMTguMzM0NiAxNS4wMzI2IDE4LjE1OSAxNS4zNDUyIDE3Ljg0NjVDMTUuNjU3NyAxNy41MzM5IDE1LjgzMzMgMTcuMTEgMTUuODMzMyAxNi42NjhWNS4wMDEzSDQuMTY2NjdaTTYuNjY2NjcgNS4wMDEzVjMuMzM0NjRDNi42NjY2NyAyLjg5MjYxIDYuODQyMjYgMi40Njg2OCA3LjE1NDgyIDIuMTU2MTJDNy40NjczOCAxLjg0MzU2IDcuODkxMzEgMS42Njc5NyA4LjMzMzMzIDEuNjY3OTdIMTEuNjY2N0MxMi4xMDg3IDEuNjY3OTcgMTIuNTMyNiAxLjg0MzU2IDEyLjg0NTIgMi4xNTYxMkMxMy4xNTc3IDIuNDY4NjggMTMuMzMzMyAyLjg5MjYxIDEzLjMzMzMgMy4zMzQ2NFY1LjAwMTNNOC4zMzMzMyA5LjE2Nzk3VjE0LjE2OE0xMS42NjY3IDkuMTY3OTdWMTQuMTY4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNCNDIzMThcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEFuc3dlckZvcm1Hcm91cF9Gb3JtQ29udHJvbChpLGosJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLWxnLTMgYnRuIGJ0bi1saWdodC1wcmltYXJ5IG10LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJkLW5vbmVcIiBbaWRdPVwiJ2ZpbGV1cGxvYWRfJytpK2pcIiB0eXBlPVwiZmlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJhbnN3ZXJGaWxlXCIgYWNjZXB0PVwiaW1hZ2UvcG5nLCBpbWFnZS9qcGVnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJsb2FkSW1hZ2VGcm9tRGV2aWNlKGkscmVmSW1nUUlkeCwkZXZlbnQsLTEsJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBbZm9yXT1cIidmaWxldXBsb2FkXycraStqXCIgKGNsaWNrKT1cInJlZkltZ1FJZHg9ajtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3M9XCJteC0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMjFcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjEgMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDA4Ml8zMTIyKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTkuNjY2NyAzLjMzNTI3VjguMzM1MjdNMTkuNjY2NyA4LjMzNTI3SDE0LjY2NjdNMTkuNjY2NyA4LjMzNTI3TDE1LjggNC43MDE5M0MxNC45MDQ0IDMuODA1ODYgMTMuNzk2NCAzLjE1MTI3IDEyLjU3OTMgMi43OTkyNUMxMS4zNjIzIDIuNDQ3MjIgMTAuMDc1OSAyLjQwOTIzIDguODQwMjUgMi42ODg4MkM3LjYwNDU2IDIuOTY4NDEgNi40NTk4NCAzLjU1NjQ2IDUuNTEyOSA0LjM5ODEyQzQuNTY1OTUgNS4yMzk3NyAzLjg0NzY1IDYuMzA3NTkgMy40MjUwMSA3LjUwMTkzTTEuMzMzMzQgMTYuNjY4NlYxMS42Njg2TTEuMzMzMzQgMTEuNjY4Nkg2LjMzMzM0TTEuMzMzMzQgMTEuNjY4Nkw1LjIwMDAxIDE1LjMwMTlDNi4wOTU2MyAxNi4xOTggNy4yMDM2NSAxNi44NTI2IDguNDIwNjggMTcuMjA0NkM5LjYzNzcxIDE3LjU1NjcgMTAuOTI0MSAxNy41OTQ2IDEyLjE1OTggMTcuMzE1MUMxMy4zOTU1IDE3LjAzNTUgMTQuNTQwMiAxNi40NDc0IDE1LjQ4NzEgMTUuNjA1OEMxNi40MzQxIDE0Ljc2NDEgMTcuMTUyNCAxMy42OTYzIDE3LjU3NSAxMi41MDE5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwOUJGM1wiIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfNDA4Ml8zMTIyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC41KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+UmV1cGxvYWQgSW1hZ2U8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWdldEFuc3dlckZvcm1Hcm91cF9Gb3JtQ29udHJvbChpLGosJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLWxnLTMgYnRuIGFkZC1yZWYtYnRuIGJ0bi1saWdodC1wcmltYXJ5IG15LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJkLW5vbmVcIiBbaWRdPVwiJ2ZpbGV1cGxvYWRfJytpK2pcIiB0eXBlPVwiZmlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmaWxlXCIgYWNjZXB0PVwiaW1hZ2UvcG5nLCBpbWFnZS9qcGVnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJsb2FkSW1hZ2VGcm9tRGV2aWNlKGkscmVmSW1nUUlkeCwkZXZlbnQsLTEsJ3F1ZXN0aW9uUmVmZXJlbmNlSW1hZ2UnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cInBvaW50ZXJcIiBbZm9yXT1cIidmaWxldXBsb2FkXycraStqXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlZkltZ1FJZHg9ajtcIj4gPHN2Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMCA0LjE2Nzk3VjE1LjgzNDZNNC4xNjY2OSAxMC4wMDEzSDE1LjgzMzRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPkFkZCBSZWZlcmVuY2UgSW1hZ2UgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tsaXN0LWNhcmQgcGItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwibXQtNVwiIG5hbWU9XCJzZWxlY3RvcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJhbnN3ZXJUeXBlU2VsZWN0aW9uKGksaiwkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFuc3dlclR5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gbmFtZT1cImRlc2NyaXB0aXZlXCIgdmFsdWU9XCJkZXNjcmlwdGl2ZVwiPkRlc2NyaXB0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5zd2VyPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIG5hbWU9XCJ5ZXMvbm9cIiB2YWx1ZT1cInllcy9ub1wiPkEvQiBRdWVzdGlvbjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBuYW1lPVwibXVsdGlwbGVjaG9pY2VzaW5nbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwibXVsdGlwbGVjaG9pY2VzaW5nbGVcIj5NdWx0aXBsZSBDaG9pY2UgUXVlc3Rpb24gLVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNpbmdsZSBBbnN3ZXI8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gbmFtZT1cIm11bHRpcGxlY2hvaWNlbXVsdGlwbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwibXVsdGlwbGVjaG9pY2VtdWx0aXBsZVwiPk11bHRpcGxlIENob2ljZSBRdWVzdGlvbiAtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVsdGlwbGUgQW5zd2VyPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIG5hbWU9XCJkZXNjcmlwdGl2ZUltYWdlXCIgdmFsdWU9XCJkZXNjcmlwdGl2ZUltYWdlXCI+Q2FwdHVyZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlIHdpdGggRGVzY3JpcHRpb248L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gbmFtZT1cImltYWdlXCIgdmFsdWU9XCJpbWFnZVwiPkNhcHR1cmUgSW1hZ2UgYXMgYW5zd2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gbmFtZT1cInZpZGVvXCIgdmFsdWU9XCJ2aWRlb1wiPkNhcHR1cmUgdmlkZW8gYXMgYW5zd2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gbmFtZT1cIm11bHRpcGxlSW1hZ2VcIiB2YWx1ZT1cIm11bHRpcGxlSW1hZ2VcIj5DYXB0dXJlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVsdGlwbGUgSW1hZ2U8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gbmFtZT1cImRhdGVcIiB2YWx1ZT1cImRhdGVcIj5EYXRlIC0gREQvTU0vWVlZWTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0zIG14LTQgZC1mbGV4IG10LTNcIiAqbmdJZj1cIlsnZGVzY3JpcHRpdmUnXS5pbmNsdWRlcyhxdWVzdGlvbi5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWUpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aXZldHlwZVwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIHR5cGU9XCJyYWRpb1wiIHZhbHVlPVwidGV4dFwiIFtuYW1lXT1cIidkZXNjcmlwdGl2ZXR5cGUnXCIgW2lkXT1cIidpbmxpbmVSYWRpbycgKyBqXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkc2NyaXB0aXZlVHlwZVwiIGZvcj1cImlubGluZVJhZGlvMVwiPlRleHQ8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbXMtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aXZldHlwZVwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIHR5cGU9XCJyYWRpb1wiIHZhbHVlPVwibnVtYmVyXCIgW25hbWVdPVwiJ2Rlc2NyaXB0aXZldHlwZSdcIiBbaWRdPVwiJ2lubGluZVJhZGlvJyArIGpcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1cnNvci1wb2ludGVyIGRzY3JpcHRpdmVUeXBlXCIgZm9yPVwiaW5saW5lUmFkaW8xXCI+TnVtYmVyPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInF1ZXN0aW9uLmdldCgnYW5zd2VyVHlwZScpPy52YWx1ZSA9PT0gJ3llcy9ubycgfHwgcXVlc3Rpb24uZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlID09PSAnbXVsdGlwbGVjaG9pY2VzaW5nbGUnIHx8IHF1ZXN0aW9uLmdldCgnYW5zd2VyVHlwZScpPy52YWx1ZSA9PT0gJ211bHRpcGxlY2hvaWNlbXVsdGlwbGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy0xOHB4IGZ3LWJvbGRlclwiIHN0eWxlPVwiY3Vyc29yOiBkZWZhdWx0O1wiPkFuc3dlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3B0aW9uczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1BcnJheU5hbWU9XCJhbnN3ZXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGFuc3dlciBvZiBnZXRGb3JtQXJyYXlRdWVzdGlvbnNBbnN3ZXIoaSxqLCdhbnN3ZXJzJyk/LmNvbnRyb2xzO2xldCBrID0gaW5kZXg7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIFtmb3JtR3JvdXBOYW1lXT1cImtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFhbnN3ZXIuZ2V0KCdpc2RlbGV0ZWQnKT8udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNiBBbnN3ZXIxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrbGlzdC1jYXJkIHBiLTAgbXQtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cIm10LTBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciBhbnN3ZXIgaGVyZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhbnN3ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2bFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJxdWVzdGlvbi5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWUgPT09ICd5ZXMvbm8nIHx8IHF1ZXN0aW9uLmdldCgnYW5zd2VyVHlwZScpPy52YWx1ZSA9PT0gJ211bHRpcGxlY2hvaWNlc2luZ2xlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZ0RlZmF1bHRDb250cm9sPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ2bDJcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaW1nQWRkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZUxpbmtlZChpLGosaylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTkuOTk5OTkgNC4xNjYwMlYxNS44MzI3TTQuMTY2NjYgOS45OTkzNUgxNS44MzMzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFuc3dlci5nZXQoJ2Fuc3dlcicpPy5pbnZhbGlkICYmIGFuc3dlci5nZXQoJ2Fuc3dlcicpPy50b3VjaGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBzdHlsZT1cImNvbG9yOiByZWQ7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFuc3dlci5nZXQoJ2Fuc3dlcicpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQW5zd2VyIGlzIHJlcXVpcmVkLjwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIHN0eWxlPVwiY29sb3I6IHJlZDtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhbnN3ZXIuZ2V0KCdzaG93U09QRmxhZ0Vycm9yJyk/LnZhbHVlID09PSB0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVyeSBhbnN3ZXIgY2Fu4oCZdCBiZSBhIGZsYWcuPC9wPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtQ29udHJvbE5hbWU9XCJzb3BGbGFnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nRGVmYXVsdENvbnRyb2w+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwicmFpc2VmbGFnKGksaixrLHRydWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiUmFpc2UgYSBmbGFnIGlmIHRoaXMgYW5zd2VyIGlzIHNlbGVjdGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwUG9zaXRpb249XCJhYm92ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwiY3VzdG9tLXRlc3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiYW5zd2VyLmdldCgnc29wRmxhZycpPy52YWx1ZSA9PT0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwia2l3aVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE2IDE2XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yLjY2NjY5IDEwLjAwMDdDMi42NjY2OSAxMC4wMDA3IDMuMzMzMzUgOS4zMzM5OCA1LjMzMzM1IDkuMzMzOThDNy4zMzMzNSA5LjMzMzk4IDguNjY2NjkgMTAuNjY3MyAxMC42NjY3IDEwLjY2NzNDMTIuNjY2NyAxMC42NjczIDEzLjMzMzQgMTAuMDAwNyAxMy4zMzM0IDEwLjAwMDdWMi4wMDA2NUMxMy4zMzM0IDIuMDAwNjUgMTIuNjY2NyAyLjY2NzMyIDEwLjY2NjcgMi42NjczMkM4LjY2NjY5IDIuNjY3MzIgNy4zMzMzNSAxLjMzMzk4IDUuMzMzMzUgMS4zMzM5OEMzLjMzMzM1IDEuMzMzOTggMi42NjY2OSAyLjAwMDY1IDIuNjY2NjkgMi4wMDA2NVYxMC4wMDA3Wk0yLjY2NjY5IDEwLjAwMDdWMTQuNjY3M1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNEMEQ1RERcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgKGNsaWNrKT1cInJhaXNlZmxhZyhpLGosayxmYWxzZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJSYWlzZSBhIGZsYWcgaWYgdGhpcyBhbnN3ZXIgaXMgc2VsZWN0ZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJjdXN0b20tdGVzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhbnN3ZXIuZ2V0KCdzb3BGbGFnJyk/LnZhbHVlID09PSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFjdGl2ZS1mbGFnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTYgMTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIuNjY2NjkgMTAuMDAwN0MyLjY2NjY5IDEwLjAwMDcgMy4zMzMzNSA5LjMzMzk4IDUuMzMzMzUgOS4zMzM5OEM3LjMzMzM1IDkuMzMzOTggOC42NjY2OSAxMC42NjczIDEwLjY2NjcgMTAuNjY3M0MxMi42NjY3IDEwLjY2NzMgMTMuMzMzNCAxMC4wMDA3IDEzLjMzMzQgMTAuMDAwN1YyLjAwMDY1QzEzLjMzMzQgMi4wMDA2NSAxMi42NjY3IDIuNjY3MzIgMTAuNjY2NyAyLjY2NzMyQzguNjY2NjkgMi42NjczMiA3LjMzMzM1IDEuMzMzOTggNS4zMzMzNSAxLjMzMzk4QzMuMzMzMzUgMS4zMzM5OCAyLjY2NjY5IDIuMDAwNjUgMi42NjY2OSAyLjAwMDY1VjEwLjAwMDdaTTIuNjY2NjkgMTAuMDAwN1YxNC42NjczXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0QwRDVERFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIWFuc3dlci5nZXQoJ3Nob3dMaW5rZWQnKT8udmFsdWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYW5zd2VydmFsaWRhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwibXQtN1wiIHR5cGU9XCJjaGVja2JveFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDoxNnB4O2hlaWdodDoxNnB4O2N1cnNvcjogcG9pbnRlcjtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJnZXR2YWxpZGF0aW9uKGksaixrLCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInZhbGlkYXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGFja2JveCBwdC00IG10LTIgbXgtMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IGRlZmF1bHQ7XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPlZhbGlkYXRlIHJlc3BvbnNlPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTBcIj5UcmlnZ2VyIGFuIGFjdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZWFjaCByZXNwb25zZSB0byB2YWxpZGF0ZSBpdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAqbmdJZj1cInF1ZXN0aW9uLmdldCgnYW5zd2VyVHlwZScpPy52YWx1ZSAhPT0gJ3llcy9ubydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUFuc3dlcihpLGosaylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtdC04XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcD1cIkRlbGV0ZSBhbnN3ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwiY3VzdG9tLXRlc3RcIiB3aWR0aD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNSA1TDUgMTVNNSA1TDE1IDE1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjY2NjY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSAqbmdJZj1cIm1vcmVxbi52YWxpZGF0aW9uXCIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYW5zd2VyLmdldCgndmFsaWRhdGlvbicpPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTMgcHQtNyBmcy00IGZ3LTQwMCBtdC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHRoZSByZXNwb25zZSBpcyB0aGlzLCB0aGVuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJtdC01IG14LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidmFsaWRhdGlvblR5cGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ1cGRhdGVWYWxpZGF0aW9uVHlwZSgkZXZlbnQsaSxqLGspXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPkRlc2NyaXB0aXZlIEFuc3dlcjwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbj5DYXB0dXJlIEltYWdlPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uPkNhcHR1cmUgVmlkZW88L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0zIG14LTQgZC1mbGV4IHB0LThcIiAqbmdJZj1cImFuc3dlci5nZXQoJ3ZhbGlkYXRpb25UeXBlJyk/LnZhbHVlID09PSAnRGVzY3JpcHRpdmUgQW5zd2VyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGZvcm1Db250cm9sTmFtZT1cImRlc2NyaXB0aXZldHlwZVwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiIHR5cGU9XCJyYWRpb1wiIGlkPVwiaW5saW5lUmFkaW8xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInRleHRcIiBbbmFtZV09XCInZGVzY3JpcHRpdmV0eXBlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZHNjcmlwdGl2ZVR5cGVcIiBmb3I9XCJpbmxpbmVSYWRpbzFcIj5UZXh0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1zLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGl2ZXR5cGVcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIiB0eXBlPVwicmFkaW9cIiBpZD1cImlubGluZVJhZGlvMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU9XCJudW1iZXJcIiBbbmFtZV09XCInZGVzY3JpcHRpdmV0eXBlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZHNjcmlwdGl2ZVR5cGVcIiBmb3I9XCJpbmxpbmVSYWRpbzFcIj5OdW1iZXI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJhbnN3ZXIuZ2V0KCdzaG93TGlua2VkJyk/LnZhbHVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0zIHB0LTcgZnMtNCBmdy00MDAgbXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaW5rZWQgUXVlc3Rpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBbaWRdPVwiaSsnLScra1wiIFtuYW1lXT1cImkrJy0nK2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtdC01XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImxpbmtlZFF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidXBkYXRlUXVlc3Rpb25UeXBlKGksJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPlNlbGVjdCBRdWVzdGlvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBnZXRRdWVzdGlvbkxpc3QoaSxqLGspXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwib3B0aW9uXCI+UXVlc3Rpb24ge3tvcHRpb259fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImFuc3dlci5nZXQoJ3ZhbGlkYXRpb24nKT8udmFsdWUgJiYgYW5zd2VyLmdldCgndmFsaWRhdGlvblR5cGUnKT8udmFsdWUgPT09ICdDYXB0dXJlIEltYWdlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRBbnN3ZXJGb3JtR3JvdXBfRm9ybUNvbnRyb2woaSxqLCdyZWZlcmVuY2VJbWFnZScsayk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyZWZfaW1nX2NvbnQgbWItNCBtdC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJnZXRBbnN3ZXJGb3JtR3JvdXBfRm9ybUNvbnRyb2woaSxqLCdyZWZlcmVuY2VJbWFnZScsayk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiIGhlaWdodD1cIjMwMHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXV0by1hZGp1c3RcIiBhbHQ9XCJUYW5nbyBFeWVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVmX2RlbF9pY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhclJlZmVyZW5jZUltYWdlKGksaixrKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIuNSA1LjAwMTNINC4xNjY2N000LjE2NjY3IDUuMDAxM0gxNy41TTQuMTY2NjcgNS4wMDEzVjE2LjY2OEM0LjE2NjY3IDE3LjExIDQuMzQyMjYgMTcuNTMzOSA0LjY1NDgyIDE3Ljg0NjVDNC45NjczOCAxOC4xNTkgNS4zOTEzMSAxOC4zMzQ2IDUuODMzMzMgMTguMzM0NkgxNC4xNjY3QzE0LjYwODcgMTguMzM0NiAxNS4wMzI2IDE4LjE1OSAxNS4zNDUyIDE3Ljg0NjVDMTUuNjU3NyAxNy41MzM5IDE1LjgzMzMgMTcuMTEgMTUuODMzMyAxNi42NjhWNS4wMDEzSDQuMTY2NjdaTTYuNjY2NjcgNS4wMDEzVjMuMzM0NjRDNi42NjY2NyAyLjg5MjYxIDYuODQyMjYgMi40Njg2OCA3LjE1NDgyIDIuMTU2MTJDNy40NjczOCAxLjg0MzU2IDcuODkxMzEgMS42Njc5NyA4LjMzMzMzIDEuNjY3OTdIMTEuNjY2N0MxMi4xMDg3IDEuNjY3OTcgMTIuNTMyNiAxLjg0MzU2IDEyLjg0NTIgMi4xNTYxMkMxMy4xNTc3IDIuNDY4NjggMTMuMzMzMyAyLjg5MjYxIDEzLjMzMzMgMy4zMzQ2NFY1LjAwMTNNOC4zMzMzMyA5LjE2Nzk3VjE0LjE2OE0xMS42NjY3IDkuMTY3OTdWMTQuMTY4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI0I0MjMxOFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ2V0QW5zd2VyRm9ybUdyb3VwX0Zvcm1Db250cm9sKGksaiwncmVmZXJlbmNlSW1hZ2UnLGspPy52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1sZy0zIGJ0biBidG4tbGlnaHQtcHJpbWFyeSBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJkLW5vbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInZmlsZXVwbG9hZF8nK2kraitrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZmlsZVwiIG5hbWU9XCJhbnN3ZXJGaWxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2NlcHQ9XCJpbWFnZS9wbmcsIGltYWdlL2pwZWdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwibG9hZEltYWdlRnJvbURldmljZShpLHJlZkltZ1FJZHgsJGV2ZW50LGspXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgW2Zvcl09XCInZmlsZXVwbG9hZF8nK2kraitrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVmSW1nUUlkeD1qO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXgtMlwiIHdpZHRoPVwiMjFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjEgMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Z1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF80MDgyXzMxMjIpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTkuNjY2NyAzLjMzNTI3VjguMzM1MjdNMTkuNjY2NyA4LjMzNTI3SDE0LjY2NjdNMTkuNjY2NyA4LjMzNTI3TDE1LjggNC43MDE5M0MxNC45MDQ0IDMuODA1ODYgMTMuNzk2NCAzLjE1MTI3IDEyLjU3OTMgMi43OTkyNUMxMS4zNjIzIDIuNDQ3MjIgMTAuMDc1OSAyLjQwOTIzIDguODQwMjUgMi42ODg4MkM3LjYwNDU2IDIuOTY4NDEgNi40NTk4NCAzLjU1NjQ2IDUuNTEyOSA0LjM5ODEyQzQuNTY1OTUgNS4yMzk3NyAzLjg0NzY1IDYuMzA3NTkgMy40MjUwMSA3LjUwMTkzTTEuMzMzMzQgMTYuNjY4NlYxMS42Njg2TTEuMzMzMzQgMTEuNjY4Nkg2LjMzMzM0TTEuMzMzMzQgMTEuNjY4Nkw1LjIwMDAxIDE1LjMwMTlDNi4wOTU2MyAxNi4xOTggNy4yMDM2NSAxNi44NTI2IDguNDIwNjggMTcuMjA0NkM5LjYzNzcxIDE3LjU1NjcgMTAuOTI0MSAxNy41OTQ2IDEyLjE1OTggMTcuMzE1MUMxMy4zOTU1IDE3LjAzNTUgMTQuNTQwMiAxNi40NDc0IDE1LjQ4NzEgMTUuNjA1OEMxNi40MzQxIDE0Ljc2NDEgMTcuMTUyNCAxMy42OTYzIDE3LjU3NSAxMi41MDE5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDA5QkYzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjY3XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNsaXAwXzQwODJfMzEyMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJ3aGl0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSgwLjUpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5SZXVwbG9hZCBJbWFnZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWdldEFuc3dlckZvcm1Hcm91cF9Gb3JtQ29udHJvbChpLGosJ3JlZmVyZW5jZUltYWdlJyxrKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtbGctMyBidG4gYWRkLXJlZi1idG4gYnRuLWxpZ2h0LXByaW1hcnkgbXktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZC1ub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2ZpbGV1cGxvYWRfJytpK2ora1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImZpbGVcIiBuYW1lPVwiZmlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0PVwiaW1hZ2UvcG5nLCBpbWFnZS9qcGVnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImxvYWRJbWFnZUZyb21EZXZpY2UoaSxyZWZJbWdRSWR4LCRldmVudCxrKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcl09XCInZmlsZXVwbG9hZF8nK2kraitrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVmSW1nUUlkeD1qO1wiPiA8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTAgNC4xNjc5N1YxNS44MzQ2TTQuMTY2NjkgMTAuMDAxM0gxNS44MzM0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwMDlCRjNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5BZGQgUmVmZXJlbmNlIEltYWdlIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1sZy00IGZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggbXgtMiBidG4tc2VjIG10LTYgdGV4dC1sZWZ0IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IG14LTAgcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cInRvY1wiIHZhbHVlPVwiMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdEZWZhdWx0Q29udHJvbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFsbG93VXBsb2FkZnJvbUdhbGxlcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwiZmxleFN3aXRjaENoZWNrRGVmYXVsdFwiPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvdyB1cGxvYWQgZnJvbSBnYWxsZXJ5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTJcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgY2xhc3M9XCJyb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKHF1ZXN0aW9uLmdldCgnYW5zd2VyVHlwZScpPy52YWx1ZSA9PT0gJ211bHRpcGxlY2hvaWNlbXVsdGlwbGUnIHx8IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uLmdldCgnYW5zd2VyVHlwZScpPy52YWx1ZSA9PT0gJ211bHRpcGxlY2hvaWNlc2luZ2xlJykgJiYgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93QWRkQW5zd2VyKHF1ZXN0aW9uLmdldCgnYW5zd2VycycpPy52YWx1ZSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJBZGRNb3JlQW5zKGksaixxdWVzdGlvbi5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gY29sLWxnLTEyIGJ0bi1saWdodC1wcmltYXJ5IG15LTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIE1vcmUgQW5zd2VyPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEltYWdlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJbJ2ltYWdlJywnZGVzY3JpcHRpdmVJbWFnZScsJ211bHRpcGxlSW1hZ2UnXS5pbmNsdWRlcyhxdWVzdGlvbi5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtR3JvdXBOYW1lPVwiYW5zd2Vyc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEFuc3dlckZvcm1Hcm91cF9Gb3JtQ29udHJvbChpLGosJ3JlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJlZl9pbWdfY29udCBtYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImdldEFuc3dlckZvcm1Hcm91cF9Gb3JtQ29udHJvbChpLGosJ3JlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMzAwcHhcIiBjbGFzcz1cImF1dG8tYWRqdXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0PVwiVGFuZ28gRXllXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVmX2RlbF9pY29uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyUmVmZXJlbmNlSW1hZ2UoaSxqKTtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIuNSA1LjAwMTNINC4xNjY2N000LjE2NjY3IDUuMDAxM0gxNy41TTQuMTY2NjcgNS4wMDEzVjE2LjY2OEM0LjE2NjY3IDE3LjExIDQuMzQyMjYgMTcuNTMzOSA0LjY1NDgyIDE3Ljg0NjVDNC45NjczOCAxOC4xNTkgNS4zOTEzMSAxOC4zMzQ2IDUuODMzMzMgMTguMzM0NkgxNC4xNjY3QzE0LjYwODcgMTguMzM0NiAxNS4wMzI2IDE4LjE1OSAxNS4zNDUyIDE3Ljg0NjVDMTUuNjU3NyAxNy41MzM5IDE1LjgzMzMgMTcuMTEgMTUuODMzMyAxNi42NjhWNS4wMDEzSDQuMTY2NjdaTTYuNjY2NjcgNS4wMDEzVjMuMzM0NjRDNi42NjY2NyAyLjg5MjYxIDYuODQyMjYgMi40Njg2OCA3LjE1NDgyIDIuMTU2MTJDNy40NjczOCAxLjg0MzU2IDcuODkxMzEgMS42Njc5NyA4LjMzMzMzIDEuNjY3OTdIMTEuNjY2N0MxMi4xMDg3IDEuNjY3OTcgMTIuNTMyNiAxLjg0MzU2IDEyLjg0NTIgMi4xNTYxMkMxMy4xNTc3IDIuNDY4NjggMTMuMzMzMyAyLjg5MjYxIDEzLjMzMzMgMy4zMzQ2NFY1LjAwMTNNOC4zMzMzMyA5LjE2Nzk3VjE0LjE2OE0xMS42NjY3IDkuMTY3OTdWMTQuMTY4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjQjQyMzE4XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdldEFuc3dlckZvcm1Hcm91cF9Gb3JtQ29udHJvbChpLGosJ3JlZmVyZW5jZUltYWdlJyk/LnZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtbGctMyBidG4gYnRuLWxpZ2h0LXByaW1hcnkgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJkLW5vbmVcIiBpZD1cImZpbGV1cGxvYWRcIiB0eXBlPVwiZmlsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZmlsZVwiIGFjY2VwdD1cImltYWdlL3BuZywgaW1hZ2UvanBlZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cImxvYWRJbWFnZUZyb21EZXZpY2UoaSxyZWZJbWdRSWR4LCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImZpbGV1cGxvYWRcIiAoY2xpY2spPVwicmVmSW1nUUlkeD1qO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgY2xhc3M9XCJteC0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjIxXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIxIDIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfNDA4Ml8zMTIyKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xOS42NjY3IDMuMzM1MjdWOC4zMzUyN00xOS42NjY3IDguMzM1MjdIMTQuNjY2N00xOS42NjY3IDguMzM1MjdMMTUuOCA0LjcwMTkzQzE0LjkwNDQgMy44MDU4NiAxMy43OTY0IDMuMTUxMjcgMTIuNTc5MyAyLjc5OTI1QzExLjM2MjMgMi40NDcyMiAxMC4wNzU5IDIuNDA5MjMgOC44NDAyNSAyLjY4ODgyQzcuNjA0NTYgMi45Njg0MSA2LjQ1OTg0IDMuNTU2NDYgNS41MTI5IDQuMzk4MTJDNC41NjU5NSA1LjIzOTc3IDMuODQ3NjUgNi4zMDc1OSAzLjQyNTAxIDcuNTAxOTNNMS4zMzMzNCAxNi42Njg2VjExLjY2ODZNMS4zMzMzNCAxMS42Njg2SDYuMzMzMzRNMS4zMzMzNCAxMS42Njg2TDUuMjAwMDEgMTUuMzAxOUM2LjA5NTYzIDE2LjE5OCA3LjIwMzY1IDE2Ljg1MjYgOC40MjA2OCAxNy4yMDQ2QzkuNjM3NzEgMTcuNTU2NyAxMC45MjQxIDE3LjU5NDYgMTIuMTU5OCAxNy4zMTUxQzEzLjM5NTUgMTcuMDM1NSAxNC41NDAyIDE2LjQ0NzQgMTUuNDg3MSAxNS42MDU4QzE2LjQzNDEgMTQuNzY0MSAxNy4xNTI0IDEzLjY5NjMgMTcuNTc1IDEyLjUwMTlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzAwOUJGM1wiIHN0cm9rZS13aWR0aD1cIjEuNjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF80MDgyXzMxMjJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIndoaXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoMC41KVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+UmV1cGxvYWQgSW1hZ2U8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhZ2V0QW5zd2VyRm9ybUdyb3VwX0Zvcm1Db250cm9sKGksaiwncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1sZy0zIGJ0biBhZGQtcmVmLWJ0biBidG4tbGlnaHQtcHJpbWFyeSBteS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImQtbm9uZVwiIGlkPVwiZmlsZXVwbG9hZFwiIHR5cGU9XCJmaWxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJmaWxlXCIgYWNjZXB0PVwiaW1hZ2UvcG5nLCBpbWFnZS9qcGVnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwibG9hZEltYWdlRnJvbURldmljZShpLHJlZkltZ1FJZHgsJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJwb2ludGVyXCIgZm9yPVwiZmlsZXVwbG9hZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVmSW1nUUlkeD1qO1wiPiA8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMCA0LjE2Nzk3VjE1LjgzNDZNNC4xNjY2OSAxMC4wMDEzSDE1LjgzMzRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMDA5QkYzXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5BZGQgUmVmZXJlbmNlIEltYWdlIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC1sZy00IGZvcm0tY2hlY2sgZm9ybS1zd2l0Y2ggbXgtMiBidG4tc2VjIG10LTYgdGV4dC1sZWZ0IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IG14LTAgcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwidG9jXCIgdmFsdWU9XCIxXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nRGVmYXVsdENvbnRyb2xcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImFsbG93VXBsb2FkZnJvbUdhbGxlcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBwb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cImZsZXhTd2l0Y2hDaGVja0RlZmF1bHRcIj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGxvdyB1cGxvYWQgZnJvbSBnYWxsZXJ5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCIoWydtdWx0aXBsZUltYWdlJ10uaW5jbHVkZXMocXVlc3Rpb24uZ2V0KCdhbnN3ZXJUeXBlJyk/LnZhbHVlKSAmJiBnZXRBbnN3ZXJGb3JtR3JvdXBfRm9ybUNvbnRyb2woaSxqLCdyZWZlcmVuY2VJbWFnZScpPy52YWx1ZSA9PT0gJycpID8gJ2NvbC1sZy00IG10LTYnIDogWydpbWFnZSddLmluY2x1ZGVzKHF1ZXN0aW9uLmdldCgnYW5zd2VyVHlwZScpPy52YWx1ZSkgPyAnY29sLWxnLTInIDogJydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleFwiICpuZ0lmPVwiKFsnbXVsdGlwbGVJbWFnZSddLmluY2x1ZGVzKHF1ZXN0aW9uLmdldCgnYW5zd2VyVHlwZScpPy52YWx1ZSkgJiYgZ2V0QW5zd2VyRm9ybUdyb3VwX0Zvcm1Db250cm9sKGksaiwncmVmZXJlbmNlSW1hZ2UnKT8udmFsdWUgPT09ICcnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2tcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpdmV0eXBlXCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCIgdHlwZT1cInJhZGlvXCIgaWQ9XCJpbmxpbmVSYWRpbzFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInRleHRcIiBbbmFtZV09XCInZGVzY3JpcHRpdmV0eXBlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImN1cnNvci1wb2ludGVyIGRzY3JpcHRpdmVUeXBlXCIgZm9yPVwiaW5saW5lUmFkaW8xXCI+VGV4dDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIG1zLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZGVzY3JpcHRpdmV0eXBlXCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCIgdHlwZT1cInJhZGlvXCIgaWQ9XCJpbmxpbmVSYWRpbzFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cIm51bWJlclwiIFtuYW1lXT1cIidkZXNjcmlwdGl2ZXR5cGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZHNjcmlwdGl2ZVR5cGVcIiBmb3I9XCJpbmxpbmVSYWRpbzFcIj5OdW1iZXI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJnZXRBbnN3ZXJGb3JtR3JvdXBfRm9ybUNvbnRyb2woaSxqLCdyZWZlcmVuY2VJbWFnZScpPy52YWx1ZSAmJiBbJ2ltYWdlJywnbXVsdGlwbGVJbWFnZSddLmluY2x1ZGVzKHF1ZXN0aW9uLmdldCgnYW5zd2VyVHlwZScpPy52YWx1ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJxdWVzdGlvbi5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWUgPT09ICdtdWx0aXBsZUltYWdlJyA/ICdjb2wtbGctNSBkLWZsZXggbXQtNicgOiAnY29sLWxnLTMgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIG10LTInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIiAqbmdJZj1cInF1ZXN0aW9uLmdldCgnYW5zd2VyVHlwZScpPy52YWx1ZSA9PT0gJ211bHRpcGxlSW1hZ2UnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVja1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGl2ZXR5cGVcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIiB0eXBlPVwicmFkaW9cIiBpZD1cImlubGluZVJhZGlvMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwidGV4dFwiIFtuYW1lXT1cIidkZXNjcmlwdGl2ZXR5cGUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZHNjcmlwdGl2ZVR5cGVcIiBmb3I9XCJpbmxpbmVSYWRpbzFcIj5UZXh0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgbXMtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJkZXNjcmlwdGl2ZXR5cGVcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXQgY3Vyc29yLXBvaW50ZXJcIiB0eXBlPVwicmFkaW9cIiBpZD1cImlubGluZVJhZGlvMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlPVwibnVtYmVyXCIgW25hbWVdPVwiJ2Rlc2NyaXB0aXZldHlwZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBkc2NyaXB0aXZlVHlwZVwiIGZvcj1cImlubGluZVJhZGlvMVwiPk51bWJlcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImZzMTYtNjAwIHB4LTEyXCI+IFJ1biBBSSDinKg8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaCBhbGlnbi1pdGVtcy1jZW50ZXIgYnRuLXNlYyBtbC01XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJSdW5BSShpLGopXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0XCIgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJydW5BSVwiIG5hbWU9XCJ0b2NcIiB2YWx1ZT1cIjFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcj1cImZsZXhTd2l0Y2hDaGVja0RlZmF1bHRcIj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJxdWVzdGlvbi5nZXQoJ2Fuc3dlclR5cGUnKT8udmFsdWUgPT09ICdtdWx0aXBsZUltYWdlJyA/ICdtdC0xJyA6ICcnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXA9XCJFbmFibGUgQUkgd2hlcmUgeW91IHdhbnQgdGFuZ28gdG8gaWRlbnRpZnksIHRyYWNrIGFuZCBhbGVydCBpbnN0YW5jZXMuXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10ZXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzIzMDFfMTAwMDM4KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNy45OTk2NyAxMC42NjU0VjcuOTk4N003Ljk5OTY3IDUuMzMyMDNIOC4wMDYzNE0xNC42NjYzIDcuOTk4N0MxNC42NjYzIDExLjY4MDYgMTEuNjgxNiAxNC42NjU0IDcuOTk5NjcgMTQuNjY1NEM0LjMxNzc4IDE0LjY2NTQgMS4zMzMwMSAxMS42ODA2IDEuMzMzMDEgNy45OTg3QzEuMzMzMDEgNC4zMTY4IDQuMzE3NzggMS4zMzIwMyA3Ljk5OTY3IDEuMzMyMDNDMTEuNjgxNiAxLjMzMjAzIDE0LjY2NjMgNC4zMTY4IDE0LjY2NjMgNy45OTg3WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM5OEEyQjNcIiBzdHJva2Utd2lkdGg9XCIyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzIzMDFfMTAwMDM4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVmlkZW8gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInF1ZXN0aW9uLmdldCgnYW5zd2VyVHlwZScpPy52YWx1ZSA9PT0gJ3ZpZGVvJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT1cImFuc3dlcnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiBjb2wtbGctNCBmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIHRleHQtbGVmdCBhbGlnbi1pdGVtcy1jZW50ZXIgYnRuLXNlYyBtdC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBteC0wIHBvaW50ZXJcIiB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidG9jXCIgdmFsdWU9XCIxXCIgbmdEZWZhdWx0Q29udHJvbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJhbGxvd1VwbG9hZGZyb21HYWxsZXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBwb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yPVwiZmxleFN3aXRjaENoZWNrRGVmYXVsdFwiPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxsb3cgdXBsb2FkIGZyb20gZ2FsbGVyeVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1lbmQgcHktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHQtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyAoY2xpY2spPVwiY2xvbmVRdWVzdGlvbihpLGopXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRHVwbGljYXRlXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10ZXN0XCIgdmlld0JveD1cIjAgMCAyMCAyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzMzODVfMTA1NzgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTQuMTY2NjMgMTIuNDk5M0gzLjMzMzI5QzIuODkxMjcgMTIuNDk5MyAyLjQ2NzM0IDEyLjMyMzggMi4xNTQ3OCAxMi4wMTEyQzEuODQyMjIgMTEuNjk4NiAxLjY2NjYzIDExLjI3NDcgMS42NjY2MyAxMC44MzI3VjMuMzMyNjhDMS42NjY2MyAyLjg5MDY1IDEuODQyMjIgMi40NjY3MyAyLjE1NDc4IDIuMTU0MTdDMi40NjczNCAxLjg0MTYxIDIuODkxMjcgMS42NjYwMiAzLjMzMzI5IDEuNjY2MDJIMTAuODMzM0MxMS4yNzUzIDEuNjY2MDIgMTEuNjk5MiAxLjg0MTYxIDEyLjAxMTggMi4xNTQxN0MxMi4zMjQ0IDIuNDY2NzMgMTIuNSAyLjg5MDY1IDEyLjUgMy4zMzI2OFY0LjE2NjAyTTkuMTY2NjMgNy40OTkzNUgxNi42NjY2QzE3LjU4NzEgNy40OTkzNSAxOC4zMzMzIDguMjQ1NTQgMTguMzMzMyA5LjE2NjAyVjE2LjY2NkMxOC4zMzMzIDE3LjU4NjUgMTcuNTg3MSAxOC4zMzI3IDE2LjY2NjYgMTguMzMyN0g5LjE2NjYzQzguMjQ2MTUgMTguMzMyNyA3LjQ5OTk2IDE3LjU4NjUgNy40OTk5NiAxNi42NjZWOS4xNjYwMkM3LjQ5OTk2IDguMjQ1NTQgOC4yNDYxNSA3LjQ5OTM1IDkuMTY2NjMgNy40OTkzNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNjY2NjdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzMzODVfMTA1NzhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIChjbGljayk9XCJkZWxldGVRdWVzdGlvbihpLGopXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAyNHB4ICFpbXBvcnRhbnQ7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwPVwiRGVsZXRlIHF1ZXN0aW9uXCIgbWF0VG9vbHRpcFBvc2l0aW9uPVwiYWJvdmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10ZXN0XCIgdmlld0JveD1cIjAgMCAyMCAyMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIuNSA0Ljk5OTM1SDQuMTY2NjdNNC4xNjY2NyA0Ljk5OTM1SDE3LjVNNC4xNjY2NyA0Ljk5OTM1VjE2LjY2NkM0LjE2NjY3IDE3LjEwOCA0LjM0MjI2IDE3LjUzMiA0LjY1NDgyIDE3Ljg0NDVDNC45NjczOCAxOC4xNTcxIDUuMzkxMzEgMTguMzMyNyA1LjgzMzMzIDE4LjMzMjdIMTQuMTY2N0MxNC42MDg3IDE4LjMzMjcgMTUuMDMyNiAxOC4xNTcxIDE1LjM0NTIgMTcuODQ0NUMxNS42NTc3IDE3LjUzMiAxNS44MzMzIDE3LjEwOCAxNS44MzMzIDE2LjY2NlY0Ljk5OTM1SDQuMTY2NjdaTTYuNjY2NjcgNC45OTkzNVYzLjMzMjY4QzYuNjY2NjcgMi44OTA2NSA2Ljg0MjI2IDIuNDY2NzMgNy4xNTQ4MiAyLjE1NDE3QzcuNDY3MzggMS44NDE2MSA3Ljg5MTMxIDEuNjY2MDIgOC4zMzMzMyAxLjY2NjAySDExLjY2NjdDMTIuMTA4NyAxLjY2NjAyIDEyLjUzMjYgMS44NDE2MSAxMi44NDUyIDIuMTU0MTdDMTMuMTU3NyAyLjQ2NjczIDEzLjMzMzMgMi44OTA2NSAxMy4zMzMzIDMuMzMyNjhWNC45OTkzNU04LjMzMzMzIDkuMTY2MDJWMTQuMTY2TTExLjY2NjcgOS4xNjYwMlYxNC4xNjZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS42NjY2N1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBteC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNiBweC0wXCIgKm5nSWY9XCJDaGVja2xpc3RGb3JtLmdldCgnc2VjdGlvbnMnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrbGlzdC1jYXJkIHB5LTcgdGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IChjbGljayk9XCJhZGROZXdRdWVzdGlvbihzZWN0aW9uSW5kZXgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiaXNEaXNhYmxlZCA/ICdkaXNhYmxlZCcgOiBudWxsXCIgY2xhc3M9XCJtdC0yIGJ0bi1zZWMgcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkuOTk5OTkgNC4xNjYwMlYxNS44MzI3TTQuMTY2NjYgOS45OTkzNUgxNS44MzMzXCIgc3Ryb2tlPVwiIzM0NDA1NFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPiBBZGQgTmV3IFF1ZXN0aW9uPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctNiBwbC01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tsaXN0LWNhcmQgcHktNyB0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cImFkZE5ld1NlY3Rpb24oKVwiIGNsYXNzPVwibXQtMiBweC0wIGJ0bi1zZWMgcG9pbnRlclwiPiA8c3ZnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05Ljk5OTk5IDQuMTY2MDJWMTUuODMyN000LjE2NjY2IDkuOTk5MzVIMTUuODMzM1wiIHN0cm9rZT1cIiMzNDQwNTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4gQWRkIE5ldyBTZWN0aW9uPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9mb3JtPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
|