commons-assessment 12.0.21 → 12.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/bundles/commons-assessment.umd.js +161 -56
- package/bundles/commons-assessment.umd.js.map +1 -1
- package/esm2015/lib/modules/assessment-maker/assessment-maker.component.js +4 -4
- 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 +1 -1
- package/esm2015/lib/modules/assessment-maker/components/question-details/question-details.component.js +1 -1
- package/esm2015/lib/modules/assessment-maker/services/assessment-maker.service.js +3 -3
- package/esm2015/lib/modules/assessment-taker/assessment-taker.component.js +21 -3
- 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 +49 -2
- package/esm2015/lib/modules/assessment-taker/components/question-type-objective/question-type-objective.component.js +42 -2
- 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 +3 -3
- package/esm2015/lib/shared/components/skill-allocation/skill-allocation.component.js +1 -1
- package/esm2015/lib/shared/controllers.js +3 -3
- package/fesm2015/commons-assessment.js +135 -30
- package/fesm2015/commons-assessment.js.map +1 -1
- package/lib/modules/assessment-maker/services/assessment-maker.service.d.ts +1 -1
- package/lib/modules/assessment-taker/assessment-taker.component.d.ts +3 -1
- package/lib/modules/assessment-taker/components/question-type-multiselect/question-type-multiselect.component.d.ts +10 -1
- package/lib/modules/assessment-taker/components/question-type-objective/question-type-objective.component.d.ts +10 -1
- package/lib/modules/assessment-taker/services/assessment-taker.service.d.ts +1 -1
- package/package.json +1 -1
- package/src/lib/assets/images/check-green.svg +3 -0
- package/src/lib/assets/images/cross-red.svg +3 -0
- package/src/lib/assets/json/imageConfig.json +3 -1
- package/src/lib/assets/theme/_theme.global.scss +1 -0
- package/src/lib/assets/theme/styles.global.scss +16 -0
|
@@ -46,6 +46,7 @@ export class AssessmentTakerComponent {
|
|
|
46
46
|
this.markAsCompleted = true;
|
|
47
47
|
this.sectionWiseScore = {};
|
|
48
48
|
this.showOverallRemarks = false;
|
|
49
|
+
this.showCorrectAnswers = false;
|
|
49
50
|
this.snackbarMessage = new EventEmitter();
|
|
50
51
|
this.submitAssessment = new EventEmitter();
|
|
51
52
|
this.stepChanged = new EventEmitter();
|
|
@@ -100,7 +101,7 @@ export class AssessmentTakerComponent {
|
|
|
100
101
|
loadAssessmentData() {
|
|
101
102
|
var _a, _b, _c, _d;
|
|
102
103
|
const apiCalls = Object.assign(Object.assign({}, (!((_b = (_a = this.assessmentContext) === null || _a === void 0 ? void 0 : _a.assessment) === null || _b === void 0 ? void 0 : _b.id) && {
|
|
103
|
-
assessmentData: this.assessmentTakerService.getAssessmentContextById(this.assessmentId)
|
|
104
|
+
assessmentData: this.assessmentTakerService.getAssessmentContextById({ assessmentId: this.assessmentId })
|
|
104
105
|
})), (((_c = this.assesseeData) === null || _c === void 0 ? void 0 : _c.id) && !((_d = this.assesseeResponse) === null || _d === void 0 ? void 0 : _d.id) && {
|
|
105
106
|
assesseeResponse: this.assessmentTakerService.getAnswersByAiaId(this.assesseeData.id)
|
|
106
107
|
}));
|
|
@@ -336,6 +337,21 @@ export class AssessmentTakerComponent {
|
|
|
336
337
|
});
|
|
337
338
|
return (_b = answerObj === null || answerObj === void 0 ? void 0 : answerObj.marks) !== null && _b !== void 0 ? _b : null;
|
|
338
339
|
}
|
|
340
|
+
getQuestionAnswerObj(qId, parentOptionId, parentQuestionId) {
|
|
341
|
+
var _a;
|
|
342
|
+
if (!((_a = this.assesseeResponse) === null || _a === void 0 ? void 0 : _a.aiadefaultResponseList))
|
|
343
|
+
return null;
|
|
344
|
+
const isChild = parentOptionId !== undefined && parentOptionId !== null;
|
|
345
|
+
return this.assesseeResponse.aiadefaultResponseList.find((a) => {
|
|
346
|
+
var _a;
|
|
347
|
+
if (isChild) {
|
|
348
|
+
return a.childQuestionId === qId && a.childQuestionParentQuestionId === parentQuestionId && a.childDefaultOptionId === parentOptionId;
|
|
349
|
+
}
|
|
350
|
+
else {
|
|
351
|
+
return ((_a = a.sectionQuestion) === null || _a === void 0 ? void 0 : _a.questionId) === qId && (!a.childQuestionId || a.childQuestionId === 0);
|
|
352
|
+
}
|
|
353
|
+
});
|
|
354
|
+
}
|
|
339
355
|
getQuestionWeight(qId) {
|
|
340
356
|
var _a;
|
|
341
357
|
return ((_a = this.questionBank[qId]) === null || _a === void 0 ? void 0 : _a.weight) || 0;
|
|
@@ -714,7 +730,7 @@ export class AssessmentTakerComponent {
|
|
|
714
730
|
}
|
|
715
731
|
}
|
|
716
732
|
AssessmentTakerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AssessmentTakerComponent, deps: [{ token: i1.AssessmentTakerService }, { token: i2.FormBuilder }, { token: i3.ResponseBuilderService }, { token: i4.DomSanitizer }, { token: i5.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
|
|
717
|
-
AssessmentTakerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AssessmentTakerComponent, selector: "lib-assessment-taker", inputs: { labelConfig: "labelConfig", imageConfig: "imageConfig", showFooter: "showFooter", assessmentId: "assessmentId", assessmentInstanceId: "assessmentInstanceId", assesseeData: "assesseeData", assessorData: "assessorData", disabled: "disabled", previewMode: "previewMode", verticalView: "verticalView", enableMarks: "enableMarks", hideSectionTabs: "hideSectionTabs", assessmentContext: "assessmentContext", assesseeResponse: "assesseeResponse", markAsCompleted: "markAsCompleted", sectionWiseScore: "sectionWiseScore", showOverallRemarks: "showOverallRemarks" }, outputs: { snackbarMessage: "snackbarMessage", submitAssessment: "submitAssessment", stepChanged: "stepChanged" }, ngImport: i0, template: "<div *ngIf=\"configsLoaded && !showLoader; else loader\" class=\"col-12 h-100\">\r\n <div class=\"col-12 h-100 pt-2 pb-4\" [class.height-without-footer]=\"showFooter\">\r\n <ng-container *ngIf=\"assessmentQuestionPaperData?.questionPaperSectionList?.length\">\r\n <mat-tab-group *ngIf=\"!verticalView\" animationDuration=\"0ms\" class=\"assessment-mat-custom-tabs\"\r\n [ngClass]=\"{'assessment-hide-tabs': hideSectionTabs}\" [(selectedIndex)]=\"selectedTabIndex\">\r\n <mat-tab\r\n *ngFor=\"let section of assessmentQuestionPaperData.questionPaperSectionList | orderBy; let i = index\"\r\n [disabled]=\"shouldDisableTab(i)\">\r\n <ng-template mat-tab-label>\r\n <span class=\"assessment-text-semibold-16\"\r\n [ngClass]=\"sectionErrors[i] ? 'assessment-text-danger' : ''\">{{section.qpsName?.[0]?.text}}</span>\r\n </ng-template>\r\n <div class=\"mt-4\">\r\n <ng-container\r\n *ngTemplateOutlet=\"sectionContent; context: { section: section, i: i }\"></ng-container>\r\n </div>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <mat-accordion *ngIf=\"verticalView\" multi=\"true\" class=\"d-flex flex-column gap-4\">\r\n <mat-expansion-panel\r\n *ngFor=\"let section of assessmentQuestionPaperData.questionPaperSectionList | orderBy; let i = index\"\r\n [expanded]=\"expandedState[i] !== false\" (opened)=\"expandedState[i] = true\"\r\n (closed)=\"expandedState[i] = false\"\r\n class=\"assessment-border-radius-two shadow-none m-0 assessment-panel bg-transparent\">\r\n <mat-expansion-panel-header\r\n class=\"assessment-bg-grey-two h-auto assessment-panel-header\">\r\n <div class=\"d-flex align-items-center justify-content-between gap-2 col-12 pe-3\">\r\n <span class=\"assessment-text-semibold-16\"\r\n [ngClass]=\"sectionErrors[i] ? 'assessment-text-danger' : ''\">\r\n {{section.qpsName?.[0]?.text}}</span>\r\n\r\n <ng-container *ngIf=\"sectionWiseScore?.[section?.id] as sectionScore\">\r\n <div *ngIf=\"(sectionScore?.totalMarks ?? 0) > 0\"\r\n class=\"d-flex align-items-center gap-2 assessment-text-primary-four\">\r\n <span *ngIf=\"(sectionScore?.skillScores?.length ?? 0) > 0\"\r\n class=\"assessment-text-medium-11 assessment-text-grey-ten px-2 py-1 assessment-border-radius-two skill-chip cursor-pointer\"\r\n (click)=\"$event.stopPropagation(); openSkillAllocationDialog(sectionScore?.skillScores)\">\r\n {{sectionScore?.skillScores?.length}}\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SKILLS']}}\r\n </span>\r\n <span class=\"white-space-nowrap assessment-text-semibold-13\">\r\n <span class=\"assessment-text-medium-15 me-1\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SCORE']}}:</span>\r\n {{sectionScore.obtainedMarks || 0}}/{{sectionScore.totalMarks}}\r\n </span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </mat-expansion-panel-header>\r\n <div class=\"mt-3\">\r\n <ng-container\r\n *ngTemplateOutlet=\"sectionContent; context: { section: section, i: i }\"></ng-container>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </ng-container>\r\n\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.NO_QUESTIONS']}}</p>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"showOverallRemarks && assessmentQuestionPaperData?.questionPaperSectionList?.length\" class=\"mt-3\">\r\n <p class=\"assessment-text-medium-15 mb-2\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.OVERALL_REMARKS']}}</p>\r\n <textarea\r\n class=\"col-12 assessment-text-regular-13 assessment-input-border-one assessment-border-radius-two assessment-input-padding outline-0 assessment-bg-grey-one\"\r\n rows=\"3\" [formControl]=\"overallNotesCtrl\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.REMARKS']\"></textarea>\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 z-index-1\">\r\n <button\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary-transparent assessment-text-semibold-13\"\r\n (click)=\"goBack()\" *ngIf=\"selectedTabIndex > 0 && !verticalView\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.GO_BACK']}}</button>\r\n <button [disabled]=\"isSubmitting\" (click)=\"verticalView ? processSubmit(true) : goNext()\"\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 {{ (verticalView || selectedTabIndex === sectionFormGroups.length - 1) ?\r\n labelConfig['COMMONS_ASSESSMENT.LABEL.SUBMIT'] : labelConfig['COMMONS_ASSESSMENT.LABEL.NEXT'] }}\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\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>\r\n\r\n<!-- Recursive Template for Questions & Child Questions -->\r\n<ng-template #questionTemplate let-questionId=\"questionId\" let-isMandatory=\"isMandatory\" let-groupIndex=\"groupIndex\"\r\n let-parentOptionId=\"parentOptionId\" let-sequence=\"sequence\">\r\n <div *ngIf=\"sectionFormGroups[groupIndex].formGroup\" [formGroup]=\"sectionFormGroups[groupIndex].formGroup\"\r\n [id]=\"'question-container-' + questionId\">\r\n <div class=\"assessment-border-radius-two assessment-bg-white\"\r\n [ngClass]=\"{'p-3 assessment-card-border': !parentOptionId}\" *ngIf=\"questionBank[questionId] as question\">\r\n <div class=\"d-flex flex-md-row flex-column gap-2 align-items-start\">\r\n <div class=\"flex-grow-1 d-flex align-items-start gap-1\">\r\n <span class=\"assessment-text-medium-15\" *ngIf=\"sequence\">{{sequence}}.</span>\r\n <div class=\"flex-grow-1\">\r\n <div class=\"d-flex gap-2 align-items-start col-12\">\r\n <div class=\"flex-grow-1\">\r\n <p class=\"assessment-text-medium-15 mb-0 d-flex gap-1\">\r\n <span>\r\n <span [innerHtml]=\"question.questionText?.[0]?.text\"></span>\r\n <span *ngIf=\"isMandatory\"\r\n class=\"assessment-text-regular-11 assessment-text-grey-eight\">\r\n ({{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY']}})</span>\r\n </span>\r\n </p>\r\n <div class=\"mt-3 col-12\" *ngIf=\"question?.mediaUrl?.length\">\r\n <ng-container\r\n *ngTemplateOutlet=\"VideoTemplate; context:{videoUrl:question?.mediaUrl}\"></ng-container>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"question.hintText?.length && !previewMode\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.INFO']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/info.svg')\"\r\n cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\"\r\n (mouseenter)=\"tooltipState[question.id!] = true\"\r\n (mouseleave)=\"tooltipState[question.id!] = false\" class=\"cursor-pointer\" />\r\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"trigger\"\r\n [cdkConnectedOverlayOpen]=\"tooltipState[question.id!] || false\"\r\n [cdkConnectedOverlayPositions]=\"[{ originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -8, offsetY: 0 }, { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 8, offsetY: 0 }]\">\r\n <div class=\"assessment-bg-grey-two assessment-tooltip-border p-3 assessment-border-radius-two assessment-box-shadow-tooltip question-info assessment-text-regular-13\"\r\n (mouseenter)=\"tooltipState[question.id!] = true\"\r\n (mouseleave)=\"tooltipState[question.id!] = false\"\r\n [innerHTML]=\"question.hintText\">\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- answer field -->\r\n <div *ngIf=\"previewMode\" class=\"d-md-block d-none mt-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"answerField; context: {question: question,previewMode: previewMode,isMandatory: isMandatory,groupIndex: groupIndex}\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- answer field -->\r\n <div class=\"col-12 d-md-none mt-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"answerField; context: {question: question,previewMode: previewMode,isMandatory: isMandatory,groupIndex: groupIndex}\"></ng-container>\r\n </div>\r\n\r\n <!-- Assessor Marks Logic -->\r\n <div class=\"assessment-marks-field\"\r\n *ngIf=\"enableMarks && shouldShowMarksDropdown(question) && sectionFormGroups[groupIndex].formGroup.get(question.id + '_marks') as marksControl\">\r\n <mat-label class=\"assessment-text-medium-12 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MARKS']}}(Max: {{question.weight}})</mat-label>\r\n <input (input)=\"checkMaxVal($event, marksControl, question?.weight)\"\r\n class=\"col-12 assessment-input-border-one assessment-border-radius-two px-2 py-1 outline-0 assessment-bg-grey-one assessment-text-medium-12\"\r\n [formControlName]=\"question.id + '_marks'\" type=\"number\" (wheel)=\"$event.preventDefault()\">\r\n </div>\r\n </div>\r\n\r\n <!-- answer field -->\r\n <div *ngIf=\"!previewMode\" class=\"d-md-block d-none mt-3\">\r\n <ng-container\r\n *ngTemplateOutlet=\"answerField; context: {question: question,previewMode: previewMode,isMandatory: isMandatory,groupIndex: groupIndex}\"></ng-container>\r\n </div>\r\n\r\n <!-- Child Questions and Remarks Rendering Logic based on checked form state -->\r\n <ng-container *ngIf=\"question.defaultOptionsList?.length\">\r\n <ng-container *ngFor=\"let option of question.defaultOptionsList\">\r\n\r\n <ng-container\r\n *ngIf=\"isOptionSelected(sectionFormGroups[groupIndex].formGroup, question, option.options?.id)\">\r\n\r\n <!-- REMARKS FIELD -->\r\n <div class=\"mt-3\"\r\n *ngIf=\"option.remarksRequired && sectionFormGroups[groupIndex].formGroup.get(question.id + '_remarks_' + option.id) as remarksControl\">\r\n <p class=\"assessment-text-regular-15 mb-2\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMARKS']}}</p>\r\n <textarea *ngIf=\"!previewMode\" formControlName=\"{{question.id}}_remarks_{{option.id}}\"\r\n rows=\"2\" [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.REMARKS']\"\r\n [ngClass]=\"remarksControl.invalid && remarksControl.touched ? 'assessment-input-border-invalid' : ''\"\r\n class=\"col-12 assessment-text-regular-13 assessment-input-border-one assessment-border-radius-two assessment-input-padding outline-0 assessment-bg-grey-one\"></textarea>\r\n <ng-container *ngIf=\"previewMode\">\r\n <span class=\"assessment-text-regular-13 assessment-text-grey-nine\">\r\n {{ remarksControl.value }}</span>\r\n </ng-container>\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"remarksControl.invalid && remarksControl.touched\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.FIELD_REQUIRED']}}\r\n </mat-error>\r\n </div>\r\n\r\n <!-- CHILD QUESTIONS RECURSION -->\r\n <div class=\"col-12 mt-4 d-flex flex-column gap-3\" *ngIf=\"option.childQuestionList?.length\">\r\n <ng-container *ngFor=\"let childId of option.childQuestionList; let childIndex = index\">\r\n <ng-container *ngTemplateOutlet=\"questionTemplate; context: {\r\n questionId: childId,\r\n isMandatory: questionBank[childId]?.isMandatory,\r\n groupIndex: groupIndex,\r\n parentOptionId: option.id,\r\n sequence: sequence + '.' + (childIndex + 1)\r\n }\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- answer field template -->\r\n<ng-template #answerField let-question=\"question\" let-previewMode=\"previewMode\" let-isMandatory=\"isMandatory\"\r\n let-groupIndex=\"groupIndex\">\r\n <div *ngIf=\"sectionFormGroups[groupIndex].formGroup\" [formGroup]=\"sectionFormGroups[groupIndex].formGroup\"\r\n class=\"col-12\">\r\n <ng-container [ngSwitch]=\"question.questionType?.code\">\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_SHORT'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_LONG'\">\r\n <lib-question-type-long [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-long>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_RICH_TEXT'\">\r\n <lib-question-type-editor [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-editor>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.OBJECTIVE'\">\r\n <lib-question-type-objective [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\"></lib-question-type-objective>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.MULTI_SELECT'\">\r\n <lib-question-type-multiselect [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\"></lib-question-type-multiselect>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.PREFERENCE'\">\r\n <lib-question-type-preference [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\"></lib-question-type-preference>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.NUMBER'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.EMAIL'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.CONTACT_NUMBER'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.URL'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.FILE_UPLOAD'\">\r\n <lib-question-type-file-upload [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [labelConfig]=\"labelConfig\" [imageConfig]=\"imageConfig\"\r\n (snackbarMessage)=\"snackbarMessage.emit($event)\"></lib-question-type-file-upload>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.DATE_PICKER'\">\r\n <lib-question-type-date-picker [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-date-picker>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Error Messages and Character Count Container -->\r\n <ng-container\r\n *ngIf=\"!previewMode && sectionFormGroups[groupIndex].formGroup.get(question.id?.toString() || '') as control\">\r\n <div class=\"d-flex justify-content-between align-items-start mt-1\">\r\n <span>\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger\"\r\n *ngIf=\"control.touched && control.errors?.['required']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED_RESPONSE']}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['pattern']\">\r\n {{question?.validationMessage || labelConfig['COMMONS_ASSESSMENT.ERROR.INVALID_FORMAT']}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['minlength']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MIN_CHARS']?.replace('{{length}}',\r\n control.errors?.['minlength'].requiredLength + '')}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxlength']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_CHARS']?.replace('{{length}}',\r\n control.errors?.['maxlength'].requiredLength + '')}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['minOptions']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MIN_OPTIONS']?.replace('{{count}}',\r\n control.errors?.['minOptions'].required + '')}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxOptions']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_OPTIONS']?.replace('{{count}}',\r\n control.errors?.['maxOptions'].required + '')}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxFiles']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_FILES']?.replace('{{count}}',\r\n control.errors?.['maxFiles'].required + '')}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxFileSize']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_FILE_SIZE']?.replace('{{size}}',\r\n control.errors?.['maxFileSize'].requiredSize + '')}}\r\n </mat-error>\r\n </span>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-grey-seven white-space-nowrap ms-2\"\r\n *ngIf=\"getMaxCharCount(question) > 0\">\r\n {{ getRemainingChars(question, control) }}\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTER']}}{{getRemainingChars(question, control) !==\r\n 1\r\n ? 's' : ''}} {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMAINING']}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Reusable Section Form Template -->\r\n<ng-template #sectionContent let-section=\"section\" let-i=\"i\">\r\n <form class=\"w-100\" *ngIf=\"sectionFormGroups[i].formGroup\" [formGroup]=\"sectionFormGroups[i].formGroup\"\r\n [name]=\"'sectionfrm-' + i\" novalidate>\r\n <div class=\"d-flex justify-content-between align-items-center mb-4\"\r\n *ngIf=\"!previewMode && (section?.qpsDesc?.[0]?.text || section?.mediaUrl)\">\r\n <span class=\"assessment-text-semibold-14 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.TOTAL_QUESTIONS']}}: {{ section?.totalQuestions || 0 }}\r\n </span>\r\n <button (click)=\"openInstructionsDialog(section)\"\r\n class=\"assessment-zoom-animation assessment-button-padding assessment-text-medium-13 assessment-btn-primary-transparent\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.VIEW_INSTRUCTIONS']}}\r\n </button>\r\n </div>\r\n\r\n <div class=\"col-12 d-flex flex-column gap-3\">\r\n <ng-container *ngFor=\"let sq of section.sectionQuestionsList | orderBy; let j = index\">\r\n <ng-container *ngTemplateOutlet=\"questionTemplate; context: {\r\n questionId: sq.questionId,\r\n isMandatory: questionBank[sq.questionId]?.isMandatory,\r\n groupIndex: i,\r\n parentOptionId: null,\r\n sequence: j + 1\r\n }\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </form>\r\n</ng-template>\r\n\r\n<!-- video preview -->\r\n<ng-template let-videoUrl=\"videoUrl\" #VideoTemplate>\r\n <div class=\"assessment-border-radius-two overflow-hidden col-md-10 col-12\">\r\n <video *ngIf=\"videoUrl?.includes('.mp4') else youtubeVideo\" width=\"400\" controls class=\"mw-100 d-block mx-auto\">\r\n <source [src]=\"videoUrl\" type=\"video/mp4\">\r\n </video>\r\n <ng-template #youtubeVideo>\r\n <div class=\"youtube-video position-relative h-100\">\r\n <iframe [src]=\"addYoutubeIframeSrc(videoUrl)\" title=\"YouTube video player\" frameborder=\"0\"\r\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\r\n allowfullscreen class=\"position-absolute top-0 start-0 w-100 h-100 d-block\">\r\n </iframe>\r\n </div>\r\n </ng-template>\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-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-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-bold-12{font-weight:700;font-family:var(--assessment-font-family)!important;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-semibold-11{font-weight:600;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.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-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-bold-13{font-weight:700;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-regular-14{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.assessment-text-bold-14{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.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-semibold-10{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.55rem + .1vw);line-height:calc(1rem + .1vw)}.assessment-text-regular-10{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.55rem + .1vw)!important;line-height:calc(1rem + .1vw)}.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-bold-15{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-regular-16{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.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-bold-16{font-weight:700;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-regular-20{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-bold-20{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-semibold-20{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-medium-20{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.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-regular-18{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .3vw)!important}.assessment-text-bold-18{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw);line-height:calc(1.5rem + .1vw)}.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}.assessment-text-bold-34{overflow-wrap:break-word;font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(2rem + .15vw);line-height:calc(2.5rem + .15vw)}.assessment-text-medium-34{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(2rem + .15vw);line-height:calc(2.5rem + .15vw)}.assessment-text-bold-32{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.3rem + .75vw);line-height:calc(1.625rem + .5vw)}.assessment-text-bold-22{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-regular-22{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-semibold-22{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-medium-22{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-bold-24{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.8rem + .75vw);line-height:calc(.9rem + .75vw)}.assessment-text-regular-24{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.8rem + .75vw);line-height:calc(.9rem + .75vw)}.assessment-text-semibold-24{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.8rem + .75vw);line-height:calc(.9rem + .75vw)}.assessment-text-medium-24{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.8rem + .75vw);line-height:calc(1.2rem + .75vw)}.assessment-text-regular-26{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-medium-26{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-bold-26{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.5rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-semibold-26{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1.55rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-regular-28{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw)}.assessment-text-medium-28{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw)}.assessment-text-semibold-28{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw);letter-spacing:1}.assessment-text-bold-28{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw)}.assessment-text-regular-30{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .4vw)}.assessment-text-medium-30{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-bold-30{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.5rem + .4vw);line-height:calc(2rem + .4vw)}.assessment-text-semibold-30{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1.5rem + .4vw);line-height:calc(1.5rem + .4vw);letter-spacing:.5}.assessment-text-bold-36{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(2rem + .25vw);line-height:calc(2.5rem + .3vw)}.assessment-text-semibold-36{font-weight:600;font-family:var(--assessment-font-family);font-size:calc(2rem + .25vw);line-height:calc(2.5rem + .3vw)}@media (min-height: 100vw) and (orientation: portrait){.assessment-text-bold-34{font-size:calc(1.8rem + .15vh);line-height:calc(2.2rem + .15vh)}.assessment-text-bold-32{font-size:calc(1.3rem + 1vh);line-height:calc(1.5rem + 1vh)}.assessment-text-semibold-30{font-size:calc(1.5rem + .4vh);line-height:calc(1.8rem + .4vh)}.assessment-text-medium-24{line-height:2.188rem}.assessment-text-medium-24,.assessment-text-regular-24,.assessment-text-semibold-24,.assessment-text-bold-24,.assessment-text-light-24{font-size:calc(1.3rem + .5vh);line-height:calc(1.8rem + .5vh)}.assessment-text-medium-18,.assessment-text-regular-18,.assessment-text-bold-18,.assessment-text-semibold-18,.assessment-text-light-18{font-size:calc(1rem + .1vh)!important;line-height:calc(1.6rem + .1vh)!important}.assessment-text-light-16,.assessment-text-bold-16{font-size:calc(.9rem + .3vh)!important;line-height:calc(1.2rem + .3vh)!important}.assessment-text-medium-16,.assessment-text-semibold-16,.assessment-text-regular-16{font-size:calc(.9rem + .2vh)!important;line-height:calc(1.4rem + .2vh)!important}.assessment-text-regular-15,.assessment-text-semibold-15,.assessment-text-bold-15,.assessment-text-light-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,.assessment-text-bold-12,.assessment-text-medium-upper-12,.assessment-text-light-12{font-size:calc(.5rem + .4vh);line-height:calc(.8rem + .4vh)}.assessment-text-medium-14,.assessment-text-regular-14,.assessment-text-light-14,.assessment-text-medium-upper-14,.assessment-text-semibold-14,.assessment-text-bold-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,.assessment-text-bold-13,.assessment-text-light-13{font-size:calc(.7rem + .2vh)!important;line-height:calc(1rem + .3vh)!important}.assessment-text-regular-11,.assessment-text-medium-11,.assessment-text-semibold-11,.assessment-text-bold-11,.assessment-text-light-11{font-size:calc(.5rem + .2vh)!important;line-height:calc(.8rem + .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)}.height-without-footer{height:calc(100% - 4.4rem)!important}.z-index-1{z-index:1}.question-info{min-width:15rem;max-width:40vw}@media screen and (max-width: 768px){.question-info{max-width:75vw}}.assessment-marks-field{min-width:6.5rem;width:6.5rem}.youtube-video{aspect-ratio:16/9}.assessment-panel-header{padding-top:.7rem;padding-bottom:.7rem}\n"], components: [{ type: i6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i6.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby"], exportAs: ["matTab"] }, { type: i7.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { type: i7.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { type: i8.MatSpinner, selector: "mat-spinner", inputs: ["color"] }, { type: i9.QuestionTypeShortComponent, selector: "lib-question-type-short", inputs: ["required", "question", "previewMode", "labelConfig"] }, { type: i10.QuestionTypeLongComponent, selector: "lib-question-type-long", inputs: ["required", "question", "previewMode", "labelConfig"] }, { type: i11.QuestionTypeEditorComponent, selector: "lib-question-type-editor", inputs: ["required", "question", "previewMode", "labelConfig"] }, { type: i12.QuestionTypeObjectiveComponent, selector: "lib-question-type-objective", inputs: ["required", "question"], outputs: ["viewChild"] }, { type: i13.QuestionTypeMultiselectComponent, selector: "lib-question-type-multiselect", inputs: ["required", "question"], outputs: ["viewChild"] }, { type: i14.QuestionTypePreferenceComponent, selector: "lib-question-type-preference", inputs: ["required", "question"], outputs: ["viewChild"] }, { type: i15.QuestionTypeFileUploadComponent, selector: "lib-question-type-file-upload", inputs: ["required", "question", "labelConfig", "imageConfig"], outputs: ["snackbarMessage"] }, { type: i16.QuestionTypeDatePickerComponent, selector: "lib-question-type-date-picker", inputs: ["required", "question", "previewMode", "labelConfig"] }], directives: [{ type: i17.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i17.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i17.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { type: i17.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.MatAccordion, selector: "mat-accordion", inputs: ["multi", "displayMode", "togglePosition", "hideToggle"], exportAs: ["matAccordion"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i18.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { type: i18.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayPositions", "cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayTransformOriginOn"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { type: i19.MatLabel, selector: "mat-label" }, { type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i19.MatError, selector: "mat-error", inputs: ["id"] }, { type: i17.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i17.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }], pipes: { "orderBy": i20.OrderByPipe } });
|
|
733
|
+
AssessmentTakerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: AssessmentTakerComponent, selector: "lib-assessment-taker", inputs: { labelConfig: "labelConfig", imageConfig: "imageConfig", showFooter: "showFooter", assessmentId: "assessmentId", assessmentInstanceId: "assessmentInstanceId", assesseeData: "assesseeData", assessorData: "assessorData", disabled: "disabled", previewMode: "previewMode", verticalView: "verticalView", enableMarks: "enableMarks", hideSectionTabs: "hideSectionTabs", assessmentContext: "assessmentContext", assesseeResponse: "assesseeResponse", markAsCompleted: "markAsCompleted", sectionWiseScore: "sectionWiseScore", showOverallRemarks: "showOverallRemarks", showCorrectAnswers: "showCorrectAnswers" }, outputs: { snackbarMessage: "snackbarMessage", submitAssessment: "submitAssessment", stepChanged: "stepChanged" }, ngImport: i0, template: "<div *ngIf=\"configsLoaded && !showLoader; else loader\" class=\"col-12 h-100\">\r\n <div class=\"col-12 h-100 pt-2 pb-4\" [class.height-without-footer]=\"showFooter\">\r\n <ng-container *ngIf=\"assessmentQuestionPaperData?.questionPaperSectionList?.length\">\r\n <mat-tab-group *ngIf=\"!verticalView\" animationDuration=\"0ms\" class=\"assessment-mat-custom-tabs\"\r\n [ngClass]=\"{'assessment-hide-tabs': hideSectionTabs}\" [(selectedIndex)]=\"selectedTabIndex\">\r\n <mat-tab\r\n *ngFor=\"let section of assessmentQuestionPaperData.questionPaperSectionList | orderBy; let i = index\"\r\n [disabled]=\"shouldDisableTab(i)\">\r\n <ng-template mat-tab-label>\r\n <span class=\"assessment-text-semibold-16\"\r\n [ngClass]=\"sectionErrors[i] ? 'assessment-text-danger' : ''\">{{section.qpsName?.[0]?.text}}</span>\r\n </ng-template>\r\n <div class=\"mt-4\">\r\n <ng-container\r\n *ngTemplateOutlet=\"sectionContent; context: { section: section, i: i }\"></ng-container>\r\n </div>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n <mat-accordion *ngIf=\"verticalView\" multi=\"true\" class=\"d-flex flex-column gap-4\">\r\n <mat-expansion-panel\r\n *ngFor=\"let section of assessmentQuestionPaperData.questionPaperSectionList | orderBy; let i = index\"\r\n [expanded]=\"expandedState[i] !== false\" (opened)=\"expandedState[i] = true\"\r\n (closed)=\"expandedState[i] = false\"\r\n class=\"assessment-border-radius-two shadow-none m-0 assessment-panel bg-transparent\">\r\n <mat-expansion-panel-header class=\"assessment-bg-grey-two h-auto assessment-panel-header\">\r\n <div class=\"d-flex align-items-center justify-content-between gap-2 col-12 pe-3\">\r\n <span class=\"assessment-text-semibold-16\"\r\n [ngClass]=\"sectionErrors[i] ? 'assessment-text-danger' : ''\">\r\n {{section.qpsName?.[0]?.text}}</span>\r\n\r\n <ng-container *ngIf=\"sectionWiseScore?.[section?.id] as sectionScore\">\r\n <div *ngIf=\"(sectionScore?.totalMarks ?? 0) > 0\"\r\n class=\"d-flex align-items-center gap-2 assessment-text-primary-four\">\r\n <span *ngIf=\"(sectionScore?.skillScores?.length ?? 0) > 0\"\r\n class=\"assessment-text-medium-11 assessment-text-grey-ten px-2 py-1 assessment-border-radius-two skill-chip cursor-pointer\"\r\n (click)=\"$event.stopPropagation(); openSkillAllocationDialog(sectionScore?.skillScores)\">\r\n {{sectionScore?.skillScores?.length}}\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SKILLS']}}\r\n </span>\r\n <span class=\"white-space-nowrap assessment-text-semibold-13\">\r\n <span class=\"assessment-text-medium-15 me-1\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.SCORE']}}:</span>\r\n {{sectionScore.obtainedMarks || 0}}/{{sectionScore.totalMarks}}\r\n </span>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </mat-expansion-panel-header>\r\n <div class=\"mt-3\">\r\n <ng-container\r\n *ngTemplateOutlet=\"sectionContent; context: { section: section, i: i }\"></ng-container>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </ng-container>\r\n\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.NO_QUESTIONS']}}</p>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"showOverallRemarks && assessmentQuestionPaperData?.questionPaperSectionList?.length\" class=\"mt-3\">\r\n <p class=\"assessment-text-medium-15 mb-2\">{{labelConfig['COMMONS_ASSESSMENT.LABEL.OVERALL_REMARKS']}}</p>\r\n <textarea\r\n class=\"col-12 assessment-text-regular-13 assessment-input-border-one assessment-border-radius-two assessment-input-padding outline-0 assessment-bg-grey-one\"\r\n rows=\"3\" [formControl]=\"overallNotesCtrl\"\r\n [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.REMARKS']\"></textarea>\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 z-index-1\">\r\n <button\r\n class=\"assessment-zoom-animation assessment-border-radius-two assessment-button-padding-large assessment-btn-primary-transparent assessment-text-semibold-13\"\r\n (click)=\"goBack()\" *ngIf=\"selectedTabIndex > 0 && !verticalView\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.GO_BACK']}}</button>\r\n <button [disabled]=\"isSubmitting\" (click)=\"verticalView ? processSubmit(true) : goNext()\"\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 {{ (verticalView || selectedTabIndex === sectionFormGroups.length - 1) ?\r\n labelConfig['COMMONS_ASSESSMENT.LABEL.SUBMIT'] : labelConfig['COMMONS_ASSESSMENT.LABEL.NEXT'] }}\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\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>\r\n\r\n<!-- Recursive Template for Questions & Child Questions -->\r\n<ng-template #questionTemplate let-questionId=\"questionId\" let-isMandatory=\"isMandatory\" let-groupIndex=\"groupIndex\"\r\n let-parentOptionId=\"parentOptionId\" let-parentQuestionId=\"parentQuestionId\" let-sequence=\"sequence\">\r\n <div *ngIf=\"sectionFormGroups[groupIndex].formGroup\" [formGroup]=\"sectionFormGroups[groupIndex].formGroup\"\r\n [id]=\"'question-container-' + questionId\">\r\n <div class=\"assessment-border-radius-two assessment-bg-white\"\r\n [ngClass]=\"{'p-3 assessment-card-border': !parentOptionId}\" *ngIf=\"questionBank[questionId] as question\">\r\n <div class=\"d-flex flex-md-row flex-column gap-2 align-items-start\">\r\n <div class=\"flex-grow-1 d-flex align-items-start gap-1\">\r\n <span class=\"assessment-text-medium-15\" *ngIf=\"sequence\">{{sequence}}.</span>\r\n <div class=\"flex-grow-1\">\r\n <div class=\"d-flex gap-2 align-items-start col-12\">\r\n <div class=\"flex-grow-1\">\r\n <p class=\"assessment-text-medium-15 mb-0 d-flex gap-1\">\r\n <span>\r\n <span [innerHtml]=\"question.questionText?.[0]?.text\"></span>\r\n <span *ngIf=\"isMandatory\"\r\n class=\"assessment-text-regular-11 assessment-text-grey-eight\">\r\n ({{labelConfig['COMMONS_ASSESSMENT.LABEL.MANDATORY']}})</span>\r\n </span>\r\n </p>\r\n <div class=\"mt-3 col-12\" *ngIf=\"question?.mediaUrl?.length\">\r\n <ng-container\r\n *ngTemplateOutlet=\"VideoTemplate; context:{videoUrl:question?.mediaUrl}\"></ng-container>\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"question.hintText?.length && !previewMode\">\r\n <img [src]=\"imageConfig['COMMONS_ASSESSMENT.ICON.INFO']\"\r\n (error)=\"imageErrorHandler($event, 'assets/commons-assessment/images/info.svg')\"\r\n cdkOverlayOrigin #trigger=\"cdkOverlayOrigin\"\r\n (mouseenter)=\"tooltipState[question.id!] = true\"\r\n (mouseleave)=\"tooltipState[question.id!] = false\" class=\"cursor-pointer\" />\r\n <ng-template cdkConnectedOverlay [cdkConnectedOverlayOrigin]=\"trigger\"\r\n [cdkConnectedOverlayOpen]=\"tooltipState[question.id!] || false\"\r\n [cdkConnectedOverlayPositions]=\"[{ originX: 'start', originY: 'center', overlayX: 'end', overlayY: 'center', offsetX: -8, offsetY: 0 }, { originX: 'end', originY: 'center', overlayX: 'start', overlayY: 'center', offsetX: 8, offsetY: 0 }]\">\r\n <div class=\"assessment-bg-grey-two assessment-tooltip-border p-3 assessment-border-radius-two assessment-box-shadow-tooltip question-info assessment-text-regular-13\"\r\n (mouseenter)=\"tooltipState[question.id!] = true\"\r\n (mouseleave)=\"tooltipState[question.id!] = false\"\r\n [innerHTML]=\"question.hintText\">\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n\r\n <!-- answer field -->\r\n <div *ngIf=\"previewMode\" class=\"d-md-block d-none mt-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"answerField; context: {question: question,previewMode: previewMode,isMandatory: isMandatory,groupIndex: groupIndex,parentOptionId: parentOptionId,parentQuestionId: parentQuestionId}\"></ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- answer field -->\r\n <div class=\"col-12 d-md-none mt-2\">\r\n <ng-container\r\n *ngTemplateOutlet=\"answerField; context: {question: question,previewMode: previewMode,isMandatory: isMandatory,groupIndex: groupIndex,parentOptionId: parentOptionId,parentQuestionId: parentQuestionId}\"></ng-container>\r\n </div>\r\n\r\n <!-- Assessor Marks Logic -->\r\n <div class=\"assessment-marks-field\"\r\n *ngIf=\"enableMarks && shouldShowMarksDropdown(question) && sectionFormGroups[groupIndex].formGroup.get(question.id + '_marks') as marksControl\">\r\n <mat-label class=\"assessment-text-medium-12 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.MARKS']}}(Max: {{question.weight}})</mat-label>\r\n <input (input)=\"checkMaxVal($event, marksControl, question?.weight)\"\r\n class=\"col-12 assessment-input-border-one assessment-border-radius-two px-2 py-1 outline-0 assessment-bg-grey-one assessment-text-medium-12\"\r\n [formControlName]=\"question.id + '_marks'\" type=\"number\" (wheel)=\"$event.preventDefault()\">\r\n </div>\r\n </div>\r\n\r\n <!-- answer field -->\r\n <div *ngIf=\"!previewMode\" class=\"d-md-block d-none mt-3\">\r\n <ng-container\r\n *ngTemplateOutlet=\"answerField; context: {question: question,previewMode: previewMode,isMandatory: isMandatory,groupIndex: groupIndex,parentOptionId: parentOptionId,parentQuestionId: parentQuestionId}\"></ng-container>\r\n </div>\r\n\r\n <!-- Child Questions and Remarks Rendering Logic based on checked form state -->\r\n <ng-container *ngIf=\"question.defaultOptionsList?.length\">\r\n <ng-container *ngFor=\"let option of question.defaultOptionsList\">\r\n\r\n <ng-container\r\n *ngIf=\"isOptionSelected(sectionFormGroups[groupIndex].formGroup, question, option.options?.id)\">\r\n\r\n <!-- REMARKS FIELD -->\r\n <div class=\"mt-3\"\r\n *ngIf=\"option.remarksRequired && sectionFormGroups[groupIndex].formGroup.get(question.id + '_remarks_' + option.id) as remarksControl\">\r\n <p class=\"assessment-text-regular-15 mb-2\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMARKS']}}</p>\r\n <textarea *ngIf=\"!previewMode\" formControlName=\"{{question.id}}_remarks_{{option.id}}\"\r\n rows=\"2\" [placeholder]=\"labelConfig['COMMONS_ASSESSMENT.PLACEHOLDER.REMARKS']\"\r\n [ngClass]=\"remarksControl.invalid && remarksControl.touched ? 'assessment-input-border-invalid' : ''\"\r\n class=\"col-12 assessment-text-regular-13 assessment-input-border-one assessment-border-radius-two assessment-input-padding outline-0 assessment-bg-grey-one\"></textarea>\r\n <ng-container *ngIf=\"previewMode\">\r\n <span class=\"assessment-text-regular-13 assessment-text-grey-nine\">\r\n {{ remarksControl.value }}</span>\r\n </ng-container>\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"remarksControl.invalid && remarksControl.touched\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.FIELD_REQUIRED']}}\r\n </mat-error>\r\n </div>\r\n\r\n <!-- CHILD QUESTIONS RECURSION -->\r\n <div class=\"col-12 mt-4 d-flex flex-column gap-3\" *ngIf=\"option.childQuestionList?.length\">\r\n <ng-container *ngFor=\"let childId of option.childQuestionList; let childIndex = index\">\r\n <ng-container *ngTemplateOutlet=\"questionTemplate; context: {\r\n questionId: childId,\r\n isMandatory: questionBank[childId]?.isMandatory,\r\n groupIndex: groupIndex,\r\n parentOptionId: option.id,\r\n parentQuestionId: question.id,\r\n sequence: sequence + '.' + (childIndex + 1)\r\n }\">\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- answer field template -->\r\n<ng-template #answerField let-question=\"question\" let-previewMode=\"previewMode\" let-isMandatory=\"isMandatory\"\r\n let-groupIndex=\"groupIndex\" let-parentOptionId=\"parentOptionId\" let-parentQuestionId=\"parentQuestionId\">\r\n <div *ngIf=\"sectionFormGroups[groupIndex].formGroup\" [formGroup]=\"sectionFormGroups[groupIndex].formGroup\"\r\n class=\"col-12\">\r\n <ng-container [ngSwitch]=\"question.questionType?.code\">\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_SHORT'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_LONG'\">\r\n <lib-question-type-long [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-long>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.SUBJECTIVE_RICH_TEXT'\">\r\n <lib-question-type-editor [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-editor>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.OBJECTIVE'\">\r\n <lib-question-type-objective [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [showCorrectAnswers]=\"showCorrectAnswers\" [imageConfig]=\"imageConfig\"\r\n [answerObj]=\"getQuestionAnswerObj(question.id!, parentOptionId, parentQuestionId)\"></lib-question-type-objective>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.MULTI_SELECT'\">\r\n <lib-question-type-multiselect [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [showCorrectAnswers]=\"showCorrectAnswers\" [imageConfig]=\"imageConfig\"\r\n [answerObj]=\"getQuestionAnswerObj(question.id!, parentOptionId, parentQuestionId)\"></lib-question-type-multiselect>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.PREFERENCE'\">\r\n <lib-question-type-preference [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\"></lib-question-type-preference>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.NUMBER'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.EMAIL'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.CONTACT_NUMBER'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.URL'\">\r\n <lib-question-type-short [question]=\"question\" [formControlName]=\"question.id!\" [required]=\"isMandatory\"\r\n [previewMode]=\"previewMode\" [labelConfig]=\"labelConfig\"></lib-question-type-short>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.FILE_UPLOAD'\">\r\n <lib-question-type-file-upload [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [labelConfig]=\"labelConfig\" [imageConfig]=\"imageConfig\"\r\n (snackbarMessage)=\"snackbarMessage.emit($event)\"></lib-question-type-file-upload>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'QUESTION_TYPE.DATE_PICKER'\">\r\n <lib-question-type-date-picker [question]=\"question\" [formControlName]=\"question.id!\"\r\n [required]=\"isMandatory\" [previewMode]=\"previewMode\"\r\n [labelConfig]=\"labelConfig\"></lib-question-type-date-picker>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <!-- Error Messages and Character Count Container -->\r\n <ng-container\r\n *ngIf=\"!previewMode && sectionFormGroups[groupIndex].formGroup.get(question.id?.toString() || '') as control\">\r\n <div class=\"d-flex justify-content-between align-items-start mt-1\">\r\n <span>\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger\"\r\n *ngIf=\"control.touched && control.errors?.['required']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.REQUIRED_RESPONSE']}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['pattern']\">\r\n {{question?.validationMessage || labelConfig['COMMONS_ASSESSMENT.ERROR.INVALID_FORMAT']}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['minlength']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MIN_CHARS']?.replace('{{length}}',\r\n control.errors?.['minlength'].requiredLength + '')}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxlength']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_CHARS']?.replace('{{length}}',\r\n control.errors?.['maxlength'].requiredLength + '')}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['minOptions']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MIN_OPTIONS']?.replace('{{count}}',\r\n control.errors?.['minOptions'].required + '')}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxOptions']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_OPTIONS']?.replace('{{count}}',\r\n control.errors?.['maxOptions'].required + '')}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxFiles']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_FILES']?.replace('{{count}}',\r\n control.errors?.['maxFiles'].required + '')}}\r\n </mat-error>\r\n\r\n <mat-error class=\"assessment-text-regular-12 assessment-text-danger mt-1\"\r\n *ngIf=\"control.touched && control.errors?.['maxFileSize']\">\r\n {{labelConfig['COMMONS_ASSESSMENT.ERROR.MAX_FILE_SIZE']?.replace('{{size}}',\r\n control.errors?.['maxFileSize'].requiredSize + '')}}\r\n </mat-error>\r\n </span>\r\n\r\n <div class=\"assessment-text-regular-12 assessment-text-grey-seven white-space-nowrap ms-2\"\r\n *ngIf=\"getMaxCharCount(question) > 0\">\r\n {{ getRemainingChars(question, control) }}\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.CHARACTER']}}{{getRemainingChars(question, control) !==\r\n 1\r\n ? 's' : ''}} {{labelConfig['COMMONS_ASSESSMENT.LABEL.REMAINING']}}\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Reusable Section Form Template -->\r\n<ng-template #sectionContent let-section=\"section\" let-i=\"i\">\r\n <form class=\"w-100\" *ngIf=\"sectionFormGroups[i].formGroup\" [formGroup]=\"sectionFormGroups[i].formGroup\"\r\n [name]=\"'sectionfrm-' + i\" novalidate>\r\n <div class=\"d-flex justify-content-between align-items-center mb-4\"\r\n *ngIf=\"!previewMode && (section?.qpsDesc?.[0]?.text || section?.mediaUrl)\">\r\n <span class=\"assessment-text-semibold-14 assessment-text-grey-ten\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.TOTAL_QUESTIONS']}}: {{ section?.totalQuestions || 0 }}\r\n </span>\r\n <button (click)=\"openInstructionsDialog(section)\"\r\n class=\"assessment-zoom-animation assessment-button-padding assessment-text-medium-13 assessment-btn-primary-transparent\">\r\n {{labelConfig['COMMONS_ASSESSMENT.LABEL.VIEW_INSTRUCTIONS']}}\r\n </button>\r\n </div>\r\n\r\n <div class=\"col-12 d-flex flex-column gap-3\">\r\n <ng-container *ngFor=\"let sq of section.sectionQuestionsList | orderBy; let j = index\">\r\n <ng-container *ngTemplateOutlet=\"questionTemplate; context: {\r\n questionId: sq.questionId,\r\n isMandatory: questionBank[sq.questionId]?.isMandatory,\r\n groupIndex: i,\r\n parentOptionId: null,\r\n parentQuestionId: null,\r\n sequence: j + 1\r\n }\"></ng-container>\r\n </ng-container>\r\n </div>\r\n </form>\r\n</ng-template>\r\n\r\n<!-- video preview -->\r\n<ng-template let-videoUrl=\"videoUrl\" #VideoTemplate>\r\n <div class=\"assessment-border-radius-two overflow-hidden col-md-10 col-12\">\r\n <video *ngIf=\"videoUrl?.includes('.mp4') else youtubeVideo\" width=\"400\" controls class=\"mw-100 d-block mx-auto\">\r\n <source [src]=\"videoUrl\" type=\"video/mp4\">\r\n </video>\r\n <ng-template #youtubeVideo>\r\n <div class=\"youtube-video position-relative h-100\">\r\n <iframe [src]=\"addYoutubeIframeSrc(videoUrl)\" title=\"YouTube video player\" frameborder=\"0\"\r\n allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\"\r\n allowfullscreen class=\"position-absolute top-0 start-0 w-100 h-100 d-block\">\r\n </iframe>\r\n </div>\r\n </ng-template>\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-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-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-bold-12{font-weight:700;font-family:var(--assessment-font-family)!important;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-semibold-11{font-weight:600;font-family:var(--assessment-font-family);font-size:calc(.48rem + .25vw);line-height:calc(.8rem + .25vw)}.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-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-bold-13{font-weight:700;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-regular-14{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.assessment-text-bold-14{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.7rem + .2vw);line-height:calc(1.2rem + .2vw)}.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-semibold-10{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.55rem + .1vw);line-height:calc(1rem + .1vw)}.assessment-text-regular-10{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.55rem + .1vw)!important;line-height:calc(1rem + .1vw)}.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-bold-15{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.85rem + .1vw);line-height:calc(1.25rem + .1vw)}.assessment-text-regular-16{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(.77rem + .25vw);line-height:calc(1.25rem + .2vw)}.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-bold-16{font-weight:700;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-regular-20{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-bold-20{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-semibold-20{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.assessment-text-medium-20{font-weight:500;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .3vw);line-height:calc(1.2rem + .3vw)}.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-regular-18{font-weight:400;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw)!important;line-height:calc(1.5rem + .3vw)!important}.assessment-text-bold-18{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .125vw);line-height:calc(1.5rem + .1vw)}.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}.assessment-text-bold-34{overflow-wrap:break-word;font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(2rem + .15vw);line-height:calc(2.5rem + .15vw)}.assessment-text-medium-34{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(2rem + .15vw);line-height:calc(2.5rem + .15vw)}.assessment-text-bold-32{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.3rem + .75vw);line-height:calc(1.625rem + .5vw)}.assessment-text-bold-22{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-regular-22{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-semibold-22{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-medium-22{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-bold-24{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(.8rem + .75vw);line-height:calc(.9rem + .75vw)}.assessment-text-regular-24{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(.8rem + .75vw);line-height:calc(.9rem + .75vw)}.assessment-text-semibold-24{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(.8rem + .75vw);line-height:calc(.9rem + .75vw)}.assessment-text-medium-24{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(.8rem + .75vw);line-height:calc(1.2rem + .75vw)}.assessment-text-regular-26{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-medium-26{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-bold-26{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.5rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-semibold-26{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1.55rem + .1vw);line-height:calc(1.8rem + .1vw)}.assessment-text-regular-28{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw)}.assessment-text-medium-28{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw)}.assessment-text-semibold-28{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw);letter-spacing:1}.assessment-text-bold-28{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.55rem + .2vw);line-height:calc(2rem + .2vw)}.assessment-text-regular-30{font-weight:400;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .4vw)}.assessment-text-medium-30{font-weight:500;font-family:var(--assessment-font-family);font-size:calc(1.5rem + .4vw);line-height:calc(1.5rem + .4vw)}.assessment-text-bold-30{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(1.5rem + .4vw);line-height:calc(2rem + .4vw)}.assessment-text-semibold-30{font-weight:600;font-family:var(--assessment-font-family)!important;font-size:calc(1.5rem + .4vw);line-height:calc(1.5rem + .4vw);letter-spacing:.5}.assessment-text-bold-36{font-weight:700;font-family:var(--assessment-font-family)!important;font-size:calc(2rem + .25vw);line-height:calc(2.5rem + .3vw)}.assessment-text-semibold-36{font-weight:600;font-family:var(--assessment-font-family);font-size:calc(2rem + .25vw);line-height:calc(2.5rem + .3vw)}@media (min-height: 100vw) and (orientation: portrait){.assessment-text-bold-34{font-size:calc(1.8rem + .15vh);line-height:calc(2.2rem + .15vh)}.assessment-text-bold-32{font-size:calc(1.3rem + 1vh);line-height:calc(1.5rem + 1vh)}.assessment-text-semibold-30{font-size:calc(1.5rem + .4vh);line-height:calc(1.8rem + .4vh)}.assessment-text-medium-24{line-height:2.188rem}.assessment-text-medium-24,.assessment-text-regular-24,.assessment-text-semibold-24,.assessment-text-bold-24,.assessment-text-light-24{font-size:calc(1.3rem + .5vh);line-height:calc(1.8rem + .5vh)}.assessment-text-medium-18,.assessment-text-regular-18,.assessment-text-bold-18,.assessment-text-semibold-18,.assessment-text-light-18{font-size:calc(1rem + .1vh)!important;line-height:calc(1.6rem + .1vh)!important}.assessment-text-light-16,.assessment-text-bold-16{font-size:calc(.9rem + .3vh)!important;line-height:calc(1.2rem + .3vh)!important}.assessment-text-medium-16,.assessment-text-semibold-16,.assessment-text-regular-16{font-size:calc(.9rem + .2vh)!important;line-height:calc(1.4rem + .2vh)!important}.assessment-text-regular-15,.assessment-text-semibold-15,.assessment-text-bold-15,.assessment-text-light-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,.assessment-text-bold-12,.assessment-text-medium-upper-12,.assessment-text-light-12{font-size:calc(.5rem + .4vh);line-height:calc(.8rem + .4vh)}.assessment-text-medium-14,.assessment-text-regular-14,.assessment-text-light-14,.assessment-text-medium-upper-14,.assessment-text-semibold-14,.assessment-text-bold-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,.assessment-text-bold-13,.assessment-text-light-13{font-size:calc(.7rem + .2vh)!important;line-height:calc(1rem + .3vh)!important}.assessment-text-regular-11,.assessment-text-medium-11,.assessment-text-semibold-11,.assessment-text-bold-11,.assessment-text-light-11{font-size:calc(.5rem + .2vh)!important;line-height:calc(.8rem + .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)}.height-without-footer{height:calc(100% - 4.4rem)!important}.z-index-1{z-index:1}.question-info{min-width:15rem;max-width:40vw}@media screen and (max-width: 768px){.question-info{max-width:75vw}}.assessment-marks-field{min-width:6.5rem;width:6.5rem}.youtube-video{aspect-ratio:16/9}.assessment-panel-header{padding-top:.7rem;padding-bottom:.7rem}\n"], components: [{ type: i6.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i6.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby"], exportAs: ["matTab"] }, { type: i7.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { type: i7.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { type: i8.MatSpinner, selector: "mat-spinner", inputs: ["color"] }, { type: i9.QuestionTypeShortComponent, selector: "lib-question-type-short", inputs: ["required", "question", "previewMode", "labelConfig"] }, { type: i10.QuestionTypeLongComponent, selector: "lib-question-type-long", inputs: ["required", "question", "previewMode", "labelConfig"] }, { type: i11.QuestionTypeEditorComponent, selector: "lib-question-type-editor", inputs: ["required", "question", "previewMode", "labelConfig"] }, { type: i12.QuestionTypeObjectiveComponent, selector: "lib-question-type-objective", inputs: ["required", "question", "showCorrectAnswers", "imageConfig", "answerObj"], outputs: ["viewChild"] }, { type: i13.QuestionTypeMultiselectComponent, selector: "lib-question-type-multiselect", inputs: ["required", "question", "showCorrectAnswers", "imageConfig", "answerObj"], outputs: ["viewChild"] }, { type: i14.QuestionTypePreferenceComponent, selector: "lib-question-type-preference", inputs: ["required", "question"], outputs: ["viewChild"] }, { type: i15.QuestionTypeFileUploadComponent, selector: "lib-question-type-file-upload", inputs: ["required", "question", "labelConfig", "imageConfig"], outputs: ["snackbarMessage"] }, { type: i16.QuestionTypeDatePickerComponent, selector: "lib-question-type-date-picker", inputs: ["required", "question", "previewMode", "labelConfig"] }], directives: [{ type: i17.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i17.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i17.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i6.MatTabLabel, selector: "[mat-tab-label], [matTabLabel]" }, { type: i17.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i7.MatAccordion, selector: "mat-accordion", inputs: ["multi", "displayMode", "togglePosition", "hideToggle"], exportAs: ["matAccordion"] }, { type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i2.FormControlDirective, selector: "[formControl]", inputs: ["disabled", "formControl", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i18.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { type: i18.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayPositions", "cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayTransformOriginOn"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { type: i19.MatLabel, selector: "mat-label" }, { type: i2.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i2.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i19.MatError, selector: "mat-error", inputs: ["id"] }, { type: i17.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i17.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }], pipes: { "orderBy": i20.OrderByPipe } });
|
|
718
734
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: AssessmentTakerComponent, decorators: [{
|
|
719
735
|
type: Component,
|
|
720
736
|
args: [{
|
|
@@ -756,6 +772,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
756
772
|
type: Input
|
|
757
773
|
}], showOverallRemarks: [{
|
|
758
774
|
type: Input
|
|
775
|
+
}], showCorrectAnswers: [{
|
|
776
|
+
type: Input
|
|
759
777
|
}], snackbarMessage: [{
|
|
760
778
|
type: Output
|
|
761
779
|
}], submitAssessment: [{
|
|
@@ -763,4 +781,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
763
781
|
}], stepChanged: [{
|
|
764
782
|
type: Output
|
|
765
783
|
}] } });
|
|
766
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXNzbWVudC10YWtlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb25zLWFzc2Vzc21lbnQvc3JjL2xpYi9tb2R1bGVzL2Fzc2Vzc21lbnQtdGFrZXIvYXNzZXNzbWVudC10YWtlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb25zLWFzc2Vzc21lbnQvc3JjL2xpYi9tb2R1bGVzL2Fzc2Vzc21lbnQtdGFrZXIvYXNzZXNzbWVudC10YWtlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFaEMsT0FBTyxFQUFlLFdBQVcsRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlqRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUloSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxRUFBcUUsQ0FBQztBQUMvRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRakQsTUFBTSxPQUFPLHdCQUF3QjtJQWdEbkMsWUFDVSxzQkFBOEMsRUFDOUMsRUFBZSxFQUNmLHNCQUE4QyxFQUM5QyxTQUF1QixFQUN2QixNQUFpQjtRQUpqQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDdkIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQXBEbEIsZ0JBQVcsR0FBOEIsRUFBRSxD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ZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZm9ya0pvaW4gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERvbVNhbml0aXplciB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50VGFrZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9hc3Nlc3NtZW50LXRha2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBSZXNwb25zZUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9yZXNwb25zZS1idWlsZGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTZWN0aW9uSW5zdHJ1Y3Rpb25zQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL3NlY3Rpb24taW5zdHJ1Y3Rpb25zL3NlY3Rpb24taW5zdHJ1Y3Rpb25zLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFzc2Vzc2VlRFRPLCBBc3Nlc3NvckRUTywgQXNzZXNzbWVudCwgQXNzZXNzbWVudEluc3RhbmNlQXNzZXNzZURUTywgQXNzZXNzbWVudFN0ZXAsIEFzc2Vzc21lbnRDb250ZXh0RFRPLCBTZWN0aW9uU2NvcmUsIFNraWxsU2NvcmUsIEF0dGFjaG1lbnQgfSBmcm9tICcuLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9hc3Nlc3NtZW50LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRRdWVzdGlvbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL3F1ZXN0aW9uLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IEFzc2Vzc21lbnRRdWVzdGlvblBhcGVyLCBRdWVzdGlvblBhcGVyU2VjdGlvbiwgU2VjdGlvblF1ZXN0aW9uIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2ludGVyZmFjZXMvcXVlc3Rpb24tcGFwZXIuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgU2tpbGxBbGxvY2F0aW9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2NvbXBvbmVudHMvc2tpbGwtYWxsb2NhdGlvbi9za2lsbC1hbGxvY2F0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IHNvcnRCeU9yZGVyIH0gZnJvbSAnLi4vLi4vc2hhcmVkL3V0aWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLWFzc2Vzc21lbnQtdGFrZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9hc3Nlc3NtZW50LXRha2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hc3Nlc3NtZW50LXRha2VyLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBBc3Nlc3NtZW50VGFrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIGxhYmVsQ29uZmlnOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgQElucHV0KCkgaW1hZ2VDb25maWc6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICBASW5wdXQoKSBzaG93Rm9vdGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgYXNzZXNzbWVudElkITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGFzc2Vzc21lbnRJbnN0YW5jZUlkITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIGFzc2Vzc2VlRGF0YTogQXNzZXNzZWVEVE8gPSB7IGlkOiAwLCBhY3RvcklkOiAwLCBhY3RvclR5cGU6ICdVU0VSJyB9O1xyXG4gIEBJbnB1dCgpIGFzc2Vzc29yRGF0YTogQXNzZXNzb3JEVE8gPSB7IGlkOiAwLCBhY3RvcklkOiAwLCBhY3RvclR5cGU6ICdVU0VSJyB9O1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgcHJldmlld01vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSB2ZXJ0aWNhbFZpZXc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBlbmFibGVNYXJrczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGhpZGVTZWN0aW9uVGFiczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGFzc2Vzc21lbnRDb250ZXh0ITogQXNzZXNzbWVudENvbnRleHREVE87XHJcbiAgQElucHV0KCkgYXNzZXNzZWVSZXNwb25zZTogQXNzZXNzbWVudEluc3RhbmNlQXNzZXNzZURUTyA9IHt9O1xyXG4gIEBJbnB1dCgpIG1hcmtBc0NvbXBsZXRlZDogYm9vbGVhbiA9IHRydWU7XHJcbiAgQElucHV0KCkgc2VjdGlvbldpc2VTY29yZTogeyBbc2VjdGlvbklkOiBudW1iZXJdOiBTZWN0aW9uU2NvcmUgfSA9IHt9O1xyXG4gIEBJbnB1dCgpIHNob3dPdmVyYWxsUmVtYXJrczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBAT3V0cHV0KCkgc25hY2tiYXJNZXNzYWdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IG1lc3NhZ2U6IHN0cmluZywgdHlwZTogJ3N1Y2Nlc3MnIHwgJ2Vycm9yJyB8ICdpbmZvJyB9PigpO1xyXG4gIEBPdXRwdXQoKSBzdWJtaXRBc3Nlc3NtZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIHN0ZXBDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxBc3Nlc3NtZW50U3RlcD4oKTtcclxuXHJcbiAgc2hvd0xvYWRlcjogYm9vbGVhbiA9IHRydWU7XHJcbiAgcXVlc3Rpb25CYW5rOiBSZWNvcmQ8bnVtYmVyLCBBc3Nlc3NtZW50UXVlc3Rpb24+ID0ge307XHJcbiAgYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhOiBBc3Nlc3NtZW50UXVlc3Rpb25QYXBlciA9IHt9O1xyXG4gIGFzc2Vzc21lbnREYXRhOiBBc3Nlc3NtZW50ID0ge307XHJcbiAgY29uZmlnc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGlzU3VibWl0dGluZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHNlY3Rpb25Gb3JtR3JvdXBzOiB7IHNlY3Rpb25JZDogbnVtYmVyOyBmb3JtR3JvdXA6IEZvcm1Hcm91cCB9W10gPSBbXTtcclxuICBvdmVyYWxsTm90ZXNDdHJsID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuICBwcml2YXRlIHlvdXR1YmVVcmxDYWNoZTogeyBbdXJsOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xyXG5cclxuICBwcml2YXRlIF9zZWxlY3RlZFRhYkluZGV4OiBudW1iZXIgPSAwO1xyXG4gIGdldCBzZWxlY3RlZFRhYkluZGV4KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRUYWJJbmRleDtcclxuICB9XHJcbiAgc2V0IHNlbGVjdGVkVGFiSW5kZXgodmFsdWU6IG51bWJlcikge1xyXG4gICAgaWYgKHRoaXMuX3NlbGVjdGVkVGFiSW5kZXggIT09IHZhbHVlKSB7XHJcbiAgICAgIHRoaXMuX3NlbGVjdGVkVGFiSW5kZXggPSB2YWx1ZTtcclxuICAgICAgdGhpcy5lbWl0U3RlcERldGFpbHMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlY3Rpb25FcnJvcnM6IGJvb2xlYW5bXSA9IFtdO1xyXG4gIHRlbmFudElkOiBudW1iZXIgPSAwO1xyXG4gIHRvb2x0aXBTdGF0ZTogUmVjb3JkPG51bWJlciwgYm9vbGVhbj4gPSB7fTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFzc2Vzc21lbnRUYWtlclNlcnZpY2U6IEFzc2Vzc21lbnRUYWtlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgcmVzcG9uc2VCdWlsZGVyU2VydmljZTogUmVzcG9uc2VCdWlsZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXHJcbiAgICBwcml2YXRlIGRpYWxvZzogTWF0RGlhbG9nXHJcbiAgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldENvbmZpZ3NGcm9tSlNPTigpO1xyXG5cclxuICAgIGlmICh0aGlzLnByZXZpZXdNb2RlIHx8IHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uYXNzZXNzbWVudFRha2VuPy5jb2RlID09PSAnQVNTRVNTTUVOVF9UQUtFTi5DT01QTEVURScpIHtcclxuICAgICAgdGhpcy5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYXNzZXNzbWVudENvbnRleHQpIHtcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZCA9IHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnRJbnN0YW5jZURUTz8uaWQgPz8gdGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZDtcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50SWQgPSB0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5hc3Nlc3NtZW50Py5pZCA/PyB0aGlzLmFzc2Vzc21lbnRJZDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZCkge1xyXG4gICAgICB0aGlzLmxvYWRBc3Nlc3NtZW50RGF0YSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q29uZmlnc0Zyb21KU09OKCkge1xyXG4gICAgZm9ya0pvaW4oe1xyXG4gICAgICBsYWJlbENvbmZpZzogdGhpcy5hc3Nlc3NtZW50VGFrZXJTZXJ2aWNlLmdldENvbmZpZ0pTT04oJ2pzb24vbGFiZWxDb25maWcnKSxcclxuICAgICAgaW1hZ2VDb25maWc6IHRoaXMuYXNzZXNzbWVudFRha2VyU2VydmljZS5nZXRDb25maWdKU09OKCdqc29uL2ltYWdlQ29uZmlnJylcclxuICAgIH0pLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5sYWJlbENvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIHJlcz8ubGFiZWxDb25maWcsIHRoaXMubGFiZWxDb25maWcpO1xyXG4gICAgICB0aGlzLmltYWdlQ29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgcmVzPy5pbWFnZUNvbmZpZywgdGhpcy5pbWFnZUNvbmZpZyk7XHJcblxyXG4gICAgICB0aGlzLmNvbmZpZ3NMb2FkZWQgPSB0cnVlO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGxvYWRBc3Nlc3NtZW50RGF0YSgpIHtcclxuICAgIGNvbnN0IGFwaUNhbGxzID0ge1xyXG4gICAgICAuLi4oIXRoaXMuYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnQ/LmlkICYmIHtcclxuICAgICAgICBhc3Nlc3NtZW50RGF0YTogdGhpcy5hc3Nlc3NtZW50VGFrZXJTZXJ2aWNlLmdldEFzc2Vzc21lbnRDb250ZXh0QnlJZCh0aGlzLmFzc2Vzc21lbnRJZClcclxuICAgICAgfSksXHJcbiAgICAgIC4uLih0aGlzLmFzc2Vzc2VlRGF0YT8uaWQgJiYgIXRoaXMuYXNzZXNzZWVSZXNwb25zZT8uaWQgJiYge1xyXG4gICAgICAgIGFzc2Vzc2VlUmVzcG9uc2U6IHRoaXMuYXNzZXNzbWVudFRha2VyU2VydmljZS5nZXRBbnN3ZXJzQnlBaWFJZCh0aGlzLmFzc2Vzc2VlRGF0YS5pZClcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGlmIChPYmplY3Qua2V5cyhhcGlDYWxscykubGVuZ3RoID4gMCkge1xyXG4gICAgICBmb3JrSm9pbihhcGlDYWxscykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmFzc2Vzc21lbnRDb250ZXh0ID0gZGF0YT8uYXNzZXNzbWVudERhdGEgPz8gdGhpcy5hc3Nlc3NtZW50Q29udGV4dDtcclxuICAgICAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZSA9IGRhdGE/LmFzc2Vzc2VlUmVzcG9uc2UgPz8gdGhpcy5hc3Nlc3NlZVJlc3BvbnNlO1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVSZXNwb25zZSgpXHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogZXJyb3IgPT4ge1xyXG4gICAgICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5FUlJPUl9ERUZBVUxUJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdHRVQnIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5oYW5kbGVSZXNwb25zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlUmVzcG9uc2UoKSB7XHJcbiAgICB0aGlzLmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YSA9IHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRFRPO1xyXG4gICAgdGhpcy5hc3Nlc3NtZW50RGF0YSA9IHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnQ7XHJcbiAgICB0aGlzLnF1ZXN0aW9uQmFuayA9IHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LnF1ZXN0aW9uRFRPTWFwO1xyXG4gICAgdGhpcy50ZW5hbnRJZCA9IHRoaXMuYXNzZXNzbWVudENvbnRleHQ/LmFzc2Vzc21lbnQ/LnRlbmFudElkID8/IDA7XHJcblxyXG4gICAgaWYgKHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uaWQpIHtcclxuICAgICAgaWYgKHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uYXNzZXNzbWVudFRha2VuPy5jb2RlID09PSAnQVNTRVNTTUVOVF9UQUtFTi5DT01QTEVURScpIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hc3Nlc3NlZVJlc3BvbnNlID0ge1xyXG4gICAgICAgIGlkOiAwLFxyXG4gICAgICAgIGFzc2Vzc21lbnRJbnN0YW5jZTogeyBpZDogdGhpcy5hc3Nlc3NtZW50SW5zdGFuY2VJZCB9LFxyXG4gICAgICAgIGFzc2Vzc2VlOiB0aGlzLmFzc2Vzc2VlRGF0YSxcclxuICAgICAgICBhc3Nlc3NvcjogdGhpcy5hc3Nlc3NvckRhdGEsXHJcbiAgICAgICAgYWlhZGVmYXVsdFJlc3BvbnNlTGlzdDogW10sXHJcbiAgICAgICAgdGVuYW50OiB0aGlzLnRlbmFudElkXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICB0aGlzLm92ZXJhbGxOb3Rlc0N0cmwuc2V0VmFsdWUodGhpcy5hc3Nlc3NlZVJlc3BvbnNlLm5vdGVzIHx8ICcnKTtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkICYmICF0aGlzLnNob3dPdmVyYWxsUmVtYXJrcykge1xyXG4gICAgICB0aGlzLm92ZXJhbGxOb3Rlc0N0cmwuZGlzYWJsZSgpO1xyXG4gICAgfVxyXG4gICAgLy8gdGhpcy5mZXRjaEF0dGFjaG1lbnRzQW5kU2V0dXBGb3JtKCk7XHJcbiAgICB0aGlzLmZvcm1TZXR1cCgpO1xyXG4gIH1cclxuXHJcbiAgZmV0Y2hBdHRhY2htZW50c0FuZFNldHVwRm9ybSgpIHtcclxuICAgIGNvbnN0IGF0dGFjaG1lbnRJZHM6IFNldDxudW1iZXI+ID0gbmV3IFNldCgpO1xyXG4gICAgdGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5haWFkZWZhdWx0UmVzcG9uc2VMaXN0Py5mb3JFYWNoKChhOiBhbnkpID0+IHtcclxuICAgICAgYS5hdHRhY2htZW50UmVzcG9uc2VMaXN0Py5mb3JFYWNoKChyOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoci5hdHRhY2htZW50SWQpIGF0dGFjaG1lbnRJZHMuYWRkKHIuYXR0YWNobWVudElkKTtcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoYXR0YWNobWVudElkcy5zaXplID4gMCkge1xyXG4gICAgICBjb25zdCBwYXJhbXMgPSB7XHJcbiAgICAgICAgYXR0YWNobWVudElkczogQXJyYXkuZnJvbShhdHRhY2htZW50SWRzKSxcclxuICAgICAgICBlbnRpdHlUeXBlOiAnRU5USVRZX1RZUEUuQVNTRVNTTUVOVF9RVUVTVElPTidcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5hc3Nlc3NtZW50VGFrZXJTZXJ2aWNlLmdldEF0dGFjaG1lbnRzKHBhcmFtcykuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoYXR0YWNobWVudHNSZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5hc3Nlc3NlZVJlc3BvbnNlLmFpYWRlZmF1bHRSZXNwb25zZUxpc3Q/LmZvckVhY2goKGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBhLmF0dGFjaG1lbnRSZXNwb25zZUxpc3Q/LmZvckVhY2goKHI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChyLmF0dGFjaG1lbnRJZCAmJiBhdHRhY2htZW50c1Jlcz8uZmluZCgoaXRlbTogQXR0YWNobWVudCkgPT4gaXRlbS5pZCA9PSByLmF0dGFjaG1lbnRJZCkpIHtcclxuICAgICAgICAgICAgICAgIHIuYXR0YWNobWVudE9iamVjdCA9IGF0dGFjaG1lbnRzUmVzPy5maW5kKChpdGVtOiBBdHRhY2htZW50KSA9PiBpdGVtLmlkID09IHIuYXR0YWNobWVudElkKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLmZvcm1TZXR1cCgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhpcy5mb3JtU2V0dXAoKTtcclxuICAgICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogJ0dFVCcsIHBhcmFtcyB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybVNldHVwKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmb3JtU2V0dXAoKSB7XHJcbiAgICB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzID0gW107XHJcblxyXG4gICAgc29ydEJ5T3JkZXIodGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGE/LnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdCk/LmZvckVhY2goKHNlY3Rpb246IFF1ZXN0aW9uUGFwZXJTZWN0aW9uKSA9PiB7XHJcbiAgICAgIGNvbnN0IGdyb3VwOiBhbnkgPSB7fTtcclxuXHJcbiAgICAgIHNvcnRCeU9yZGVyKHNlY3Rpb24/LnNlY3Rpb25RdWVzdGlvbnNMaXN0KT8uZm9yRWFjaCgoc3E6IFNlY3Rpb25RdWVzdGlvbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IHFJZCA9IHNxLnF1ZXN0aW9uSWQ7XHJcbiAgICAgICAgaWYgKCFxSWQgfHwgIXRoaXMucXVlc3Rpb25CYW5rW3FJZF0pIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uQmFua1txSWRdO1xyXG4gICAgICAgIHRoaXMuYWRkQ29udHJvbEZvclF1ZXN0aW9uKGdyb3VwLCBxdWVzdGlvbiwgcXVlc3Rpb24/LmlzTWFuZGF0b3J5KTtcclxuXHJcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmRlZmF1bHRPcHRpb25zTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBxdWVzdGlvbi5kZWZhdWx0T3B0aW9uc0xpc3QuZm9yRWFjaCgob3B0aW9uOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKG9wdGlvbi5yZW1hcmtzUmVxdWlyZWQpIHtcclxuICAgICAgICAgICAgICAvLyBQcmUtcG9wdWxhdGUgcmVtYXJrcyBpZiB3ZSBoYXZlIGFuc3dlcnMgbWF0Y2hpbmcgdGhpcyBvcHRpb24uXHJcbiAgICAgICAgICAgICAgbGV0IHJlbWFya1ZhbCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgY29uc3QgcHJlZmlsbGVkT3B0aW9ucyA9IHRoaXMuZ2V0UHJlZmlsbGVkQW5zd2VyKHFJZCk7XHJcbiAgICAgICAgICAgICAgaWYgKHByZWZpbGxlZE9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFuc09iaiA9IHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uYWlhZGVmYXVsdFJlc3BvbnNlTGlzdD8uZmluZCgoYTogYW55KSA9PlxyXG4gICAgICAgICAgICAgICAgICBhLnNlY3Rpb25RdWVzdGlvbj8ucXVlc3Rpb25JZCA9PT0gcUlkICYmICghYS5jaGlsZFF1ZXN0aW9uSWQgfHwgYS5jaGlsZFF1ZXN0aW9uSWQgPT09IDApXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKGFuc09iaikge1xyXG4gICAgICAgICAgICAgICAgICBpZiAocXVlc3Rpb24ucXVlc3Rpb25UeXBlPy5jb2RlID09PSAnUVVFU1RJT05fVFlQRS5PQkpFQ1RJVkUnICYmIChwcmVmaWxsZWRPcHRpb25zID09PSAob3B0aW9uLm9wdGlvbnM/LmlkID8/IG9wdGlvbi5pZCkgfHwgcHJlZmlsbGVkT3B0aW9ucz8uaWQgPT09IChvcHRpb24ub3B0aW9ucz8uaWQgPz8gb3B0aW9uLmlkKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZW1hcmtWYWwgPSBhbnNPYmoucmVtYXJrcyB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocHJlZmlsbGVkT3B0aW9ucykpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGluZ09iaiA9IGFuc09iai5kcm9iamVjdGl2ZXJlc3BvbnNlTGlzdD8uZmluZCgocjogYW55KSA9PiByLmRlZmF1bHRPcHRpb24/Lm9wdGlvbnM/LmlkID09PSAob3B0aW9uLm9wdGlvbnM/LmlkID8/IG9wdGlvbi5pZCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGluZ09iaikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVtYXJrVmFsID0gbWF0Y2hpbmdPYmoucmVtYXJrcyB8fCBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgcmVtYXJrQ3RybCA9IG5ldyBGb3JtQ29udHJvbChyZW1hcmtWYWwpO1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgICAgICAgICAgICByZW1hcmtDdHJsLmRpc2FibGUoKTtcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIGdyb3VwW2Ake3FJZH1fcmVtYXJrc18ke29wdGlvbi5pZH1gXSA9IHJlbWFya0N0cmw7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIG9wdGlvbi5jaGlsZFF1ZXN0aW9uTGlzdD8uZm9yRWFjaCgoY2hpbGRJZDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgY2hpbGRRdWVzID0gdGhpcy5xdWVzdGlvbkJhbmtbY2hpbGRJZF07XHJcbiAgICAgICAgICAgICAgaWYgKGNoaWxkUXVlcykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDb250cm9sRm9yUXVlc3Rpb24oZ3JvdXAsIGNoaWxkUXVlcywgZmFsc2UsIHRydWUsIHFJZCwgb3B0aW9uLm9wdGlvbnM/LmlkID8/IG9wdGlvbi5pZCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjb25zdCBmZyA9IHRoaXMuZmIuZ3JvdXAoZ3JvdXApO1xyXG5cclxuICAgICAgc29ydEJ5T3JkZXIoc2VjdGlvbj8uc2VjdGlvblF1ZXN0aW9uc0xpc3QpPy5mb3JFYWNoKChzcTogU2VjdGlvblF1ZXN0aW9uKSA9PiB7XHJcbiAgICAgICAgY29uc3QgcUlkID0gc3EucXVlc3Rpb25JZDtcclxuICAgICAgICBpZiAoIXFJZCB8fCAhdGhpcy5xdWVzdGlvbkJhbmtbcUlkXSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkJhbmtbcUlkXTtcclxuXHJcbiAgICAgICAgaWYgKHF1ZXN0aW9uLmRlZmF1bHRPcHRpb25zTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICBmZy5nZXQocUlkPy50b1N0cmluZygpKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWwgPT4ge1xyXG4gICAgICAgICAgICBxdWVzdGlvbi5kZWZhdWx0T3B0aW9uc0xpc3Q/LmZvckVhY2goKG9wdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuaXNPcHRpb25TZWxlY3RlZChmZywgcXVlc3Rpb24sIG9wdGlvbi5vcHRpb25zPy5pZCk7XHJcblxyXG4gICAgICAgICAgICAgIGlmIChvcHRpb24ucmVtYXJrc1JlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZW1hcmtDdHJsID0gZmcuZ2V0KGAke3FJZH1fcmVtYXJrc18ke29wdGlvbi5pZH1gKTtcclxuICAgICAgICAgICAgICAgIGlmIChpc1NlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJlbWFya0N0cmw/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICByZW1hcmtDdHJsPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgICAgICAgcmVtYXJrQ3RybD8uc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZW1hcmtDdHJsPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBpZiAob3B0aW9uLmNoaWxkUXVlc3Rpb25MaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbi5jaGlsZFF1ZXN0aW9uTGlzdC5mb3JFYWNoKChjaGlsZElkOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRRdWVzID0gdGhpcy5xdWVzdGlvbkJhbmtbY2hpbGRJZF07XHJcbiAgICAgICAgICAgICAgICAgIGlmIChjaGlsZFF1ZXM/LmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRDdHJsID0gZmcuZ2V0KGNoaWxkUXVlcy5pZD8udG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzU2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRvcnMgPSB0aGlzLmdldFZhbGlkYXRvcnNGb3JRdWVzdGlvbihjaGlsZFF1ZXMsIGNoaWxkUXVlcy5pc01hbmRhdG9yeSB8fCBmYWxzZSkuZmlsdGVyKHYgPT4gISF2KTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNoaWxkQ3RybD8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLmNvbXBvc2UodmFsaWRhdG9ycykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjaGlsZEN0cmw/LmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2hpbGRDdHJsPy5zZXRWYWx1ZShudWxsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRDdHJsPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMucHVzaCh7XHJcbiAgICAgICAgc2VjdGlvbklkOiBzZWN0aW9uLmlkLFxyXG4gICAgICAgIGZvcm1Hcm91cDogZmdcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc2VjdGlvbkVycm9ycy5wdXNoKGZhbHNlKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZW1pdFN0ZXBEZXRhaWxzKCk7XHJcbiAgICB0aGlzLnNob3dMb2FkZXIgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGVtaXRTdGVwRGV0YWlscygpIHtcclxuICAgIGlmICh0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzICYmIHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnN0ZXBDaGFuZ2VkLmVtaXQoe1xyXG4gICAgICAgIGN1cnJlbnRTdGVwSW5kZXg6IHRoaXMuc2VsZWN0ZWRUYWJJbmRleCxcclxuICAgICAgICB0b3RhbFN0ZXBzOiB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLmxlbmd0aCxcclxuICAgICAgICBpc0xhc3RTdGVwOiB0aGlzLnNlbGVjdGVkVGFiSW5kZXggPT09IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMubGVuZ3RoIC0gMVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFkZENvbnRyb2xGb3JRdWVzdGlvbihncm91cDogYW55LCBxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uLCBpc01hbmRhdG9yeTogYm9vbGVhbiA9IGZhbHNlLCBpc0NoaWxkOiBib29sZWFuID0gZmFsc2UsIHBhcmVudElkPzogbnVtYmVyLCBwYXJlbnRPcHRpb25JZD86IG51bWJlcikge1xyXG4gICAgY29uc3QgcUlkID0gcXVlc3Rpb24uaWQ7XHJcbiAgICBpZiAoIXFJZCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHZhbGlkYXRvcnMgPSB0aGlzLmdldFZhbGlkYXRvcnNGb3JRdWVzdGlvbihxdWVzdGlvbiwgaXNNYW5kYXRvcnkpLmZpbHRlcih2ID0+ICEhdik7XHJcbiAgICBsZXQgcHJlZmlsbGVkVmFsdWUgPSB0aGlzLmdldFByZWZpbGxlZEFuc3dlcihxSWQsIGlzQ2hpbGQsIHBhcmVudElkLCBwYXJlbnRPcHRpb25JZCk7XHJcblxyXG4gICAgY29uc3QgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChwcmVmaWxsZWRWYWx1ZSwgVmFsaWRhdG9ycy5jb21wb3NlKHZhbGlkYXRvcnMpKTtcclxuXHJcbiAgICAvLyBEaXNhYmxlIGlmIGFzc2Vzc21lbnQgaXMgY29tcGxldGVkXHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICBjb250cm9sLmRpc2FibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBncm91cFtxSWRdID0gY29udHJvbDtcclxuXHJcbiAgICAvLyBBdHRhY2ggbWFyayBhc3NpZ25tZW50IGNvbnRyb2wgaWYgcmVxdWlyZWRcclxuICAgIGlmICh0aGlzLmVuYWJsZU1hcmtzICYmIHRoaXMuc2hvdWxkU2hvd01hcmtzRHJvcGRvd24ocXVlc3Rpb24pKSB7XHJcbiAgICAgIGxldCBtYXJrVmFsdWUgPSB0aGlzLmdldFByZWZpbGxlZE1hcmsocUlkLCBpc0NoaWxkLCBwYXJlbnRJZCwgcGFyZW50T3B0aW9uSWQpO1xyXG4gICAgICBncm91cFtgJHtxSWR9X21hcmtzYF0gPSBuZXcgRm9ybUNvbnRyb2wobWFya1ZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFByZWZpbGxlZE1hcmsocUlkOiBudW1iZXIsIGlzQ2hpbGQ6IGJvb2xlYW4gPSBmYWxzZSwgcGFyZW50SWQ/OiBudW1iZXIsIHBhcmVudE9wdGlvbklkPzogbnVtYmVyKTogYW55IHtcclxuICAgIGlmICghdGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5haWFkZWZhdWx0UmVzcG9uc2VMaXN0KSByZXR1cm4gbnVsbDtcclxuICAgIGNvbnN0IGFuc3dlck9iaiA9IHRoaXMuYXNzZXNzZWVSZXNwb25zZS5haWFkZWZhdWx0UmVzcG9uc2VMaXN0LmZpbmQoKGE6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaXNDaGlsZCkge1xyXG4gICAgICAgIHJldHVybiBhLmNoaWxkUXVlc3Rpb25JZCA9PT0gcUlkICYmIGEuY2hpbGRRdWVzdGlvblBhcmVudFF1ZXN0aW9uSWQgPT09IHBhcmVudElkICYmIGEuY2hpbGREZWZhdWx0T3B0aW9uSWQgPT09IHBhcmVudE9wdGlvbklkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBhLnNlY3Rpb25RdWVzdGlvbj8ucXVlc3Rpb25JZCA9PT0gcUlkICYmICghYS5jaGlsZFF1ZXN0aW9uSWQgfHwgYS5jaGlsZFF1ZXN0aW9uSWQgPT09IDApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBhbnN3ZXJPYmo/Lm1hcmtzID8/IG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXRRdWVzdGlvbldlaWdodChxSWQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhbmtbcUlkXT8ud2VpZ2h0IHx8IDA7XHJcbiAgfVxyXG5cclxuICBzaG91bGRTaG93TWFya3NEcm9wZG93bihxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBhdXRvQXNzaWduZWRUeXBlcyA9IFtcclxuICAgICAgJ1FVRVNUSU9OX1RZUEUuT0JKRUNUSVZFJyxcclxuICAgICAgJ1FVRVNUSU9OX1RZUEUuTVVMVElfU0VMRUNUJ1xyXG4gICAgXTtcclxuICAgIGNvbnN0IGhhc1dlaWdodCA9IHRoaXMuZ2V0UXVlc3Rpb25XZWlnaHQocXVlc3Rpb24uaWQgfHwgMCkgPiAwO1xyXG4gICAgcmV0dXJuICFhdXRvQXNzaWduZWRUeXBlcy5pbmNsdWRlcyhxdWVzdGlvbi5xdWVzdGlvblR5cGU/LmNvZGUgfHwgJycpICYmIGhhc1dlaWdodDtcclxuICB9XHJcblxyXG4gIGdldFByZWZpbGxlZEFuc3dlcihxSWQ6IG51bWJlciwgaXNDaGlsZDogYm9vbGVhbiA9IGZhbHNlLCBwYXJlbnRJZD86IG51bWJlciwgcGFyZW50T3B0aW9uSWQ/OiBudW1iZXIpOiBhbnkge1xyXG4gICAgaWYgKCF0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmFpYWRlZmF1bHRSZXNwb25zZUxpc3QpIHJldHVybiBudWxsO1xyXG5cclxuICAgIGNvbnN0IGFuc3dlck9iaiA9IHRoaXMuYXNzZXNzZWVSZXNwb25zZS5haWFkZWZhdWx0UmVzcG9uc2VMaXN0LmZpbmQoKGE6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaXNDaGlsZCkge1xyXG4gICAgICAgIHJldHVybiBhLmNoaWxkUXVlc3Rpb25JZCA9PT0gcUlkICYmIGEuY2hpbGRRdWVzdGlvblBhcmVudFF1ZXN0aW9uSWQgPT09IHBhcmVudElkICYmIGEuY2hpbGREZWZhdWx0T3B0aW9uSWQgPT09IHBhcmVudE9wdGlvbklkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBhLnNlY3Rpb25RdWVzdGlvbj8ucXVlc3Rpb25JZCA9PT0gcUlkICYmICghYS5jaGlsZFF1ZXN0aW9uSWQgfHwgYS5jaGlsZFF1ZXN0aW9uSWQgPT09IDApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIWFuc3dlck9iaikgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uQmFua1txSWRdO1xyXG4gICAgaWYgKCFxdWVzdGlvbikgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgY29uc3QgcVR5cGUgPSBxdWVzdGlvbi5xdWVzdGlvblR5cGU/LmNvZGU7XHJcblxyXG4gICAgaWYgKHFUeXBlID09PSAnUVVFU1RJT05fVFlQRS5PQkpFQ1RJVkUnKSB7XHJcbiAgICAgIHJldHVybiBhbnN3ZXJPYmoub3B0aW9uSWQ/LmlkO1xyXG4gICAgfSBlbHNlIGlmIChxVHlwZSA9PT0gJ1FVRVNUSU9OX1RZUEUuTVVMVElfU0VMRUNUJyB8fCBxVHlwZSA9PT0gJ1FVRVNUSU9OX1RZUEUuUFJFRkVSRU5DRScpIHtcclxuICAgICAgbGV0IHNvcnRlZExpc3QgPSBbLi4uKGFuc3dlck9iai5kcm9iamVjdGl2ZXJlc3BvbnNlTGlzdCB8fCBbXSldO1xyXG4gICAgICBpZiAocVR5cGUgPT09ICdRVUVTVElPTl9UWVBFLlBSRUZFUkVOQ0UnKSB7XHJcbiAgICAgICAgc29ydGVkTGlzdC5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gKGEub3JkZXJObyB8fCAwKSAtIChiLm9yZGVyTm8gfHwgMCkpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzb3J0ZWRMaXN0Lm1hcCgocjogYW55KSA9PiByLmRlZmF1bHRPcHRpb24/Lm9wdGlvbnMpIHx8IFtdO1xyXG4gICAgfSBlbHNlIGlmIChxVHlwZSA9PT0gJ1FVRVNUSU9OX1RZUEUuRklMRV9VUExPQUQnKSB7XHJcbiAgICAgIHJldHVybiBhbnN3ZXJPYmouYXR0YWNobWVudFJlc3BvbnNlTGlzdCB8fCBbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBhbnN3ZXJPYmouZHJzdWJqZWN0aXZlcmVzcG9uc2VMaXN0Py5bMF0/LnJlc3BvbnNlVGV4dCA/PyBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VmFsaWRhdG9yc0ZvclF1ZXN0aW9uKHF1ZXN0aW9uOiBBc3Nlc3NtZW50UXVlc3Rpb24sIGlzTWFuZGF0b3J5OiBib29sZWFuKTogYW55W10ge1xyXG4gICAgY29uc3QgdmFsaWRhdG9yczogYW55W10gPSBbXTtcclxuICAgIGlmIChpc01hbmRhdG9yeSkge1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHF1ZXN0aW9uLnJlc3BvbnNlVmFsaWRhdGlvbj8ubGVuZ3RoKSB7XHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4ocXVlc3Rpb24ucmVzcG9uc2VWYWxpZGF0aW9uKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocXVlc3Rpb24ucXVlc3Rpb25UeXBlPy5jb2RlID09PSAnUVVFU1RJT05fVFlQRS5FTUFJTCcpIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKC9eW2EtekEtWjAtOS5fJSstXStAW2EtekEtWjAtOS4tXStcXC5bYS16QS1aXXsyLH0kLykpO1xyXG4gICAgICB9IGVsc2UgaWYgKHF1ZXN0aW9uLnF1ZXN0aW9uVHlwZT8uY29kZSA9PT0gJ1FVRVNUSU9OX1RZUEUuVVJMJykge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oL14oaHR0cHM/OlxcL1xcLyk/KFtcXHdcXC1dKyhcXC5bXFx3XFwtXSspKykoW1xcLz8jXS4qKT8kL2kpKTtcclxuICAgICAgfSBlbHNlIGlmIChxdWVzdGlvbi5xdWVzdGlvblR5cGU/LmNvZGUgPT09ICdRVUVTVElPTl9UWVBFLkNPTlRBQ1RfTlVNQkVSJykge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oL15bMC05XXsxMH0kLykpO1xyXG4gICAgICB9IGVsc2UgaWYgKHF1ZXN0aW9uLnF1ZXN0aW9uVHlwZT8uY29kZSA9PT0gJ1FVRVNUSU9OX1RZUEUuTlVNQkVSJykge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oL15bMC05XSskLykpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHF1ZXN0aW9uLnF1ZXN0aW9uQ29uZmlncyAmJiBxdWVzdGlvbi5xdWVzdGlvbkNvbmZpZ3MubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBtaW5DaGFyID0gcXVlc3Rpb24ucXVlc3Rpb25Db25maWdzLmZpbmQoYyA9PiBjLmNvbmZpZ0tleSA9PT0gJ21pbkNoYXJhY3RlckNvdW50Jyk/LmNvbmZpZ1ZhbHVlO1xyXG4gICAgICBpZiAobWluQ2hhcikgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKE51bWJlcihtaW5DaGFyKSkpO1xyXG5cclxuICAgICAgY29uc3QgbWF4Q2hhciA9IHF1ZXN0aW9uLnF1ZXN0aW9uQ29uZmlncy5maW5kKGMgPT4gYy5jb25maWdLZXkgPT09ICdtYXhDaGFyYWN0ZXJDb3VudCcpPy5jb25maWdWYWx1ZTtcclxuICAgICAgaWYgKG1heENoYXIpIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aChOdW1iZXIobWF4Q2hhcikpKTtcclxuXHJcbiAgICAgIGNvbnN0IG1pbk9wdCA9IHF1ZXN0aW9uLnF1ZXN0aW9uQ29uZmlncy5maW5kKGMgPT4gYy5jb25maWdLZXkgPT09ICdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKT8uY29uZmlnVmFsdWU7XHJcbiAgICAgIGlmIChtaW5PcHQpIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goKGNvbnRyb2w6IEZvcm1Db250cm9sKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgY29udHJvbC52YWx1ZS5sZW5ndGggPCBOdW1iZXIobWluT3B0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBtaW5PcHRpb25zOiB7IHJlcXVpcmVkOiBOdW1iZXIobWluT3B0KSwgYWN0dWFsOiBjb250cm9sLnZhbHVlPy5sZW5ndGggfHwgMCB9IH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgbWF4T3B0ID0gcXVlc3Rpb24ucXVlc3Rpb25Db25maWdzLmZpbmQoYyA9PiBjLmNvbmZpZ0tleSA9PT0gJ21heGltdW1OdW1iZXJPZk9wdGlvbicpPy5jb25maWdWYWx1ZTtcclxuICAgICAgaWYgKG1heE9wdCkge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaCgoY29udHJvbDogRm9ybUNvbnRyb2wpID0+IHtcclxuICAgICAgICAgIGlmIChjb250cm9sLnZhbHVlICYmIGNvbnRyb2wudmFsdWUubGVuZ3RoID4gTnVtYmVyKG1heE9wdCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgbWF4T3B0aW9uczogeyByZXF1aXJlZDogTnVtYmVyKG1heE9wdCksIGFjdHVhbDogY29udHJvbC52YWx1ZT8ubGVuZ3RoIHx8IDAgfSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IG1heEZpbGVzID0gcXVlc3Rpb24ucXVlc3Rpb25Db25maWdzLmZpbmQoYyA9PiBjLmNvbmZpZ0tleSA9PT0gJ21heE5vT2ZGaWxlcycpPy5jb25maWdWYWx1ZTtcclxuICAgICAgaWYgKG1heEZpbGVzKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKChjb250cm9sOiBGb3JtQ29udHJvbCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgY29udHJvbC52YWx1ZS5sZW5ndGggPiBOdW1iZXIobWF4RmlsZXMpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IG1heEZpbGVzOiB7IHJlcXVpcmVkOiBOdW1iZXIobWF4RmlsZXMpLCBhY3R1YWw6IGNvbnRyb2wudmFsdWU/Lmxlbmd0aCB8fCAwIH0gfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBtYXhGaWxlU2l6ZSA9IHF1ZXN0aW9uLnF1ZXN0aW9uQ29uZmlncy5maW5kKGMgPT4gYy5jb25maWdLZXkgPT09ICdtYXhGaWxlU2l6ZScpPy5jb25maWdWYWx1ZTtcclxuICAgICAgaWYgKG1heEZpbGVTaXplKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKChjb250cm9sOiBGb3JtQ29udHJvbCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgQXJyYXkuaXNBcnJheShjb250cm9sLnZhbHVlKSkge1xyXG4gICAgICAgICAgICBjb25zdCBoYXNMYXJnZUZpbGUgPSBjb250cm9sLnZhbHVlLnNvbWUoKGZpbGU6IGFueSkgPT4gZmlsZT8uc2l6ZSAmJiBmaWxlLnNpemUgPiAoTnVtYmVyKG1heEZpbGVTaXplKSAqIDEwMjQgKiAxMDI0KSk7XHJcbiAgICAgICAgICAgIGlmIChoYXNMYXJnZUZpbGUpIHtcclxuICAgICAgICAgICAgICByZXR1cm4geyBtYXhGaWxlU2l6ZTogeyByZXF1aXJlZFNpemU6IE51bWJlcihtYXhGaWxlU2l6ZSkgfSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbGlkYXRvcnM7XHJcbiAgfVxyXG5cclxuICBpbWFnZUVycm9ySGFuZGxlcihldmVudDogYW55LCBmaWxlUGF0aDogc3RyaW5nKSB7XHJcbiAgICBldmVudC50YXJnZXQuc3JjID0gZmlsZVBhdGg7XHJcbiAgfVxyXG5cclxuICBpc09wdGlvblNlbGVjdGVkKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uLCBvcHRpb25JZDogbnVtYmVyIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIW9wdGlvbklkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNvbnRyb2xOYW1lID0gcXVlc3Rpb24uaWQ/LnRvU3RyaW5nKCk7XHJcblxyXG4gICAgaWYgKCFjb250cm9sTmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lKTtcclxuICAgIGlmICghY29udHJvbCB8fCBjb250cm9sLnZhbHVlID09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAvLyBNdWx0aS1zZWxlY3QgZGVhbHMgd2l0aCBhbiBhcnJheSBvZiB2YWx1ZXNcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiBjb250cm9sLnZhbHVlLmluY2x1ZGVzKG9wdGlvbklkKSB8fCBjb250cm9sLnZhbHVlLnNvbWUoKHZhbDogYW55KSA9PiB2YWw/LmlkID09PSBvcHRpb25JZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gT2JqZWN0aXZlIC8gU2luZ2xlIHNlbGVjdCBkZWFscyB3aXRoIGEgc2luZ2xlIHZhbHVlIChjb3VsZCBiZSBpbnRlZ2VyIElEIG9yIG9iamVjdClcclxuICAgIGlmICh0eXBlb2YgY29udHJvbC52YWx1ZSA9PT0gJ29iamVjdCcgJiYgY29udHJvbC52YWx1ZS5pZCkge1xyXG4gICAgICByZXR1cm4gY29udHJvbC52YWx1ZS5pZCA9PT0gb3B0aW9uSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbnRyb2wudmFsdWUgPT09IG9wdGlvbklkO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWF4Q2hhckNvdW50KHF1ZXN0aW9uOiBBc3Nlc3NtZW50UXVlc3Rpb24pOiBudW1iZXIge1xyXG4gICAgY29uc3QgY29uZmlnID0gcXVlc3Rpb24/LnF1ZXN0aW9uQ29uZmlncz8uZmluZChjID0+IGMuY29uZmlnS2V5ID09PSAnbWF4Q2hhcmFjdGVyQ291bnQnKTtcclxuICAgIHJldHVybiBjb25maWcgPyBOdW1iZXIoY29uZmlnLmNvbmZpZ1ZhbHVlKSA6IDA7XHJcbiAgfVxyXG5cclxuICBnZXRSZW1haW5pbmdDaGFycyhxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uLCBjb250cm9sOiBhbnkpOiBudW1iZXIge1xyXG4gICAgY29uc3QgbWF4ID0gdGhpcy5nZXRNYXhDaGFyQ291bnQocXVlc3Rpb24pO1xyXG4gICAgY29uc3QgY3VycmVudExlbmd0aCA9IGNvbnRyb2wudmFsdWUgPyBjb250cm9sLnZhbHVlLmxlbmd0aCA6IDA7XHJcbiAgICByZXR1cm4gbWF4IC0gY3VycmVudExlbmd0aDtcclxuICB9XHJcblxyXG4gIGdvQmFjaygpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkVGFiSW5kZXggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleC0tO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvdWxkRGlzYWJsZVRhYihpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGluZGV4OyBqKyspIHtcclxuICAgICAgaWYgKHRoaXMuc2VjdGlvbkZvcm1Hcm91cHNbal0/LmZvcm1Hcm91cD8uaW52YWxpZCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnb05leHQoc2F2ZURhdGE6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBjb25zdCBzYXZlID0gdGhpcy5hc3Nlc3NtZW50RGF0YT8uYXNzZXNzbWVudENvbmZpZ3M/LmZpbmQoYyA9PiBjLmNvbmZpZ0tleSA9PSAnYXNzZXNtZW50LmNvbmZpZy5hbGxvd2VkLXBhcnRpYWwtcmVzcG9uc2UnKT8uY29uZmlnVmFsdWUgPT0gJzEnO1xyXG4gICAgY29uc3QgY3VycmVudFNlY3Rpb24gPSB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzW3RoaXMuc2VsZWN0ZWRUYWJJbmRleF07XHJcbiAgICBpZiAoIWN1cnJlbnRTZWN0aW9uKSByZXR1cm47XHJcblxyXG4gICAgY3VycmVudFNlY3Rpb24uZm9ybUdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuXHJcbiAgICBpZiAoY3VycmVudFNlY3Rpb24uZm9ybUdyb3VwLmludmFsaWQpIHtcclxuICAgICAgdGhpcy5zZWN0aW9uRXJyb3JzW3RoaXMuc2VsZWN0ZWRUYWJJbmRleF0gPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWN0aW9uRXJyb3JzW3RoaXMuc2VsZWN0ZWRUYWJJbmRleF0gPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFRhYkluZGV4IDwgdGhpcy5zZWN0aW9uRm9ybUdyb3Vwcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgIHNhdmUgJiYgc2F2ZURhdGEgPyB0aGlzLnNhdmUoKSA6IHRoaXMuc2VsZWN0ZWRUYWJJbmRleCsrO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wcm9jZXNzU3VibWl0KHNhdmVEYXRhKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cGFuZGVkU3RhdGU6IGJvb2xlYW5bXSA9IFtdO1xyXG5cclxuICBwcm9jZXNzU3VibWl0KHNhdmVEYXRhOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgbGV0IGZpcnN0SW52YWxpZEluZGV4ID0gLTE7XHJcbiAgICB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLmZvckVhY2goKGdyb3VwLCBpbmRleCkgPT4ge1xyXG4gICAgICBncm91cC5mb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICBpZiAoZ3JvdXAuZm9ybUdyb3VwLmludmFsaWQpIHtcclxuICAgICAgICB0aGlzLnNlY3Rpb25FcnJvcnNbaW5kZXhdID0gdHJ1ZTtcclxuICAgICAgICBpZiAoZmlyc3RJbnZhbGlkSW5kZXggPT09IC0xKSBmaXJzdEludmFsaWRJbmRleCA9IGluZGV4O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VjdGlvbkVycm9yc1tpbmRleF0gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGZpcnN0SW52YWxpZEluZGV4ICE9PSAtMSkge1xyXG4gICAgICBpZiAoIXRoaXMudmVydGljYWxWaWV3KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gZmlyc3RJbnZhbGlkSW5kZXg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZFN0YXRlW2ZpcnN0SW52YWxpZEluZGV4XSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5GSVhfRVJST1JTJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgIHRoaXMuc2Nyb2xsVG9GaXJzdEludmFsaWRGaWVsZChmaXJzdEludmFsaWRJbmRleCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNhdmUodHJ1ZSwgc2F2ZURhdGEpO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsVG9GaXJzdEludmFsaWRGaWVsZChzZWN0aW9uSW5kZXg6IG51bWJlcikge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHNbc2VjdGlvbkluZGV4XS5mb3JtR3JvdXA7XHJcbiAgICAgIGZvciAoY29uc3QgY29udHJvbE5hbWUgaW4gZm9ybUdyb3VwLmNvbnRyb2xzKSB7XHJcbiAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0uaW52YWxpZCkge1xyXG4gICAgICAgICAgbGV0IHFJZCA9IGNvbnRyb2xOYW1lO1xyXG4gICAgICAgICAgaWYgKGNvbnRyb2xOYW1lLmluY2x1ZGVzKCdfcmVtYXJrc18nKSB8fCBjb250cm9sTmFtZS5pbmNsdWRlcygnX21hcmtzJykpIHtcclxuICAgICAgICAgICAgcUlkID0gY29udHJvbE5hbWUuc3BsaXQoJ18nKVswXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcXVlc3Rpb24tY29udGFpbmVyLSR7cUlkfWApO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICBzYXZlKGdvTmV4dDogYm9vbGVhbiA9IHRydWUsIHNhdmVEYXRhOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKSByZXR1cm47XHJcbiAgICB0aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgaWYgKHRoaXMubWFya0FzQ29tcGxldGVkICYmICh0aGlzLnNlbGVjdGVkVGFiSW5kZXggPT0gdGhpcy5zZWN0aW9uRm9ybUdyb3Vwcy5sZW5ndGggLSAxIHx8IHRoaXMudmVydGljYWxWaWV3KSkge1xyXG4gICAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZS5hc3Nlc3NtZW50VGFrZW4gPSB7IGNvZGU6ICdBU1NFU1NNRU5UX1RBS0VOLkNPTVBMRVRFJyB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZS5hc3Nlc3NtZW50VGFrZW4gPSB7IGNvZGU6ICdBU1NFU1NNRU5UX1RBS0VOLklOQ09NUExFVEUnIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5yZXNwb25zZUJ1aWxkZXJTZXJ2aWNlLmJ1aWxkUmVzcG9uc2VQYXlsb2FkKFxyXG4gICAgICB0aGlzLmFzc2Vzc2VlUmVzcG9uc2UsXHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLFxyXG4gICAgICB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLFxyXG4gICAgICB0aGlzLnF1ZXN0aW9uQmFuayxcclxuICAgICAgdGhpcy50ZW5hbnRJZFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAodGhpcy5zaG93T3ZlcmFsbFJlbWFya3MgJiYgdGhpcy5hc3Nlc3NlZVJlc3BvbnNlKSB7XHJcbiAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZS5ub3RlcyA9IHRoaXMub3ZlcmFsbE5vdGVzQ3RybC52YWx1ZSB8fCBudWxsO1xyXG4gICAgICBwYXlsb2FkLm5vdGVzID0gdGhpcy5hc3Nlc3NlZVJlc3BvbnNlLm5vdGVzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghc2F2ZURhdGEgfHwgKHRoaXMuZGlzYWJsZWQgJiYgIXRoaXMuZW5hYmxlTWFya3MpKSB7XHJcbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc3VibWl0QXNzZXNzbWVudC5lbWl0KHtcclxuICAgICAgICBhc3Nlc3NlZUlkOiB0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmlkLFxyXG4gICAgICAgIGFzc2Vzc2VlUmVzcG9uc2U6IHBheWxvYWQsXHJcbiAgICAgICAgY29tcGxldGVkOiBnb05leHQgJiYgKHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9PSB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLmxlbmd0aCAtIDEgfHwgdGhpcy52ZXJ0aWNhbFZpZXcpXHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoZ29OZXh0ICYmIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA8IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCsrO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBhcGlDYWxsID0gdGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5pZCA/IHRoaXMuYXNzZXNzbWVudFRha2VyU2VydmljZS5wYXRjaEFzc2Vzc21lbnQocGF5bG9hZCkgOiB0aGlzLmFzc2Vzc21lbnRUYWtlclNlcnZpY2Uuc3VibWl0QXNzZXNzbWVudChwYXlsb2FkKTtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkICYmIHRoaXMuZW5hYmxlTWFya3MpIHtcclxuICAgICAgY29uc3QgbWFya3NQYXlsb2FkOiBhbnkgPSB0aGlzLnJlc3BvbnNlQnVpbGRlclNlcnZpY2UuYnVpbGRNYXJrc1BheWxvYWQocGF5bG9hZCk7XHJcbiAgICAgIGlmICh0aGlzLnNob3dPdmVyYWxsUmVtYXJrcykge1xyXG4gICAgICAgIG1hcmtzUGF5bG9hZC5ub3RlcyA9IHRoaXMub3ZlcmFsbE5vdGVzQ3RybC52YWx1ZSB8fCBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGFwaUNhbGwgPSB0aGlzLmFzc2Vzc21lbnRUYWtlclNlcnZpY2UudXBkYXRlTWFya3MobWFya3NQYXlsb2FkKTtcclxuICAgIH1cclxuICAgIGFwaUNhbGwuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmlkKSB7XHJcbiAgICAgICAgICB0aGlzLmdldEFuc3dlcnNCeUFpYUlkKHJlcyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZSA9IHJlcztcclxuICAgICAgICAgIHRoaXMub3ZlcmFsbE5vdGVzQ3RybC5zZXRWYWx1ZSh0aGlzLmFzc2Vzc2VlUmVzcG9uc2Uubm90ZXMgfHwgJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3VibWl0QXNzZXNzbWVudC5lbWl0KHtcclxuICAgICAgICAgIGFzc2Vzc2VlSWQ6IHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uaWQgfHwgcmVzLFxyXG4gICAgICAgICAgYXNzZXNzZWVSZXNwb25zZTogdGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5pZCA/IHRoaXMuYXNzZXNzZWVSZXNwb25zZSA6IHBheWxvYWQsXHJcbiAgICAgICAgICBjb21wbGV0ZWQ6IGdvTmV4dCAmJiAodGhpcy5zZWxlY3RlZFRhYkluZGV4ID09IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMubGVuZ3RoIC0gMSB8fCB0aGlzLnZlcnRpY2FsVmlldylcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoZ29OZXh0ICYmIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA8IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5TQVZFX0ZBSUxFRCddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogdGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5pZCA/ICdQQVRDSCcgOiAnUE9TVCcsIHBheWxvYWQgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEFuc3dlcnNCeUFpYUlkKGFzc2Vzc2VlSWQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5hc3Nlc3NtZW50VGFrZXJTZXJ2aWNlLmdldEFuc3dlcnNCeUFpYUlkKGFzc2Vzc2VlSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZSA9IHJlcztcclxuICAgICAgICB0aGlzLm92ZXJhbGxOb3Rlc0N0cmwuc2V0VmFsdWUodGhpcy5hc3Nlc3NlZVJlc3BvbnNlLm5vdGVzIHx8ICcnKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkdFVF9GQUlMRUQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdHRVQnIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhZGRZb3V0dWJlSWZyYW1lU3JjKHZpZGVvVXJsOiBzdHJpbmcpIHtcclxuICAgIGlmICghdmlkZW9VcmwpIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHRoaXMueW91dHViZVVybENhY2hlW3ZpZGVvVXJsXSkge1xyXG4gICAgICByZXR1cm4gdGhpcy55b3V0dWJlVXJsQ2FjaGVbdmlkZW9VcmxdO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdmlkZW9JZCA9IHRoaXMuZ2V0VmlkZW9JZCh2aWRlb1VybCk7XHJcbiAgICBjb25zdCB5b3V0dWJlVXJsID0gYGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7dmlkZW9JZH1gO1xyXG4gICAgdGhpcy55b3V0dWJlVXJsQ2FjaGVbdmlkZW9VcmxdID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHlvdXR1YmVVcmwpO1xyXG4gICAgcmV0dXJuIHRoaXMueW91dHViZVVybENhY2hlW3ZpZGVvVXJsXTtcclxuICB9XHJcblxyXG4gIGdldFZpZGVvSWQodmlkZW9Vcmw6IHN0cmluZykge1xyXG4gICAgbGV0IHBhdHRlcm4gPSBudWxsO1xyXG4gICAgaWYgKHZpZGVvVXJsLmluY2x1ZGVzKCd5b3V0dWJlLmNvbScpKSB7XHJcbiAgICAgIHBhdHRlcm4gPSAvKD86XFw/dj18JnY9fHlvdXR1XFwuYmVcXC98XFwvZW1iZWRcXC98XFwvXFxkXFwvfFxcL3ZpXFwvfFxcL3ZcXC98aHR0cHM/OlxcL1xcLyg/Ond3d1xcLik/eW91dHViZVxcLmNvbVxcLyg/OnZcXC98ZW1iZWRcXC98d2F0Y2hcXD8oPzpcXFMrJik/dj18d2F0Y2hcXD8oPzpcXFMrJik/dmk9fFxcUytcXC8pKShbYS16QS1aMC05Xy1dezExfSkvO1xyXG4gICAgfSBlbHNlIGlmICh2aWRlb1VybC5pbmNsdWRlcygneW91dHUuYmUnKSkge1xyXG4gICAgICBwYXR0ZXJuID0gL3lvdXR1XFwuYmVcXC8oW2EtekEtWjAtOV8tXXsxMX0pLztcclxuICAgIH1cclxuICAgIGlmIChwYXR0ZXJuKSB7XHJcbiAgICAgIGNvbnN0IG1hdGNoID0gdmlkZW9VcmwubWF0Y2gocGF0dGVybik7XHJcbiAgICAgIGlmIChtYXRjaCAmJiBtYXRjaFsxXSkge1xyXG4gICAgICAgIHJldHVybiBtYXRjaFsxXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBvcGVuSW5zdHJ1Y3Rpb25zRGlhbG9nKHNlY3Rpb246IFF1ZXN0aW9uUGFwZXJTZWN0aW9uKSB7XHJcbiAgICB0aGlzLmRpYWxvZy5vcGVuKFNlY3Rpb25JbnN0cnVjdGlvbnNDb21wb25lbnQsIHtcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgbWF4V2lkdGg6ICc5NSUnLFxyXG4gICAgICB3aWR0aDogJ2NhbGMoMjByZW0gKyA1MDBweCknLFxyXG4gICAgICBtYXhIZWlnaHQ6ICc5NWR2aCcsXHJcbiAgICAgIHBhbmVsQ2xhc3M6IFsnYXNzZXNzbWVudC1kaWFsb2cnXSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIGltYWdlQ29uZmlnOiB0aGlzLmltYWdlQ29uZmlnLFxyXG4gICAgICAgIGxhYmVsQ29uZmlnOiB0aGlzLmxhYmVsQ29uZmlnLFxyXG4gICAgICAgIHNlY3Rpb25EZXRhaWxzOiBzZWN0aW9uLFxyXG4gICAgICAgIHlvdXR1YmVVcmxDYWNoZTogdGhpcy55b3V0dWJlVXJsQ2FjaGVcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tNYXhWYWwoZXZlbnQ6IGFueSwgY29udHJvbDogYW55LCBtYXhWYWw6IG51bWJlciB8IHVuZGVmaW5lZCkge1xyXG4gICAgY29uc3QgdG90YWxNYXJrcyA9IE51bWJlcihtYXhWYWwpIHx8IDA7XHJcbiAgICBpZiAodG90YWxNYXJrcyA+IDApIHtcclxuICAgICAgbGV0IHZhbCA9IE51bWJlcihldmVudC50YXJnZXQudmFsdWUpO1xyXG4gICAgICBpZiAodmFsID4gdG90YWxNYXJrcykge1xyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IHRvdGFsTWFya3M7XHJcbiAgICAgICAgY29udHJvbD8uc2V0VmFsdWUodG90YWxNYXJrcywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuU2tpbGxBbGxvY2F0aW9uRGlhbG9nKHNraWxsTGlzdD86IFNraWxsU2NvcmVbXSkge1xyXG4gICAgdGhpcy5kaWFsb2cub3BlbihTa2lsbEFsbG9jYXRpb25Db21wb25lbnQsIHtcclxuICAgICAgbWF4SGVpZ2h0OiAnOTVkdmgnLFxyXG4gICAgICBtYXhXaWR0aDogJzkwdncnLFxyXG4gICAgICB3aWR0aDogJzM1cmVtJyxcclxuICAgICAgcGFuZWxDbGFzczogWydhc3Nlc3NtZW50LWRpYWxvZyddLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgbGFiZWw6IHRoaXMubGFiZWxDb25maWcsXHJcbiAgICAgICAgc2tpbGxMaXN0XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwiY29uZmlnc0xvYWRlZCAmJiAhc2hvd0xvYWRlcjsgZWxzZSBsb2FkZXJcIiBjbGFzcz1cImNvbC0xMiBoLTEwMFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBoLTEwMCBwdC0yIHBiLTRcIiBbY2xhc3MuaGVpZ2h0LXdpdGhvdXQtZm9vdGVyXT1cInNob3dGb290ZXJcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICA8bWF0LXRhYi1ncm91cCAqbmdJZj1cIiF2ZXJ0aWNhbFZpZXdcIiBhbmltYXRpb25EdXJhdGlvbj1cIjBtc1wiIGNsYXNzPVwiYXNzZXNzbWVudC1tYXQtY3VzdG9tLXRhYnNcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhc3Nlc3NtZW50LWhpZGUtdGFicyc6IGhpZGVTZWN0aW9uVGFic31cIiBbKHNlbGVjdGVkSW5kZXgpXT1cInNlbGVjdGVkVGFiSW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtdGFiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdCB8IG9yZGVyQnk7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzaG91bGREaXNhYmxlVGFiKGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdC10YWItbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlY3Rpb25FcnJvcnNbaV0gPyAnYXNzZXNzbWVudC10ZXh0LWRhbmdlcicgOiAnJ1wiPnt7c2VjdGlvbi5xcHNOYW1lPy5bMF0/LnRleHR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VjdGlvbkNvbnRlbnQ7IGNvbnRleHQ6IHsgc2VjdGlvbjogc2VjdGlvbiwgaTogaSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L21hdC10YWI+XHJcbiAgICAgICAgICAgIDwvbWF0LXRhYi1ncm91cD5cclxuXHJcbiAgICAgICAgICAgIDxtYXQtYWNjb3JkaW9uICpuZ0lmPVwidmVydGljYWxWaWV3XCIgbXVsdGk9XCJ0cnVlXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTRcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdCB8IG9yZGVyQnk7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtleHBhbmRlZF09XCJleHBhbmRlZFN0YXRlW2ldICE9PSBmYWxzZVwiIChvcGVuZWQpPVwiZXhwYW5kZWRTdGF0ZVtpXSA9IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbG9zZWQpPVwiZXhwYW5kZWRTdGF0ZVtpXSA9IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gc2hhZG93LW5vbmUgbS0wIGFzc2Vzc21lbnQtcGFuZWwgYmctdHJhbnNwYXJlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LWJnLWdyZXktdHdvIGgtYXV0byBhc3Nlc3NtZW50LXBhbmVsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtMiBjb2wtMTIgcGUtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlY3Rpb25FcnJvcnNbaV0gPyAnYXNzZXNzbWVudC10ZXh0LWRhbmdlcicgOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2VjdGlvbi5xcHNOYW1lPy5bMF0/LnRleHR9fTwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VjdGlvbldpc2VTY29yZT8uW3NlY3Rpb24/LmlkXSBhcyBzZWN0aW9uU2NvcmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiKHNlY3Rpb25TY29yZT8udG90YWxNYXJrcyA/PyAwKSA+IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgYXNzZXNzbWVudC10ZXh0LXByaW1hcnktZm91clwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIihzZWN0aW9uU2NvcmU/LnNraWxsU2NvcmVzPy5sZW5ndGggPz8gMCkgPiAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMSBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW4gcHgtMiBweS0xIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gc2tpbGwtY2hpcCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvcGVuU2tpbGxBbGxvY2F0aW9uRGlhbG9nKHNlY3Rpb25TY29yZT8uc2tpbGxTY29yZXMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3NlY3Rpb25TY29yZT8uc2tpbGxTY29yZXM/Lmxlbmd0aH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuU0tJTExTJ119fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwid2hpdGUtc3BhY2Utbm93cmFwIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE1IG1lLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuU0NPUkUnXX19Ojwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2VjdGlvblNjb3JlLm9idGFpbmVkTWFya3MgfHwgMH19L3t7c2VjdGlvblNjb3JlLnRvdGFsTWFya3N9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInNlY3Rpb25Db250ZW50OyBjb250ZXh0OiB7IHNlY3Rpb246IHNlY3Rpb24sIGk6IGkgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgICAgICAgICA8L21hdC1hY2NvcmRpb24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaC0xMDAgZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0zXCI+XHJcbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uTk9fUVVFU1RJT05TJ11cIiBjbGFzcz1cImNvbC1zbS1hdXRvIGNvbC02XCJcclxuICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9uby1xdWVzdGlvbnMuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE4XCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk5PX1FVRVNUSU9OUyddfX08L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd092ZXJhbGxSZW1hcmtzICYmIGFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YT8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0Py5sZW5ndGhcIiBjbGFzcz1cIm10LTNcIj5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE1IG1iLTJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuT1ZFUkFMTF9SRU1BUktTJ119fTwvcD5cclxuICAgICAgICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMyBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgb3V0bGluZS0wIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIlxyXG4gICAgICAgICAgICAgICAgcm93cz1cIjNcIiBbZm9ybUNvbnRyb2xdPVwib3ZlcmFsbE5vdGVzQ3RybFwiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5SRU1BUktTJ11cIj48L3RleHRhcmVhPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwic2hvd0Zvb3RlclwiXHJcbiAgICAgICAgY2xhc3M9XCJiZy13aGl0ZSBwLTMgcG9zaXRpb24tc3RpY2t5IGJvdHRvbS0wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWVuZCBib3JkZXItdG9wIGdhcC0zIHotaW5kZXgtMVwiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC1idXR0b24tcGFkZGluZy1sYXJnZSBhc3Nlc3NtZW50LWJ0bi1wcmltYXJ5LXRyYW5zcGFyZW50IGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xM1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJnb0JhY2soKVwiICpuZ0lmPVwic2VsZWN0ZWRUYWJJbmRleCA+IDAgJiYgIXZlcnRpY2FsVmlld1wiPlxyXG4gICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuR09fQkFDSyddfX08L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc1N1Ym1pdHRpbmdcIiAoY2xpY2spPVwidmVydGljYWxWaWV3ID8gcHJvY2Vzc1N1Ym1pdCh0cnVlKSA6IGdvTmV4dCgpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC1idXR0b24tcGFkZGluZy1sYXJnZSBhc3Nlc3NtZW50LWJ0bi1wcmltYXJ5IGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMyBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJ7J29wYWNpdHktMCc6IGlzU3VibWl0dGluZ31cIj5cclxuICAgICAgICAgICAgICAgIHt7ICh2ZXJ0aWNhbFZpZXcgfHwgc2VsZWN0ZWRUYWJJbmRleCA9PT0gc2VjdGlvbkZvcm1Hcm91cHMubGVuZ3RoIC0gMSkgP1xyXG4gICAgICAgICAgICAgICAgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5TVUJNSVQnXSA6IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTkVYVCddIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPG1hdC1zcGlubmVyICpuZ0lmPVwiaXNTdWJtaXR0aW5nXCIgW2RpYW1ldGVyXT1cIjIwXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgdG9wLTUwIHN0YXJ0LTUwIHRyYW5zbGF0ZS1taWRkbGUgYXNzZXNzbWVudC1zcGlubmVyLXdoaXRlXCI+PC9tYXQtc3Bpbm5lcj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbG9hZGVyPlxyXG4gICAgPGRpdiBjbGFzcz1cImgtMTAwIGNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcHktNVwiPlxyXG4gICAgICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjYwXCIgY2xhc3M9XCJhc3Nlc3NtZW50LXNwaW5uZXItcHJpbWFyeVwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gUmVjdXJzaXZlIFRlbXBsYXRlIGZvciBRdWVzdGlvbnMgJiBDaGlsZCBRdWVzdGlvbnMgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjcXVlc3Rpb25UZW1wbGF0ZSBsZXQtcXVlc3Rpb25JZD1cInF1ZXN0aW9uSWRcIiBsZXQtaXNNYW5kYXRvcnk9XCJpc01hbmRhdG9yeVwiIGxldC1ncm91cEluZGV4PVwiZ3JvdXBJbmRleFwiXHJcbiAgICBsZXQtcGFyZW50T3B0aW9uSWQ9XCJwYXJlbnRPcHRpb25JZFwiIGxldC1zZXF1ZW5jZT1cInNlcXVlbmNlXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwic2VjdGlvbkZvcm1Hcm91cHNbZ3JvdXBJbmRleF0uZm9ybUdyb3VwXCIgW2Zvcm1Hcm91cF09XCJzZWN0aW9uRm9ybUdyb3Vwc1tncm91cEluZGV4XS5mb3JtR3JvdXBcIlxyXG4gICAgICAgIFtpZF09XCIncXVlc3Rpb24tY29udGFpbmVyLScgKyBxdWVzdGlvbklkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC1iZy13aGl0ZVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsncC0zIGFzc2Vzc21lbnQtY2FyZC1ib3JkZXInOiAhcGFyZW50T3B0aW9uSWR9XCIgKm5nSWY9XCJxdWVzdGlvbkJhbmtbcXVlc3Rpb25JZF0gYXMgcXVlc3Rpb25cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LW1kLXJvdyBmbGV4LWNvbHVtbiBnYXAtMiBhbGlnbi1pdGVtcy1zdGFydFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIGQtZmxleCBhbGlnbi1pdGVtcy1zdGFydCBnYXAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xNVwiICpuZ0lmPVwic2VxdWVuY2VcIj57e3NlcXVlbmNlfX0uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yIGFsaWduLWl0ZW1zLXN0YXJ0IGNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE1IG1iLTAgZC1mbGV4IGdhcC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySHRtbF09XCJxdWVzdGlvbi5xdWVzdGlvblRleHQ/LlswXT8udGV4dFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNNYW5kYXRvcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTEgYXNzZXNzbWVudC10ZXh0LWdyZXktZWlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoe3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1BTkRBVE9SWSddfX0pPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIGNvbC0xMlwiICpuZ0lmPVwicXVlc3Rpb24/Lm1lZGlhVXJsPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJWaWRlb1RlbXBsYXRlOyBjb250ZXh0Ont2aWRlb1VybDpxdWVzdGlvbj8ubWVkaWFVcmx9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVzdGlvbi5oaW50VGV4dD8ubGVuZ3RoICYmICFwcmV2aWV3TW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uSU5GTyddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2luZm8uc3ZnJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZGtPdmVybGF5T3JpZ2luICN0cmlnZ2VyPVwiY2RrT3ZlcmxheU9yaWdpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInRvb2x0aXBTdGF0ZVtxdWVzdGlvbi5pZCFdID0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cInRvb2x0aXBTdGF0ZVtxdWVzdGlvbi5pZCFdID0gZmFsc2VcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrQ29ubmVjdGVkT3ZlcmxheSBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJ0cmlnZ2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cInRvb2x0aXBTdGF0ZVtxdWVzdGlvbi5pZCFdIHx8IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnNdPVwiW3sgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogJ2NlbnRlcicsIG92ZXJsYXlYOiAnZW5kJywgb3ZlcmxheVk6ICdjZW50ZXInLCBvZmZzZXRYOiAtOCwgb2Zmc2V0WTogMCB9LCB7IG9yaWdpblg6ICdlbmQnLCBvcmlnaW5ZOiAnY2VudGVyJywgb3ZlcmxheVg6ICdzdGFydCcsIG92ZXJsYXlZOiAnY2VudGVyJywgb2Zmc2V0WDogOCwgb2Zmc2V0WTogMCB9XVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXNzbWVudC1iZy1ncmV5LXR3byBhc3Nlc3NtZW50LXRvb2x0aXAtYm9yZGVyIHAtMyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtYm94LXNoYWRvdy10b29sdGlwIHF1ZXN0aW9uLWluZm8gYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwidG9vbHRpcFN0YXRlW3F1ZXN0aW9uLmlkIV0gPSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cInRvb2x0aXBTdGF0ZVtxdWVzdGlvbi5pZCFdID0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJxdWVzdGlvbi5oaW50VGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBhbnN3ZXIgZmllbGQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcmV2aWV3TW9kZVwiIGNsYXNzPVwiZC1tZC1ibG9jayBkLW5vbmUgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiYW5zd2VyRmllbGQ7IGNvbnRleHQ6IHtxdWVzdGlvbjogcXVlc3Rpb24scHJldmlld01vZGU6IHByZXZpZXdNb2RlLGlzTWFuZGF0b3J5OiBpc01hbmRhdG9yeSxncm91cEluZGV4OiBncm91cEluZGV4fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gYW5zd2VyIGZpZWxkIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLW1kLW5vbmUgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhbnN3ZXJGaWVsZDsgY29udGV4dDoge3F1ZXN0aW9uOiBxdWVzdGlvbixwcmV2aWV3TW9kZTogcHJldmlld01vZGUsaXNNYW5kYXRvcnk6IGlzTWFuZGF0b3J5LGdyb3VwSW5kZXg6IGdyb3VwSW5kZXh9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIEFzc2Vzc29yIE1hcmtzIExvZ2ljIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFzc2Vzc21lbnQtbWFya3MtZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZW5hYmxlTWFya3MgJiYgc2hvdWxkU2hvd01hcmtzRHJvcGRvd24ocXVlc3Rpb24pICYmIHNlY3Rpb25Gb3JtR3JvdXBzW2dyb3VwSW5kZXhdLmZvcm1Hcm91cC5nZXQocXVlc3Rpb24uaWQgKyAnX21hcmtzJykgYXMgbWFya3NDb250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQVJLUyddfX0oTWF4OiB7e3F1ZXN0aW9uLndlaWdodH19KTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCAoaW5wdXQpPVwiY2hlY2tNYXhWYWwoJGV2ZW50LCBtYXJrc0NvbnRyb2wsIHF1ZXN0aW9uPy53ZWlnaHQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gcHgtMiBweS0xIG91dGxpbmUtMCBhc3Nlc3NtZW50LWJnLWdyZXktb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkICsgJ19tYXJrcydcIiB0eXBlPVwibnVtYmVyXCIgKHdoZWVsKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIGFuc3dlciBmaWVsZCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFwcmV2aWV3TW9kZVwiIGNsYXNzPVwiZC1tZC1ibG9jayBkLW5vbmUgbXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiYW5zd2VyRmllbGQ7IGNvbnRleHQ6IHtxdWVzdGlvbjogcXVlc3Rpb24scHJldmlld01vZGU6IHByZXZpZXdNb2RlLGlzTWFuZGF0b3J5OiBpc01hbmRhdG9yeSxncm91cEluZGV4OiBncm91cEluZGV4fVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gQ2hpbGQgUXVlc3Rpb25zIGFuZCBSZW1hcmtzIFJlbmRlcmluZyBMb2dpYyBiYXNlZCBvbiBjaGVja2VkIGZvcm0gc3RhdGUgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVzdGlvbi5kZWZhdWx0T3B0aW9uc0xpc3Q/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHF1ZXN0aW9uLmRlZmF1bHRPcHRpb25zTGlzdFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNPcHRpb25TZWxlY3RlZChzZWN0aW9uRm9ybUdyb3Vwc1tncm91cEluZGV4XS5mb3JtR3JvdXAsIHF1ZXN0aW9uLCBvcHRpb24ub3B0aW9ucz8uaWQpXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJFTUFSS1MgRklFTEQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uLnJlbWFya3NSZXF1aXJlZCAmJiBzZWN0aW9uRm9ybUdyb3Vwc1tncm91cEluZGV4XS5mb3JtR3JvdXAuZ2V0KHF1ZXN0aW9uLmlkICsgJ19yZW1hcmtzXycgKyBvcHRpb24uaWQpIGFzIHJlbWFya3NDb250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTE1IG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuUkVNQVJLUyddfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgKm5nSWY9XCIhcHJldmlld01vZGVcIiBmb3JtQ29udHJvbE5hbWU9XCJ7e3F1ZXN0aW9uLmlkfX1fcmVtYXJrc197e29wdGlvbi5pZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzPVwiMlwiIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLlJFTUFSS1MnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwicmVtYXJrc0NvbnRyb2wuaW52YWxpZCAmJiByZW1hcmtzQ29udHJvbC50b3VjaGVkID8gJ2Fzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLWludmFsaWQnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEzIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBvdXRsaW5lLTAgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJldmlld01vZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LW5pbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcmVtYXJrc0NvbnRyb2wudmFsdWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyIG10LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicmVtYXJrc0NvbnRyb2wuaW52YWxpZCAmJiByZW1hcmtzQ29udHJvbC50b3VjaGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLkZJRUxEX1JFUVVJUkVEJ119fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDSElMRCBRVUVTVElPTlMgUkVDVVJTSU9OIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG10LTQgZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0zXCIgKm5nSWY9XCJvcHRpb24uY2hpbGRRdWVzdGlvbkxpc3Q/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2hpbGRJZCBvZiBvcHRpb24uY2hpbGRRdWVzdGlvbkxpc3Q7IGxldCBjaGlsZEluZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicXVlc3Rpb25UZW1wbGF0ZTsgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogY2hpbGRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTWFuZGF0b3J5OiBxdWVzdGlvbkJhbmtbY2hpbGRJZF0/LmlzTWFuZGF0b3J5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBJbmRleDogZ3JvdXBJbmRleCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE9wdGlvbklkOiBvcHRpb24uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXF1ZW5jZTogc2VxdWVuY2UgKyAnLicgKyAoY2hpbGRJbmRleCArIDEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIGFuc3dlciBmaWVsZCB0ZW1wbGF0ZSAtLT5cclxuPG5nLXRlbXBsYXRlICNhbnN3ZXJGaWVsZCBsZXQtcXVlc3Rpb249XCJxdWVzdGlvblwiIGxldC1wcmV2aWV3TW9kZT1cInByZXZpZXdNb2RlXCIgbGV0LWlzTWFuZGF0b3J5PVwiaXNNYW5kYXRvcnlcIlxyXG4gICAgbGV0LWdyb3VwSW5kZXg9XCJncm91cEluZGV4XCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwic2VjdGlvbkZvcm1Hcm91cHNbZ3JvdXBJbmRleF0uZm9ybUdyb3VwXCIgW2Zvcm1Hcm91cF09XCJzZWN0aW9uRm9ybUdyb3Vwc1tncm91cEluZGV4XS5mb3JtR3JvdXBcIlxyXG4gICAgICAgIGNsYXNzPVwiY29sLTEyXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwicXVlc3Rpb24ucXVlc3Rpb25UeXBlPy5jb2RlXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLlNVQkpFQ1RJVkVfU0hPUlQnXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLXR5cGUtc2hvcnQgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5pZCFcIiBbcmVxdWlyZWRdPVwiaXNNYW5kYXRvcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwcmV2aWV3TW9kZV09XCJwcmV2aWV3TW9kZVwiIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtc2hvcnQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuU1VCSkVDVElWRV9MT05HJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLWxvbmcgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5pZCFcIiBbcmVxdWlyZWRdPVwiaXNNYW5kYXRvcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwcmV2aWV3TW9kZV09XCJwcmV2aWV3TW9kZVwiIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtbG9uZz5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInUVVFU1RJT05fVFlQRS5TVUJKRUNUSVZFX1JJQ0hfVEVYVCdcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1lZGl0b3IgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5pZCFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiIFtwcmV2aWV3TW9kZV09XCJwcmV2aWV3TW9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsQ29uZmlnXT1cImxhYmVsQ29uZmlnXCI+PC9saWItcXVlc3Rpb24tdHlwZS1lZGl0b3I+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuT0JKRUNUSVZFJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLW9iamVjdGl2ZSBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImlzTWFuZGF0b3J5XCI+PC9saWItcXVlc3Rpb24tdHlwZS1vYmplY3RpdmU+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuTVVMVElfU0VMRUNUJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLW11bHRpc2VsZWN0IFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQhXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNNYW5kYXRvcnlcIj48L2xpYi1xdWVzdGlvbi10eXBlLW11bHRpc2VsZWN0PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLlBSRUZFUkVOQ0UnXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLXR5cGUtcHJlZmVyZW5jZSBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImlzTWFuZGF0b3J5XCI+PC9saWItcXVlc3Rpb24tdHlwZS1wcmVmZXJlbmNlPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLk5VTUJFUidcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1zaG9ydCBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ByZXZpZXdNb2RlXT1cInByZXZpZXdNb2RlXCIgW2xhYmVsQ29uZmlnXT1cImxhYmVsQ29uZmlnXCI+PC9saWItcXVlc3Rpb24tdHlwZS1zaG9ydD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInUVVFU1RJT05fVFlQRS5FTUFJTCdcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1zaG9ydCBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ByZXZpZXdNb2RlXT1cInByZXZpZXdNb2RlXCIgW2xhYmVsQ29uZmlnXT1cImxhYmVsQ29uZmlnXCI+PC9saWItcXVlc3Rpb24tdHlwZS1zaG9ydD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInUVVFU1RJT05fVFlQRS5DT05UQUNUX05VTUJFUidcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1zaG9ydCBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ByZXZpZXdNb2RlXT1cInByZXZpZXdNb2RlXCIgW2xhYmVsQ29uZmlnXT1cImxhYmVsQ29uZmlnXCI+PC9saWItcXVlc3Rpb24tdHlwZS1zaG9ydD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInUVVFU1RJT05fVFlQRS5VUkwnXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLXR5cGUtc2hvcnQgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5pZCFcIiBbcmVxdWlyZWRdPVwiaXNNYW5kYXRvcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtwcmV2aWV3TW9kZV09XCJwcmV2aWV3TW9kZVwiIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtc2hvcnQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuRklMRV9VUExPQUQnXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLXR5cGUtZmlsZS11cGxvYWQgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5pZCFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiIFtpbWFnZUNvbmZpZ109XCJpbWFnZUNvbmZpZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKHNuYWNrYmFyTWVzc2FnZSk9XCJzbmFja2Jhck1lc3NhZ2UuZW1pdCgkZXZlbnQpXCI+PC9saWItcXVlc3Rpb24tdHlwZS1maWxlLXVwbG9hZD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInUVVFU1RJT05fVFlQRS5EQVRFX1BJQ0tFUidcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1kYXRlLXBpY2tlciBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ByZXZpZXdNb2RlXT1cInByZXZpZXdNb2RlXCIgW2xhYmVsQ29uZmlnXT1cImxhYmVsQ29uZmlnXCI+PC9saWItcXVlc3Rpb24tdHlwZS1kYXRlLXBpY2tlcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDwhLS0gRXJyb3IgTWVzc2FnZXMgYW5kIENoYXJhY3RlciBDb3VudCBDb250YWluZXIgLS0+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAqbmdJZj1cIiFwcmV2aWV3TW9kZSAmJiBzZWN0aW9uRm9ybUdyb3Vwc1tncm91cEluZGV4XS5mb3JtR3JvdXAuZ2V0KHF1ZXN0aW9uLmlkPy50b1N0cmluZygpIHx8ICcnKSBhcyBjb250cm9sXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtc3RhcnQgbXQtMVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2wudG91Y2hlZCAmJiBjb250cm9sLmVycm9ycz8uWydyZXF1aXJlZCddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5SRVFVSVJFRF9SRVNQT05TRSddfX1cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzPy5bJ3BhdHRlcm4nXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e3F1ZXN0aW9uPy52YWxpZGF0aW9uTWVzc2FnZSB8fCBsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLklOVkFMSURfRk9STUFUJ119fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnM/LlsnbWlubGVuZ3RoJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLk1JTl9DSEFSUyddPy5yZXBsYWNlKCd7e2xlbmd0aH19JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5lcnJvcnM/LlsnbWlubGVuZ3RoJ10ucmVxdWlyZWRMZW5ndGggKyAnJyl9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnM/LlsnbWF4bGVuZ3RoJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLk1BWF9DSEFSUyddPy5yZXBsYWNlKCd7e2xlbmd0aH19JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5lcnJvcnM/LlsnbWF4bGVuZ3RoJ10ucmVxdWlyZWRMZW5ndGggKyAnJyl9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnM/LlsnbWluT3B0aW9ucyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5NSU5fT1BUSU9OUyddPy5yZXBsYWNlKCd7e2NvdW50fX0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLmVycm9ycz8uWydtaW5PcHRpb25zJ10ucmVxdWlyZWQgKyAnJyl9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnM/LlsnbWF4T3B0aW9ucyddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5NQVhfT1BUSU9OUyddPy5yZXBsYWNlKCd7e2NvdW50fX0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLmVycm9ycz8uWydtYXhPcHRpb25zJ10ucmVxdWlyZWQgKyAnJyl9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnM/LlsnbWF4RmlsZXMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuTUFYX0ZJTEVTJ10/LnJlcGxhY2UoJ3t7Y291bnR9fScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZXJyb3JzPy5bJ21heEZpbGVzJ10ucmVxdWlyZWQgKyAnJyl9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWVycm9yIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWRhbmdlciBtdC0xXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnM/LlsnbWF4RmlsZVNpemUnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuTUFYX0ZJTEVfU0laRSddPy5yZXBsYWNlKCd7e3NpemV9fScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZXJyb3JzPy5bJ21heEZpbGVTaXplJ10ucmVxdWlyZWRTaXplICsgJycpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktc2V2ZW4gd2hpdGUtc3BhY2Utbm93cmFwIG1zLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0TWF4Q2hhckNvdW50KHF1ZXN0aW9uKSA+IDBcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eyBnZXRSZW1haW5pbmdDaGFycyhxdWVzdGlvbiwgY29udHJvbCkgfX1cclxuICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuQ0hBUkFDVEVSJ119fXt7Z2V0UmVtYWluaW5nQ2hhcnMocXVlc3Rpb24sIGNvbnRyb2wpICE9PVxyXG4gICAgICAgICAgICAgICAgICAgIDFcclxuICAgICAgICAgICAgICAgICAgICA/ICdzJyA6ICcnfX0ge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLlJFTUFJTklORyddfX1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBSZXVzYWJsZSBTZWN0aW9uIEZvcm0gVGVtcGxhdGUgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjc2VjdGlvbkNvbnRlbnQgbGV0LXNlY3Rpb249XCJzZWN0aW9uXCIgbGV0LWk9XCJpXCI+XHJcbiAgICA8Zm9ybSBjbGFzcz1cInctMTAwXCIgKm5nSWY9XCJzZWN0aW9uRm9ybUdyb3Vwc1tpXS5mb3JtR3JvdXBcIiBbZm9ybUdyb3VwXT1cInNlY3Rpb25Gb3JtR3JvdXBzW2ldLmZvcm1Hcm91cFwiXHJcbiAgICAgICAgW25hbWVdPVwiJ3NlY3Rpb25mcm0tJyArIGlcIiBub3ZhbGlkYXRlPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTRcIlxyXG4gICAgICAgICAgICAqbmdJZj1cIiFwcmV2aWV3TW9kZSAmJiAoc2VjdGlvbj8ucXBzRGVzYz8uWzBdPy50ZXh0IHx8IHNlY3Rpb24/Lm1lZGlhVXJsKVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xNCBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW5cIj5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5UT1RBTF9RVUVTVElPTlMnXX19OiB7eyBzZWN0aW9uPy50b3RhbFF1ZXN0aW9ucyB8fCAwIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwib3Blbkluc3RydWN0aW9uc0RpYWxvZyhzZWN0aW9uKVwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtem9vbS1hbmltYXRpb24gYXNzZXNzbWVudC1idXR0b24tcGFkZGluZyBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTEzIGFzc2Vzc21lbnQtYnRuLXByaW1hcnktdHJhbnNwYXJlbnRcIj5cclxuICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5WSUVXX0lOU1RSVUNUSU9OUyddfX1cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTIgZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0zXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNxIG9mIHNlY3Rpb24uc2VjdGlvblF1ZXN0aW9uc0xpc3QgfCBvcmRlckJ5OyBsZXQgaiA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicXVlc3Rpb25UZW1wbGF0ZTsgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogc3EucXVlc3Rpb25JZCxcclxuICAgICAgICAgICAgICAgIGlzTWFuZGF0b3J5OiBxdWVzdGlvbkJhbmtbc3EucXVlc3Rpb25JZF0/LmlzTWFuZGF0b3J5LFxyXG4gICAgICAgICAgICAgICAgZ3JvdXBJbmRleDogaSxcclxuICAgICAgICAgICAgICAgIHBhcmVudE9wdGlvbklkOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgc2VxdWVuY2U6IGogKyAxXHJcbiAgICAgICAgICAgIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Zvcm0+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIHZpZGVvIHByZXZpZXcgIC0tPlxyXG48bmctdGVtcGxhdGUgbGV0LXZpZGVvVXJsPVwidmlkZW9VcmxcIiAjVmlkZW9UZW1wbGF0ZT5cclxuICAgIDxkaXYgY2xhc3M9XCJhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIG92ZXJmbG93LWhpZGRlbiBjb2wtbWQtMTAgY29sLTEyXCI+XHJcbiAgICAgICAgPHZpZGVvICpuZ0lmPVwidmlkZW9Vcmw/LmluY2x1ZGVzKCcubXA0JykgZWxzZSB5b3V0dWJlVmlkZW9cIiB3aWR0aD1cIjQwMFwiIGNvbnRyb2xzIGNsYXNzPVwibXctMTAwIGQtYmxvY2sgbXgtYXV0b1wiPlxyXG4gICAgICAgICAgICA8c291cmNlIFtzcmNdPVwidmlkZW9VcmxcIiB0eXBlPVwidmlkZW8vbXA0XCI+XHJcbiAgICAgICAgPC92aWRlbz5cclxuICAgICAgICA8bmctdGVtcGxhdGUgI3lvdXR1YmVWaWRlbz5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInlvdXR1YmUtdmlkZW8gcG9zaXRpb24tcmVsYXRpdmUgaC0xMDBcIj5cclxuICAgICAgICAgICAgICAgIDxpZnJhbWUgW3NyY109XCJhZGRZb3V0dWJlSWZyYW1lU3JjKHZpZGVvVXJsKVwiIHRpdGxlPVwiWW91VHViZSB2aWRlbyBwbGF5ZXJcIiBmcmFtZWJvcmRlcj1cIjBcIlxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93PVwiYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGNsaXBib2FyZC13cml0ZTsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZTsgd2ViLXNoYXJlXCJcclxuICAgICAgICAgICAgICAgICAgICBhbGxvd2Z1bGxzY3JlZW4gY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZSB0b3AtMCBzdGFydC0wIHctMTAwIGgtMTAwIGQtYmxvY2tcIj5cclxuICAgICAgICAgICAgICAgIDwvaWZyYW1lPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19
|
|
784
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXNzbWVudC10YWtlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb25zLWFzc2Vzc21lbnQvc3JjL2xpYi9tb2R1bGVzL2Fzc2Vzc21lbnQtdGFrZXIvYXNzZXNzbWVudC10YWtlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb21tb25zLWFzc2Vzc21lbnQvc3JjL2xpYi9tb2R1bGVzL2Fzc2Vzc21lbnQtdGFrZXIvYXNzZXNzbWVudC10YWtlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFaEMsT0FBTyxFQUFlLFdBQVcsRUFBYSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlqRixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxrRUFBa0UsQ0FBQztBQUloSCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxRUFBcUUsQ0FBQztBQUMvRyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFRakQsTUFBTSxPQUFPLHdCQUF3QjtJQWlEbkMsWUFDVSxzQkFBOEMsRUFDOUMsRUFBZSxFQUNmLHNCQUE4QyxFQUM5QyxTQUF1QixFQUN2QixNQUFpQjtRQUpqQiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLE9BQUUsR0FBRixFQUFFLENBQWE7UUFDZiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQXdCO1FBQzlDLGNBQVMsR0FBVCxTQUFTLENBQWM7UUFDdkIsV0FBTSxHQUFOLE1BQU0sQ0FBVztRQXJEbEIsZ0JBQVcsR0FBOEIsRUFBRSxD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QkNwQnJDLGdwM0JBbVpjOzRGRC9YRCx3QkFBd0I7a0JBTnBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsV0FBVyxFQUFFLG1DQUFtQztvQkFDaEQsU0FBUyxFQUFFLENBQUMsbUNBQW1DLENBQUM7aUJBQ2pEOytOQUdVLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZvcmtKb2luIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgQXNzZXNzbWVudFRha2VyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvYXNzZXNzbWVudC10YWtlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUmVzcG9uc2VCdWlsZGVyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvcmVzcG9uc2UtYnVpbGRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU2VjdGlvbkluc3RydWN0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9zZWN0aW9uLWluc3RydWN0aW9ucy9zZWN0aW9uLWluc3RydWN0aW9ucy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBc3Nlc3NlZURUTywgQXNzZXNzb3JEVE8sIEFzc2Vzc21lbnQsIEFzc2Vzc21lbnRJbnN0YW5jZUFzc2Vzc2VEVE8sIEFzc2Vzc21lbnRTdGVwLCBBc3Nlc3NtZW50Q29udGV4dERUTywgU2VjdGlvblNjb3JlLCBTa2lsbFNjb3JlLCBBdHRhY2htZW50IH0gZnJvbSAnLi4vLi4vc2hhcmVkL2ludGVyZmFjZXMvYXNzZXNzbWVudC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50UXVlc3Rpb24gfSBmcm9tICcuLi8uLi9zaGFyZWQvaW50ZXJmYWNlcy9xdWVzdGlvbi5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBBc3Nlc3NtZW50UXVlc3Rpb25QYXBlciwgUXVlc3Rpb25QYXBlclNlY3Rpb24sIFNlY3Rpb25RdWVzdGlvbiB9IGZyb20gJy4uLy4uL3NoYXJlZC9pbnRlcmZhY2VzL3F1ZXN0aW9uLXBhcGVyLmludGVyZmFjZSc7XHJcbmltcG9ydCB7IFNraWxsQWxsb2NhdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3NoYXJlZC9jb21wb25lbnRzL3NraWxsLWFsbG9jYXRpb24vc2tpbGwtYWxsb2NhdGlvbi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBzb3J0QnlPcmRlciB9IGZyb20gJy4uLy4uL3NoYXJlZC91dGlscyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1hc3Nlc3NtZW50LXRha2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYXNzZXNzbWVudC10YWtlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYXNzZXNzbWVudC10YWtlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgQXNzZXNzbWVudFRha2VyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBsYWJlbENvbmZpZzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9O1xyXG4gIEBJbnB1dCgpIGltYWdlQ29uZmlnOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XHJcbiAgQElucHV0KCkgc2hvd0Zvb3RlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIGFzc2Vzc21lbnRJZCE6IG51bWJlcjtcclxuICBASW5wdXQoKSBhc3Nlc3NtZW50SW5zdGFuY2VJZCE6IG51bWJlcjtcclxuICBASW5wdXQoKSBhc3Nlc3NlZURhdGE6IEFzc2Vzc2VlRFRPID0geyBpZDogMCwgYWN0b3JJZDogMCwgYWN0b3JUeXBlOiAnVVNFUicgfTtcclxuICBASW5wdXQoKSBhc3Nlc3NvckRhdGE6IEFzc2Vzc29yRFRPID0geyBpZDogMCwgYWN0b3JJZDogMCwgYWN0b3JUeXBlOiAnVVNFUicgfTtcclxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHByZXZpZXdNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdmVydGljYWxWaWV3OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZW5hYmxlTWFya3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBoaWRlU2VjdGlvblRhYnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBhc3Nlc3NtZW50Q29udGV4dCE6IEFzc2Vzc21lbnRDb250ZXh0RFRPO1xyXG4gIEBJbnB1dCgpIGFzc2Vzc2VlUmVzcG9uc2U6IEFzc2Vzc21lbnRJbnN0YW5jZUFzc2Vzc2VEVE8gPSB7fTtcclxuICBASW5wdXQoKSBtYXJrQXNDb21wbGV0ZWQ6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHNlY3Rpb25XaXNlU2NvcmU6IHsgW3NlY3Rpb25JZDogbnVtYmVyXTogU2VjdGlvblNjb3JlIH0gPSB7fTtcclxuICBASW5wdXQoKSBzaG93T3ZlcmFsbFJlbWFya3M6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93Q29ycmVjdEFuc3dlcnM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgQE91dHB1dCgpIHNuYWNrYmFyTWVzc2FnZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBtZXNzYWdlOiBzdHJpbmcsIHR5cGU6ICdzdWNjZXNzJyB8ICdlcnJvcicgfCAnaW5mbycgfT4oKTtcclxuICBAT3V0cHV0KCkgc3VibWl0QXNzZXNzbWVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKSBzdGVwQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8QXNzZXNzbWVudFN0ZXA+KCk7XHJcblxyXG4gIHNob3dMb2FkZXI6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHF1ZXN0aW9uQmFuazogUmVjb3JkPG51bWJlciwgQXNzZXNzbWVudFF1ZXN0aW9uPiA9IHt9O1xyXG4gIGFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YTogQXNzZXNzbWVudFF1ZXN0aW9uUGFwZXIgPSB7fTtcclxuICBhc3Nlc3NtZW50RGF0YTogQXNzZXNzbWVudCA9IHt9O1xyXG4gIGNvbmZpZ3NMb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBpc1N1Ym1pdHRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBzZWN0aW9uRm9ybUdyb3VwczogeyBzZWN0aW9uSWQ6IG51bWJlcjsgZm9ybUdyb3VwOiBGb3JtR3JvdXAgfVtdID0gW107XHJcbiAgb3ZlcmFsbE5vdGVzQ3RybCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XHJcbiAgcHJpdmF0ZSB5b3V0dWJlVXJsQ2FjaGU6IHsgW3VybDogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuXHJcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRUYWJJbmRleDogbnVtYmVyID0gMDtcclxuICBnZXQgc2VsZWN0ZWRUYWJJbmRleCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkVGFiSW5kZXg7XHJcbiAgfVxyXG4gIHNldCBzZWxlY3RlZFRhYkluZGV4KHZhbHVlOiBudW1iZXIpIHtcclxuICAgIGlmICh0aGlzLl9zZWxlY3RlZFRhYkluZGV4ICE9PSB2YWx1ZSkge1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZFRhYkluZGV4ID0gdmFsdWU7XHJcbiAgICAgIHRoaXMuZW1pdFN0ZXBEZXRhaWxzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWN0aW9uRXJyb3JzOiBib29sZWFuW10gPSBbXTtcclxuICB0ZW5hbnRJZDogbnVtYmVyID0gMDtcclxuICB0b29sdGlwU3RhdGU6IFJlY29yZDxudW1iZXIsIGJvb2xlYW4+ID0ge307XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBhc3Nlc3NtZW50VGFrZXJTZXJ2aWNlOiBBc3Nlc3NtZW50VGFrZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIHJlc3BvbnNlQnVpbGRlclNlcnZpY2U6IFJlc3BvbnNlQnVpbGRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZ1xyXG4gICkgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5nZXRDb25maWdzRnJvbUpTT04oKTtcclxuXHJcbiAgICBpZiAodGhpcy5wcmV2aWV3TW9kZSB8fCB0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmFzc2Vzc21lbnRUYWtlbj8uY29kZSA9PT0gJ0FTU0VTU01FTlRfVEFLRU4uQ09NUExFVEUnKSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmFzc2Vzc21lbnRDb250ZXh0KSB7XHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWQgPSB0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5hc3Nlc3NtZW50SW5zdGFuY2VEVE8/LmlkID8/IHRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWQ7XHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudElkID0gdGhpcy5hc3Nlc3NtZW50Q29udGV4dD8uYXNzZXNzbWVudD8uaWQgPz8gdGhpcy5hc3Nlc3NtZW50SWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWQpIHtcclxuICAgICAgdGhpcy5sb2FkQXNzZXNzbWVudERhdGEoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldENvbmZpZ3NGcm9tSlNPTigpIHtcclxuICAgIGZvcmtKb2luKHtcclxuICAgICAgbGFiZWxDb25maWc6IHRoaXMuYXNzZXNzbWVudFRha2VyU2VydmljZS5nZXRDb25maWdKU09OKCdqc29uL2xhYmVsQ29uZmlnJyksXHJcbiAgICAgIGltYWdlQ29uZmlnOiB0aGlzLmFzc2Vzc21lbnRUYWtlclNlcnZpY2UuZ2V0Q29uZmlnSlNPTignanNvbi9pbWFnZUNvbmZpZycpXHJcbiAgICB9KS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMubGFiZWxDb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCByZXM/LmxhYmVsQ29uZmlnLCB0aGlzLmxhYmVsQ29uZmlnKTtcclxuICAgICAgdGhpcy5pbWFnZUNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIHJlcz8uaW1hZ2VDb25maWcsIHRoaXMuaW1hZ2VDb25maWcpO1xyXG5cclxuICAgICAgdGhpcy5jb25maWdzTG9hZGVkID0gdHJ1ZTtcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBsb2FkQXNzZXNzbWVudERhdGEoKSB7XHJcbiAgICBjb25zdCBhcGlDYWxscyA9IHtcclxuICAgICAgLi4uKCF0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5hc3Nlc3NtZW50Py5pZCAmJiB7XHJcbiAgICAgICAgYXNzZXNzbWVudERhdGE6IHRoaXMuYXNzZXNzbWVudFRha2VyU2VydmljZS5nZXRBc3Nlc3NtZW50Q29udGV4dEJ5SWQoeyBhc3Nlc3NtZW50SWQ6IHRoaXMuYXNzZXNzbWVudElkIH0pXHJcbiAgICAgIH0pLFxyXG4gICAgICAuLi4odGhpcy5hc3Nlc3NlZURhdGE/LmlkICYmICF0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmlkICYmIHtcclxuICAgICAgICBhc3Nlc3NlZVJlc3BvbnNlOiB0aGlzLmFzc2Vzc21lbnRUYWtlclNlcnZpY2UuZ2V0QW5zd2Vyc0J5QWlhSWQodGhpcy5hc3Nlc3NlZURhdGEuaWQpXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBpZiAoT2JqZWN0LmtleXMoYXBpQ2FsbHMpLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm9ya0pvaW4oYXBpQ2FsbHMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5hc3Nlc3NtZW50Q29udGV4dCA9IGRhdGE/LmFzc2Vzc21lbnREYXRhID8/IHRoaXMuYXNzZXNzbWVudENvbnRleHQ7XHJcbiAgICAgICAgICB0aGlzLmFzc2Vzc2VlUmVzcG9uc2UgPSBkYXRhPy5hc3Nlc3NlZVJlc3BvbnNlID8/IHRoaXMuYXNzZXNzZWVSZXNwb25zZTtcclxuICAgICAgICAgIHRoaXMuaGFuZGxlUmVzcG9uc2UoKVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGVycm9yID0+IHtcclxuICAgICAgICAgIHRoaXMuc25hY2tiYXJNZXNzYWdlLmVtaXQoeyBtZXNzYWdlOiB0aGlzLmxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuVE9BU1QuRVJST1JfREVGQVVMVCddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICAgICAgdGhyb3cgeyBlcnJvciwgbWV0aG9kOiAnR0VUJyB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuaGFuZGxlUmVzcG9uc2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZVJlc3BvbnNlKCkge1xyXG4gICAgdGhpcy5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRhdGEgPSB0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5hc3Nlc3NtZW50UXVlc3Rpb25QYXBlckRUTztcclxuICAgIHRoaXMuYXNzZXNzbWVudERhdGEgPSB0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5hc3Nlc3NtZW50O1xyXG4gICAgdGhpcy5xdWVzdGlvbkJhbmsgPSB0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5xdWVzdGlvbkRUT01hcDtcclxuICAgIHRoaXMudGVuYW50SWQgPSB0aGlzLmFzc2Vzc21lbnRDb250ZXh0Py5hc3Nlc3NtZW50Py50ZW5hbnRJZCA/PyAwO1xyXG5cclxuICAgIGlmICh0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmlkKSB7XHJcbiAgICAgIGlmICh0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmFzc2Vzc21lbnRUYWtlbj8uY29kZSA9PT0gJ0FTU0VTU01FTlRfVEFLRU4uQ09NUExFVEUnKSB7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZSA9IHtcclxuICAgICAgICBpZDogMCxcclxuICAgICAgICBhc3Nlc3NtZW50SW5zdGFuY2U6IHsgaWQ6IHRoaXMuYXNzZXNzbWVudEluc3RhbmNlSWQgfSxcclxuICAgICAgICBhc3Nlc3NlZTogdGhpcy5hc3Nlc3NlZURhdGEsXHJcbiAgICAgICAgYXNzZXNzb3I6IHRoaXMuYXNzZXNzb3JEYXRhLFxyXG4gICAgICAgIGFpYWRlZmF1bHRSZXNwb25zZUxpc3Q6IFtdLFxyXG4gICAgICAgIHRlbmFudDogdGhpcy50ZW5hbnRJZFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgdGhpcy5vdmVyYWxsTm90ZXNDdHJsLnNldFZhbHVlKHRoaXMuYXNzZXNzZWVSZXNwb25zZS5ub3RlcyB8fCAnJyk7XHJcbiAgICBpZiAodGhpcy5kaXNhYmxlZCAmJiAhdGhpcy5zaG93T3ZlcmFsbFJlbWFya3MpIHtcclxuICAgICAgdGhpcy5vdmVyYWxsTm90ZXNDdHJsLmRpc2FibGUoKTtcclxuICAgIH1cclxuICAgIC8vIHRoaXMuZmV0Y2hBdHRhY2htZW50c0FuZFNldHVwRm9ybSgpO1xyXG4gICAgdGhpcy5mb3JtU2V0dXAoKTtcclxuICB9XHJcblxyXG4gIGZldGNoQXR0YWNobWVudHNBbmRTZXR1cEZvcm0oKSB7XHJcbiAgICBjb25zdCBhdHRhY2htZW50SWRzOiBTZXQ8bnVtYmVyPiA9IG5ldyBTZXQoKTtcclxuICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uYWlhZGVmYXVsdFJlc3BvbnNlTGlzdD8uZm9yRWFjaCgoYTogYW55KSA9PiB7XHJcbiAgICAgIGEuYXR0YWNobWVudFJlc3BvbnNlTGlzdD8uZm9yRWFjaCgocjogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHIuYXR0YWNobWVudElkKSBhdHRhY2htZW50SWRzLmFkZChyLmF0dGFjaG1lbnRJZCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGF0dGFjaG1lbnRJZHMuc2l6ZSA+IDApIHtcclxuICAgICAgY29uc3QgcGFyYW1zID0ge1xyXG4gICAgICAgIGF0dGFjaG1lbnRJZHM6IEFycmF5LmZyb20oYXR0YWNobWVudElkcyksXHJcbiAgICAgICAgZW50aXR5VHlwZTogJ0VOVElUWV9UWVBFLkFTU0VTU01FTlRfUVVFU1RJT04nXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudFRha2VyU2VydmljZS5nZXRBdHRhY2htZW50cyhwYXJhbXMpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGF0dGFjaG1lbnRzUmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZS5haWFkZWZhdWx0UmVzcG9uc2VMaXN0Py5mb3JFYWNoKChhOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgYS5hdHRhY2htZW50UmVzcG9uc2VMaXN0Py5mb3JFYWNoKChyOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoci5hdHRhY2htZW50SWQgJiYgYXR0YWNobWVudHNSZXM/LmZpbmQoKGl0ZW06IEF0dGFjaG1lbnQpID0+IGl0ZW0uaWQgPT0gci5hdHRhY2htZW50SWQpKSB7XHJcbiAgICAgICAgICAgICAgICByLmF0dGFjaG1lbnRPYmplY3QgPSBhdHRhY2htZW50c1Jlcz8uZmluZCgoaXRlbTogQXR0YWNobWVudCkgPT4gaXRlbS5pZCA9PSByLmF0dGFjaG1lbnRJZCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5mb3JtU2V0dXAoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRoaXMuZm9ybVNldHVwKCk7XHJcbiAgICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdHRVQnLCBwYXJhbXMgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm1TZXR1cCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9ybVNldHVwKCkge1xyXG4gICAgdGhpcy5zZWN0aW9uRm9ybUdyb3VwcyA9IFtdO1xyXG5cclxuICAgIHNvcnRCeU9yZGVyKHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3QpPy5mb3JFYWNoKChzZWN0aW9uOiBRdWVzdGlvblBhcGVyU2VjdGlvbikgPT4ge1xyXG4gICAgICBjb25zdCBncm91cDogYW55ID0ge307XHJcblxyXG4gICAgICBzb3J0QnlPcmRlcihzZWN0aW9uPy5zZWN0aW9uUXVlc3Rpb25zTGlzdCk/LmZvckVhY2goKHNxOiBTZWN0aW9uUXVlc3Rpb24pID0+IHtcclxuICAgICAgICBjb25zdCBxSWQgPSBzcS5xdWVzdGlvbklkO1xyXG4gICAgICAgIGlmICghcUlkIHx8ICF0aGlzLnF1ZXN0aW9uQmFua1txSWRdKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkJhbmtbcUlkXTtcclxuICAgICAgICB0aGlzLmFkZENvbnRyb2xGb3JRdWVzdGlvbihncm91cCwgcXVlc3Rpb24sIHF1ZXN0aW9uPy5pc01hbmRhdG9yeSk7XHJcblxyXG4gICAgICAgIGlmIChxdWVzdGlvbi5kZWZhdWx0T3B0aW9uc0xpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgcXVlc3Rpb24uZGVmYXVsdE9wdGlvbnNMaXN0LmZvckVhY2goKG9wdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChvcHRpb24ucmVtYXJrc1JlcXVpcmVkKSB7XHJcbiAgICAgICAgICAgICAgLy8gUHJlLXBvcHVsYXRlIHJlbWFya3MgaWYgd2UgaGF2ZSBhbnN3ZXJzIG1hdGNoaW5nIHRoaXMgb3B0aW9uLlxyXG4gICAgICAgICAgICAgIGxldCByZW1hcmtWYWwgPSBudWxsO1xyXG4gICAgICAgICAgICAgIGNvbnN0IHByZWZpbGxlZE9wdGlvbnMgPSB0aGlzLmdldFByZWZpbGxlZEFuc3dlcihxSWQpO1xyXG4gICAgICAgICAgICAgIGlmIChwcmVmaWxsZWRPcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhbnNPYmogPSB0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmFpYWRlZmF1bHRSZXNwb25zZUxpc3Q/LmZpbmQoKGE6IGFueSkgPT5cclxuICAgICAgICAgICAgICAgICAgYS5zZWN0aW9uUXVlc3Rpb24/LnF1ZXN0aW9uSWQgPT09IHFJZCAmJiAoIWEuY2hpbGRRdWVzdGlvbklkIHx8IGEuY2hpbGRRdWVzdGlvbklkID09PSAwKVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmIChhbnNPYmopIHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHF1ZXN0aW9uLnF1ZXN0aW9uVHlwZT8uY29kZSA9PT0gJ1FVRVNUSU9OX1RZUEUuT0JKRUNUSVZFJyAmJiAocHJlZmlsbGVkT3B0aW9ucyA9PT0gKG9wdGlvbi5vcHRpb25zPy5pZCA/PyBvcHRpb24uaWQpIHx8IHByZWZpbGxlZE9wdGlvbnM/LmlkID09PSAob3B0aW9uLm9wdGlvbnM/LmlkID8/IG9wdGlvbi5pZCkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVtYXJrVmFsID0gYW5zT2JqLnJlbWFya3MgfHwgbnVsbDtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHByZWZpbGxlZE9wdGlvbnMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdPYmogPSBhbnNPYmouZHJvYmplY3RpdmVyZXNwb25zZUxpc3Q/LmZpbmQoKHI6IGFueSkgPT4gci5kZWZhdWx0T3B0aW9uPy5vcHRpb25zPy5pZCA9PT0gKG9wdGlvbi5vcHRpb25zPy5pZCA/PyBvcHRpb24uaWQpKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobWF0Y2hpbmdPYmopIHtcclxuICAgICAgICAgICAgICAgICAgICAgIHJlbWFya1ZhbCA9IG1hdGNoaW5nT2JqLnJlbWFya3MgfHwgbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHJlbWFya0N0cmwgPSBuZXcgRm9ybUNvbnRyb2wocmVtYXJrVmFsKTtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICAgICAgcmVtYXJrQ3RybC5kaXNhYmxlKCk7XHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBncm91cFtgJHtxSWR9X3JlbWFya3NfJHtvcHRpb24uaWR9YF0gPSByZW1hcmtDdHJsO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBvcHRpb24uY2hpbGRRdWVzdGlvbkxpc3Q/LmZvckVhY2goKGNoaWxkSWQ6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGNoaWxkUXVlcyA9IHRoaXMucXVlc3Rpb25CYW5rW2NoaWxkSWRdO1xyXG4gICAgICAgICAgICAgIGlmIChjaGlsZFF1ZXMpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkQ29udHJvbEZvclF1ZXN0aW9uKGdyb3VwLCBjaGlsZFF1ZXMsIGZhbHNlLCB0cnVlLCBxSWQsIG9wdGlvbi5vcHRpb25zPy5pZCA/PyBvcHRpb24uaWQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgY29uc3QgZmcgPSB0aGlzLmZiLmdyb3VwKGdyb3VwKTtcclxuXHJcbiAgICAgIHNvcnRCeU9yZGVyKHNlY3Rpb24/LnNlY3Rpb25RdWVzdGlvbnNMaXN0KT8uZm9yRWFjaCgoc3E6IFNlY3Rpb25RdWVzdGlvbikgPT4ge1xyXG4gICAgICAgIGNvbnN0IHFJZCA9IHNxLnF1ZXN0aW9uSWQ7XHJcbiAgICAgICAgaWYgKCFxSWQgfHwgIXRoaXMucXVlc3Rpb25CYW5rW3FJZF0pIHJldHVybjtcclxuICAgICAgICBjb25zdCBxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25CYW5rW3FJZF07XHJcblxyXG4gICAgICAgIGlmIChxdWVzdGlvbi5kZWZhdWx0T3B0aW9uc0xpc3Q/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgZmcuZ2V0KHFJZD8udG9TdHJpbmcoKSk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsID0+IHtcclxuICAgICAgICAgICAgcXVlc3Rpb24uZGVmYXVsdE9wdGlvbnNMaXN0Py5mb3JFYWNoKChvcHRpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLmlzT3B0aW9uU2VsZWN0ZWQoZmcsIHF1ZXN0aW9uLCBvcHRpb24ub3B0aW9ucz8uaWQpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAob3B0aW9uLnJlbWFya3NSZXF1aXJlZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVtYXJrQ3RybCA9IGZnLmdldChgJHtxSWR9X3JlbWFya3NfJHtvcHRpb24uaWR9YCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNTZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgICByZW1hcmtDdHJsPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgcmVtYXJrQ3RybD8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgICAgICAgIHJlbWFya0N0cmw/LnNldFZhbHVlKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVtYXJrQ3RybD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbi5jaGlsZFF1ZXN0aW9uTGlzdD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBvcHRpb24uY2hpbGRRdWVzdGlvbkxpc3QuZm9yRWFjaCgoY2hpbGRJZDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkUXVlcyA9IHRoaXMucXVlc3Rpb25CYW5rW2NoaWxkSWRdO1xyXG4gICAgICAgICAgICAgICAgICBpZiAoY2hpbGRRdWVzPy5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkQ3RybCA9IGZnLmdldChjaGlsZFF1ZXMuaWQ/LnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1NlbGVjdGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5nZXRWYWxpZGF0b3JzRm9yUXVlc3Rpb24oY2hpbGRRdWVzLCBjaGlsZFF1ZXMuaXNNYW5kYXRvcnkgfHwgZmFsc2UpLmZpbHRlcih2ID0+ICEhdik7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjaGlsZEN0cmw/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5jb21wb3NlKHZhbGlkYXRvcnMpKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY2hpbGRDdHJsPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNoaWxkQ3RybD8uc2V0VmFsdWUobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNoaWxkQ3RybD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLnB1c2goe1xyXG4gICAgICAgIHNlY3Rpb25JZDogc2VjdGlvbi5pZCxcclxuICAgICAgICBmb3JtR3JvdXA6IGZnXHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnNlY3Rpb25FcnJvcnMucHVzaChmYWxzZSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmVtaXRTdGVwRGV0YWlscygpO1xyXG4gICAgdGhpcy5zaG93TG9hZGVyID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBlbWl0U3RlcERldGFpbHMoKSB7XHJcbiAgICBpZiAodGhpcy5zZWN0aW9uRm9ybUdyb3VwcyAmJiB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zdGVwQ2hhbmdlZC5lbWl0KHtcclxuICAgICAgICBjdXJyZW50U3RlcEluZGV4OiB0aGlzLnNlbGVjdGVkVGFiSW5kZXgsXHJcbiAgICAgICAgdG90YWxTdGVwczogdGhpcy5zZWN0aW9uRm9ybUdyb3Vwcy5sZW5ndGgsXHJcbiAgICAgICAgaXNMYXN0U3RlcDogdGhpcy5zZWxlY3RlZFRhYkluZGV4ID09PSB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLmxlbmd0aCAtIDFcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRDb250cm9sRm9yUXVlc3Rpb24oZ3JvdXA6IGFueSwgcXVlc3Rpb246IEFzc2Vzc21lbnRRdWVzdGlvbiwgaXNNYW5kYXRvcnk6IGJvb2xlYW4gPSBmYWxzZSwgaXNDaGlsZDogYm9vbGVhbiA9IGZhbHNlLCBwYXJlbnRJZD86IG51bWJlciwgcGFyZW50T3B0aW9uSWQ/OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHFJZCA9IHF1ZXN0aW9uLmlkO1xyXG4gICAgaWYgKCFxSWQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCB2YWxpZGF0b3JzID0gdGhpcy5nZXRWYWxpZGF0b3JzRm9yUXVlc3Rpb24ocXVlc3Rpb24sIGlzTWFuZGF0b3J5KS5maWx0ZXIodiA9PiAhIXYpO1xyXG4gICAgbGV0IHByZWZpbGxlZFZhbHVlID0gdGhpcy5nZXRQcmVmaWxsZWRBbnN3ZXIocUlkLCBpc0NoaWxkLCBwYXJlbnRJZCwgcGFyZW50T3B0aW9uSWQpO1xyXG5cclxuICAgIGNvbnN0IGNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2wocHJlZmlsbGVkVmFsdWUsIFZhbGlkYXRvcnMuY29tcG9zZSh2YWxpZGF0b3JzKSk7XHJcblxyXG4gICAgLy8gRGlzYWJsZSBpZiBhc3Nlc3NtZW50IGlzIGNvbXBsZXRlZFxyXG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgY29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ3JvdXBbcUlkXSA9IGNvbnRyb2w7XHJcblxyXG4gICAgLy8gQXR0YWNoIG1hcmsgYXNzaWdubWVudCBjb250cm9sIGlmIHJlcXVpcmVkXHJcbiAgICBpZiAodGhpcy5lbmFibGVNYXJrcyAmJiB0aGlzLnNob3VsZFNob3dNYXJrc0Ryb3Bkb3duKHF1ZXN0aW9uKSkge1xyXG4gICAgICBsZXQgbWFya1ZhbHVlID0gdGhpcy5nZXRQcmVmaWxsZWRNYXJrKHFJZCwgaXNDaGlsZCwgcGFyZW50SWQsIHBhcmVudE9wdGlvbklkKTtcclxuICAgICAgZ3JvdXBbYCR7cUlkfV9tYXJrc2BdID0gbmV3IEZvcm1Db250cm9sKG1hcmtWYWx1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQcmVmaWxsZWRNYXJrKHFJZDogbnVtYmVyLCBpc0NoaWxkOiBib29sZWFuID0gZmFsc2UsIHBhcmVudElkPzogbnVtYmVyLCBwYXJlbnRPcHRpb25JZD86IG51bWJlcik6IGFueSB7XHJcbiAgICBpZiAoIXRoaXMuYXNzZXNzZWVSZXNwb25zZT8uYWlhZGVmYXVsdFJlc3BvbnNlTGlzdCkgcmV0dXJuIG51bGw7XHJcbiAgICBjb25zdCBhbnN3ZXJPYmogPSB0aGlzLmFzc2Vzc2VlUmVzcG9uc2UuYWlhZGVmYXVsdFJlc3BvbnNlTGlzdC5maW5kKChhOiBhbnkpID0+IHtcclxuICAgICAgaWYgKGlzQ2hpbGQpIHtcclxuICAgICAgICByZXR1cm4gYS5jaGlsZFF1ZXN0aW9uSWQgPT09IHFJZCAmJiBhLmNoaWxkUXVlc3Rpb25QYXJlbnRRdWVzdGlvbklkID09PSBwYXJlbnRJZCAmJiBhLmNoaWxkRGVmYXVsdE9wdGlvbklkID09PSBwYXJlbnRPcHRpb25JZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYS5zZWN0aW9uUXVlc3Rpb24/LnF1ZXN0aW9uSWQgPT09IHFJZCAmJiAoIWEuY2hpbGRRdWVzdGlvbklkIHx8IGEuY2hpbGRRdWVzdGlvbklkID09PSAwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gYW5zd2VyT2JqPy5tYXJrcyA/PyBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0UXVlc3Rpb25BbnN3ZXJPYmoocUlkOiBudW1iZXIsIHBhcmVudE9wdGlvbklkPzogbnVtYmVyIHwgbnVsbCwgcGFyZW50UXVlc3Rpb25JZD86IG51bWJlciB8IG51bGwpOiBhbnkge1xyXG4gICAgaWYgKCF0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmFpYWRlZmF1bHRSZXNwb25zZUxpc3QpIHJldHVybiBudWxsO1xyXG4gICAgY29uc3QgaXNDaGlsZCA9IHBhcmVudE9wdGlvbklkICE9PSB1bmRlZmluZWQgJiYgcGFyZW50T3B0aW9uSWQgIT09IG51bGw7XHJcbiAgICByZXR1cm4gdGhpcy5hc3Nlc3NlZVJlc3BvbnNlLmFpYWRlZmF1bHRSZXNwb25zZUxpc3QuZmluZCgoYTogYW55KSA9PiB7XHJcbiAgICAgIGlmIChpc0NoaWxkKSB7XHJcbiAgICAgICAgcmV0dXJuIGEuY2hpbGRRdWVzdGlvbklkID09PSBxSWQgJiYgYS5jaGlsZFF1ZXN0aW9uUGFyZW50UXVlc3Rpb25JZCA9PT0gcGFyZW50UXVlc3Rpb25JZCAmJiBhLmNoaWxkRGVmYXVsdE9wdGlvbklkID09PSBwYXJlbnRPcHRpb25JZDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gYS5zZWN0aW9uUXVlc3Rpb24/LnF1ZXN0aW9uSWQgPT09IHFJZCAmJiAoIWEuY2hpbGRRdWVzdGlvbklkIHx8IGEuY2hpbGRRdWVzdGlvbklkID09PSAwKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRRdWVzdGlvbldlaWdodChxSWQ6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5xdWVzdGlvbkJhbmtbcUlkXT8ud2VpZ2h0IHx8IDA7XHJcbiAgfVxyXG5cclxuICBzaG91bGRTaG93TWFya3NEcm9wZG93bihxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBhdXRvQXNzaWduZWRUeXBlcyA9IFtcclxuICAgICAgJ1FVRVNUSU9OX1RZUEUuT0JKRUNUSVZFJyxcclxuICAgICAgJ1FVRVNUSU9OX1RZUEUuTVVMVElfU0VMRUNUJ1xyXG4gICAgXTtcclxuICAgIGNvbnN0IGhhc1dlaWdodCA9IHRoaXMuZ2V0UXVlc3Rpb25XZWlnaHQocXVlc3Rpb24uaWQgfHwgMCkgPiAwO1xyXG4gICAgcmV0dXJuICFhdXRvQXNzaWduZWRUeXBlcy5pbmNsdWRlcyhxdWVzdGlvbi5xdWVzdGlvblR5cGU/LmNvZGUgfHwgJycpICYmIGhhc1dlaWdodDtcclxuICB9XHJcblxyXG4gIGdldFByZWZpbGxlZEFuc3dlcihxSWQ6IG51bWJlciwgaXNDaGlsZDogYm9vbGVhbiA9IGZhbHNlLCBwYXJlbnRJZD86IG51bWJlciwgcGFyZW50T3B0aW9uSWQ/OiBudW1iZXIpOiBhbnkge1xyXG4gICAgaWYgKCF0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmFpYWRlZmF1bHRSZXNwb25zZUxpc3QpIHJldHVybiBudWxsO1xyXG5cclxuICAgIGNvbnN0IGFuc3dlck9iaiA9IHRoaXMuYXNzZXNzZWVSZXNwb25zZS5haWFkZWZhdWx0UmVzcG9uc2VMaXN0LmZpbmQoKGE6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoaXNDaGlsZCkge1xyXG4gICAgICAgIHJldHVybiBhLmNoaWxkUXVlc3Rpb25JZCA9PT0gcUlkICYmIGEuY2hpbGRRdWVzdGlvblBhcmVudFF1ZXN0aW9uSWQgPT09IHBhcmVudElkICYmIGEuY2hpbGREZWZhdWx0T3B0aW9uSWQgPT09IHBhcmVudE9wdGlvbklkO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBhLnNlY3Rpb25RdWVzdGlvbj8ucXVlc3Rpb25JZCA9PT0gcUlkICYmICghYS5jaGlsZFF1ZXN0aW9uSWQgfHwgYS5jaGlsZFF1ZXN0aW9uSWQgPT09IDApO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoIWFuc3dlck9iaikgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgY29uc3QgcXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uQmFua1txSWRdO1xyXG4gICAgaWYgKCFxdWVzdGlvbikgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgY29uc3QgcVR5cGUgPSBxdWVzdGlvbi5xdWVzdGlvblR5cGU/LmNvZGU7XHJcblxyXG4gICAgaWYgKHFUeXBlID09PSAnUVVFU1RJT05fVFlQRS5PQkpFQ1RJVkUnKSB7XHJcbiAgICAgIHJldHVybiBhbnN3ZXJPYmoub3B0aW9uSWQ/LmlkO1xyXG4gICAgfSBlbHNlIGlmIChxVHlwZSA9PT0gJ1FVRVNUSU9OX1RZUEUuTVVMVElfU0VMRUNUJyB8fCBxVHlwZSA9PT0gJ1FVRVNUSU9OX1RZUEUuUFJFRkVSRU5DRScpIHtcclxuICAgICAgbGV0IHNvcnRlZExpc3QgPSBbLi4uKGFuc3dlck9iai5kcm9iamVjdGl2ZXJlc3BvbnNlTGlzdCB8fCBbXSldO1xyXG4gICAgICBpZiAocVR5cGUgPT09ICdRVUVTVElPTl9UWVBFLlBSRUZFUkVOQ0UnKSB7XHJcbiAgICAgICAgc29ydGVkTGlzdC5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gKGEub3JkZXJObyB8fCAwKSAtIChiLm9yZGVyTm8gfHwgMCkpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzb3J0ZWRMaXN0Lm1hcCgocjogYW55KSA9PiByLmRlZmF1bHRPcHRpb24/Lm9wdGlvbnMpIHx8IFtdO1xyXG4gICAgfSBlbHNlIGlmIChxVHlwZSA9PT0gJ1FVRVNUSU9OX1RZUEUuRklMRV9VUExPQUQnKSB7XHJcbiAgICAgIHJldHVybiBhbnN3ZXJPYmouYXR0YWNobWVudFJlc3BvbnNlTGlzdCB8fCBbXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBhbnN3ZXJPYmouZHJzdWJqZWN0aXZlcmVzcG9uc2VMaXN0Py5bMF0/LnJlc3BvbnNlVGV4dCA/PyBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0VmFsaWRhdG9yc0ZvclF1ZXN0aW9uKHF1ZXN0aW9uOiBBc3Nlc3NtZW50UXVlc3Rpb24sIGlzTWFuZGF0b3J5OiBib29sZWFuKTogYW55W10ge1xyXG4gICAgY29uc3QgdmFsaWRhdG9yczogYW55W10gPSBbXTtcclxuICAgIGlmIChpc01hbmRhdG9yeSkge1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHF1ZXN0aW9uLnJlc3BvbnNlVmFsaWRhdGlvbj8ubGVuZ3RoKSB7XHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4ocXVlc3Rpb24ucmVzcG9uc2VWYWxpZGF0aW9uKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocXVlc3Rpb24ucXVlc3Rpb25UeXBlPy5jb2RlID09PSAnUVVFU1RJT05fVFlQRS5FTUFJTCcpIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5wYXR0ZXJuKC9eW2EtekEtWjAtOS5fJSstXStAW2EtekEtWjAtOS4tXStcXC5bYS16QS1aXXsyLH0kLykpO1xyXG4gICAgICB9IGVsc2UgaWYgKHF1ZXN0aW9uLnF1ZXN0aW9uVHlwZT8uY29kZSA9PT0gJ1FVRVNUSU9OX1RZUEUuVVJMJykge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oL14oaHR0cHM/OlxcL1xcLyk/KFtcXHdcXC1dKyhcXC5bXFx3XFwtXSspKykoW1xcLz8jXS4qKT8kL2kpKTtcclxuICAgICAgfSBlbHNlIGlmIChxdWVzdGlvbi5xdWVzdGlvblR5cGU/LmNvZGUgPT09ICdRVUVTVElPTl9UWVBFLkNPTlRBQ1RfTlVNQkVSJykge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oL15bMC05XXsxMH0kLykpO1xyXG4gICAgICB9IGVsc2UgaWYgKHF1ZXN0aW9uLnF1ZXN0aW9uVHlwZT8uY29kZSA9PT0gJ1FVRVNUSU9OX1RZUEUuTlVNQkVSJykge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLnBhdHRlcm4oL15bMC05XSskLykpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHF1ZXN0aW9uLnF1ZXN0aW9uQ29uZmlncyAmJiBxdWVzdGlvbi5xdWVzdGlvbkNvbmZpZ3MubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBtaW5DaGFyID0gcXVlc3Rpb24ucXVlc3Rpb25Db25maWdzLmZpbmQoYyA9PiBjLmNvbmZpZ0tleSA9PT0gJ21pbkNoYXJhY3RlckNvdW50Jyk/LmNvbmZpZ1ZhbHVlO1xyXG4gICAgICBpZiAobWluQ2hhcikgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluTGVuZ3RoKE51bWJlcihtaW5DaGFyKSkpO1xyXG5cclxuICAgICAgY29uc3QgbWF4Q2hhciA9IHF1ZXN0aW9uLnF1ZXN0aW9uQ29uZmlncy5maW5kKGMgPT4gYy5jb25maWdLZXkgPT09ICdtYXhDaGFyYWN0ZXJDb3VudCcpPy5jb25maWdWYWx1ZTtcclxuICAgICAgaWYgKG1heENoYXIpIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aChOdW1iZXIobWF4Q2hhcikpKTtcclxuXHJcbiAgICAgIGNvbnN0IG1pbk9wdCA9IHF1ZXN0aW9uLnF1ZXN0aW9uQ29uZmlncy5maW5kKGMgPT4gYy5jb25maWdLZXkgPT09ICdtaW5pbXVtTnVtYmVyT2ZPcHRpb24nKT8uY29uZmlnVmFsdWU7XHJcbiAgICAgIGlmIChtaW5PcHQpIHtcclxuICAgICAgICB2YWxpZGF0b3JzLnB1c2goKGNvbnRyb2w6IEZvcm1Db250cm9sKSA9PiB7XHJcbiAgICAgICAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgY29udHJvbC52YWx1ZS5sZW5ndGggPCBOdW1iZXIobWluT3B0KSkge1xyXG4gICAgICAgICAgICByZXR1cm4geyBtaW5PcHRpb25zOiB7IHJlcXVpcmVkOiBOdW1iZXIobWluT3B0KSwgYWN0dWFsOiBjb250cm9sLnZhbHVlPy5sZW5ndGggfHwgMCB9IH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgbWF4T3B0ID0gcXVlc3Rpb24ucXVlc3Rpb25Db25maWdzLmZpbmQoYyA9PiBjLmNvbmZpZ0tleSA9PT0gJ21heGltdW1OdW1iZXJPZk9wdGlvbicpPy5jb25maWdWYWx1ZTtcclxuICAgICAgaWYgKG1heE9wdCkge1xyXG4gICAgICAgIHZhbGlkYXRvcnMucHVzaCgoY29udHJvbDogRm9ybUNvbnRyb2wpID0+IHtcclxuICAgICAgICAgIGlmIChjb250cm9sLnZhbHVlICYmIGNvbnRyb2wudmFsdWUubGVuZ3RoID4gTnVtYmVyKG1heE9wdCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHsgbWF4T3B0aW9uczogeyByZXF1aXJlZDogTnVtYmVyKG1heE9wdCksIGFjdHVhbDogY29udHJvbC52YWx1ZT8ubGVuZ3RoIHx8IDAgfSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IG1heEZpbGVzID0gcXVlc3Rpb24ucXVlc3Rpb25Db25maWdzLmZpbmQoYyA9PiBjLmNvbmZpZ0tleSA9PT0gJ21heE5vT2ZGaWxlcycpPy5jb25maWdWYWx1ZTtcclxuICAgICAgaWYgKG1heEZpbGVzKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKChjb250cm9sOiBGb3JtQ29udHJvbCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgY29udHJvbC52YWx1ZS5sZW5ndGggPiBOdW1iZXIobWF4RmlsZXMpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7IG1heEZpbGVzOiB7IHJlcXVpcmVkOiBOdW1iZXIobWF4RmlsZXMpLCBhY3R1YWw6IGNvbnRyb2wudmFsdWU/Lmxlbmd0aCB8fCAwIH0gfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBtYXhGaWxlU2l6ZSA9IHF1ZXN0aW9uLnF1ZXN0aW9uQ29uZmlncy5maW5kKGMgPT4gYy5jb25maWdLZXkgPT09ICdtYXhGaWxlU2l6ZScpPy5jb25maWdWYWx1ZTtcclxuICAgICAgaWYgKG1heEZpbGVTaXplKSB7XHJcbiAgICAgICAgdmFsaWRhdG9ycy5wdXNoKChjb250cm9sOiBGb3JtQ29udHJvbCkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgQXJyYXkuaXNBcnJheShjb250cm9sLnZhbHVlKSkge1xyXG4gICAgICAgICAgICBjb25zdCBoYXNMYXJnZUZpbGUgPSBjb250cm9sLnZhbHVlLnNvbWUoKGZpbGU6IGFueSkgPT4gZmlsZT8uc2l6ZSAmJiBmaWxlLnNpemUgPiAoTnVtYmVyKG1heEZpbGVTaXplKSAqIDEwMjQgKiAxMDI0KSk7XHJcbiAgICAgICAgICAgIGlmIChoYXNMYXJnZUZpbGUpIHtcclxuICAgICAgICAgICAgICByZXR1cm4geyBtYXhGaWxlU2l6ZTogeyByZXF1aXJlZFNpemU6IE51bWJlcihtYXhGaWxlU2l6ZSkgfSB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbGlkYXRvcnM7XHJcbiAgfVxyXG5cclxuICBpbWFnZUVycm9ySGFuZGxlcihldmVudDogYW55LCBmaWxlUGF0aDogc3RyaW5nKSB7XHJcbiAgICBldmVudC50YXJnZXQuc3JjID0gZmlsZVBhdGg7XHJcbiAgfVxyXG5cclxuICBpc09wdGlvblNlbGVjdGVkKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uLCBvcHRpb25JZDogbnVtYmVyIHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIW9wdGlvbklkKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IGNvbnRyb2xOYW1lID0gcXVlc3Rpb24uaWQ/LnRvU3RyaW5nKCk7XHJcblxyXG4gICAgaWYgKCFjb250cm9sTmFtZSkgcmV0dXJuIGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGNvbnRyb2xOYW1lKTtcclxuICAgIGlmICghY29udHJvbCB8fCBjb250cm9sLnZhbHVlID09IG51bGwpIHJldHVybiBmYWxzZTtcclxuXHJcbiAgICAvLyBNdWx0aS1zZWxlY3QgZGVhbHMgd2l0aCBhbiBhcnJheSBvZiB2YWx1ZXNcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiBjb250cm9sLnZhbHVlLmluY2x1ZGVzKG9wdGlvbklkKSB8fCBjb250cm9sLnZhbHVlLnNvbWUoKHZhbDogYW55KSA9PiB2YWw/LmlkID09PSBvcHRpb25JZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gT2JqZWN0aXZlIC8gU2luZ2xlIHNlbGVjdCBkZWFscyB3aXRoIGEgc2luZ2xlIHZhbHVlIChjb3VsZCBiZSBpbnRlZ2VyIElEIG9yIG9iamVjdClcclxuICAgIGlmICh0eXBlb2YgY29udHJvbC52YWx1ZSA9PT0gJ29iamVjdCcgJiYgY29udHJvbC52YWx1ZS5pZCkge1xyXG4gICAgICByZXR1cm4gY29udHJvbC52YWx1ZS5pZCA9PT0gb3B0aW9uSWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGNvbnRyb2wudmFsdWUgPT09IG9wdGlvbklkO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWF4Q2hhckNvdW50KHF1ZXN0aW9uOiBBc3Nlc3NtZW50UXVlc3Rpb24pOiBudW1iZXIge1xyXG4gICAgY29uc3QgY29uZmlnID0gcXVlc3Rpb24/LnF1ZXN0aW9uQ29uZmlncz8uZmluZChjID0+IGMuY29uZmlnS2V5ID09PSAnbWF4Q2hhcmFjdGVyQ291bnQnKTtcclxuICAgIHJldHVybiBjb25maWcgPyBOdW1iZXIoY29uZmlnLmNvbmZpZ1ZhbHVlKSA6IDA7XHJcbiAgfVxyXG5cclxuICBnZXRSZW1haW5pbmdDaGFycyhxdWVzdGlvbjogQXNzZXNzbWVudFF1ZXN0aW9uLCBjb250cm9sOiBhbnkpOiBudW1iZXIge1xyXG4gICAgY29uc3QgbWF4ID0gdGhpcy5nZXRNYXhDaGFyQ291bnQocXVlc3Rpb24pO1xyXG4gICAgY29uc3QgY3VycmVudExlbmd0aCA9IGNvbnRyb2wudmFsdWUgPyBjb250cm9sLnZhbHVlLmxlbmd0aCA6IDA7XHJcbiAgICByZXR1cm4gbWF4IC0gY3VycmVudExlbmd0aDtcclxuICB9XHJcblxyXG4gIGdvQmFjaygpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdGVkVGFiSW5kZXggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleC0tO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvdWxkRGlzYWJsZVRhYihpbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGluZGV4OyBqKyspIHtcclxuICAgICAgaWYgKHRoaXMuc2VjdGlvbkZvcm1Hcm91cHNbal0/LmZvcm1Hcm91cD8uaW52YWxpZCkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnb05leHQoc2F2ZURhdGE6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICBjb25zdCBzYXZlID0gdGhpcy5hc3Nlc3NtZW50RGF0YT8uYXNzZXNzbWVudENvbmZpZ3M/LmZpbmQoYyA9PiBjLmNvbmZpZ0tleSA9PSAnYXNzZXNtZW50LmNvbmZpZy5hbGxvd2VkLXBhcnRpYWwtcmVzcG9uc2UnKT8uY29uZmlnVmFsdWUgPT0gJzEnO1xyXG4gICAgY29uc3QgY3VycmVudFNlY3Rpb24gPSB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzW3RoaXMuc2VsZWN0ZWRUYWJJbmRleF07XHJcbiAgICBpZiAoIWN1cnJlbnRTZWN0aW9uKSByZXR1cm47XHJcblxyXG4gICAgY3VycmVudFNlY3Rpb24uZm9ybUdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKTtcclxuXHJcbiAgICBpZiAoY3VycmVudFNlY3Rpb24uZm9ybUdyb3VwLmludmFsaWQpIHtcclxuICAgICAgdGhpcy5zZWN0aW9uRXJyb3JzW3RoaXMuc2VsZWN0ZWRUYWJJbmRleF0gPSB0cnVlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZWN0aW9uRXJyb3JzW3RoaXMuc2VsZWN0ZWRUYWJJbmRleF0gPSBmYWxzZTtcclxuXHJcbiAgICBpZiAodGhpcy5zZWxlY3RlZFRhYkluZGV4IDwgdGhpcy5zZWN0aW9uRm9ybUdyb3Vwcy5sZW5ndGggLSAxKSB7XHJcbiAgICAgIHNhdmUgJiYgc2F2ZURhdGEgPyB0aGlzLnNhdmUoKSA6IHRoaXMuc2VsZWN0ZWRUYWJJbmRleCsrO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wcm9jZXNzU3VibWl0KHNhdmVEYXRhKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cGFuZGVkU3RhdGU6IGJvb2xlYW5bXSA9IFtdO1xyXG5cclxuICBwcm9jZXNzU3VibWl0KHNhdmVEYXRhOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgbGV0IGZpcnN0SW52YWxpZEluZGV4ID0gLTE7XHJcbiAgICB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLmZvckVhY2goKGdyb3VwLCBpbmRleCkgPT4ge1xyXG4gICAgICBncm91cC5mb3JtR3JvdXAubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICBpZiAoZ3JvdXAuZm9ybUdyb3VwLmludmFsaWQpIHtcclxuICAgICAgICB0aGlzLnNlY3Rpb25FcnJvcnNbaW5kZXhdID0gdHJ1ZTtcclxuICAgICAgICBpZiAoZmlyc3RJbnZhbGlkSW5kZXggPT09IC0xKSBmaXJzdEludmFsaWRJbmRleCA9IGluZGV4O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VjdGlvbkVycm9yc1tpbmRleF0gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKGZpcnN0SW52YWxpZEluZGV4ICE9PSAtMSkge1xyXG4gICAgICBpZiAoIXRoaXMudmVydGljYWxWaWV3KSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4ID0gZmlyc3RJbnZhbGlkSW5kZXg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZFN0YXRlW2ZpcnN0SW52YWxpZEluZGV4XSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5GSVhfRVJST1JTJ10sIHR5cGU6ICdlcnJvcicgfSk7XHJcbiAgICAgIHRoaXMuc2Nyb2xsVG9GaXJzdEludmFsaWRGaWVsZChmaXJzdEludmFsaWRJbmRleCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNhdmUodHJ1ZSwgc2F2ZURhdGEpO1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsVG9GaXJzdEludmFsaWRGaWVsZChzZWN0aW9uSW5kZXg6IG51bWJlcikge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGZvcm1Hcm91cCA9IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHNbc2VjdGlvbkluZGV4XS5mb3JtR3JvdXA7XHJcbiAgICAgIGZvciAoY29uc3QgY29udHJvbE5hbWUgaW4gZm9ybUdyb3VwLmNvbnRyb2xzKSB7XHJcbiAgICAgICAgaWYgKGZvcm1Hcm91cC5jb250cm9sc1tjb250cm9sTmFtZV0uaW52YWxpZCkge1xyXG4gICAgICAgICAgbGV0IHFJZCA9IGNvbnRyb2xOYW1lO1xyXG4gICAgICAgICAgaWYgKGNvbnRyb2xOYW1lLmluY2x1ZGVzKCdfcmVtYXJrc18nKSB8fCBjb250cm9sTmFtZS5pbmNsdWRlcygnX21hcmtzJykpIHtcclxuICAgICAgICAgICAgcUlkID0gY29udHJvbE5hbWUuc3BsaXQoJ18nKVswXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcXVlc3Rpb24tY29udGFpbmVyLSR7cUlkfWApO1xyXG4gICAgICAgICAgaWYgKGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgZWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdjZW50ZXInIH0pO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICBzYXZlKGdvTmV4dDogYm9vbGVhbiA9IHRydWUsIHNhdmVEYXRhOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgaWYgKHRoaXMuaXNTdWJtaXR0aW5nKSByZXR1cm47XHJcbiAgICB0aGlzLmlzU3VibWl0dGluZyA9IHRydWU7XHJcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcclxuICAgICAgaWYgKHRoaXMubWFya0FzQ29tcGxldGVkICYmICh0aGlzLnNlbGVjdGVkVGFiSW5kZXggPT0gdGhpcy5zZWN0aW9uRm9ybUdyb3Vwcy5sZW5ndGggLSAxIHx8IHRoaXMudmVydGljYWxWaWV3KSkge1xyXG4gICAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZS5hc3Nlc3NtZW50VGFrZW4gPSB7IGNvZGU6ICdBU1NFU1NNRU5UX1RBS0VOLkNPTVBMRVRFJyB9O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZS5hc3Nlc3NtZW50VGFrZW4gPSB7IGNvZGU6ICdBU1NFU1NNRU5UX1RBS0VOLklOQ09NUExFVEUnIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5yZXNwb25zZUJ1aWxkZXJTZXJ2aWNlLmJ1aWxkUmVzcG9uc2VQYXlsb2FkKFxyXG4gICAgICB0aGlzLmFzc2Vzc2VlUmVzcG9uc2UsXHJcbiAgICAgIHRoaXMuYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLFxyXG4gICAgICB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLFxyXG4gICAgICB0aGlzLnF1ZXN0aW9uQmFuayxcclxuICAgICAgdGhpcy50ZW5hbnRJZFxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAodGhpcy5zaG93T3ZlcmFsbFJlbWFya3MgJiYgdGhpcy5hc3Nlc3NlZVJlc3BvbnNlKSB7XHJcbiAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZS5ub3RlcyA9IHRoaXMub3ZlcmFsbE5vdGVzQ3RybC52YWx1ZSB8fCBudWxsO1xyXG4gICAgICBwYXlsb2FkLm5vdGVzID0gdGhpcy5hc3Nlc3NlZVJlc3BvbnNlLm5vdGVzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghc2F2ZURhdGEgfHwgKHRoaXMuZGlzYWJsZWQgJiYgIXRoaXMuZW5hYmxlTWFya3MpKSB7XHJcbiAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc3VibWl0QXNzZXNzbWVudC5lbWl0KHtcclxuICAgICAgICBhc3Nlc3NlZUlkOiB0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmlkLFxyXG4gICAgICAgIGFzc2Vzc2VlUmVzcG9uc2U6IHBheWxvYWQsXHJcbiAgICAgICAgY29tcGxldGVkOiBnb05leHQgJiYgKHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA9PSB0aGlzLnNlY3Rpb25Gb3JtR3JvdXBzLmxlbmd0aCAtIDEgfHwgdGhpcy52ZXJ0aWNhbFZpZXcpXHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoZ29OZXh0ICYmIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA8IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCsrO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBhcGlDYWxsID0gdGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5pZCA/IHRoaXMuYXNzZXNzbWVudFRha2VyU2VydmljZS5wYXRjaEFzc2Vzc21lbnQocGF5bG9hZCkgOiB0aGlzLmFzc2Vzc21lbnRUYWtlclNlcnZpY2Uuc3VibWl0QXNzZXNzbWVudChwYXlsb2FkKTtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkICYmIHRoaXMuZW5hYmxlTWFya3MpIHtcclxuICAgICAgY29uc3QgbWFya3NQYXlsb2FkOiBhbnkgPSB0aGlzLnJlc3BvbnNlQnVpbGRlclNlcnZpY2UuYnVpbGRNYXJrc1BheWxvYWQocGF5bG9hZCk7XHJcbiAgICAgIGlmICh0aGlzLnNob3dPdmVyYWxsUmVtYXJrcykge1xyXG4gICAgICAgIG1hcmtzUGF5bG9hZC5ub3RlcyA9IHRoaXMub3ZlcmFsbE5vdGVzQ3RybC52YWx1ZSB8fCBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGFwaUNhbGwgPSB0aGlzLmFzc2Vzc21lbnRUYWtlclNlcnZpY2UudXBkYXRlTWFya3MobWFya3NQYXlsb2FkKTtcclxuICAgIH1cclxuICAgIGFwaUNhbGwuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmFzc2Vzc2VlUmVzcG9uc2U/LmlkKSB7XHJcbiAgICAgICAgICB0aGlzLmdldEFuc3dlcnNCeUFpYUlkKHJlcyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZSA9IHJlcztcclxuICAgICAgICAgIHRoaXMub3ZlcmFsbE5vdGVzQ3RybC5zZXRWYWx1ZSh0aGlzLmFzc2Vzc2VlUmVzcG9uc2Uubm90ZXMgfHwgJycpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzU3VibWl0dGluZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3VibWl0QXNzZXNzbWVudC5lbWl0KHtcclxuICAgICAgICAgIGFzc2Vzc2VlSWQ6IHRoaXMuYXNzZXNzZWVSZXNwb25zZT8uaWQgfHwgcmVzLFxyXG4gICAgICAgICAgYXNzZXNzZWVSZXNwb25zZTogdGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5pZCA/IHRoaXMuYXNzZXNzZWVSZXNwb25zZSA6IHBheWxvYWQsXHJcbiAgICAgICAgICBjb21wbGV0ZWQ6IGdvTmV4dCAmJiAodGhpcy5zZWxlY3RlZFRhYkluZGV4ID09IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMubGVuZ3RoIC0gMSB8fCB0aGlzLnZlcnRpY2FsVmlldylcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoZ29OZXh0ICYmIHRoaXMuc2VsZWN0ZWRUYWJJbmRleCA8IHRoaXMuc2VjdGlvbkZvcm1Hcm91cHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFRhYkluZGV4Kys7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogZXJyb3IgPT4ge1xyXG4gICAgICAgIHRoaXMuaXNTdWJtaXR0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zbmFja2Jhck1lc3NhZ2UuZW1pdCh7IG1lc3NhZ2U6IHRoaXMubGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5UT0FTVC5TQVZFX0ZBSUxFRCddLCB0eXBlOiAnZXJyb3InIH0pO1xyXG4gICAgICAgIHRocm93IHsgZXJyb3IsIG1ldGhvZDogdGhpcy5hc3Nlc3NlZVJlc3BvbnNlPy5pZCA/ICdQQVRDSCcgOiAnUE9TVCcsIHBheWxvYWQgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldEFuc3dlcnNCeUFpYUlkKGFzc2Vzc2VlSWQ6IG51bWJlcikge1xyXG4gICAgdGhpcy5hc3Nlc3NtZW50VGFrZXJTZXJ2aWNlLmdldEFuc3dlcnNCeUFpYUlkKGFzc2Vzc2VlSWQpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXNzZXNzZWVSZXNwb25zZSA9IHJlcztcclxuICAgICAgICB0aGlzLm92ZXJhbGxOb3Rlc0N0cmwuc2V0VmFsdWUodGhpcy5hc3Nlc3NlZVJlc3BvbnNlLm5vdGVzIHx8ICcnKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IGVycm9yID0+IHtcclxuICAgICAgICB0aGlzLnNuYWNrYmFyTWVzc2FnZS5lbWl0KHsgbWVzc2FnZTogdGhpcy5sYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlRPQVNULkdFVF9GQUlMRUQnXSwgdHlwZTogJ2Vycm9yJyB9KTtcclxuICAgICAgICB0aHJvdyB7IGVycm9yLCBtZXRob2Q6ICdHRVQnIH1cclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhZGRZb3V0dWJlSWZyYW1lU3JjKHZpZGVvVXJsOiBzdHJpbmcpIHtcclxuICAgIGlmICghdmlkZW9VcmwpIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHRoaXMueW91dHViZVVybENhY2hlW3ZpZGVvVXJsXSkge1xyXG4gICAgICByZXR1cm4gdGhpcy55b3V0dWJlVXJsQ2FjaGVbdmlkZW9VcmxdO1xyXG4gICAgfVxyXG4gICAgY29uc3QgdmlkZW9JZCA9IHRoaXMuZ2V0VmlkZW9JZCh2aWRlb1VybCk7XHJcbiAgICBjb25zdCB5b3V0dWJlVXJsID0gYGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7dmlkZW9JZH1gO1xyXG4gICAgdGhpcy55b3V0dWJlVXJsQ2FjaGVbdmlkZW9VcmxdID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdFJlc291cmNlVXJsKHlvdXR1YmVVcmwpO1xyXG4gICAgcmV0dXJuIHRoaXMueW91dHViZVVybENhY2hlW3ZpZGVvVXJsXTtcclxuICB9XHJcblxyXG4gIGdldFZpZGVvSWQodmlkZW9Vcmw6IHN0cmluZykge1xyXG4gICAgbGV0IHBhdHRlcm4gPSBudWxsO1xyXG4gICAgaWYgKHZpZGVvVXJsLmluY2x1ZGVzKCd5b3V0dWJlLmNvbScpKSB7XHJcbiAgICAgIHBhdHRlcm4gPSAvKD86XFw/dj18JnY9fHlvdXR1XFwuYmVcXC98XFwvZW1iZWRcXC98XFwvXFxkXFwvfFxcL3ZpXFwvfFxcL3ZcXC98aHR0cHM/OlxcL1xcLyg/Ond3d1xcLik/eW91dHViZVxcLmNvbVxcLyg/OnZcXC98ZW1iZWRcXC98d2F0Y2hcXD8oPzpcXFMrJik/dj18d2F0Y2hcXD8oPzpcXFMrJik/dmk9fFxcUytcXC8pKShbYS16QS1aMC05Xy1dezExfSkvO1xyXG4gICAgfSBlbHNlIGlmICh2aWRlb1VybC5pbmNsdWRlcygneW91dHUuYmUnKSkge1xyXG4gICAgICBwYXR0ZXJuID0gL3lvdXR1XFwuYmVcXC8oW2EtekEtWjAtOV8tXXsxMX0pLztcclxuICAgIH1cclxuICAgIGlmIChwYXR0ZXJuKSB7XHJcbiAgICAgIGNvbnN0IG1hdGNoID0gdmlkZW9VcmwubWF0Y2gocGF0dGVybik7XHJcbiAgICAgIGlmIChtYXRjaCAmJiBtYXRjaFsxXSkge1xyXG4gICAgICAgIHJldHVybiBtYXRjaFsxXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBvcGVuSW5zdHJ1Y3Rpb25zRGlhbG9nKHNlY3Rpb246IFF1ZXN0aW9uUGFwZXJTZWN0aW9uKSB7XHJcbiAgICB0aGlzLmRpYWxvZy5vcGVuKFNlY3Rpb25JbnN0cnVjdGlvbnNDb21wb25lbnQsIHtcclxuICAgICAgYXV0b0ZvY3VzOiBmYWxzZSxcclxuICAgICAgbWF4V2lkdGg6ICc5NSUnLFxyXG4gICAgICB3aWR0aDogJ2NhbGMoMjByZW0gKyA1MDBweCknLFxyXG4gICAgICBtYXhIZWlnaHQ6ICc5NWR2aCcsXHJcbiAgICAgIHBhbmVsQ2xhc3M6IFsnYXNzZXNzbWVudC1kaWFsb2cnXSxcclxuICAgICAgZGF0YToge1xyXG4gICAgICAgIGltYWdlQ29uZmlnOiB0aGlzLmltYWdlQ29uZmlnLFxyXG4gICAgICAgIGxhYmVsQ29uZmlnOiB0aGlzLmxhYmVsQ29uZmlnLFxyXG4gICAgICAgIHNlY3Rpb25EZXRhaWxzOiBzZWN0aW9uLFxyXG4gICAgICAgIHlvdXR1YmVVcmxDYWNoZTogdGhpcy55b3V0dWJlVXJsQ2FjaGVcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tNYXhWYWwoZXZlbnQ6IGFueSwgY29udHJvbDogYW55LCBtYXhWYWw6IG51bWJlciB8IHVuZGVmaW5lZCkge1xyXG4gICAgY29uc3QgdG90YWxNYXJrcyA9IE51bWJlcihtYXhWYWwpIHx8IDA7XHJcbiAgICBpZiAodG90YWxNYXJrcyA+IDApIHtcclxuICAgICAgbGV0IHZhbCA9IE51bWJlcihldmVudC50YXJnZXQudmFsdWUpO1xyXG4gICAgICBpZiAodmFsID4gdG90YWxNYXJrcykge1xyXG4gICAgICAgIGV2ZW50LnRhcmdldC52YWx1ZSA9IHRvdGFsTWFya3M7XHJcbiAgICAgICAgY29udHJvbD8uc2V0VmFsdWUodG90YWxNYXJrcywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuU2tpbGxBbGxvY2F0aW9uRGlhbG9nKHNraWxsTGlzdD86IFNraWxsU2NvcmVbXSkge1xyXG4gICAgdGhpcy5kaWFsb2cub3BlbihTa2lsbEFsbG9jYXRpb25Db21wb25lbnQsIHtcclxuICAgICAgbWF4SGVpZ2h0OiAnOTVkdmgnLFxyXG4gICAgICBtYXhXaWR0aDogJzkwdncnLFxyXG4gICAgICB3aWR0aDogJzM1cmVtJyxcclxuICAgICAgcGFuZWxDbGFzczogWydhc3Nlc3NtZW50LWRpYWxvZyddLFxyXG4gICAgICBkYXRhOiB7XHJcbiAgICAgICAgbGFiZWw6IHRoaXMubGFiZWxDb25maWcsXHJcbiAgICAgICAgc2tpbGxMaXN0XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICpuZ0lmPVwiY29uZmlnc0xvYWRlZCAmJiAhc2hvd0xvYWRlcjsgZWxzZSBsb2FkZXJcIiBjbGFzcz1cImNvbC0xMiBoLTEwMFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC0xMiBoLTEwMCBwdC0yIHBiLTRcIiBbY2xhc3MuaGVpZ2h0LXdpdGhvdXQtZm9vdGVyXT1cInNob3dGb290ZXJcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICA8bWF0LXRhYi1ncm91cCAqbmdJZj1cIiF2ZXJ0aWNhbFZpZXdcIiBhbmltYXRpb25EdXJhdGlvbj1cIjBtc1wiIGNsYXNzPVwiYXNzZXNzbWVudC1tYXQtY3VzdG9tLXRhYnNcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydhc3Nlc3NtZW50LWhpZGUtdGFicyc6IGhpZGVTZWN0aW9uVGFic31cIiBbKHNlbGVjdGVkSW5kZXgpXT1cInNlbGVjdGVkVGFiSW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtdGFiXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdCB8IG9yZGVyQnk7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzaG91bGREaXNhYmxlVGFiKGkpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdC10YWItbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXNlbWlib2xkLTE2XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlY3Rpb25FcnJvcnNbaV0gPyAnYXNzZXNzbWVudC10ZXh0LWRhbmdlcicgOiAnJ1wiPnt7c2VjdGlvbi5xcHNOYW1lPy5bMF0/LnRleHR9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic2VjdGlvbkNvbnRlbnQ7IGNvbnRleHQ6IHsgc2VjdGlvbjogc2VjdGlvbiwgaTogaSB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L21hdC10YWI+XHJcbiAgICAgICAgICAgIDwvbWF0LXRhYi1ncm91cD5cclxuXHJcbiAgICAgICAgICAgIDxtYXQtYWNjb3JkaW9uICpuZ0lmPVwidmVydGljYWxWaWV3XCIgbXVsdGk9XCJ0cnVlXCIgY2xhc3M9XCJkLWZsZXggZmxleC1jb2x1bW4gZ2FwLTRcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNlY3Rpb24gb2YgYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhLnF1ZXN0aW9uUGFwZXJTZWN0aW9uTGlzdCB8IG9yZGVyQnk7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtleHBhbmRlZF09XCJleHBhbmRlZFN0YXRlW2ldICE9PSBmYWxzZVwiIChvcGVuZWQpPVwiZXhwYW5kZWRTdGF0ZVtpXSA9IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbG9zZWQpPVwiZXhwYW5kZWRTdGF0ZVtpXSA9IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gc2hhZG93LW5vbmUgbS0wIGFzc2Vzc21lbnQtcGFuZWwgYmctdHJhbnNwYXJlbnRcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXIgY2xhc3M9XCJhc3Nlc3NtZW50LWJnLWdyZXktdHdvIGgtYXV0byBhc3Nlc3NtZW50LXBhbmVsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBnYXAtMiBjb2wtMTIgcGUtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNlY3Rpb25FcnJvcnNbaV0gPyAnYXNzZXNzbWVudC10ZXh0LWRhbmdlcicgOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2VjdGlvbi5xcHNOYW1lPy5bMF0/LnRleHR9fTwvc3Bhbj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2VjdGlvbldpc2VTY29yZT8uW3NlY3Rpb24/LmlkXSBhcyBzZWN0aW9uU2NvcmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiKHNlY3Rpb25TY29yZT8udG90YWxNYXJrcyA/PyAwKSA+IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgYXNzZXNzbWVudC10ZXh0LXByaW1hcnktZm91clwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIihzZWN0aW9uU2NvcmU/LnNraWxsU2NvcmVzPy5sZW5ndGggPz8gMCkgPiAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMSBhc3Nlc3NtZW50LXRleHQtZ3JleS10ZW4gcHgtMiBweS0xIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gc2tpbGwtY2hpcCBjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBvcGVuU2tpbGxBbGxvY2F0aW9uRGlhbG9nKHNlY3Rpb25TY29yZT8uc2tpbGxTY29yZXMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3NlY3Rpb25TY29yZT8uc2tpbGxTY29yZXM/Lmxlbmd0aH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuU0tJTExTJ119fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwid2hpdGUtc3BhY2Utbm93cmFwIGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE1IG1lLTFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuU0NPUkUnXX19Ojwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7c2VjdGlvblNjb3JlLm9idGFpbmVkTWFya3MgfHwgMH19L3t7c2VjdGlvblNjb3JlLnRvdGFsTWFya3N9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInNlY3Rpb25Db250ZW50OyBjb250ZXh0OiB7IHNlY3Rpb246IHNlY3Rpb24sIGk6IGkgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtZXhwYW5zaW9uLXBhbmVsPlxyXG4gICAgICAgICAgICA8L21hdC1hY2NvcmRpb24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhYXNzZXNzbWVudFF1ZXN0aW9uUGFwZXJEYXRhPy5xdWVzdGlvblBhcGVyU2VjdGlvbkxpc3Q/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiaC0xMDAgZC1mbGV4IGZsZXgtY29sdW1uIGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGdhcC0zXCI+XHJcbiAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uTk9fUVVFU1RJT05TJ11cIiBjbGFzcz1cImNvbC1zbS1hdXRvIGNvbC02XCJcclxuICAgICAgICAgICAgICAgIChlcnJvcik9XCJpbWFnZUVycm9ySGFuZGxlcigkZXZlbnQsICdhc3NldHMvY29tbW9ucy1hc3Nlc3NtZW50L2ltYWdlcy9uby1xdWVzdGlvbnMuc3ZnJylcIiAvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwibWItMSBhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE4XCI+e3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk5PX1FVRVNUSU9OUyddfX08L3A+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwic2hvd092ZXJhbGxSZW1hcmtzICYmIGFzc2Vzc21lbnRRdWVzdGlvblBhcGVyRGF0YT8ucXVlc3Rpb25QYXBlclNlY3Rpb25MaXN0Py5sZW5ndGhcIiBjbGFzcz1cIm10LTNcIj5cclxuICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE1IG1iLTJcIj57e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuT1ZFUkFMTF9SRU1BUktTJ119fTwvcD5cclxuICAgICAgICAgICAgPHRleHRhcmVhXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImNvbC0xMiBhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMyBhc3Nlc3NtZW50LWlucHV0LWJvcmRlci1vbmUgYXNzZXNzbWVudC1ib3JkZXItcmFkaXVzLXR3byBhc3Nlc3NtZW50LWlucHV0LXBhZGRpbmcgb3V0bGluZS0wIGFzc2Vzc21lbnQtYmctZ3JleS1vbmVcIlxyXG4gICAgICAgICAgICAgICAgcm93cz1cIjNcIiBbZm9ybUNvbnRyb2xdPVwib3ZlcmFsbE5vdGVzQ3RybFwiXHJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5QTEFDRUhPTERFUi5SRU1BUktTJ11cIj48L3RleHRhcmVhPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwic2hvd0Zvb3RlclwiXHJcbiAgICAgICAgY2xhc3M9XCJiZy13aGl0ZSBwLTMgcG9zaXRpb24tc3RpY2t5IGJvdHRvbS0wIGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWVuZCBib3JkZXItdG9wIGdhcC0zIHotaW5kZXgtMVwiPlxyXG4gICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC1idXR0b24tcGFkZGluZy1sYXJnZSBhc3Nlc3NtZW50LWJ0bi1wcmltYXJ5LXRyYW5zcGFyZW50IGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xM1wiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJnb0JhY2soKVwiICpuZ0lmPVwic2VsZWN0ZWRUYWJJbmRleCA+IDAgJiYgIXZlcnRpY2FsVmlld1wiPlxyXG4gICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuR09fQkFDSyddfX08L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc1N1Ym1pdHRpbmdcIiAoY2xpY2spPVwidmVydGljYWxWaWV3ID8gcHJvY2Vzc1N1Ym1pdCh0cnVlKSA6IGdvTmV4dCgpXCJcclxuICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC1idXR0b24tcGFkZGluZy1sYXJnZSBhc3Nlc3NtZW50LWJ0bi1wcmltYXJ5IGFzc2Vzc21lbnQtdGV4dC1zZW1pYm9sZC0xMyBwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJ7J29wYWNpdHktMCc6IGlzU3VibWl0dGluZ31cIj5cclxuICAgICAgICAgICAgICAgIHt7ICh2ZXJ0aWNhbFZpZXcgfHwgc2VsZWN0ZWRUYWJJbmRleCA9PT0gc2VjdGlvbkZvcm1Hcm91cHMubGVuZ3RoIC0gMSkgP1xyXG4gICAgICAgICAgICAgICAgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5TVUJNSVQnXSA6IGxhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuTkVYVCddIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPG1hdC1zcGlubmVyICpuZ0lmPVwiaXNTdWJtaXR0aW5nXCIgW2RpYW1ldGVyXT1cIjIwXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGUgdG9wLTUwIHN0YXJ0LTUwIHRyYW5zbGF0ZS1taWRkbGUgYXNzZXNzbWVudC1zcGlubmVyLXdoaXRlXCI+PC9tYXQtc3Bpbm5lcj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjbG9hZGVyPlxyXG4gICAgPGRpdiBjbGFzcz1cImgtMTAwIGNvbC0xMiBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgcHktNVwiPlxyXG4gICAgICAgIDxtYXQtc3Bpbm5lciBkaWFtZXRlcj1cIjYwXCIgY2xhc3M9XCJhc3Nlc3NtZW50LXNwaW5uZXItcHJpbWFyeVwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gUmVjdXJzaXZlIFRlbXBsYXRlIGZvciBRdWVzdGlvbnMgJiBDaGlsZCBRdWVzdGlvbnMgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjcXVlc3Rpb25UZW1wbGF0ZSBsZXQtcXVlc3Rpb25JZD1cInF1ZXN0aW9uSWRcIiBsZXQtaXNNYW5kYXRvcnk9XCJpc01hbmRhdG9yeVwiIGxldC1ncm91cEluZGV4PVwiZ3JvdXBJbmRleFwiXHJcbiAgICBsZXQtcGFyZW50T3B0aW9uSWQ9XCJwYXJlbnRPcHRpb25JZFwiIGxldC1wYXJlbnRRdWVzdGlvbklkPVwicGFyZW50UXVlc3Rpb25JZFwiIGxldC1zZXF1ZW5jZT1cInNlcXVlbmNlXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwic2VjdGlvbkZvcm1Hcm91cHNbZ3JvdXBJbmRleF0uZm9ybUdyb3VwXCIgW2Zvcm1Hcm91cF09XCJzZWN0aW9uRm9ybUdyb3Vwc1tncm91cEluZGV4XS5mb3JtR3JvdXBcIlxyXG4gICAgICAgIFtpZF09XCIncXVlc3Rpb24tY29udGFpbmVyLScgKyBxdWVzdGlvbklkXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gYXNzZXNzbWVudC1iZy13aGl0ZVwiXHJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsncC0zIGFzc2Vzc21lbnQtY2FyZC1ib3JkZXInOiAhcGFyZW50T3B0aW9uSWR9XCIgKm5nSWY9XCJxdWVzdGlvbkJhbmtbcXVlc3Rpb25JZF0gYXMgcXVlc3Rpb25cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LW1kLXJvdyBmbGV4LWNvbHVtbiBnYXAtMiBhbGlnbi1pdGVtcy1zdGFydFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xIGQtZmxleCBhbGlnbi1pdGVtcy1zdGFydCBnYXAtMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xNVwiICpuZ0lmPVwic2VxdWVuY2VcIj57e3NlcXVlbmNlfX0uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGdhcC0yIGFsaWduLWl0ZW1zLXN0YXJ0IGNvbC0xMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtZ3Jvdy0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtbWVkaXVtLTE1IG1iLTAgZC1mbGV4IGdhcC0xXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySHRtbF09XCJxdWVzdGlvbi5xdWVzdGlvblRleHQ/LlswXT8udGV4dFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiaXNNYW5kYXRvcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTEgYXNzZXNzbWVudC10ZXh0LWdyZXktZWlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoe3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLk1BTkRBVE9SWSddfX0pPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zIGNvbC0xMlwiICpuZ0lmPVwicXVlc3Rpb24/Lm1lZGlhVXJsPy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJWaWRlb1RlbXBsYXRlOyBjb250ZXh0Ont2aWRlb1VybDpxdWVzdGlvbj8ubWVkaWFVcmx9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVzdGlvbi5oaW50VGV4dD8ubGVuZ3RoICYmICFwcmV2aWV3TW9kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgW3NyY109XCJpbWFnZUNvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULklDT04uSU5GTyddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yKT1cImltYWdlRXJyb3JIYW5kbGVyKCRldmVudCwgJ2Fzc2V0cy9jb21tb25zLWFzc2Vzc21lbnQvaW1hZ2VzL2luZm8uc3ZnJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZGtPdmVybGF5T3JpZ2luICN0cmlnZ2VyPVwiY2RrT3ZlcmxheU9yaWdpblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cInRvb2x0aXBTdGF0ZVtxdWVzdGlvbi5pZCFdID0gdHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cInRvb2x0aXBTdGF0ZVtxdWVzdGlvbi5pZCFdID0gZmFsc2VcIiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgY2RrQ29ubmVjdGVkT3ZlcmxheSBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJ0cmlnZ2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cInRvb2x0aXBTdGF0ZVtxdWVzdGlvbi5pZCFdIHx8IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Nka0Nvbm5lY3RlZE92ZXJsYXlQb3NpdGlvbnNdPVwiW3sgb3JpZ2luWDogJ3N0YXJ0Jywgb3JpZ2luWTogJ2NlbnRlcicsIG92ZXJsYXlYOiAnZW5kJywgb3ZlcmxheVk6ICdjZW50ZXInLCBvZmZzZXRYOiAtOCwgb2Zmc2V0WTogMCB9LCB7IG9yaWdpblg6ICdlbmQnLCBvcmlnaW5ZOiAnY2VudGVyJywgb3ZlcmxheVg6ICdzdGFydCcsIG92ZXJsYXlZOiAnY2VudGVyJywgb2Zmc2V0WDogOCwgb2Zmc2V0WTogMCB9XVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXNzZXNzbWVudC1iZy1ncmV5LXR3byBhc3Nlc3NtZW50LXRvb2x0aXAtYm9yZGVyIHAtMyBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtYm94LXNoYWRvdy10b29sdGlwIHF1ZXN0aW9uLWluZm8gYXNzZXNzbWVudC10ZXh0LXJlZ3VsYXItMTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwidG9vbHRpcFN0YXRlW3F1ZXN0aW9uLmlkIV0gPSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cInRvb2x0aXBTdGF0ZVtxdWVzdGlvbi5pZCFdID0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJxdWVzdGlvbi5oaW50VGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBhbnN3ZXIgZmllbGQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcmV2aWV3TW9kZVwiIGNsYXNzPVwiZC1tZC1ibG9jayBkLW5vbmUgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiYW5zd2VyRmllbGQ7IGNvbnRleHQ6IHtxdWVzdGlvbjogcXVlc3Rpb24scHJldmlld01vZGU6IHByZXZpZXdNb2RlLGlzTWFuZGF0b3J5OiBpc01hbmRhdG9yeSxncm91cEluZGV4OiBncm91cEluZGV4LHBhcmVudE9wdGlvbklkOiBwYXJlbnRPcHRpb25JZCxwYXJlbnRRdWVzdGlvbklkOiBwYXJlbnRRdWVzdGlvbklkfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwhLS0gYW5zd2VyIGZpZWxkIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiBkLW1kLW5vbmUgbXQtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhbnN3ZXJGaWVsZDsgY29udGV4dDoge3F1ZXN0aW9uOiBxdWVzdGlvbixwcmV2aWV3TW9kZTogcHJldmlld01vZGUsaXNNYW5kYXRvcnk6IGlzTWFuZGF0b3J5LGdyb3VwSW5kZXg6IGdyb3VwSW5kZXgscGFyZW50T3B0aW9uSWQ6IHBhcmVudE9wdGlvbklkLHBhcmVudFF1ZXN0aW9uSWQ6IHBhcmVudFF1ZXN0aW9uSWR9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8IS0tIEFzc2Vzc29yIE1hcmtzIExvZ2ljIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFzc2Vzc21lbnQtbWFya3MtZmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZW5hYmxlTWFya3MgJiYgc2hvdWxkU2hvd01hcmtzRHJvcGRvd24ocXVlc3Rpb24pICYmIHNlY3Rpb25Gb3JtR3JvdXBzW2dyb3VwSW5kZXhdLmZvcm1Hcm91cC5nZXQocXVlc3Rpb24uaWQgKyAnX21hcmtzJykgYXMgbWFya3NDb250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTIgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5NQVJLUyddfX0oTWF4OiB7e3F1ZXN0aW9uLndlaWdodH19KTwvbWF0LWxhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCAoaW5wdXQpPVwiY2hlY2tNYXhWYWwoJGV2ZW50LCBtYXJrc0NvbnRyb2wsIHF1ZXN0aW9uPy53ZWlnaHQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjb2wtMTIgYXNzZXNzbWVudC1pbnB1dC1ib3JkZXItb25lIGFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gcHgtMiBweS0xIG91dGxpbmUtMCBhc3Nlc3NtZW50LWJnLWdyZXktb25lIGFzc2Vzc21lbnQtdGV4dC1tZWRpdW0tMTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkICsgJ19tYXJrcydcIiB0eXBlPVwibnVtYmVyXCIgKHdoZWVsKT1cIiRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8IS0tIGFuc3dlciBmaWVsZCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFwcmV2aWV3TW9kZVwiIGNsYXNzPVwiZC1tZC1ibG9jayBkLW5vbmUgbXQtM1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiYW5zd2VyRmllbGQ7IGNvbnRleHQ6IHtxdWVzdGlvbjogcXVlc3Rpb24scHJldmlld01vZGU6IHByZXZpZXdNb2RlLGlzTWFuZGF0b3J5OiBpc01hbmRhdG9yeSxncm91cEluZGV4OiBncm91cEluZGV4LHBhcmVudE9wdGlvbklkOiBwYXJlbnRPcHRpb25JZCxwYXJlbnRRdWVzdGlvbklkOiBwYXJlbnRRdWVzdGlvbklkfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gQ2hpbGQgUXVlc3Rpb25zIGFuZCBSZW1hcmtzIFJlbmRlcmluZyBMb2dpYyBiYXNlZCBvbiBjaGVja2VkIGZvcm0gc3RhdGUgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJxdWVzdGlvbi5kZWZhdWx0T3B0aW9uc0xpc3Q/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIHF1ZXN0aW9uLmRlZmF1bHRPcHRpb25zTGlzdFwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaXNPcHRpb25TZWxlY3RlZChzZWN0aW9uRm9ybUdyb3Vwc1tncm91cEluZGV4XS5mb3JtR3JvdXAsIHF1ZXN0aW9uLCBvcHRpb24ub3B0aW9ucz8uaWQpXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFJFTUFSS1MgRklFTEQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwib3B0aW9uLnJlbWFya3NSZXF1aXJlZCAmJiBzZWN0aW9uRm9ybUdyb3Vwc1tncm91cEluZGV4XS5mb3JtR3JvdXAuZ2V0KHF1ZXN0aW9uLmlkICsgJ19yZW1hcmtzXycgKyBvcHRpb24uaWQpIGFzIHJlbWFya3NDb250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTE1IG1iLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuUkVNQVJLUyddfX08L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgKm5nSWY9XCIhcHJldmlld01vZGVcIiBmb3JtQ29udHJvbE5hbWU9XCJ7e3F1ZXN0aW9uLmlkfX1fcmVtYXJrc197e29wdGlvbi5pZH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dzPVwiMlwiIFtwbGFjZWhvbGRlcl09XCJsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULlBMQUNFSE9MREVSLlJFTUFSS1MnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwicmVtYXJrc0NvbnRyb2wuaW52YWxpZCAmJiByZW1hcmtzQ29udHJvbC50b3VjaGVkID8gJ2Fzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLWludmFsaWQnIDogJydcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sLTEyIGFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEzIGFzc2Vzc21lbnQtaW5wdXQtYm9yZGVyLW9uZSBhc3Nlc3NtZW50LWJvcmRlci1yYWRpdXMtdHdvIGFzc2Vzc21lbnQtaW5wdXQtcGFkZGluZyBvdXRsaW5lLTAgYXNzZXNzbWVudC1iZy1ncmV5LW9uZVwiPjwvdGV4dGFyZWE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwicHJldmlld01vZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEzIGFzc2Vzc21lbnQtdGV4dC1ncmV5LW5pbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgcmVtYXJrc0NvbnRyb2wudmFsdWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyIG10LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwicmVtYXJrc0NvbnRyb2wuaW52YWxpZCAmJiByZW1hcmtzQ29udHJvbC50b3VjaGVkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLkZJRUxEX1JFUVVJUkVEJ119fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBDSElMRCBRVUVTVElPTlMgUkVDVVJTSU9OIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIG10LTQgZC1mbGV4IGZsZXgtY29sdW1uIGdhcC0zXCIgKm5nSWY9XCJvcHRpb24uY2hpbGRRdWVzdGlvbkxpc3Q/Lmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2hpbGRJZCBvZiBvcHRpb24uY2hpbGRRdWVzdGlvbkxpc3Q7IGxldCBjaGlsZEluZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicXVlc3Rpb25UZW1wbGF0ZTsgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogY2hpbGRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzTWFuZGF0b3J5OiBxdWVzdGlvbkJhbmtbY2hpbGRJZF0/LmlzTWFuZGF0b3J5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBJbmRleDogZ3JvdXBJbmRleCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudE9wdGlvbklkOiBvcHRpb24uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRRdWVzdGlvbklkOiBxdWVzdGlvbi5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcXVlbmNlOiBzZXF1ZW5jZSArICcuJyArIChjaGlsZEluZGV4ICsgMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gYW5zd2VyIGZpZWxkIHRlbXBsYXRlIC0tPlxyXG48bmctdGVtcGxhdGUgI2Fuc3dlckZpZWxkIGxldC1xdWVzdGlvbj1cInF1ZXN0aW9uXCIgbGV0LXByZXZpZXdNb2RlPVwicHJldmlld01vZGVcIiBsZXQtaXNNYW5kYXRvcnk9XCJpc01hbmRhdG9yeVwiXHJcbiAgICBsZXQtZ3JvdXBJbmRleD1cImdyb3VwSW5kZXhcIiBsZXQtcGFyZW50T3B0aW9uSWQ9XCJwYXJlbnRPcHRpb25JZFwiIGxldC1wYXJlbnRRdWVzdGlvbklkPVwicGFyZW50UXVlc3Rpb25JZFwiPlxyXG4gICAgPGRpdiAqbmdJZj1cInNlY3Rpb25Gb3JtR3JvdXBzW2dyb3VwSW5kZXhdLmZvcm1Hcm91cFwiIFtmb3JtR3JvdXBdPVwic2VjdGlvbkZvcm1Hcm91cHNbZ3JvdXBJbmRleF0uZm9ybUdyb3VwXCJcclxuICAgICAgICBjbGFzcz1cImNvbC0xMlwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInF1ZXN0aW9uLnF1ZXN0aW9uVHlwZT8uY29kZVwiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInUVVFU1RJT05fVFlQRS5TVUJKRUNUSVZFX1NIT1JUJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLXNob3J0IFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQhXCIgW3JlcXVpcmVkXT1cImlzTWFuZGF0b3J5XCJcclxuICAgICAgICAgICAgICAgICAgICBbcHJldmlld01vZGVdPVwicHJldmlld01vZGVcIiBbbGFiZWxDb25maWddPVwibGFiZWxDb25maWdcIj48L2xpYi1xdWVzdGlvbi10eXBlLXNob3J0PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLlNVQkpFQ1RJVkVfTE9ORydcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1sb25nIFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQhXCIgW3JlcXVpcmVkXT1cImlzTWFuZGF0b3J5XCJcclxuICAgICAgICAgICAgICAgICAgICBbcHJldmlld01vZGVdPVwicHJldmlld01vZGVcIiBbbGFiZWxDb25maWddPVwibGFiZWxDb25maWdcIj48L2xpYi1xdWVzdGlvbi10eXBlLWxvbmc+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuU1VCSkVDVElWRV9SSUNIX1RFWFQnXCI+XHJcbiAgICAgICAgICAgICAgICA8bGliLXF1ZXN0aW9uLXR5cGUtZWRpdG9yIFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQhXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNNYW5kYXRvcnlcIiBbcHJldmlld01vZGVdPVwicHJldmlld01vZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtZWRpdG9yPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLk9CSkVDVElWRSdcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1vYmplY3RpdmUgW3F1ZXN0aW9uXT1cInF1ZXN0aW9uXCIgW2Zvcm1Db250cm9sTmFtZV09XCJxdWVzdGlvbi5pZCFcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiIFtzaG93Q29ycmVjdEFuc3dlcnNdPVwic2hvd0NvcnJlY3RBbnN3ZXJzXCIgW2ltYWdlQ29uZmlnXT1cImltYWdlQ29uZmlnXCJcclxuICAgICAgICAgICAgICAgICAgICBbYW5zd2VyT2JqXT1cImdldFF1ZXN0aW9uQW5zd2VyT2JqKHF1ZXN0aW9uLmlkISwgcGFyZW50T3B0aW9uSWQsIHBhcmVudFF1ZXN0aW9uSWQpXCI+PC9saWItcXVlc3Rpb24tdHlwZS1vYmplY3RpdmU+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuTVVMVElfU0VMRUNUJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLW11bHRpc2VsZWN0IFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQhXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNNYW5kYXRvcnlcIiBbc2hvd0NvcnJlY3RBbnN3ZXJzXT1cInNob3dDb3JyZWN0QW5zd2Vyc1wiIFtpbWFnZUNvbmZpZ109XCJpbWFnZUNvbmZpZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Fuc3dlck9ial09XCJnZXRRdWVzdGlvbkFuc3dlck9iaihxdWVzdGlvbi5pZCEsIHBhcmVudE9wdGlvbklkLCBwYXJlbnRRdWVzdGlvbklkKVwiPjwvbGliLXF1ZXN0aW9uLXR5cGUtbXVsdGlzZWxlY3Q+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuUFJFRkVSRU5DRSdcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1wcmVmZXJlbmNlIFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQhXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNNYW5kYXRvcnlcIj48L2xpYi1xdWVzdGlvbi10eXBlLXByZWZlcmVuY2U+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1FVRVNUSU9OX1RZUEUuTlVNQkVSJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLXNob3J0IFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQhXCIgW3JlcXVpcmVkXT1cImlzTWFuZGF0b3J5XCJcclxuICAgICAgICAgICAgICAgICAgICBbcHJldmlld01vZGVdPVwicHJldmlld01vZGVcIiBbbGFiZWxDb25maWddPVwibGFiZWxDb25maWdcIj48L2xpYi1xdWVzdGlvbi10eXBlLXNob3J0PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLkVNQUlMJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLXNob3J0IFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQhXCIgW3JlcXVpcmVkXT1cImlzTWFuZGF0b3J5XCJcclxuICAgICAgICAgICAgICAgICAgICBbcHJldmlld01vZGVdPVwicHJldmlld01vZGVcIiBbbGFiZWxDb25maWddPVwibGFiZWxDb25maWdcIj48L2xpYi1xdWVzdGlvbi10eXBlLXNob3J0PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLkNPTlRBQ1RfTlVNQkVSJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLXNob3J0IFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQhXCIgW3JlcXVpcmVkXT1cImlzTWFuZGF0b3J5XCJcclxuICAgICAgICAgICAgICAgICAgICBbcHJldmlld01vZGVdPVwicHJldmlld01vZGVcIiBbbGFiZWxDb25maWddPVwibGFiZWxDb25maWdcIj48L2xpYi1xdWVzdGlvbi10eXBlLXNob3J0PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLlVSTCdcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1zaG9ydCBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiIFtyZXF1aXJlZF09XCJpc01hbmRhdG9yeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3ByZXZpZXdNb2RlXT1cInByZXZpZXdNb2RlXCIgW2xhYmVsQ29uZmlnXT1cImxhYmVsQ29uZmlnXCI+PC9saWItcXVlc3Rpb24tdHlwZS1zaG9ydD5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInUVVFU1RJT05fVFlQRS5GSUxFX1VQTE9BRCdcIj5cclxuICAgICAgICAgICAgICAgIDxsaWItcXVlc3Rpb24tdHlwZS1maWxlLXVwbG9hZCBbcXVlc3Rpb25dPVwicXVlc3Rpb25cIiBbZm9ybUNvbnRyb2xOYW1lXT1cInF1ZXN0aW9uLmlkIVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3JlcXVpcmVkXT1cImlzTWFuZGF0b3J5XCIgW2xhYmVsQ29uZmlnXT1cImxhYmVsQ29uZmlnXCIgW2ltYWdlQ29uZmlnXT1cImltYWdlQ29uZmlnXCJcclxuICAgICAgICAgICAgICAgICAgICAoc25hY2tiYXJNZXNzYWdlKT1cInNuYWNrYmFyTWVzc2FnZS5lbWl0KCRldmVudClcIj48L2xpYi1xdWVzdGlvbi10eXBlLWZpbGUtdXBsb2FkPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidRVUVTVElPTl9UWVBFLkRBVEVfUElDS0VSJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGxpYi1xdWVzdGlvbi10eXBlLWRhdGUtcGlja2VyIFtxdWVzdGlvbl09XCJxdWVzdGlvblwiIFtmb3JtQ29udHJvbE5hbWVdPVwicXVlc3Rpb24uaWQhXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwiaXNNYW5kYXRvcnlcIiBbcHJldmlld01vZGVdPVwicHJldmlld01vZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtsYWJlbENvbmZpZ109XCJsYWJlbENvbmZpZ1wiPjwvbGliLXF1ZXN0aW9uLXR5cGUtZGF0ZS1waWNrZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8IS0tIEVycm9yIE1lc3NhZ2VzIGFuZCBDaGFyYWN0ZXIgQ291bnQgQ29udGFpbmVyIC0tPlxyXG4gICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgKm5nSWY9XCIhcHJldmlld01vZGUgJiYgc2VjdGlvbkZvcm1Hcm91cHNbZ3JvdXBJbmRleF0uZm9ybUdyb3VwLmdldChxdWVzdGlvbi5pZD8udG9TdHJpbmcoKSB8fCAnJykgYXMgY29udHJvbFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLXN0YXJ0IG10LTFcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sLnRvdWNoZWQgJiYgY29udHJvbC5lcnJvcnM/LlsncmVxdWlyZWQnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuUkVRVUlSRURfUkVTUE9OU0UnXX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtcmVndWxhci0xMiBhc3Nlc3NtZW50LXRleHQtZGFuZ2VyIG10LTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNvbnRyb2wudG91Y2hlZCAmJiBjb250cm9sLmVycm9ycz8uWydwYXR0ZXJuJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3txdWVzdGlvbj8udmFsaWRhdGlvbk1lc3NhZ2UgfHwgbGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5JTlZBTElEX0ZPUk1BVCddfX1cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzPy5bJ21pbmxlbmd0aCddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5NSU5fQ0hBUlMnXT8ucmVwbGFjZSgne3tsZW5ndGh9fScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZXJyb3JzPy5bJ21pbmxlbmd0aCddLnJlcXVpcmVkTGVuZ3RoICsgJycpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzPy5bJ21heGxlbmd0aCddXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5FUlJPUi5NQVhfQ0hBUlMnXT8ucmVwbGFjZSgne3tsZW5ndGh9fScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuZXJyb3JzPy5bJ21heGxlbmd0aCddLnJlcXVpcmVkTGVuZ3RoICsgJycpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzPy5bJ21pbk9wdGlvbnMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuTUlOX09QVElPTlMnXT8ucmVwbGFjZSgne3tjb3VudH19JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5lcnJvcnM/LlsnbWluT3B0aW9ucyddLnJlcXVpcmVkICsgJycpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzPy5bJ21heE9wdGlvbnMnXVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuRVJST1IuTUFYX09QVElPTlMnXT8ucmVwbGFjZSgne3tjb3VudH19JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5lcnJvcnM/LlsnbWF4T3B0aW9ucyddLnJlcXVpcmVkICsgJycpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzPy5bJ21heEZpbGVzJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLk1BWF9GSUxFUyddPy5yZXBsYWNlKCd7e2NvdW50fX0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLmVycm9ycz8uWydtYXhGaWxlcyddLnJlcXVpcmVkICsgJycpfX1cclxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1kYW5nZXIgbXQtMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbC50b3VjaGVkICYmIGNvbnRyb2wuZXJyb3JzPy5bJ21heEZpbGVTaXplJ11cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkVSUk9SLk1BWF9GSUxFX1NJWkUnXT8ucmVwbGFjZSgne3tzaXplfX0nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLmVycm9ycz8uWydtYXhGaWxlU2l6ZSddLnJlcXVpcmVkU2l6ZSArICcnKX19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFzc2Vzc21lbnQtdGV4dC1yZWd1bGFyLTEyIGFzc2Vzc21lbnQtdGV4dC1ncmV5LXNldmVuIHdoaXRlLXNwYWNlLW5vd3JhcCBtcy0yXCJcclxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldE1heENoYXJDb3VudChxdWVzdGlvbikgPiAwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZ2V0UmVtYWluaW5nQ2hhcnMocXVlc3Rpb24sIGNvbnRyb2wpIH19XHJcbiAgICAgICAgICAgICAgICAgICAge3tsYWJlbENvbmZpZ1snQ09NTU9OU19BU1NFU1NNRU5ULkxBQkVMLkNIQVJBQ1RFUiddfX17e2dldFJlbWFpbmluZ0NoYXJzKHF1ZXN0aW9uLCBjb250cm9sKSAhPT1cclxuICAgICAgICAgICAgICAgICAgICAxXHJcbiAgICAgICAgICAgICAgICAgICAgPyAncycgOiAnJ319IHt7bGFiZWxDb25maWdbJ0NPTU1PTlNfQVNTRVNTTUVOVC5MQUJFTC5SRU1BSU5JTkcnXX19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gUmV1c2FibGUgU2VjdGlvbiBGb3JtIFRlbXBsYXRlIC0tPlxyXG48bmctdGVtcGxhdGUgI3NlY3Rpb25Db250ZW50IGxldC1zZWN0aW9uPVwic2VjdGlvblwiIGxldC1pPVwiaVwiPlxyXG4gICAgPGZvcm0gY2xhc3M9XCJ3LTEwMFwiICpuZ0lmPVwic2VjdGlvbkZvcm1Hcm91cHNbaV0uZm9ybUdyb3VwXCIgW2Zvcm1Hcm91cF09XCJzZWN0aW9uRm9ybUdyb3Vwc1tpXS5mb3JtR3JvdXBcIlxyXG4gICAgICAgIFtuYW1lXT1cIidzZWN0aW9uZnJtLScgKyBpXCIgbm92YWxpZGF0ZT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi00XCJcclxuICAgICAgICAgICAgKm5nSWY9XCIhcHJldmlld01vZGUgJiYgKHNlY3Rpb24/LnFwc0Rlc2M/LlswXT8udGV4dCB8fCBzZWN0aW9uPy5tZWRpYVVybClcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhc3Nlc3NtZW50LXRleHQtc2VtaWJvbGQtMTQgYXNzZXNzbWVudC10ZXh0LWdyZXktdGVuXCI+XHJcbiAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuVE9UQUxfUVVFU1RJT05TJ119fToge3sgc2VjdGlvbj8udG90YWxRdWVzdGlvbnMgfHwgMCB9fVxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIm9wZW5JbnN0cnVjdGlvbnNEaWFsb2coc2VjdGlvbilcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhc3Nlc3NtZW50LXpvb20tYW5pbWF0aW9uIGFzc2Vzc21lbnQtYnV0dG9uLXBhZGRpbmcgYXNzZXNzbWVudC10ZXh0LW1lZGl1bS0xMyBhc3Nlc3NtZW50LWJ0bi1wcmltYXJ5LXRyYW5zcGFyZW50XCI+XHJcbiAgICAgICAgICAgICAgICB7e2xhYmVsQ29uZmlnWydDT01NT05TX0FTU0VTU01FTlQuTEFCRUwuVklFV19JTlNUUlVDVElPTlMnXX19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIGQtZmxleCBmbGV4LWNvbHVtbiBnYXAtM1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzcSBvZiBzZWN0aW9uLnNlY3Rpb25RdWVzdGlvbnNMaXN0IHwgb3JkZXJCeTsgbGV0IGogPSBpbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInF1ZXN0aW9uVGVtcGxhdGU7IGNvbnRleHQ6IHtcclxuICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IHNxLnF1ZXN0aW9uSWQsXHJcbiAgICAgICAgICAgICAgICBpc01hbmRhdG9yeTogcXVlc3Rpb25CYW5rW3NxLnF1ZXN0aW9uSWRdPy5pc01hbmRhdG9yeSxcclxuICAgICAgICAgICAgICAgIGdyb3VwSW5kZXg6IGksXHJcbiAgICAgICAgICAgICAgICBwYXJlbnRPcHRpb25JZDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHBhcmVudFF1ZXN0aW9uSWQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBzZXF1ZW5jZTogaiArIDFcclxuICAgICAgICAgICAgfVwiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZm9ybT5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gdmlkZW8gcHJldmlldyAgLS0+XHJcbjxuZy10ZW1wbGF0ZSBsZXQtdmlkZW9Vcmw9XCJ2aWRlb1VybFwiICNWaWRlb1RlbXBsYXRlPlxyXG4gICAgPGRpdiBjbGFzcz1cImFzc2Vzc21lbnQtYm9yZGVyLXJhZGl1cy10d28gb3ZlcmZsb3ctaGlkZGVuIGNvbC1tZC0xMCBjb2wtMTJcIj5cclxuICAgICAgICA8dmlkZW8gKm5nSWY9XCJ2aWRlb1VybD8uaW5jbHVkZXMoJy5tcDQnKSBlbHNlIHlvdXR1YmVWaWRlb1wiIHdpZHRoPVwiNDAwXCIgY29udHJvbHMgY2xhc3M9XCJtdy0xMDAgZC1ibG9jayBteC1hdXRvXCI+XHJcbiAgICAgICAgICAgIDxzb3VyY2UgW3NyY109XCJ2aWRlb1VybFwiIHR5cGU9XCJ2aWRlby9tcDRcIj5cclxuICAgICAgICA8L3ZpZGVvPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjeW91dHViZVZpZGVvPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwieW91dHViZS12aWRlbyBwb3NpdGlvbi1yZWxhdGl2ZSBoLTEwMFwiPlxyXG4gICAgICAgICAgICAgICAgPGlmcmFtZSBbc3JjXT1cImFkZFlvdXR1YmVJZnJhbWVTcmModmlkZW9VcmwpXCIgdGl0bGU9XCJZb3VUdWJlIHZpZGVvIHBsYXllclwiIGZyYW1lYm9yZGVyPVwiMFwiXHJcbiAgICAgICAgICAgICAgICAgICAgYWxsb3c9XCJhY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgY2xpcGJvYXJkLXdyaXRlOyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlOyB3ZWItc2hhcmVcIlxyXG4gICAgICAgICAgICAgICAgICAgIGFsbG93ZnVsbHNjcmVlbiBjbGFzcz1cInBvc2l0aW9uLWFic29sdXRlIHRvcC0wIHN0YXJ0LTAgdy0xMDAgaC0xMDAgZC1ibG9ja1wiPlxyXG4gICAgICAgICAgICAgICAgPC9pZnJhbWU+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
|