commons-assessment 12.1.1 → 12.1.2-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/commons-assessment.umd.js +1012 -114
- package/bundles/commons-assessment.umd.js.map +1 -1
- package/esm2015/lib/modules/assessment-maker/assessment-maker.component.js +171 -5
- package/esm2015/lib/modules/assessment-maker/assessment-maker.module.js +10 -5
- package/esm2015/lib/modules/assessment-maker/components/add-edit-section-introduction/add-edit-section-introduction.component.js +1 -1
- package/esm2015/lib/modules/assessment-maker/components/assessment-builder/assessment-builder.component.js +64 -20
- package/esm2015/lib/modules/assessment-maker/components/question-bank-picker/question-bank-picker.component.js +276 -0
- package/esm2015/lib/modules/assessment-maker/components/question-details/question-details.component.js +12 -2
- package/esm2015/lib/modules/assessment-maker/services/assessment-builder.service.js +7 -2
- package/esm2015/lib/modules/assessment-maker/services/assessment-maker.service.js +30 -19
- package/esm2015/lib/modules/assessment-taker/assessment-taker.component.js +2 -7
- package/esm2015/lib/modules/assessment-taker/components/proctoring-consent/proctoring-consent.component.js +2 -14
- package/esm2015/lib/modules/assessment-taker/components/proctoring-result/proctoring-result.component.js +2 -2
- package/esm2015/lib/modules/assessment-taker/components/question-type-date-picker/question-type-date-picker.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/components/question-type-editor/question-type-editor.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/components/question-type-file-upload/question-type-file-upload.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/components/question-type-long/question-type-long.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/components/question-type-multiselect/question-type-multiselect.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/components/question-type-objective/question-type-objective.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/components/question-type-preference/question-type-preference.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/components/question-type-short/question-type-short.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/components/section-instructions/section-instructions.component.js +1 -1
- package/esm2015/lib/modules/assessment-taker/services/assessment-taker.service.js +2 -15
- package/esm2015/lib/modules/question-bank/question-bank.component.js +313 -0
- package/esm2015/lib/modules/question-bank/question-bank.module.js +45 -0
- package/esm2015/lib/shared/components/confirmation-dialog/confirmation-dialog.component.js +1 -1
- package/esm2015/lib/shared/components/skill-allocation/skill-allocation.component.js +1 -1
- package/esm2015/lib/shared/controllers.js +5 -1
- package/esm2015/lib/shared/interfaces/assessment.interface.js +1 -1
- package/esm2015/lib/shared/pipes/order-by.pipe.js +3 -4
- package/esm2015/lib/shared/utils.js +19 -1
- package/esm2015/public-api.js +4 -1
- package/fesm2015/commons-assessment.js +927 -93
- package/fesm2015/commons-assessment.js.map +1 -1
- package/lib/modules/assessment-maker/assessment-maker.component.d.ts +17 -2
- package/lib/modules/assessment-maker/assessment-maker.module.d.ts +6 -5
- package/lib/modules/assessment-maker/components/assessment-builder/assessment-builder.component.d.ts +3 -0
- package/lib/modules/assessment-maker/components/question-bank-picker/question-bank-picker.component.d.ts +81 -0
- package/lib/modules/assessment-maker/components/question-details/question-details.component.d.ts +3 -1
- package/lib/modules/assessment-maker/services/assessment-maker.service.d.ts +3 -2
- package/lib/modules/assessment-taker/services/assessment-taker.service.d.ts +16 -18
- package/lib/modules/question-bank/question-bank.component.d.ts +65 -0
- package/lib/modules/question-bank/question-bank.module.d.ts +12 -0
- package/lib/shared/controllers.d.ts +4 -0
- package/lib/shared/interfaces/assessment.interface.d.ts +5 -0
- package/lib/shared/utils.d.ts +4 -0
- package/package.json +1 -1
- package/public-api.d.ts +3 -0
- package/src/lib/assets/images/arrow-down-blue.svg +3 -0
- package/src/lib/assets/images/arrow-up-blue.svg +3 -0
- package/src/lib/assets/images/file-import.svg +11 -0
- package/src/lib/assets/images/plus-white.svg +1 -0
- package/src/lib/assets/json/imageConfig.json +5 -1
- package/src/lib/assets/json/labelConfig.json +35 -4
- package/src/lib/assets/theme/_theme.global.scss +0 -1
- package/src/lib/assets/theme/styles.global.scss +123 -14
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import { forkJoin } from 'rxjs';
|
|
2
|
+
import { forkJoin, of } from 'rxjs';
|
|
3
|
+
import { catchError } from 'rxjs/operators';
|
|
3
4
|
import { moveItemInArray } from '@angular/cdk/drag-drop';
|
|
4
5
|
import { AddEditSectionIntroductionComponent } from './components/add-edit-section-introduction/add-edit-section-introduction.component';
|
|
5
6
|
import { AssessmentBuilderComponent } from './components/assessment-builder/assessment-builder.component';
|
|
7
|
+
import { QuestionBankPickerComponent } from './components/question-bank-picker/question-bank-picker.component';
|
|
6
8
|
import { ConfirmationDialogComponent } from '../../shared/components/confirmation-dialog/confirmation-dialog.component';
|
|
7
|
-
import { sortByOrder } from '../../shared/utils';
|
|
9
|
+
import { sortByOrder, removeKeyDeep } from '../../shared/utils';
|
|
8
10
|
import * as i0 from "@angular/core";
|
|
9
11
|
import * as i1 from "./services/assessment-maker.service";
|
|
10
12
|
import * as i2 from "./services/assessment-builder.service";
|
|
@@ -34,11 +36,13 @@ export class AssessmentMakerComponent {
|
|
|
34
36
|
this.checkForResponses = false;
|
|
35
37
|
this.showProctoringToggle = false;
|
|
36
38
|
this.showTimeInput = false;
|
|
39
|
+
this.enableImportFromQuestionBank = false;
|
|
37
40
|
this.assessmentIdChange = new EventEmitter();
|
|
38
41
|
this.assessmentInstanceIdChange = new EventEmitter();
|
|
39
42
|
this.snackbarMessage = new EventEmitter();
|
|
40
43
|
this.showLoader = false;
|
|
41
44
|
this.questionBank = {};
|
|
45
|
+
this.lockedQuestionsMap = {};
|
|
42
46
|
this.assessmentQuestionPaperData = { id: 0, questionPaperSectionList: [] };
|
|
43
47
|
this.configsLoaded = false;
|
|
44
48
|
this.isSubmitting = false;
|
|
@@ -46,8 +50,31 @@ export class AssessmentMakerComponent {
|
|
|
46
50
|
this.responseCount = 0;
|
|
47
51
|
this.proctoringEnabled = false;
|
|
48
52
|
this.durationMinutes = null;
|
|
53
|
+
this.activeDropdownId = null;
|
|
54
|
+
this.dropdownPlacementMap = {};
|
|
49
55
|
this.PROCTORING_CONFIG_KEY = 'assessment.config.is-proctoring-enabled';
|
|
50
56
|
}
|
|
57
|
+
toggleDropdown(id, event) {
|
|
58
|
+
if (event) {
|
|
59
|
+
event.stopPropagation();
|
|
60
|
+
const targetEl = (event.currentTarget || event.target);
|
|
61
|
+
if (targetEl && typeof targetEl.getBoundingClientRect === 'function') {
|
|
62
|
+
const rect = targetEl.getBoundingClientRect();
|
|
63
|
+
const spaceBelow = window.innerHeight - rect.bottom;
|
|
64
|
+
const ESTIMATED_DROPDOWN_HEIGHT = 135;
|
|
65
|
+
if (spaceBelow < ESTIMATED_DROPDOWN_HEIGHT && rect.top > ESTIMATED_DROPDOWN_HEIGHT) {
|
|
66
|
+
this.dropdownPlacementMap[id] = 'top';
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
this.dropdownPlacementMap[id] = 'bottom';
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
this.activeDropdownId = this.activeDropdownId === id ? null : id;
|
|
74
|
+
}
|
|
75
|
+
closeAllDropdowns() {
|
|
76
|
+
this.activeDropdownId = null;
|
|
77
|
+
}
|
|
51
78
|
ngOnInit() {
|
|
52
79
|
var _a, _b, _c, _d, _e;
|
|
53
80
|
this.assessmentBuilderService.setDefaultAssessmentDTO(this.defaultAssessmentDTO);
|
|
@@ -135,6 +162,7 @@ export class AssessmentMakerComponent {
|
|
|
135
162
|
this.proctoringEnabled = this.readProctoringConfig((_c = this.assessmentContext) === null || _c === void 0 ? void 0 : _c.assessment);
|
|
136
163
|
this.readDuration((_d = this.assessmentContext) === null || _d === void 0 ? void 0 : _d.assessmentInstanceDTO);
|
|
137
164
|
this.showLoader = false;
|
|
165
|
+
this.checkAssessmentQuestionsLocked();
|
|
138
166
|
}
|
|
139
167
|
else {
|
|
140
168
|
this.assessmentMakerService.getAssessmentContext({ assessmentIds: [this.assessmentId] }).subscribe({
|
|
@@ -146,6 +174,7 @@ export class AssessmentMakerComponent {
|
|
|
146
174
|
this.proctoringEnabled = this.readProctoringConfig((_c = this.assessmentContext) === null || _c === void 0 ? void 0 : _c.assessment);
|
|
147
175
|
this.readDuration((_d = this.assessmentContext) === null || _d === void 0 ? void 0 : _d.assessmentInstanceDTO);
|
|
148
176
|
this.showLoader = false;
|
|
177
|
+
this.checkAssessmentQuestionsLocked();
|
|
149
178
|
},
|
|
150
179
|
error: (error) => {
|
|
151
180
|
console.error(error);
|
|
@@ -155,6 +184,23 @@ export class AssessmentMakerComponent {
|
|
|
155
184
|
});
|
|
156
185
|
}
|
|
157
186
|
}
|
|
187
|
+
checkAssessmentQuestionsLocked() {
|
|
188
|
+
const questionIds = Object.keys(this.questionBank || {})
|
|
189
|
+
.map(id => Number(id))
|
|
190
|
+
.filter(id => id > 0);
|
|
191
|
+
if (questionIds.length === 0)
|
|
192
|
+
return;
|
|
193
|
+
this.assessmentMakerService.checkQuestionsLocked(questionIds, 'ASSESSMENT_INSTANCE')
|
|
194
|
+
.pipe(catchError(() => of({})))
|
|
195
|
+
.subscribe((lockedMap) => {
|
|
196
|
+
Object.keys(lockedMap || {}).forEach(k => {
|
|
197
|
+
this.lockedQuestionsMap[Number(k)] = !!lockedMap[k];
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
isQuestionLocked(questionId) {
|
|
202
|
+
return questionId != null ? !!this.lockedQuestionsMap[questionId] : false;
|
|
203
|
+
}
|
|
158
204
|
generateQuestionBank() {
|
|
159
205
|
var _a, _b;
|
|
160
206
|
let childQuestionIds = [];
|
|
@@ -183,6 +229,7 @@ export class AssessmentMakerComponent {
|
|
|
183
229
|
res === null || res === void 0 ? void 0 : res.forEach((question) => {
|
|
184
230
|
this.questionBank[question.id] = question;
|
|
185
231
|
});
|
|
232
|
+
this.checkAssessmentQuestionsLocked();
|
|
186
233
|
},
|
|
187
234
|
error: (error) => {
|
|
188
235
|
console.error(error);
|
|
@@ -258,6 +305,13 @@ export class AssessmentMakerComponent {
|
|
|
258
305
|
});
|
|
259
306
|
}
|
|
260
307
|
createEditQuestion(sectionDetails, sectionQuestionId, isChild) {
|
|
308
|
+
if (sectionQuestionId != null && this.lockedQuestionsMap[sectionQuestionId]) {
|
|
309
|
+
this.snackbarMessage.emit({
|
|
310
|
+
message: this.labelConfig['COMMONS_ASSESSMENT.WARNING.QUESTION_LOCKED'] || 'This question is part of a published assessment and cannot be edited.',
|
|
311
|
+
type: 'info'
|
|
312
|
+
});
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
261
315
|
// Editing an existing question is gated by the responses warning; adding a new one is not.
|
|
262
316
|
if (sectionQuestionId != null) {
|
|
263
317
|
this.confirmResponsesWarning(() => this.openQuestionBuilder(sectionDetails, sectionQuestionId, isChild));
|
|
@@ -288,7 +342,8 @@ export class AssessmentMakerComponent {
|
|
|
288
342
|
assessmentQuestionPaperData: this.assessmentQuestionPaperData,
|
|
289
343
|
assessmentId: this.assessmentId,
|
|
290
344
|
skillsList: this.skillsList,
|
|
291
|
-
snackbarMessageEmitter: this.snackbarMessage
|
|
345
|
+
snackbarMessageEmitter: this.snackbarMessage,
|
|
346
|
+
isLocked: sectionQuestionId != null ? !!this.lockedQuestionsMap[sectionQuestionId] : false
|
|
292
347
|
},
|
|
293
348
|
});
|
|
294
349
|
dialogRef.afterClosed().subscribe((res) => {
|
|
@@ -316,6 +371,7 @@ export class AssessmentMakerComponent {
|
|
|
316
371
|
this.questionBank = Object.assign(Object.assign({}, this.questionBank), ((res === null || res === void 0 ? void 0 : res.questionMap) || {}));
|
|
317
372
|
this.updateAssessmentQuestionPaperData(res === null || res === void 0 ? void 0 : res.questionPaper);
|
|
318
373
|
this.generateQuestionBank();
|
|
374
|
+
this.checkAssessmentQuestionsLocked();
|
|
319
375
|
this.patchAssessmentAndQuestionPaper();
|
|
320
376
|
this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.SECTION_DUPLICATED_SUCCESS'], type: 'success' });
|
|
321
377
|
},
|
|
@@ -335,6 +391,7 @@ export class AssessmentMakerComponent {
|
|
|
335
391
|
this.questionBank = Object.assign(Object.assign({}, this.questionBank), ((res === null || res === void 0 ? void 0 : res.questionMap) || {}));
|
|
336
392
|
this.updateAssessmentQuestionPaperData(res === null || res === void 0 ? void 0 : res.questionPaper);
|
|
337
393
|
this.generateQuestionBank();
|
|
394
|
+
this.checkAssessmentQuestionsLocked();
|
|
338
395
|
this.patchAssessmentAndQuestionPaper();
|
|
339
396
|
this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.QUESTION_DUPLICATED_SUCCESS'], type: 'success' });
|
|
340
397
|
},
|
|
@@ -395,6 +452,7 @@ export class AssessmentMakerComponent {
|
|
|
395
452
|
next: (res) => {
|
|
396
453
|
this.updateAssessmentQuestionPaperData(res === null || res === void 0 ? void 0 : res.questionPaper);
|
|
397
454
|
this.generateQuestionBank();
|
|
455
|
+
this.checkAssessmentQuestionsLocked();
|
|
398
456
|
if (successMessage) {
|
|
399
457
|
this.snackbarMessage.emit({ message: successMessage, type: 'success' });
|
|
400
458
|
}
|
|
@@ -533,9 +591,113 @@ export class AssessmentMakerComponent {
|
|
|
533
591
|
return 's' + sq.id;
|
|
534
592
|
return 'i' + index;
|
|
535
593
|
}
|
|
594
|
+
collectExistingQuestionIds() {
|
|
595
|
+
var _a, _b;
|
|
596
|
+
const ids = new Set();
|
|
597
|
+
(_b = (_a = this.assessmentQuestionPaperData) === null || _a === void 0 ? void 0 : _a.questionPaperSectionList) === null || _b === void 0 ? void 0 : _b.forEach(section => {
|
|
598
|
+
var _a;
|
|
599
|
+
if (section.isActive === false)
|
|
600
|
+
return;
|
|
601
|
+
(_a = section.sectionQuestionsList) === null || _a === void 0 ? void 0 : _a.forEach(sq => {
|
|
602
|
+
var _a;
|
|
603
|
+
if (sq.isActive === false)
|
|
604
|
+
return;
|
|
605
|
+
const qId = sq.questionId || ((_a = sq.question) === null || _a === void 0 ? void 0 : _a.id);
|
|
606
|
+
if (qId)
|
|
607
|
+
ids.add(qId);
|
|
608
|
+
});
|
|
609
|
+
});
|
|
610
|
+
return ids;
|
|
611
|
+
}
|
|
612
|
+
openQuestionBankPicker(section) {
|
|
613
|
+
var _a, _b, _c, _d;
|
|
614
|
+
const existingQuestionIds = this.collectExistingQuestionIds();
|
|
615
|
+
const config = this.questionBankConfig || {
|
|
616
|
+
domain: (_a = this.defaultAssessmentDTO) === null || _a === void 0 ? void 0 : _a.domain,
|
|
617
|
+
tenant: (_b = this.defaultAssessmentDTO) === null || _b === void 0 ? void 0 : _b.tenant
|
|
618
|
+
};
|
|
619
|
+
const dialogRef = this.dialog.open(QuestionBankPickerComponent, {
|
|
620
|
+
autoFocus: false,
|
|
621
|
+
position: { right: '0' },
|
|
622
|
+
maxWidth: '100%',
|
|
623
|
+
width: '55rem',
|
|
624
|
+
height: '100vh',
|
|
625
|
+
panelClass: ['assessment-dialog', 'assessment-dialog-slider-animation'],
|
|
626
|
+
hasBackdrop: true,
|
|
627
|
+
data: {
|
|
628
|
+
questionBankConfig: config,
|
|
629
|
+
existingQuestionIds,
|
|
630
|
+
labelConfig: this.labelConfig,
|
|
631
|
+
imageConfig: this.imageConfig,
|
|
632
|
+
questionTypes: this.questionTypes,
|
|
633
|
+
targetSectionName: (_d = (_c = section === null || section === void 0 ? void 0 : section.qpsName) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.text
|
|
634
|
+
}
|
|
635
|
+
});
|
|
636
|
+
dialogRef.afterClosed().subscribe((selectedQuestions) => {
|
|
637
|
+
if (selectedQuestions === null || selectedQuestions === void 0 ? void 0 : selectedQuestions.length) {
|
|
638
|
+
this.importQuestionsToSection(section, selectedQuestions);
|
|
639
|
+
}
|
|
640
|
+
});
|
|
641
|
+
}
|
|
642
|
+
importQuestionsToSection(section, questions) {
|
|
643
|
+
if (!this.assessmentQuestionPaperData) {
|
|
644
|
+
this.assessmentQuestionPaperData = { id: 0, questionPaperSectionList: [] };
|
|
645
|
+
}
|
|
646
|
+
if (!this.assessmentQuestionPaperData.questionPaperSectionList) {
|
|
647
|
+
this.assessmentQuestionPaperData.questionPaperSectionList = [];
|
|
648
|
+
}
|
|
649
|
+
if (!section) {
|
|
650
|
+
const list = this.assessmentQuestionPaperData.questionPaperSectionList;
|
|
651
|
+
const lastOrder = list.length ? (list[list.length - 1].orderNo || 0) : 0;
|
|
652
|
+
section = this.assessmentBuilderService.createNewSection(lastOrder + 1);
|
|
653
|
+
this.assessmentQuestionPaperData.questionPaperSectionList.push(section);
|
|
654
|
+
}
|
|
655
|
+
if (!section.sectionQuestionsList) {
|
|
656
|
+
section.sectionQuestionsList = [];
|
|
657
|
+
}
|
|
658
|
+
questions.forEach(question => {
|
|
659
|
+
var _a, _b;
|
|
660
|
+
const cleanQuestion = removeKeyDeep(question, 'uuid');
|
|
661
|
+
if (cleanQuestion.id) {
|
|
662
|
+
this.questionBank[cleanQuestion.id] = cleanQuestion;
|
|
663
|
+
}
|
|
664
|
+
const sectionQuestion = this.assessmentBuilderService.generateSectionQuestion(cleanQuestion);
|
|
665
|
+
sectionQuestion.orderNo = (((_a = section.sectionQuestionsList) === null || _a === void 0 ? void 0 : _a.length) || 0) + 1;
|
|
666
|
+
(_b = section.sectionQuestionsList) === null || _b === void 0 ? void 0 : _b.push(sectionQuestion);
|
|
667
|
+
});
|
|
668
|
+
const successMsg = this.labelConfig['COMMONS_ASSESSMENT.TOAST.QUESTIONS_IMPORTED_SUCCESS'] || 'Questions imported successfully';
|
|
669
|
+
if (this.assessmentId) {
|
|
670
|
+
this.patchAssessmentAndQuestionPaper(successMsg);
|
|
671
|
+
}
|
|
672
|
+
else {
|
|
673
|
+
this.createAssessmentAndQuestionPaperOnImport(successMsg);
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
createAssessmentAndQuestionPaperOnImport(successMessage) {
|
|
677
|
+
const payload = Object.assign({ questionPaper: this.assessmentBuilderService.generateQuestionPaperDTO(this.assessmentQuestionPaperData, this.questionBank), assessment: this.assessmentBuilderService.generateAssessmentDTO(this.assessmentId, this.assessmentQuestionPaperData, this.buildProctoringConfigs()) }, this.assessmentBuilderService.buildInstancePatch(this.showTimeInput, this.assessmentInstanceId, this.durationSeconds));
|
|
678
|
+
this.assessmentMakerService.createAssessmentAndQuestionPaper(payload).subscribe({
|
|
679
|
+
next: (res) => {
|
|
680
|
+
var _a;
|
|
681
|
+
if ((_a = res === null || res === void 0 ? void 0 : res.assessment) === null || _a === void 0 ? void 0 : _a.id) {
|
|
682
|
+
this.assessmentId = res.assessment.id;
|
|
683
|
+
this.assessmentIdChange.emit(this.assessmentId);
|
|
684
|
+
}
|
|
685
|
+
this.questionBank = Object.assign(Object.assign({}, this.questionBank), ((res === null || res === void 0 ? void 0 : res.questionMap) || {}));
|
|
686
|
+
this.updateAssessmentQuestionPaperData(res === null || res === void 0 ? void 0 : res.questionPaper);
|
|
687
|
+
this.generateQuestionBank();
|
|
688
|
+
this.checkAssessmentQuestionsLocked();
|
|
689
|
+
if (successMessage) {
|
|
690
|
+
this.snackbarMessage.emit({ message: successMessage, type: 'success' });
|
|
691
|
+
}
|
|
692
|
+
},
|
|
693
|
+
error: (error) => {
|
|
694
|
+
this.snackbarMessage.emit({ message: this.labelConfig['COMMONS_ASSESSMENT.TOAST.ERROR_DEFAULT'] || 'Failed to save imported questions', type: 'error' });
|
|
695
|
+
}
|
|
696
|
+
});
|
|
697
|
+
}
|
|
536
698
|
}
|
|
537
699
|
AssessmentMakerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AssessmentMakerComponent, deps: [{ token: i1.AssessmentMakerService }, { token: i2.AssessmentBuilderService }, { token: i3.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
|
|
538
|
-
AssessmentMakerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AssessmentMakerComponent, selector: "lib-assessment-maker", inputs: { labelConfig: "labelConfig", imageConfig: "imageConfig", questionTypes: "questionTypes", showFooter: "showFooter", customRules: "customRules", assessmentId: "assessmentId", assessmentInstanceId: "assessmentInstanceId", defaultAssessmentDTO: "defaultAssessmentDTO", predefinedAssessmentInstance: "predefinedAssessmentInstance", enableSkillsToQuestionMapping: "enableSkillsToQuestionMapping", assessmentContext: "assessmentContext", minimumRequiredSections: "minimumRequiredSections", checkForResponses: "checkForResponses", showProctoringToggle: "showProctoringToggle", showTimeInput: "showTimeInput" }, outputs: { assessmentIdChange: "assessmentIdChange", assessmentInstanceIdChange: "assessmentInstanceIdChange", snackbarMessage: "snackbarMessage" }, ngImport: i0, template: "<div *ngIf=\"configsLoaded && !showLoader; else loader\" class=\"col-12 h-100\">\r\n <div class=\"col-12 h-100 py-4\" [class.height-without-footer]=\"showFooter\">\r\n <ng-container *ngIf=\"assessmentQuestionPaperData?.questionPaperSectionList?.length\">\r\n <div *ngIf=\"showProctoringToggle || showTimeInput\"\r\n class=\"d-flex align-items-center justify-content-end flex-wrap gap-4 mb-3\">\r\n <div *ngIf=\"showTimeInput\" class=\"d-flex align-items-center gap-2\">\r\n <label for=\"durationInput\" class=\"assessment-text-medium-13 assessment-text-grey-ten mb-0 cursor-pointer\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.LABEL.DURATION'] }}\r\n </label>\r\n <input type=\"number\" id=\"durationInput\" min=\"1\" [(ngModel)]=\"durationMinutes\"\r\n (keydown)=\"blockNegativeKeys($event)\" (ngModelChange)=\"durationMinutes = $event > 0 ? $event : null\"\r\n [placeholder]=\"0\"\r\n class=\"form-control form-control-sm assessment-border-radius-two assessment-text-regular-13\" style=\"width: 4rem;\">\r\n <span class=\"assessment-text-regular-13 assessment-text-grey-seven\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.LABEL.MINUTES'] }}\r\n </span>\r\n </div>\r\n <div *ngIf=\"showProctoringToggle\" class=\"d-flex align-items-center gap-2\">\r\n <label for=\"proctoringToggle\" class=\"assessment-text-medium-13 assessment-text-grey-ten mb-0 cursor-pointer\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.LABEL.ENABLE_PROCTORING'] }}\r\n </label>\r\n <div class=\"form-check form-switch m-0\">\r\n <input type=\"checkbox\" id=\"proctoringToggle\" class=\"form-check-input cursor-pointer\"\r\n [(ngModel)]=\"proctoringEnabled\">\r\n </div>\r\n </div>\r\n </div>\r\n <mat-accordion multi=\"true\" cdkDropList (cdkDropListDropped)=\"dropSection($event)\">\r\n <mat-expansion-panel [hideToggle]=\"true\" #panel=\"matExpansionPanel\" [expanded]=\"section.isExpanded\"\r\n (opened)=\"section.isExpanded = true\" (closed)=\"section.isExpanded = false\"\r\n class=\"mb-4 border-0 overflow-hidden assessment-panel shadow-none bg-transparent\" cdkDrag\r\n *ngFor=\"let section of assessmentQuestionPaperData?.questionPaperSectionList; let sectionIndex = index; trackBy: trackBySectionId\">\r\n <!-- Section Header -->\r\n <mat-expansion-panel-header class=\"col-12 p-0 h-auto bg-transparent\">\r\n <div class=\"d-flex col-12 align-items-center gap-md-3 gap-2\">\r\n <img cdkDragHandle [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DRAG_DROP']\"\r\n class=\"cursor-grab\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/drag-drop.svg')\" />\r\n <div class=\"d-flex align-items-center gap-2 flex-grow-1 justify-content-between p-3 assessment-border-radius-two assessment-border-two assessment-bg-white\"\r\n [class.no-border]=\"section.isExpanded\">\r\n <div>\r\n <div class=\"d-flex align-items-center mb-1\">\r\n <input type=\"text\" [id]=\"'sectionNameInput_' + sectionIndex\"\r\n class=\"col-md-11 col-10 assessment-text-semibold-18 border-0 outline-0 bg-transparent p-0 input-focus\"\r\n [(ngModel)]=\"section.qpsName[0].text\"\r\n [attr.size]=\"(section.qpsName[0].text?.length || 1)\"\r\n (click)=\"$event.stopPropagation()\" (keydown)=\"$event.stopPropagation()\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.EDIT']\"\r\n class=\"action-icon cursor-pointer\"\r\n (click)=\"focusSectionInput(sectionIndex, $event)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/pencil.svg')\" />\r\n </div>\r\n <p class=\"mb-0 assessment-text-medium-12 assessment-text-grey-seven\">\r\n {{section?.sectionQuestionsList?.length || 0}}\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTIONS']}}\r\n </p>\r\n </div>\r\n <div class=\"d-flex align-items-center gap-md-4 gap-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ARROW_DOWN_BLACK']\"\r\n [ngClass]=\"panel.expanded ? 'change-direction' : 'change-direction-reverse'\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/arrow-down-black.svg')\" />\r\n <button [matMenuTriggerFor]=\"menu\" (click)=\"$event.stopPropagation()\"\r\n class=\"border-0 bg-transparent py-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ACTION_DOTS']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/action-dots.svg')\" />\r\n </button>\r\n <mat-menu #menu=\"matMenu\"\r\n class=\"mat-menu assessment-border-radius-two assessment-border-grey-four-1\">\r\n <button (click)=\"addInstruction(section)\" mat-menu-item\r\n class=\"py-2 assessment-text-semibold-12\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_INSTRUCTIONS']}}\r\n </button>\r\n <button (click)=\"duplicateSection(section.id)\" mat-menu-item\r\n class=\"py-2 assessment-text-semibold-12\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.DUPLICATE']}}\r\n </button>\r\n <button *ngIf=\"(assessmentQuestionPaperData?.questionPaperSectionList?.length ?? 0) > minimumRequiredSections\" \r\n (click)=\"deleteSection(section)\" mat-menu-item\r\n class=\"py-2 assessment-text-semibold-12 assessment-text-danger\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.DELETE']}}\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-expansion-panel-header>\r\n\r\n <!-- Questions inside section -->\r\n <div cdkDropList [cdkDropListData]=\"section.sectionQuestionsList || []\"\r\n (cdkDropListDropped)=\"dropQuestion($event)\">\r\n <div cdkDrag *ngFor=\"let sectionQuestion of section.sectionQuestionsList; let i = index; trackBy: trackBySectionQuestion\"\r\n class=\"d-flex align-items-start gap-md-3 gap-2 my-3 overflow-hidden\">\r\n <img cdkDragHandle [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DRAG_DROP']\"\r\n class=\"cursor-grab mt-4\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/drag-drop.svg')\" />\r\n <div class=\"flex-grow-1 p-3 assessment-border-two assessment-border-radius-two question-container assessment-bg-white\">\r\n <lib-question-details [sectionQuestion]=\"sectionQuestion\"\r\n [question]=\"getQuestionFromBank(sectionQuestion.questionId) || {}\"\r\n [questionBank]=\"questionBank\" [imageConfig]=\"imageConfig\"\r\n [labelConfig]=\"labelConfig\" [allowDelete]=\"(section?.sectionQuestionsList?.length ?? 0) > 1\"\r\n (editQuestion)=\"createEditQuestion(section, $event?.questionId, $event?.isChildQuestion)\"\r\n (duplicateQuestion)=\"duplicateQuestion(section, $event)\"\r\n (deleteParentQuestion)=\"deleteParentQuestion($event)\"\r\n (deleteChildQuestion)=\"deleteChildQuestion($event.option, $event.childQuestionId)\">\r\n </lib-question-details>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 ps-4 border-bottom pb-4\">\r\n <button (click)=\"createEditQuestion(section)\"\r\n class=\"assessment-zoom-animation assessment-button-padding d-flex align-items-center justify-content-center gap-3 assessment-text-primary-one assessment-bg-palette-EDF3FD assessment-text-semibold-12 outline-0 assessment-border-radius-two mt-3 border-ADC9F6\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_A_QUESTION']}}\r\n </button>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n <button (click)=\"createEditQuestion()\"\r\n class=\"assessment-zoom-animation assessment-button-padding d-flex align-items-center justify-content-center gap-3 assessment-text-primary-one assessment-bg-palette-EDF3FD assessment-text-semibold-12 outline-0 assessment-border-radius-two mt-3 border-ADC9F6 ms-4\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ADD_SECTION']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/add-section.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_A_SECTION']}}\r\n </button>\r\n </ng-container>\r\n <div *ngIf=\"!assessmentQuestionPaperData?.questionPaperSectionList?.length\"\r\n class=\"h-100 d-flex flex-column align-items-center justify-content-center gap-3\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.NO_QUESTIONS']\" class=\"col-sm-auto col-6\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/no-questions.svg')\" />\r\n <div class=\"text-center\">\r\n <p class=\"mb-1 assessment-text-medium-18\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_CUSTOM_QUESTIONS']}}</p>\r\n <p class=\"mb-0 assessment-text-medium-12 assessment-text-grey-seven\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_QUESTION_DESC']}}</p>\r\n </div>\r\n <button (click)=\"createEditQuestion()\"\r\n class=\"assessment-button-padding assessment-border-radius-two d-flex align-items-center gap-2 assessment-bg-palette-EDF3FD assessment-text-primary-one assessment-text-semibold-12 border-0 assessment-zoom-animation\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_A_QUESTION']}}\r\n </button>\r\n </div>\r\n </div>\r\n <div *ngIf=\"showFooter\"\r\n class=\"bg-white p-3 position-sticky bottom-0 d-flex align-items-center justify-content-end border-top gap-3\">\r\n <button (click)=\"discardChanges()\" [disabled]=\"isSubmitting\"\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary-transparent assessment-text-semibold-13\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.DISCARD']}}</button>\r\n <button (click)=\"finalSubmit()\" [disabled]=\"isSubmitting\"\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary assessment-text-semibold-13 position-relative\">\r\n <span [ngClass]=\"{'opacity-0': isSubmitting}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.PUBLISH']}}\r\n </span>\r\n <mat-spinner *ngIf=\"isSubmitting\" [diameter]=\"20\"\r\n class=\"position-absolute top-50 start-50 translate-middle assessment-spinner-white\"></mat-spinner>\r\n </button>\r\n </div>\r\n</div>\r\n<ng-template #loader>\r\n <div class=\"h-100 col-12 d-flex align-items-center justify-content-center py-5\">\r\n <mat-spinner diameter=\"60\" class=\"assessment-spinner-primary\"></mat-spinner>\r\n </div>\r\n</ng-template>", styles: ["@charset \"UTF-8\";.assessment-text-grey-ten{color:var(--assessment-grey-ten)!important}.assessment-bg-grey-ten{background-color:var(--assessment-grey-ten)!important}.assessment-text-grey-nine{color:var(--assessment-grey-nine)!important}.assessment-bg-grey-nine{background-color:var(--assessment-grey-nine)!important}.assessment-text-grey-eight{color:var(--assessment-grey-eight)!important}.assessment-bg-grey-eight{background-color:var(--assessment-grey-eight)!important}.assessment-text-grey-seven{color:var(--assessment-grey-seven)!important}.assessment-bg-grey-seven{background-color:var(--assessment-grey-seven)!important}.assessment-text-grey-six{color:var(--assessment-grey-six)!important}.assessment-bg-grey-six{background-color:var(--assessment-grey-six)!important}.assessment-text-grey-five{color:var(--assessment-grey-five)!important}.assessment-bg-grey-five{background-color:var(--assessment-grey-five)!important}.assessment-text-grey-four{color:var(--assessment-grey-four)!important}.assessment-bg-grey-four{background-color:var(--assessment-grey-four)!important}.assessment-text-grey-three{color:var(--assessment-grey-three)!important}.assessment-bg-grey-three{background-color:var(--assessment-grey-three)!important}.assessment-text-grey-two{color:var(--assessment-grey-two)!important}.assessment-bg-grey-two{background-color:var(--assessment-grey-two)!important}.assessment-text-grey-one{color:var(--assessment-grey-one)!important}.assessment-bg-grey-one{background-color:var(--assessment-grey-one)!important}.assessment-text-white{color:var(--assessment-white)!important}.assessment-bg-white{background-color:var(--assessment-white)!important}.assessment-text-black{color:var(--assessment-black)!important}.assessment-bg-black{background-color:var(--assessment-black)!important}.assessment-text-danger{color:var(--assessment-danger)!important}.assessment-bg-danger{background-color:var(--assessment-danger)!important}.assessment-text-danger-bg{color:var(--assessment-danger-bg)!important}.assessment-bg-danger-bg{background-color:var(--assessment-danger-bg)!important}.assessment-text-success{color:var(--assessment-success)!important}.assessment-bg-success{background-color:var(--assessment-success)!important}.assessment-text-success-bg{color:var(--assessment-success-bg)!important}.assessment-bg-success-bg{background-color:var(--assessment-success-bg)!important}.assessment-text-warning{color:var(--assessment-warning)!important}.assessment-bg-warning{background-color:var(--assessment-warning)!important}.assessment-text-warning-bg{color:var(--assessment-warning-bg)!important}.assessment-bg-warning-bg{background-color:var(--assessment-warning-bg)!important}.assessment-text-primary-one{color:var(--assessment-primary-one)!important}.assessment-bg-primary-one{background-color:var(--assessment-primary-one)!important}.assessment-text-primary-four{color:var(--assessment-primary-four)!important}.assessment-bg-primary-four{background-color:var(--assessment-primary-four)!important}.assessment-text-palette-EDF3FD{color:var(--assessment-palette-EDF3FD)!important}.assessment-bg-palette-EDF3FD{background-color:var(--assessment-palette-EDF3FD)!important}.assessment-text-palette-C8DAF9{color:var(--assessment-palette-C8DAF9)!important}.assessment-bg-palette-C8DAF9{background-color:var(--assessment-palette-C8DAF9)!important}.assessment-text-palette-ADC9F6{color:var(--assessment-palette-ADC9F6)!important}.assessment-bg-palette-ADC9F6{background-color:var(--assessment-palette-ADC9F6)!important}.assessment-text-palette-FEF9F1{color:var(--assessment-palette-FEF9F1)!important}.assessment-bg-palette-FEF9F1{background-color:var(--assessment-palette-FEF9F1)!important}.assessment-text-palette-F9DAA6{color:var(--assessment-palette-F9DAA6)!important}.assessment-bg-palette-F9DAA6{background-color:var(--assessment-palette-F9DAA6)!important}.assessment-text-palette-E8F7F0{color:var(--assessment-palette-E8F7F0)!important}.assessment-bg-palette-E8F7F0{background-color:var(--assessment-palette-E8F7F0)!important}.assessment-text-palette-B7E7CF{color:var(--assessment-palette-B7E7CF)!important}.assessment-bg-palette-B7E7CF{background-color:var(--assessment-palette-B7E7CF)!important}.assessment-text-palette-FEF1E8{color:var(--assessment-palette-FEF1E8)!important}.assessment-bg-palette-FEF1E8{background-color:var(--assessment-palette-FEF1E8)!important}.assessment-text-palette-FAD2B9{color:var(--assessment-palette-FAD2B9)!important}.assessment-bg-palette-FAD2B9{background-color:var(--assessment-palette-FAD2B9)!important}.assessment-box-shadow-one{box-shadow:var(--assessment-box-shadow-one)!important}.assessment-border-radius-one{border-radius:var(--assessment-border-radius-one)!important}.assessment-border-radius-two{border-radius:var(--assessment-border-radius-two)!important}.assessment-border-radius-three{border-radius:var(--assessment-border-radius-three)!important}.assessment-border-radius-four{border-radius:var(--assessment-border-radius-four)!important}.assessment-border-radius-five{border-radius:var(--assessment-border-radius-five)!important}.assessment-border-radius-six{border-radius:var(--assessment-border-radius-six)!important}.assessment-input-border-one{border:var(--assessment-input-border-one)!important}.assessment-input-border-invalid{border:var(--assessment-input-border-invalid)!important}.assessment-input-focus-border{border:var(--assessment-input-focus-border)!important}.assessment-border-two{border:var(--assessment-border-two)!important}.assessment-card-border{border:var(--assessment-card-border)!important}.assessment-tooltip-border{border:var(--assessment-tooltip-border)!important}.assessment-box-shadow-tooltip{box-shadow:var(--assessment-box-shadow-tooltip)!important}.assessment-input-focus-box-shadow{box-shadow:var(--assessment-input-focus-box-shadow)!important}.assessment-button-padding{padding:var(--assessment-button-padding)!important}.assessment-button-padding-large{padding:var(--assessment-button-padding-large)!important}.assessment-input-padding{padding:var(--assessment-input-padding)!important}.assessment-text-font-family{color:var(--assessment-font-family)!important}.assessment-bg-font-family{background-color:var(--assessment-font-family)!important}.assessment-text-regular-12{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-semibold-12{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-medium-11{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-10{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.42rem + .2vw);line-height:calc(.72rem + .2vw)}.assessment-text-regular-11{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-12{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-regular-13{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-semibold-13{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-medium-13{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-medium-14{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw)!important;line-height:calc(1.2rem + .2vw)!important}.assessment-text-semibold-14{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.assessment-text-regular-15{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.4rem + .1vw)}.assessment-text-medium-15{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-semibold-15{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-semibold-16{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-medium-16{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-medium-18{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}.assessment-text-semibold-18{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}@media (min-height: 100vw) and (orientation: portrait){.assessment-text-medium-18,.assessment-text-semibold-18{font-size:calc(1rem + .1vh)!important;line-height:calc(1.6rem + .1vh)!important}.assessment-text-medium-16,.assessment-text-semibold-16{font-size:calc(.9rem + .2vh)!important;line-height:calc(1.4rem + .2vh)!important}.assessment-text-regular-15,.assessment-text-semibold-15{font-size:calc(.8rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-15{font-size:calc(.82rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-12,.assessment-text-regular-12,.assessment-text-semibold-12{font-size:calc(.5rem + .4vh);line-height:calc(.8rem + .4vh)}.assessment-text-medium-14,.assessment-text-semibold-14{font-size:calc(.8rem + .1vh)!important;line-height:calc(1.2rem + .2vh)!important}.assessment-text-regular-13,.assessment-text-medium-13,.assessment-text-semibold-13{font-size:calc(.7rem + .2vh)!important;line-height:calc(1rem + .3vh)!important}.assessment-text-regular-11,.assessment-text-medium-11{font-size:calc(.5rem + .2vh)!important;line-height:calc(.8rem + .2vh)!important}.assessment-text-medium-10{font-size:calc(.45rem + .2vh)!important;line-height:calc(.72rem + .2vh)!important}}.assessment-btn-primary{background-color:var(--assessment-primary-one);color:var(--assessment-white);border:.064rem solid var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two)}.assessment-btn-primary-transparent{background-color:var(--assessment-white);color:var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two);border:.064rem solid var(--assessment-primary-one)}.assessment-zoom-animation{transition:transform .2s ease;transform:translateZ(0);text-rendering:optimizeLegibility}.assessment-zoom-animation:hover{transform:scale(1.03)}.assessment-zoom-animation:active{transform:scale(1)}.assessment-zoom-animation:disabled{transform:none!important}.change-direction{transform:rotate(180deg);transition:.3s ease-out}.change-direction-reverse{transform:rotate(0);transition:.3s ease-out}.outline-0{outline:none}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.action-icon{width:1.2rem}.mat-menu-item,.mat-mdc-menu-item{height:inherit;min-height:unset;--mat-menu-item-label-text-font: var(--assessment-font-family) !important;--mat-menu-item-label-text-size: 14px !important;--mat-menu-item-label-text-weight: 600 !important;--mat-menu-item-label-text-line-height: inherit !important}.skill-chip{width:-moz-fit-content;width:fit-content;background:var(--assessment-palette-EDF3FD);border:.064rem solid var(--assessment-palette-C8DAF9)}.assessment-form-check-input-primary-one{min-height:unset}.assessment-form-check-input-primary-one .form-check-input{width:1rem;height:1rem}.assessment-form-check-input-primary-one .form-check-input:checked{background-color:var(--assessment-primary-one);color:var(--assessment-primary-one)}.assessment-form-check-input-primary-one .form-check-input:disabled{opacity:.8}.form-check-input:checked{background-color:var(--assessment-primary-one);border-color:var(--assessment-primary-one)}.form-check-input:focus{border-color:var(--assessment-primary-one);box-shadow:none}.input-focus{overflow:hidden;text-overflow:ellipsis}.input-focus:focus-visible{border-bottom:var(--assessment-input-focus-border)!important}.one-line-truncate{display:inline-block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.height-without-footer{height:calc(100% - 4.4rem)!important}.question-container{transition:all .3s ease}.question-container:hover{box-shadow:var(--assessment-box-shadow-one);background-color:var(--assessment-palette-EDF3FD);border-color:var(--assessment-palette-C8DAF9)!important}.border-ADC9F6{border:.064rem solid var(--assessment-palette-ADC9F6)}.no-border{border-color:transparent!important}\n"], components: [{ type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { type: i5.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i6.QuestionDetailsComponent, selector: "lib-question-details", inputs: ["sectionQuestion", "question", "questionBank", "labelConfig", "imageConfig", "allowDelete"], outputs: ["editQuestion", "duplicateQuestion", "deleteParentQuestion", "deleteChildQuestion"] }, { type: i7.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { type: i9.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i9.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i4.MatAccordion, selector: "mat-accordion", inputs: ["multi", "displayMode", "togglePosition", "hideToggle"], exportAs: ["matAccordion"] }, { type: i10.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "id", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListAutoScrollDisabled", "cdkDropListOrientation", "cdkDropListLockAxis", "cdkDropListData", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragDisabled", "cdkDragStartDelay", "cdkDragLockAxis", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragBoundary", "cdkDragRootElement", "cdkDragPreviewContainer", "cdkDragData", "cdkDragFreeDragPosition"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i10.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }] });
|
|
700
|
+
AssessmentMakerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AssessmentMakerComponent, selector: "lib-assessment-maker", inputs: { labelConfig: "labelConfig", imageConfig: "imageConfig", questionTypes: "questionTypes", showFooter: "showFooter", customRules: "customRules", assessmentId: "assessmentId", assessmentInstanceId: "assessmentInstanceId", defaultAssessmentDTO: "defaultAssessmentDTO", predefinedAssessmentInstance: "predefinedAssessmentInstance", enableSkillsToQuestionMapping: "enableSkillsToQuestionMapping", assessmentContext: "assessmentContext", minimumRequiredSections: "minimumRequiredSections", checkForResponses: "checkForResponses", showProctoringToggle: "showProctoringToggle", showTimeInput: "showTimeInput", enableImportFromQuestionBank: "enableImportFromQuestionBank", questionBankConfig: "questionBankConfig" }, outputs: { assessmentIdChange: "assessmentIdChange", assessmentInstanceIdChange: "assessmentInstanceIdChange", snackbarMessage: "snackbarMessage" }, ngImport: i0, template: "<div *ngIf=\"configsLoaded && !showLoader; else loader\" class=\"col-12 h-100\">\r\n <div class=\"col-12 h-100 py-4\" [class.height-without-footer]=\"showFooter\">\r\n <ng-container *ngIf=\"assessmentQuestionPaperData?.questionPaperSectionList?.length\">\r\n <div *ngIf=\"showProctoringToggle || showTimeInput\"\r\n class=\"d-flex align-items-center justify-content-end flex-wrap gap-4 mb-3\">\r\n <div *ngIf=\"showTimeInput\" class=\"d-flex align-items-center gap-2\">\r\n <label for=\"durationInput\" class=\"assessment-text-medium-13 assessment-text-grey-ten mb-0 cursor-pointer\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.LABEL.DURATION'] }}\r\n </label>\r\n <input type=\"number\" id=\"durationInput\" min=\"1\" [(ngModel)]=\"durationMinutes\"\r\n (keydown)=\"blockNegativeKeys($event)\" (ngModelChange)=\"durationMinutes = $event > 0 ? $event : null\"\r\n [placeholder]=\"0\"\r\n class=\"form-control form-control-sm assessment-border-radius-two assessment-text-regular-13\" style=\"width: 4rem;\">\r\n <span class=\"assessment-text-regular-13 assessment-text-grey-seven\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.LABEL.MINUTES'] }}\r\n </span>\r\n </div>\r\n <div *ngIf=\"showProctoringToggle\" class=\"d-flex align-items-center gap-2\">\r\n <label for=\"proctoringToggle\" class=\"assessment-text-medium-13 assessment-text-grey-ten mb-0 cursor-pointer\">\r\n {{ labelConfig['COMMONS_ASSESSMENT.LABEL.ENABLE_PROCTORING'] }}\r\n </label>\r\n <div class=\"form-check form-switch m-0\">\r\n <input type=\"checkbox\" id=\"proctoringToggle\" class=\"form-check-input cursor-pointer\"\r\n [(ngModel)]=\"proctoringEnabled\">\r\n </div>\r\n </div>\r\n </div>\r\n <mat-accordion multi=\"true\" cdkDropList (cdkDropListDropped)=\"dropSection($event)\">\r\n <mat-expansion-panel [hideToggle]=\"true\" #panel=\"matExpansionPanel\" [expanded]=\"section.isExpanded\"\r\n (opened)=\"section.isExpanded = true\" (closed)=\"section.isExpanded = false\"\r\n class=\"mb-4 border-0 assessment-panel shadow-none bg-transparent\" cdkDrag\r\n *ngFor=\"let section of assessmentQuestionPaperData?.questionPaperSectionList; let sectionIndex = index; trackBy: trackBySectionId\">\r\n <!-- Section Header -->\r\n <mat-expansion-panel-header class=\"col-12 p-0 h-auto bg-transparent\">\r\n <div class=\"d-flex col-12 align-items-center gap-md-3 gap-2\">\r\n <img cdkDragHandle [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DRAG_DROP']\"\r\n class=\"cursor-grab\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/drag-drop.svg')\" />\r\n <div class=\"d-flex align-items-center gap-2 flex-grow-1 justify-content-between p-3 assessment-border-radius-two assessment-border-two assessment-bg-white\"\r\n [class.border-transparent]=\"section.isExpanded\">\r\n <div>\r\n <div class=\"d-flex align-items-center mb-1\">\r\n <input type=\"text\" [id]=\"'sectionNameInput_' + sectionIndex\"\r\n class=\"col-md-11 col-10 assessment-text-semibold-18 border-0 outline-0 bg-transparent p-0 input-focus\"\r\n [(ngModel)]=\"section.qpsName[0].text\"\r\n [attr.size]=\"(section.qpsName[0].text?.length || 1)\"\r\n (click)=\"$event.stopPropagation()\" (keydown)=\"$event.stopPropagation()\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.EDIT']\"\r\n class=\"action-icon cursor-pointer\"\r\n (click)=\"focusSectionInput(sectionIndex, $event)\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/pencil.svg')\" />\r\n </div>\r\n <p class=\"mb-0 assessment-text-medium-12 assessment-text-grey-seven\">\r\n {{section?.sectionQuestionsList?.length || 0}}\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.QUESTIONS']}}\r\n </p>\r\n </div>\r\n <div class=\"d-flex align-items-center gap-md-4 gap-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ARROW_DOWN_BLACK']\"\r\n [ngClass]=\"panel.expanded ? 'change-direction' : 'change-direction-reverse'\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/arrow-down-black.svg')\" />\r\n <button [matMenuTriggerFor]=\"menu\" (click)=\"$event.stopPropagation()\"\r\n class=\"border-0 bg-transparent py-2\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ACTION_DOTS']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/action-dots.svg')\" />\r\n </button>\r\n <mat-menu #menu=\"matMenu\"\r\n class=\"mat-menu assessment-border-radius-two assessment-border-grey-four-1\">\r\n <button (click)=\"addInstruction(section)\" mat-menu-item\r\n class=\"py-2 assessment-text-semibold-12\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_INSTRUCTIONS']}}\r\n </button>\r\n <button (click)=\"duplicateSection(section.id)\" mat-menu-item\r\n class=\"py-2 assessment-text-semibold-12\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.DUPLICATE']}}\r\n </button>\r\n <button *ngIf=\"(assessmentQuestionPaperData?.questionPaperSectionList?.length ?? 0) > minimumRequiredSections\" \r\n (click)=\"deleteSection(section)\" mat-menu-item\r\n class=\"py-2 assessment-text-semibold-12 assessment-text-danger\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.DELETE']}}\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n </div>\r\n </mat-expansion-panel-header>\r\n\r\n <!-- Questions inside section -->\r\n <div cdkDropList [cdkDropListData]=\"section.sectionQuestionsList || []\"\r\n (cdkDropListDropped)=\"dropQuestion($event)\">\r\n <div cdkDrag *ngFor=\"let sectionQuestion of section.sectionQuestionsList; let i = index; trackBy: trackBySectionQuestion\"\r\n class=\"d-flex align-items-start gap-md-3 gap-2 my-3 overflow-hidden\">\r\n <img cdkDragHandle [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.DRAG_DROP']\"\r\n class=\"cursor-grab mt-4\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/drag-drop.svg')\" />\r\n <div class=\"flex-grow-1 p-3 assessment-border-two assessment-border-radius-two question-container assessment-bg-white\">\r\n <lib-question-details [sectionQuestion]=\"sectionQuestion\"\r\n [question]=\"getQuestionFromBank(sectionQuestion.questionId) || {}\"\r\n [questionBank]=\"questionBank\" [imageConfig]=\"imageConfig\"\r\n [labelConfig]=\"labelConfig\" [allowDelete]=\"(section?.sectionQuestionsList?.length ?? 0) > 1\"\r\n [isLocked]=\"isQuestionLocked(sectionQuestion?.questionId)\"\r\n (editQuestion)=\"createEditQuestion(section, $event?.questionId, $event?.isChildQuestion)\"\r\n (duplicateQuestion)=\"duplicateQuestion(section, $event)\"\r\n (deleteParentQuestion)=\"deleteParentQuestion($event)\"\r\n (deleteChildQuestion)=\"deleteChildQuestion($event.option, $event.childQuestionId)\">\r\n </lib-question-details>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"col-12 ps-4 border-bottom pb-4 d-flex align-items-center\">\r\n <ng-container *ngIf=\"enableImportFromQuestionBank; else singleAddQuestionBtn\">\r\n <div class=\"position-relative d-inline-block\" [style.z-index]=\"activeDropdownId === ('question_' + section.id) ? 1005 : 'auto'\">\r\n <button (click)=\"toggleDropdown('question_' + section.id, $event)\"\r\n class=\"assessment-zoom-animation assessment-button-padding d-flex align-items-center justify-content-center gap-2 assessment-text-primary-one assessment-bg-palette-EDF3FD assessment-text-semibold-12 outline-0 assessment-border-radius-two mt-3 border-ADC9F6\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_QUESTION'] || 'Add Question'}}\r\n </button>\r\n <div *ngIf=\"activeDropdownId === 'question_' + section.id\" (click)=\"closeAllDropdowns()\" class=\"position-fixed top-0 start-0 w-100 h-100 bg-transparent\" style=\"z-index: 1000;\"></div>\r\n <div *ngIf=\"activeDropdownId === 'question_' + section.id\"\r\n class=\"dropdown-menu assessment-dropdown-menu show shadow border rounded-3 p-0 overflow-hidden position-absolute start-0\"\r\n [ngClass]=\"dropdownPlacementMap['question_' + section.id] === 'top' ? 'bottom-100 mb-2 assessment-bloom-up' : 'top-100 mt-2 assessment-bloom-down'\"\r\n style=\"min-width: 16rem; z-index: 1010;\">\r\n <button (click)=\"createEditQuestion(section); closeAllDropdowns()\" class=\"dropdown-item d-flex align-items-center gap-2 py-3 px-3 fw-medium border-bottom\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\" style=\"width: 1rem; height: 1rem;\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n <span class=\"assessment-text-semibold-13\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CREATE_NEW_QUESTION'] || 'Create New Question'}}\r\n </span>\r\n </button>\r\n <button (click)=\"openQuestionBankPicker(section); closeAllDropdowns()\" class=\"dropdown-item d-flex align-items-center gap-2 py-3 px-3 fw-medium\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.FILE_IMPORT'] || 'assets/commons-assessment/images/file-import.svg'\" style=\"width: 1rem; height: 1rem;\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/file-import.svg')\" />\r\n <span class=\"assessment-text-semibold-13\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.IMPORT_FROM_QUESTION_BANK'] || 'Import from Question Bank'}}\r\n </span>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-template #singleAddQuestionBtn>\r\n <button (click)=\"createEditQuestion(section)\"\r\n class=\"assessment-zoom-animation assessment-button-padding d-flex align-items-center justify-content-center gap-2 assessment-text-primary-one assessment-bg-palette-EDF3FD assessment-text-semibold-12 outline-0 assessment-border-radius-two mt-3 border-ADC9F6\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_A_QUESTION']}}\r\n </button>\r\n </ng-template>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n <div class=\"d-flex align-items-center ms-4\">\r\n <ng-container *ngIf=\"enableImportFromQuestionBank; else singleAddSectionBtn\">\r\n <div class=\"position-relative d-inline-block\" [style.z-index]=\"activeDropdownId === 'add_section' ? 1005 : 'auto'\">\r\n <button (click)=\"toggleDropdown('add_section', $event)\"\r\n class=\"assessment-zoom-animation assessment-button-padding d-flex align-items-center justify-content-center gap-2 assessment-text-primary-one assessment-bg-palette-EDF3FD assessment-text-semibold-12 outline-0 assessment-border-radius-two mt-3 border-ADC9F6\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ADD_SECTION']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/add-section.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_A_SECTION']}}\r\n </button>\r\n <div *ngIf=\"activeDropdownId === 'add_section'\" (click)=\"closeAllDropdowns()\" class=\"position-fixed top-0 start-0 w-100 h-100 bg-transparent\" style=\"z-index: 1000;\"></div>\r\n <div *ngIf=\"activeDropdownId === 'add_section'\"\r\n class=\"dropdown-menu assessment-dropdown-menu show shadow border rounded-3 p-0 overflow-hidden position-absolute start-0\"\r\n [ngClass]=\"dropdownPlacementMap['add_section'] === 'top' ? 'bottom-100 mb-2 assessment-bloom-up' : 'top-100 mt-2 assessment-bloom-down'\"\r\n style=\"min-width: 16rem; z-index: 1010;\">\r\n <button (click)=\"createEditQuestion(); closeAllDropdowns()\" class=\"dropdown-item d-flex align-items-center gap-2 py-3 px-3 fw-medium border-bottom\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ADD_SECTION']\" style=\"width: 1rem; height: 1rem;\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/add-section.svg')\" />\r\n <span class=\"assessment-text-semibold-13\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CREATE_NEW_QUESTION'] || 'Create New Question'}}\r\n </span>\r\n </button>\r\n <button (click)=\"openQuestionBankPicker(); closeAllDropdowns()\" class=\"dropdown-item d-flex align-items-center gap-2 py-3 px-3 fw-medium\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.FILE_IMPORT'] || 'assets/commons-assessment/images/file-import.svg'\" style=\"width: 1rem; height: 1rem;\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/file-import.svg')\" />\r\n <span class=\"assessment-text-semibold-13\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.IMPORT_FROM_QUESTION_BANK'] || 'Import from Question Bank'}}\r\n </span>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-template #singleAddSectionBtn>\r\n <button (click)=\"createEditQuestion()\"\r\n class=\"assessment-zoom-animation assessment-button-padding d-flex align-items-center justify-content-center gap-2 assessment-text-primary-one assessment-bg-palette-EDF3FD assessment-text-semibold-12 outline-0 assessment-border-radius-two mt-3 border-ADC9F6\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.ADD_SECTION']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/add-section.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_A_SECTION']}}\r\n </button>\r\n </ng-template>\r\n </div>\r\n </ng-container>\r\n <div *ngIf=\"!assessmentQuestionPaperData?.questionPaperSectionList?.length\"\r\n class=\"h-100 d-flex flex-column align-items-center justify-content-center gap-3\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.NO_QUESTIONS']\" class=\"col-sm-auto col-6\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/no-questions.svg')\" />\r\n <div class=\"text-center\">\r\n <p class=\"mb-1 assessment-text-medium-18\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_CUSTOM_QUESTIONS']}}</p>\r\n <p class=\"mb-0 assessment-text-medium-12 assessment-text-grey-seven\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_QUESTION_DESC']}}</p>\r\n </div>\r\n <div class=\"d-flex align-items-center\">\r\n <ng-container *ngIf=\"enableImportFromQuestionBank; else singleEmptyAddBtn\">\r\n <div class=\"position-relative d-inline-block\" [style.z-index]=\"activeDropdownId === 'empty_add' ? 1005 : 'auto'\">\r\n <button (click)=\"toggleDropdown('empty_add', $event)\"\r\n class=\"assessment-button-padding assessment-border-radius-two d-flex align-items-center gap-2 assessment-bg-palette-EDF3FD assessment-text-primary-one assessment-text-semibold-12 border-0 assessment-zoom-animation\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_A_QUESTION']}}\r\n </button>\r\n <div *ngIf=\"activeDropdownId === 'empty_add'\" (click)=\"closeAllDropdowns()\" class=\"position-fixed top-0 start-0 w-100 h-100 bg-transparent\" style=\"z-index: 1000;\"></div>\r\n <div *ngIf=\"activeDropdownId === 'empty_add'\"\r\n class=\"dropdown-menu assessment-dropdown-menu show shadow border rounded-3 p-0 overflow-hidden position-absolute start-0\"\r\n [ngClass]=\"dropdownPlacementMap['empty_add'] === 'top' ? 'bottom-100 mb-2 assessment-bloom-up' : 'top-100 mt-2 assessment-bloom-down'\"\r\n style=\"min-width: 16rem; z-index: 1010;\">\r\n <button (click)=\"createEditQuestion(); closeAllDropdowns()\" class=\"dropdown-item d-flex align-items-center gap-2 py-3 px-3 fw-medium border-bottom\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\" style=\"width: 1rem; height: 1rem;\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n <span class=\"assessment-text-semibold-13\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CREATE_NEW_QUESTION'] || 'Create New Question'}}\r\n </span>\r\n </button>\r\n <button (click)=\"openQuestionBankPicker(); closeAllDropdowns()\" class=\"dropdown-item d-flex align-items-center gap-2 py-3 px-3 fw-medium\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.FILE_IMPORT'] || 'assets/commons-assessment/images/file-import.svg'\" style=\"width: 1rem; height: 1rem;\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/file-import.svg')\" />\r\n <span class=\"assessment-text-semibold-13\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.IMPORT_FROM_QUESTION_BANK'] || 'Import from Question Bank'}}\r\n </span>\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n <ng-template #singleEmptyAddBtn>\r\n <button (click)=\"createEditQuestion()\"\r\n class=\"assessment-button-padding assessment-border-radius-two d-flex align-items-center gap-2 assessment-bg-palette-EDF3FD assessment-text-primary-one assessment-text-semibold-12 border-0 assessment-zoom-animation\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.PLUS_PRIMARY']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/plus-primary.svg')\" />\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.ADD_A_QUESTION']}}\r\n </button>\r\n </ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"showFooter\"\r\n class=\"bg-white p-3 position-sticky bottom-0 d-flex align-items-center justify-content-end border-top gap-3\">\r\n <button (click)=\"discardChanges()\" [disabled]=\"isSubmitting\"\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary-transparent assessment-text-semibold-13\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.DISCARD']}}</button>\r\n <button (click)=\"finalSubmit()\" [disabled]=\"isSubmitting\"\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary assessment-text-semibold-13 position-relative\">\r\n <span [ngClass]=\"{'opacity-0': isSubmitting}\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.PUBLISH']}}\r\n </span>\r\n <mat-spinner *ngIf=\"isSubmitting\" [diameter]=\"20\"\r\n class=\"position-absolute top-50 start-50 translate-middle assessment-spinner-white\"></mat-spinner>\r\n </button>\r\n </div>\r\n</div>\r\n<ng-template #loader>\r\n <div class=\"h-100 col-12 d-flex align-items-center justify-content-center py-5\">\r\n <mat-spinner diameter=\"60\" class=\"assessment-spinner-primary\"></mat-spinner>\r\n </div>\r\n</ng-template>", styles: ["@charset \"UTF-8\";.assessment-text-grey-ten{color:var(--assessment-grey-ten)!important}.assessment-bg-grey-ten{background-color:var(--assessment-grey-ten)!important}.assessment-text-grey-nine{color:var(--assessment-grey-nine)!important}.assessment-bg-grey-nine{background-color:var(--assessment-grey-nine)!important}.assessment-text-grey-eight{color:var(--assessment-grey-eight)!important}.assessment-bg-grey-eight{background-color:var(--assessment-grey-eight)!important}.assessment-text-grey-seven{color:var(--assessment-grey-seven)!important}.assessment-bg-grey-seven{background-color:var(--assessment-grey-seven)!important}.assessment-text-grey-six{color:var(--assessment-grey-six)!important}.assessment-bg-grey-six{background-color:var(--assessment-grey-six)!important}.assessment-text-grey-five{color:var(--assessment-grey-five)!important}.assessment-bg-grey-five{background-color:var(--assessment-grey-five)!important}.assessment-text-grey-four{color:var(--assessment-grey-four)!important}.assessment-bg-grey-four{background-color:var(--assessment-grey-four)!important}.assessment-text-grey-three{color:var(--assessment-grey-three)!important}.assessment-bg-grey-three{background-color:var(--assessment-grey-three)!important}.assessment-text-grey-two{color:var(--assessment-grey-two)!important}.assessment-bg-grey-two{background-color:var(--assessment-grey-two)!important}.assessment-text-grey-one{color:var(--assessment-grey-one)!important}.assessment-bg-grey-one{background-color:var(--assessment-grey-one)!important}.assessment-text-white{color:var(--assessment-white)!important}.assessment-bg-white{background-color:var(--assessment-white)!important}.assessment-text-black{color:var(--assessment-black)!important}.assessment-bg-black{background-color:var(--assessment-black)!important}.assessment-text-danger{color:var(--assessment-danger)!important}.assessment-bg-danger{background-color:var(--assessment-danger)!important}.assessment-text-danger-bg{color:var(--assessment-danger-bg)!important}.assessment-bg-danger-bg{background-color:var(--assessment-danger-bg)!important}.assessment-text-success{color:var(--assessment-success)!important}.assessment-bg-success{background-color:var(--assessment-success)!important}.assessment-text-success-bg{color:var(--assessment-success-bg)!important}.assessment-bg-success-bg{background-color:var(--assessment-success-bg)!important}.assessment-text-warning{color:var(--assessment-warning)!important}.assessment-bg-warning{background-color:var(--assessment-warning)!important}.assessment-text-warning-bg{color:var(--assessment-warning-bg)!important}.assessment-bg-warning-bg{background-color:var(--assessment-warning-bg)!important}.assessment-text-primary-one{color:var(--assessment-primary-one)!important}.assessment-bg-primary-one{background-color:var(--assessment-primary-one)!important}.assessment-text-primary-four{color:var(--assessment-primary-four)!important}.assessment-bg-primary-four{background-color:var(--assessment-primary-four)!important}.assessment-text-palette-EDF3FD{color:var(--assessment-palette-EDF3FD)!important}.assessment-bg-palette-EDF3FD{background-color:var(--assessment-palette-EDF3FD)!important}.assessment-text-palette-C8DAF9{color:var(--assessment-palette-C8DAF9)!important}.assessment-bg-palette-C8DAF9{background-color:var(--assessment-palette-C8DAF9)!important}.assessment-text-palette-ADC9F6{color:var(--assessment-palette-ADC9F6)!important}.assessment-bg-palette-ADC9F6{background-color:var(--assessment-palette-ADC9F6)!important}.assessment-text-palette-FEF9F1{color:var(--assessment-palette-FEF9F1)!important}.assessment-bg-palette-FEF9F1{background-color:var(--assessment-palette-FEF9F1)!important}.assessment-text-palette-F9DAA6{color:var(--assessment-palette-F9DAA6)!important}.assessment-bg-palette-F9DAA6{background-color:var(--assessment-palette-F9DAA6)!important}.assessment-text-palette-E8F7F0{color:var(--assessment-palette-E8F7F0)!important}.assessment-bg-palette-E8F7F0{background-color:var(--assessment-palette-E8F7F0)!important}.assessment-text-palette-B7E7CF{color:var(--assessment-palette-B7E7CF)!important}.assessment-bg-palette-B7E7CF{background-color:var(--assessment-palette-B7E7CF)!important}.assessment-text-palette-FEF1E8{color:var(--assessment-palette-FEF1E8)!important}.assessment-bg-palette-FEF1E8{background-color:var(--assessment-palette-FEF1E8)!important}.assessment-text-palette-FAD2B9{color:var(--assessment-palette-FAD2B9)!important}.assessment-bg-palette-FAD2B9{background-color:var(--assessment-palette-FAD2B9)!important}.assessment-box-shadow-one{box-shadow:var(--assessment-box-shadow-one)!important}.assessment-border-radius-one{border-radius:var(--assessment-border-radius-one)!important}.assessment-border-radius-two{border-radius:var(--assessment-border-radius-two)!important}.assessment-border-radius-three{border-radius:var(--assessment-border-radius-three)!important}.assessment-border-radius-four{border-radius:var(--assessment-border-radius-four)!important}.assessment-border-radius-five{border-radius:var(--assessment-border-radius-five)!important}.assessment-border-radius-six{border-radius:var(--assessment-border-radius-six)!important}.assessment-input-border-one{border:var(--assessment-input-border-one)!important}.assessment-input-border-invalid{border:var(--assessment-input-border-invalid)!important}.assessment-input-focus-border{border:var(--assessment-input-focus-border)!important}.assessment-border-two{border:var(--assessment-border-two)!important}.assessment-card-border{border:var(--assessment-card-border)!important}.assessment-tooltip-border{border:var(--assessment-tooltip-border)!important}.assessment-box-shadow-tooltip{box-shadow:var(--assessment-box-shadow-tooltip)!important}.assessment-button-padding{padding:var(--assessment-button-padding)!important}.assessment-button-padding-large{padding:var(--assessment-button-padding-large)!important}.assessment-input-padding{padding:var(--assessment-input-padding)!important}.assessment-text-font-family{color:var(--assessment-font-family)!important}.assessment-bg-font-family{background-color:var(--assessment-font-family)!important}.assessment-text-regular-12{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-semibold-12{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-medium-11{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-10{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.42rem + .2vw);line-height:calc(.72rem + .2vw)}.assessment-text-regular-11{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.assessment-text-medium-12{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.48rem + .3vw);line-height:calc(.9rem + .3vw)}.assessment-text-regular-13{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-semibold-13{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-medium-13{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.64rem + .2vw)!important;line-height:calc(.9rem + .2vw)!important}.assessment-text-medium-14{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw)!important;line-height:calc(1.2rem + .2vw)!important}.assessment-text-semibold-14{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.assessment-text-regular-15{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.4rem + .1vw)}.assessment-text-medium-15{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-semibold-15{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-semibold-16{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-medium-16{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.assessment-text-medium-18{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}.assessment-text-semibold-18{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .1vw)!important}@media (min-height: 100vw) and (orientation: portrait){.assessment-text-medium-18,.assessment-text-semibold-18{font-size:calc(1rem + .1vh)!important;line-height:calc(1.6rem + .1vh)!important}.assessment-text-medium-16,.assessment-text-semibold-16{font-size:calc(.9rem + .2vh)!important;line-height:calc(1.4rem + .2vh)!important}.assessment-text-regular-15,.assessment-text-semibold-15{font-size:calc(.8rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-15{font-size:calc(.82rem + .2vh);line-height:calc(1.27rem + .2vh)}.assessment-text-medium-12,.assessment-text-regular-12,.assessment-text-semibold-12{font-size:calc(.5rem + .4vh);line-height:calc(.8rem + .4vh)}.assessment-text-medium-14,.assessment-text-semibold-14{font-size:calc(.8rem + .1vh)!important;line-height:calc(1.2rem + .2vh)!important}.assessment-text-regular-13,.assessment-text-medium-13,.assessment-text-semibold-13{font-size:calc(.7rem + .2vh)!important;line-height:calc(1rem + .3vh)!important}.assessment-text-regular-11,.assessment-text-medium-11{font-size:calc(.5rem + .2vh)!important;line-height:calc(.8rem + .2vh)!important}.assessment-text-medium-10{font-size:calc(.45rem + .2vh)!important;line-height:calc(.72rem + .2vh)!important}}.assessment-btn-primary{background-color:var(--assessment-primary-one);color:var(--assessment-white);border:.064rem solid var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two)}.assessment-btn-primary-transparent{background-color:var(--assessment-white);color:var(--assessment-primary-one);border-radius:var(--assessment-border-radius-two);border:.064rem solid var(--assessment-primary-one)}.assessment-zoom-animation{transition:transform .2s ease;transform:translateZ(0);text-rendering:optimizeLegibility}.assessment-zoom-animation:hover{transform:scale(1.03)}.assessment-zoom-animation:active{transform:scale(1)}.assessment-zoom-animation:disabled{transform:none!important}.change-direction{transform:rotate(180deg);transition:.3s ease-out}.change-direction-reverse{transform:rotate(0);transition:.3s ease-out}.outline-0{outline:none}.cursor-grab{cursor:grab}.cursor-pointer{cursor:pointer}.action-icon{width:1.2rem}.mat-menu-item,.mat-mdc-menu-item{height:inherit;min-height:unset;--mat-menu-item-label-text-font: var(--assessment-font-family) !important;--mat-menu-item-label-text-size: 14px !important;--mat-menu-item-label-text-weight: 600 !important;--mat-menu-item-label-text-line-height: inherit !important}.skill-chip{width:-moz-fit-content;width:fit-content;background:var(--assessment-palette-EDF3FD);border:.064rem solid var(--assessment-palette-C8DAF9)}.assessment-form-check-input-primary-one{min-height:unset}.assessment-form-check-input-primary-one .form-check-input{width:1rem;height:1rem}.assessment-form-check-input-primary-one .form-check-input:checked{background-color:var(--assessment-primary-one);color:var(--assessment-primary-one)}.assessment-form-check-input-primary-one .form-check-input:disabled{opacity:.8}.form-check-input:checked{background-color:var(--assessment-primary-one);border-color:var(--assessment-primary-one)}.form-check-input:focus{border-color:var(--assessment-primary-one);box-shadow:none}.input-focus{overflow:hidden;text-overflow:ellipsis}.input-focus:focus-visible{border-bottom:var(--assessment-input-focus-border)!important}.height-without-footer{height:calc(100% - 4.4rem)!important}.question-container{transition:all .3s ease}.question-container:hover{box-shadow:var(--assessment-box-shadow-one);background-color:var(--assessment-palette-EDF3FD);border-color:var(--assessment-palette-C8DAF9)!important}.border-ADC9F6{border:.064rem solid var(--assessment-palette-ADC9F6)}\n"], components: [{ type: i4.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { type: i4.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { type: i5.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { type: i5.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { type: i6.QuestionDetailsComponent, selector: "lib-question-details", inputs: ["sectionQuestion", "question", "questionBank", "labelConfig", "imageConfig", "allowDelete", "isLocked"], outputs: ["editQuestion", "duplicateQuestion", "deleteParentQuestion", "deleteChildQuestion"] }, { type: i7.MatSpinner, selector: "mat-spinner", inputs: ["color"] }], directives: [{ type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.MinValidator, selector: "input[type=number][min][formControlName],input[type=number][min][formControl],input[type=number][min][ngModel]", inputs: ["min"] }, { type: i9.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i9.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i4.MatAccordion, selector: "mat-accordion", inputs: ["multi", "displayMode", "togglePosition", "hideToggle"], exportAs: ["matAccordion"] }, { type: i10.CdkDropList, selector: "[cdkDropList], cdk-drop-list", inputs: ["cdkDropListConnectedTo", "id", "cdkDropListEnterPredicate", "cdkDropListSortPredicate", "cdkDropListDisabled", "cdkDropListSortingDisabled", "cdkDropListAutoScrollDisabled", "cdkDropListOrientation", "cdkDropListLockAxis", "cdkDropListData", "cdkDropListAutoScrollStep"], outputs: ["cdkDropListDropped", "cdkDropListEntered", "cdkDropListExited", "cdkDropListSorted"], exportAs: ["cdkDropList"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i10.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragDisabled", "cdkDragStartDelay", "cdkDragLockAxis", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragBoundary", "cdkDragRootElement", "cdkDragPreviewContainer", "cdkDragData", "cdkDragFreeDragPosition"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { type: i10.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i5.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }] });
|
|
539
701
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AssessmentMakerComponent, decorators: [{
|
|
540
702
|
type: Component,
|
|
541
703
|
args: [{
|
|
@@ -573,6 +735,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
573
735
|
type: Input
|
|
574
736
|
}], showTimeInput: [{
|
|
575
737
|
type: Input
|
|
738
|
+
}], enableImportFromQuestionBank: [{
|
|
739
|
+
type: Input
|
|
740
|
+
}], questionBankConfig: [{
|
|
741
|
+
type: Input
|
|
576
742
|
}], assessmentIdChange: [{
|
|
577
743
|
type: Output
|
|
578
744
|
}], assessmentInstanceIdChange: [{
|
|
@@ -580,4 +746,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
580
746
|
}], snackbarMessage: [{
|
|
581
747
|
type: Output
|
|
582
748
|
}] } });
|
|
583
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXNzbWVudC1tYWtlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb25zLWFzc2Vzc21lbnQvc3JjL2xpYi9tb2R1bGVzL2Fzc2Vzc21lbnQtbWFrZXIvYXNzZXNzbWVudC1tYWtlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb25zLWFzc2Vzc21lbnQvc3JjL2xpYi9tb2R1bGVzL2Fzc2Vzc21lbnQtbWFrZXIvYXNzZXNzbWVudC1tYWtlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEMsT0FBTyxFQUFlLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRXRFLE9BQU8sRUFBRSxtQ0FBbUMsRUFBRSxNQUFNLG9GQUFvRixDQUFDO0FBQ3pJLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQzFHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJFQUEyRSxDQUFDO0FBTXhILE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7O0FBUWpELE1BQU0sT0FBTyx3QkFBd0I7SUFpQ25DLFlBQ1Usc0JBQThDLEVBQzlDLHdCQUFrRCxFQUNsRCxNQUFpQjtRQUZqQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDbEQsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQW5DbEIsZ0JBQVcsR0FBOEIsRUFBRSxDQUFDO1FBQzVDLGdCQUFXLEdBQThCLEVBQUUsQ0FBQztRQUM1QyxrQkFBYSxHQUFt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QXdCLHF6QkNwQnJDLDhwYkFpS2M7NEZEN0lELHdCQUF3QjtrQkFOcEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxXQUFXLEVBQUUsbUNBQW1DO29CQUNoRCxTQUFTLEVBQUUsQ0FBQyxtQ0FBbUMsQ0FBQztpQkFDakQ7NEtBR1UsV0FBVztzQkFBbkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyw0QkFBNEI7c0JBQXBDLEtBQUs7Z0JBQ0csNkJBQTZCO3NCQUFyQyxLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVJLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRywwQkFBMEI7c0JBQW5DLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQ2RrRHJhZ0Ryb3AsIG1vdmVJdGVtSW5BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5pbXBvcnQgeyBBZGRFZGl0U2VjdGlvbkludHJvZHVjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hZGQtZWRpdC1zZWN0aW9uLWludHJvZHVjdGlvbi9hZGQtZWRpdC1zZWN0aW9uLWludHJvZHVjdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50QnVpbGRlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9hc3Nlc3NtZW50LWJ1aWxkZXIvYXNzZXNzbWVudC1idWlsZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL2NvbmZpcm1hdGlvbi1kaWFsb2cvY29uZmlybWF0aW9uLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRdWVzdGlvblR5cGUsIEFzc2Vzc21lbnQsIFJlZkRhdGEsIEFzc2Vzc21lbnRDb250ZXh0RFRPLCBBc3Nlc3NtZW50SW5zdGFuY2UsIENvbmZpZyB9IGZyb20gJy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL2Fzc2Vzc21lbnQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXIsIFNlY3Rpb25RdWVzdGlvbiwgUXVlc3Rpb25QYXBlclNlY3Rpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9xdWVzdGlvbi1wYXBlci5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50UXVlc3Rpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9xdWVzdGlvbi5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2Fzc2Vzc21lbnQtYnVpbGRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQXNzZXNzbWVudE1ha2VyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYXNzZXNzbWVudC1tYWtlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgc29ydEJ5T3JkZXIgfSBmcm9tICcuLi8uLi9zaGFyZWQvdXRpbHMnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItYXNzZXNzbWVudC1tYWtlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2Fzc2Vzc21lbnQtbWFrZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2Fzc2Vzc21lbnQtbWFrZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIEFzc2Vzc21lbnRNYWtlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQElucHV0KCkgbGFiZWxDb25maWc6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICBASW5wdXQoKSBpbWFnZUNvbmZpZzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG4gIEBJbnB1dCgpIHF1ZXN0aW9uVHlwZXM6IFF1ZXN0aW9uVHlwZVtdID0gW107XHJcbiAgQElucHV0KCkgc2hvd0Zvb3RlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGN1c3RvbVJ1bGVzPzogYW55O1xyXG4gIEBJbnB1dCgpIGFzc2Vzc21lbnRJZDogbnVtYmVyID0gMDtcclxuICBASW5wdXQoKSBhc3Nlc3NtZW50SW5zdGFuY2VJZDogbnVtYmVyID0gMDtcclxuICBASW5wdXQoKSBkZWZhdWx0QXNzZXNzbWVudERUTzogQXNzZXNzbWVudCA9IHt9O1xyXG4gIEBJbnB1dCgpIHByZWRlZmluZWRBc3Nlc3NtZW50SW5zdGFuY2U6IEFzc2Vzc21lbnRJbnN0YW5jZSA9IHt9O1xyXG4gIEBJbnB1dCgpIGVuYWJsZVNraWxsc1RvUXVlc3Rpb25NYXBwaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYXNzZXNzbWVudENvbnRleHQhOiBBc3Nlc3NtZW50Q29udGV4dERUTztcclxuICBASW5wdXQoKSBtaW5pbXVtUmVxdWlyZWRTZWN0aW9uczogbnVtYmVyID0gMDtcclxuICBASW5wdXQoKSBjaGVja0ZvclJlc3BvbnNlczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHNob3dQcm9jdG9yaW5nVG9nZ2xlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd1RpbWVJbnB1dDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgYXNzZXNzbWVudElkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcbiAgQE91dHB1dCgpIGFzc2Vzc21lbnRJbnN0YW5jZUlkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcbiAgQE91dHB1dCgpIHNuYWNrYmFyTWVzc2FnZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBtZXNzYWdlOiBzdHJpbmcsIHR5cGU6ICdzdWNjZXNzJyB8ICdlcnJvcicgfCAnaW5mbycgfT4oKTtcclxuXHJcbiAgc2hvd0xvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHF1ZXN0aW9uQmFuazogUmVjb3JkPG51bWJlciwgQXNzZXNzbWVudFF1ZXN0aW9uPiA9IHt9O1xyXG4gIGFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YTogQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXIgPSB7IGlkOiAwLCBxdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q6IFtdIH07XHJcbiAgY29uZmlnc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHJ1bGVzOiBhbnk7XHJcbiAgaXNTdWJtaXR0aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgc2tpbGxzTGlzdDogUmVmRGF0YVtdID0gW107XHJcbiAgcmVzcG9uc2VDb3VudDogbnVtYmVyID0gMDtcclxuICBwcm9jdG9yaW5nRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGR1cmF0aW9uTWludXRlczogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBQUk9DVE9SSU5HX0NPTkZJR19LRVkgPSAnYXNzZXNzbWVudC5jb25maWcuaXMtcHJvY3RvcmluZy1lbmFibGVkJztcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFzc2Vzc21lbnRNYWtlclNlcnZpY2U6IEFzc2Vzc21lbnRNYWtlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGFzc2Vzc21lbnRCdWlsZGVyU2VydmljZTogQXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZ1xyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2Uuc2V0RGVmYXVsdEFzc2Vzc21lbnREVE8odGhpcy5kZWZhdWx0QXNzZXNzbWVudERUTyk7XHJcbiAgICB0aGlzLnByb2N0b3JpbmdFbmFibGVkID0gdGhpcy5yZWFkUHJvY3RvcmluZ0NvbmZpZyh0aGlzLmRlZmF1bHRBc3Nlc3NtZW50RFRPKTtcclxuICAgIHRoaXMucmVhZER1cmF0aW9uKHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnRJbnN0YW5jZURUTyB8fCB0aGlzLnByZWRlZmluZWRBc3Nlc3NtZW50SW5zdGFuY2UpO1xyXG4gICAgdGhpcy5nZXRDb25maWdzRnJvbUpTT04oKTtcclxuXHJcbiAgICBpZiAodGhpcy5hc3Nlc3NtZW50Q29udGV4dCkge1xyXG4gICAgICB0aGlzLmFzc2Vzc21lbnRJbnN0YW5jZUlkID0gdGhpcy5hc3Nlc3NtZW50Q29udGV4dD8uYXNzZXNzbWVudEluc3RhbmNlRFRPPy5pZCB8fCB0aGlzLmFzc2Vzc21lbnRJbnN0YW5jZUlkO1xyXG4gICAgICB0aGlzLmFzc2Vzc21lbnRJZCA9IHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnQ/LmlkIHx8IHRoaXMuYXNzZXNzbWVudElkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmFzc2Vzc21lbnRJZCkge1xyXG4gICAgICB0aGlzLnNob3dMb2FkZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLmxvYWRBc3Nlc3NtZW50RGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmVuYWJsZVNraWxsc1RvUXVlc3Rpb25NYXBwaW5nKSB7XHJcbiAgICAgIHRoaXMuZ2V0U2tpbGxzTGlzdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNoZWNrRm9yUmVzcG9uc2VzICYmIHRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWQpIHtcclxuICAgICAgdGhpcy5sb2FkUmVzcG9uc2VDb3VudCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBsb2FkUmVzcG9uc2VDb3VudCgpIHtcclxuICAgIHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5nZXRSZXNwb25zZUNvdW50KHRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChjb3VudDogYW55KSA9PiB0aGlzLnJlc3BvbnNlQ291bnQgPSBOdW1iZXIoY291bnQpIHx8IDAsXHJcbiAgICAgIGVycm9yOiAoKSA9PiB0aGlzLnJlc3BvbnNlQ291bnQgPSAwIC8vIGZhaWwgb3BlbjogZG9uJ3Qgd2FybiBpZiB0aGUgY291bnQgY2FuJ3QgYmUgZmV0Y2hlZFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSdW5zIGBhY3Rpb25gLCBidXQgZmlyc3Qgd2FybnMgdGhlIHVzZXIgaWYgdGhlIGFzc2Vzc21lbnQgYWxyZWFkeSBoYXMgcmVzcG9uc2VzXHJcbiAgICogKG9ubHkgd2hlbiBgY2hlY2tGb3JSZXNwb25zZXNgIGlzIGVuYWJsZWQgYW5kIHRoZSBjb3VudCBpcyBncmVhdGVyIHRoYW4gMCkuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBjb25maXJtUmVzcG9uc2VzV2FybmluZyhhY3Rpb246ICgpID0+IHZvaWQpIHtcclxuICAgIGlmICh0aGlzLnJlc3BvbnNlQ291bnQgPiAwKSB7XHJcbiAgICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQ29uZmlybWF0aW9uRGlhbG9nQ29tcG9uZW50LCB7XHJcbiAgICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgICBtYXhXaWR0aDogJzk1JScsXHJcbiAgICAgICAgd2lkdGg6ICczMnJlbScsXHJcbiAgICAgICAgcGFuZWxDbGFzczogWydhc3Nlc3NtZW50LWRpYWxvZyddLFxyXG4gICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgIG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5XQVJOSU5HLlJFU1BPTlNFU19FWElTVCddLFxyXG4gICAgICAgICAgY29uZmlybUxhYmVsOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuUFJPQ0VFRCddLFxyXG4gICAgICAgICAgY2FuY2VsTGFiZWw6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5DQU5DRUwnXVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgoY29uZmlybWVkOiBib29sZWFuKSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbmZpcm1lZCkge1xyXG4gICAgICAgICAgYWN0aW9uKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFjdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q29uZmlnc0Zyb21KU09OKCkge1xyXG4gICAgZm9ya0pvaW4oe1xyXG4gICAgICBsYWJlbENvbmZpZzogdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLmdldENvbmZpZ0pTT04oJ2pzb24vbGFiZWxDb25maWcnKSxcclxuICAgICAgaW1hZ2VDb25maWc6IHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5nZXRDb25maWdKU09OKCdqc29uL2ltYWdlQ29uZmlnJyksXHJcbiAgICAgIHJ1bGVzOiB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuZ2V0Q29uZmlnSlNPTignanNvbi9xdWVzdGlvbi1idWlsZGVyLXJ1bGVzJyksXHJcbiAgICAgIC4uLighdGhpcy5xdWVzdGlvblR5cGVzPy5sZW5ndGggJiYge1xyXG4gICAgICAgIHF1ZXN0aW9uVHlwZXM6IHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5nZXRDb25maWdKU09OKCdqc29uL3F1ZXN0aW9uVHlwZXMnKVxyXG4gICAgICB9KVxyXG4gICAgfSkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICB0aGlzLmxhYmVsQ29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgcmVzPy5sYWJlbENvbmZpZywgdGhpcy5sYWJlbENvbmZpZyk7XHJcbiAgICAgIHRoaXMuaW1hZ2VDb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCByZXM/LmltYWdlQ29uZmlnLCB0aGlzLmltYWdlQ29uZmlnKTtcclxuICAgICAgaWYgKHJlcz8ucXVlc3Rpb25UeXBlcykge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25UeXBlcyA9IHJlcz8ucXVlc3Rpb25UeXBlcztcclxuICAgICAgfVxyXG4gICAgICAvLyBNZXJnZSBjdXN0b21SdWxlcyBwZXIgcXVlc3Rpb25UeXBlIG92ZXIgZGVmYXVsdCBydWxlc1xyXG4gICAgICB0aGlzLnJ1bGVzID0geyAuLi5yZXM/LnJ1bGVzIH07XHJcbiAgICAgIGlmICh0aGlzLmN1c3RvbVJ1bGVzKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5jdXN0b21SdWxlcykuZm9yRWFjaChxVHlwZSA9PiB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMucnVsZXNbcVR5cGVdKSB7XHJcbiAgICAgICAgICAgIHRoaXMucnVsZXNbcVR5cGVdID0geyAuLi50aGlzLmN1c3RvbVJ1bGVzW3FUeXBlXSB9O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5ydWxlc1txVHlwZV0gPSB7IC4uLnRoaXMucnVsZXNbcVR5cGVdLCAuLi50aGlzLmN1c3RvbVJ1bGVzW3FUeXBlXSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmNvbmZpZ3NMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGxvYWRBc3Nlc3NtZW50RGF0YSgpIHtcclxuICAgIGlmICh0aGlzLmFzc2Vzc21lbnRDb250ZXh0KSB7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25CYW5rID0ge1xyXG4gICAgICAgIC4uLnRoaXMucXVlc3Rpb25CYW5rLFxyXG4gICAgICAgIC4uLih0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5xdWVzdGlvbkRUT01hcCB8fCB7fSlcclxuICAgICAgfTtcclxuICAgICAgdGhpcy51cGRhdGVBc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEodGhpcy5hc3Nlc3NtZW50Q29udGV4dD8uYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEVE8pO1xyXG4gICAgICB0aGlzLnByb2N0b3JpbmdFbmFibGVkID0gdGhpcy5yZWFkUHJvY3RvcmluZ0NvbmZpZyh0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5hc3Nlc3NtZW50KTtcclxuICAgICAgdGhpcy5yZWFkRHVyYXRpb24odGhpcy5hc3Nlc3NtZW50Q29udGV4dD8uYXNzZXNzbWVudEluc3RhbmNlRFRPKTtcclxuICAgICAgdGhpcy5zaG93TG9hZGVyID0gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuZ2V0QXNzZXNzbWVudENvbnRleHQoeyBhc3Nlc3NtZW50SWRzOiBbdGhpcy5hc3Nlc3NtZW50SWRdIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmFzc2Vzc21lbnRDb250ZXh0ID0gcmVzPy5bMF07XHJcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uQmFuayA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5xdWVzdGlvbkJhbmssXHJcbiAgICAgICAgICAgIC4uLih0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5xdWVzdGlvbkRUT01hcCB8fCB7fSlcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZUFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YSh0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRUTyk7XHJcbiAgICAgICAgICB0aGlzLnByb2N0b3JpbmdFbmFibGVkID0gdGhpcy5yZWFkUHJvY3RvcmluZ0NvbmZpZyh0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5hc3Nlc3NtZW50KTtcclxuICAgICAgICAgIHRoaXMucmVhZER1cmF0aW9uKHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnRJbnN0YW5jZURUTyk7XHJcbiAgICAgICAgICB0aGlzLnNob3dMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogJ0dFVCcgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdlbmVyYXRlUXVlc3Rpb25CYW5rKCkge1xyXG4gICAgbGV0IGNoaWxkUXVlc3Rpb25JZHM6IG51bWJlcltdID0gW107XHJcblxyXG4gICAgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdD8uZm9yRWFjaCgoc2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgIHNlY3Rpb24/LnNlY3Rpb25RdWVzdGlvbnNMaXN0Py5mb3JFYWNoKChxOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkJhbms/LltxPy5xdWVzdGlvbklkXT8uZGVmYXVsdE9wdGlvbnNMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgIHRoaXMucXVlc3Rpb25CYW5rPy5bcT8ucXVlc3Rpb25JZF0/LmRlZmF1bHRPcHRpb25zTGlzdD8uZm9yRWFjaCgob3B0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbj8uY2hpbGRRdWVzdGlvbkxpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgIG9wdGlvbj8uY2hpbGRRdWVzdGlvbkxpc3Q/LmZvckVhY2goKGNjcTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjaGlsZFF1ZXN0aW9uSWRzLnB1c2goY2NxKTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFJlbW92ZSBkdXBsaWNhdGVzIGFuZCBmaWx0ZXIgb3V0IG9uZXMgd2UgYWxyZWFkeSBoYXZlIGluIHRoZSBiYW5rXHJcbiAgICBjaGlsZFF1ZXN0aW9uSWRzID0gWy4uLm5ldyBTZXQoY2hpbGRRdWVzdGlvbklkcyldLmZpbHRlcihpZCA9PiAhdGhpcy5xdWVzdGlvbkJhbmtbaWRdKTtcclxuXHJcbiAgICBpZiAoY2hpbGRRdWVzdGlvbklkcz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBwYXJhbXMgPSB7IHF1ZXN0aW9uSWRzOiBjaGlsZFF1ZXN0aW9uSWRzIH07XHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5nZXRRdWVzdGlvbnNCeUlkcyhwYXJhbXMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICByZXM/LmZvckVhY2goKHF1ZXN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmtbcXVlc3Rpb24uaWRdID0gcXVlc3Rpb247XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdHRVQnLCBwYXlsb2FkOiBwYXJhbXMgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGltYWdlRXJyb3JIYW5kbGVyKGV2ZW50OiBhbnksIGZpbGVQYXRoOiBzdHJpbmcpIHtcclxuICAgIGV2ZW50LnRhcmdldC5zcmMgPSBmaWxlUGF0aDtcclxuICB9XHJcblxyXG4gIGZvY3VzU2VjdGlvbklucHV0KHNlY3Rpb25JbmRleDogbnVtYmVyLCBldmVudDogRXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc2VjdGlvbk5hbWVJbnB1dF8ke3NlY3Rpb25JbmRleH1gKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgaWYgKGlucHV0KSB7XHJcbiAgICAgIGlucHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcm9wU2VjdGlvbihldmVudDogQ2RrRHJhZ0Ryb3A8YW55W10+KSB7XHJcbiAgICBpZiAodGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0KSB7XHJcbiAgICAgIG1vdmVJdGVtSW5BcnJheShcclxuICAgICAgICB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YS5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3QsXHJcbiAgICAgICAgZXZlbnQucHJldmlvdXNJbmRleCxcclxuICAgICAgICBldmVudC5jdXJyZW50SW5kZXhcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRyb3BRdWVzdGlvbihldmVudDogQ2RrRHJhZ0Ryb3A8YW55W10+KSB7XHJcbiAgICBtb3ZlSXRlbUluQXJyYXkoXHJcbiAgICAgIGV2ZW50LmNvbnRhaW5lci5kYXRhLFxyXG4gICAgICBldmVudC5wcmV2aW91c0luZGV4LFxyXG4gICAgICBldmVudC5jdXJyZW50SW5kZXhcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhZGRJbnN0cnVjdGlvbihzZWN0aW9uOiBhbnkpIHtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQWRkRWRpdFNlY3Rpb25JbnRyb2R1Y3Rpb25Db21wb25lbnQsIHtcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgbWF4V2lkdGg6ICc5NSUnLFxyXG4gICAgICB3aWR0aDogJzQwcmVtJyxcclxuICAgICAgbWF4SGVpZ2h0OiAnMTAwZHZoJyxcclxuICAgICAgcGFuZWxDbGFzczogWydhc3Nlc3NtZW50LWRpYWxvZyddLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgaW1hZ2VDb25maWc6IHRoaXMuaW1hZ2VDb25maWcsXHJcbiAgICAgICAgbGFiZWxDb25maWc6IHRoaXMubGFiZWxDb25maWcsXHJcbiAgICAgICAgc2VjdGlvbkRldGFpbHM6IHNlY3Rpb25cclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQ/LnVwZGF0ZSkge1xyXG4gICAgICAgIGlmICghc2VjdGlvbi5xcHNEZXNjKSBzZWN0aW9uLnFwc0Rlc2MgPSBbXTtcclxuICAgICAgICBpZiAoIXNlY3Rpb24ucXBzRGVzY1swXSkgc2VjdGlvbi5xcHNEZXNjWzBdID0geyBpZDogMCwgbGFuZ3VhZ2U6IHsgY29kZTogJ0VORycgfSwgdGV4dDogJycgfTtcclxuICAgICAgICBzZWN0aW9uLnFwc0Rlc2NbMF0udGV4dCA9IHJlc3VsdD8uZGVzY3JpcHRpb247XHJcbiAgICAgICAgc2VjdGlvbi5tZWRpYVVybCA9IHJlc3VsdD8ubWVkaWFVcmwgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLnBhdGNoQXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIodGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULlNFQ1RJT05fSU5TVFJVQ1RJT05TX1VQREFURURfU1VDQ0VTUyddKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVDaGlsZFF1ZXN0aW9uKG9wdGlvbjogYW55LCBjaGlsZElkVG9SZW1vdmU6IG51bWJlciB8IGFueSkge1xyXG4gICAgdGhpcy5jb25maXJtUmVzcG9uc2VzV2FybmluZygoKSA9PiB7XHJcbiAgICAgIGlmIChvcHRpb24uY2hpbGRRdWVzdGlvbkxpc3QpIHtcclxuICAgICAgICBjb25zdCBpZFRvUmVtb3ZlID0gdHlwZW9mIGNoaWxkSWRUb1JlbW92ZSA9PT0gJ29iamVjdCcgPyBjaGlsZElkVG9SZW1vdmU/LmlkIDogY2hpbGRJZFRvUmVtb3ZlO1xyXG4gICAgICAgIG9wdGlvbi5jaGlsZFF1ZXN0aW9uTGlzdCA9IG9wdGlvbi5jaGlsZFF1ZXN0aW9uTGlzdC5maWx0ZXIoKGNjcTogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpZCA9IHR5cGVvZiBjY3EgPT09ICdvYmplY3QnID8gY2NxPy5pZCA6IGNjcTtcclxuICAgICAgICAgIHJldHVybiBpZCAhPT0gaWRUb1JlbW92ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVQYXJlbnRRdWVzdGlvbihzZWN0aW9uUXVlc3Rpb246IFNlY3Rpb25RdWVzdGlvbikge1xyXG4gICAgdGhpcy5jb25maXJtUmVzcG9uc2VzV2FybmluZygoKSA9PiB7XHJcbiAgICAgIHNlY3Rpb25RdWVzdGlvbi5pc0FjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnBhdGNoQXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIodGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULlFVRVNUSU9OX0RFTEVURURfU1VDQ0VTUyddKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlU2VjdGlvbihzZWN0aW9uOiBRdWVzdGlvblBhcGVyU2VjdGlvbikge1xyXG4gICAgdGhpcy5jb25maXJtUmVzcG9uc2VzV2FybmluZygoKSA9PiB7XHJcbiAgICAgIHNlY3Rpb24uaXNBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5wYXRjaEFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyKHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5TRUNUSU9OX0RFTEVURURfU1VDQ0VTUyddKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlRWRpdFF1ZXN0aW9uKHNlY3Rpb25EZXRhaWxzPzogYW55LCBzZWN0aW9uUXVlc3Rpb25JZD86IG51bWJlciwgaXNDaGlsZD86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIC8vIEVkaXRpbmcgYW4gZXhpc3RpbmcgcXVlc3Rpb24gaXMgZ2F0ZWQgYnkgdGhlIHJlc3BvbnNlcyB3YXJuaW5nOyBhZGRpbmcgYSBuZXcgb25lIGlzIG5vdC5cclxuICAgIGlmIChzZWN0aW9uUXVlc3Rpb25JZCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY29uZmlybVJlc3BvbnNlc1dhcm5pbmcoKCkgPT4gdGhpcy5vcGVuUXVlc3Rpb25CdWlsZGVyKHNlY3Rpb25EZXRhaWxzLCBzZWN0aW9uUXVlc3Rpb25JZCwgaXNDaGlsZCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vcGVuUXVlc3Rpb25CdWlsZGVyKHNlY3Rpb25EZXRhaWxzLCBzZWN0aW9uUXVlc3Rpb25JZCwgaXNDaGlsZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9wZW5RdWVzdGlvbkJ1aWxkZXIoc2VjdGlvbkRldGFpbHM/OiBhbnksIHNlY3Rpb25RdWVzdGlvbklkPzogbnVtYmVyLCBpc0NoaWxkPzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgY29uc3QgcXVlc3Rpb25EZXRhaWxzID0gdGhpcy5nZXRRdWVzdGlvbkZyb21CYW5rKHNlY3Rpb25RdWVzdGlvbklkKTtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQXNzZXNzbWVudEJ1aWxkZXJDb21wb25lbnQsIHtcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgcG9zaXRpb246IHsgcmlnaHQ6ICcwJyB9LFxyXG4gICAgICBtYXhXaWR0aDogJzEwMCUnLFxyXG4gICAgICB3aWR0aDogJzU1cmVtJyxcclxuICAgICAgaGVpZ2h0OiAnMTAwdmgnLFxyXG4gICAgICBwYW5lbENsYXNzOiBbJ2Fzc2Vzc21lbnQtZGlhbG9nJywgJ2Fzc2Vzc21lbnQtZGlhbG9nLXNsaWRlci1hbmltYXRpb24nXSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBsYWJlbENvbmZpZzogdGhpcy5sYWJlbENvbmZpZyxcclxuICAgICAgICBpbWFnZUNvbmZpZzogdGhpcy5pbWFnZUNvbmZpZyxcclxuICAgICAgICBxdWVzdGlvblR5cGVzOiB0aGlzLnF1ZXN0aW9uVHlwZXMsXHJcbiAgICAgICAgcnVsZXM6IHRoaXMucnVsZXMsXHJcbiAgICAgICAgcXVlc3Rpb25CYW5rOiB0aGlzLnF1ZXN0aW9uQmFuayxcclxuICAgICAgICBpc0NoaWxkOiBpc0NoaWxkLFxyXG4gICAgICAgIHF1ZXN0aW9uRGV0YWlscyxcclxuICAgICAgICBzZWN0aW9uRGV0YWlscyxcclxuICAgICAgICBhc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE6IHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLFxyXG4gICAgICAgIGFzc2Vzc21lbnRJZDogdGhpcy5hc3Nlc3NtZW50SWQsXHJcbiAgICAgICAgc2tpbGxzTGlzdDogdGhpcy5za2lsbHNMaXN0LFxyXG4gICAgICAgIHNuYWNrYmFyTWVzc2FnZUVtaXR0ZXI6IHRoaXMuc25hY2tiYXJNZXNzYWdlXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuXHJcbiAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXM/LnN1Y2Nlc3MpIHtcclxuICAgICAgICBpZiAocmVzPy5hc3Nlc3NtZW50SWQpIHtcclxuICAgICAgICAgIGlmICghdGhpcy5hc3Nlc3NtZW50SWQpIHtcclxuICAgICAgICAgICAgdGhpcy5hc3Nlc3NtZW50SWQgPSByZXMuYXNzZXNzbWVudElkO1xyXG4gICAgICAgICAgICB0aGlzLmFzc2Vzc21lbnRJZENoYW5nZS5lbWl0KHRoaXMuYXNzZXNzbWVudElkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMucXVlc3Rpb25CYW5rID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLnF1ZXN0aW9uQmFuayxcclxuICAgICAgICAgICAgLi4uKHJlcz8ucXVlc3Rpb25NYXAgfHwge30pXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVBc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEocmVzLnF1ZXN0aW9uUGFwZXIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnBhdGNoQXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZHVwbGljYXRlU2VjdGlvbihzZWN0aW9uSWQ6IG51bWJlcikge1xyXG4gICAgaWYgKCF0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YT8uaWQpIHJldHVybjtcclxuICAgIHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5kdXBsaWNhdGVTZWN0aW9uKHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLmlkLCBzZWN0aW9uSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25CYW5rID0ge1xyXG4gICAgICAgICAgLi4udGhpcy5xdWVzdGlvbkJhbmssXHJcbiAgICAgICAgICAuLi4ocmVzPy5xdWVzdGlvbk1hcCB8fCB7fSlcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudXBkYXRlQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhKHJlcz8ucXVlc3Rpb25QYXBlcik7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVF1ZXN0aW9uQmFuaygpO1xyXG4gICAgICAgIHRoaXMucGF0Y2hBc3Nlc3NtZW50QW5kUXVlc3Rpb25QYXBlcigpO1xyXG4gICAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuU0VDVElPTl9EVVBMSUNBVEVEX1NVQ0NFU1MnXSwgdHlwZTogJ3N1Y2Nlc3MnIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNob3dMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdQQVRDSCcgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGR1cGxpY2F0ZVF1ZXN0aW9uKHNlY3Rpb246IFF1ZXN0aW9uUGFwZXJTZWN0aW9uLCBzZWN0aW9uUXVlc3Rpb246IFNlY3Rpb25RdWVzdGlvbikge1xyXG4gICAgaWYgKCFzZWN0aW9uUXVlc3Rpb24uaWQpIHJldHVybjtcclxuICAgIHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5kdXBsaWNhdGVRdWVzdGlvbihzZWN0aW9uLmlkLCBzZWN0aW9uUXVlc3Rpb24uaWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25CYW5rID0ge1xyXG4gICAgICAgICAgLi4udGhpcy5xdWVzdGlvbkJhbmssXHJcbiAgICAgICAgICAuLi4ocmVzPy5xdWVzdGlvbk1hcCB8fCB7fSlcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudXBkYXRlQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhKHJlcz8ucXVlc3Rpb25QYXBlcik7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVF1ZXN0aW9uQmFuaygpO1xyXG4gICAgICAgIHRoaXMucGF0Y2hBc3Nlc3NtZW50QW5kUXVlc3Rpb25QYXBlcigpO1xyXG4gICAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuUVVFU1RJT05fRFVQTElDQVRFRF9TVUNDRVNTJ10sIHR5cGU6ICdzdWNjZXNzJyB9KTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5FUlJPUl9ERUZBVUxUJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgdGhyb3cgeyBlcnJvciwgbWV0aG9kOiAnUEFUQ0gnIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRQcm9jdG9yaW5nQ29uZmlnKGFzc2Vzc21lbnQ/OiBBc3Nlc3NtZW50KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gYXNzZXNzbWVudD8uYXNzZXNzbWVudENvbmZpZ3M/LmZpbmQoYyA9PiBjLmNvbmZpZ0tleSA9PT0gdGhpcy5QUk9DVE9SSU5HX0NPTkZJR19LRVkpPy5jb25maWdWYWx1ZSA9PT0gJzEnO1xyXG4gIH1cclxuXHJcbiAgLyoqIEluaXRpYWxpemVzIHRoZSBtaW51dGVzIGlucHV0IGZyb20gYW4gZXhpc3RpbmcgaW5zdGFuY2UncyBkdXJhdGlvbiAoc2Vjb25kcykuICovXHJcbiAgcHJpdmF0ZSByZWFkRHVyYXRpb24oaW5zdGFuY2U/OiBBc3Nlc3NtZW50SW5zdGFuY2UpOiB2b2lkIHtcclxuICAgIGNvbnN0IHNlY29uZHMgPSBpbnN0YW5jZT8uZHVyYXRpb24gPz8gMDtcclxuICAgIC8vIGtlZXAgZnJhY3Rpb25hbCBtaW51dGVzIChlLmcuIDMwcyAtPiAwLjUpIHJhdGhlciB0aGFuIHJvdW5kaW5nIHRvIHdob2xlIG1pbnV0ZXNcclxuICAgIHRoaXMuZHVyYXRpb25NaW51dGVzID0gc2Vjb25kcyA+IDAgPyBNYXRoLnJvdW5kKChzZWNvbmRzIC8gNjApICogMTAwKSAvIDEwMCA6IG51bGw7XHJcbiAgfVxyXG5cclxuICAvKiogQmxvY2tzIGNoYXJhY3RlcnMgdGhhdCB3b3VsZCBlbnRlciBhIG5lZ2F0aXZlL2V4cG9uZW50IHZhbHVlIGluIHRoZSBkdXJhdGlvbiBpbnB1dC4gKi9cclxuICBibG9ja05lZ2F0aXZlS2V5cyhldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKFsnLScsICcrJywgJ2UnLCAnRSddLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBEdXJhdGlvbiB0byBwZXJzaXN0LCBpbiBTRUNPTkRTICh0aGUgdW5pdCB0aGUgdGFrZXIncyB0aW1lciB1c2VzKS4gMCBtZWFucyB1bnRpbWVkLiAqL1xyXG4gIHByaXZhdGUgZ2V0IGR1cmF0aW9uU2Vjb25kcygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZHVyYXRpb25NaW51dGVzID8gTWF0aC5yb3VuZCh0aGlzLmR1cmF0aW9uTWludXRlcyAqIDYwKSA6IDA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBhc3Nlc3NtZW50IGNvbmZpZ3Mgd2l0aCB0aGUgcHJvY3RvcmluZyBmbGFnICgnMScvJzAnKSB1cHNlcnRlZCwgcHJlc2VydmluZ1xyXG4gICAqIGFueSBvdGhlciBleGlzdGluZyBjb25maWdzLiBSZXR1cm5zIHVuZGVmaW5lZCB3aGVuIHRoZSBwcm9jdG9yaW5nIHRvZ2dsZSBpcyBub3QgZW5hYmxlZFxyXG4gICAqIHNvIHRoZSBzYXZlZCBwYXlsb2FkIGlzIHVuY2hhbmdlZCBmb3IgY29uc3VtZXJzIG5vdCB1c2luZyBwcm9jdG9yaW5nLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgYnVpbGRQcm9jdG9yaW5nQ29uZmlncygpOiBDb25maWdbXSB8IHVuZGVmaW5lZCB7XHJcbiAgICBpZiAoIXRoaXMuc2hvd1Byb2N0b3JpbmdUb2dnbGUpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIGNvbnN0IGJhc2UgPSB0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5hc3Nlc3NtZW50Py5hc3Nlc3NtZW50Q29uZmlncyA/PyB0aGlzLmRlZmF1bHRBc3Nlc3NtZW50RFRPPy5hc3Nlc3NtZW50Q29uZmlncyA/PyBbXTtcclxuICAgIGNvbnN0IGNvbmZpZ3M6IENvbmZpZ1tdID0gYmFzZS5tYXAoYyA9PiAoeyAuLi5jIH0pKTtcclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5wcm9jdG9yaW5nRW5hYmxlZCA/ICcxJyA6ICcwJztcclxuICAgIGNvbnN0IGV4aXN0aW5nID0gY29uZmlncy5maW5kKGMgPT4gYy5jb25maWdLZXkgPT09IHRoaXMuUFJPQ1RPUklOR19DT05GSUdfS0VZKTtcclxuICAgIGlmIChleGlzdGluZykge1xyXG4gICAgICBleGlzdGluZy5jb25maWdWYWx1ZSA9IHZhbHVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uZmlncy5wdXNoKHsgY29uZmlnS2V5OiB0aGlzLlBST0NUT1JJTkdfQ09ORklHX0tFWSwgY29uZmlnVmFsdWU6IHZhbHVlIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbmZpZ3M7XHJcbiAgfVxyXG5cclxuICBwYXRjaEFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyKHN1Y2Nlc3NNZXNzYWdlPzogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBwYXlsb2FkID0ge1xyXG4gICAgICBxdWVzdGlvblBhcGVyOiB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5nZW5lcmF0ZVF1ZXN0aW9uUGFwZXJEVE8odGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEsIHRoaXMucXVlc3Rpb25CYW5rKSxcclxuICAgICAgYXNzZXNzbWVudDogdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UuZ2VuZXJhdGVBc3Nlc3NtZW50RFRPKHRoaXMuYXNzZXNzbWVudElkLCB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YSwgdGhpcy5idWlsZFByb2N0b3JpbmdDb25maWdzKCkpLFxyXG4gICAgICAuLi50aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5idWlsZEluc3RhbmNlUGF0Y2godGhpcy5zaG93VGltZUlucHV0LCB0aGlzLmFzc2Vzc21lbnRJbnN0YW5jZUlkLCB0aGlzLmR1cmF0aW9uU2Vjb25kcylcclxuICAgIH1cclxuICAgIHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5wYXRjaEFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBkYXRlQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhKHJlcz8ucXVlc3Rpb25QYXBlcik7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVF1ZXN0aW9uQmFuaygpO1xyXG4gICAgICAgIGlmIChzdWNjZXNzTWVzc2FnZSkge1xyXG4gICAgICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHN1Y2Nlc3NNZXNzYWdlLCB0eXBlOiAnc3VjY2VzcycgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuRVJST1JfREVGQVVMVCddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogJ1BBVENIJywgcGF5bG9hZCB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBmaW5hbFN1Ym1pdCgpIHtcclxuICAgIGlmICh0aGlzLmlzU3VibWl0dGluZykgcmV0dXJuO1xyXG4gICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSB0cnVlO1xyXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcclxuICAgICAgcXVlc3Rpb25QYXBlcjogdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UuZ2VuZXJhdGVRdWVzdGlvblBhcGVyRFRPKHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLCB0aGlzLnF1ZXN0aW9uQmFuayksXHJcbiAgICAgIGFzc2Vzc21lbnQ6IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLmdlbmVyYXRlQXNzZXNzbWVudERUTyh0aGlzLmFzc2Vzc21lbnRJZCwgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEsIHRoaXMuYnVpbGRQcm9jdG9yaW5nQ29uZmlncygpKSxcclxuICAgICAgLi4udGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UuYnVpbGRJbnN0YW5jZVBhdGNoKHRoaXMuc2hvd1RpbWVJbnB1dCwgdGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZCwgdGhpcy5kdXJhdGlvblNlY29uZHMpXHJcbiAgICB9XHJcbiAgICBpZiAoKHBheWxvYWQ/LnF1ZXN0aW9uUGFwZXI/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdD8ubGVuZ3RoID8/IDApIDwgdGhpcy5taW5pbXVtUmVxdWlyZWRTZWN0aW9ucykge1xyXG4gICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULk1JTklNVU1fUkVRVUlSRURfU0VDVElPTlNfRVJST1InXT8ucmVwbGFjZSgnJENvdW50JywgU3RyaW5nKHRoaXMubWluaW11bVJlcXVpcmVkU2VjdGlvbnMpKSwgdHlwZTogJ2luZm8nIH0pO1xyXG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuYXNzZXNzbWVudElkKSB7XHJcbiAgICAgIC8vIHJldHVybnMgbnVsbCBvciAwIGFzIGFzc2Vzc21lbnQgaXMgbm90IGNyZWF0ZWQgeWV0LiBIYW5kbGUgdGhlIHJlc3BvbnNlIGluIGNvbnN1bWVyIGFwcFxyXG4gICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmFzc2Vzc21lbnRJbnN0YW5jZUlkQ2hhbmdlLmVtaXQodGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5wYXRjaEFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyKHBheWxvYWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBkYXRlQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhKHJlcz8ucXVlc3Rpb25QYXBlcik7XHJcbiAgICAgICAgaWYgKCF0aGlzLmFzc2Vzc21lbnRJbnN0YW5jZUlkKSB7XHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZUFzc2Vzc21lbnRJbnN0YW5jZSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgdGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZENoYW5nZS5lbWl0KHRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuRVJST1JfREVGQVVMVCddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogJ1BBVENIJywgcGF5bG9hZCB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBjcmVhdGVBc3Nlc3NtZW50SW5zdGFuY2UoKSB7XHJcbiAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UuZ2VuZXJhdGVBc3Nlc3NtZW50SW5zdGFuY2VEVE8odGhpcy5hc3Nlc3NtZW50SWQsIHRoaXMucHJlZGVmaW5lZEFzc2Vzc21lbnRJbnN0YW5jZSwgdGhpcy5zaG93VGltZUlucHV0ID8gdGhpcy5kdXJhdGlvblNlY29uZHMgOiB1bmRlZmluZWQpO1xyXG4gICAgdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLmNyZWF0ZUFzc2Vzc21lbnRJbnN0YW5jZShwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLmFzc2Vzc21lbnRJbnN0YW5jZUlkID0gcmVzO1xyXG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZENoYW5nZS5lbWl0KHJlcyk7XHJcbiAgICAgICAgLy8gdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5BU1NFU1NNRU5UX1BVQkxJU0hFRF9TVUNDRVNTJ10sIHR5cGU6ICdzdWNjZXNzJyB9KTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuRVJST1JfREVGQVVMVCddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogJ1BPU1QnLCBwYXlsb2FkIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGRpc2NhcmRDaGFuZ2VzKCkge1xyXG4gICAgaWYgKHRoaXMuYXNzZXNzbWVudElkKSB7XHJcbiAgICAgIHRoaXMuc2hvd0xvYWRlciA9IHRydWU7XHJcbiAgICAgIHRoaXMubG9hZEFzc2Vzc21lbnREYXRhKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBSZXNldCBmdWxseSB0byBlbXB0eSBpZiBubyBhc3Nlc3NtZW50IGV4aXN0ZWQgeWV0XHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhID0geyBpZDogMCwgcXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0OiBbXSB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UXVlc3Rpb25Gcm9tQmFuayhxdWVzdGlvbklkPzogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhbms/LltxdWVzdGlvbklkIHx8IC0xXTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YShuZXdEYXRhOiBhbnkpIHtcclxuICAgIGNvbnN0IGV4cGFuZGVkTGlzdCA9IHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3RcclxuICAgICAgPy5maWx0ZXIoKHM6IGFueSkgPT4gcy5pc0V4cGFuZGVkKVxyXG4gICAgICA/Lm1hcCgoczogYW55LCBpZHg6IG51bWJlcikgPT4gcy5pZCA/IHMuaWQudG9TdHJpbmcoKSA6IGAke2lkeH1fJHtzLnFwc05hbWU/LlswXT8udGV4dH1gKTtcclxuXHJcbiAgICB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YSA9IG5ld0RhdGEgfHwgeyBpZDogMCwgcXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0OiBbXSB9O1xyXG4gICAgdGhpcy5maWx0ZXJJbmFjdGl2ZVNlY3Rpb25zQW5kUXVlc3Rpb25zKCk7XHJcblxyXG4gICAgaWYgKGV4cGFuZGVkTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/LmZvckVhY2goKHM6IGFueSwgaWR4OiBudW1iZXIpID0+IHtcclxuICAgICAgICBjb25zdCBrZXkgPSBzLmlkID8gcy5pZC50b1N0cmluZygpIDogYCR7aWR4fV8ke3MucXBzTmFtZT8uWzBdPy50ZXh0fWA7XHJcbiAgICAgICAgaWYgKGV4cGFuZGVkTGlzdC5pbmNsdWRlcyhrZXkpKSB7XHJcbiAgICAgICAgICBzLmlzRXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJJbmFjdGl2ZVNlY3Rpb25zQW5kUXVlc3Rpb25zKCkge1xyXG4gICAgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0ID0gc29ydEJ5T3JkZXIoXHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/LmZpbHRlcigoc2VjdGlvbjogYW55KSA9PiBzZWN0aW9uLmlzQWN0aXZlICE9PSBmYWxzZSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdD8uZm9yRWFjaCgoc2VjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgIHNlY3Rpb24uc2VjdGlvblF1ZXN0aW9uc0xpc3QgPSBzb3J0QnlPcmRlcihcclxuICAgICAgICBzZWN0aW9uLnNlY3Rpb25RdWVzdGlvbnNMaXN0Py5maWx0ZXIoKHF1ZXN0aW9uOiBhbnkpID0+IHF1ZXN0aW9uLmlzQWN0aXZlICE9PSBmYWxzZSlcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICh0aGlzLnF1ZXN0aW9uQmFuaykge1xyXG4gICAgICBPYmplY3Qua2V5cyh0aGlzLnF1ZXN0aW9uQmFuaykuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkJhbmtba2V5IGFzIGFueV07XHJcbiAgICAgICAgaWYgKHF1ZXN0aW9uPy5kZWZhdWx0T3B0aW9uc0xpc3QpIHtcclxuICAgICAgICAgIHF1ZXN0aW9uLmRlZmF1bHRPcHRpb25zTGlzdCA9IHNvcnRCeU9yZGVyKFxyXG4gICAgICAgICAgICBxdWVzdGlvbi5kZWZhdWx0T3B0aW9uc0xpc3QuZmlsdGVyKChvcHQ6IGFueSkgPT4gb3B0LmlzQWN0aXZlICE9PSBmYWxzZSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhcGl0YWxpemVGaXJzdCh0ZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0ZXh0KSByZXR1cm4gJyc7XHJcbiAgICByZXR1cm4gdGV4dC50b0xvd2VyQ2FzZSgpLnNwbGl0KCcgJykubWFwKHdvcmQgPT4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkpLmpvaW4oJyAnKTtcclxuICB9XHJcblxyXG4gIGdldFNraWxsc0xpc3QoKSB7XHJcbiAgICBjb25zdCBwYXJhbXMgPSB7XHJcbiAgICAgIGZldGNoQ29udGV4dERhdGFPbmx5OiBmYWxzZSxcclxuICAgICAgcGFnZTogMCxcclxuICAgICAgc2l6ZTogMjAsXHJcbiAgICAgIGRpcmVjdGlvbjogJ0FTQydcclxuICAgIH1cclxuICAgIHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5nZXRSZWZEYXRhQnlDb2RlKCdSRUYuQVNTRVNTTUVOVF9RVUVTVElPTl9TS0lMTCcsIHBhcmFtcykuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5za2lsbHNMaXN0ID0gcmVzPy5lbGVtZW50cztcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgdGhyb3cgeyBlcnJvciwgbWV0aG9kOiAnR0VUJywgcGF5bG9hZDogdGhpcy5hc3Nlc3NtZW50SWQgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgdHJhY2tCeVNlY3Rpb25JZChpbmRleDogbnVtYmVyLCBzZWN0aW9uOiBhbnkpIHtcclxuICAgIHJldHVybiBzZWN0aW9uPy5pZCAhPSBudWxsID8gJ3MnICsgc2VjdGlvbi5pZCA6ICdpJyArIGluZGV4O1xyXG4gIH1cclxuXHJcbiAgdHJhY2tCeVNlY3Rpb25RdWVzdGlvbihpbmRleDogbnVtYmVyLCBzcTogYW55KSB7XHJcbiAgICBpZiAoc3E/LnF1ZXN0aW9uSWQgIT0gbnVsbCkgcmV0dXJuICdxJyArIHNxLnF1ZXN0aW9uSWQ7XHJcbiAgICBpZiAoc3E/LmlkICE9IG51bGwpIHJldHVybiAncycgKyBzcS5pZDtcclxuICAgIHJldHVybiAnaScgKyBpbmRleDtcclxuICB9XHJcbn1cclxuIiwiPGRpdiAqbmdJZj1cImNvbmZpZ3NMb2FkZWQgJiYgIXNob3dMb2FkZXI7IGVsc2UgbG9hZGVyXCIgY2xhc3M9XCJjb2wtMTIgaC0xMDBcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgaC0xMDAgcHktNFwiIFtjbGFzcy5oZWlnaHQtd2l0aG91dC1mb290ZXJdPVwic2hvd0Zvb3RlclwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdD8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzaG93UHJvY3RvcmluZ1RvZ2dsZSB8fCBzaG93VGltZUlucHV0XCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtZW5kIGZsZXgtd3JhcCBnYXAtNCBtYi0zXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1RpbWVJbnB1dFwiIGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkdXJhdGlvbklucHV0XCIgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXRlbiBtYi0wIGN1cnNvci1wb2ludGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuRFVSQVRJT04nXSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBpZD1cImR1cmF0aW9uSW5wdXRcIiBtaW49XCIxXCIgWyhuZ01vZGVsKV09XCJkdXJhdGlvbk1pbnV0ZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJibG9ja05lZ2F0aXZlS2V5cygkZXZlbnQpXCIgKG5nTW9kZWxDaGFuZ2UpPVwiZHVyYXRpb25NaW51dGVzID0gJGV2ZW50ID4gMCA/ICRldmVudCA6IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEzXCIgc3R5bGU9XCJ3aWR0aDogNHJlbTtcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTUlOVVRFUyddIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1Byb2N0b3JpbmdUb2dnbGVcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicHJvY3RvcmluZ1RvZ2dsZVwiIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW4gbWItMCBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkVOQUJMRV9QUk9DVE9SSU5HJ10gfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNoZWNrIGZvcm0tc3dpdGNoIG0tMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJwcm9jdG9yaW5nVG9nZ2xlXCIgY2xhc3M9XCJmb3JtLWNoZWNrLWlucHV0IGN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicHJvY3RvcmluZ0VuYWJsZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG1hdC1hY2NvcmRpb24gbXVsdGk9XCJ0cnVlXCIgY2RrRHJvcExpc3QgKGNka0Ryb3BMaXN0RHJvcHBlZCk9XCJkcm9wU2VjdGlvbigkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbCBbaGlkZVRvZ2dsZV09XCJ0cnVlXCIgI3BhbmVsPVwibWF0RXhwYW5zaW9uUGFuZWxcIiBbZXhwYW5kZWRdPVwic2VjdGlvbi5pc0V4cGFuZGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAob3BlbmVkKT1cInNlY3Rpb24uaXNFeHBhbmRlZCA9IHRydWVcIiAoY2xvc2VkKT1cInNlY3Rpb24uaXNFeHBhbmRlZCA9IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1iLTQgYm9yZGVyLTAgb3ZlcmZsb3ctaGlkZGVuIGFzc2Vzc21lbnQtcGFuZWwgc2hhZG93LW5vbmUgYmctdHJhbnNwYXJlbnRcIiBjZGtEcmFnXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q7IGxldCBzZWN0aW9uSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVNlY3Rpb25JZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gU2VjdGlvbiBIZWFkZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGNsYXNzPVwiY29sLTEyIHAtMCBoLWF1dG8gYmctdHJhbnNwYXJlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBjb2wtMTIgYWxpZ24taXRlbXMtY2VudGVyIGdhcC1tZC0zIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNka0RyYWdIYW5kbGUgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uRFJBR19EUk9QJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLWdyYWJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9kcmFnLWRyb3Auc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgZmxleC1ncm93LTEganVzdGlmeS1jb250ZW50LWJldHdlZW4gcC0zIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC1ib3JkZXItdHdvIGFzc2Vzc21lbnQtYmctd2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5uby1ib3JkZXJdPVwic2VjdGlvbi5pc0V4cGFuZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW2lkXT1cIidzZWN0aW9uTmFtZUlucHV0XycgKyBzZWN0aW9uSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLW1kLTExIGNvbC0xMCBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTggYm9yZGVyLTAgb3V0bGluZS0wIGJnLXRyYW5zcGFyZW50IHAtMCBpbnB1dC1mb2N1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWN0aW9uLnFwc05hbWVbMF0udGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc2l6ZV09XCIoc2VjdGlvbi5xcHNOYW1lWzBdLnRleHQ/Lmxlbmd0aCB8fCAxKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5FRElUJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLWljb24gY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb2N1c1NlY3Rpb25JbnB1dChzZWN0aW9uSW5kZXgsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9wZW5jaWwuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2VjdGlvbj8uc2VjdGlvblF1ZXN0aW9uc0xpc3Q/Lmxlbmd0aCB8fCAwfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5RVUVTVElPTlMnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtbWQtNCBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkFSUk9XX0RPV05fQkxBQ0snXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJwYW5lbC5leHBhbmRlZCA/ICdjaGFuZ2UtZGlyZWN0aW9uJyA6ICdjaGFuZ2UtZGlyZWN0aW9uLXJldmVyc2UnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9hcnJvdy1kb3duLWJsYWNrLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJib3JkZXItMCBiZy10cmFuc3BhcmVudCBweS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkFDVElPTl9ET1RTJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9hY3Rpb24tZG90cy5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0LW1lbnUgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LWJvcmRlci1ncmV5LWZvdXItMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWRkSW5zdHJ1Y3Rpb24oc2VjdGlvbilcIiBtYXQtbWVudS1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweS0yIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BRERfSU5TVFJVQ1RJT05TJ119fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJkdXBsaWNhdGVTZWN0aW9uKHNlY3Rpb24uaWQpXCIgbWF0LW1lbnUtaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHktMiBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuRFVQTElDQVRFJ119fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiKGFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YT8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0Py5sZW5ndGggPz8gMCkgPiBtaW5pbXVtUmVxdWlyZWRTZWN0aW9uc1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVTZWN0aW9uKHNlY3Rpb24pXCIgbWF0LW1lbnUtaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHktMiBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5ERUxFVEUnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFF1ZXN0aW9ucyBpbnNpZGUgc2VjdGlvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNka0Ryb3BMaXN0IFtjZGtEcm9wTGlzdERhdGFdPVwic2VjdGlvbi5zZWN0aW9uUXVlc3Rpb25zTGlzdCB8fCBbXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcFF1ZXN0aW9uKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjZGtEcmFnICpuZ0Zvcj1cImxldCBzZWN0aW9uUXVlc3Rpb24gb2Ygc2VjdGlvbi5zZWN0aW9uUXVlc3Rpb25zTGlzdDsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVNlY3Rpb25RdWVzdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1zdGFydCBnYXAtbWQtMyBnYXAtMiBteS0zIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjZGtEcmFnSGFuZGxlIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkRSQUdfRFJPUCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1ncmFiIG10LTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9kcmFnLWRyb3Auc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIHAtMyBhc3Nlc3NtZW50LWJvcmRlci10d28gYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBxdWVzdGlvbi1jb250YWluZXIgYXNzZXNzbWVudC1iZy13aGl0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tZGV0YWlscyBbc2VjdGlvblF1ZXN0aW9uXT1cInNlY3Rpb25RdWVzdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJnZXRRdWVzdGlvbkZyb21CYW5rKHNlY3Rpb25RdWVzdGlvbi5xdWVzdGlvbklkKSB8fCB7fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbkJhbmtdPVwicXVlc3Rpb25CYW5rXCIgW2ltYWdlQ29uZmlnXT1cImltYWdlQ29uZmlnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsQ29uZmlnXT1cImxhYmVsQ29uZmlnXCIgW2FsbG93RGVsZXRlXT1cIihzZWN0aW9uPy5zZWN0aW9uUXVlc3Rpb25zTGlzdD8ubGVuZ3RoID8/IDApID4gMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlZGl0UXVlc3Rpb24pPVwiY3JlYXRlRWRpdFF1ZXN0aW9uKHNlY3Rpb24sICRldmVudD8ucXVlc3Rpb25JZCwgJGV2ZW50Py5pc0NoaWxkUXVlc3Rpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGR1cGxpY2F0ZVF1ZXN0aW9uKT1cImR1cGxpY2F0ZVF1ZXN0aW9uKHNlY3Rpb24sICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVsZXRlUGFyZW50UXVlc3Rpb24pPVwiZGVsZXRlUGFyZW50UXVlc3Rpb24oJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWxldGVDaGlsZFF1ZXN0aW9uKT1cImRlbGV0ZUNoaWxkUXVlc3Rpb24oJGV2ZW50Lm9wdGlvbiwgJGV2ZW50LmNoaWxkUXVlc3Rpb25JZClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xpYi1xdWVzdGlvbi1kZXRhaWxzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHBzLTQgYm9yZGVyLWJvdHRvbSBwYi00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNyZWF0ZUVkaXRRdWVzdGlvbihzZWN0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtem9vbS1hbmltYXRpb24gYXNzZXNzbWVudC1idXR0b24tcGFkZGluZyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTMgYXNzZXNzbWVudC10ZXh0LXByaW1hcnktb25lIGFzc2Vzc21lbnQtYmctcGFsZXR0ZS1FREYzRkQgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEyIG91dGxpbmUtMCBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG10LTMgYm9yZGVyLUFEQzlGNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5QTFVTX1BSSU1BUlknXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL3BsdXMtcHJpbWFyeS5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQUREX0FfUVVFU1RJT04nXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgICAgICAgICA8L21hdC1hY2NvcmRpb24+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNyZWF0ZUVkaXRRdWVzdGlvbigpXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC16b29tLWFuaW1hdGlvbiBhc3Nlc3NtZW50LWJ1dHRvbi1wYWRkaW5nIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtMyBhc3Nlc3NtZW50LXRleHQtcHJpbWFyeS1vbmUgYXNzZXNzbWVudC1iZy1wYWxldHRlLUVERjNGRCBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTIgb3V0bGluZS0wIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gbXQtMyBib3JkZXItQURDOUY2IG1zLTRcIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uQUREX1NFQ1RJT04nXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2FkZC1zZWN0aW9uLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BRERfQV9TRUNUSU9OJ119fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YT8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0Py5sZW5ndGhcIlxyXG4gICAgICAgICAgICBjbGFzcz1cImgtMTAwIGQtZmxleCBmbGV4LWNvbHVtbiBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciBnYXAtM1wiPlxyXG4gICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLk5PX1FVRVNUSU9OUyddXCIgY2xhc3M9XCJjb2wtc20tYXV0byBjb2wtNlwiXHJcbiAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvbm8tcXVlc3Rpb25zLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTEgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xOFwiPnt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BRERfQ1VTVE9NX1FVRVNUSU9OUyddfX08L3A+XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1iLTAgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMiBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BRERfUVVFU1RJT05fREVTQyddfX08L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjcmVhdGVFZGl0UXVlc3Rpb24oKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmcgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIGFzc2Vzc21lbnQtYmctcGFsZXR0ZS1FREYzRkQgYXNzZXNzbWVudC10ZXh0LXByaW1hcnktb25lIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMiBib3JkZXItMCBhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLlBMVVNfUFJJTUFSWSddXCJcclxuICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvcGx1cy1wcmltYXJ5LnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BRERfQV9RVUVTVElPTiddfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJzaG93Rm9vdGVyXCJcclxuICAgICAgICBjbGFzcz1cImJnLXdoaXRlIHAtMyBwb3NpdGlvbi1zdGlja3kgYm90dG9tLTAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtZW5kIGJvcmRlci10b3AgZ2FwLTNcIj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJkaXNjYXJkQ2hhbmdlcygpXCIgW2Rpc2FibGVkXT1cImlzU3VibWl0dGluZ1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC16b29tLWFuaW1hdGlvbiBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmctbGFyZ2UgYXNzZXNzbWVudC1idG4tcHJpbWFyeS10cmFuc3BhcmVudCBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTNcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuRElTQ0FSRCddfX08L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJmaW5hbFN1Ym1pdCgpXCIgW2Rpc2FibGVkXT1cImlzU3VibWl0dGluZ1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC16b29tLWFuaW1hdGlvbiBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmctbGFyZ2UgYXNzZXNzbWVudC1idG4tcHJpbWFyeSBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTMgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwieydvcGFjaXR5LTAnOiBpc1N1Ym1pdHRpbmd9XCI+XHJcbiAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuUFVCTElTSCddfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJpc1N1Ym1pdHRpbmdcIiBbZGlhbWV0ZXJdPVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSB0b3AtNTAgc3RhcnQtNTAgdHJhbnNsYXRlLW1pZGRsZSBhc3Nlc3NtZW50LXNwaW5uZXItd2hpdGVcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48bmctdGVtcGxhdGUgI2xvYWRlcj5cclxuICAgIDxkaXYgY2xhc3M9XCJoLTEwMCBjb2wtMTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHB5LTVcIj5cclxuICAgICAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI2MFwiIGNsYXNzPVwiYXNzZXNzbWVudC1zcGlubmVyLXByaW1hcnlcIj48L21hdC1zcGlubmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
|
|
749
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXNzbWVudC1tYWtlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb25zLWFzc2Vzc21lbnQvc3JjL2xpYi9tb2R1bGVzL2Fzc2Vzc21lbnQtbWFrZXIvYXNzZXNzbWVudC1tYWtlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb25zLWFzc2Vzc21lbnQvc3JjL2xpYi9tb2R1bGVzL2Fzc2Vzc21lbnQtbWFrZXIvYXNzZXNzbWVudC1tYWtlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1QyxPQUFPLEVBQWUsZUFBZSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFdEUsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sb0ZBQW9GLENBQUM7QUFDekksT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDMUcsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDL0csT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sMkVBQTJFLENBQUM7QUFNeEgsT0FBTyxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQzs7Ozs7Ozs7Ozs7O0FBUWhFLE1BQU0sT0FBTyx3QkFBd0I7SUE0RG5DLFlBQ1Usc0JBQThDLEVBQzlDLHdCQUFrRCxFQUNsRCxNQUFpQjtRQUZqQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLDZCQUF3QixHQUF4Qix3QkFB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QUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7c0hBcHZCVSx3QkFBd0I7MEdBQXhCLHdCQUF3Qiw2NUJDdEJyQyw0d3dCQXNRYzs0RkRoUEQsd0JBQXdCO2tCQU5wQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxzQkFBc0I7b0JBQ2hDLFdBQVcsRUFBRSxtQ0FBbUM7b0JBQ2hELFNBQVMsRUFBRSxDQUFDLG1DQUFtQyxDQUFDO2lCQUNqRDs0S0FHVSxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLDRCQUE0QjtzQkFBcEMsS0FBSztnQkFDRyw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csNEJBQTRCO3NCQUFwQyxLQUFLO2dCQUNHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFFSSxrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csMEJBQTBCO3NCQUFuQyxNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDZGtEcmFnRHJvcCwgbW92ZUl0ZW1JbkFycmF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEFkZEVkaXRTZWN0aW9uSW50cm9kdWN0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2FkZC1lZGl0LXNlY3Rpb24taW50cm9kdWN0aW9uL2FkZC1lZGl0LXNlY3Rpb24taW50cm9kdWN0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRCdWlsZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2Fzc2Vzc21lbnQtYnVpbGRlci9hc3Nlc3NtZW50LWJ1aWxkZXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgUXVlc3Rpb25CYW5rUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3F1ZXN0aW9uLWJhbmstcGlja2VyL3F1ZXN0aW9uLWJhbmstcGlja2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL2NvbmZpcm1hdGlvbi1kaWFsb2cvY29uZmlybWF0aW9uLWRpYWxvZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBRdWVzdGlvblR5cGUsIEFzc2Vzc21lbnQsIFJlZkRhdGEsIEFzc2Vzc21lbnRDb250ZXh0RFRPLCBBc3Nlc3NtZW50SW5zdGFuY2UsIENvbmZpZywgUXVlc3Rpb25CYW5rQ29uZmlnIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2ludGVyZmFjZXMvYXNzZXNzbWVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50UXVlc3Rpb25QYXBlciwgU2VjdGlvblF1ZXN0aW9uLCBRdWVzdGlvblBhcGVyU2VjdGlvbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL3F1ZXN0aW9uLXBhcGVyLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRRdWVzdGlvbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL3F1ZXN0aW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRCdWlsZGVyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYXNzZXNzbWVudC1idWlsZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50TWFrZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9hc3Nlc3NtZW50LW1ha2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBzb3J0QnlPcmRlciwgcmVtb3ZlS2V5RGVlcCB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1hc3Nlc3NtZW50LW1ha2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXNzZXNzbWVudC1tYWtlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYXNzZXNzbWVudC1tYWtlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgQXNzZXNzbWVudE1ha2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBsYWJlbENvbmZpZzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG4gIEBJbnB1dCgpIGltYWdlQ29uZmlnOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgQElucHV0KCkgcXVlc3Rpb25UeXBlczogUXVlc3Rpb25UeXBlW10gPSBbXTtcclxuICBASW5wdXQoKSBzaG93Rm9vdGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgY3VzdG9tUnVsZXM/OiBhbnk7XHJcbiAgQElucHV0KCkgYXNzZXNzbWVudElkOiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgpIGFzc2Vzc21lbnRJbnN0YW5jZUlkOiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRBc3Nlc3NtZW50RFRPOiBBc3Nlc3NtZW50ID0ge307XHJcbiAgQElucHV0KCkgcHJlZGVmaW5lZEFzc2Vzc21lbnRJbnN0YW5jZTogQXNzZXNzbWVudEluc3RhbmNlID0ge307XHJcbiAgQElucHV0KCkgZW5hYmxlU2tpbGxzVG9RdWVzdGlvbk1hcHBpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBhc3Nlc3NtZW50Q29udGV4dCE6IEFzc2Vzc21lbnRDb250ZXh0RFRPO1xyXG4gIEBJbnB1dCgpIG1pbmltdW1SZXF1aXJlZFNlY3Rpb25zOiBudW1iZXIgPSAwO1xyXG4gIEBJbnB1dCgpIGNoZWNrRm9yUmVzcG9uc2VzOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc2hvd1Byb2N0b3JpbmdUb2dnbGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93VGltZUlucHV0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZW5hYmxlSW1wb3J0RnJvbVF1ZXN0aW9uQmFuazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHF1ZXN0aW9uQmFua0NvbmZpZz86IFF1ZXN0aW9uQmFua0NvbmZpZztcclxuXHJcbiAgQE91dHB1dCgpIGFzc2Vzc21lbnRJZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKSBhc3Nlc3NtZW50SW5zdGFuY2VJZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKSBzbmFja2Jhck1lc3NhZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgbWVzc2FnZTogc3RyaW5nLCB0eXBlOiAnc3VjY2VzcycgfCAnZXJyb3InIHwgJ2luZm8nIH0+KCk7XHJcblxyXG4gIHNob3dMb2FkZXI6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBxdWVzdGlvbkJhbms6IFJlY29yZDxudW1iZXIsIEFzc2Vzc21lbnRRdWVzdGlvbj4gPSB7fTtcclxuICBsb2NrZWRRdWVzdGlvbnNNYXA6IFJlY29yZDxudW1iZXIsIGJvb2xlYW4+ID0ge307XHJcbiAgYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhOiBBc3Nlc3NtZW50UXVlc3Rpb25QYXBlciA9IHsgaWQ6IDAsIHF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdDogW10gfTtcclxuICBjb25maWdzTG9hZGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcnVsZXM6IGFueTtcclxuICBpc1N1Ym1pdHRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBza2lsbHNMaXN0OiBSZWZEYXRhW10gPSBbXTtcclxuICByZXNwb25zZUNvdW50OiBudW1iZXIgPSAwO1xyXG4gIHByb2N0b3JpbmdFbmFibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgZHVyYXRpb25NaW51dGVzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICBhY3RpdmVEcm9wZG93bklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICBkcm9wZG93blBsYWNlbWVudE1hcDogeyBbaWQ6IHN0cmluZ106ICd0b3AnIHwgJ2JvdHRvbScgfSA9IHt9O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgUFJPQ1RPUklOR19DT05GSUdfS0VZID0gJ2Fzc2Vzc21lbnQuY29uZmlnLmlzLXByb2N0b3JpbmctZW5hYmxlZCc7XHJcblxyXG4gIHRvZ2dsZURyb3Bkb3duKGlkOiBzdHJpbmcsIGV2ZW50PzogRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmIChldmVudCkge1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgY29uc3QgdGFyZ2V0RWwgPSAoZXZlbnQuY3VycmVudFRhcmdldCB8fCBldmVudC50YXJnZXQpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAodGFyZ2V0RWwgJiYgdHlwZW9mIHRhcmdldEVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIGNvbnN0IHJlY3QgPSB0YXJnZXRFbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICBjb25zdCBzcGFjZUJlbG93ID0gd2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC5ib3R0b207XHJcbiAgICAgICAgY29uc3QgRVNUSU1BVEVEX0RST1BET1dOX0hFSUdIVCA9IDEzNTtcclxuICAgICAgICBpZiAoc3BhY2VCZWxvdyA8IEVTVElNQVRFRF9EUk9QRE9XTl9IRUlHSFQgJiYgcmVjdC50b3AgPiBFU1RJTUFURURfRFJPUERPV05fSEVJR0hUKSB7XHJcbiAgICAgICAgICB0aGlzLmRyb3Bkb3duUGxhY2VtZW50TWFwW2lkXSA9ICd0b3AnO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRyb3Bkb3duUGxhY2VtZW50TWFwW2lkXSA9ICdib3R0b20nO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5hY3RpdmVEcm9wZG93bklkID0gdGhpcy5hY3RpdmVEcm9wZG93bklkID09PSBpZCA/IG51bGwgOiBpZDtcclxuICB9XHJcblxyXG4gIGNsb3NlQWxsRHJvcGRvd25zKCk6IHZvaWQge1xyXG4gICAgdGhpcy5hY3RpdmVEcm9wZG93bklkID0gbnVsbDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhc3Nlc3NtZW50TWFrZXJTZXJ2aWNlOiBBc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhc3Nlc3NtZW50QnVpbGRlclNlcnZpY2U6IEFzc2Vzc21lbnRCdWlsZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2dcclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLnNldERlZmF1bHRBc3Nlc3NtZW50RFRPKHRoaXMuZGVmYXVsdEFzc2Vzc21lbnREVE8pO1xyXG4gICAgdGhpcy5wcm9jdG9yaW5nRW5hYmxlZCA9IHRoaXMucmVhZFByb2N0b3JpbmdDb25maWcodGhpcy5kZWZhdWx0QXNzZXNzbWVudERUTyk7XHJcbiAgICB0aGlzLnJlYWREdXJhdGlvbih0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5hc3Nlc3NtZW50SW5zdGFuY2VEVE8gfHwgdGhpcy5wcmVkZWZpbmVkQXNzZXNzbWVudEluc3RhbmNlKTtcclxuICAgIHRoaXMuZ2V0Q29uZmlnc0Zyb21KU09OKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuYXNzZXNzbWVudENvbnRleHQpIHtcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZCA9IHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnRJbnN0YW5jZURUTz8uaWQgfHwgdGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZDtcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50SWQgPSB0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5hc3Nlc3NtZW50Py5pZCB8fCB0aGlzLmFzc2Vzc21lbnRJZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hc3Nlc3NtZW50SWQpIHtcclxuICAgICAgdGhpcy5zaG93TG9hZGVyID0gdHJ1ZTtcclxuICAgICAgdGhpcy5sb2FkQXNzZXNzbWVudERhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5lbmFibGVTa2lsbHNUb1F1ZXN0aW9uTWFwcGluZykge1xyXG4gICAgICB0aGlzLmdldFNraWxsc0xpc3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jaGVja0ZvclJlc3BvbnNlcyAmJiB0aGlzLmFzc2Vzc21lbnRJbnN0YW5jZUlkKSB7XHJcbiAgICAgIHRoaXMubG9hZFJlc3BvbnNlQ291bnQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZFJlc3BvbnNlQ291bnQoKSB7XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuZ2V0UmVzcG9uc2VDb3VudCh0aGlzLmFzc2Vzc21lbnRJbnN0YW5jZUlkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoY291bnQ6IGFueSkgPT4gdGhpcy5yZXNwb25zZUNvdW50ID0gTnVtYmVyKGNvdW50KSB8fCAwLFxyXG4gICAgICBlcnJvcjogKCkgPT4gdGhpcy5yZXNwb25zZUNvdW50ID0gMCAvLyBmYWlsIG9wZW46IGRvbid0IHdhcm4gaWYgdGhlIGNvdW50IGNhbid0IGJlIGZldGNoZWRcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUnVucyBgYWN0aW9uYCwgYnV0IGZpcnN0IHdhcm5zIHRoZSB1c2VyIGlmIHRoZSBhc3Nlc3NtZW50IGFscmVhZHkgaGFzIHJlc3BvbnNlc1xyXG4gICAqIChvbmx5IHdoZW4gYGNoZWNrRm9yUmVzcG9uc2VzYCBpcyBlbmFibGVkIGFuZCB0aGUgY291bnQgaXMgZ3JlYXRlciB0aGFuIDApLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgY29uZmlybVJlc3BvbnNlc1dhcm5pbmcoYWN0aW9uOiAoKSA9PiB2b2lkKSB7XHJcbiAgICBpZiAodGhpcy5yZXNwb25zZUNvdW50ID4gMCkge1xyXG4gICAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKENvbmZpcm1hdGlvbkRpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgIGF1dG9Gb2N1czogZmFsc2UsXHJcbiAgICAgICAgbWF4V2lkdGg6ICc5NSUnLFxyXG4gICAgICAgIHdpZHRoOiAnMzJyZW0nLFxyXG4gICAgICAgIHBhbmVsQ2xhc3M6IFsnYXNzZXNzbWVudC1kaWFsb2cnXSxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuV0FSTklORy5SRVNQT05TRVNfRVhJU1QnXSxcclxuICAgICAgICAgIGNvbmZpcm1MYWJlbDogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlBST0NFRUQnXSxcclxuICAgICAgICAgIGNhbmNlbExhYmVsOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQ0FOQ0VMJ11cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgICBkaWFsb2dSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUoKGNvbmZpcm1lZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgIGlmIChjb25maXJtZWQpIHtcclxuICAgICAgICAgIGFjdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhY3Rpb24oKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbmZpZ3NGcm9tSlNPTigpIHtcclxuICAgIGZvcmtKb2luKHtcclxuICAgICAgbGFiZWxDb25maWc6IHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5nZXRDb25maWdKU09OKCdqc29uL2xhYmVsQ29uZmlnJyksXHJcbiAgICAgIGltYWdlQ29uZmlnOiB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuZ2V0Q29uZmlnSlNPTignanNvbi9pbWFnZUNvbmZpZycpLFxyXG4gICAgICBydWxlczogdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLmdldENvbmZpZ0pTT04oJ2pzb24vcXVlc3Rpb24tYnVpbGRlci1ydWxlcycpLFxyXG4gICAgICAuLi4oIXRoaXMucXVlc3Rpb25UeXBlcz8ubGVuZ3RoICYmIHtcclxuICAgICAgICBxdWVzdGlvblR5cGVzOiB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuZ2V0Q29uZmlnSlNPTignanNvbi9xdWVzdGlvblR5cGVzJylcclxuICAgICAgfSlcclxuICAgIH0pLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5sYWJlbENvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIHJlcz8ubGFiZWxDb25maWcsIHRoaXMubGFiZWxDb25maWcpO1xyXG4gICAgICB0aGlzLmltYWdlQ29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgcmVzPy5pbWFnZUNvbmZpZywgdGhpcy5pbWFnZUNvbmZpZyk7XHJcbiAgICAgIGlmIChyZXM/LnF1ZXN0aW9uVHlwZXMpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uVHlwZXMgPSByZXM/LnF1ZXN0aW9uVHlwZXM7XHJcbiAgICAgIH1cclxuICAgICAgLy8gTWVyZ2UgY3VzdG9tUnVsZXMgcGVyIHF1ZXN0aW9uVHlwZSBvdmVyIGRlZmF1bHQgcnVsZXNcclxuICAgICAgdGhpcy5ydWxlcyA9IHsgLi4ucmVzPy5ydWxlcyB9O1xyXG4gICAgICBpZiAodGhpcy5jdXN0b21SdWxlcykge1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuY3VzdG9tUnVsZXMpLmZvckVhY2gocVR5cGUgPT4ge1xyXG4gICAgICAgICAgaWYgKCF0aGlzLnJ1bGVzW3FUeXBlXSkge1xyXG4gICAgICAgICAgICB0aGlzLnJ1bGVzW3FUeXBlXSA9IHsgLi4udGhpcy5jdXN0b21SdWxlc1txVHlwZV0gfTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucnVsZXNbcVR5cGVdID0geyAuLi50aGlzLnJ1bGVzW3FUeXBlXSwgLi4udGhpcy5jdXN0b21SdWxlc1txVHlwZV0gfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jb25maWdzTG9hZGVkID0gdHJ1ZTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBsb2FkQXNzZXNzbWVudERhdGEoKSB7XHJcbiAgICBpZiAodGhpcy5hc3Nlc3NtZW50Q29udGV4dCkge1xyXG4gICAgICB0aGlzLnF1ZXN0aW9uQmFuayA9IHtcclxuICAgICAgICAuLi50aGlzLnF1ZXN0aW9uQmFuayxcclxuICAgICAgICAuLi4odGhpcy5hc3Nlc3NtZW50Q29udGV4dD8ucXVlc3Rpb25EVE9NYXAgfHwge30pXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMudXBkYXRlQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhKHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRFRPKTtcclxuICAgICAgdGhpcy5wcm9jdG9yaW5nRW5hYmxlZCA9IHRoaXMucmVhZFByb2N0b3JpbmdDb25maWcodGhpcy5hc3Nlc3NtZW50Q29udGV4dD8uYXNzZXNzbWVudCk7XHJcbiAgICAgIHRoaXMucmVhZER1cmF0aW9uKHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnRJbnN0YW5jZURUTyk7XHJcbiAgICAgIHRoaXMuc2hvd0xvYWRlciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmNoZWNrQXNzZXNzbWVudFF1ZXN0aW9uc0xvY2tlZCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLmdldEFzc2Vzc21lbnRDb250ZXh0KHsgYXNzZXNzbWVudElkczogW3RoaXMuYXNzZXNzbWVudElkXSB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5hc3Nlc3NtZW50Q29udGV4dCA9IHJlcz8uWzBdO1xyXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkJhbmsgPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMucXVlc3Rpb25CYW5rLFxyXG4gICAgICAgICAgICAuLi4odGhpcy5hc3Nlc3NtZW50Q29udGV4dD8ucXVlc3Rpb25EVE9NYXAgfHwge30pXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVBc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEodGhpcy5hc3Nlc3NtZW50Q29udGV4dD8uYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEVE8pO1xyXG4gICAgICAgICAgdGhpcy5wcm9jdG9yaW5nRW5hYmxlZCA9IHRoaXMucmVhZFByb2N0b3JpbmdDb25maWcodGhpcy5hc3Nlc3NtZW50Q29udGV4dD8uYXNzZXNzbWVudCk7XHJcbiAgICAgICAgICB0aGlzLnJlYWREdXJhdGlvbih0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5hc3Nlc3NtZW50SW5zdGFuY2VEVE8pO1xyXG4gICAgICAgICAgdGhpcy5zaG93TG9hZGVyID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNoZWNrQXNzZXNzbWVudFF1ZXN0aW9uc0xvY2tlZCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuRVJST1JfREVGQVVMVCddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICAgICAgdGhyb3cgeyBlcnJvciwgbWV0aG9kOiAnR0VUJyB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tBc3Nlc3NtZW50UXVlc3Rpb25zTG9ja2VkKCk6IHZvaWQge1xyXG4gICAgY29uc3QgcXVlc3Rpb25JZHMgPSBPYmplY3Qua2V5cyh0aGlzLnF1ZXN0aW9uQmFuayB8fCB7fSlcclxuICAgICAgLm1hcChpZCA9PiBOdW1iZXIoaWQpKVxyXG4gICAgICAuZmlsdGVyKGlkID0+IGlkID4gMCk7XHJcblxyXG4gICAgaWYgKHF1ZXN0aW9uSWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5jaGVja1F1ZXN0aW9uc0xvY2tlZChxdWVzdGlvbklkcywgJ0FTU0VTU01FTlRfSU5TVEFOQ0UnKVxyXG4gICAgICAucGlwZShjYXRjaEVycm9yKCgpID0+IG9mKHt9KSkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGxvY2tlZE1hcDogUmVjb3JkPHN0cmluZyB8IG51bWJlciwgYm9vbGVhbj4pID0+IHtcclxuICAgICAgICBPYmplY3Qua2V5cyhsb2NrZWRNYXAgfHwge30pLmZvckVhY2goayA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvY2tlZFF1ZXN0aW9uc01hcFtOdW1iZXIoayldID0gISFsb2NrZWRNYXBba107XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgaXNRdWVzdGlvbkxvY2tlZChxdWVzdGlvbklkPzogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gcXVlc3Rpb25JZCAhPSBudWxsID8gISF0aGlzLmxvY2tlZFF1ZXN0aW9uc01hcFtxdWVzdGlvbklkXSA6IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2VuZXJhdGVRdWVzdGlvbkJhbmsoKSB7XHJcbiAgICBsZXQgY2hpbGRRdWVzdGlvbklkczogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgICB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YT8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0Py5mb3JFYWNoKChzZWN0aW9uOiBhbnkpID0+IHtcclxuICAgICAgc2VjdGlvbj8uc2VjdGlvblF1ZXN0aW9uc0xpc3Q/LmZvckVhY2goKHE6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uQmFuaz8uW3E/LnF1ZXN0aW9uSWRdPy5kZWZhdWx0T3B0aW9uc0xpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkJhbms/LltxPy5xdWVzdGlvbklkXT8uZGVmYXVsdE9wdGlvbnNMaXN0Py5mb3JFYWNoKChvcHRpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAob3B0aW9uPy5jaGlsZFF1ZXN0aW9uTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgb3B0aW9uPy5jaGlsZFF1ZXN0aW9uTGlzdD8uZm9yRWFjaCgoY2NxOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNoaWxkUXVlc3Rpb25JZHMucHVzaChjY3EpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gUmVtb3ZlIGR1cGxpY2F0ZXMgYW5kIGZpbHRlciBvdXQgb25lcyB3ZSBhbHJlYWR5IGhhdmUgaW4gdGhlIGJhbmtcclxuICAgIGNoaWxkUXVlc3Rpb25JZHMgPSBbLi4ubmV3IFNldChjaGlsZFF1ZXN0aW9uSWRzKV0uZmlsdGVyKGlkID0+ICF0aGlzLnF1ZXN0aW9uQmFua1tpZF0pO1xyXG5cclxuICAgIGlmIChjaGlsZFF1ZXN0aW9uSWRzPy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGNvbnN0IHBhcmFtcyA9IHsgcXVlc3Rpb25JZHM6IGNoaWxkUXVlc3Rpb25JZHMgfTtcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLmdldFF1ZXN0aW9uc0J5SWRzKHBhcmFtcykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHJlcz8uZm9yRWFjaCgocXVlc3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uQmFua1txdWVzdGlvbi5pZF0gPSBxdWVzdGlvbjtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5jaGVja0Fzc2Vzc21lbnRRdWVzdGlvbnNMb2NrZWQoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdHRVQnLCBwYXlsb2FkOiBwYXJhbXMgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGltYWdlRXJyb3JIYW5kbGVyKGV2ZW50OiBhbnksIGZpbGVQYXRoOiBzdHJpbmcpIHtcclxuICAgIGV2ZW50LnRhcmdldC5zcmMgPSBmaWxlUGF0aDtcclxuICB9XHJcblxyXG4gIGZvY3VzU2VjdGlvbklucHV0KHNlY3Rpb25JbmRleDogbnVtYmVyLCBldmVudDogRXZlbnQpIHtcclxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgc2VjdGlvbk5hbWVJbnB1dF8ke3NlY3Rpb25JbmRleH1gKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgaWYgKGlucHV0KSB7XHJcbiAgICAgIGlucHV0LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcm9wU2VjdGlvbihldmVudDogQ2RrRHJhZ0Ryb3A8YW55W10+KSB7XHJcbiAgICBpZiAodGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0KSB7XHJcbiAgICAgIG1vdmVJdGVtSW5BcnJheShcclxuICAgICAgICB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YS5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3QsXHJcbiAgICAgICAgZXZlbnQucHJldmlvdXNJbmRleCxcclxuICAgICAgICBldmVudC5jdXJyZW50SW5kZXhcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRyb3BRdWVzdGlvbihldmVudDogQ2RrRHJhZ0Ryb3A8YW55W10+KSB7XHJcbiAgICBtb3ZlSXRlbUluQXJyYXkoXHJcbiAgICAgIGV2ZW50LmNvbnRhaW5lci5kYXRhLFxyXG4gICAgICBldmVudC5wcmV2aW91c0luZGV4LFxyXG4gICAgICBldmVudC5jdXJyZW50SW5kZXhcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhZGRJbnN0cnVjdGlvbihzZWN0aW9uOiBhbnkpIHtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQWRkRWRpdFNlY3Rpb25JbnRyb2R1Y3Rpb25Db21wb25lbnQsIHtcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgbWF4V2lkdGg6ICc5NSUnLFxyXG4gICAgICB3aWR0aDogJzQwcmVtJyxcclxuICAgICAgbWF4SGVpZ2h0OiAnMTAwZHZoJyxcclxuICAgICAgcGFuZWxDbGFzczogWydhc3Nlc3NtZW50LWRpYWxvZyddLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgaW1hZ2VDb25maWc6IHRoaXMuaW1hZ2VDb25maWcsXHJcbiAgICAgICAgbGFiZWxDb25maWc6IHRoaXMubGFiZWxDb25maWcsXHJcbiAgICAgICAgc2VjdGlvbkRldGFpbHM6IHNlY3Rpb25cclxuICAgICAgfSxcclxuICAgIH0pO1xyXG5cclxuICAgIGRpYWxvZ1JlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XHJcbiAgICAgIGlmIChyZXN1bHQ/LnVwZGF0ZSkge1xyXG4gICAgICAgIGlmICghc2VjdGlvbi5xcHNEZXNjKSBzZWN0aW9uLnFwc0Rlc2MgPSBbXTtcclxuICAgICAgICBpZiAoIXNlY3Rpb24ucXBzRGVzY1swXSkgc2VjdGlvbi5xcHNEZXNjWzBdID0geyBpZDogMCwgbGFuZ3VhZ2U6IHsgY29kZTogJ0VORycgfSwgdGV4dDogJycgfTtcclxuICAgICAgICBzZWN0aW9uLnFwc0Rlc2NbMF0udGV4dCA9IHJlc3VsdD8uZGVzY3JpcHRpb247XHJcbiAgICAgICAgc2VjdGlvbi5tZWRpYVVybCA9IHJlc3VsdD8ubWVkaWFVcmwgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLnBhdGNoQXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIodGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULlNFQ1RJT05fSU5TVFJVQ1RJT05TX1VQREFURURfU1VDQ0VTUyddKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVDaGlsZFF1ZXN0aW9uKG9wdGlvbjogYW55LCBjaGlsZElkVG9SZW1vdmU6IG51bWJlciB8IGFueSkge1xyXG4gICAgdGhpcy5jb25maXJtUmVzcG9uc2VzV2FybmluZygoKSA9PiB7XHJcbiAgICAgIGlmIChvcHRpb24uY2hpbGRRdWVzdGlvbkxpc3QpIHtcclxuICAgICAgICBjb25zdCBpZFRvUmVtb3ZlID0gdHlwZW9mIGNoaWxkSWRUb1JlbW92ZSA9PT0gJ29iamVjdCcgPyBjaGlsZElkVG9SZW1vdmU/LmlkIDogY2hpbGRJZFRvUmVtb3ZlO1xyXG4gICAgICAgIG9wdGlvbi5jaGlsZFF1ZXN0aW9uTGlzdCA9IG9wdGlvbi5jaGlsZFF1ZXN0aW9uTGlzdC5maWx0ZXIoKGNjcTogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBpZCA9IHR5cGVvZiBjY3EgPT09ICdvYmplY3QnID8gY2NxPy5pZCA6IGNjcTtcclxuICAgICAgICAgIHJldHVybiBpZCAhPT0gaWRUb1JlbW92ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVQYXJlbnRRdWVzdGlvbihzZWN0aW9uUXVlc3Rpb246IFNlY3Rpb25RdWVzdGlvbikge1xyXG4gICAgdGhpcy5jb25maXJtUmVzcG9uc2VzV2FybmluZygoKSA9PiB7XHJcbiAgICAgIHNlY3Rpb25RdWVzdGlvbi5pc0FjdGl2ZSA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnBhdGNoQXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIodGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULlFVRVNUSU9OX0RFTEVURURfU1VDQ0VTUyddKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlU2VjdGlvbihzZWN0aW9uOiBRdWVzdGlvblBhcGVyU2VjdGlvbikge1xyXG4gICAgdGhpcy5jb25maXJtUmVzcG9uc2VzV2FybmluZygoKSA9PiB7XHJcbiAgICAgIHNlY3Rpb24uaXNBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgdGhpcy5wYXRjaEFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyKHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5TRUNUSU9OX0RFTEVURURfU1VDQ0VTUyddKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlRWRpdFF1ZXN0aW9uKHNlY3Rpb25EZXRhaWxzPzogYW55LCBzZWN0aW9uUXVlc3Rpb25JZD86IG51bWJlciwgaXNDaGlsZD86IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIGlmIChzZWN0aW9uUXVlc3Rpb25JZCAhPSBudWxsICYmIHRoaXMubG9ja2VkUXVlc3Rpb25zTWFwW3NlY3Rpb25RdWVzdGlvbklkXSkge1xyXG4gICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHtcclxuICAgICAgICBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuV0FSTklORy5RVUVTVElPTl9MT0NLRUQnXSB8fCAnVGhpcyBxdWVzdGlvbiBpcyBwYXJ0IG9mIGEgcHVibGlzaGVkIGFzc2Vzc21lbnQgYW5kIGNhbm5vdCBiZSBlZGl0ZWQuJyxcclxuICAgICAgICB0eXBlOiAnaW5mbydcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIEVkaXRpbmcgYW4gZXhpc3RpbmcgcXVlc3Rpb24gaXMgZ2F0ZWQgYnkgdGhlIHJlc3BvbnNlcyB3YXJuaW5nOyBhZGRpbmcgYSBuZXcgb25lIGlzIG5vdC5cclxuICAgIGlmIChzZWN0aW9uUXVlc3Rpb25JZCAhPSBudWxsKSB7XHJcbiAgICAgIHRoaXMuY29uZmlybVJlc3BvbnNlc1dhcm5pbmcoKCkgPT4gdGhpcy5vcGVuUXVlc3Rpb25CdWlsZGVyKHNlY3Rpb25EZXRhaWxzLCBzZWN0aW9uUXVlc3Rpb25JZCwgaXNDaGlsZCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5vcGVuUXVlc3Rpb25CdWlsZGVyKHNlY3Rpb25EZXRhaWxzLCBzZWN0aW9uUXVlc3Rpb25JZCwgaXNDaGlsZCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG9wZW5RdWVzdGlvbkJ1aWxkZXIoc2VjdGlvbkRldGFpbHM/OiBhbnksIHNlY3Rpb25RdWVzdGlvbklkPzogbnVtYmVyLCBpc0NoaWxkPzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgY29uc3QgcXVlc3Rpb25EZXRhaWxzID0gdGhpcy5nZXRRdWVzdGlvbkZyb21CYW5rKHNlY3Rpb25RdWVzdGlvbklkKTtcclxuICAgIGNvbnN0IGRpYWxvZ1JlZiA9IHRoaXMuZGlhbG9nLm9wZW4oQXNzZXNzbWVudEJ1aWxkZXJDb21wb25lbnQsIHtcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgcG9zaXRpb246IHsgcmlnaHQ6ICcwJyB9LFxyXG4gICAgICBtYXhXaWR0aDogJzEwMCUnLFxyXG4gICAgICB3aWR0aDogJzU1cmVtJyxcclxuICAgICAgaGVpZ2h0OiAnMTAwdmgnLFxyXG4gICAgICBwYW5lbENsYXNzOiBbJ2Fzc2Vzc21lbnQtZGlhbG9nJywgJ2Fzc2Vzc21lbnQtZGlhbG9nLXNsaWRlci1hbmltYXRpb24nXSxcclxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXHJcbiAgICAgIGRhdGE6IHtcclxuICAgICAgICBsYWJlbENvbmZpZzogdGhpcy5sYWJlbENvbmZpZyxcclxuICAgICAgICBpbWFnZUNvbmZpZzogdGhpcy5pbWFnZUNvbmZpZyxcclxuICAgICAgICBxdWVzdGlvblR5cGVzOiB0aGlzLnF1ZXN0aW9uVHlwZXMsXHJcbiAgICAgICAgcnVsZXM6IHRoaXMucnVsZXMsXHJcbiAgICAgICAgcXVlc3Rpb25CYW5rOiB0aGlzLnF1ZXN0aW9uQmFuayxcclxuICAgICAgICBpc0NoaWxkOiBpc0NoaWxkLFxyXG4gICAgICAgIHF1ZXN0aW9uRGV0YWlscyxcclxuICAgICAgICBzZWN0aW9uRGV0YWlscyxcclxuICAgICAgICBhc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE6IHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLFxyXG4gICAgICAgIGFzc2Vzc21lbnRJZDogdGhpcy5hc3Nlc3NtZW50SWQsXHJcbiAgICAgICAgc2tpbGxzTGlzdDogdGhpcy5za2lsbHNMaXN0LFxyXG4gICAgICAgIHNuYWNrYmFyTWVzc2FnZUVtaXR0ZXI6IHRoaXMuc25hY2tiYXJNZXNzYWdlLFxyXG4gICAgICAgIGlzTG9ja2VkOiBzZWN0aW9uUXVlc3Rpb25JZCAhPSBudWxsID8gISF0aGlzLmxvY2tlZFF1ZXN0aW9uc01hcFtzZWN0aW9uUXVlc3Rpb25JZF0gOiBmYWxzZVxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICBpZiAocmVzPy5zdWNjZXNzKSB7XHJcbiAgICAgICAgaWYgKHJlcz8uYXNzZXNzbWVudElkKSB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuYXNzZXNzbWVudElkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXNzZXNzbWVudElkID0gcmVzLmFzc2Vzc21lbnRJZDtcclxuICAgICAgICAgICAgdGhpcy5hc3Nlc3NtZW50SWRDaGFuZ2UuZW1pdCh0aGlzLmFzc2Vzc21lbnRJZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uQmFuayA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5xdWVzdGlvbkJhbmssXHJcbiAgICAgICAgICAgIC4uLihyZXM/LnF1ZXN0aW9uTWFwIHx8IHt9KVxyXG4gICAgICAgICAgfTtcclxuICAgICAgICAgIHRoaXMudXBkYXRlQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhKHJlcy5xdWVzdGlvblBhcGVyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5wYXRjaEFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGR1cGxpY2F0ZVNlY3Rpb24oc2VjdGlvbklkOiBudW1iZXIpIHtcclxuICAgIGlmICghdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE/LmlkKSByZXR1cm47XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuZHVwbGljYXRlU2VjdGlvbih0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YS5pZCwgc2VjdGlvbklkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uQmFuayA9IHtcclxuICAgICAgICAgIC4uLnRoaXMucXVlc3Rpb25CYW5rLFxyXG4gICAgICAgICAgLi4uKHJlcz8ucXVlc3Rpb25NYXAgfHwge30pXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YShyZXM/LnF1ZXN0aW9uUGFwZXIpO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVRdWVzdGlvbkJhbmsoKTtcclxuICAgICAgICB0aGlzLmNoZWNrQXNzZXNzbWVudFF1ZXN0aW9uc0xvY2tlZCgpO1xyXG4gICAgICAgIHRoaXMucGF0Y2hBc3Nlc3NtZW50QW5kUXVlc3Rpb25QYXBlcigpO1xyXG4gICAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuU0VDVElPTl9EVVBMSUNBVEVEX1NVQ0NFU1MnXSwgdHlwZTogJ3N1Y2Nlc3MnIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNob3dMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdQQVRDSCcgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGR1cGxpY2F0ZVF1ZXN0aW9uKHNlY3Rpb246IFF1ZXN0aW9uUGFwZXJTZWN0aW9uLCBzZWN0aW9uUXVlc3Rpb246IFNlY3Rpb25RdWVzdGlvbikge1xyXG4gICAgaWYgKCFzZWN0aW9uUXVlc3Rpb24uaWQpIHJldHVybjtcclxuICAgIHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5kdXBsaWNhdGVRdWVzdGlvbihzZWN0aW9uLmlkLCBzZWN0aW9uUXVlc3Rpb24uaWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25CYW5rID0ge1xyXG4gICAgICAgICAgLi4udGhpcy5xdWVzdGlvbkJhbmssXHJcbiAgICAgICAgICAuLi4ocmVzPy5xdWVzdGlvbk1hcCB8fCB7fSlcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMudXBkYXRlQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhKHJlcz8ucXVlc3Rpb25QYXBlcik7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVF1ZXN0aW9uQmFuaygpO1xyXG4gICAgICAgIHRoaXMuY2hlY2tBc3Nlc3NtZW50UXVlc3Rpb25zTG9ja2VkKCk7XHJcbiAgICAgICAgdGhpcy5wYXRjaEFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyKCk7XHJcbiAgICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5RVUVTVElPTl9EVVBMSUNBVEVEX1NVQ0NFU1MnXSwgdHlwZTogJ3N1Y2Nlc3MnIH0pO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNob3dMb2FkZXIgPSBmYWxzZTtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdQQVRDSCcgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVhZFByb2N0b3JpbmdDb25maWcoYXNzZXNzbWVudD86IEFzc2Vzc21lbnQpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBhc3Nlc3NtZW50Py5hc3Nlc3NtZW50Q29uZmlncz8uZmluZChjID0+IGMuY29uZmlnS2V5ID09PSB0aGlzLlBST0NUT1JJTkdfQ09ORklHX0tFWSk/LmNvbmZpZ1ZhbHVlID09PSAnMSc7XHJcbiAgfVxyXG5cclxuICAvKiogSW5pdGlhbGl6ZXMgdGhlIG1pbnV0ZXMgaW5wdXQgZnJvbSBhbiBleGlzdGluZyBpbnN0YW5jZSdzIGR1cmF0aW9uIChzZWNvbmRzKS4gKi9cclxuICBwcml2YXRlIHJlYWREdXJhdGlvbihpbnN0YW5jZT86IEFzc2Vzc21lbnRJbnN0YW5jZSk6IHZvaWQge1xyXG4gICAgY29uc3Qgc2Vjb25kcyA9IGluc3RhbmNlPy5kdXJhdGlvbiA/PyAwO1xyXG4gICAgLy8ga2VlcCBmcmFjdGlvbmFsIG1pbnV0ZXMgKGUuZy4gMzBzIC0+IDAuNSkgcmF0aGVyIHRoYW4gcm91bmRpbmcgdG8gd2hvbGUgbWludXRlc1xyXG4gICAgdGhpcy5kdXJhdGlvbk1pbnV0ZXMgPSBzZWNvbmRzID4gMCA/IE1hdGgucm91bmQoKHNlY29uZHMgLyA2MCkgKiAxMDApIC8gMTAwIDogbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKiBCbG9ja3MgY2hhcmFjdGVycyB0aGF0IHdvdWxkIGVudGVyIGEgbmVnYXRpdmUvZXhwb25lbnQgdmFsdWUgaW4gdGhlIGR1cmF0aW9uIGlucHV0LiAqL1xyXG4gIGJsb2NrTmVnYXRpdmVLZXlzKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoWyctJywgJysnLCAnZScsICdFJ10uaW5jbHVkZXMoZXZlbnQua2V5KSkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIER1cmF0aW9uIHRvIHBlcnNpc3QsIGluIFNFQ09ORFMgKHRoZSB1bml0IHRoZSB0YWtlcidzIHRpbWVyIHVzZXMpLiAwIG1lYW5zIHVudGltZWQuICovXHJcbiAgcHJpdmF0ZSBnZXQgZHVyYXRpb25TZWNvbmRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5kdXJhdGlvbk1pbnV0ZXMgPyBNYXRoLnJvdW5kKHRoaXMuZHVyYXRpb25NaW51dGVzICogNjApIDogMDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGFzc2Vzc21lbnQgY29uZmlncyB3aXRoIHRoZSBwcm9jdG9yaW5nIGZsYWcgKCcxJy8nMCcpIHVwc2VydGVkLCBwcmVzZXJ2aW5nXHJcbiAgICogYW55IG90aGVyIGV4aXN0aW5nIGNvbmZpZ3MuIFJldHVybnMgdW5kZWZpbmVkIHdoZW4gdGhlIHByb2N0b3JpbmcgdG9nZ2xlIGlzIG5vdCBlbmFibGVkXHJcbiAgICogc28gdGhlIHNhdmVkIHBheWxvYWQgaXMgdW5jaGFuZ2VkIGZvciBjb25zdW1lcnMgbm90IHVzaW5nIHByb2N0b3JpbmcuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBidWlsZFByb2N0b3JpbmdDb25maWdzKCk6IENvbmZpZ1tdIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICghdGhpcy5zaG93UHJvY3RvcmluZ1RvZ2dsZSkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYmFzZSA9IHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnQ/LmFzc2Vzc21lbnRDb25maWdzID8/IHRoaXMuZGVmYXVsdEFzc2Vzc21lbnREVE8/LmFzc2Vzc21lbnRDb25maWdzID8/IFtdO1xyXG4gICAgY29uc3QgY29uZmlnczogQ29uZmlnW10gPSBiYXNlLm1hcChjID0+ICh7IC4uLmMgfSkpO1xyXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnByb2N0b3JpbmdFbmFibGVkID8gJzEnIDogJzAnO1xyXG4gICAgY29uc3QgZXhpc3RpbmcgPSBjb25maWdzLmZpbmQoYyA9PiBjLmNvbmZpZ0tleSA9PT0gdGhpcy5QUk9DVE9SSU5HX0NPTkZJR19LRVkpO1xyXG4gICAgaWYgKGV4aXN0aW5nKSB7XHJcbiAgICAgIGV4aXN0aW5nLmNvbmZpZ1ZhbHVlID0gdmFsdWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25maWdzLnB1c2goeyBjb25maWdLZXk6IHRoaXMuUFJPQ1RPUklOR19DT05GSUdfS0VZLCBjb25maWdWYWx1ZTogdmFsdWUgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gY29uZmlncztcclxuICB9XHJcblxyXG4gIHBhdGNoQXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIoc3VjY2Vzc01lc3NhZ2U/OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIHF1ZXN0aW9uUGFwZXI6IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLmdlbmVyYXRlUXVlc3Rpb25QYXBlckRUTyh0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YSwgdGhpcy5xdWVzdGlvbkJhbmspLFxyXG4gICAgICBhc3Nlc3NtZW50OiB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5nZW5lcmF0ZUFzc2Vzc21lbnREVE8odGhpcy5hc3Nlc3NtZW50SWQsIHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLCB0aGlzLmJ1aWxkUHJvY3RvcmluZ0NvbmZpZ3MoKSksXHJcbiAgICAgIC4uLnRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLmJ1aWxkSW5zdGFuY2VQYXRjaCh0aGlzLnNob3dUaW1lSW5wdXQsIHRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWQsIHRoaXMuZHVyYXRpb25TZWNvbmRzKVxyXG4gICAgfVxyXG4gICAgdGhpcy5hc3Nlc3NtZW50TWFrZXJTZXJ2aWNlLnBhdGNoQXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEocmVzPy5xdWVzdGlvblBhcGVyKTtcclxuICAgICAgICB0aGlzLmdlbmVyYXRlUXVlc3Rpb25CYW5rKCk7XHJcbiAgICAgICAgdGhpcy5jaGVja0Fzc2Vzc21lbnRRdWVzdGlvbnNMb2NrZWQoKTtcclxuICAgICAgICBpZiAoc3VjY2Vzc01lc3NhZ2UpIHtcclxuICAgICAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiBzdWNjZXNzTWVzc2FnZSwgdHlwZTogJ3N1Y2Nlc3MnIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdQQVRDSCcsIHBheWxvYWQgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgZmluYWxTdWJtaXQoKSB7XHJcbiAgICBpZiAodGhpcy5pc1N1Ym1pdHRpbmcpIHJldHVybjtcclxuICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gdHJ1ZTtcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIHF1ZXN0aW9uUGFwZXI6IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLmdlbmVyYXRlUXVlc3Rpb25QYXBlckRUTyh0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YSwgdGhpcy5xdWVzdGlvbkJhbmspLFxyXG4gICAgICBhc3Nlc3NtZW50OiB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5nZW5lcmF0ZUFzc2Vzc21lbnREVE8odGhpcy5hc3Nlc3NtZW50SWQsIHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLCB0aGlzLmJ1aWxkUHJvY3RvcmluZ0NvbmZpZ3MoKSksXHJcbiAgICAgIC4uLnRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLmJ1aWxkSW5zdGFuY2VQYXRjaCh0aGlzLnNob3dUaW1lSW5wdXQsIHRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWQsIHRoaXMuZHVyYXRpb25TZWNvbmRzKVxyXG4gICAgfVxyXG4gICAgaWYgKChwYXlsb2FkPy5xdWVzdGlvblBhcGVyPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/Lmxlbmd0aCA/PyAwKSA8IHRoaXMubWluaW11bVJlcXVpcmVkU2VjdGlvbnMpIHtcclxuICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5NSU5JTVVNX1JFUVVJUkVEX1NFQ1RJT05TX0VSUk9SJ10/LnJlcGxhY2UoJyRDb3VudCcsIFN0cmluZyh0aGlzLm1pbmltdW1SZXF1aXJlZFNlY3Rpb25zKSksIHR5cGU6ICdpbmZvJyB9KTtcclxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmFzc2Vzc21lbnRJZCkge1xyXG4gICAgICAvLyByZXR1cm5zIG51bGwgb3IgMCBhcyBhc3Nlc3NtZW50IGlzIG5vdCBjcmVhdGVkIHlldC4gSGFuZGxlIHRoZSByZXNwb25zZSBpbiBjb25zdW1lciBhcHBcclxuICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZENoYW5nZS5lbWl0KHRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWQpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UucGF0Y2hBc3Nlc3NtZW50QW5kUXVlc3Rpb25QYXBlcihwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YShyZXM/LnF1ZXN0aW9uUGFwZXIpO1xyXG4gICAgICAgIGlmICghdGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZCkge1xyXG4gICAgICAgICAgdGhpcy5jcmVhdGVBc3Nlc3NtZW50SW5zdGFuY2UoKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIHRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWRDaGFuZ2UuZW1pdCh0aGlzLmFzc2Vzc21lbnRJbnN0YW5jZUlkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdQQVRDSCcsIHBheWxvYWQgfVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgY3JlYXRlQXNzZXNzbWVudEluc3RhbmNlKCkge1xyXG4gICAgY29uc3QgcGF5bG9hZCA9IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLmdlbmVyYXRlQXNzZXNzbWVudEluc3RhbmNlRFRPKHRoaXMuYXNzZXNzbWVudElkLCB0aGlzLnByZWRlZmluZWRBc3Nlc3NtZW50SW5zdGFuY2UsIHRoaXMuc2hvd1RpbWVJbnB1dCA/IHRoaXMuZHVyYXRpb25TZWNvbmRzIDogdW5kZWZpbmVkKTtcclxuICAgIHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5jcmVhdGVBc3Nlc3NtZW50SW5zdGFuY2UocGF5bG9hZCkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZCA9IHJlcztcclxuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWRDaGFuZ2UuZW1pdChyZXMpO1xyXG4gICAgICAgIC8vIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuQVNTRVNTTUVOVF9QVUJMSVNIRURfU1VDQ0VTUyddLCB0eXBlOiAnc3VjY2VzcycgfSk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiBlcnJvciA9PiB7XHJcbiAgICAgICAgdGhpcy5pc1N1Ym1pdHRpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdQT1NUJywgcGF5bG9hZCB9XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBkaXNjYXJkQ2hhbmdlcygpIHtcclxuICAgIGlmICh0aGlzLmFzc2Vzc21lbnRJZCkge1xyXG4gICAgICB0aGlzLnNob3dMb2FkZXIgPSB0cnVlO1xyXG4gICAgICB0aGlzLmxvYWRBc3Nlc3NtZW50RGF0YSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gUmVzZXQgZnVsbHkgdG8gZW1wdHkgaWYgbm8gYXNzZXNzbWVudCBleGlzdGVkIHlldFxyXG4gICAgICB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YSA9IHsgaWQ6IDAsIHF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdDogW10gfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFF1ZXN0aW9uRnJvbUJhbmsocXVlc3Rpb25JZD86IG51bWJlcikge1xyXG4gICAgcmV0dXJuIHRoaXMucXVlc3Rpb25CYW5rPy5bcXVlc3Rpb25JZCB8fCAtMV07XHJcbiAgfVxyXG5cclxuICB1cGRhdGVBc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEobmV3RGF0YTogYW55KSB7XHJcbiAgICBjb25zdCBleHBhbmRlZExpc3QgPSB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YT8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0XHJcbiAgICAgID8uZmlsdGVyKChzOiBhbnkpID0+IHMuaXNFeHBhbmRlZClcclxuICAgICAgPy5tYXAoKHM6IGFueSwgaWR4OiBudW1iZXIpID0+IHMuaWQgPyBzLmlkLnRvU3RyaW5nKCkgOiBgJHtpZHh9XyR7cy5xcHNOYW1lPy5bMF0/LnRleHR9YCk7XHJcblxyXG4gICAgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEgPSBuZXdEYXRhIHx8IHsgaWQ6IDAsIHF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdDogW10gfTtcclxuICAgIHRoaXMuZmlsdGVySW5hY3RpdmVTZWN0aW9uc0FuZFF1ZXN0aW9ucygpO1xyXG5cclxuICAgIGlmIChleHBhbmRlZExpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YT8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0Py5mb3JFYWNoKChzOiBhbnksIGlkeDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gcy5pZCA/IHMuaWQudG9TdHJpbmcoKSA6IGAke2lkeH1fJHtzLnFwc05hbWU/LlswXT8udGV4dH1gO1xyXG4gICAgICAgIGlmIChleHBhbmRlZExpc3QuaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgICAgcy5pc0V4cGFuZGVkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmlsdGVySW5hY3RpdmVTZWN0aW9uc0FuZFF1ZXN0aW9ucygpIHtcclxuICAgIHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdCA9IHNvcnRCeU9yZGVyKFxyXG4gICAgICB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YT8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0Py5maWx0ZXIoKHNlY3Rpb246IGFueSkgPT4gc2VjdGlvbi5pc0FjdGl2ZSAhPT0gZmFsc2UpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/LmZvckVhY2goKHNlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICBzZWN0aW9uLnNlY3Rpb25RdWVzdGlvbnNMaXN0ID0gc29ydEJ5T3JkZXIoXHJcbiAgICAgICAgc2VjdGlvbi5zZWN0aW9uUXVlc3Rpb25zTGlzdD8uZmlsdGVyKChxdWVzdGlvbjogYW55KSA9PiBxdWVzdGlvbi5pc0FjdGl2ZSAhPT0gZmFsc2UpXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5xdWVzdGlvbkJhbmspIHtcclxuICAgICAgT2JqZWN0LmtleXModGhpcy5xdWVzdGlvbkJhbmspLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25CYW5rW2tleSBhcyBhbnldO1xyXG4gICAgICAgIGlmIChxdWVzdGlvbj8uZGVmYXVsdE9wdGlvbnNMaXN0KSB7XHJcbiAgICAgICAgICBxdWVzdGlvbi5kZWZhdWx0T3B0aW9uc0xpc3QgPSBzb3J0QnlPcmRlcihcclxuICAgICAgICAgICAgcXVlc3Rpb24uZGVmYXVsdE9wdGlvbnNMaXN0LmZpbHRlcigob3B0OiBhbnkpID0+IG9wdC5pc0FjdGl2ZSAhPT0gZmFsc2UpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjYXBpdGFsaXplRmlyc3QodGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcclxuICAgIGlmICghdGV4dCkgcmV0dXJuICcnO1xyXG4gICAgcmV0dXJuIHRleHQudG9Mb3dlckNhc2UoKS5zcGxpdCgnICcpLm1hcCh3b3JkID0+IHdvcmQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB3b3JkLnNsaWNlKDEpKS5qb2luKCcgJyk7XHJcbiAgfVxyXG5cclxuICBnZXRTa2lsbHNMaXN0KCkge1xyXG4gICAgY29uc3QgcGFyYW1zID0ge1xyXG4gICAgICBmZXRjaENvbnRleHREYXRhT25seTogZmFsc2UsXHJcbiAgICAgIHBhZ2U6IDAsXHJcbiAgICAgIHNpemU6IDIwLFxyXG4gICAgICBkaXJlY3Rpb246ICdBU0MnXHJcbiAgICB9XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRNYWtlclNlcnZpY2UuZ2V0UmVmRGF0YUJ5Q29kZSgnUkVGLkFTU0VTU01FTlRfUVVFU1RJT05fU0tJTEwnLCBwYXJhbXMpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2tpbGxzTGlzdCA9IHJlcz8uZWxlbWVudHM7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogJ0dFVCcsIHBheWxvYWQ6IHRoaXMuYXNzZXNzbWVudElkIH1cclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHRyYWNrQnlTZWN0aW9uSWQoaW5kZXg6IG51bWJlciwgc2VjdGlvbjogYW55KSB7XHJcbiAgICByZXR1cm4gc2VjdGlvbj8uaWQgIT0gbnVsbCA/ICdzJyArIHNlY3Rpb24uaWQgOiAnaScgKyBpbmRleDtcclxuICB9XHJcblxyXG4gIHRyYWNrQnlTZWN0aW9uUXVlc3Rpb24oaW5kZXg6IG51bWJlciwgc3E6IGFueSkge1xyXG4gICAgaWYgKHNxPy5xdWVzdGlvbklkICE9IG51bGwpIHJldHVybiAncScgKyBzcS5xdWVzdGlvbklkO1xyXG4gICAgaWYgKHNxPy5pZCAhPSBudWxsKSByZXR1cm4gJ3MnICsgc3EuaWQ7XHJcbiAgICByZXR1cm4gJ2knICsgaW5kZXg7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNvbGxlY3RFeGlzdGluZ1F1ZXN0aW9uSWRzKCk6IFNldDxudW1iZXI+IHtcclxuICAgIGNvbnN0IGlkcyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xyXG4gICAgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdD8uZm9yRWFjaChzZWN0aW9uID0+IHtcclxuICAgICAgaWYgKHNlY3Rpb24uaXNBY3RpdmUgPT09IGZhbHNlKSByZXR1cm47XHJcbiAgICAgIHNlY3Rpb24uc2VjdGlvblF1ZXN0aW9uc0xpc3Q/LmZvckVhY2goc3EgPT4ge1xyXG4gICAgICAgIGlmIChzcS5pc0FjdGl2ZSA9PT0gZmFsc2UpIHJldHVybjtcclxuICAgICAgICBjb25zdCBxSWQgPSBzcS5xdWVzdGlvbklkIHx8IHNxLnF1ZXN0aW9uPy5pZDtcclxuICAgICAgICBpZiAocUlkKSBpZHMuYWRkKHFJZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gaWRzO1xyXG4gIH1cclxuXHJcbiAgb3BlblF1ZXN0aW9uQmFua1BpY2tlcihzZWN0aW9uPzogUXVlc3Rpb25QYXBlclNlY3Rpb24pOiB2b2lkIHtcclxuICAgIGNvbnN0IGV4aXN0aW5nUXVlc3Rpb25JZHMgPSB0aGlzLmNvbGxlY3RFeGlzdGluZ1F1ZXN0aW9uSWRzKCk7XHJcbiAgICBjb25zdCBjb25maWcgPSB0aGlzLnF1ZXN0aW9uQmFua0NvbmZpZyB8fCB7XHJcbiAgICAgIGRvbWFpbjogdGhpcy5kZWZhdWx0QXNzZXNzbWVudERUTz8uZG9tYWluLFxyXG4gICAgICB0ZW5hbnQ6IHRoaXMuZGVmYXVsdEFzc2Vzc21lbnREVE8/LnRlbmFudFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBkaWFsb2dSZWYgPSB0aGlzLmRpYWxvZy5vcGVuKFF1ZXN0aW9uQmFua1BpY2tlckNvbXBvbmVudCwge1xyXG4gICAgICBhdXRvRm9jdXM6IGZhbHNlLFxyXG4gICAgICBwb3NpdGlvbjogeyByaWdodDogJzAnIH0sXHJcbiAgICAgIG1heFdpZHRoOiAnMTAwJScsXHJcbiAgICAgIHdpZHRoOiAnNTVyZW0nLFxyXG4gICAgICBoZWlnaHQ6ICcxMDB2aCcsXHJcbiAgICAgIHBhbmVsQ2xhc3M6IFsnYXNzZXNzbWVudC1kaWFsb2cnLCAnYXNzZXNzbWVudC1kaWFsb2ctc2xpZGVyLWFuaW1hdGlvbiddLFxyXG4gICAgICBoYXNCYWNrZHJvcDogdHJ1ZSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIHF1ZXN0aW9uQmFua0NvbmZpZzogY29uZmlnLFxyXG4gICAgICAgIGV4aXN0aW5nUXVlc3Rpb25JZHMsXHJcbiAgICAgICAgbGFiZWxDb25maWc6IHRoaXMubGFiZWxDb25maWcsXHJcbiAgICAgICAgaW1hZ2VDb25maWc6IHRoaXMuaW1hZ2VDb25maWcsXHJcbiAgICAgICAgcXVlc3Rpb25UeXBlczogdGhpcy5xdWVzdGlvblR5cGVzLFxyXG4gICAgICAgIHRhcmdldFNlY3Rpb25OYW1lOiBzZWN0aW9uPy5xcHNOYW1lPy5bMF0/LnRleHRcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgZGlhbG9nUmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKChzZWxlY3RlZFF1ZXN0aW9uczogQXNzZXNzbWVudFF1ZXN0aW9uW10pID0+IHtcclxuICAgICAgaWYgKHNlbGVjdGVkUXVlc3Rpb25zPy5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmltcG9ydFF1ZXN0aW9uc1RvU2VjdGlvbihzZWN0aW9uLCBzZWxlY3RlZFF1ZXN0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbXBvcnRRdWVzdGlvbnNUb1NlY3Rpb24oXHJcbiAgICBzZWN0aW9uOiBRdWVzdGlvblBhcGVyU2VjdGlvbiB8IHVuZGVmaW5lZCxcclxuICAgIHF1ZXN0aW9uczogQXNzZXNzbWVudFF1ZXN0aW9uW11cclxuICApOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEpIHtcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEgPSB7IGlkOiAwLCBxdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q6IFtdIH07XHJcbiAgICB9XHJcbiAgICBpZiAoIXRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdCkge1xyXG4gICAgICB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YS5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3QgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXNlY3Rpb24pIHtcclxuICAgICAgY29uc3QgbGlzdCA9IHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdDtcclxuICAgICAgY29uc3QgbGFzdE9yZGVyID0gbGlzdC5sZW5ndGggPyAobGlzdFtsaXN0Lmxlbmd0aCAtIDFdLm9yZGVyTm8gfHwgMCkgOiAwO1xyXG4gICAgICBzZWN0aW9uID0gdGhpcy5hc3Nlc3NtZW50QnVpbGRlclNlcnZpY2UuY3JlYXRlTmV3U2VjdGlvbihsYXN0T3JkZXIgKyAxKTtcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0LnB1c2goc2VjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFzZWN0aW9uLnNlY3Rpb25RdWVzdGlvbnNMaXN0KSB7XHJcbiAgICAgIHNlY3Rpb24uc2VjdGlvblF1ZXN0aW9uc0xpc3QgPSBbXTtcclxuICAgIH1cclxuXHJcbiAgICBxdWVzdGlvbnMuZm9yRWFjaChxdWVzdGlvbiA9PiB7XHJcbiAgICAgIGNvbnN0IGNsZWFuUXVlc3Rpb24gPSByZW1vdmVLZXlEZWVwKHF1ZXN0aW9uLCAndXVpZCcpO1xyXG4gICAgICBpZiAoY2xlYW5RdWVzdGlvbi5pZCkge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25CYW5rW2NsZWFuUXVlc3Rpb24uaWRdID0gY2xlYW5RdWVzdGlvbjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzZWN0aW9uUXVlc3Rpb24gPSB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5nZW5lcmF0ZVNlY3Rpb25RdWVzdGlvbihjbGVhblF1ZXN0aW9uKTtcclxuICAgICAgc2VjdGlvblF1ZXN0aW9uLm9yZGVyTm8gPSAoc2VjdGlvbiEuc2VjdGlvblF1ZXN0aW9uc0xpc3Q/Lmxlbmd0aCB8fCAwKSArIDE7XHJcbiAgICAgIHNlY3Rpb24hLnNlY3Rpb25RdWVzdGlvbnNMaXN0Py5wdXNoKHNlY3Rpb25RdWVzdGlvbik7XHJcbiAgICB9KTtcclxuXHJcbiAgICBjb25zdCBzdWNjZXNzTXNnID0gdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULlFVRVNUSU9OU19JTVBPUlRFRF9TVUNDRVNTJ10gfHwgJ1F1ZXN0aW9ucyBpbXBvcnRlZCBzdWNjZXNzZnVsbHknO1xyXG5cclxuICAgIGlmICh0aGlzLmFzc2Vzc21lbnRJZCkge1xyXG4gICAgICB0aGlzLnBhdGNoQXNzZXNzbWVudEFuZFF1ZXN0aW9uUGFwZXIoc3VjY2Vzc01zZyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNyZWF0ZUFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyT25JbXBvcnQoc3VjY2Vzc01zZyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNyZWF0ZUFzc2Vzc21lbnRBbmRRdWVzdGlvblBhcGVyT25JbXBvcnQoc3VjY2Vzc01lc3NhZ2U/OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIHF1ZXN0aW9uUGFwZXI6IHRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLmdlbmVyYXRlUXVlc3Rpb25QYXBlckRUTyh0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YSwgdGhpcy5xdWVzdGlvbkJhbmspLFxyXG4gICAgICBhc3Nlc3NtZW50OiB0aGlzLmFzc2Vzc21lbnRCdWlsZGVyU2VydmljZS5nZW5lcmF0ZUFzc2Vzc21lbnREVE8odGhpcy5hc3Nlc3NtZW50SWQsIHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLCB0aGlzLmJ1aWxkUHJvY3RvcmluZ0NvbmZpZ3MoKSksXHJcbiAgICAgIC4uLnRoaXMuYXNzZXNzbWVudEJ1aWxkZXJTZXJ2aWNlLmJ1aWxkSW5zdGFuY2VQYXRjaCh0aGlzLnNob3dUaW1lSW5wdXQsIHRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWQsIHRoaXMuZHVyYXRpb25TZWNvbmRzKVxyXG4gICAgfTtcclxuICAgIHRoaXMuYXNzZXNzbWVudE1ha2VyU2VydmljZS5jcmVhdGVBc3Nlc3NtZW50QW5kUXVlc3Rpb25QYXBlcihwYXlsb2FkKS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzPy5hc3Nlc3NtZW50Py5pZCkge1xyXG4gICAgICAgICAgdGhpcy5hc3Nlc3NtZW50SWQgPSByZXMuYXNzZXNzbWVudC5pZDtcclxuICAgICAgICAgIHRoaXMuYXNzZXNzbWVudElkQ2hhbmdlLmVtaXQodGhpcy5hc3Nlc3NtZW50SWQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnF1ZXN0aW9uQmFuayA9IHtcclxuICAgICAgICAgIC4uLnRoaXMucXVlc3Rpb25CYW5rLFxyXG4gICAgICAgICAgLi4uKHJlcz8ucXVlc3Rpb25NYXAgfHwge30pXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YShyZXM/LnF1ZXN0aW9uUGFwZXIpO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVRdWVzdGlvbkJhbmsoKTtcclxuICAgICAgICB0aGlzLmNoZWNrQXNzZXNzbWVudFF1ZXN0aW9uc0xvY2tlZCgpO1xyXG4gICAgICAgIGlmIChzdWNjZXNzTWVzc2FnZSkge1xyXG4gICAgICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHN1Y2Nlc3NNZXNzYWdlLCB0eXBlOiAnc3VjY2VzcycgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkVSUk9SX0RFRkFVTFQnXSB8fCAnRmFpbGVkIHRvIHNhdmUgaW1wb3J0ZWQgcXVlc3Rpb25zJywgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgKm5nSWY9XCJjb25maWdzTG9hZGVkICYmICFzaG93TG9hZGVyOyBlbHNlIGxvYWRlclwiIGNsYXNzPVwiY29sLTEyIGgtMTAwXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGgtMTAwIHB5LTRcIiBbY2xhc3MuaGVpZ2h0LXdpdGhvdXQtZm9vdGVyXT1cInNob3dGb290ZXJcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd1Byb2N0b3JpbmdUb2dnbGUgfHwgc2hvd1RpbWVJbnB1dFwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWVuZCBmbGV4LXdyYXAgZ2FwLTQgbWItM1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dUaW1lSW5wdXRcIiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZHVyYXRpb25JbnB1dFwiIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW4gbWItMCBjdXJzb3ItcG9pbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkRVUkFUSU9OJ10gfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgaWQ9XCJkdXJhdGlvbklucHV0XCIgbWluPVwiMVwiIFsobmdNb2RlbCldPVwiZHVyYXRpb25NaW51dGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwiYmxvY2tOZWdhdGl2ZUtleXMoJGV2ZW50KVwiIChuZ01vZGVsQ2hhbmdlKT1cImR1cmF0aW9uTWludXRlcyA9ICRldmVudCA+IDAgPyAkZXZlbnQgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xM1wiIHN0eWxlPVwid2lkdGg6IDRyZW07XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMyBhc3Nlc3NtZW50LXRleHQtZ3JleS1zZXZlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1JTlVURVMnXSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInNob3dQcm9jdG9yaW5nVG9nZ2xlXCIgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInByb2N0b3JpbmdUb2dnbGVcIiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTMgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuIG1iLTAgY3Vyc29yLXBvaW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5FTkFCTEVfUFJPQ1RPUklORyddIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLXN3aXRjaCBtLTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIGlkPVwicHJvY3RvcmluZ1RvZ2dsZVwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInByb2N0b3JpbmdFbmFibGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxtYXQtYWNjb3JkaW9uIG11bHRpPVwidHJ1ZVwiIGNka0Ryb3BMaXN0IChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcFNlY3Rpb24oJGV2ZW50KVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwgW2hpZGVUb2dnbGVdPVwidHJ1ZVwiICNwYW5lbD1cIm1hdEV4cGFuc2lvblBhbmVsXCIgW2V4cGFuZGVkXT1cInNlY3Rpb24uaXNFeHBhbmRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG9wZW5lZCk9XCJzZWN0aW9uLmlzRXhwYW5kZWQgPSB0cnVlXCIgKGNsb3NlZCk9XCJzZWN0aW9uLmlzRXhwYW5kZWQgPSBmYWxzZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYi00IGJvcmRlci0wIGFzc2Vzc21lbnQtcGFuZWwgc2hhZG93LW5vbmUgYmctdHJhbnNwYXJlbnRcIiBjZGtEcmFnXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q7IGxldCBzZWN0aW9uSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVNlY3Rpb25JZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gU2VjdGlvbiBIZWFkZXIgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyIGNsYXNzPVwiY29sLTEyIHAtMCBoLWF1dG8gYmctdHJhbnNwYXJlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBjb2wtMTIgYWxpZ24taXRlbXMtY2VudGVyIGdhcC1tZC0zIGdhcC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGNka0RyYWdIYW5kbGUgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uRFJBR19EUk9QJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLWdyYWJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9kcmFnLWRyb3Auc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgZmxleC1ncm93LTEganVzdGlmeS1jb250ZW50LWJldHdlZW4gcC0zIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC1ib3JkZXItdHdvIGFzc2Vzc21lbnQtYmctd2hpdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5ib3JkZXItdHJhbnNwYXJlbnRdPVwic2VjdGlvbi5pc0V4cGFuZGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgbWItMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgW2lkXT1cIidzZWN0aW9uTmFtZUlucHV0XycgKyBzZWN0aW9uSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLW1kLTExIGNvbC0xMCBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTggYm9yZGVyLTAgb3V0bGluZS0wIGJnLXRyYW5zcGFyZW50IHAtMCBpbnB1dC1mb2N1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWN0aW9uLnFwc05hbWVbMF0udGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc2l6ZV09XCIoc2VjdGlvbi5xcHNOYW1lWzBdLnRleHQ/Lmxlbmd0aCB8fCAxKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5FRElUJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYWN0aW9uLWljb24gY3Vyc29yLXBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmb2N1c1NlY3Rpb25JbnB1dChzZWN0aW9uSW5kZXgsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9wZW5jaWwuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2VjdGlvbj8uc2VjdGlvblF1ZXN0aW9uc0xpc3Q/Lmxlbmd0aCB8fCAwfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5RVUVTVElPTlMnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtbWQtNCBnYXAtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkFSUk9XX0RPV05fQkxBQ0snXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJwYW5lbC5leHBhbmRlZCA/ICdjaGFuZ2UtZGlyZWN0aW9uJyA6ICdjaGFuZ2UtZGlyZWN0aW9uLXJldmVyc2UnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9hcnJvdy1kb3duLWJsYWNrLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBbbWF0TWVudVRyaWdnZXJGb3JdPVwibWVudVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJib3JkZXItMCBiZy10cmFuc3BhcmVudCBweS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkFDVElPTl9ET1RTJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9hY3Rpb24tZG90cy5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW1lbnUgI21lbnU9XCJtYXRNZW51XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0LW1lbnUgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LWJvcmRlci1ncmV5LWZvdXItMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWRkSW5zdHJ1Y3Rpb24oc2VjdGlvbilcIiBtYXQtbWVudS1pdGVtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJweS0yIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BRERfSU5TVFJVQ1RJT05TJ119fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJkdXBsaWNhdGVTZWN0aW9uKHNlY3Rpb24uaWQpXCIgbWF0LW1lbnUtaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHktMiBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuRFVQTElDQVRFJ119fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiKGFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YT8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0Py5sZW5ndGggPz8gMCkgPiBtaW5pbXVtUmVxdWlyZWRTZWN0aW9uc1wiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVTZWN0aW9uKHNlY3Rpb24pXCIgbWF0LW1lbnUtaXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHktMiBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5ERUxFVEUnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtbWVudT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1leHBhbnNpb24tcGFuZWwtaGVhZGVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFF1ZXN0aW9ucyBpbnNpZGUgc2VjdGlvbiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNka0Ryb3BMaXN0IFtjZGtEcm9wTGlzdERhdGFdPVwic2VjdGlvbi5zZWN0aW9uUXVlc3Rpb25zTGlzdCB8fCBbXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcFF1ZXN0aW9uKCRldmVudClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjZGtEcmFnICpuZ0Zvcj1cImxldCBzZWN0aW9uUXVlc3Rpb24gb2Ygc2VjdGlvbi5zZWN0aW9uUXVlc3Rpb25zTGlzdDsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeVNlY3Rpb25RdWVzdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1zdGFydCBnYXAtbWQtMyBnYXAtMiBteS0zIG92ZXJmbG93LWhpZGRlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBjZGtEcmFnSGFuZGxlIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkRSQUdfRFJPUCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1ncmFiIG10LTRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9kcmFnLWRyb3Auc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIHAtMyBhc3Nlc3NtZW50LWJvcmRlci10d28gYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBxdWVzdGlvbi1jb250YWluZXIgYXNzZXNzbWVudC1iZy13aGl0ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tZGV0YWlscyBbc2VjdGlvblF1ZXN0aW9uXT1cInNlY3Rpb25RdWVzdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJnZXRRdWVzdGlvbkZyb21CYW5rKHNlY3Rpb25RdWVzdGlvbi5xdWVzdGlvbklkKSB8fCB7fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbkJhbmtdPVwicXVlc3Rpb25CYW5rXCIgW2ltYWdlQ29uZmlnXT1cImltYWdlQ29uZmlnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsQ29uZmlnXT1cImxhYmVsQ29uZmlnXCIgW2FsbG93RGVsZXRlXT1cIihzZWN0aW9uPy5zZWN0aW9uUXVlc3Rpb25zTGlzdD8ubGVuZ3RoID8/IDApID4gMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpc0xvY2tlZF09XCJpc1F1ZXN0aW9uTG9ja2VkKHNlY3Rpb25RdWVzdGlvbj8ucXVlc3Rpb25JZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZWRpdFF1ZXN0aW9uKT1cImNyZWF0ZUVkaXRRdWVzdGlvbihzZWN0aW9uLCAkZXZlbnQ/LnF1ZXN0aW9uSWQsICRldmVudD8uaXNDaGlsZFF1ZXN0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkdXBsaWNhdGVRdWVzdGlvbik9XCJkdXBsaWNhdGVRdWVzdGlvbihzZWN0aW9uLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZVBhcmVudFF1ZXN0aW9uKT1cImRlbGV0ZVBhcmVudFF1ZXN0aW9uKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVsZXRlQ2hpbGRRdWVzdGlvbik9XCJkZWxldGVDaGlsZFF1ZXN0aW9uKCRldmVudC5vcHRpb24sICRldmVudC5jaGlsZFF1ZXN0aW9uSWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9saWItcXVlc3Rpb24tZGV0YWlscz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBwcy00IGJvcmRlci1ib3R0b20gcGItNCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbmFibGVJbXBvcnRGcm9tUXVlc3Rpb25CYW5rOyBlbHNlIHNpbmdsZUFkZFF1ZXN0aW9uQnRuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmUgZC1pbmxpbmUtYmxvY2tcIiBbc3R5bGUuei1pbmRleF09XCJhY3RpdmVEcm9wZG93bklkID09PSAoJ3F1ZXN0aW9uXycgKyBzZWN0aW9uLmlkKSA/IDEwMDUgOiAnYXV0bydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJ0b2dnbGVEcm9wZG93bigncXVlc3Rpb25fJyArIHNlY3Rpb24uaWQsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtem9vbS1hbmltYXRpb24gYXNzZXNzbWVudC1idXR0b24tcGFkZGluZyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTIgYXNzZXNzbWVudC10ZXh0LXByaW1hcnktb25lIGFzc2Vzc21lbnQtYmctcGFsZXR0ZS1FREYzRkQgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEyIG91dGxpbmUtMCBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG10LTMgYm9yZGVyLUFEQzlGNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLlBMVVNfUFJJTUFSWSddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9wbHVzLXByaW1hcnkuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQUREX1FVRVNUSU9OJ10gfHwgJ0FkZCBRdWVzdGlvbid9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3RpdmVEcm9wZG93bklkID09PSAncXVlc3Rpb25fJyArIHNlY3Rpb24uaWRcIiAoY2xpY2spPVwiY2xvc2VBbGxEcm9wZG93bnMoKVwiIGNsYXNzPVwicG9zaXRpb24tZml4ZWQgdG9wLTAgc3RhcnQtMCB3LTEwMCBoLTEwMCBiZy10cmFuc3BhcmVudFwiIHN0eWxlPVwiei1pbmRleDogMTAwMDtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aXZlRHJvcGRvd25JZCA9PT0gJ3F1ZXN0aW9uXycgKyBzZWN0aW9uLmlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1tZW51IGFzc2Vzc21lbnQtZHJvcGRvd24tbWVudSBzaG93IHNoYWRvdyBib3JkZXIgcm91bmRlZC0zIHAtMCBvdmVyZmxvdy1oaWRkZW4gcG9zaXRpb24tYWJzb2x1dGUgc3RhcnQtMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRyb3Bkb3duUGxhY2VtZW50TWFwWydxdWVzdGlvbl8nICsgc2VjdGlvbi5pZF0gPT09ICd0b3AnID8gJ2JvdHRvbS0xMDAgbWItMiBhc3Nlc3NtZW50LWJsb29tLXVwJyA6ICd0b3AtMTAwIG10LTIgYXNzZXNzbWVudC1ibG9vbS1kb3duJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiAxNnJlbTsgei1pbmRleDogMTAxMDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY3JlYXRlRWRpdFF1ZXN0aW9uKHNlY3Rpb24pOyBjbG9zZUFsbERyb3Bkb3ducygpXCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcHktMyBweC0zIGZ3LW1lZGl1bSBib3JkZXItYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLlBMVVNfUFJJTUFSWSddXCIgc3R5bGU9XCJ3aWR0aDogMXJlbTsgaGVpZ2h0OiAxcmVtO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL3BsdXMtcHJpbWFyeS5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5DUkVBVEVfTkVXX1FVRVNUSU9OJ10gfHwgJ0NyZWF0ZSBOZXcgUXVlc3Rpb24nfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9wZW5RdWVzdGlvbkJhbmtQaWNrZXIoc2VjdGlvbik7IGNsb3NlQWxsRHJvcGRvd25zKClcIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBweS0zIHB4LTMgZnctbWVkaXVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkZJTEVfSU1QT1JUJ10gfHwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2ZpbGUtaW1wb3J0LnN2ZydcIiBzdHlsZT1cIndpZHRoOiAxcmVtOyBoZWlnaHQ6IDFyZW07XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvZmlsZS1pbXBvcnQuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuSU1QT1JUX0ZST01fUVVFU1RJT05fQkFOSyddIHx8ICdJbXBvcnQgZnJvbSBRdWVzdGlvbiBCYW5rJ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZUFkZFF1ZXN0aW9uQnRuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY3JlYXRlRWRpdFF1ZXN0aW9uKHNlY3Rpb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtem9vbS1hbmltYXRpb24gYXNzZXNzbWVudC1idXR0b24tcGFkZGluZyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTIgYXNzZXNzbWVudC10ZXh0LXByaW1hcnktb25lIGFzc2Vzc21lbnQtYmctcGFsZXR0ZS1FREYzRkQgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEyIG91dGxpbmUtMCBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG10LTMgYm9yZGVyLUFEQzlGNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uUExVU19QUklNQVJZJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvcGx1cy1wcmltYXJ5LnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQUREX0FfUVVFU1RJT04nXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cclxuICAgICAgICAgICAgPC9tYXQtYWNjb3JkaW9uPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBtcy00XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZW5hYmxlSW1wb3J0RnJvbVF1ZXN0aW9uQmFuazsgZWxzZSBzaW5nbGVBZGRTZWN0aW9uQnRuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIGQtaW5saW5lLWJsb2NrXCIgW3N0eWxlLnotaW5kZXhdPVwiYWN0aXZlRHJvcGRvd25JZCA9PT0gJ2FkZF9zZWN0aW9uJyA/IDEwMDUgOiAnYXV0bydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlRHJvcGRvd24oJ2FkZF9zZWN0aW9uJywgJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtem9vbS1hbmltYXRpb24gYXNzZXNzbWVudC1idXR0b24tcGFkZGluZyBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTIgYXNzZXNzbWVudC10ZXh0LXByaW1hcnktb25lIGFzc2Vzc21lbnQtYmctcGFsZXR0ZS1FREYzRkQgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEyIG91dGxpbmUtMCBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG10LTMgYm9yZGVyLUFEQzlGNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5BRERfU0VDVElPTiddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvYWRkLXNlY3Rpb24uc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkFERF9BX1NFQ1RJT04nXX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aXZlRHJvcGRvd25JZCA9PT0gJ2FkZF9zZWN0aW9uJ1wiIChjbGljayk9XCJjbG9zZUFsbERyb3Bkb3ducygpXCIgY2xhc3M9XCJwb3NpdGlvbi1maXhlZCB0b3AtMCBzdGFydC0wIHctMTAwIGgtMTAwIGJnLXRyYW5zcGFyZW50XCIgc3R5bGU9XCJ6LWluZGV4OiAxMDAwO1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYWN0aXZlRHJvcGRvd25JZCA9PT0gJ2FkZF9zZWN0aW9uJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnUgYXNzZXNzbWVudC1kcm9wZG93bi1tZW51IHNob3cgc2hhZG93IGJvcmRlciByb3VuZGVkLTMgcC0wIG92ZXJmbG93LWhpZGRlbiBwb3NpdGlvbi1hYnNvbHV0ZSBzdGFydC0wXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRyb3Bkb3duUGxhY2VtZW50TWFwWydhZGRfc2VjdGlvbiddID09PSAndG9wJyA/ICdib3R0b20tMTAwIG1iLTIgYXNzZXNzbWVudC1ibG9vbS11cCcgOiAndG9wLTEwMCBtdC0yIGFzc2Vzc21lbnQtYmxvb20tZG93bidcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJtaW4td2lkdGg6IDE2cmVtOyB6LWluZGV4OiAxMDEwO1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiY3JlYXRlRWRpdFF1ZXN0aW9uKCk7IGNsb3NlQWxsRHJvcGRvd25zKClcIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBweS0zIHB4LTMgZnctbWVkaXVtIGJvcmRlci1ib3R0b21cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIFtzcmNdPVwiaW1hZ2VDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5JQ09OLkFERF9TRUNUSU9OJ11cIiBzdHlsZT1cIndpZHRoOiAxcmVtOyBoZWlnaHQ6IDFyZW07XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2FkZC1zZWN0aW9uLnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQ1JFQVRFX05FV19RVUVTVElPTiddIHx8ICdDcmVhdGUgTmV3IFF1ZXN0aW9uJ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJvcGVuUXVlc3Rpb25CYW5rUGlja2VyKCk7IGNsb3NlQWxsRHJvcGRvd25zKClcIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBweS0zIHB4LTMgZnctbWVkaXVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5GSUxFX0lNUE9SVCddIHx8ICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9maWxlLWltcG9ydC5zdmcnXCIgc3R5bGU9XCJ3aWR0aDogMXJlbTsgaGVpZ2h0OiAxcmVtO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9maWxlLWltcG9ydC5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLklNUE9SVF9GUk9NX1FVRVNUSU9OX0JBTksnXSB8fCAnSW1wb3J0IGZyb20gUXVlc3Rpb24gQmFuayd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaW5nbGVBZGRTZWN0aW9uQnRuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNyZWF0ZUVkaXRRdWVzdGlvbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmcgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0yIGFzc2Vzc21lbnQtdGV4dC1wcmltYXJ5LW9uZSBhc3Nlc3NtZW50LWJnLXBhbGV0dGUtRURGM0ZEIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMiBvdXRsaW5lLTAgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBtdC0zIGJvcmRlci1BREM5RjZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5BRERfU0VDVElPTiddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9hZGQtc2VjdGlvbi5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5BRERfQV9TRUNUSU9OJ119fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cIiFhc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdD8ubGVuZ3RoXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJoLTEwMCBkLWZsZXggZmxleC1jb2x1bW4gYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgZ2FwLTNcIj5cclxuICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5OT19RVUVTVElPTlMnXVwiIGNsYXNzPVwiY29sLXNtLWF1dG8gY29sLTZcIlxyXG4gICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL25vLXF1ZXN0aW9ucy5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0xIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMThcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQUREX0NVU1RPTV9RVUVTVElPTlMnXX19PC9wPlxyXG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQUREX1FVRVNUSU9OX0RFU0MnXX19PC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJlbmFibGVJbXBvcnRGcm9tUXVlc3Rpb25CYW5rOyBlbHNlIHNpbmdsZUVtcHR5QWRkQnRuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBvc2l0aW9uLXJlbGF0aXZlIGQtaW5saW5lLWJsb2NrXCIgW3N0eWxlLnotaW5kZXhdPVwiYWN0aXZlRHJvcGRvd25JZCA9PT0gJ2VtcHR5X2FkZCcgPyAxMDA1IDogJ2F1dG8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duKCdlbXB0eV9hZGQnLCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC1idXR0b24tcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgYXNzZXNzbWVudC1iZy1wYWxldHRlLUVERjNGRCBhc3Nlc3NtZW50LXRleHQtcHJpbWFyeS1vbmUgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEyIGJvcmRlci0wIGFzc2Vzc21lbnQtem9vbS1hbmltYXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uUExVU19QUklNQVJZJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9wbHVzLXByaW1hcnkuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkFERF9BX1FVRVNUSU9OJ119fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImFjdGl2ZURyb3Bkb3duSWQgPT09ICdlbXB0eV9hZGQnXCIgKGNsaWNrKT1cImNsb3NlQWxsRHJvcGRvd25zKClcIiBjbGFzcz1cInBvc2l0aW9uLWZpeGVkIHRvcC0wIHN0YXJ0LTAgdy0xMDAgaC0xMDAgYmctdHJhbnNwYXJlbnRcIiBzdHlsZT1cInotaW5kZXg6IDEwMDA7XCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJhY3RpdmVEcm9wZG93bklkID09PSAnZW1wdHlfYWRkJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLW1lbnUgYXNzZXNzbWVudC1kcm9wZG93bi1tZW51IHNob3cgc2hhZG93IGJvcmRlciByb3VuZGVkLTMgcC0wIG92ZXJmbG93LWhpZGRlbiBwb3NpdGlvbi1hYnNvbHV0ZSBzdGFydC0wXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRyb3Bkb3duUGxhY2VtZW50TWFwWydlbXB0eV9hZGQnXSA9PT0gJ3RvcCcgPyAnYm90dG9tLTEwMCBtYi0yIGFzc2Vzc21lbnQtYmxvb20tdXAnIDogJ3RvcC0xMDAgbXQtMiBhc3Nlc3NtZW50LWJsb29tLWRvd24nXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwibWluLXdpZHRoOiAxNnJlbTsgei1pbmRleDogMTAxMDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cImNyZWF0ZUVkaXRRdWVzdGlvbigpOyBjbG9zZUFsbERyb3Bkb3ducygpXCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgcHktMyBweC0zIGZ3LW1lZGl1bSBib3JkZXItYm90dG9tXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5QTFVTX1BSSU1BUlknXVwiIHN0eWxlPVwid2lkdGg6IDFyZW07IGhlaWdodDogMXJlbTtcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvcGx1cy1wcmltYXJ5LnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQ1JFQVRFX05FV19RVUVTVElPTiddIHx8ICdDcmVhdGUgTmV3IFF1ZXN0aW9uJ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJvcGVuUXVlc3Rpb25CYW5rUGlja2VyKCk7IGNsb3NlQWxsRHJvcGRvd25zKClcIiBjbGFzcz1cImRyb3Bkb3duLWl0ZW0gZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBweS0zIHB4LTMgZnctbWVkaXVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5GSUxFX0lNUE9SVCddIHx8ICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9maWxlLWltcG9ydC5zdmcnXCIgc3R5bGU9XCJ3aWR0aDogMXJlbTsgaGVpZ2h0OiAxcmVtO1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9maWxlLWltcG9ydC5zdmcnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLklNUE9SVF9GUk9NX1FVRVNUSU9OX0JBTksnXSB8fCAnSW1wb3J0IGZyb20gUXVlc3Rpb24gQmFuayd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzaW5nbGVFbXB0eUFkZEJ0bj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJjcmVhdGVFZGl0UXVlc3Rpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC1idXR0b24tcGFkZGluZyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgYXNzZXNzbWVudC1iZy1wYWxldHRlLUVERjNGRCBhc3Nlc3NtZW50LXRleHQtcHJpbWFyeS1vbmUgYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTEyIGJvcmRlci0wIGFzc2Vzc21lbnQtem9vbS1hbmltYXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBbc3JjXT1cImltYWdlQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuSUNPTi5QTFVTX1BSSU1BUlknXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IpPVwiaW1hZ2VFcnJvckhhbmRsZXIoJGV2ZW50LCAnYXNzZXRzL2NvbW1vbnMtYXNzZXNzbWVudC9pbWFnZXMvcGx1cy1wcmltYXJ5LnN2ZycpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkFERF9BX1FVRVNUSU9OJ119fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJzaG93Rm9vdGVyXCJcclxuICAgICAgICBjbGFzcz1cImJnLXdoaXRlIHAtMyBwb3NpdGlvbi1zdGlja3kgYm90dG9tLTAgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtZW5kIGJvcmRlci10b3AgZ2FwLTNcIj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJkaXNjYXJkQ2hhbmdlcygpXCIgW2Rpc2FibGVkXT1cImlzU3VibWl0dGluZ1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC16b29tLWFuaW1hdGlvbiBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmctbGFyZ2UgYXNzZXNzbWVudC1idG4tcHJpbWFyeS10cmFuc3BhcmVudCBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTNcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuRElTQ0FSRCddfX08L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJmaW5hbFN1Ym1pdCgpXCIgW2Rpc2FibGVkXT1cImlzU3VibWl0dGluZ1wiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC16b29tLWFuaW1hdGlvbiBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmctbGFyZ2UgYXNzZXNzbWVudC1idG4tcHJpbWFyeSBhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTMgcG9zaXRpb24tcmVsYXRpdmVcIj5cclxuICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwieydvcGFjaXR5LTAnOiBpc1N1Ym1pdHRpbmd9XCI+XHJcbiAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuUFVCTElTSCddfX1cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8bWF0LXNwaW5uZXIgKm5nSWY9XCJpc1N1Ym1pdHRpbmdcIiBbZGlhbWV0ZXJdPVwiMjBcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSB0b3AtNTAgc3RhcnQtNTAgdHJhbnNsYXRlLW1pZGRsZSBhc3Nlc3NtZW50LXNwaW5uZXItd2hpdGVcIj48L21hdC1zcGlubmVyPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48bmctdGVtcGxhdGUgI2xvYWRlcj5cclxuICAgIDxkaXYgY2xhc3M9XCJoLTEwMCBjb2wtMTIgZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHB5LTVcIj5cclxuICAgICAgICA8bWF0LXNwaW5uZXIgZGlhbWV0ZXI9XCI2MFwiIGNsYXNzPVwiYXNzZXNzbWVudC1zcGlubmVyLXByaW1hcnlcIj48L21hdC1zcGlubmVyPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
|