@rangertechnologies/ngnxt 2.1.39 → 2.1.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +67 -12
- package/fesm2022/rangertechnologies-ngnxt.mjs +82 -28
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/lib/pages/questionnaire/questionnaire.component.d.ts +6 -3
- package/package.json +1 -1
- package/rangertechnologies-ngnxt-2.1.41.tgz +0 -0
- package/rangertechnologies-ngnxt-2.1.39.tgz +0 -0
|
@@ -25,8 +25,9 @@ import * as i17 from "../../components/custom-table/custom-table.component";
|
|
|
25
25
|
import * as i18 from "../../components/custom-date-picker/custom-date-picker.component";
|
|
26
26
|
import * as i19 from "../../components/dropdown-with-flag/dropdown-with-flag.component";
|
|
27
27
|
import * as i20 from "../../components/custom-dropdown/custom-dropdown.component";
|
|
28
|
-
import * as i21 from "../../components/
|
|
29
|
-
import * as i22 from "../../
|
|
28
|
+
import * as i21 from "../../components/custom-label/custom-label.component";
|
|
29
|
+
import * as i22 from "../../components/loader/loader.component";
|
|
30
|
+
import * as i23 from "../../i18n.pipe";
|
|
30
31
|
export class QuestionnaireComponent {
|
|
31
32
|
sfService;
|
|
32
33
|
dataService;
|
|
@@ -46,6 +47,7 @@ export class QuestionnaireComponent {
|
|
|
46
47
|
handleEvent = new EventEmitter();
|
|
47
48
|
handlePage = new EventEmitter();
|
|
48
49
|
handleQuestion = new EventEmitter();
|
|
50
|
+
handleBook = new EventEmitter();
|
|
49
51
|
params;
|
|
50
52
|
deviceInfo = null;
|
|
51
53
|
abItem;
|
|
@@ -325,10 +327,11 @@ export class QuestionnaireComponent {
|
|
|
325
327
|
};
|
|
326
328
|
}
|
|
327
329
|
}
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
330
|
+
// call when bookId changes
|
|
331
|
+
ngOnChanges(simplechanges) {
|
|
332
|
+
if (simplechanges['qbId']) {
|
|
333
|
+
this.processQB();
|
|
334
|
+
}
|
|
332
335
|
}
|
|
333
336
|
date_TimeMap() {
|
|
334
337
|
this.selectedhourMap.set(this.questionItem.Id, this.selectedHour);
|
|
@@ -824,7 +827,11 @@ export class QuestionnaireComponent {
|
|
|
824
827
|
//this.answerWrap.squesValue = cQuestion.Question__c;
|
|
825
828
|
this.questionItem.input = this.inpValue;
|
|
826
829
|
// emit the current question with input to parent
|
|
827
|
-
|
|
830
|
+
let questionAns = {};
|
|
831
|
+
questionAns['questionDetail'] = this.questionItem;
|
|
832
|
+
questionAns['answerBookDetail'] = this.abItem;
|
|
833
|
+
console.log(questionAns);
|
|
834
|
+
this.handleQuestion.emit(questionAns);
|
|
828
835
|
console.log('questionItem-->');
|
|
829
836
|
console.log(this.questionItem);
|
|
830
837
|
this.answerWrap.squesValue = questionTxt ? questionTxt : cQuestion.Question__c;
|
|
@@ -848,7 +855,12 @@ export class QuestionnaireComponent {
|
|
|
848
855
|
//console.log('Option => ' + cOpt.Value__c + ' matching with ' + ansVal);
|
|
849
856
|
if (cOpt.Value__c == this.inpValue) {
|
|
850
857
|
//console.log('Match Found using ' + cOpt.Next_Question__c);
|
|
851
|
-
|
|
858
|
+
if (cOpt.Next_Question__c) {
|
|
859
|
+
this.recordId = cOpt.Next_Question__c;
|
|
860
|
+
}
|
|
861
|
+
else {
|
|
862
|
+
this.recordId = cQuestion.Next_Question__c;
|
|
863
|
+
}
|
|
852
864
|
//console.log('conditional record id'+ this.recordId);
|
|
853
865
|
}
|
|
854
866
|
}
|
|
@@ -960,7 +972,17 @@ export class QuestionnaireComponent {
|
|
|
960
972
|
ansWrap.ansValue = newStr;
|
|
961
973
|
ansWrap.myVal = this.allInputValues;
|
|
962
974
|
}
|
|
963
|
-
|
|
975
|
+
// VD Check if the summary already contains an entry for the same quesId
|
|
976
|
+
const existingAnsWrap = this.summary.find(item => item.quesId === ansWrap.quesId);
|
|
977
|
+
if (existingAnsWrap) {
|
|
978
|
+
// If it exists, update the ansValue and myVal
|
|
979
|
+
existingAnsWrap.ansValue = ansWrap.ansValue;
|
|
980
|
+
existingAnsWrap.myVal = ansWrap.myVal;
|
|
981
|
+
}
|
|
982
|
+
else {
|
|
983
|
+
// If it doesn't exist, push the ansWrap to the summary array
|
|
984
|
+
this.summary.push(ansWrap);
|
|
985
|
+
}
|
|
964
986
|
this.backicon = true;
|
|
965
987
|
}
|
|
966
988
|
}
|
|
@@ -1032,8 +1054,38 @@ export class QuestionnaireComponent {
|
|
|
1032
1054
|
};
|
|
1033
1055
|
successupdateAB = (response) => {
|
|
1034
1056
|
console.log(response);
|
|
1057
|
+
let data = response;
|
|
1035
1058
|
// //console.log('status success')
|
|
1036
1059
|
this.abItem.Status__c = "Completed";
|
|
1060
|
+
this.deleteAnswers(data.AnswerBook);
|
|
1061
|
+
};
|
|
1062
|
+
// VD for delete answers
|
|
1063
|
+
deleteAnswers(answerbook) {
|
|
1064
|
+
if (this.serv == "api") {
|
|
1065
|
+
if (answerbook && answerbook.Status__c == 'Completed') {
|
|
1066
|
+
const ansBookId = answerbook.Id;
|
|
1067
|
+
let paramMap = { createAnswerBookFlag: false };
|
|
1068
|
+
// HA 09FEB24 to clear the error: createAnswerBook is false
|
|
1069
|
+
paramMap['c__qb_id'] = '';
|
|
1070
|
+
paramMap["c__record_id"] = '';
|
|
1071
|
+
this.dataService.getAPIFromNode('AnswerBook', 'delete', ansBookId, JSON.stringify(paramMap), this.api).subscribe((data) => {
|
|
1072
|
+
console.log(data);
|
|
1073
|
+
this.successDeleteAB(JSON.parse(data));
|
|
1074
|
+
}, (error) => {
|
|
1075
|
+
console.error('Failed to fetch question books', error);
|
|
1076
|
+
});
|
|
1077
|
+
}
|
|
1078
|
+
}
|
|
1079
|
+
}
|
|
1080
|
+
// VD for delete answers
|
|
1081
|
+
successDeleteAB = (response) => {
|
|
1082
|
+
console.log(response);
|
|
1083
|
+
if (response.status == 'success') {
|
|
1084
|
+
console.error(response.message);
|
|
1085
|
+
}
|
|
1086
|
+
else {
|
|
1087
|
+
console.error('error', response.message);
|
|
1088
|
+
}
|
|
1037
1089
|
};
|
|
1038
1090
|
failureupdateAB = (response) => {
|
|
1039
1091
|
//console.log('status failed')
|
|
@@ -1080,6 +1132,7 @@ export class QuestionnaireComponent {
|
|
|
1080
1132
|
if (response != null || response != undefined) {
|
|
1081
1133
|
this.qbItem = response.questionbook;
|
|
1082
1134
|
this.abItem = response.answerbook;
|
|
1135
|
+
this.handleBook.emit(response);
|
|
1083
1136
|
}
|
|
1084
1137
|
// console.log('readingQuestion using ' + this.qbItem);
|
|
1085
1138
|
if (this.abItem?.Status__c == "Pending") {
|
|
@@ -2202,11 +2255,11 @@ export class QuestionnaireComponent {
|
|
|
2202
2255
|
return Object.values(item)[0];
|
|
2203
2256
|
}
|
|
2204
2257
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: QuestionnaireComponent, deps: [{ token: i1.SalesforceService }, { token: i2.DataService }, { token: i3.ChangeService }, { token: i4.SharedService }, { token: i5.ActivatedRoute }, { token: i6.DomSanitizer }, { token: i7.NgxSpinnerService }, { token: i8.UntypedFormBuilder }, { token: i9.DeviceDetectorService }, { token: i0.ElementRef }, { token: i10.I18nService }], target: i0.ɵɵFactoryTarget.Component });
|
|
2205
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: QuestionnaireComponent, selector: "lib-questionnaire", inputs: { qbId: "qbId", insuranceStartDate: "insuranceStartDate", serv: "serv", tkn: "tkn", api: "api" }, outputs: { handleEvent: "handleEvent", handlePage: "handlePage", handleQuestion: "handleQuestion" }, providers: [ChangeService], usesOnChanges: true, ngImport: i0, template: "<!-- Spinner -->\n<ngx-spinner [name]=\"spinnerName\" [type]=\"spinnerType\"></ngx-spinner>\n<!-- custom loader -->\n<app-loader></app-loader>\n<!-- Back Processing -->\n<div *ngIf=\"backicon == false\" >\n <div class=\"backicon\" [style.visibility]=\"questionStack.length >0 ? 'visible' : 'hidden'\">\n <button (click)=\"handleBackClick()\" [class]=\" abItem?.Status__c == 'Completed' ? 'summary-volver':'app-back1'\">\n <img class=\"icon-arrow-back\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-arrow-back.png\" alt=\"Scroll down\"> {{ qbItem?.Back__c }}\n </button>\n </div>\n</div>\n\n<!-- Question Hanlding -->\n<div *ngIf=\"questionItem\" [class]=\"qbItem.isShengel__c ? 'questiondiv1' : 'questiondiv1 padd-bottom'\">\n <!-- Progress Bar & Title -->\n <div *ngIf=\"questionItem.Title__c && qbItem.Progress_Bar__c\">\n <h1 class=\"header1\">{{ questionItem?.Title__c }}</h1>\n <div class=\"header2\">{{ questionItem?.SubTitle__c }}</div>\n </div>\n\n <!-- Progress & Grouping -->\n <div [ngClass]=\"{ questiondiv2: !qbItem?.Progress_Bar__c }\">\n <!-- Pie Chart Progress -->\n <div [ngClass]=\"{ bgColor: qbItem?.Progress_Bar__c }\">\n <div id=\"progress\" *ngIf=\"qbItem?.Progress_Bar__c\">\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress>\n </div>\n </div>\n\n <!-- Show the Group/Module related to the Progress -->\n <div *ngIf=\"questionItem.Group__c && qbItem.Progress_Bar__c\"\n [ngClass]=\"{ questionalign: !qbItem?.Progress_Bar__c }\">\n <div class=\"largeTitle\">\n <h3 class=\"myt-font6 myt-text3\">\n {{ questionItem?.Group__c }}\n </h3>\n <div *ngIf=\"questionItem.Sub_Text__c != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.Sub_Text__c}}</div>\n <div *ngIf=\"questionItem.Sub_Text__c === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.Sub_Text__c}}</div>\n </div>\n </div>\n </div>\n\n <!-- Question Handling -->\n <div class=\"questiondiv2\">\n <div *ngIf=\"questionItem.Question_Text__c\">\n <p class=\"questionStyle\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </p>\n </div>\n <!-- Title -->\n <!-- <div *ngIf=\"questionItem.Is_Title__c\">\n <div *ngIf=\"questionItem.Type__c != 'Book' && questionItem.Question_No__c!='6' && questionItem.Question_No__c!='9'\"> \n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </h3>\n </div>\n </div> -->\n <!-- HA 31-JAN-24 Removed the unwanted styling class -->\n <!-- <div *ngIf=\"!questionItem.Is_Title__c\" [class]=\"qbItem.isShengel__c ? 'header-style' : 'question-f-size'\">\n <div [innerHTML]=\"getText(questionItem?.Question_Text__c)\" >\n {{ questionItem?.Question_Text__c }}\n </div>\n </div> -->\n\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.Type__c == 'Book'\">\n <div *ngIf=\"questionItem.Question_No__c=='6'\">\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{ questionItem?.Question_Text__c }}\n </h3>\n </div>\n </div> -->\n \n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.Type__c == 'File' \">\n <div *ngIf=\"questionItem.Question_No__c=='9'\">\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </h3>\n </div>\n </div> -->\n </div>\n\n <!-- Additional Info -->\n <!-- The below code can be written effectively nested ngIf for Rich Text & Other onw for Progress Bar -->\n <div *ngIf=\"questionItem.Additional_Rich__c && qbItem.Progress_Bar__c\" >\n <div\n class=\"additional \" [innerHTML]=\"innerhtml\">\n </div>\n </div>\n <div *ngIf=\"questionItem.Additional_Rich__c && !qbItem.Progress_Bar__c\">\n <div class=\"info-alert ques-alert1\">\n <i class=\"fa fa-info fa-3x iposition icolor\" aria-hidden=\"true\"></i>\n <div class=\"infodiv\" [innerHTML]=\"innerhtml\"></div>\n </div>\n </div>\n\n <!-- Dropdown-->\n <div *ngIf=\"dropdownFlag\" >\n <div class=\"dis-flex\">\n <select \n [ngClass]=\"{\n 'dt-line myt-align3 myt-align2 dpDown dropbox down1 myt-dropbox myt-border-r myt-font1': qbItem?.Progress_Bar__c,\n 'custom-select': !qbItem?.Progress_Bar__c\n }\" class=\"mr-sm-2 dd-height dropbox \" id=\"dropdown\" [(ngModel)]=\"inpValue\" (change)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error ? 'red' : inpValue?.length > 0 ? '#fff' : ''\n }}\" style.color=\"{{ questionItem?.error ? 'red' : '' }}\" style=\"margin-left: 21.5rem !important;\">\n <option *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"option\" value=\"{{ opt.Value__c }}\">\n {{ opt.Value__c }}\n </option>\n <!-- HA 20DEC23 For Translation -->\n <option value=\".\" disabled hidden>{{'pleaseMakeChoice' | i18n:i18nService.currentLanguage}}</option>\n </select>\n </div>\n </div>\n\n <!-- Radio -->\n <div *ngIf=\"radioFlag || dataFlag\" class=\"\">\n <div *ngIf=\"this.questionItem.error\" class=\"cond-div2\">\n {{ questionItem?.Error_Message__c }}\n </div>\n <div class=\"dis-flex\">\n <div *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"radio radioOption\" >\n <label class=\"radiocontainer container myt-font4\">{{ opt.Value__c }}\n <input type=\"radio\" [id]=\"opt.Id\" [(ngModel)]=\"inpValue\" name=\"inpValue\" value=\"{{ opt.Value__c }}\"\n (change)=\"optionChange(opt.Value__c)\" />\n<!-- HA 20FEB24 Removed checkmark as it was causing styling issue in Radio -->\n </label>\n </div>\n </div>\n </div>\n\n <!-- Checkbox -->\n <div *ngIf=\"checkboxFlag\" class=\"\">\n <div *ngIf=\"questionItem?.error\" class=\"cond-div2\">\n {{ questionItem?.Error_Message__c }}\n </div>\n <div class=\"checkbox-container\">\n <div *ngFor=\"let item of optionValues\" class=\"checkbox-wrapper\">\n <label class=\"container1\">\n <input type=\"checkbox\" [id]=\"item.Id\" [(ngModel)]=\"item.checked\" (click)=\"clearError()\" />\n <span class=\"checkbox-label\">{{ item.Value__c }}</span>\n </label>\n </div>\n </div>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"textFlag\" class=\"col-md-12 myt-book1\">\n <!-- HA 31-JAN-24 To reduce the margin -->\n <div class=\"col-md-12\" class=\"dis-flex myt-align2\" [class]=\"'col-md-' + questionItem?.Size__c + ' paddingnone'\">\n <input type=\"text\" [(ngModel)]=\"inpValue\" [ngClass]=\"{\n 'boxoutline myt-font1 myt-book1': qbItem?.Progress_Bar__c,\n textBox1: !qbItem?.Progress_Bar__c\n }\" id=\"text-input-id\" required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n <i class=\"fa fa-check check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n\n <!-- Text Area -->\n <div *ngIf=\"taFlag\" class=\"col-md-12\">\n <div class=\"dis-flex\">\n <textarea class=\"ta-input\" id=\"ta-input-id\" [(ngModel)]=\"inpValue\" (click)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : inpValue?.length > 0 && taFocusOut\n ? '#87be1c'\n : ''\n }}\" (focusout)=\"taFocusOut = true\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\"></textarea>\n <i class=\"fa fa-check check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0 && taFocusOut\"></i>\n </div>\n </div>\n\n <!-- CC Number Format -->\n <div *ngIf=\"numberFlag\" class=\"col-md-12\">\n <div class=\"dis-flex\">\n <input type=\"Text\" placeholder=\"0000 0000 0000 0000 0000 0000\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\"\n [(ngModel)]=\"inpValue\" id=\"number-input-id\" (ngModelChange)=\"CCOnChange($event)\" required=\"\" maxlength=\"29\"\n (focus)=\"clearError()\" oninput=\"this.value=this.value.replace(/[^0-9 ]/g,'');\"\n style=\"width:-webkit-fill-available;\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px;\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n <!-- END-->\n\n <!-- AlphaNumeric -->\n <div *ngIf=\"alphanumericFlag\" class=\"col-md-12\"> <!--UI not completed-->\n <div style=\"position:relative;\">\n <!-- HA 20DEC23 For Translation -->\n <input type=text placeholder=\"{{'zeroOfZero' | i18n:i18nService.currentLanguage}}\" style=\"padding:5px 5px 5px 150px;\" id=\"youridhere\"/>\n </div>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\n <div class=\"dis-flex\">\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\" [(ngModel)]=\"inpValue\" id=\"email-input-id\"\n required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n\n <!-- DateTime -->\n <div *ngIf=\"dtFlag\" class=\"col-md-12 paddingZero myt-time1\" >\n <!-- Error Handling -->\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n\n <!-- Date -->\n <div *ngIf=\"dateFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- HA 31-JAN-24 These labels were occuping the empty space when date question comes-->\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label> -->\n <div class=\"dis-flex\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, questionItem)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\">\n </my-date-picker>\n </div>\n </div>\n </div>\n\n <!-- Time -->\n <div *ngIf=\"timeFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label> -->\n <div class=\"dis-flex\">\n <div [ngClass]=\"{'dt-line date-line dt-time': qbItem?.Progress_Bar__c,\n dateandTime: !qbItem?.Progress_Bar__c}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour myt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime showminute myt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem?.X24_Hours__c == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"myt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n <!-- <div [ngClass]=\"{'': qbItem.Progress_Bar__c, 'dateandTime': !qbItem.Progress_Bar__c}\"></div> -->\n </div>\n </div>\n </div>\n </div>\n <i class=\"fa check-icon3\" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div>\n </div>\n\n <!-- Attachment / File -->\n <div *ngIf=\"fileFlag\">\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <div class=\"info-alert\" style.border-color=\"{{ this.questionItem?.error ? 'red' : '' }}\">\n <label class=\"picture-upload\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"fa fa-plus fa-2x picture-upload-child pic-upload icolor\">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n </div>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ allowedFileExtension }}\" (change)=\"uploadFile($event,this.questionItem)\" />\n </div>\n <ul *ngIf=\"\n attachments?.length > 0 &&\n questionItem?.Type__c === 'File' &&\n !qbItem?.Progress_Bar__c\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName}}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n\n <!-- Attachment Progress -->\n <div *ngIf=\"qbItem.Progress_Bar__c\">\n <div *ngFor=\"let attachment of attachments\" class=\"file-uploading-box\">\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"uploading-file-name \">{{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"file-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n \n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"f-Name\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\"> {{ questionItem?.Question_Text__c}}</span>\n <label class=\"file-label \">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/file-upload.png\" class=\"file-icon\"/>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Book -->\n <div *ngIf=\"bookFlag\">\n <div [class]=\"qbItem.isShengel__c ? 'form-group content-box' : 'form-group'\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div [class]=\"qbItem.isShengel__c ? '' : 'myt-align3'\" [class]=\"qbItem.isShengel__c ? 'col-lg-' + ques.Size__c + ' paddingnone' : 'col-md-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.Id\">\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\">\n <span>{{ ques?.Question_Text__c }}</span>\n </div>\n <div class=\"col-md-12 paddingZero myt-dateTimeNew\" *ngIf=\"ques.Type__c === 'Time' || ques.Type__c === 'Date'\">\n <div *ngIf=\"ques.Type__c === 'Date'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label> -->\n <div class=\"dateandtime\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, ques)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\" >\n </my-date-picker>\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.Type__c === 'Time'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label> -->\n <div class=\"dateandtime\">\n <div [ngClass]=\"{'dt-line date-line dt-time': qbItem?.Progress_Bar__c,\n dateandTime: !qbItem?.Progress_Bar__c}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour myt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime showminute myt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem.X24_Hours__c == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"myt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [date]=\"ques.input\" (dateChange)=\"displayDate($event,ques)\"></app-custom-date-picker>\n </div>\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <label>{{ ques.Question_Text__c }}</label>\n <app-custom-input\n [value]=\"ques?.input\"\n [ngClassValue]=\"{\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\n textBox: !qbItem.Progress_Bar__c\n }\"\n [question]=\"ques\" \n [idValue]=\"ques?.Tracking_ID__c\"\n [focusEvent]=\"clearSQError(ques?.Id)\"\n [error]=\"ques?.error\"\n [placeholder]=\"ques?.Question__c\"\n (inputValue)=\"selectedInput($event,ques)\">\n </app-custom-input>\n </div>\n <div *ngIf=\"ques.Type__c === 'Location'\">\n <!-- for pick location -->\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['Api_Key__c']\" [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\n </div>\n <!-- for text area -->\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \" (textareaValueChange)=\"handleTextareaValueChange($event)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.Type__c === 'Email'\">\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\n </div>\n\n <div *ngIf=\"ques.Type__c === 'File'\">\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <label class=\"picture-upload custom-file-upload bgcolor-w\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"\n fa fa-plus fa-2x\n picture-upload-child\n pic-upload\n icolor\n \">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ bookFlagAccept }}\" (change)=\"uploadFile($event,ques)\" />\n </div>\n\n <ul *ngIf=\"\n attachments?.length > 0 &&\n ques.Type__c === 'File' &&\n !qbItem.Progress_Bar__c\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n <div class=\"myt-box\" *ngIf=\"qbItem.Progress_Bar__c\">\n\n <div *ngFor=\"let attachment of attachments\" class=\"file-uploading-box\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />\n <span class=\"uploading-file-name myt-font1 font-weight: normal;\"> {{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"file-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />\n <span class=\"f-Name\">{{ ques?.Question__c }}</span>\n <label class=\"file-label \">\n <span style=\"color: #c5281c;text-decoration:underline\">\n {{'attach' | i18n:i18nService.currentLanguage}}\n </span>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event,ques)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.Type__c === 'Table'\" class=\"\">\n <app-custom-table \n [question]=\"ques\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-table>\n </div>\n\n <!-- Dropdown -->\n <div *ngIf=\"ques.Type__c === 'Dropdown'\" class=\"\">\n <!-- for common dropdown -->\n <!-- HA 20DEC23 For Translation -->\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel__c\"\n [options]=\"ques.Question_Options__r.records\"\n [apiMeta]=\"ques.Sub_Text__c\"\n [id]=\"ques.Name\"\n [selectedValue]=\"ques.input\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques?.Error_Message__c\"\n [error]=\"ques?.error\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-dropdown>\n <app-dropdown-with-flag *ngIf=\"ques.isDependentPicklist && !ques.dropDownOnly\" [certified]=\"ques.certifiedFlag\" [JobPerformerCertificates]=\"ques.certificateList\" (flagDropDownChange)=\"dependentChange($event)\"></app-dropdown-with-flag>\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div> \n </div>\n </div>\n </div>\n </div>\n\n <!--List start-->\n <div *ngIf=\"listFlag\">\n <div class=\"form-group\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div class=\"myt-align3\" [class]=\"'col-md-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of getLocalSubQuestions(questionItem.Id);let i = index\">\n <div>\n <span class=\"dis-flex myt-font3 myt-font7\">{{ ques?.Question__c }}</span>\n </div>\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\n textBox: !qbItem.Progress_Bar__c\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n </div>\n </div>\n <div class=\"\" *ngIf=\"addFlag\">\n <!-- HA 20DEC23 For Translation -->\n <button (click)=\"Add(getLocalSubQuestions(questionItem.Id))\" class=\"btn\"><i class=\"fa fa-plus\" ></i>{{'add' | i18n:i18nService.currentLanguage}}</button>\n </div>\n </div>\n </div>\n </div>\n <!--List End-->\n\n <!-- Actions -->\n <!-- VD button condition removed-->\n <div class=\"flexer\">\n <!-- Backward / Back -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"backbutton\" [ngClass]=\"{ 'col-md-6': !qbItem.Progress_Bar__c }\"\n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\" *ngIf=\"qbItem.Back__c\">\n <div [ngClass]=\"{}\">\n <button [ngClass]=\"{\n 'left-bt': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color':\n !qbItem.Progress_Bar__c\n }\" (click)=\"handleBackClick()\">\n {{ qbItem?.Back__c }}\n </button>\n </div>\n </div>\n\n <!-- Forward / Next -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div [ngClass]=\"{ 'col-md-6': !qbItem.Progress_Bar__c }\" *ngIf=\"qbItem.Next__c\">\n <div>\n <button [ngClass]=\"{\n 'rusty': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color':\n !qbItem.Progress_Bar__c\n }\" (click)=\"handleNextClick()\">\n {{ qbItem.Next__c }}\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<!-- Summary -->\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\n 'col-md-12':!qbItem.Progress_Bar__c\n }\">\n <h1 class=\"header1 summarypadd\" >{{ qbItem.SubTitle__c }}</h1> \n <div id=\"progress2\" *ngIf=\"!qbItem.Progress_Bar__c && this.abItem.Status__c != 'Completed' \">\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\n <div *ngFor=\"let qa of summary\">\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\n <div [ngClass]=\"{ summary: !qbItem.Progress_Bar__c }\">\n <div *ngIf=\"!qbItem.Edit__c\"\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\n <a [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\n </div>\n <div *ngIf=\"qbItem.Edit__c\"\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\n <div [ngClass]=\"{ 'question': this.abItem.Status__c === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div>\n <div class=\"answer\" >\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <!-- HA 02FEB24 Displaying the in summary for book type -->\n <div *ngIf=\"qa.qTyp == 'Book'\">\n <div *ngFor=\"let val of qa.myVal\">\n <p>{{ val.Question_Text__c }}: <span>{{ val.input }}</span></p>\n </div>\n </div>\n <!-- HA 02FEB24 Displaying the value for direct question -->\n <div *ngIf=\"qa.qTyp != 'File' && qa.qTyp != 'Book'\">{{ qa.Question_Text__c }}: <span></span>{{ qa.ansValue }}</div>\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"icon-edit\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"this.abItem.Status__c === 'Completed'\" class=\"col-lg-12\" style=\"text-align: center;\">\n <h2>{{this.qbItem.Summary_Text__c}}</h2>\n <p>{{this.qbItem.Summary_Sub_Text__c}}</p>\n </div>\n\n <div id=\"progress2\" *ngIf=\"qbItem.Progress_Bar__c \">\n <div [ngClass]=\"{'bgColor summary-top' : qbItem.Progress_Bar__c }\" >\n <div id=\"progress-summary\" *ngIf=\"qbItem.Progress_Bar__c\">\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress>\n \n <div *ngIf=\"qbItem.Summary_Text__c && qbItem.Progress_Bar__c\" \n [ngClass]=\"{ summaryTitle: qbItem.Progress_Bar__c }\">\n <h3 class=\"subTitle\" >{{ qbItem.Summary_Text__c }}</h3>\n <div *ngIf=\"abItem.Status__c != 'Completed'\" class=\"subTitle1\" >{{ qbItem.Summary_Sub_Text__c}}</div>\n </div>\n </div>\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <h3 class=\"summary-h\">\n {{ qbItem.Summary_Text__c }}\n </h3>\n </div>\n </div>\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\n <div class=\"summary-groupText myt-font2\">\n <!-- <p>Informe de da\u00F1o</p> -->\n </div>\n <div *ngFor=\"let qa of summary\" >\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\n <div class=\"summary\">\n <!-- <div *ngIf=\"!qbItem.Edit__c\"\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\n <a [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\n </div>\n <div *ngIf=\"qbItem.Edit__c\"\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.Status__c === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div> -->\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"icon-edit\" />\n </button>\n </div>\n \n <div class=\"answer\">\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <div *ngIf=\"qa.qTyp != 'File'\">\n {{ qa.ansValue }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flexer1\" *ngIf=\"abItem\">\n <div class=\"\" *ngIf=\"abItem.Status__c == 'Completed' && qbItem.Cancel__c\">\n <div class=\"col-md-12\">\n <button [ngClass]=\"{'btn-text': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\"\n (click)=\"handleCancelClick()\">\n {{ qbItem.Cancel__c }}\n </button>\n </div>\n </div>\n </div> -->\n\n <!-- Group Actions -->\n <div class=\"align-edit-submit\" *ngIf=\"abItem.Status__c != 'Completed'\">\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"col-md-6\" *ngIf=\"qbItem.Submit__c\">\n <button [ngClass]=\"{ 'btn-text2': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c }\" \n (click)=\"handleSubmitClick()\">\n {{ qbItem.Submit__c }}\n </button>\n </div>\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!-- <div class=\"col-md-6\" *ngIf=\"qbItem.Edit__c\">\n <button [ngClass]=\"{'grey': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\" \n (click)=\"handleBackClickNew()\">\n {{ qbItem.Edit__c }}\n </button>\n </div> -->\n </div>\n\n</div>", styles: [".rusty{width:235px;background-color:#cd2810;color:#fff;text-align:center;font-size:24px;height:60px;margin-left:0%;margin-top:11%;cursor:pointer}.edit{background-color:#dedddd;border:none;color:#c5281c;text-decoration:underline;margin-left:50%;font-size:16px;vertical-align:super;font-weight:700}.icon-edit{width:15px;height:18px;margin:0 6px 1px -13%}.icon-edit1,.icon-edit-summary{width:29px;height:28px}.questiondiv1{padding-left:25px;padding-right:25px;padding-top:3%}.questiondiv2{padding-top:0;padding-bottom:20px;padding-left:11px}.align-edit-submit{display:flex;flex-direction:column;align-items:center}.questiondiv2{padding-left:0!important;padding-bottom:0!important}@media screen and (min-width: 689px){#progress,#progress-summary{padding-left:12px}.backicon{display:none}.dt-time{background-position:98%!important}}.bgColor{text-align:center;background-color:#dedddd}.questionalign{text-align:center;padding-right:4%;margin-bottom:4px;margin-top:2rem;color:#560d05}.questionStyle{margin-bottom:1.5rem}.largeTitle{padding-left:16px;padding-top:12px}.question-f-size{font-size:.7rem}.non{background-color:#dedddd}.circle{margin-left:25px}.titlebar{padding-left:10%;padding-top:1%;padding-right:10%}.infodiv{padding-left:2rem;overflow:hidden}.info-alert{border:1px solid #e6e6e6;border-radius:5px;padding:.5em;margin-left:15px;margin-right:15px;margin-bottom:1rem;display:flex}.addtional-info{margin-left:-33px;margin-top:-21px;font-size:16px;font-weight:400;font-stretch:normal;font-style:normal;color:#6f7072;font-family:Helvetica}.ques-alert1{margin-bottom:1rem;display:flex}.iposition{margin-left:3rem}.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{position:relative;padding:20px;float:center;width:100%}.col-md-12{padding:0!important}.nxt-btn{border-radius:.3rem;font-size:1.25rem;line-height:1.5;padding:.5rem 1rem;width:100%;cursor:pointer;outline:0}.cond-div2{color:red;font-weight:700;padding-bottom:3%}.radiotext{margin-top:-30px}.radiocontainer{display:flex;flex-direction:row-reverse;border:1px solid none;border-radius:.3em;padding:0;align-items:center;text-align:center;cursor:pointer;font-family:Rubik,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;color:#a3a2a2}.radioOption{display:flex;align-content:flex-start;margin-top:-16px;width:6%}.myt-time{width:-moz-fit-content!important;width:fit-content!important;background-image:none;background:#dedddd;margin:0;padding:0;border:none;font-size:15px;letter-spacing:1px}.showminute{padding-left:5px;margin-top:0%}.myt-time1{margin-top:-32px;margin-left:-15px}.myt-dateTimeNew{margin-left:-14px}.myt-hour{width:-moz-fit-content;width:fit-content}.date-time{padding:0;margin:0;text-align:left}.dateandTime{border:1px solid #d2d4d6;position:relative;display:flex;border-radius:2px;background-image:url(https://dynamic-css1.s3.ap-south-1.amazonaws.com/External+css/time.svg);background-size:25px;background-repeat:no-repeat;background-position:99% center;background-color:#fff;height:37px}.date-line{border-bottom:1px solid #fff}.dt-time{width:57%;margin-left:2.3%;text-align:left;background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/icon-clock%402x.png)!important;background-size:25px!important;background-repeat:no-repeat!important;background:#dedddd}.date-picker{width:57%;margin-left:2.5%;height:44px;border-radius:5px}.datetime:focus{border:none;box-shadow:none}#meridiem{margin-top:-2px;border:hidden}.dis-flex{display:flex;justify-content:center}.textBox{width:100%;height:36px}.textBox1{width:100%;height:36px;margin-left:-17px}.option{color:#767676}.paddingnone{padding-bottom:0%}.paddingZero{padding:0}.summary-h{text-align:left;padding-bottom:15px}.summary{display:flex;flex-direction:column;align-items:flex-start;border-bottom:2px solid #fff}.asum{color:#6f7072;margin-top:5%;padding-left:3%}.question{padding:10px;font-size:14px;color:#007bff}.question1{margin-left:14rem;background:#dedddd;color:#560d05;font-size:15px;padding-bottom:20px;text-align:left}.answer{display:flex;align-items:baseline;padding:5px 5px 10px;font-size:14px;font-weight:400;word-wrap:break-word;width:97%;justify-content:space-between}.answer1{max-width:55%;margin-left:auto;margin-right:auto;color:#a3a2a2;margin-top:0%;padding-bottom:0;font-size:14px;font-weight:400;word-wrap:break-word;text-align:left;background:#dedddd;border-bottom:1px solid #fff}.myt-font{font-size:20px}.myt-font1{width:16rem;font-size:14px;font-weight:400}.myt-font2{font-size:18px}.myt-font3,.myt-font4{font-size:14px}.myt-font5{margin-top:-18px;font-weight:400;font-size:14px;color:#560d05}.myt-font6{font-size:20px;font-weight:700;color:#c5281c;text-align:center}.myt-font10{font-weight:400;font-size:14px;color:#560d05;margin-top:10px}.myt-font7{display:flex;justify-content:flex-start;padding-left:20.5%;font-weight:100;color:#560d05}.myt-font8{font-weight:400}.dpDown:focus-visible{outline:none}.summaryTitle{padding-left:0%;padding-top:4%}.summary-groupText{width:55%;margin:auto auto -2%;text-align:left;font-weight:700;padding-top:0%;padding-bottom:0%;background-color:#dedddd;color:#c5281c}.sum-ques{width:55%;margin:auto}.sum-ques1{width:59%;margin:auto}.header-style{padding:15px!important;background:#F8F8F8;color:#898989!important;border:1px solid #e8e8e8;border-top-left-radius:5px;border-top-right-radius:5px;margin-left:0!important;justify-content:left!important;font-size:15px!important}.file-upload-btn{display:none;border-bottom:groove}.file-upload-box{max-width:45%;margin-left:29.5%;height:auto;padding:16px;display:flex;border:2px;border-bottom:1px solid #fff;background-color:#dedddd;justify-content:space-between;color:#d8d8d8}.file-label{cursor:pointer;color:#c5281c;text-decoration:underline}.file-uploading-box{font-size:14px;font-weight:400;max-width:45%;margin-left:29.5%;height:56px;padding:16px;display:flex;border:2px;background-color:#dedddd;justify-content:space-between;margin-bottom:0;color:#d8d8d8}.uploading-file-name{color:#6f7072}.deleteIcon{cursor:pointer;height:24px}.file-icon{max-width:24px;height:26px}.picture-upload{height:200px;width:200px;position:relative;border:1px solid #ccc;display:flex;padding:6px 12px;cursor:pointer;background-color:#fff;align-items:center}.colon{line-height:42px;padding:0;margin-top:10%;color:#6f7072}.colon1{display:contents}.subTitle{color:#c5281c;font-weight:600;margin-top:-3%}.subTitle1{color:#560d05;font-size:14px;font-weight:500}.check-icon{color:#87be1c;margin-left:-2rem;z-index:1;padding:5px;margin-top:.4rem}.check-icon2{color:#87be1c;margin-left:-4rem;z-index:1;margin-top:.6rem;line-height:3}.check-icon3{color:#87be1c;margin-left:-4rem;z-index:1;margin-top:3rem}.align-l{text-align:left;padding:1% 2% 2%;margin-bottom:-5%;margin-top:-1%}.attach-ulist{list-style-type:none;margin-left:0;margin-bottom:.7rem}.attach-list{float:right;cursor:pointer;padding:0}.icolor{color:#99b5ce}.picture-upload-child{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tspan:nth-child(1){font-size:25px;font-weight:700}.tspan:nth-child(2){display:none}.pic-upload{position:absolute;top:15%;left:85%;transform:translate(-50%,-50%)}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-primary:hover{color:#fff}.btn-primary:focus,.btn-primary.focus{color:#fff;box-shadow:0 0 0 .2rem #268fff80}.btn-primary.disabled,.btn-primary:disabled{color:#fff}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #268fff80}.btn-back-color{display:block;width:100%;padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;text-align:center;border-radius:.3rem;margin:0}.fa-plus:hover{color:#87be1c}.fa-plus{color:#99b5ce}.btn-primary{border-color:#007bff}.ques-Title{text-align:left;font-size:24px}.grey{width:38%;height:56px;margin:0px 0px 0px 0rem;padding:14px 0 17px;background-color:#cd2810;color:#fff;font-size:24px}.btn-text{width:330px;font-size:24px;background-color:#cd2810;color:#fff;height:60px;margin-left:auto;margin-top:0;cursor:pointer;border-radius:40px}.btn-text2{width:21rem;font-size:24px;background-color:#cd2810;border:none;color:#fff;height:60px;margin-left:17rem;margin-right:17rem;margin-top:10px;cursor:pointer;border-radius:40px}.flexer{max-width:100%;width:100%;display:flex;justify-content:center}.flexer1{max-width:100%;width:100%;display:flex;justify-content:center;margin-top:32px}.btn-r{right:0rem}.down{margin-left:0;width:57%}.down1{width:16rem;margin-left:0rem;background-color:#dedddd}.down2{margin-top:0%;padding-left:11px}.dropbox{margin-left:21.5rem}.myt-dropbox{background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/down-red.png);background-origin:content-box;background-position:right -.9rem center;background-repeat:no-repeat;background-size:35px 33px;padding-right:1.35rem;background-color:#dedddd}.boxoutline{outline:transparent;background-color:#dedddd}.left-bt{width:238px;background-color:#cd2810;color:#fff;padding:0;text-align:center;font-size:24px;cursor:pointer;height:60px;margin-top:125px;margin-bottom:4rem;margin-left:-234px}.townArea{text-align:left;height:43px;padding-left:15px}.townArea:hover{background-color:#9e9e9e2e}.listFlow{font-weight:400;color:#767676;z-index:2;position:absolute;background:#dedddd;box-shadow:0 2px 5px #00000040}.myt-radio input[type=radio]:checked:after{background-color:#c5281c}.full-summary{margin-top:4%}.container-radio input{display:none;position:absolute;opacity:0;cursor:pointer}.f-Name{color:#6f7072;font-size:14px;font-weight:400;word-break:break-word}.summary-top{margin-top:4%}.myt-border-r{border-top:none;border-left:none;border-right:none;border-radius:0}.myt-align{margin-left:4%;line-height:2}.myt-align1{margin-left:-29px}.myt-align2{margin-left:-15px}.myt-align3{width:100%}.myt-book1{margin-top:-20px}.colorf{color:#555}.bookText{width:57%;margin-left:21.5%;background-color:#dedddd}.book{width:32.6%;margin-left:34%;background-color:#dedddd}.summary-completed{padding-left:2%;margin-top:20px}.town{margin:0;background-color:#dedddd}.town-drop{margin:auto;width:57%}.questiondiv1.padd-bottom{padding-bottom:6rem!important;padding-top:2rem!important}@media (max-width: 1090px){.icon-edit{margin:0 6px -3px -13%!important}}@media (max-width: 768px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:center}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}}@media (max-width: 768px){.radioOption{width:8%}.grey{width:78%;margin-left:17.5rem;height:68px!important;font-size:20px!important;font-weight:700!important}.answer{margin-top:-4%!important}}@media screen and (max-width: 672px){.header1{font-size:23px!important}.summarypadd{padding-top:50px!important}.answer{margin-top:-5%!important}.icon-edit{margin:0 6px 0 -13%!important}.subTitle1{width:95%!important}.additional{margin-left:6%!important;padding:0!important}.container1{margin-left:-35%}.town-drop{margin:auto;width:100%!important}.dis-flex{display:flex;justify-content:left}.check{display:inherit;width:-moz-max-content;width:max-content;margin-left:6%}.rusty{width:28rem;margin-left:0rem;height:68px!important;font-size:20px!important;font-weight:700!important;margin-bottom:37px}.left-bt{width:28rem;margin-left:-28rem;height:68px!important;font-size:20px!important;font-weight:700!important}.questionalign{text-align:center}.questionalign{margin-top:1rem!important}.largeTitle{padding-left:0!important}.myt-align{margin-left:0%!important}.myt-text1{margin-top:-22px}.myt-text2{margin-top:-20px}.myt-text3{margin-bottom:21px}.date-picker,.dt-time{width:100%}.showminute{margin-top:-.5%}.radioOption{width:auto;margin-top:0;margin-left:7%;margin-right:-3%}.myt-font7{padding-left:0rem;margin-left:-1.5%}.down,.bookText,.book{width:100%;margin-left:0rem}.town{margin-left:0rem;width:100%}.file-upload-box,.file-uploading-box{max-width:85%;margin-left:20px}.question{margin-left:0rem}.btn-text2{width:28rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}.grey{width:28rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}}@media screen and (max-width: 580px){.rusty{width:27rem;height:68px!important;font-size:20px!important;font-weight:700!important}.left-bt{width:27rem;margin-left:-27rem;height:68px!important;font-size:20px!important;font-weight:700!important}.container1{margin-left:-24%}.showminute{margin-top:.5%}.bookText,.book{width:100%;margin-left:0rem}.btn-text2{width:27rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}.grey{width:27rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.btn-text{width:27rem;height:68px!important;font-size:20px!important;font-weight:700!important}}@media screen and (max-width: 672px){.questiondiv1{padding:0}}@media screen and (max-width: 525px){.rusty{width:26rem;height:68px!important;font-size:20px!important;font-weight:700!important}.container1{margin-left:-9%}.left-bt{width:26rem;margin-left:-26rem;height:68px!important;font-size:20px!important;font-weight:700!important}.dateandtime{padding-left:10px!important}}@media screen and (max-width: 480px){.answer{margin-top:-7%!important}.icon-edit{margin:0 6px 4px -35%!important}.rusty{width:25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.left-bt{width:25rem;margin-left:-25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.file-upload-box,.file-uploading-box{max-width:89%}}@media screen and (max-width: 420px){.answer{margin-top:-9%!important}.icon-edit{margin:-9px 1px 4px 4%!important}.rusty,.btn-text{width:21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.left-bt{width:21rem;margin-left:-21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.container1{margin-left:0%}.file-upload-box,.file-uploading-box{max-width:100%}.myt-dateTimeNew{margin-left:-10px!important}.dateandtime{padding-left:0!important}.dt-time{padding-left:.8%!important}.myt-font7{padding-left:0rem;margin-left:-3.5%}.grey{width:21rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.btn-text2{width:21rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}}@media screen and (max-width: 368px){.icon-edit{margin:0 6px 3px 35%!important}.icon-editios{margin-bottom:4px}.rusty{width:19rem;height:68px!important;font-size:20px!important;font-weight:700!important}.left-bt{width:19rem;margin-left:-19rem;height:68px!important;font-size:20px!important;font-weight:700!important}.container1{margin-left:15%}.radiotext{margin-top:-45px}.file-upload-box,.file-uploading-box{max-width:100%}.grey{width:19rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.btn-text2{width:19rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}.btn-text{width:19rem;height:68px!important;font-size:20px!important;font-weight:700!important}}.mydp .selection{padding:0!important}.text-border{border-top:none;border-left:none;border-right:none;border-radius:0;border-bottom:1px solid #fff!important;background-color:#dedddd}.additional{display:flex;font-size:20px;text-align:left;font-weight:200;margin-left:4%;justify-content:center;color:#3e3e3c;padding:0 30%}.check{display:block}.header2{font-size:20px;font-weight:300;text-align:center;font-stretch:normal;font-style:normal;line-height:1.5;letter-spacing:normal;color:#560d05;max-width:1100px;margin:auto;padding-bottom:10px}.header1{font-size:32px;font-weight:700;text-align:center;font-stretch:normal;font-style:normal;line-height:1.25;letter-spacing:normal;color:#dd2e13}.container1{display:inline-grid;position:relative;cursor:pointer;font-size:20px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.bottomspace1{padding-bottom:14px!important}.myt-321{font-size:20px;font-weight:700;color:#c5281c;margin-top:11px}.myt-345{display:none}.panel{-moz-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);-webkit-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);border-radius:0;border:none;box-shadow:0 1px 2px #0000001a;margin-bottom:20px}.panel .panel-body{padding:20px}.panel-heading{border-radius:0;border:none!important;padding:10px 20px}.panel-default>.panel-heading{background-color:#fafafa;border-bottom:none;color:#2a323c;border:1px solid #e3e3e3!important}.panel-title{margin-bottom:0;margin-top:0;font-family:Rubik,sans-serif;font-weight:400}.panel-footer{background:#fafafa;border-top:0}.panel-color .panel-title{color:#fff}.panel-primary>.panel-heading{background-color:#03a9f4}.panel-success>.panel-heading{background-color:#01ba9a}.panel-info>.panel-heading{background-color:#18bae2}.panel-warning>.panel-heading{background-color:#f8ca4e}.panel-danger>.panel-heading{background-color:#f62f37}.panel-dark>.panel-heading{background-color:#2a323c;color:#fff}.panel-fill{border-radius:3px}.panel-fill .panel-heading{background-color:transparent;color:#fff;border-bottom:1px solid rgba(255,255,255,.5)!important}.panel-fill .panel-body{color:#ffffffd9}.panel-fill.panel-default .panel-body{color:#666}.panel-fill.panel-default .panel-heading{background-color:transparent;color:#333;border-bottom:1px solid rgba(0,0,0,.1)!important}.panel-fill.panel-primary{background-color:#03a9f4}.panel-fill.panel-success{background-color:#01ba9a}.panel-fill.panel-info{background-color:#18bae2}.panel-fill.panel-warning{background-color:#f8ca4e}.panel-fill.panel-danger{background-color:#f62f37}.panel-fill.panel-dark{background-color:#2a323c}.panel-group .panel .panel-heading a[data-toggle=collapse].collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading .accordion-toggle.collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading a[data-toggle=collapse]{display:block}.panel-group .panel .panel-heading a[data-toggle=collapse]:before{content:\"\\f0d8\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading .accordion-toggle{display:block}.panel-group .panel .panel-heading .accordion-toggle:before{content:\"\\f068\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading+.panel-collapse .panel-body{border-top:none!important;border:1px solid #e3e3e3}.panel-group .panel-heading{padding:12px 26px}.panel-group.panel-group-joined .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-group-joined .panel-group .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-body label{color:#9a9a9a;font-size:14px;font-weight:400;display:inline-block;max-width:100%;margin-bottom:5px}.font-size{font-size:14px}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit;text-decoration:none}.panel-title{font-size:16px}@media (min-width: 300px) and (max-width: 399px){.selbtngroup{padding-left:1.3%!important}}@media (min-width: 400px) and (max-width: 480px){.selbtngroup{padding-left:.9%!important}}@media (min-width: 481px) and (max-width: 580px){.selbtngroup{padding-left:.2%!important}}@media screen and (min-width: 871px){.selbtngroup{padding-right:4px!important}}@media screen and (max-width: 689px){.answer{max-width:95%!important;margin-left:0!important;margin-right:15px}#progress2{margin-left:8.5px!important}.edit{margin-left:85%!important;margin-bottom:0%!important}.sum-ques,.sum-ques1{width:100%!important;margin:auto}.summary-completed{padding-left:0!important;padding-bottom:17px;margin-top:9px}.summary-top{margin-top:10%}.subTitle1{font-size:18px!important;line-height:1.38!important;text-align:center;letter-spacing:normal;color:#560d05!important;font-weight:300}.backbutton{display:none}.rusty{margin-bottom:37px}}@media screen and (min-width: 1024px){.ES-style{position:absolute;left:7px;font-size:.9rem;color:#555;top:9px}}@media screen and (max-width: 1024px){.ES-style{position:absolute;left:.6rem;font-size:.95rem;color:#555;top:.57rem}}@media screen and (max-width: 689px){.app-back1{line-height:1.5;cursor:pointer;width:100%;max-width:1200px;margin-right:auto;margin-left:-10px;display:flex;font-family:Helvetica;font-size:21px;font-weight:700;align-items:center;font-stretch:normal;font-style:normal;letter-spacing:normal;color:#dd2e13;z-index:1;position:fixed;background-color:#dedddd;border-radius:0!important;margin-top:-12px;padding-top:.8rem}.header1{padding-top:75px}.dt-time{background-position:100%!important}}.summary-volver{display:none}.checkbox-container{display:flex;flex-direction:column}.checkbox-wrapper{display:flex;align-items:center;margin-bottom:10px}.container1{display:flex;align-items:center}.container1 input[type=checkbox]{margin-right:10px}.checkbox-label{margin-left:10px}@media ((min-width: 1200px)){.form-row{display:flex;flex-wrap:wrap}}\n"], dependencies: [{ kind: "directive", type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i8.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i8.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i12.MyDatePicker, selector: "my-date-picker", inputs: ["placeholder", "locale", "disabled", "options", "defaultMonth", "selDate", "selector"], outputs: ["dateChanged", "inputFieldChanged", "calendarViewChanged", "calendarToggle", "inputFocusBlur"], exportAs: ["mydatepicker"] }, { kind: "component", type: i7.NgxSpinnerComponent, selector: "ngx-spinner", inputs: ["disableAnimation", "bdColor", "zIndex", "color", "type", "size", "fullScreen", "name", "template", "showSpinner"] }, { kind: "component", type: i13.CircleProgressComponent, selector: "circle-progress", inputs: ["name", "class", "backgroundGradient", "backgroundColor", "backgroundGradientStopColor", "backgroundOpacity", "backgroundStroke", "backgroundStrokeWidth", "backgroundPadding", "radius", "space", "percent", "toFixed", "maxPercent", "renderOnClick", "units", "unitsFontSize", "unitsFontWeight", "unitsColor", "outerStrokeGradient", "outerStrokeWidth", "outerStrokeColor", "outerStrokeGradientStopColor", "outerStrokeLinecap", "innerStrokeColor", "innerStrokeWidth", "titleFormat", "title", "titleColor", "titleFontSize", "titleFontWeight", "subtitleFormat", "subtitle", "subtitleColor", "subtitleFontSize", "subtitleFontWeight", "imageSrc", "imageHeight", "imageWidth", "animation", "animateTitle", "animateSubtitle", "animationDuration", "showTitle", "showSubtitle", "showUnits", "showImage", "showBackground", "showInnerStroke", "clockwise", "responsive", "startFromZero", "showZeroOuterStroke", "lazy", "options"], outputs: ["onClick"] }, { kind: "component", type: i14.PickLocationComponent, selector: "app-pick-location", inputs: ["address", "question", "apiKey"], outputs: ["locationSelected"] }, { kind: "component", type: i15.CustomInputComponent, selector: "app-custom-input", inputs: ["value", "question", "disabled", "placeholder", "error", "fromShengel", "readOnly", "ngClassValue", "idValue", "focusEvent"], outputs: ["inputValue"] }, { kind: "component", type: i16.CustomTextAreaComponent, selector: "app-custom-text-area", inputs: ["value", "placeholder", "rows", "error", "question", "readOnly"], outputs: ["textareaValueChange"] }, { kind: "component", type: i17.CustomTableComponent, selector: "app-custom-table", inputs: ["question", "apiMeta"], outputs: ["valueChange"] }, { kind: "component", type: i18.CustomDatePickerComponent, selector: "app-custom-date-picker", inputs: ["date", "minDate", "maxDate", "error", "errorMessage", "readOnly"], outputs: ["dateChange"] }, { kind: "component", type: i19.DropdownWithFlagComponent, selector: "app-dropdown-with-flag", inputs: ["certified", "JobPerformerCertificates"], outputs: ["flagDropDownChange"] }, { kind: "component", type: i20.CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "component", type: i21.LoaderComponent, selector: "app-loader" }, { kind: "pipe", type: i22.I18nPipe, name: "i18n" }], encapsulation: i0.ViewEncapsulation.None });
|
|
2258
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: QuestionnaireComponent, selector: "lib-questionnaire", inputs: { qbId: "qbId", insuranceStartDate: "insuranceStartDate", serv: "serv", tkn: "tkn", api: "api" }, outputs: { handleEvent: "handleEvent", handlePage: "handlePage", handleQuestion: "handleQuestion", handleBook: "handleBook" }, providers: [ChangeService], usesOnChanges: true, ngImport: i0, template: "<!-- Spinner -->\n<ngx-spinner [name]=\"spinnerName\" [type]=\"spinnerType\"></ngx-spinner>\n<!-- custom loader -->\n<app-loader></app-loader>\n<!-- Back Processing -->\n<!-- <div *ngIf=\"backicon == false\" >\n <div class=\"backicon\" >\n <button (click)=\"handleBackClick()\" [class]=\" abItem?.Status__c == 'Completed' ? 'summary-volver':'app-back1'\">\n <img class=\"icon-arrow-back\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-arrow-back.png\" alt=\"Scroll down\"> {{ qbItem?.Back__c }}\n </button>\n </div>\n</div> -->\n\n<!-- Question Hanlding -->\n<div *ngIf=\"questionItem\" [class]=\"qbItem.isShengel__c ? 'questiondiv1' : 'questiondiv1 padd-bottom'\">\n <!-- Progress Bar & Title -->\n <div *ngIf=\"questionItem.Title__c\">\n <h1>{{ questionItem?.Title__c }}</h1>\n <div>{{ questionItem?.SubTitle__c }}</div>\n </div>\n\n <!-- Progress & Grouping -->\n <div>\n <!-- Pie Chart Progress -->\n <div [ngClass]=\"{ bgColor: qbItem?.Progress_Bar__c }\">\n <div id=\"nxt-progress\" *ngIf=\"qbItem?.Progress_Bar__c\">\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress>\n </div>\n </div>\n\n <!-- Show the Group/Module related to the Progress -->\n <div *ngIf=\"questionItem.Group__c && qbItem.Progress_Bar__c\"\n [ngClass]=\"{ questionalign: !qbItem?.Progress_Bar__c }\">\n <div class=\"nxt-largeTitle\">\n <h3 class=\"myt-font6 myt-text3\">\n {{ questionItem?.Group__c }}\n </h3>\n <div *ngIf=\"questionItem.Sub_Text__c != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.Sub_Text__c}}</div>\n <div *ngIf=\"questionItem.Sub_Text__c === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.Sub_Text__c}}</div>\n </div>\n </div>\n </div>\n\n <!-- Question Handling -->\n <div>\n <div *ngIf=\"questionItem.Question_Text__c\">\n <p class=\"nxt-label\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </p>\n </div>\n <!-- Title -->\n <!-- <div *ngIf=\"questionItem.Is_Title__c\">\n <div *ngIf=\"questionItem.Type__c != 'Book' && questionItem.Question_No__c!='6' && questionItem.Question_No__c!='9'\"> \n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </h3>\n </div>\n </div> -->\n <!-- HA 31-JAN-24 Removed the unwanted styling class -->\n <!-- <div *ngIf=\"!questionItem.Is_Title__c\" [class]=\"qbItem.isShengel__c ? 'header-style' : 'question-f-size'\">\n <div [innerHTML]=\"getText(questionItem?.Question_Text__c)\" >\n {{ questionItem?.Question_Text__c }}\n </div>\n </div> -->\n\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.Type__c == 'Book'\">\n <div *ngIf=\"questionItem.Question_No__c=='6'\">\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{ questionItem?.Question_Text__c }}\n </h3>\n </div>\n </div> -->\n \n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.Type__c == 'File' \">\n <div *ngIf=\"questionItem.Question_No__c=='9'\">\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </h3>\n </div>\n </div> -->\n </div>\n\n <!-- Additional Info -->\n <!-- The below code can be written effectively nested ngIf for Rich Text & Other onw for Progress Bar -->\n <div *ngIf=\"questionItem.Additional_Rich__c && qbItem.Progress_Bar__c\" >\n <div\n class=\"nxt-additional \" [innerHTML]=\"innerhtml\">\n </div>\n </div>\n <div *ngIf=\"questionItem.Additional_Rich__c && !qbItem.Progress_Bar__c\">\n <div class=\"info-alert ques-alert1\">\n <i class=\"fa fa-info fa-3x iposition icolor\" aria-hidden=\"true\"></i>\n <div class=\"infodiv\" [innerHTML]=\"innerhtml\"></div>\n </div>\n </div>\n\n <!-- Dropdown-->\n <div *ngIf=\"dropdownFlag\" >\n <div class=\"nxt-dis-flex\">\n <select class=\"nxtdropdown\"\n [ngClass]=\"{\n 'dt-line nxt-myt-align3 nxt-myt-align2 dpDown nxt-dropbox down1 myt-dropbox myt-border-r myt-font1': qbItem?.Progress_Bar__c,\n 'custom-select': !qbItem?.Progress_Bar__c\n }\" class=\"mr-sm-2 dd-height nxt-dropbox \" id=\"dropdown\" [(ngModel)]=\"inpValue\" (change)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error ? 'red' : inpValue?.length > 0 ? '#fff' : ''\n }}\" style.color=\"{{ questionItem?.error ? 'red' : '' }}\">\n <option *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"option\" value=\"{{ opt.Value__c }}\">\n {{ opt.Value__c }}\n </option>\n <!-- HA 20DEC23 For Translation -->\n <option value=\".\" disabled hidden>{{'pleaseMakeChoice' | i18n:i18nService.currentLanguage}}</option>\n </select>\n </div>\n </div>\n\n <!--VD Radio update -->\n <div *ngIf=\"radioFlag || dataFlag\" class=\"\">\n <div class=\"nxt-custom-radio-container\">\n <div *ngFor=\"let opt of questionItem.Question_Options__r.records\" \n [class]=\" this.questionItem.error ? 'nxt-custom-radio-option invalid' : 'nxt-custom-radio-option'\">\n <input\n type=\"radio\"\n [id]=\"opt.Value__c\"\n [(ngModel)]=\"inpValue\"\n name=\"inpValue\"\n [value]=\"opt.Value__c\"\n (change)=\"optionChange(opt.Value__c)\"\n />\n <label class=\"nxt-radio-label\" [for]=\"opt.Value__c\"> {{ opt.Value__c }}</label>\n </div>\n <span *ngIf=\"this.questionItem.error\" class=\"nxt-error-msg\"> {{ questionItem?.Error_Message__c }}</span>\n </div>\n\n <!-- <div class=\"nxt-dis-flex\">\n <div *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"radio nxt-radioOption\">\n <label class=\"nxt-radiocontainer container myt-font4\">\n <input type=\"radio\" [id]=\"opt.Id\" [(ngModel)]=\"inpValue\" name=\"inpValue\" [value]=\"opt.Value__c\"\n (change)=\"optionChange(opt.Value__c)\" />\n {{ opt.Value__c }}\n </label>\n </div>\n </div> -->\n </div> \n <!-- Checkbox -->\n <div *ngIf=\"checkboxFlag\" class=\"\">\n <div *ngIf=\"questionItem?.error\" class=\"cond-div2\">\n {{ questionItem?.Error_Message__c }}\n </div>\n <div class=\"nxt-checkbox-container\">\n <div *ngFor=\"let item of optionValues\" class=\"nxt-checkbox-wrapper\">\n <label class=\"nxt-container1\">\n <input type=\"nxt-checkbox\" [id]=\"item.Id\" [(ngModel)]=\"item.checked\" (click)=\"clearError()\" />\n <span class=\"nxt-checkbox-label\">{{ item.Value__c }}</span>\n </label>\n </div>\n </div>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"textFlag\">\n <!-- HA 31-JAN-24 To reduce the margin -->\n <div [class]=\"'col-md-' + questionItem?.Size__c + ' paddingnone'\">\n <input class=\"nxt-input\" type=\"text\" [(ngModel)]=\"inpValue\" \n id=\"text-input-id\" required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : ''\n }}\" oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0\"></i> -->\n </div>\n </div>\n\n <!-- Text Area -->\n <div *ngIf=\"taFlag\" >\n <div>\n <textarea class=\"nxt-input nxt-text-area\" id=\"ta-input-id\" [(ngModel)]=\"inpValue\" (click)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : inpValue?.length > 0 && taFocusOut\n ? '#87be1c'\n : ''\n }}\" (focusout)=\"taFocusOut = true\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\"></textarea>\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0 && taFocusOut\" style=\"display: flex; justify-content: flex-end;\"></i> -->\n </div>\n </div>\n\n <!-- CC Number Format -->\n <div *ngIf=\"numberFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"Text\" placeholder=\"0000 0000 0000 0000 0000 0000\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\"\n [(ngModel)]=\"inpValue\" id=\"number-input-id\" (ngModelChange)=\"CCOnChange($event)\" required=\"\" maxlength=\"29\"\n (focus)=\"clearError()\" oninput=\"this.value=this.value.replace(/[^0-9 ]/g,'');\"\n style=\"width:-webkit-fill-available;\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px;\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n <!-- END-->\n\n <!-- AlphaNumeric -->\n <div *ngIf=\"alphanumericFlag\" class=\"col-md-12\"> <!--UI not completed-->\n <div style=\"position:relative;\">\n <!-- HA 20DEC23 For Translation -->\n <input type=text placeholder=\"{{'zeroOfZero' | i18n:i18nService.currentLanguage}}\" style=\"padding:5px 5px 5px 150px;\" id=\"youridhere\"/>\n </div>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\" [(ngModel)]=\"inpValue\" id=\"email-input-id\"\n required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n\n <!-- DateTime -->\n <div *ngIf=\"dtFlag\" class=\"col-md-12 paddingZero nxtmyt-time1\" >\n <!-- Error Handling -->\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n\n <!-- Date -->\n <div *ngIf=\"dateFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- HA 31-JAN-24 These labels were occuping the empty space when date question comes-->\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label> -->\n <div class=\"nxt-dis-flex\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, questionItem)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\">\n </my-date-picker>\n </div>\n </div>\n </div>\n\n <!-- Time -->\n <div *ngIf=\"timeFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label> -->\n <div class=\"nxt-dis-flex\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.Progress_Bar__c,\n dateandTime: !qbItem?.Progress_Bar__c}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem?.X24_Hours__c == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n <!-- <div [ngClass]=\"{'': qbItem.Progress_Bar__c, 'dateandTime': !qbItem.Progress_Bar__c}\"></div> -->\n </div>\n </div>\n </div>\n </div>\n <i class=\"fa check-icon3\" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div>\n </div>\n\n <!-- Attachment / File -->\n <div *ngIf=\"fileFlag\">\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <div class=\"info-alert\" style.border-color=\"{{ this.questionItem?.error ? 'red' : '' }}\">\n <label class=\"picture-upload\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"fa fa-plus fa-2x picture-upload-child pic-upload icolor\">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n </div>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ allowedFileExtension }}\" (change)=\"uploadFile($event,this.questionItem)\" />\n </div>\n <ul *ngIf=\"\n attachments?.length > 0 &&\n questionItem?.Type__c === 'File' &&\n !qbItem?.Progress_Bar__c\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName}}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n\n <!-- Attachment Progress -->\n <div *ngIf=\"qbItem.Progress_Bar__c\">\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"uploading-file-name \">{{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n \n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"f-Name\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\"> {{ questionItem?.Question_Text__c}}</span>\n <label class=\"file-label \">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/file-upload.png\" class=\"file-icon\"/>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Book -->\n <div *ngIf=\"bookFlag\">\n <div [class]=\"qbItem.isShengel__c ? 'form-group content-box' : 'form-group'\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div [class]=\"qbItem.isShengel__c ? '' : 'nxt-myt-align3'\" [class]=\"qbItem.isShengel__c ? 'col-lg-' + ques.Size__c + ' paddingnone' : 'col-md-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.Id\">\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\">\n <span>{{ ques?.Question_Text__c }}</span>\n </div>\n <div class=\"col-md-12 paddingZero nxtmyt-dateTimeNew\" *ngIf=\"ques.Type__c === 'Time' || ques.Type__c === 'Date'\">\n <div *ngIf=\"ques.Type__c === 'Date'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label> -->\n <div class=\"dateandtime\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, ques)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\" >\n </my-date-picker>\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.Type__c === 'Time'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label> -->\n <div class=\"dateandtime\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.Progress_Bar__c,\n dateandTime: !qbItem?.Progress_Bar__c}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem.X24_Hours__c == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [date]=\"ques.input\" (dateChange)=\"displayDate($event,ques)\"></app-custom-date-picker>\n </div>\n <!-- VD to show lable-->\n <div *ngIf=\"ques.Type__c === 'Label'\">\n <app-custom-label [labelStyle]=\"ques.Title__c\" [labelValue]=\"ques.Question__c\">\n </app-custom-label>\n </div>\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <label>{{ ques.Question_Text__c }}</label>\n <app-custom-input\n [value]=\"ques?.input\"\n [question]=\"ques\" \n [idValue]=\"ques?.Tracking_ID__c\"\n [focusEvent]=\"clearSQError(ques?.Id)\"\n [error]=\"ques?.error\"\n [placeholder]=\"ques?.Question__c\"\n (inputValue)=\"selectedInput($event,ques)\">\n </app-custom-input>\n </div>\n <div *ngIf=\"ques.Type__c === 'Location'\">\n <!-- for pick location -->\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['Api_Key__c']\" [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\n </div>\n <!-- for text area -->\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \" (textareaValueChange)=\"handleTextareaValueChange($event)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.Type__c === 'Email'\">\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\n </div>\n\n <div *ngIf=\"ques.Type__c === 'File'\">\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <label class=\"picture-upload custom-file-upload bgcolor-w\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"\n fa fa-plus fa-2x\n picture-upload-child\n pic-upload\n icolor\n \">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ bookFlagAccept }}\" (change)=\"uploadFile($event,ques)\" />\n </div>\n\n <ul *ngIf=\"\n attachments?.length > 0 &&\n ques.Type__c === 'File' &&\n !qbItem.Progress_Bar__c\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n <div class=\"myt-box\" *ngIf=\"qbItem.Progress_Bar__c\">\n\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"uploading-file-name myt-font1 font-weight: normal;\"> {{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"f-Name\">{{ ques?.Question__c }}</span>\n <label class=\"file-label \">\n <span style=\"color: #c5281c;text-decoration:underline\">\n {{'attach' | i18n:i18nService.currentLanguage}}\n </span>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event,ques)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.Type__c === 'Table'\" class=\"\">\n <app-custom-table \n [question]=\"ques\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-table>\n </div>\n\n <!-- Dropdown -->\n <div *ngIf=\"ques.Type__c === 'Dropdown'\" class=\"nxtdropdown\">\n <!-- for common dropdown -->\n <!-- HA 20DEC23 For Translation -->\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel__c\"\n [options]=\"ques.Question_Options__r.records\"\n [apiMeta]=\"ques.Sub_Text__c\"\n [id]=\"ques.Name\"\n [selectedValue]=\"ques.input\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques?.Error_Message__c\"\n [error]=\"ques?.error\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-dropdown>\n <app-dropdown-with-flag *ngIf=\"ques.isDependentPicklist && !ques.dropDownOnly\" [certified]=\"ques.certifiedFlag\" [JobPerformerCertificates]=\"ques.certificateList\" (flagDropDownChange)=\"dependentChange($event)\"></app-dropdown-with-flag>\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div> \n </div>\n </div>\n </div>\n </div>\n\n <!--List start-->\n <div *ngIf=\"listFlag\">\n <div class=\"form-group\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div class=\"nxt-myt-align3\" [class]=\"'col-md-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of getLocalSubQuestions(questionItem.Id);let i = index\">\n <div>\n <span class=\"nxt-dis-flex myt-font3 myt-font7\">{{ ques?.Question__c }}</span>\n </div>\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\n 'nxt-dis-flex dt-line date-line nxtbookText boxoutline myt-font1': qbItem.Progress_Bar__c,\n textBox: !qbItem.Progress_Bar__c\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n </div>\n </div>\n <div class=\"\" *ngIf=\"addFlag\">\n <!-- HA 20DEC23 For Translation -->\n <button (click)=\"Add(getLocalSubQuestions(questionItem.Id))\" class=\"btn\"><i class=\"fa fa-plus\" ></i>{{'add' | i18n:i18nService.currentLanguage}}</button>\n </div>\n </div>\n </div>\n </div>\n <!--List End-->\n\n <!-- Actions -->\n <!-- VD button condition removed-->\n <div class=\"flexer\">\n <!-- Backward / Back -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"backbutton\" \n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\" *ngIf=\"qbItem.Back__c\">\n <div [ngClass]=\"{}\">\n <button [ngClass]=\"{\n 'nxt-left-bt': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary':\n !qbItem.Progress_Bar__c\n }\" (click)=\"handleBackClick()\">\n {{ qbItem?.Back__c }}\n </button>\n </div>\n </div>\n\n <!-- Forward / Next -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div *ngIf=\"qbItem.Next__c\" >\n <div class=\"nxtbutton\">\n <button [ngClass]=\"{\n 'nxt-rusty': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary':\n !qbItem.Progress_Bar__c\n }\" (click)=\"handleNextClick()\">\n {{ qbItem.Next__c }}\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<!-- Summary -->\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\n 'col-md-12':!qbItem.Progress_Bar__c\n }\">\n <h1 class=\"nxt-header1 nxt-summarypadd\" >{{ qbItem.SubTitle__c }}</h1> \n <div id=\"nxt-progress2\" *ngIf=\"!qbItem.Progress_Bar__c && this.abItem.Status__c != 'Completed' \">\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\n <div *ngFor=\"let qa of summary\">\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\n <div [ngClass]=\"{ summary: !qbItem.Progress_Bar__c }\">\n <div *ngIf=\"!qbItem.Edit__c\"\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\n <p [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</p>\n </div>\n <div *ngIf=\"qbItem.Edit__c\"\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\n <div [ngClass]=\"{ 'question': this.abItem.Status__c === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div>\n <div class=\"nxt-answer\" >\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <!-- HA 02FEB24 Displaying the in summary for book type -->\n <div *ngIf=\"qa.qTyp == 'Book'\">\n <div *ngFor=\"let val of qa.myVal\">\n <p>{{ val.Question_Text__c }}:<span>{{ val.input }}</span></p>\n </div>\n </div>\n <!-- HA 02FEB24 Displaying the value for direct question -->\n <div *ngIf=\"qa.qTyp != 'File' && qa.qTyp != 'Book'\">{{ qa.Question_Text__c }} <span></span>{{ qa.ansValue }}</div>\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"this.abItem.Status__c === 'Completed'\" class=\"col-lg-12\" style=\"text-align: center;\">\n <h2>{{this.qbItem.Summary_Text__c}}</h2>\n <p>{{this.qbItem.Summary_Sub_Text__c}}</p>\n </div>\n\n <div id=\"nxt-progress2\" *ngIf=\"qbItem.Progress_Bar__c \">\n <div [ngClass]=\"{'bgColor nxtsummary-top' : qbItem.Progress_Bar__c }\" >\n <div id=\"nxt-progress-summary\" *ngIf=\"qbItem.Progress_Bar__c\">\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress>\n \n <div *ngIf=\"qbItem.Summary_Text__c && qbItem.Progress_Bar__c\" \n [ngClass]=\"{ summaryTitle: qbItem.Progress_Bar__c }\">\n <h3 class=\"nxt-subTitle\" >{{ qbItem.Summary_Text__c }}</h3>\n <div *ngIf=\"abItem.Status__c != 'Completed'\" class=\"nxt-subTitle1\" >{{ qbItem.Summary_Sub_Text__c}}</div>\n </div>\n </div>\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <h3 class=\"summary-h\">\n {{ qbItem.Summary_Text__c }}\n </h3>\n </div>\n </div>\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\n <div class=\"summary-groupText myt-font2\">\n <!-- <p>Informe de da\u00F1o</p> -->\n </div>\n <div *ngFor=\"let qa of summary\" >\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\n <div class=\"summary\">\n <!-- <div *ngIf=\"!qbItem.Edit__c\"\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\n <a [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\n </div>\n <div *ngIf=\"qbItem.Edit__c\"\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.Status__c === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div> -->\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n \n <div class=\"nxt-answer\">\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <div *ngIf=\"qa.qTyp != 'File'\">\n {{ qa.ansValue }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flexer1\" *ngIf=\"abItem\">\n <div class=\"\" *ngIf=\"abItem.Status__c == 'Completed' && qbItem.Cancel__c\">\n <div class=\"col-md-12\">\n <button [ngClass]=\"{'btn-text': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\"\n (click)=\"handleCancelClick()\">\n {{ qbItem.Cancel__c }}\n </button>\n </div>\n </div>\n </div> -->\n\n <!-- Group Actions -->\n <div class=\"align-edit-submit\" *ngIf=\"abItem.Status__c != 'Completed'\">\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"col-md-6\" *ngIf=\"qbItem.Submit__c\">\n <button [ngClass]=\"{ 'btn-text2': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c }\" \n (click)=\"handleSubmitClick()\">\n {{ qbItem.Submit__c }}\n </button>\n </div>\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!-- <div class=\"col-md-6\" *ngIf=\"qbItem.Edit__c\">\n <button [ngClass]=\"{'grey': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\" \n (click)=\"handleBackClickNew()\">\n {{ qbItem.Edit__c }}\n </button>\n </div> -->\n </div>\n\n</div>", styles: [".nxt-rusty{width:235px;background-color:#cd2810;color:#fff;text-align:center;font-size:24px;height:60px;margin-left:0%;margin-top:11%;cursor:pointer}.nxt-edit{background-color:#dfe2e7;border:none;text-decoration:underline;font-size:16px;vertical-align:super;font-weight:700}.nxt-icon-edit{width:15px;height:18px;margin:0 6px 1px -13%}.nxt-icon-edit1,.nxt-icon-edit-summary{width:29px;height:28px}.nxtquestiondiv1{padding-left:25px;padding-right:25px;padding-top:3%}.nxtquestiondiv2{padding-top:0;padding-bottom:20px;padding-left:11px}.align-edit-submit{display:flex;flex-direction:column;align-items:center}.nxtquestiondiv2{padding-left:0!important;padding-bottom:0!important}.bgColor{text-align:center;background-color:#dedddd}.nxt-questionalign{text-align:center;padding-right:4%;margin-bottom:4px;margin-top:2rem;color:#560d05}.nxtquestionStyle{font-weight:600}.nxt-largeTitle{padding-left:16px;padding-top:12px}.nxtquestion-f-size{font-size:.7rem}.non{background-color:#dedddd}.circle{margin-left:25px}.titlebar{padding-left:10%;padding-top:1%;padding-right:10%}.infodiv{padding-left:2rem;overflow:hidden}.info-alert{border:1px solid #e6e6e6;border-radius:5px;padding:.5em;margin-left:15px;margin-right:15px;margin-bottom:1rem;display:flex}.addtional-info{margin-left:-33px;margin-top:-21px;font-size:16px;font-weight:400;font-stretch:normal;font-style:normal;color:#6f7072;font-family:Helvetica}.ques-alert1{margin-bottom:1rem;display:flex}.iposition{margin-left:3rem}.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{position:relative;padding:20px;float:center;width:100%}.col-md-12{padding:0!important}.cond-div2{color:red;font-weight:700;padding-bottom:3%}.nxtradiotext{margin-top:-30px}.nxtdropdown{display:flex;justify-content:flex-start}.nxt-radiocontainer{display:flex;border:1px solid none;border-radius:.3em;padding-bottom:20px;padding-top:30px;align-items:center;text-align:center;cursor:pointer;font-family:Rubik,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;color:#000}.nxt-radioOption{display:flex;align-content:flex-start;margin-top:-16px;width:6%}.nxt-btn{border-radius:.3rem;font-size:1.25rem;line-height:1;padding:.5rem 1rem;width:100%;outline:0}.nxtmyt-time{width:-moz-fit-content!important;width:fit-content!important;background-image:none;background:#dedddd;margin:0;padding:0;border:none;font-size:15px;letter-spacing:1px}.nxtshowminute{padding-left:5px;margin-top:0%}.myt-time1{margin-top:-32px;margin-left:-15px}.nxtmyt-dateTimeNew{margin-left:-14px}.myt-hour{width:-moz-fit-content;width:fit-content}.date-time{padding:0;margin:0;text-align:left}.dateandTime{border:1px solid #d2d4d6;position:relative;display:flex;border-radius:2px;background-image:url(https://dynamic-css1.s3.ap-south-1.amazonaws.com/External+css/time.svg);background-size:25px;background-repeat:no-repeat;background-position:99% center;background-color:#fff;height:37px}.date-line{border-bottom:1px solid #fff}.nxt-dt-time{width:57%;margin-left:2.3%;text-align:left;background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/icon-clock%402x.png)!important;background-size:25px!important;background-repeat:no-repeat!important;background:#dedddd}.nxtdate-picker{width:57%;margin-left:2.5%;height:44px;border-radius:5px}.datetime:focus{border:none;box-shadow:none}#meridiem{margin-top:-2px;border:hidden}.textBox{width:100%;height:36px}.textBox1{width:100%;height:36px;margin:30px -15px 30px 19px}.option{color:#767676}.paddingnone{padding-bottom:0%}.paddingZero{padding:0}.summary-h{text-align:left;padding-bottom:15px}.summary{display:flex;flex-direction:column;align-items:flex-start;border-bottom:2px solid #fff;margin-left:10px;margin-right:10px;margin-bottom:10px}.asum{color:#6f7072;margin-top:5%;padding-left:3%}.nxtquestion{padding:10px;font-size:18px;color:#080809}.nxtquestion1{margin-left:14rem;background:#dedddd;color:#560d05;font-size:15px;padding-bottom:20px;text-align:left}.nxt-answer{display:flex;align-items:center;font-size:14px;font-weight:400;width:100%;word-wrap:break-word;justify-content:space-between;background-color:#dfe2e7;padding:5px 5px 5px 10px;border-radius:4px}.myt-font{font-size:20px}.myt-font1{width:16rem;font-size:14px;font-weight:400}.myt-font2{font-size:18px}.myt-font3,.myt-font4{font-size:14px}.myt-font5{margin-top:-18px;font-weight:400;font-size:14px;color:#560d05}.myt-font6{font-size:20px;font-weight:700;color:#c5281c;text-align:center}.myt-font10{font-weight:400;font-size:14px;color:#560d05;margin-top:10px}.myt-font7{display:flex;justify-content:flex-start;padding-left:20.5%;font-weight:100;color:#560d05}.myt-font8{font-weight:400}.dpDown:focus-visible{outline:none}.summaryTitle{padding-left:0%;padding-top:4%}.summary-groupText{width:55%;margin:auto auto -2%;text-align:left;font-weight:700;padding-top:0%;padding-bottom:0%;background-color:#dedddd;color:#c5281c}.nxtsum-ques{width:55%;margin:auto}.nxtsum-ques1{width:59%;margin:auto}.header-style{padding:15px!important;background:#F8F8F8;color:#898989!important;border:1px solid #e8e8e8;border-top-left-radius:5px;border-top-right-radius:5px;margin-left:0!important;justify-content:left!important;font-size:15px!important}.file-upload-btn{display:none;border-bottom:groove}.nxtfile-upload-box{max-width:45%;margin-left:29.5%;height:auto;padding:16px;display:flex;border:2px;border-bottom:1px solid #fff;background-color:#dedddd;justify-content:space-between;color:#d8d8d8}.file-label{cursor:pointer;color:#c5281c;text-decoration:underline}.nxtfile-uploading-box{font-size:14px;font-weight:400;max-width:45%;margin-left:29.5%;height:56px;padding:16px;display:flex;border:2px;background-color:#dedddd;justify-content:space-between;margin-bottom:0;color:#d8d8d8}.uploading-file-name{color:#6f7072}.deleteIcon{cursor:pointer;height:24px}.file-icon{max-width:24px;height:26px}.picture-upload{height:200px;width:200px;position:relative;border:1px solid #ccc;display:flex;padding:6px 12px;cursor:pointer;background-color:#fff;align-items:center}.colon{line-height:42px;padding:0;margin-top:10%;color:#6f7072}.colon1{display:contents}.nxt-subTitle{color:#c5281c;font-weight:600;margin-top:-3%}.nxt-subTitle1{color:#560d05;font-size:14px;font-weight:500}.fa{display:flex}.nxt-check-icon{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;padding:5px;margin-top:.4rem}.nxt-check-icon2{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:.6rem;line-height:3}.nxt-check-icon3{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:3rem}.align-l{text-align:left;padding:1% 2% 2%;margin-bottom:-5%;margin-top:-1%}.attach-ulist{list-style-type:none;margin-left:0;margin-bottom:.7rem}.attach-list{float:right;cursor:pointer;padding:0}.icolor{color:#99b5ce}.picture-upload-child{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tspan:nth-child(1){font-size:25px;font-weight:700}.tspan:nth-child(2){display:none}.pic-upload{position:absolute;top:15%;left:85%;transform:translate(-50%,-50%)}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-primary:hover{color:#fff}.btn-primary:focus,.btn-primary.focus{color:#fff;box-shadow:0 0 0 .2rem #268fff80}.btn-primary.disabled,.btn-primary:disabled{color:#fff}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #268fff80}.btn-back-color{display:block;width:100%;padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;text-align:center;border-radius:.3rem;margin:0}.fa-plus:hover{color:#87be1c}.fa-plus{color:#99b5ce}.btn-primary{border-color:#007bff}.ques-Title{text-align:left;font-size:24px}.nxtgrey{width:38%;height:56px;margin:0px 0px 0px 0rem;padding:14px 0 17px;background-color:#cd2810;color:#fff;font-size:24px}.nxtbtn-text{width:330px;font-size:24px;background-color:#cd2810;color:#fff;height:60px;margin-left:auto;margin-top:0;cursor:pointer;border-radius:40px}.nxtbtn-text2{width:21rem;font-size:24px;background-color:#cd2810;border:none;color:#fff;height:60px;margin-left:17rem;margin-right:17rem;margin-top:10px;cursor:pointer;border-radius:40px}.flexer{max-width:100%;margin-top:30px;width:100%;display:flex;justify-content:flex-end}.flexer1{max-width:100%;width:100%;display:flex;justify-content:center;margin-top:32px}.btn-r{right:0rem}.nxtdown{margin-left:0;width:57%}.nxt-dis-flex{display:flex;flex-direction:column}.nxt-radioOption{display:flex;align-items:center;margin-bottom:8px}.radiocontainer{display:flex;align-items:center;margin-left:-17px;padding-right:15px}.nxt-radiocontainer input{margin-right:8px;flex-shrink:0}.down1{width:16rem;margin-left:0rem;background-color:#dedddd}.down2{margin-top:0%;padding-left:11px}.myt-dropbox{background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/down-red.png);background-origin:content-box;background-position:right -.9rem center;background-repeat:no-repeat;background-size:35px 33px;padding-right:1.35rem;background-color:#dedddd}.boxoutline{outline:transparent;background-color:#dedddd}.nxt-left-bt{width:238px;background-color:#cd2810;color:#fff;padding:0;text-align:center;font-size:24px;cursor:pointer;height:60px;margin-top:125px;margin-bottom:4rem;margin-left:-234px}.townArea{text-align:left;height:43px;padding-left:15px}.townArea:hover{background-color:#9e9e9e2e}.listFlow{font-weight:400;color:#767676;z-index:2;position:absolute;background:#dedddd;box-shadow:0 2px 5px #00000040}.myt-radio input[type=radio]:checked:after{background-color:#c5281c}.full-summary{margin-top:4%}.container-radio input{display:none;position:absolute;opacity:0;cursor:pointer}.f-Name{color:#6f7072;font-size:14px;font-weight:400;word-break:break-word}.nxtsummary-top{margin-top:4%}.myt-border-r{border-top:none;border-left:none;border-right:none;border-radius:0}.nxt-myt-align{margin-left:4%;line-height:2}.nxt-myt-align1{margin-left:-29px}.nxt-myt-align2{margin-left:-15px}.nxt-myt-align3{width:100%}.nxt-myt-book1{margin-top:-20px}.colorf{color:#555}.nxtbookText{width:57%;margin-left:21.5%;background-color:#dedddd}.nxtbook{width:32.6%;margin-left:34%;background-color:#dedddd}.nxtsummary-completed{padding-left:2%;margin-top:20px}.nxttown{margin:0;background-color:#dedddd}.nxt-town-drop{margin:auto;width:57%}.nxtquestiondiv1.padd-bottom{padding-bottom:2rem!important;padding-top:2rem!important}@media (max-width: 1090px){.nxt-icon-edit{margin:0 6px -3px -13%!important}}@media (max-width: 768px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:center}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}}.nxtbutton{padding-left:10px}.nxt-custom-radio-option{display:flex;flex-direction:row;margin-bottom:5px}.nxt-custom-radio-option.invalid label{color:red}input[type=radio]{width:auto}.nxt-radio-label{margin-left:15px;margin-bottom:0}.nxt-error-msg{color:red;font-size:12px;margin-top:5px}.nxt-input{height:38px;border:1.5px solid #43455533;border-radius:4px;padding:5px}.nxt-label{font-weight:700;color:#434555}.nxt-text-area{height:100px;width:100%}@media screen and (max-width: 480px){.nxt-icon-edit{margin:0 6px 4px -35%!important}.nxt-rusty{width:25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:25rem;margin-left:-25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:89%}}@media screen and (max-width: 420px){.nxt-icon-edit{margin:-9px 1px 4px 4%!important}.nxt-rusty,.nxtbtn-text{width:21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:21rem;margin-left:-21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-container1{margin-left:0%}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:100%}.nxtmyt-dateTimeNew{margin-left:-10px!important}.dateandtime{padding-left:0!important}.nxt-dt-time{padding-left:.8%!important}.myt-font7{padding-left:0rem;margin-left:-3.5%}.nxtgrey{width:21rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtbtn-text2{width:21rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}}.mydp .selection{padding:0!important}.text-border{border-top:none;border-left:none;border-right:none;border-radius:0;border-bottom:1px solid #fff!important;background-color:#dedddd}.nxt-additional{display:flex;font-size:20px;text-align:left;font-weight:200;margin-left:4%;justify-content:center;color:#3e3e3c;padding:0 30%}.nxt-check{display:block}.nxt-container1{display:inline-grid;position:relative;cursor:pointer;font-size:20px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.bottomspace1{padding-bottom:14px!important}.myt-321{font-size:20px;font-weight:700;color:#c5281c;margin-top:11px}.myt-345{display:none}.panel{-moz-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);-webkit-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);border-radius:0;border:none;box-shadow:0 1px 2px #0000001a;margin-bottom:20px}.panel .panel-body{padding:20px}.panel-heading{border-radius:0;border:none!important;padding:10px 20px}.panel-default>.panel-heading{background-color:#fafafa;border-bottom:none;color:#2a323c;border:1px solid #e3e3e3!important}.panel-title{margin-bottom:0;margin-top:0;font-family:Rubik,sans-serif;font-weight:400}.panel-footer{background:#fafafa;border-top:0}.panel-color .panel-title{color:#fff}.panel-primary>.panel-heading{background-color:#03a9f4}.panel-success>.panel-heading{background-color:#01ba9a}.panel-info>.panel-heading{background-color:#18bae2}.panel-warning>.panel-heading{background-color:#f8ca4e}.panel-danger>.panel-heading{background-color:#f62f37}.panel-dark>.panel-heading{background-color:#2a323c;color:#fff}.panel-fill{border-radius:3px}.panel-fill .panel-heading{background-color:transparent;color:#fff;border-bottom:1px solid rgba(255,255,255,.5)!important}.panel-fill .panel-body{color:#ffffffd9}.panel-fill.panel-default .panel-body{color:#666}.panel-fill.panel-default .panel-heading{background-color:transparent;color:#333;border-bottom:1px solid rgba(0,0,0,.1)!important}.panel-fill.panel-primary{background-color:#03a9f4}.panel-fill.panel-success{background-color:#01ba9a}.panel-fill.panel-info{background-color:#18bae2}.panel-fill.panel-warning{background-color:#f8ca4e}.panel-fill.panel-danger{background-color:#f62f37}.panel-fill.panel-dark{background-color:#2a323c}.panel-group .panel .panel-heading a[data-toggle=collapse].collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading .accordion-toggle.collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading a[data-toggle=collapse]{display:block}.panel-group .panel .panel-heading a[data-toggle=collapse]:before{content:\"\\f0d8\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading .accordion-toggle{display:block}.panel-group .panel .panel-heading .accordion-toggle:before{content:\"\\f068\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading+.panel-collapse .panel-body{border-top:none!important;border:1px solid #e3e3e3}.panel-group .panel-heading{padding:12px 26px}.panel-group.panel-group-joined .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-group-joined .panel-group .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-body label{color:#9a9a9a;font-size:14px;font-weight:400;display:inline-block;max-width:100%;margin-bottom:5px}.font-size{font-size:14px}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit;text-decoration:none}.panel-title{font-size:16px}@media (min-width: 300px) and (max-width: 399px){.nxtselbtngroup{padding-left:1.3%!important}}@media (min-width: 400px) and (max-width: 480px){.nxtselbtngroup{padding-left:.9%!important}}@media screen and (min-width: 871px){.nxtselbtngroup{padding-right:4px!important}}@media screen and (min-width: 1024px){.ES-style{position:absolute;left:7px;font-size:.9rem;color:#555;top:9px}}@media screen and (max-width: 1024px){.ES-style{position:absolute;left:.6rem;font-size:.95rem;color:#555;top:.57rem}}.summary-volver{display:none}.nxt-checkbox-container{display:flex;flex-direction:column}.nxt-checkbox-wrapper{display:flex;align-items:center;margin-bottom:10px}.nxt-container1{display:flex;align-items:center}.nxt-container1 input[type=checkbox]{margin-right:10px}.nxt-checkbox-label{margin-left:10px}.nxt-main{margin-top:100px;background-color:#03a9f4}\n"], dependencies: [{ kind: "directive", type: i11.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i11.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i11.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i8.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i8.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i12.MyDatePicker, selector: "my-date-picker", inputs: ["placeholder", "locale", "disabled", "options", "defaultMonth", "selDate", "selector"], outputs: ["dateChanged", "inputFieldChanged", "calendarViewChanged", "calendarToggle", "inputFocusBlur"], exportAs: ["mydatepicker"] }, { kind: "component", type: i7.NgxSpinnerComponent, selector: "ngx-spinner", inputs: ["disableAnimation", "bdColor", "zIndex", "color", "type", "size", "fullScreen", "name", "template", "showSpinner"] }, { kind: "component", type: i13.CircleProgressComponent, selector: "circle-progress", inputs: ["name", "class", "backgroundGradient", "backgroundColor", "backgroundGradientStopColor", "backgroundOpacity", "backgroundStroke", "backgroundStrokeWidth", "backgroundPadding", "radius", "space", "percent", "toFixed", "maxPercent", "renderOnClick", "units", "unitsFontSize", "unitsFontWeight", "unitsColor", "outerStrokeGradient", "outerStrokeWidth", "outerStrokeColor", "outerStrokeGradientStopColor", "outerStrokeLinecap", "innerStrokeColor", "innerStrokeWidth", "titleFormat", "title", "titleColor", "titleFontSize", "titleFontWeight", "subtitleFormat", "subtitle", "subtitleColor", "subtitleFontSize", "subtitleFontWeight", "imageSrc", "imageHeight", "imageWidth", "animation", "animateTitle", "animateSubtitle", "animationDuration", "showTitle", "showSubtitle", "showUnits", "showImage", "showBackground", "showInnerStroke", "clockwise", "responsive", "startFromZero", "showZeroOuterStroke", "lazy", "options"], outputs: ["onClick"] }, { kind: "component", type: i14.PickLocationComponent, selector: "app-pick-location", inputs: ["address", "question", "apiKey"], outputs: ["locationSelected"] }, { kind: "component", type: i15.CustomInputComponent, selector: "app-custom-input", inputs: ["value", "question", "disabled", "placeholder", "error", "fromShengel", "readOnly", "ngClassValue", "idValue", "focusEvent"], outputs: ["inputValue"] }, { kind: "component", type: i16.CustomTextAreaComponent, selector: "app-custom-text-area", inputs: ["value", "placeholder", "rows", "error", "question", "readOnly"], outputs: ["textareaValueChange"] }, { kind: "component", type: i17.CustomTableComponent, selector: "app-custom-table", inputs: ["question", "apiMeta"], outputs: ["valueChange"] }, { kind: "component", type: i18.CustomDatePickerComponent, selector: "app-custom-date-picker", inputs: ["date", "minDate", "maxDate", "error", "errorMessage", "readOnly"], outputs: ["dateChange"] }, { kind: "component", type: i19.DropdownWithFlagComponent, selector: "app-dropdown-with-flag", inputs: ["certified", "JobPerformerCertificates"], outputs: ["flagDropDownChange"] }, { kind: "component", type: i20.CustomDropdownComponent, selector: "app-custom-dropdown", inputs: ["options", "placeholder", "apiMeta", "selectedValue", "progressBar", "id", "readOnly", "errorMessage", "error", "fromShengel", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "component", type: i21.CustomLabelComponent, selector: "app-custom-label", inputs: ["labelValue", "labelStyle"] }, { kind: "component", type: i22.LoaderComponent, selector: "app-loader" }, { kind: "pipe", type: i23.I18nPipe, name: "i18n" }], encapsulation: i0.ViewEncapsulation.None });
|
|
2206
2259
|
}
|
|
2207
2260
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: QuestionnaireComponent, decorators: [{
|
|
2208
2261
|
type: Component,
|
|
2209
|
-
args: [{ selector: "lib-questionnaire", encapsulation: ViewEncapsulation.None, providers: [ChangeService], template: "<!-- Spinner -->\n<ngx-spinner [name]=\"spinnerName\" [type]=\"spinnerType\"></ngx-spinner>\n<!-- custom loader -->\n<app-loader></app-loader>\n<!-- Back Processing -->\n<div *ngIf=\"backicon == false\" >\n <div class=\"backicon\" [style.visibility]=\"questionStack.length >0 ? 'visible' : 'hidden'\">\n <button (click)=\"handleBackClick()\" [class]=\" abItem?.Status__c == 'Completed' ? 'summary-volver':'app-back1'\">\n <img class=\"icon-arrow-back\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-arrow-back.png\" alt=\"Scroll down\"> {{ qbItem?.Back__c }}\n </button>\n </div>\n</div>\n\n<!-- Question Hanlding -->\n<div *ngIf=\"questionItem\" [class]=\"qbItem.isShengel__c ? 'questiondiv1' : 'questiondiv1 padd-bottom'\">\n <!-- Progress Bar & Title -->\n <div *ngIf=\"questionItem.Title__c && qbItem.Progress_Bar__c\">\n <h1 class=\"header1\">{{ questionItem?.Title__c }}</h1>\n <div class=\"header2\">{{ questionItem?.SubTitle__c }}</div>\n </div>\n\n <!-- Progress & Grouping -->\n <div [ngClass]=\"{ questiondiv2: !qbItem?.Progress_Bar__c }\">\n <!-- Pie Chart Progress -->\n <div [ngClass]=\"{ bgColor: qbItem?.Progress_Bar__c }\">\n <div id=\"progress\" *ngIf=\"qbItem?.Progress_Bar__c\">\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress>\n </div>\n </div>\n\n <!-- Show the Group/Module related to the Progress -->\n <div *ngIf=\"questionItem.Group__c && qbItem.Progress_Bar__c\"\n [ngClass]=\"{ questionalign: !qbItem?.Progress_Bar__c }\">\n <div class=\"largeTitle\">\n <h3 class=\"myt-font6 myt-text3\">\n {{ questionItem?.Group__c }}\n </h3>\n <div *ngIf=\"questionItem.Sub_Text__c != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.Sub_Text__c}}</div>\n <div *ngIf=\"questionItem.Sub_Text__c === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.Sub_Text__c}}</div>\n </div>\n </div>\n </div>\n\n <!-- Question Handling -->\n <div class=\"questiondiv2\">\n <div *ngIf=\"questionItem.Question_Text__c\">\n <p class=\"questionStyle\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </p>\n </div>\n <!-- Title -->\n <!-- <div *ngIf=\"questionItem.Is_Title__c\">\n <div *ngIf=\"questionItem.Type__c != 'Book' && questionItem.Question_No__c!='6' && questionItem.Question_No__c!='9'\"> \n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </h3>\n </div>\n </div> -->\n <!-- HA 31-JAN-24 Removed the unwanted styling class -->\n <!-- <div *ngIf=\"!questionItem.Is_Title__c\" [class]=\"qbItem.isShengel__c ? 'header-style' : 'question-f-size'\">\n <div [innerHTML]=\"getText(questionItem?.Question_Text__c)\" >\n {{ questionItem?.Question_Text__c }}\n </div>\n </div> -->\n\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.Type__c == 'Book'\">\n <div *ngIf=\"questionItem.Question_No__c=='6'\">\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{ questionItem?.Question_Text__c }}\n </h3>\n </div>\n </div> -->\n \n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.Type__c == 'File' \">\n <div *ngIf=\"questionItem.Question_No__c=='9'\">\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </h3>\n </div>\n </div> -->\n </div>\n\n <!-- Additional Info -->\n <!-- The below code can be written effectively nested ngIf for Rich Text & Other onw for Progress Bar -->\n <div *ngIf=\"questionItem.Additional_Rich__c && qbItem.Progress_Bar__c\" >\n <div\n class=\"additional \" [innerHTML]=\"innerhtml\">\n </div>\n </div>\n <div *ngIf=\"questionItem.Additional_Rich__c && !qbItem.Progress_Bar__c\">\n <div class=\"info-alert ques-alert1\">\n <i class=\"fa fa-info fa-3x iposition icolor\" aria-hidden=\"true\"></i>\n <div class=\"infodiv\" [innerHTML]=\"innerhtml\"></div>\n </div>\n </div>\n\n <!-- Dropdown-->\n <div *ngIf=\"dropdownFlag\" >\n <div class=\"dis-flex\">\n <select \n [ngClass]=\"{\n 'dt-line myt-align3 myt-align2 dpDown dropbox down1 myt-dropbox myt-border-r myt-font1': qbItem?.Progress_Bar__c,\n 'custom-select': !qbItem?.Progress_Bar__c\n }\" class=\"mr-sm-2 dd-height dropbox \" id=\"dropdown\" [(ngModel)]=\"inpValue\" (change)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error ? 'red' : inpValue?.length > 0 ? '#fff' : ''\n }}\" style.color=\"{{ questionItem?.error ? 'red' : '' }}\" style=\"margin-left: 21.5rem !important;\">\n <option *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"option\" value=\"{{ opt.Value__c }}\">\n {{ opt.Value__c }}\n </option>\n <!-- HA 20DEC23 For Translation -->\n <option value=\".\" disabled hidden>{{'pleaseMakeChoice' | i18n:i18nService.currentLanguage}}</option>\n </select>\n </div>\n </div>\n\n <!-- Radio -->\n <div *ngIf=\"radioFlag || dataFlag\" class=\"\">\n <div *ngIf=\"this.questionItem.error\" class=\"cond-div2\">\n {{ questionItem?.Error_Message__c }}\n </div>\n <div class=\"dis-flex\">\n <div *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"radio radioOption\" >\n <label class=\"radiocontainer container myt-font4\">{{ opt.Value__c }}\n <input type=\"radio\" [id]=\"opt.Id\" [(ngModel)]=\"inpValue\" name=\"inpValue\" value=\"{{ opt.Value__c }}\"\n (change)=\"optionChange(opt.Value__c)\" />\n<!-- HA 20FEB24 Removed checkmark as it was causing styling issue in Radio -->\n </label>\n </div>\n </div>\n </div>\n\n <!-- Checkbox -->\n <div *ngIf=\"checkboxFlag\" class=\"\">\n <div *ngIf=\"questionItem?.error\" class=\"cond-div2\">\n {{ questionItem?.Error_Message__c }}\n </div>\n <div class=\"checkbox-container\">\n <div *ngFor=\"let item of optionValues\" class=\"checkbox-wrapper\">\n <label class=\"container1\">\n <input type=\"checkbox\" [id]=\"item.Id\" [(ngModel)]=\"item.checked\" (click)=\"clearError()\" />\n <span class=\"checkbox-label\">{{ item.Value__c }}</span>\n </label>\n </div>\n </div>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"textFlag\" class=\"col-md-12 myt-book1\">\n <!-- HA 31-JAN-24 To reduce the margin -->\n <div class=\"col-md-12\" class=\"dis-flex myt-align2\" [class]=\"'col-md-' + questionItem?.Size__c + ' paddingnone'\">\n <input type=\"text\" [(ngModel)]=\"inpValue\" [ngClass]=\"{\n 'boxoutline myt-font1 myt-book1': qbItem?.Progress_Bar__c,\n textBox1: !qbItem?.Progress_Bar__c\n }\" id=\"text-input-id\" required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n <i class=\"fa fa-check check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n\n <!-- Text Area -->\n <div *ngIf=\"taFlag\" class=\"col-md-12\">\n <div class=\"dis-flex\">\n <textarea class=\"ta-input\" id=\"ta-input-id\" [(ngModel)]=\"inpValue\" (click)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : inpValue?.length > 0 && taFocusOut\n ? '#87be1c'\n : ''\n }}\" (focusout)=\"taFocusOut = true\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\"></textarea>\n <i class=\"fa fa-check check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0 && taFocusOut\"></i>\n </div>\n </div>\n\n <!-- CC Number Format -->\n <div *ngIf=\"numberFlag\" class=\"col-md-12\">\n <div class=\"dis-flex\">\n <input type=\"Text\" placeholder=\"0000 0000 0000 0000 0000 0000\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\"\n [(ngModel)]=\"inpValue\" id=\"number-input-id\" (ngModelChange)=\"CCOnChange($event)\" required=\"\" maxlength=\"29\"\n (focus)=\"clearError()\" oninput=\"this.value=this.value.replace(/[^0-9 ]/g,'');\"\n style=\"width:-webkit-fill-available;\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px;\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n <!-- END-->\n\n <!-- AlphaNumeric -->\n <div *ngIf=\"alphanumericFlag\" class=\"col-md-12\"> <!--UI not completed-->\n <div style=\"position:relative;\">\n <!-- HA 20DEC23 For Translation -->\n <input type=text placeholder=\"{{'zeroOfZero' | i18n:i18nService.currentLanguage}}\" style=\"padding:5px 5px 5px 150px;\" id=\"youridhere\"/>\n </div>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\n <div class=\"dis-flex\">\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\" [(ngModel)]=\"inpValue\" id=\"email-input-id\"\n required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n\n <!-- DateTime -->\n <div *ngIf=\"dtFlag\" class=\"col-md-12 paddingZero myt-time1\" >\n <!-- Error Handling -->\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n\n <!-- Date -->\n <div *ngIf=\"dateFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- HA 31-JAN-24 These labels were occuping the empty space when date question comes-->\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label> -->\n <div class=\"dis-flex\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, questionItem)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\">\n </my-date-picker>\n </div>\n </div>\n </div>\n\n <!-- Time -->\n <div *ngIf=\"timeFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label> -->\n <div class=\"dis-flex\">\n <div [ngClass]=\"{'dt-line date-line dt-time': qbItem?.Progress_Bar__c,\n dateandTime: !qbItem?.Progress_Bar__c}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour myt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime showminute myt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem?.X24_Hours__c == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"myt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n <!-- <div [ngClass]=\"{'': qbItem.Progress_Bar__c, 'dateandTime': !qbItem.Progress_Bar__c}\"></div> -->\n </div>\n </div>\n </div>\n </div>\n <i class=\"fa check-icon3\" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div>\n </div>\n\n <!-- Attachment / File -->\n <div *ngIf=\"fileFlag\">\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <div class=\"info-alert\" style.border-color=\"{{ this.questionItem?.error ? 'red' : '' }}\">\n <label class=\"picture-upload\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"fa fa-plus fa-2x picture-upload-child pic-upload icolor\">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n </div>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ allowedFileExtension }}\" (change)=\"uploadFile($event,this.questionItem)\" />\n </div>\n <ul *ngIf=\"\n attachments?.length > 0 &&\n questionItem?.Type__c === 'File' &&\n !qbItem?.Progress_Bar__c\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName}}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n\n <!-- Attachment Progress -->\n <div *ngIf=\"qbItem.Progress_Bar__c\">\n <div *ngFor=\"let attachment of attachments\" class=\"file-uploading-box\">\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"uploading-file-name \">{{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"file-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n \n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"f-Name\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\"> {{ questionItem?.Question_Text__c}}</span>\n <label class=\"file-label \">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/file-upload.png\" class=\"file-icon\"/>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Book -->\n <div *ngIf=\"bookFlag\">\n <div [class]=\"qbItem.isShengel__c ? 'form-group content-box' : 'form-group'\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div [class]=\"qbItem.isShengel__c ? '' : 'myt-align3'\" [class]=\"qbItem.isShengel__c ? 'col-lg-' + ques.Size__c + ' paddingnone' : 'col-md-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.Id\">\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\">\n <span>{{ ques?.Question_Text__c }}</span>\n </div>\n <div class=\"col-md-12 paddingZero myt-dateTimeNew\" *ngIf=\"ques.Type__c === 'Time' || ques.Type__c === 'Date'\">\n <div *ngIf=\"ques.Type__c === 'Date'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label> -->\n <div class=\"dateandtime\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, ques)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\" >\n </my-date-picker>\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.Type__c === 'Time'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label> -->\n <div class=\"dateandtime\">\n <div [ngClass]=\"{'dt-line date-line dt-time': qbItem?.Progress_Bar__c,\n dateandTime: !qbItem?.Progress_Bar__c}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour myt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime showminute myt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem.X24_Hours__c == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"myt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [date]=\"ques.input\" (dateChange)=\"displayDate($event,ques)\"></app-custom-date-picker>\n </div>\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <label>{{ ques.Question_Text__c }}</label>\n <app-custom-input\n [value]=\"ques?.input\"\n [ngClassValue]=\"{\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\n textBox: !qbItem.Progress_Bar__c\n }\"\n [question]=\"ques\" \n [idValue]=\"ques?.Tracking_ID__c\"\n [focusEvent]=\"clearSQError(ques?.Id)\"\n [error]=\"ques?.error\"\n [placeholder]=\"ques?.Question__c\"\n (inputValue)=\"selectedInput($event,ques)\">\n </app-custom-input>\n </div>\n <div *ngIf=\"ques.Type__c === 'Location'\">\n <!-- for pick location -->\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['Api_Key__c']\" [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\n </div>\n <!-- for text area -->\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \" (textareaValueChange)=\"handleTextareaValueChange($event)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.Type__c === 'Email'\">\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\n </div>\n\n <div *ngIf=\"ques.Type__c === 'File'\">\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <label class=\"picture-upload custom-file-upload bgcolor-w\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"\n fa fa-plus fa-2x\n picture-upload-child\n pic-upload\n icolor\n \">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ bookFlagAccept }}\" (change)=\"uploadFile($event,ques)\" />\n </div>\n\n <ul *ngIf=\"\n attachments?.length > 0 &&\n ques.Type__c === 'File' &&\n !qbItem.Progress_Bar__c\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n <div class=\"myt-box\" *ngIf=\"qbItem.Progress_Bar__c\">\n\n <div *ngFor=\"let attachment of attachments\" class=\"file-uploading-box\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />\n <span class=\"uploading-file-name myt-font1 font-weight: normal;\"> {{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"file-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />\n <span class=\"f-Name\">{{ ques?.Question__c }}</span>\n <label class=\"file-label \">\n <span style=\"color: #c5281c;text-decoration:underline\">\n {{'attach' | i18n:i18nService.currentLanguage}}\n </span>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event,ques)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.Type__c === 'Table'\" class=\"\">\n <app-custom-table \n [question]=\"ques\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-table>\n </div>\n\n <!-- Dropdown -->\n <div *ngIf=\"ques.Type__c === 'Dropdown'\" class=\"\">\n <!-- for common dropdown -->\n <!-- HA 20DEC23 For Translation -->\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel__c\"\n [options]=\"ques.Question_Options__r.records\"\n [apiMeta]=\"ques.Sub_Text__c\"\n [id]=\"ques.Name\"\n [selectedValue]=\"ques.input\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques?.Error_Message__c\"\n [error]=\"ques?.error\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-dropdown>\n <app-dropdown-with-flag *ngIf=\"ques.isDependentPicklist && !ques.dropDownOnly\" [certified]=\"ques.certifiedFlag\" [JobPerformerCertificates]=\"ques.certificateList\" (flagDropDownChange)=\"dependentChange($event)\"></app-dropdown-with-flag>\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div> \n </div>\n </div>\n </div>\n </div>\n\n <!--List start-->\n <div *ngIf=\"listFlag\">\n <div class=\"form-group\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div class=\"myt-align3\" [class]=\"'col-md-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of getLocalSubQuestions(questionItem.Id);let i = index\">\n <div>\n <span class=\"dis-flex myt-font3 myt-font7\">{{ ques?.Question__c }}</span>\n </div>\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\n 'dis-flex dt-line date-line bookText boxoutline myt-font1': qbItem.Progress_Bar__c,\n textBox: !qbItem.Progress_Bar__c\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n </div>\n </div>\n <div class=\"\" *ngIf=\"addFlag\">\n <!-- HA 20DEC23 For Translation -->\n <button (click)=\"Add(getLocalSubQuestions(questionItem.Id))\" class=\"btn\"><i class=\"fa fa-plus\" ></i>{{'add' | i18n:i18nService.currentLanguage}}</button>\n </div>\n </div>\n </div>\n </div>\n <!--List End-->\n\n <!-- Actions -->\n <!-- VD button condition removed-->\n <div class=\"flexer\">\n <!-- Backward / Back -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"backbutton\" [ngClass]=\"{ 'col-md-6': !qbItem.Progress_Bar__c }\"\n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\" *ngIf=\"qbItem.Back__c\">\n <div [ngClass]=\"{}\">\n <button [ngClass]=\"{\n 'left-bt': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color':\n !qbItem.Progress_Bar__c\n }\" (click)=\"handleBackClick()\">\n {{ qbItem?.Back__c }}\n </button>\n </div>\n </div>\n\n <!-- Forward / Next -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div [ngClass]=\"{ 'col-md-6': !qbItem.Progress_Bar__c }\" *ngIf=\"qbItem.Next__c\">\n <div>\n <button [ngClass]=\"{\n 'rusty': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color':\n !qbItem.Progress_Bar__c\n }\" (click)=\"handleNextClick()\">\n {{ qbItem.Next__c }}\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<!-- Summary -->\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\n 'col-md-12':!qbItem.Progress_Bar__c\n }\">\n <h1 class=\"header1 summarypadd\" >{{ qbItem.SubTitle__c }}</h1> \n <div id=\"progress2\" *ngIf=\"!qbItem.Progress_Bar__c && this.abItem.Status__c != 'Completed' \">\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\n <div *ngFor=\"let qa of summary\">\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\n <div [ngClass]=\"{ summary: !qbItem.Progress_Bar__c }\">\n <div *ngIf=\"!qbItem.Edit__c\"\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\n <a [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\n </div>\n <div *ngIf=\"qbItem.Edit__c\"\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\n <div [ngClass]=\"{ 'question': this.abItem.Status__c === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div>\n <div class=\"answer\" >\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <!-- HA 02FEB24 Displaying the in summary for book type -->\n <div *ngIf=\"qa.qTyp == 'Book'\">\n <div *ngFor=\"let val of qa.myVal\">\n <p>{{ val.Question_Text__c }}: <span>{{ val.input }}</span></p>\n </div>\n </div>\n <!-- HA 02FEB24 Displaying the value for direct question -->\n <div *ngIf=\"qa.qTyp != 'File' && qa.qTyp != 'Book'\">{{ qa.Question_Text__c }}: <span></span>{{ qa.ansValue }}</div>\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"icon-edit\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"this.abItem.Status__c === 'Completed'\" class=\"col-lg-12\" style=\"text-align: center;\">\n <h2>{{this.qbItem.Summary_Text__c}}</h2>\n <p>{{this.qbItem.Summary_Sub_Text__c}}</p>\n </div>\n\n <div id=\"progress2\" *ngIf=\"qbItem.Progress_Bar__c \">\n <div [ngClass]=\"{'bgColor summary-top' : qbItem.Progress_Bar__c }\" >\n <div id=\"progress-summary\" *ngIf=\"qbItem.Progress_Bar__c\">\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress>\n \n <div *ngIf=\"qbItem.Summary_Text__c && qbItem.Progress_Bar__c\" \n [ngClass]=\"{ summaryTitle: qbItem.Progress_Bar__c }\">\n <h3 class=\"subTitle\" >{{ qbItem.Summary_Text__c }}</h3>\n <div *ngIf=\"abItem.Status__c != 'Completed'\" class=\"subTitle1\" >{{ qbItem.Summary_Sub_Text__c}}</div>\n </div>\n </div>\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <h3 class=\"summary-h\">\n {{ qbItem.Summary_Text__c }}\n </h3>\n </div>\n </div>\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\n <div class=\"summary-groupText myt-font2\">\n <!-- <p>Informe de da\u00F1o</p> -->\n </div>\n <div *ngFor=\"let qa of summary\" >\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\n <div class=\"summary\">\n <!-- <div *ngIf=\"!qbItem.Edit__c\"\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\n <a [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\n </div>\n <div *ngIf=\"qbItem.Edit__c\"\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.Status__c === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div> -->\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"icon-edit\" />\n </button>\n </div>\n \n <div class=\"answer\">\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <div *ngIf=\"qa.qTyp != 'File'\">\n {{ qa.ansValue }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flexer1\" *ngIf=\"abItem\">\n <div class=\"\" *ngIf=\"abItem.Status__c == 'Completed' && qbItem.Cancel__c\">\n <div class=\"col-md-12\">\n <button [ngClass]=\"{'btn-text': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\"\n (click)=\"handleCancelClick()\">\n {{ qbItem.Cancel__c }}\n </button>\n </div>\n </div>\n </div> -->\n\n <!-- Group Actions -->\n <div class=\"align-edit-submit\" *ngIf=\"abItem.Status__c != 'Completed'\">\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"col-md-6\" *ngIf=\"qbItem.Submit__c\">\n <button [ngClass]=\"{ 'btn-text2': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c }\" \n (click)=\"handleSubmitClick()\">\n {{ qbItem.Submit__c }}\n </button>\n </div>\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!-- <div class=\"col-md-6\" *ngIf=\"qbItem.Edit__c\">\n <button [ngClass]=\"{'grey': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\" \n (click)=\"handleBackClickNew()\">\n {{ qbItem.Edit__c }}\n </button>\n </div> -->\n </div>\n\n</div>", styles: [".rusty{width:235px;background-color:#cd2810;color:#fff;text-align:center;font-size:24px;height:60px;margin-left:0%;margin-top:11%;cursor:pointer}.edit{background-color:#dedddd;border:none;color:#c5281c;text-decoration:underline;margin-left:50%;font-size:16px;vertical-align:super;font-weight:700}.icon-edit{width:15px;height:18px;margin:0 6px 1px -13%}.icon-edit1,.icon-edit-summary{width:29px;height:28px}.questiondiv1{padding-left:25px;padding-right:25px;padding-top:3%}.questiondiv2{padding-top:0;padding-bottom:20px;padding-left:11px}.align-edit-submit{display:flex;flex-direction:column;align-items:center}.questiondiv2{padding-left:0!important;padding-bottom:0!important}@media screen and (min-width: 689px){#progress,#progress-summary{padding-left:12px}.backicon{display:none}.dt-time{background-position:98%!important}}.bgColor{text-align:center;background-color:#dedddd}.questionalign{text-align:center;padding-right:4%;margin-bottom:4px;margin-top:2rem;color:#560d05}.questionStyle{margin-bottom:1.5rem}.largeTitle{padding-left:16px;padding-top:12px}.question-f-size{font-size:.7rem}.non{background-color:#dedddd}.circle{margin-left:25px}.titlebar{padding-left:10%;padding-top:1%;padding-right:10%}.infodiv{padding-left:2rem;overflow:hidden}.info-alert{border:1px solid #e6e6e6;border-radius:5px;padding:.5em;margin-left:15px;margin-right:15px;margin-bottom:1rem;display:flex}.addtional-info{margin-left:-33px;margin-top:-21px;font-size:16px;font-weight:400;font-stretch:normal;font-style:normal;color:#6f7072;font-family:Helvetica}.ques-alert1{margin-bottom:1rem;display:flex}.iposition{margin-left:3rem}.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{position:relative;padding:20px;float:center;width:100%}.col-md-12{padding:0!important}.nxt-btn{border-radius:.3rem;font-size:1.25rem;line-height:1.5;padding:.5rem 1rem;width:100%;cursor:pointer;outline:0}.cond-div2{color:red;font-weight:700;padding-bottom:3%}.radiotext{margin-top:-30px}.radiocontainer{display:flex;flex-direction:row-reverse;border:1px solid none;border-radius:.3em;padding:0;align-items:center;text-align:center;cursor:pointer;font-family:Rubik,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;color:#a3a2a2}.radioOption{display:flex;align-content:flex-start;margin-top:-16px;width:6%}.myt-time{width:-moz-fit-content!important;width:fit-content!important;background-image:none;background:#dedddd;margin:0;padding:0;border:none;font-size:15px;letter-spacing:1px}.showminute{padding-left:5px;margin-top:0%}.myt-time1{margin-top:-32px;margin-left:-15px}.myt-dateTimeNew{margin-left:-14px}.myt-hour{width:-moz-fit-content;width:fit-content}.date-time{padding:0;margin:0;text-align:left}.dateandTime{border:1px solid #d2d4d6;position:relative;display:flex;border-radius:2px;background-image:url(https://dynamic-css1.s3.ap-south-1.amazonaws.com/External+css/time.svg);background-size:25px;background-repeat:no-repeat;background-position:99% center;background-color:#fff;height:37px}.date-line{border-bottom:1px solid #fff}.dt-time{width:57%;margin-left:2.3%;text-align:left;background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/icon-clock%402x.png)!important;background-size:25px!important;background-repeat:no-repeat!important;background:#dedddd}.date-picker{width:57%;margin-left:2.5%;height:44px;border-radius:5px}.datetime:focus{border:none;box-shadow:none}#meridiem{margin-top:-2px;border:hidden}.dis-flex{display:flex;justify-content:center}.textBox{width:100%;height:36px}.textBox1{width:100%;height:36px;margin-left:-17px}.option{color:#767676}.paddingnone{padding-bottom:0%}.paddingZero{padding:0}.summary-h{text-align:left;padding-bottom:15px}.summary{display:flex;flex-direction:column;align-items:flex-start;border-bottom:2px solid #fff}.asum{color:#6f7072;margin-top:5%;padding-left:3%}.question{padding:10px;font-size:14px;color:#007bff}.question1{margin-left:14rem;background:#dedddd;color:#560d05;font-size:15px;padding-bottom:20px;text-align:left}.answer{display:flex;align-items:baseline;padding:5px 5px 10px;font-size:14px;font-weight:400;word-wrap:break-word;width:97%;justify-content:space-between}.answer1{max-width:55%;margin-left:auto;margin-right:auto;color:#a3a2a2;margin-top:0%;padding-bottom:0;font-size:14px;font-weight:400;word-wrap:break-word;text-align:left;background:#dedddd;border-bottom:1px solid #fff}.myt-font{font-size:20px}.myt-font1{width:16rem;font-size:14px;font-weight:400}.myt-font2{font-size:18px}.myt-font3,.myt-font4{font-size:14px}.myt-font5{margin-top:-18px;font-weight:400;font-size:14px;color:#560d05}.myt-font6{font-size:20px;font-weight:700;color:#c5281c;text-align:center}.myt-font10{font-weight:400;font-size:14px;color:#560d05;margin-top:10px}.myt-font7{display:flex;justify-content:flex-start;padding-left:20.5%;font-weight:100;color:#560d05}.myt-font8{font-weight:400}.dpDown:focus-visible{outline:none}.summaryTitle{padding-left:0%;padding-top:4%}.summary-groupText{width:55%;margin:auto auto -2%;text-align:left;font-weight:700;padding-top:0%;padding-bottom:0%;background-color:#dedddd;color:#c5281c}.sum-ques{width:55%;margin:auto}.sum-ques1{width:59%;margin:auto}.header-style{padding:15px!important;background:#F8F8F8;color:#898989!important;border:1px solid #e8e8e8;border-top-left-radius:5px;border-top-right-radius:5px;margin-left:0!important;justify-content:left!important;font-size:15px!important}.file-upload-btn{display:none;border-bottom:groove}.file-upload-box{max-width:45%;margin-left:29.5%;height:auto;padding:16px;display:flex;border:2px;border-bottom:1px solid #fff;background-color:#dedddd;justify-content:space-between;color:#d8d8d8}.file-label{cursor:pointer;color:#c5281c;text-decoration:underline}.file-uploading-box{font-size:14px;font-weight:400;max-width:45%;margin-left:29.5%;height:56px;padding:16px;display:flex;border:2px;background-color:#dedddd;justify-content:space-between;margin-bottom:0;color:#d8d8d8}.uploading-file-name{color:#6f7072}.deleteIcon{cursor:pointer;height:24px}.file-icon{max-width:24px;height:26px}.picture-upload{height:200px;width:200px;position:relative;border:1px solid #ccc;display:flex;padding:6px 12px;cursor:pointer;background-color:#fff;align-items:center}.colon{line-height:42px;padding:0;margin-top:10%;color:#6f7072}.colon1{display:contents}.subTitle{color:#c5281c;font-weight:600;margin-top:-3%}.subTitle1{color:#560d05;font-size:14px;font-weight:500}.check-icon{color:#87be1c;margin-left:-2rem;z-index:1;padding:5px;margin-top:.4rem}.check-icon2{color:#87be1c;margin-left:-4rem;z-index:1;margin-top:.6rem;line-height:3}.check-icon3{color:#87be1c;margin-left:-4rem;z-index:1;margin-top:3rem}.align-l{text-align:left;padding:1% 2% 2%;margin-bottom:-5%;margin-top:-1%}.attach-ulist{list-style-type:none;margin-left:0;margin-bottom:.7rem}.attach-list{float:right;cursor:pointer;padding:0}.icolor{color:#99b5ce}.picture-upload-child{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tspan:nth-child(1){font-size:25px;font-weight:700}.tspan:nth-child(2){display:none}.pic-upload{position:absolute;top:15%;left:85%;transform:translate(-50%,-50%)}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-primary:hover{color:#fff}.btn-primary:focus,.btn-primary.focus{color:#fff;box-shadow:0 0 0 .2rem #268fff80}.btn-primary.disabled,.btn-primary:disabled{color:#fff}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #268fff80}.btn-back-color{display:block;width:100%;padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;text-align:center;border-radius:.3rem;margin:0}.fa-plus:hover{color:#87be1c}.fa-plus{color:#99b5ce}.btn-primary{border-color:#007bff}.ques-Title{text-align:left;font-size:24px}.grey{width:38%;height:56px;margin:0px 0px 0px 0rem;padding:14px 0 17px;background-color:#cd2810;color:#fff;font-size:24px}.btn-text{width:330px;font-size:24px;background-color:#cd2810;color:#fff;height:60px;margin-left:auto;margin-top:0;cursor:pointer;border-radius:40px}.btn-text2{width:21rem;font-size:24px;background-color:#cd2810;border:none;color:#fff;height:60px;margin-left:17rem;margin-right:17rem;margin-top:10px;cursor:pointer;border-radius:40px}.flexer{max-width:100%;width:100%;display:flex;justify-content:center}.flexer1{max-width:100%;width:100%;display:flex;justify-content:center;margin-top:32px}.btn-r{right:0rem}.down{margin-left:0;width:57%}.down1{width:16rem;margin-left:0rem;background-color:#dedddd}.down2{margin-top:0%;padding-left:11px}.dropbox{margin-left:21.5rem}.myt-dropbox{background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/down-red.png);background-origin:content-box;background-position:right -.9rem center;background-repeat:no-repeat;background-size:35px 33px;padding-right:1.35rem;background-color:#dedddd}.boxoutline{outline:transparent;background-color:#dedddd}.left-bt{width:238px;background-color:#cd2810;color:#fff;padding:0;text-align:center;font-size:24px;cursor:pointer;height:60px;margin-top:125px;margin-bottom:4rem;margin-left:-234px}.townArea{text-align:left;height:43px;padding-left:15px}.townArea:hover{background-color:#9e9e9e2e}.listFlow{font-weight:400;color:#767676;z-index:2;position:absolute;background:#dedddd;box-shadow:0 2px 5px #00000040}.myt-radio input[type=radio]:checked:after{background-color:#c5281c}.full-summary{margin-top:4%}.container-radio input{display:none;position:absolute;opacity:0;cursor:pointer}.f-Name{color:#6f7072;font-size:14px;font-weight:400;word-break:break-word}.summary-top{margin-top:4%}.myt-border-r{border-top:none;border-left:none;border-right:none;border-radius:0}.myt-align{margin-left:4%;line-height:2}.myt-align1{margin-left:-29px}.myt-align2{margin-left:-15px}.myt-align3{width:100%}.myt-book1{margin-top:-20px}.colorf{color:#555}.bookText{width:57%;margin-left:21.5%;background-color:#dedddd}.book{width:32.6%;margin-left:34%;background-color:#dedddd}.summary-completed{padding-left:2%;margin-top:20px}.town{margin:0;background-color:#dedddd}.town-drop{margin:auto;width:57%}.questiondiv1.padd-bottom{padding-bottom:6rem!important;padding-top:2rem!important}@media (max-width: 1090px){.icon-edit{margin:0 6px -3px -13%!important}}@media (max-width: 768px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:center}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}}@media (max-width: 768px){.radioOption{width:8%}.grey{width:78%;margin-left:17.5rem;height:68px!important;font-size:20px!important;font-weight:700!important}.answer{margin-top:-4%!important}}@media screen and (max-width: 672px){.header1{font-size:23px!important}.summarypadd{padding-top:50px!important}.answer{margin-top:-5%!important}.icon-edit{margin:0 6px 0 -13%!important}.subTitle1{width:95%!important}.additional{margin-left:6%!important;padding:0!important}.container1{margin-left:-35%}.town-drop{margin:auto;width:100%!important}.dis-flex{display:flex;justify-content:left}.check{display:inherit;width:-moz-max-content;width:max-content;margin-left:6%}.rusty{width:28rem;margin-left:0rem;height:68px!important;font-size:20px!important;font-weight:700!important;margin-bottom:37px}.left-bt{width:28rem;margin-left:-28rem;height:68px!important;font-size:20px!important;font-weight:700!important}.questionalign{text-align:center}.questionalign{margin-top:1rem!important}.largeTitle{padding-left:0!important}.myt-align{margin-left:0%!important}.myt-text1{margin-top:-22px}.myt-text2{margin-top:-20px}.myt-text3{margin-bottom:21px}.date-picker,.dt-time{width:100%}.showminute{margin-top:-.5%}.radioOption{width:auto;margin-top:0;margin-left:7%;margin-right:-3%}.myt-font7{padding-left:0rem;margin-left:-1.5%}.down,.bookText,.book{width:100%;margin-left:0rem}.town{margin-left:0rem;width:100%}.file-upload-box,.file-uploading-box{max-width:85%;margin-left:20px}.question{margin-left:0rem}.btn-text2{width:28rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}.grey{width:28rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}}@media screen and (max-width: 580px){.rusty{width:27rem;height:68px!important;font-size:20px!important;font-weight:700!important}.left-bt{width:27rem;margin-left:-27rem;height:68px!important;font-size:20px!important;font-weight:700!important}.container1{margin-left:-24%}.showminute{margin-top:.5%}.bookText,.book{width:100%;margin-left:0rem}.btn-text2{width:27rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}.grey{width:27rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.btn-text{width:27rem;height:68px!important;font-size:20px!important;font-weight:700!important}}@media screen and (max-width: 672px){.questiondiv1{padding:0}}@media screen and (max-width: 525px){.rusty{width:26rem;height:68px!important;font-size:20px!important;font-weight:700!important}.container1{margin-left:-9%}.left-bt{width:26rem;margin-left:-26rem;height:68px!important;font-size:20px!important;font-weight:700!important}.dateandtime{padding-left:10px!important}}@media screen and (max-width: 480px){.answer{margin-top:-7%!important}.icon-edit{margin:0 6px 4px -35%!important}.rusty{width:25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.left-bt{width:25rem;margin-left:-25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.file-upload-box,.file-uploading-box{max-width:89%}}@media screen and (max-width: 420px){.answer{margin-top:-9%!important}.icon-edit{margin:-9px 1px 4px 4%!important}.rusty,.btn-text{width:21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.left-bt{width:21rem;margin-left:-21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.container1{margin-left:0%}.file-upload-box,.file-uploading-box{max-width:100%}.myt-dateTimeNew{margin-left:-10px!important}.dateandtime{padding-left:0!important}.dt-time{padding-left:.8%!important}.myt-font7{padding-left:0rem;margin-left:-3.5%}.grey{width:21rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.btn-text2{width:21rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}}@media screen and (max-width: 368px){.icon-edit{margin:0 6px 3px 35%!important}.icon-editios{margin-bottom:4px}.rusty{width:19rem;height:68px!important;font-size:20px!important;font-weight:700!important}.left-bt{width:19rem;margin-left:-19rem;height:68px!important;font-size:20px!important;font-weight:700!important}.container1{margin-left:15%}.radiotext{margin-top:-45px}.file-upload-box,.file-uploading-box{max-width:100%}.grey{width:19rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.btn-text2{width:19rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}.btn-text{width:19rem;height:68px!important;font-size:20px!important;font-weight:700!important}}.mydp .selection{padding:0!important}.text-border{border-top:none;border-left:none;border-right:none;border-radius:0;border-bottom:1px solid #fff!important;background-color:#dedddd}.additional{display:flex;font-size:20px;text-align:left;font-weight:200;margin-left:4%;justify-content:center;color:#3e3e3c;padding:0 30%}.check{display:block}.header2{font-size:20px;font-weight:300;text-align:center;font-stretch:normal;font-style:normal;line-height:1.5;letter-spacing:normal;color:#560d05;max-width:1100px;margin:auto;padding-bottom:10px}.header1{font-size:32px;font-weight:700;text-align:center;font-stretch:normal;font-style:normal;line-height:1.25;letter-spacing:normal;color:#dd2e13}.container1{display:inline-grid;position:relative;cursor:pointer;font-size:20px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.bottomspace1{padding-bottom:14px!important}.myt-321{font-size:20px;font-weight:700;color:#c5281c;margin-top:11px}.myt-345{display:none}.panel{-moz-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);-webkit-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);border-radius:0;border:none;box-shadow:0 1px 2px #0000001a;margin-bottom:20px}.panel .panel-body{padding:20px}.panel-heading{border-radius:0;border:none!important;padding:10px 20px}.panel-default>.panel-heading{background-color:#fafafa;border-bottom:none;color:#2a323c;border:1px solid #e3e3e3!important}.panel-title{margin-bottom:0;margin-top:0;font-family:Rubik,sans-serif;font-weight:400}.panel-footer{background:#fafafa;border-top:0}.panel-color .panel-title{color:#fff}.panel-primary>.panel-heading{background-color:#03a9f4}.panel-success>.panel-heading{background-color:#01ba9a}.panel-info>.panel-heading{background-color:#18bae2}.panel-warning>.panel-heading{background-color:#f8ca4e}.panel-danger>.panel-heading{background-color:#f62f37}.panel-dark>.panel-heading{background-color:#2a323c;color:#fff}.panel-fill{border-radius:3px}.panel-fill .panel-heading{background-color:transparent;color:#fff;border-bottom:1px solid rgba(255,255,255,.5)!important}.panel-fill .panel-body{color:#ffffffd9}.panel-fill.panel-default .panel-body{color:#666}.panel-fill.panel-default .panel-heading{background-color:transparent;color:#333;border-bottom:1px solid rgba(0,0,0,.1)!important}.panel-fill.panel-primary{background-color:#03a9f4}.panel-fill.panel-success{background-color:#01ba9a}.panel-fill.panel-info{background-color:#18bae2}.panel-fill.panel-warning{background-color:#f8ca4e}.panel-fill.panel-danger{background-color:#f62f37}.panel-fill.panel-dark{background-color:#2a323c}.panel-group .panel .panel-heading a[data-toggle=collapse].collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading .accordion-toggle.collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading a[data-toggle=collapse]{display:block}.panel-group .panel .panel-heading a[data-toggle=collapse]:before{content:\"\\f0d8\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading .accordion-toggle{display:block}.panel-group .panel .panel-heading .accordion-toggle:before{content:\"\\f068\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading+.panel-collapse .panel-body{border-top:none!important;border:1px solid #e3e3e3}.panel-group .panel-heading{padding:12px 26px}.panel-group.panel-group-joined .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-group-joined .panel-group .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-body label{color:#9a9a9a;font-size:14px;font-weight:400;display:inline-block;max-width:100%;margin-bottom:5px}.font-size{font-size:14px}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit;text-decoration:none}.panel-title{font-size:16px}@media (min-width: 300px) and (max-width: 399px){.selbtngroup{padding-left:1.3%!important}}@media (min-width: 400px) and (max-width: 480px){.selbtngroup{padding-left:.9%!important}}@media (min-width: 481px) and (max-width: 580px){.selbtngroup{padding-left:.2%!important}}@media screen and (min-width: 871px){.selbtngroup{padding-right:4px!important}}@media screen and (max-width: 689px){.answer{max-width:95%!important;margin-left:0!important;margin-right:15px}#progress2{margin-left:8.5px!important}.edit{margin-left:85%!important;margin-bottom:0%!important}.sum-ques,.sum-ques1{width:100%!important;margin:auto}.summary-completed{padding-left:0!important;padding-bottom:17px;margin-top:9px}.summary-top{margin-top:10%}.subTitle1{font-size:18px!important;line-height:1.38!important;text-align:center;letter-spacing:normal;color:#560d05!important;font-weight:300}.backbutton{display:none}.rusty{margin-bottom:37px}}@media screen and (min-width: 1024px){.ES-style{position:absolute;left:7px;font-size:.9rem;color:#555;top:9px}}@media screen and (max-width: 1024px){.ES-style{position:absolute;left:.6rem;font-size:.95rem;color:#555;top:.57rem}}@media screen and (max-width: 689px){.app-back1{line-height:1.5;cursor:pointer;width:100%;max-width:1200px;margin-right:auto;margin-left:-10px;display:flex;font-family:Helvetica;font-size:21px;font-weight:700;align-items:center;font-stretch:normal;font-style:normal;letter-spacing:normal;color:#dd2e13;z-index:1;position:fixed;background-color:#dedddd;border-radius:0!important;margin-top:-12px;padding-top:.8rem}.header1{padding-top:75px}.dt-time{background-position:100%!important}}.summary-volver{display:none}.checkbox-container{display:flex;flex-direction:column}.checkbox-wrapper{display:flex;align-items:center;margin-bottom:10px}.container1{display:flex;align-items:center}.container1 input[type=checkbox]{margin-right:10px}.checkbox-label{margin-left:10px}@media ((min-width: 1200px)){.form-row{display:flex;flex-wrap:wrap}}\n"] }]
|
|
2262
|
+
args: [{ selector: "lib-questionnaire", encapsulation: ViewEncapsulation.None, providers: [ChangeService], template: "<!-- Spinner -->\n<ngx-spinner [name]=\"spinnerName\" [type]=\"spinnerType\"></ngx-spinner>\n<!-- custom loader -->\n<app-loader></app-loader>\n<!-- Back Processing -->\n<!-- <div *ngIf=\"backicon == false\" >\n <div class=\"backicon\" >\n <button (click)=\"handleBackClick()\" [class]=\" abItem?.Status__c == 'Completed' ? 'summary-volver':'app-back1'\">\n <img class=\"icon-arrow-back\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-arrow-back.png\" alt=\"Scroll down\"> {{ qbItem?.Back__c }}\n </button>\n </div>\n</div> -->\n\n<!-- Question Hanlding -->\n<div *ngIf=\"questionItem\" [class]=\"qbItem.isShengel__c ? 'questiondiv1' : 'questiondiv1 padd-bottom'\">\n <!-- Progress Bar & Title -->\n <div *ngIf=\"questionItem.Title__c\">\n <h1>{{ questionItem?.Title__c }}</h1>\n <div>{{ questionItem?.SubTitle__c }}</div>\n </div>\n\n <!-- Progress & Grouping -->\n <div>\n <!-- Pie Chart Progress -->\n <div [ngClass]=\"{ bgColor: qbItem?.Progress_Bar__c }\">\n <div id=\"nxt-progress\" *ngIf=\"qbItem?.Progress_Bar__c\">\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress>\n </div>\n </div>\n\n <!-- Show the Group/Module related to the Progress -->\n <div *ngIf=\"questionItem.Group__c && qbItem.Progress_Bar__c\"\n [ngClass]=\"{ questionalign: !qbItem?.Progress_Bar__c }\">\n <div class=\"nxt-largeTitle\">\n <h3 class=\"myt-font6 myt-text3\">\n {{ questionItem?.Group__c }}\n </h3>\n <div *ngIf=\"questionItem.Sub_Text__c != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.Sub_Text__c}}</div>\n <div *ngIf=\"questionItem.Sub_Text__c === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.Sub_Text__c}}</div>\n </div>\n </div>\n </div>\n\n <!-- Question Handling -->\n <div>\n <div *ngIf=\"questionItem.Question_Text__c\">\n <p class=\"nxt-label\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </p>\n </div>\n <!-- Title -->\n <!-- <div *ngIf=\"questionItem.Is_Title__c\">\n <div *ngIf=\"questionItem.Type__c != 'Book' && questionItem.Question_No__c!='6' && questionItem.Question_No__c!='9'\"> \n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </h3>\n </div>\n </div> -->\n <!-- HA 31-JAN-24 Removed the unwanted styling class -->\n <!-- <div *ngIf=\"!questionItem.Is_Title__c\" [class]=\"qbItem.isShengel__c ? 'header-style' : 'question-f-size'\">\n <div [innerHTML]=\"getText(questionItem?.Question_Text__c)\" >\n {{ questionItem?.Question_Text__c }}\n </div>\n </div> -->\n\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.Type__c == 'Book'\">\n <div *ngIf=\"questionItem.Question_No__c=='6'\">\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{ questionItem?.Question_Text__c }}\n </h3>\n </div>\n </div> -->\n \n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.Type__c == 'File' \">\n <div *ngIf=\"questionItem.Question_No__c=='9'\">\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\">\n {{questionItem?.Question_Text__c}}\n </h3>\n </div>\n </div> -->\n </div>\n\n <!-- Additional Info -->\n <!-- The below code can be written effectively nested ngIf for Rich Text & Other onw for Progress Bar -->\n <div *ngIf=\"questionItem.Additional_Rich__c && qbItem.Progress_Bar__c\" >\n <div\n class=\"nxt-additional \" [innerHTML]=\"innerhtml\">\n </div>\n </div>\n <div *ngIf=\"questionItem.Additional_Rich__c && !qbItem.Progress_Bar__c\">\n <div class=\"info-alert ques-alert1\">\n <i class=\"fa fa-info fa-3x iposition icolor\" aria-hidden=\"true\"></i>\n <div class=\"infodiv\" [innerHTML]=\"innerhtml\"></div>\n </div>\n </div>\n\n <!-- Dropdown-->\n <div *ngIf=\"dropdownFlag\" >\n <div class=\"nxt-dis-flex\">\n <select class=\"nxtdropdown\"\n [ngClass]=\"{\n 'dt-line nxt-myt-align3 nxt-myt-align2 dpDown nxt-dropbox down1 myt-dropbox myt-border-r myt-font1': qbItem?.Progress_Bar__c,\n 'custom-select': !qbItem?.Progress_Bar__c\n }\" class=\"mr-sm-2 dd-height nxt-dropbox \" id=\"dropdown\" [(ngModel)]=\"inpValue\" (change)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error ? 'red' : inpValue?.length > 0 ? '#fff' : ''\n }}\" style.color=\"{{ questionItem?.error ? 'red' : '' }}\">\n <option *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"option\" value=\"{{ opt.Value__c }}\">\n {{ opt.Value__c }}\n </option>\n <!-- HA 20DEC23 For Translation -->\n <option value=\".\" disabled hidden>{{'pleaseMakeChoice' | i18n:i18nService.currentLanguage}}</option>\n </select>\n </div>\n </div>\n\n <!--VD Radio update -->\n <div *ngIf=\"radioFlag || dataFlag\" class=\"\">\n <div class=\"nxt-custom-radio-container\">\n <div *ngFor=\"let opt of questionItem.Question_Options__r.records\" \n [class]=\" this.questionItem.error ? 'nxt-custom-radio-option invalid' : 'nxt-custom-radio-option'\">\n <input\n type=\"radio\"\n [id]=\"opt.Value__c\"\n [(ngModel)]=\"inpValue\"\n name=\"inpValue\"\n [value]=\"opt.Value__c\"\n (change)=\"optionChange(opt.Value__c)\"\n />\n <label class=\"nxt-radio-label\" [for]=\"opt.Value__c\"> {{ opt.Value__c }}</label>\n </div>\n <span *ngIf=\"this.questionItem.error\" class=\"nxt-error-msg\"> {{ questionItem?.Error_Message__c }}</span>\n </div>\n\n <!-- <div class=\"nxt-dis-flex\">\n <div *ngFor=\"let opt of questionItem.Question_Options__r.records\" class=\"radio nxt-radioOption\">\n <label class=\"nxt-radiocontainer container myt-font4\">\n <input type=\"radio\" [id]=\"opt.Id\" [(ngModel)]=\"inpValue\" name=\"inpValue\" [value]=\"opt.Value__c\"\n (change)=\"optionChange(opt.Value__c)\" />\n {{ opt.Value__c }}\n </label>\n </div>\n </div> -->\n </div> \n <!-- Checkbox -->\n <div *ngIf=\"checkboxFlag\" class=\"\">\n <div *ngIf=\"questionItem?.error\" class=\"cond-div2\">\n {{ questionItem?.Error_Message__c }}\n </div>\n <div class=\"nxt-checkbox-container\">\n <div *ngFor=\"let item of optionValues\" class=\"nxt-checkbox-wrapper\">\n <label class=\"nxt-container1\">\n <input type=\"nxt-checkbox\" [id]=\"item.Id\" [(ngModel)]=\"item.checked\" (click)=\"clearError()\" />\n <span class=\"nxt-checkbox-label\">{{ item.Value__c }}</span>\n </label>\n </div>\n </div>\n </div>\n\n <!-- Text -->\n <div *ngIf=\"textFlag\">\n <!-- HA 31-JAN-24 To reduce the margin -->\n <div [class]=\"'col-md-' + questionItem?.Size__c + ' paddingnone'\">\n <input class=\"nxt-input\" type=\"text\" [(ngModel)]=\"inpValue\" \n id=\"text-input-id\" required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : ''\n }}\" oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0\"></i> -->\n </div>\n </div>\n\n <!-- Text Area -->\n <div *ngIf=\"taFlag\" >\n <div>\n <textarea class=\"nxt-input nxt-text-area\" id=\"ta-input-id\" [(ngModel)]=\"inpValue\" (click)=\"clearError()\" style.border-color=\"{{\n this.questionItem?.error\n ? 'red'\n : inpValue?.length > 0 && taFocusOut\n ? '#87be1c'\n : ''\n }}\" (focusout)=\"taFocusOut = true\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\"></textarea>\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0 && taFocusOut\" style=\"display: flex; justify-content: flex-end;\"></i> -->\n </div>\n </div>\n\n <!-- CC Number Format -->\n <div *ngIf=\"numberFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"Text\" placeholder=\"0000 0000 0000 0000 0000 0000\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\"\n [(ngModel)]=\"inpValue\" id=\"number-input-id\" (ngModelChange)=\"CCOnChange($event)\" required=\"\" maxlength=\"29\"\n (focus)=\"clearError()\" oninput=\"this.value=this.value.replace(/[^0-9 ]/g,'');\"\n style=\"width:-webkit-fill-available;\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px;\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n <!-- END-->\n\n <!-- AlphaNumeric -->\n <div *ngIf=\"alphanumericFlag\" class=\"col-md-12\"> <!--UI not completed-->\n <div style=\"position:relative;\">\n <!-- HA 20DEC23 For Translation -->\n <input type=text placeholder=\"{{'zeroOfZero' | i18n:i18nService.currentLanguage}}\" style=\"padding:5px 5px 5px 150px;\" id=\"youridhere\"/>\n </div>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.Progress_Bar__c }\" [(ngModel)]=\"inpValue\" id=\"email-input-id\"\n required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\n this.questionItem.error\n ? 'red'\n : inpValue?.length > 0\n ? '#87be1c'\n : ''\n }}\" />\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px\"\n *ngIf=\"inpValue?.length > 0\"></i>\n </div>\n </div>\n\n <!-- DateTime -->\n <div *ngIf=\"dtFlag\" class=\"col-md-12 paddingZero nxtmyt-time1\" >\n <!-- Error Handling -->\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n\n <!-- Date -->\n <div *ngIf=\"dateFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- HA 31-JAN-24 These labels were occuping the empty space when date question comes-->\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label> -->\n <div class=\"nxt-dis-flex\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, questionItem)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\">\n </my-date-picker>\n </div>\n </div>\n </div>\n\n <!-- Time -->\n <div *ngIf=\"timeFlag\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label> -->\n <div class=\"nxt-dis-flex\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.Progress_Bar__c,\n dateandTime: !qbItem?.Progress_Bar__c}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem?.X24_Hours__c == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n <!-- <div [ngClass]=\"{'': qbItem.Progress_Bar__c, 'dateandTime': !qbItem.Progress_Bar__c}\"></div> -->\n </div>\n </div>\n </div>\n </div>\n <i class=\"fa check-icon3\" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div>\n </div>\n\n <!-- Attachment / File -->\n <div *ngIf=\"fileFlag\">\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <div class=\"info-alert\" style.border-color=\"{{ this.questionItem?.error ? 'red' : '' }}\">\n <label class=\"picture-upload\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"fa fa-plus fa-2x picture-upload-child pic-upload icolor\">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n </div>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ allowedFileExtension }}\" (change)=\"uploadFile($event,this.questionItem)\" />\n </div>\n <ul *ngIf=\"\n attachments?.length > 0 &&\n questionItem?.Type__c === 'File' &&\n !qbItem?.Progress_Bar__c\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName}}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n\n <!-- Attachment Progress -->\n <div *ngIf=\"qbItem.Progress_Bar__c\">\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"uploading-file-name \">{{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n \n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\n <span class=\"f-Name\" [innerHTML]=\"getText(questionItem?.Question_Text__c)\"> {{ questionItem?.Question_Text__c}}</span>\n <label class=\"file-label \">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/file-upload.png\" class=\"file-icon\"/>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Book -->\n <div *ngIf=\"bookFlag\">\n <div [class]=\"qbItem.isShengel__c ? 'form-group content-box' : 'form-group'\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div [class]=\"qbItem.isShengel__c ? '' : 'nxt-myt-align3'\" [class]=\"qbItem.isShengel__c ? 'col-lg-' + ques.Size__c + ' paddingnone' : 'col-md-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.Id\">\n <div [ngClass]=\"{ down2: qbItem?.Progress_Bar__c }\">\n <span>{{ ques?.Question_Text__c }}</span>\n </div>\n <div class=\"col-md-12 paddingZero nxtmyt-dateTimeNew\" *ngIf=\"ques.Type__c === 'Time' || ques.Type__c === 'Date'\">\n <div *ngIf=\"ques.Type__c === 'Date'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Date_Text__c }}</label> -->\n <div class=\"dateandtime\">\n <!-- HA 20DEC23 For Translation -->\n <!-- HA 02FEB24 Additional param to update the question -->\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, ques)\"\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\" >\n </my-date-picker>\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.Type__c === 'Time'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.Time_Text__c }}</label> -->\n <div class=\"dateandtime\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.Progress_Bar__c,\n dateandTime: !qbItem?.Progress_Bar__c}\" \n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\n (focus)=\"(clearSQError) \">\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\n (focus)=\"clearError()\">\n <option value=\"\">HH</option>\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\n {{ hour }}\n </option>\n </select>\n <span class=\"colon\"> : </span>\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\n (focus)=\"clearError()\">\n <option value=\"\">MM</option>\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\n {{ minute }}\n </option>\n </select>\n <div [ngClass]=\"{ colon1: qbItem?.Progress_Bar__c }\" *ngIf=\"questionItem.X24_Hours__c == false\">\n <span class=\"colon\"> : </span>\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div *ngIf=\"ques.Type__c === 'DateTime'\">\n <app-custom-date-picker [minDate]=\"ques.minDate\" [date]=\"ques.input\" (dateChange)=\"displayDate($event,ques)\"></app-custom-date-picker>\n </div>\n <!-- VD to show lable-->\n <div *ngIf=\"ques.Type__c === 'Label'\">\n <app-custom-label [labelStyle]=\"ques.Title__c\" [labelValue]=\"ques.Question__c\">\n </app-custom-label>\n </div>\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <label>{{ ques.Question_Text__c }}</label>\n <app-custom-input\n [value]=\"ques?.input\"\n [question]=\"ques\" \n [idValue]=\"ques?.Tracking_ID__c\"\n [focusEvent]=\"clearSQError(ques?.Id)\"\n [error]=\"ques?.error\"\n [placeholder]=\"ques?.Question__c\"\n (inputValue)=\"selectedInput($event,ques)\">\n </app-custom-input>\n </div>\n <div *ngIf=\"ques.Type__c === 'Location'\">\n <!-- for pick location -->\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['Api_Key__c']\" [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\n </div>\n <!-- for text area -->\n <div *ngIf=\"ques.Type__c === 'TextArea'\">\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.Question__c \" (textareaValueChange)=\"handleTextareaValueChange($event)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.Type__c === 'Email'\">\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.Id\" required=\"\" (focus)=\"clearSQError(ques.Id)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\" />\n </div>\n\n <div *ngIf=\"ques.Type__c === 'File'\">\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <label class=\"picture-upload custom-file-upload bgcolor-w\" for=\"file-upload\">\n <span class=\"picture-upload-child\">\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\n </span>\n <span class=\"\n fa fa-plus fa-2x\n picture-upload-child\n pic-upload\n icolor\n \">\n <i class=\"\" aria-hidden=\"true\"></i>\n </span>\n </label>\n <input id=\"file-upload\" type=\"file\" accept=\"{{ bookFlagAccept }}\" (change)=\"uploadFile($event,ques)\" />\n </div>\n\n <ul *ngIf=\"\n attachments?.length > 0 &&\n ques.Type__c === 'File' &&\n !qbItem.Progress_Bar__c\n \" class=\"attach-ulist col-md-12\">\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\n {{ attachment.attachmentName\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\n </li>\n </ul>\n <div class=\"myt-box\" *ngIf=\"qbItem.Progress_Bar__c\">\n\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"uploading-file-name myt-font1 font-weight: normal;\"> {{ attachment.attachmentName }}</span>\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\n </div>\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\n <span class=\"f-Name\">{{ ques?.Question__c }}</span>\n <label class=\"file-label \">\n <span style=\"color: #c5281c;text-decoration:underline\">\n {{'attach' | i18n:i18nService.currentLanguage}}\n </span>\n <!-- HA 20DEC23 For Translation -->\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event,ques)\"\n class=\"file-upload-btn\">\n </label>\n </div>\n </div>\n </div>\n\n <!-- Table -->\n <div *ngIf=\"ques.Type__c === 'Table'\" class=\"\">\n <app-custom-table \n [question]=\"ques\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-table>\n </div>\n\n <!-- Dropdown -->\n <div *ngIf=\"ques.Type__c === 'Dropdown'\" class=\"nxtdropdown\">\n <!-- for common dropdown -->\n <!-- HA 20DEC23 For Translation -->\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel__c\"\n [options]=\"ques.Question_Options__r.records\"\n [apiMeta]=\"ques.Sub_Text__c\"\n [id]=\"ques.Name\"\n [selectedValue]=\"ques.input\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques?.Error_Message__c\"\n [error]=\"ques?.error\"\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.Id)\">\n </app-custom-dropdown>\n <app-dropdown-with-flag *ngIf=\"ques.isDependentPicklist && !ques.dropDownOnly\" [certified]=\"ques.certifiedFlag\" [JobPerformerCertificates]=\"ques.certificateList\" (flagDropDownChange)=\"dependentChange($event)\"></app-dropdown-with-flag>\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\n </div> \n </div>\n </div>\n </div>\n </div>\n\n <!--List start-->\n <div *ngIf=\"listFlag\">\n <div class=\"form-group\">\n <div class=\"form-row\">\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\n <div class=\"nxt-myt-align3\" [class]=\"'col-md-' + ques.Size__c + ' paddingnone'\"\n *ngFor=\"let ques of getLocalSubQuestions(questionItem.Id);let i = index\">\n <div>\n <span class=\"nxt-dis-flex myt-font3 myt-font7\">{{ ques?.Question__c }}</span>\n </div>\n <div *ngIf=\"ques.Type__c === 'Text'\">\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\n 'nxt-dis-flex dt-line date-line nxtbookText boxoutline myt-font1': qbItem.Progress_Bar__c,\n textBox: !qbItem.Progress_Bar__c\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.Question__c }}\"\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\n </div>\n </div>\n <div class=\"\" *ngIf=\"addFlag\">\n <!-- HA 20DEC23 For Translation -->\n <button (click)=\"Add(getLocalSubQuestions(questionItem.Id))\" class=\"btn\"><i class=\"fa fa-plus\" ></i>{{'add' | i18n:i18nService.currentLanguage}}</button>\n </div>\n </div>\n </div>\n </div>\n <!--List End-->\n\n <!-- Actions -->\n <!-- VD button condition removed-->\n <div class=\"flexer\">\n <!-- Backward / Back -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"backbutton\" \n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\" *ngIf=\"qbItem.Back__c\">\n <div [ngClass]=\"{}\">\n <button [ngClass]=\"{\n 'nxt-left-bt': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary':\n !qbItem.Progress_Bar__c\n }\" (click)=\"handleBackClick()\">\n {{ qbItem?.Back__c }}\n </button>\n </div>\n </div>\n\n <!-- Forward / Next -->\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div *ngIf=\"qbItem.Next__c\" >\n <div class=\"nxtbutton\">\n <button [ngClass]=\"{\n 'nxt-rusty': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary':\n !qbItem.Progress_Bar__c\n }\" (click)=\"handleNextClick()\">\n {{ qbItem.Next__c }}\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<!-- Summary -->\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\n 'col-md-12':!qbItem.Progress_Bar__c\n }\">\n <h1 class=\"nxt-header1 nxt-summarypadd\" >{{ qbItem.SubTitle__c }}</h1> \n <div id=\"nxt-progress2\" *ngIf=\"!qbItem.Progress_Bar__c && this.abItem.Status__c != 'Completed' \">\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\n <div *ngFor=\"let qa of summary\">\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\n <div [ngClass]=\"{ summary: !qbItem.Progress_Bar__c }\">\n <div *ngIf=\"!qbItem.Edit__c\"\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\n <p [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</p>\n </div>\n <div *ngIf=\"qbItem.Edit__c\"\n [ngClass]=\"{ 'question': this.abItem.Status__c != 'Completed' }\">\n <div [ngClass]=\"{ 'question': this.abItem.Status__c === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div>\n <div class=\"nxt-answer\" >\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <!-- HA 02FEB24 Displaying the in summary for book type -->\n <div *ngIf=\"qa.qTyp == 'Book'\">\n <div *ngFor=\"let val of qa.myVal\">\n <p>{{ val.Question_Text__c }}:<span>{{ val.input }}</span></p>\n </div>\n </div>\n <!-- HA 02FEB24 Displaying the value for direct question -->\n <div *ngIf=\"qa.qTyp != 'File' && qa.qTyp != 'Book'\">{{ qa.Question_Text__c }} <span></span>{{ qa.ansValue }}</div>\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <div *ngIf=\"this.abItem.Status__c === 'Completed'\" class=\"col-lg-12\" style=\"text-align: center;\">\n <h2>{{this.qbItem.Summary_Text__c}}</h2>\n <p>{{this.qbItem.Summary_Sub_Text__c}}</p>\n </div>\n\n <div id=\"nxt-progress2\" *ngIf=\"qbItem.Progress_Bar__c \">\n <div [ngClass]=\"{'bgColor nxtsummary-top' : qbItem.Progress_Bar__c }\" >\n <div id=\"nxt-progress-summary\" *ngIf=\"qbItem.Progress_Bar__c\">\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\n [startFromZero]=\"false\" [responsive]=\"false\" >\n </circle-progress>\n \n <div *ngIf=\"qbItem.Summary_Text__c && qbItem.Progress_Bar__c\" \n [ngClass]=\"{ summaryTitle: qbItem.Progress_Bar__c }\">\n <h3 class=\"nxt-subTitle\" >{{ qbItem.Summary_Text__c }}</h3>\n <div *ngIf=\"abItem.Status__c != 'Completed'\" class=\"nxt-subTitle1\" >{{ qbItem.Summary_Sub_Text__c}}</div>\n </div>\n </div>\n <div *ngIf=\"!qbItem.Progress_Bar__c\">\n <h3 class=\"summary-h\">\n {{ qbItem.Summary_Text__c }}\n </h3>\n </div>\n </div>\n <div [ngClass]=\"{ 'full-summary': qbItem.Progress_Bar__c }\">\n <div class=\"summary-groupText myt-font2\">\n <!-- <p>Informe de da\u00F1o</p> -->\n </div>\n <div *ngFor=\"let qa of summary\" >\n <div [ngClass]=\"{ non: qbItem.Progress_Bar__c }\">\n <div class=\"summary\">\n <!-- <div *ngIf=\"!qbItem.Edit__c\"\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\n <a [ngClass]=\"{ asum: this.abItem.Status__c === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\n </div>\n <div *ngIf=\"qbItem.Edit__c\"\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.Status__c != 'Completed' }\">\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.Status__c === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div> -->\n <div *ngIf=\"qbItem.Edit__c && this.abItem.Status__c != 'Completed'\" style=\"background: #dedddd;\">\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\n <img *ngIf=\"deviceInfo.os === 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" style=\"width:50%!important;\" class=\"nxt-icon-editios\"/>\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\n </button>\n </div>\n \n <div class=\"nxt-answer\">\n <div *ngIf=\"qa.qTyp === 'File'\">\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\n {{ qa.ansValue }}\n </div>\n <div *ngIf=\"qa.qTyp != 'File'\">\n {{ qa.ansValue }}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- <div class=\"flexer1\" *ngIf=\"abItem\">\n <div class=\"\" *ngIf=\"abItem.Status__c == 'Completed' && qbItem.Cancel__c\">\n <div class=\"col-md-12\">\n <button [ngClass]=\"{'btn-text': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\"\n (click)=\"handleCancelClick()\">\n {{ qbItem.Cancel__c }}\n </button>\n </div>\n </div>\n </div> -->\n\n <!-- Group Actions -->\n <div class=\"align-edit-submit\" *ngIf=\"abItem.Status__c != 'Completed'\">\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"col-md-6\" *ngIf=\"qbItem.Submit__c\">\n <button [ngClass]=\"{ 'btn-text2': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c }\" \n (click)=\"handleSubmitClick()\">\n {{ qbItem.Submit__c }}\n </button>\n </div>\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <!-- <div class=\"col-md-6\" *ngIf=\"qbItem.Edit__c\">\n <button [ngClass]=\"{'grey': qbItem.Progress_Bar__c,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.Progress_Bar__c}\" \n (click)=\"handleBackClickNew()\">\n {{ qbItem.Edit__c }}\n </button>\n </div> -->\n </div>\n\n</div>", styles: [".nxt-rusty{width:235px;background-color:#cd2810;color:#fff;text-align:center;font-size:24px;height:60px;margin-left:0%;margin-top:11%;cursor:pointer}.nxt-edit{background-color:#dfe2e7;border:none;text-decoration:underline;font-size:16px;vertical-align:super;font-weight:700}.nxt-icon-edit{width:15px;height:18px;margin:0 6px 1px -13%}.nxt-icon-edit1,.nxt-icon-edit-summary{width:29px;height:28px}.nxtquestiondiv1{padding-left:25px;padding-right:25px;padding-top:3%}.nxtquestiondiv2{padding-top:0;padding-bottom:20px;padding-left:11px}.align-edit-submit{display:flex;flex-direction:column;align-items:center}.nxtquestiondiv2{padding-left:0!important;padding-bottom:0!important}.bgColor{text-align:center;background-color:#dedddd}.nxt-questionalign{text-align:center;padding-right:4%;margin-bottom:4px;margin-top:2rem;color:#560d05}.nxtquestionStyle{font-weight:600}.nxt-largeTitle{padding-left:16px;padding-top:12px}.nxtquestion-f-size{font-size:.7rem}.non{background-color:#dedddd}.circle{margin-left:25px}.titlebar{padding-left:10%;padding-top:1%;padding-right:10%}.infodiv{padding-left:2rem;overflow:hidden}.info-alert{border:1px solid #e6e6e6;border-radius:5px;padding:.5em;margin-left:15px;margin-right:15px;margin-bottom:1rem;display:flex}.addtional-info{margin-left:-33px;margin-top:-21px;font-size:16px;font-weight:400;font-stretch:normal;font-style:normal;color:#6f7072;font-family:Helvetica}.ques-alert1{margin-bottom:1rem;display:flex}.iposition{margin-left:3rem}.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{position:relative;padding:20px;float:center;width:100%}.col-md-12{padding:0!important}.cond-div2{color:red;font-weight:700;padding-bottom:3%}.nxtradiotext{margin-top:-30px}.nxtdropdown{display:flex;justify-content:flex-start}.nxt-radiocontainer{display:flex;border:1px solid none;border-radius:.3em;padding-bottom:20px;padding-top:30px;align-items:center;text-align:center;cursor:pointer;font-family:Rubik,Helvetica Neue,Helvetica,Roboto,Arial,sans-serif;color:#000}.nxt-radioOption{display:flex;align-content:flex-start;margin-top:-16px;width:6%}.nxt-btn{border-radius:.3rem;font-size:1.25rem;line-height:1;padding:.5rem 1rem;width:100%;outline:0}.nxtmyt-time{width:-moz-fit-content!important;width:fit-content!important;background-image:none;background:#dedddd;margin:0;padding:0;border:none;font-size:15px;letter-spacing:1px}.nxtshowminute{padding-left:5px;margin-top:0%}.myt-time1{margin-top:-32px;margin-left:-15px}.nxtmyt-dateTimeNew{margin-left:-14px}.myt-hour{width:-moz-fit-content;width:fit-content}.date-time{padding:0;margin:0;text-align:left}.dateandTime{border:1px solid #d2d4d6;position:relative;display:flex;border-radius:2px;background-image:url(https://dynamic-css1.s3.ap-south-1.amazonaws.com/External+css/time.svg);background-size:25px;background-repeat:no-repeat;background-position:99% center;background-color:#fff;height:37px}.date-line{border-bottom:1px solid #fff}.nxt-dt-time{width:57%;margin-left:2.3%;text-align:left;background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/icon-clock%402x.png)!important;background-size:25px!important;background-repeat:no-repeat!important;background:#dedddd}.nxtdate-picker{width:57%;margin-left:2.5%;height:44px;border-radius:5px}.datetime:focus{border:none;box-shadow:none}#meridiem{margin-top:-2px;border:hidden}.textBox{width:100%;height:36px}.textBox1{width:100%;height:36px;margin:30px -15px 30px 19px}.option{color:#767676}.paddingnone{padding-bottom:0%}.paddingZero{padding:0}.summary-h{text-align:left;padding-bottom:15px}.summary{display:flex;flex-direction:column;align-items:flex-start;border-bottom:2px solid #fff;margin-left:10px;margin-right:10px;margin-bottom:10px}.asum{color:#6f7072;margin-top:5%;padding-left:3%}.nxtquestion{padding:10px;font-size:18px;color:#080809}.nxtquestion1{margin-left:14rem;background:#dedddd;color:#560d05;font-size:15px;padding-bottom:20px;text-align:left}.nxt-answer{display:flex;align-items:center;font-size:14px;font-weight:400;width:100%;word-wrap:break-word;justify-content:space-between;background-color:#dfe2e7;padding:5px 5px 5px 10px;border-radius:4px}.myt-font{font-size:20px}.myt-font1{width:16rem;font-size:14px;font-weight:400}.myt-font2{font-size:18px}.myt-font3,.myt-font4{font-size:14px}.myt-font5{margin-top:-18px;font-weight:400;font-size:14px;color:#560d05}.myt-font6{font-size:20px;font-weight:700;color:#c5281c;text-align:center}.myt-font10{font-weight:400;font-size:14px;color:#560d05;margin-top:10px}.myt-font7{display:flex;justify-content:flex-start;padding-left:20.5%;font-weight:100;color:#560d05}.myt-font8{font-weight:400}.dpDown:focus-visible{outline:none}.summaryTitle{padding-left:0%;padding-top:4%}.summary-groupText{width:55%;margin:auto auto -2%;text-align:left;font-weight:700;padding-top:0%;padding-bottom:0%;background-color:#dedddd;color:#c5281c}.nxtsum-ques{width:55%;margin:auto}.nxtsum-ques1{width:59%;margin:auto}.header-style{padding:15px!important;background:#F8F8F8;color:#898989!important;border:1px solid #e8e8e8;border-top-left-radius:5px;border-top-right-radius:5px;margin-left:0!important;justify-content:left!important;font-size:15px!important}.file-upload-btn{display:none;border-bottom:groove}.nxtfile-upload-box{max-width:45%;margin-left:29.5%;height:auto;padding:16px;display:flex;border:2px;border-bottom:1px solid #fff;background-color:#dedddd;justify-content:space-between;color:#d8d8d8}.file-label{cursor:pointer;color:#c5281c;text-decoration:underline}.nxtfile-uploading-box{font-size:14px;font-weight:400;max-width:45%;margin-left:29.5%;height:56px;padding:16px;display:flex;border:2px;background-color:#dedddd;justify-content:space-between;margin-bottom:0;color:#d8d8d8}.uploading-file-name{color:#6f7072}.deleteIcon{cursor:pointer;height:24px}.file-icon{max-width:24px;height:26px}.picture-upload{height:200px;width:200px;position:relative;border:1px solid #ccc;display:flex;padding:6px 12px;cursor:pointer;background-color:#fff;align-items:center}.colon{line-height:42px;padding:0;margin-top:10%;color:#6f7072}.colon1{display:contents}.nxt-subTitle{color:#c5281c;font-weight:600;margin-top:-3%}.nxt-subTitle1{color:#560d05;font-size:14px;font-weight:500}.fa{display:flex}.nxt-check-icon{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;padding:5px;margin-top:.4rem}.nxt-check-icon2{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:.6rem;line-height:3}.nxt-check-icon3{display:flex;justify-content:flex-end;color:#87be1c;z-index:1;margin-top:3rem}.align-l{text-align:left;padding:1% 2% 2%;margin-bottom:-5%;margin-top:-1%}.attach-ulist{list-style-type:none;margin-left:0;margin-bottom:.7rem}.attach-list{float:right;cursor:pointer;padding:0}.icolor{color:#99b5ce}.picture-upload-child{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tspan:nth-child(1){font-size:25px;font-weight:700}.tspan:nth-child(2){display:none}.pic-upload{position:absolute;top:15%;left:85%;transform:translate(-50%,-50%)}.btn-block+.btn-block{margin-top:.5rem}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.btn-lg,.btn-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-primary:hover{color:#fff}.btn-primary:focus,.btn-primary.focus{color:#fff;box-shadow:0 0 0 .2rem #268fff80}.btn-primary.disabled,.btn-primary:disabled{color:#fff}.btn-primary:not(:disabled):not(.disabled):active,.btn-primary:not(:disabled):not(.disabled).active,.show>.btn-primary.dropdown-toggle{color:#fff}.btn-primary:not(:disabled):not(.disabled):active:focus,.btn-primary:not(:disabled):not(.disabled).active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem #268fff80}.btn-back-color{display:block;width:100%;padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;text-align:center;border-radius:.3rem;margin:0}.fa-plus:hover{color:#87be1c}.fa-plus{color:#99b5ce}.btn-primary{border-color:#007bff}.ques-Title{text-align:left;font-size:24px}.nxtgrey{width:38%;height:56px;margin:0px 0px 0px 0rem;padding:14px 0 17px;background-color:#cd2810;color:#fff;font-size:24px}.nxtbtn-text{width:330px;font-size:24px;background-color:#cd2810;color:#fff;height:60px;margin-left:auto;margin-top:0;cursor:pointer;border-radius:40px}.nxtbtn-text2{width:21rem;font-size:24px;background-color:#cd2810;border:none;color:#fff;height:60px;margin-left:17rem;margin-right:17rem;margin-top:10px;cursor:pointer;border-radius:40px}.flexer{max-width:100%;margin-top:30px;width:100%;display:flex;justify-content:flex-end}.flexer1{max-width:100%;width:100%;display:flex;justify-content:center;margin-top:32px}.btn-r{right:0rem}.nxtdown{margin-left:0;width:57%}.nxt-dis-flex{display:flex;flex-direction:column}.nxt-radioOption{display:flex;align-items:center;margin-bottom:8px}.radiocontainer{display:flex;align-items:center;margin-left:-17px;padding-right:15px}.nxt-radiocontainer input{margin-right:8px;flex-shrink:0}.down1{width:16rem;margin-left:0rem;background-color:#dedddd}.down2{margin-top:0%;padding-left:11px}.myt-dropbox{background-image:url(https://rnxt.s3.amazonaws.com/MytIcon/down-red.png);background-origin:content-box;background-position:right -.9rem center;background-repeat:no-repeat;background-size:35px 33px;padding-right:1.35rem;background-color:#dedddd}.boxoutline{outline:transparent;background-color:#dedddd}.nxt-left-bt{width:238px;background-color:#cd2810;color:#fff;padding:0;text-align:center;font-size:24px;cursor:pointer;height:60px;margin-top:125px;margin-bottom:4rem;margin-left:-234px}.townArea{text-align:left;height:43px;padding-left:15px}.townArea:hover{background-color:#9e9e9e2e}.listFlow{font-weight:400;color:#767676;z-index:2;position:absolute;background:#dedddd;box-shadow:0 2px 5px #00000040}.myt-radio input[type=radio]:checked:after{background-color:#c5281c}.full-summary{margin-top:4%}.container-radio input{display:none;position:absolute;opacity:0;cursor:pointer}.f-Name{color:#6f7072;font-size:14px;font-weight:400;word-break:break-word}.nxtsummary-top{margin-top:4%}.myt-border-r{border-top:none;border-left:none;border-right:none;border-radius:0}.nxt-myt-align{margin-left:4%;line-height:2}.nxt-myt-align1{margin-left:-29px}.nxt-myt-align2{margin-left:-15px}.nxt-myt-align3{width:100%}.nxt-myt-book1{margin-top:-20px}.colorf{color:#555}.nxtbookText{width:57%;margin-left:21.5%;background-color:#dedddd}.nxtbook{width:32.6%;margin-left:34%;background-color:#dedddd}.nxtsummary-completed{padding-left:2%;margin-top:20px}.nxttown{margin:0;background-color:#dedddd}.nxt-town-drop{margin:auto;width:57%}.nxtquestiondiv1.padd-bottom{padding-bottom:2rem!important;padding-top:2rem!important}@media (max-width: 1090px){.nxt-icon-edit{margin:0 6px -3px -13%!important}}@media (max-width: 768px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:center}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}}.nxtbutton{padding-left:10px}.nxt-custom-radio-option{display:flex;flex-direction:row;margin-bottom:5px}.nxt-custom-radio-option.invalid label{color:red}input[type=radio]{width:auto}.nxt-radio-label{margin-left:15px;margin-bottom:0}.nxt-error-msg{color:red;font-size:12px;margin-top:5px}.nxt-input{height:38px;border:1.5px solid #43455533;border-radius:4px;padding:5px}.nxt-label{font-weight:700;color:#434555}.nxt-text-area{height:100px;width:100%}@media screen and (max-width: 480px){.nxt-icon-edit{margin:0 6px 4px -35%!important}.nxt-rusty{width:25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:25rem;margin-left:-25rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:89%}}@media screen and (max-width: 420px){.nxt-icon-edit{margin:-9px 1px 4px 4%!important}.nxt-rusty,.nxtbtn-text{width:21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-left-bt{width:21rem;margin-left:-21rem;height:68px!important;font-size:20px!important;font-weight:700!important}.nxt-container1{margin-left:0%}.nxtfile-upload-box,.nxtfile-uploading-box{max-width:100%}.nxtmyt-dateTimeNew{margin-left:-10px!important}.dateandtime{padding-left:0!important}.nxt-dt-time{padding-left:.8%!important}.myt-font7{padding-left:0rem;margin-left:-3.5%}.nxtgrey{width:21rem;margin:-21px 0 0;height:68px!important;font-size:20px!important;font-weight:700!important}.nxtbtn-text2{width:21rem;margin-right:0rem;margin-left:0;height:68px!important;font-size:20px!important;font-weight:700!important}}.mydp .selection{padding:0!important}.text-border{border-top:none;border-left:none;border-right:none;border-radius:0;border-bottom:1px solid #fff!important;background-color:#dedddd}.nxt-additional{display:flex;font-size:20px;text-align:left;font-weight:200;margin-left:4%;justify-content:center;color:#3e3e3c;padding:0 30%}.nxt-check{display:block}.nxt-container1{display:inline-grid;position:relative;cursor:pointer;font-size:20px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.bottomspace1{padding-bottom:14px!important}.myt-321{font-size:20px;font-weight:700;color:#c5281c;margin-top:11px}.myt-345{display:none}.panel{-moz-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);-webkit-box-shadow:0px 1px 2px 0px rgba(0,0,0,.1);border-radius:0;border:none;box-shadow:0 1px 2px #0000001a;margin-bottom:20px}.panel .panel-body{padding:20px}.panel-heading{border-radius:0;border:none!important;padding:10px 20px}.panel-default>.panel-heading{background-color:#fafafa;border-bottom:none;color:#2a323c;border:1px solid #e3e3e3!important}.panel-title{margin-bottom:0;margin-top:0;font-family:Rubik,sans-serif;font-weight:400}.panel-footer{background:#fafafa;border-top:0}.panel-color .panel-title{color:#fff}.panel-primary>.panel-heading{background-color:#03a9f4}.panel-success>.panel-heading{background-color:#01ba9a}.panel-info>.panel-heading{background-color:#18bae2}.panel-warning>.panel-heading{background-color:#f8ca4e}.panel-danger>.panel-heading{background-color:#f62f37}.panel-dark>.panel-heading{background-color:#2a323c;color:#fff}.panel-fill{border-radius:3px}.panel-fill .panel-heading{background-color:transparent;color:#fff;border-bottom:1px solid rgba(255,255,255,.5)!important}.panel-fill .panel-body{color:#ffffffd9}.panel-fill.panel-default .panel-body{color:#666}.panel-fill.panel-default .panel-heading{background-color:transparent;color:#333;border-bottom:1px solid rgba(0,0,0,.1)!important}.panel-fill.panel-primary{background-color:#03a9f4}.panel-fill.panel-success{background-color:#01ba9a}.panel-fill.panel-info{background-color:#18bae2}.panel-fill.panel-warning{background-color:#f8ca4e}.panel-fill.panel-danger{background-color:#f62f37}.panel-fill.panel-dark{background-color:#2a323c}.panel-group .panel .panel-heading a[data-toggle=collapse].collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading .accordion-toggle.collapsed:before{content:\"\\f0d7\"}.panel-group .panel .panel-heading a[data-toggle=collapse]{display:block}.panel-group .panel .panel-heading a[data-toggle=collapse]:before{content:\"\\f0d8\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading .accordion-toggle{display:block}.panel-group .panel .panel-heading .accordion-toggle:before{content:\"\\f068\";display:block;float:right;font-family:FontAwesome;font-size:14px;text-align:right;width:25px}.panel-group .panel .panel-heading+.panel-collapse .panel-body{border-top:none!important;border:1px solid #e3e3e3}.panel-group .panel-heading{padding:12px 26px}.panel-group.panel-group-joined .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-group-joined .panel-group .panel+.panel{border-top:1px solid #eeeeee;margin-top:0}.panel-body label{color:#9a9a9a;font-size:14px;font-weight:400;display:inline-block;max-width:100%;margin-bottom:5px}.font-size{font-size:14px}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit;text-decoration:none}.panel-title{font-size:16px}@media (min-width: 300px) and (max-width: 399px){.nxtselbtngroup{padding-left:1.3%!important}}@media (min-width: 400px) and (max-width: 480px){.nxtselbtngroup{padding-left:.9%!important}}@media screen and (min-width: 871px){.nxtselbtngroup{padding-right:4px!important}}@media screen and (min-width: 1024px){.ES-style{position:absolute;left:7px;font-size:.9rem;color:#555;top:9px}}@media screen and (max-width: 1024px){.ES-style{position:absolute;left:.6rem;font-size:.95rem;color:#555;top:.57rem}}.summary-volver{display:none}.nxt-checkbox-container{display:flex;flex-direction:column}.nxt-checkbox-wrapper{display:flex;align-items:center;margin-bottom:10px}.nxt-container1{display:flex;align-items:center}.nxt-container1 input[type=checkbox]{margin-right:10px}.nxt-checkbox-label{margin-left:10px}.nxt-main{margin-top:100px;background-color:#03a9f4}\n"] }]
|
|
2210
2263
|
}], ctorParameters: function () { return [{ type: i1.SalesforceService }, { type: i2.DataService }, { type: i3.ChangeService }, { type: i4.SharedService }, { type: i5.ActivatedRoute }, { type: i6.DomSanitizer }, { type: i7.NgxSpinnerService }, { type: i8.UntypedFormBuilder }, { type: i9.DeviceDetectorService }, { type: i0.ElementRef }, { type: i10.I18nService }]; }, propDecorators: { qbId: [{
|
|
2211
2264
|
type: Input
|
|
2212
2265
|
}], insuranceStartDate: [{
|
|
@@ -2223,5 +2276,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
2223
2276
|
type: Output
|
|
2224
2277
|
}], handleQuestion: [{
|
|
2225
2278
|
type: Output
|
|
2279
|
+
}], handleBook: [{
|
|
2280
|
+
type: Output
|
|
2226
2281
|
}] } });
|
|
2227
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvcXVlc3Rpb25uYWlyZS9xdWVzdGlvbm5haXJlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbm5haXJlL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FFbEIsTUFBTSxlQUFlLENBQUM7QUFTdkIsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzlELE9BQU8sRUFDTCxRQUFRLEVBR1IsYUFBYSxFQUViLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLGFBQWEsRUFDZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFeEQsT0FBTyxFQUVMLFVBQVUsRUFNVixNQUFNLEdBQ1AsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVl0QixNQUFNLE9BQU8sc0JBQXNCO0lBeU12QjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBRUE7SUFFRDtJQW5OQSxJQUFJLENBQVM7SUFDYixrQkFBa0IsQ0FBUztJQUMzQixJQUFJLENBQVM7SUFDYixHQUFHLENBQVM7SUFDWixHQUFHLENBQVMsQ0FBQyw4QkFBOEI7SUFDMUMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDakMsVUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lB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WCxLQUFLO2dCQUNJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBFbGVtZW50UmVmLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IFNhbGVzZm9yY2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NhbGVzZm9yY2Uuc2VydmljZVwiO1xuaW1wb3J0IHsgSU15RGF0ZU1vZGVsLCBJTXlEcE9wdGlvbnMgfSBmcm9tIFwibXlkYXRlcGlja2VyXCI7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcbmltcG9ydCB7IFVudHlwZWRGb3JtQnVpbGRlciB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgTmd4U3Bpbm5lclNlcnZpY2UgfSBmcm9tIFwibmd4LXNwaW5uZXJcIjtcbi8vaW1wb3J0IHsgTmd4SW5kZXhlZERCU2VydmljZSwgSW5kZXhEZXRhaWxzfSBmcm9tICduZ3gtaW5kZXhlZC1kYic7XG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tICduZ3gtZGV2aWNlLWRldGVjdG9yJztcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnOyBcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IENoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGFuZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NoYXJlZC5zZXJ2aWNlXCI7XG5cbmltcG9ydCB7XG4gIFF1ZXN0aW9uLFxuICBRdWVzdGlvbkJvb2ssXG4gIEFuc3dlckJvb2ssXG4gIEFuc3dlcldyYXBwZXIsXG4gIE9wdGlvbixcbiAgT3B0aW9uVmFsdWUsXG4gIEF0dGFjaG1lbnRXcmFwcGVyLFxuICBBdHRhY2htZW50LFxuICBMb2NhbFF1ZXN0aW9uXG59IGZyb20gXCIuLi8uLi93cmFwcGVyXCI7XG5pbXBvcnQgeyBFcnJvcldyYXBwZXIgfSBmcm9tIFwiLi4vLi4vbW9kZWwvZXJyb3JXcmFwcGVyXCI7XG5cbmltcG9ydCB7XG4gIFRFU1RRVUVTVElPTixcbiAgRFRRVUVTVElPTixcbiAgRklMRVFVRVNUSU9OLFxuICBUQVFVRVNUSU9OLFxuICBSQURJT1FVRVNUSU9OLFxuICBDSEVDS1FVRVNUSU9OLFxuICBCT09LUVVFU1RJT04sXG4gIFRFU1RRQixcbn0gZnJvbSBcIi4uLy4uL3NhbXBsZVwiO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gXCJyeGpzXCI7XG4vLyBIQSAxOURFQzIzIGltcG9ydGVkIHRyYW5zbGF0aW9uIHNlcnZpY2VcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2kxOG4uc2VydmljZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwibGliLXF1ZXN0aW9ubmFpcmVcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9xdWVzdGlvbm5haXJlLmNvbXBvbmVudC5odG1sXCIsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHByb3ZpZGVyczogW0NoYW5nZVNlcnZpY2VdLFxuICBzdHlsZVVybHM6IFtcIi4vcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbm5haXJlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcWJJZDogc3RyaW5nO1xuICBASW5wdXQoKSBpbnN1cmFuY2VTdGFydERhdGU6IHN0cmluZztcbiAgQElucHV0KCkgc2Vydjogc3RyaW5nO1xuICBASW5wdXQoKSB0a246IHN0cmluZztcbiAgQElucHV0KCkgYXBpOiBzdHJpbmc7IC8vIFZEIGdldHRpbmcgdGhlIGFwaSBhcyBpbnB1dFxuICBAT3V0cHV0KCkgaGFuZGxlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBoYW5kbGVQYWdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGhhbmRsZVF1ZXN0aW9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwYXJhbXM6IFBhcmFtcztcbiAgcHVibGljIGRldmljZUluZm8gPSBudWxsO1xuICBwdWJsaWMgYWJJdGVtOiBBbnN3ZXJCb29rO1xuICBwdWJsaWMgcWJJdGVtOiBRdWVzdGlvbkJvb2s7XG4gIHB1YmxpYyBxdWVzdGlvbkl0ZW06IFF1ZXN0aW9uO1xuICBwdWJsaWMgYW5zd2VyV3JhcDogQW5zd2VyV3JhcHBlcjtcblxuICAvLyBDT05ESVRJT05BTCBUWVBFU1xuICBwdWJsaWMgcmFkaW9GbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBkYXRhRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIE9QVElPTk9OTFkgVFlQRVNcbiAgcHVibGljIGRyb3Bkb3duRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgY2hlY2tib3hGbGFnOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gVU5DT05ESVRJT05BTCBUWVBFU1xuICBwdWJsaWMgdGV4dEZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHRhRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZHRGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyB0aW1lRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZGF0ZUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGZpbGVGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBlbWFpbEZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIG51bWJlckZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGFscGhhbnVtZXJpY0ZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGJvb2tGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBsaXN0RmxhZzogYm9vbGVhbj0gZmFsc2U7XG4gIC8vQmFjayBidXR0b25cbiAgcHVibGljIGJhY2tCdXR0b25GbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBvcHRpb25WYWx1ZXM6IE9wdGlvblZhbHVlW10gPSBbXTtcbiAgcHVibGljIHN1YlF1ZXN0aW9uczogUXVlc3Rpb25bXSA9IFtdO1xuICBwdWJsaWMgaW5wVmFsdWU6IHN0cmluZztcbiAgcHVibGljIGFuc3dlck1hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIGRhdGVNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBzZWxlY3RlZGhvdXJNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBzZWxlY3RlZG1pbnV0ZU1hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIGF0dGFjaG1lbnRzTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgc3FPcHRpb25zID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgc3ViQW5zTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgbG9jYWxTdWJRdWVzdGlvbnM6IExvY2FsUXVlc3Rpb25bXSA9IFtdO1xuICBwdWJsaWMgcXVlc3Rpb25TdGFjayA9IFtdO1xuICBwdWJsaWMgcXVlc3Rpb25OYW1lID0gW107XG4gIHB1YmxpYyBhdHRhY2htZW50czogYW55W10gPSBbXTtcbiAgcHVibGljIGF0dGFjaG1lbnRJZExpc3Q6IGFueVtdID0gW107XG4gIHB1YmxpYyBhdHRhY2htZW50SWQ6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBhdHRhY2htZW50OiBhbnk7XG4gIHB1YmxpYyBhbGxvd2VkRmlsZUV4dGVuc2lvbjogc3RyaW5nW107XG4gIHB1YmxpYyBmaWxlRXhjZWVkZWRMaW1pdDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZmlsZVR5cGVJbmNvcnJlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGJhY2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGJhY2tpY29uOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBjaGVjazogYm9vbGVhbjtcbiAgcHVibGljIHBvcDogYm9vbGVhbjtcbiAgcHVibGljIGxvY2FsRGF0ZTogc3RyaW5nO1xuICBwdWJsaWMgY3VycmVudE5hbWU6IHN0cmluZztcbiAgcHVibGljIHBhdGhxdWVzdGlvbjogbnVtYmVyO1xuICBwdWJsaWMgcGVyY2VudDogbnVtYmVyO1xuICBwdWJsaWMgY291bnQ6IG51bWJlcjtcbiAgcHVibGljIHRhRm9jdXNPdXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIG5vdFZhbGlkQWNjTnVtOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzcGxDQ0JhY2tDbGljazogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgc3VtbWFyeSA9IFtdO1xuICBwdWJsaWMgbG9jYWxTdWJRTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMga2V5SW5kZXg6IG51bWJlciA9IDA7XG4gIC8vcHVibGljIHNxdWVzOiBzdHJpbmc7XG4gIHB1YmxpYyBzZWxEYXRlOiBhbnkgPSB7fTtcbiAgcHVibGljIHNlbGVjdERhdGU6IHN0cmluZztcbiAgcHJpdmF0ZSB0b2RheTogRGF0ZSA9IG5ldyBEYXRlKCk7XG4gIHByaXZhdGUgZWw6IEhUTUxFbGVtZW50O1xuICBwdWJsaWMgaW5uZXJodG1sOiBhbnk7XG4gIHB1YmxpYyBwb3NzaWJpbGl0aWVzOiBhbnk7XG4gIHB1YmxpYyBpbm5lcmh0bWwxOiBhbnk7XG4gIHB1YmxpYyBzdW1tYXJ5RGF0YSA9W107XG5cbiAgcHVibGljIGhvdXJzOiBhbnlbXSA9IFtcbiAgICBcIjAxXCIsXG4gICAgXCIwMlwiLFxuICAgIFwiMDNcIixcbiAgICBcIjA0XCIsXG4gICAgXCIwNVwiLFxuICAgIFwiMDZcIixcbiAgICBcIjA3XCIsXG4gICAgXCIwOFwiLFxuICAgIFwiMDlcIixcbiAgICBcIjEwXCIsXG4gICAgXCIxMVwiLFxuICAgIFwiMTJcIixcbiAgXTtcblxuICBwdWJsaWMgbWludXRlczogc3RyaW5nW10gPSBbXG4gICAgXCIwMFwiLFxuICAgIFwiMDFcIixcbiAgICBcIjAyXCIsXG4gICAgXCIwM1wiLFxuICAgIFwiMDRcIixcbiAgICBcIjA1XCIsXG4gICAgXCIwNlwiLFxuICAgIFwiMDdcIixcbiAgICBcIjA4XCIsXG4gICAgXCIwOVwiLFxuICAgIFwiMTBcIixcbiAgICBcIjExXCIsXG4gICAgXCIxMlwiLFxuICAgIFwiMTNcIixcbiAgICBcIjE0XCIsXG4gICAgXCIxNVwiLFxuICAgIFwiMTZcIixcbiAgICBcIjE3XCIsXG4gICAgXCIxOFwiLFxuICAgIFwiMTlcIixcbiAgICBcIjIwXCIsXG4gICAgXCIyMVwiLFxuICAgIFwiMjJcIixcbiAgICBcIjIzXCIsXG4gICAgXCIyNFwiLFxuICAgIFwiMjVcIixcbiAgICBcIjI2XCIsXG4gICAgXCIyN1wiLFxuICAgIFwiMjhcIixcbiAgICBcIjI5XCIsXG4gICAgXCIzMFwiLFxuICAgIFwiMzFcIixcbiAgICBcIjMyXCIsXG4gICAgXCIzM1wiLFxuICAgIFwiMzRcIixcbiAgICBcIjM1XCIsXG4gICAgXCIzNlwiLFxuICAgIFwiMzdcIixcbiAgICBcIjM4XCIsXG4gICAgXCIzOVwiLFxuICAgIFwiNDBcIixcbiAgICBcIjQxXCIsXG4gICAgXCI0MlwiLFxuICAgIFwiNDNcIixcbiAgICBcIjQ0XCIsXG4gICAgXCI0NVwiLFxuICAgIFwiNDZcIixcbiAgICBcIjQ3XCIsXG4gICAgXCI0OFwiLFxuICAgIFwiNDlcIixcbiAgICBcIjUwXCIsXG4gICAgXCI1MVwiLFxuICAgIFwiNTJcIixcbiAgICBcIjUzXCIsXG4gICAgXCI1NFwiLFxuICAgIFwiNTVcIixcbiAgICBcIjU2XCIsXG4gICAgXCI1N1wiLFxuICAgIFwiNThcIixcbiAgICBcIjU5XCIsXG4gIF07XG5cbiAgcHVibGljIHNlbGVjdGVkSG91cjogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIHNlbGVjdGVkTWludXRlOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgc2VsZWN0ZWRNZXJpZGllbTogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIHZhbHVlTmFtZTogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIHZhbHVlTmFtZTE6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBib29rRmxhZ0FjY2VwdDogc3RyaW5nW107XG4gIHB1YmxpYyByZWNvcmRJZDogc3RyaW5nO1xuICBwdWJsaWMgY3VycmVudFF1ZXN0aW9uSWQ6IHN0cmluZztcbiAgcHVibGljIHNwaW5uZXJUeXBlOiBzdHJpbmc7XG4gIHB1YmxpYyBzcGlubmVyTmFtZTogc3RyaW5nO1xuICBwdWJsaWMgbmV4dFZhbHVlOnN0cmluZyA9Jyc7XG5cbiAgc3RhcnRfZGF0ZT86IGFueTtcblxuICAvL3NlYXJjaCBjb21wb25lbnRcbiAgcHVibGljIHRlbXBvQWRkcmVzczogYW55W10gPSBbXTtcbiAgcHVibGljIHNlbGVjdGVkVmFsdWU6IHN0cmluZztcbiAgcHVibGljIHNlbGVjdGVkUG9zdGFsY29kZTogc3RyaW5nO1xuICBwdWJsaWMgc2VsZWN0ZWRQcm92aW5jZTogc3RyaW5nO1xuICBwdWJsaWMgc2VsZWN0ZWRDaXR5OiBzdHJpbmc7XG4gIHB1YmxpYyBzZWxlY3RlZEFyZWE6IHN0cmluZztcbiAgcHVibGljIGxvY2FsYWRkcmVzczogYW55W10gPSBbXTtcblxuICBwdWJsaWMgYWxsQWRkcmVzcyA6YW55IFtdID0gW107XG4gIHB1YmxpYyBQb3N0YWxDb2RlOnN0cmluZztcbiAgcHVibGljIHBsYWNlczogYW55W10gPSBbXTtcbiAgcHVibGljIHByb3ZpbmNlOmFueVtdPVtdO1xuIFxuICAvLyBSRVEtMDEgUFJPR1JFU1MgQkFSXG4gIHB1YmxpYyBwcm9ncmVzc1N0eWxlOiBzdHJpbmcgPSBcIjAlXCI7XG4gIHB1YmxpYyBhbnN3ZXJDb3VudDogbnVtYmVyID0gMDtcbiAgcHVibGljIGluZGV4Q291bnQ6IG51bWJlciA9IDA7XG4gIHB1YmxpYyBhZGRGbGFnOiBib29sZWFuID0gdHJ1ZTtcblxuICBwdWJsaWMgbXlEYXRlUGlja2VyT3B0aW9uczogSU15RHBPcHRpb25zID0ge307XG4gIGluZGl2aWR1YWxCb29rQnV0dG9uOiBib29sZWFuO1xuXG4gIHB1YmxpYyBhbGxJbnB1dFZhbHVlcyA9IFtdOyAvLyBIQSAwMkZFQjI0IFRvIHN0b3JlIGFsbCB0aGUgaW5wdXQgdmFsdWVzXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2ZTZXJ2aWNlOiBTYWxlc2ZvcmNlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZVNlcnZpY2U6IENoYW5nZVNlcnZpY2UsIFxuICAgIHByaXZhdGUgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgc3Bpbm5lcjogTmd4U3Bpbm5lclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICAvL3ByaXZhdGUgZGJTZXJ2aWNlOiBOZ3hJbmRleGVkREJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGV2aWNlU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxuICAgIGVsOiBFbGVtZW50UmVmLFxuICAgIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2VcbiAgKSB7XG4gICAgdGhpcy5zcGlubmVyTmFtZSA9IFwic3AxXCI7XG4gICAgdGhpcy5zcGlubmVyVHlwZSA9IFwiYmFsbC1zcGluLWNsb2Nrd2lzZVwiO1xuICB9XG5cbiAgLy8gSEEgMDJGRUIyNCBPbiBkYXRlIGNoYW5nZSBuZWVkIHRvIHN0b3JlIHRoZSBjaGFuZ2VkIHZhbHVlIHNvIHBhc3NpbmcgdGhlIHF1ZXN0aW9uXG4gIG9uRGF0ZUNoYW5nZWQoZXZlbnQ6IElNeURhdGVNb2RlbCwgcXVlczogYW55KSB7XG4gICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBvbkRhdGVDaGFuZ2VkJyk7XG4gICAgLy90byBjaGFuZ2UgdGhlIGJvcmRlciBjb2xvclxuICAgIGlmICh0aGlzLnFiSXRlbS5Qcm9ncmVzc19CYXJfX2MpIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgcHJvZ3Jlc3NCYXIgY29uZCcpO1xuICAgICAgdGhpcy5pbnBWYWx1ZSA9XG4gICAgICAgIGV2ZW50LmRhdGUuZGF5ICsgXCIvXCIgKyBldmVudC5kYXRlLm1vbnRoICsgXCIvXCIgKyBldmVudC5kYXRlLnllYXI7XG4gICAgICBpZih0aGlzLnF1ZXN0aW9uSXRlbS5UeXBlX19jID09XCJCb29rXCIpe1xuICAgICAgICB0aGlzLnNlbGVjdERhdGUgPSAgZXZlbnQuZGF0ZS5kYXkgKyBcIi9cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi9cIiArIGV2ZW50LmRhdGUueWVhcjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBFTFNFIG9mIHByb2dyZXNzQmFyIGNvbmQnKTtcbiAgICAgIGlmKHRoaXMucXVlc3Rpb25JdGVtLlR5cGVfX2MgPT1cIkJvb2tcIil7XG4gICAgICAgIHRoaXMuc2VsZWN0RGF0ZSA9ICBldmVudC5kYXRlLmRheSArIFwiLVwiICsgZXZlbnQuZGF0ZS5tb250aCArIFwiLVwiICsgZXZlbnQuZGF0ZS55ZWFyO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnBWYWx1ZSA9XG4gICAgICAgIGV2ZW50LmRhdGUueWVhciArIFwiLVwiICsgZXZlbnQuZGF0ZS5tb250aCArIFwiLVwiICsgZXZlbnQuZGF0ZS5kYXk7XG4gICAgfVxuICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJteWRwXCIpO1xuICAgIGh0bWxFbGVtZW50XG4gICAgICAuaXRlbSgwKVxuICAgICAgLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwiYm9yZGVyLWNvbG9yOiM4N2JlMWM7d2lkdGg6MTAwJVwiKTtcbiAgICB0aGlzLmRhdGVNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLklkLCBldmVudCk7XG4gICAgaWYgKFxuICAgICAgZXZlbnQuZGF0ZS5kYXkgPT09IDAgJiZcbiAgICAgIGV2ZW50LmRhdGUubW9udGggPT09IDAgJiZcbiAgICAgIGV2ZW50LmRhdGUueWVhciA9PT0gMFxuICAgICkge1xuICAgICAgdGhpcy5kYXRlTWFwLmRlbGV0ZSh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XG4gICAgICB0aGlzLmFuc3dlck1hcC5kZWxldGUodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xuICAgIH1cbiAgICAvL2NvbnNvbGUubG9nKCd0aGlzLmlucFZhbHVlID0gJyt0aGlzLmlucFZhbHVlKTtcbiAgICAvL2NvbnNvbGUubG9nKCd0aGlzLnNlbGVjdERhdGUgPSAnK3RoaXMuc2VsZWN0RGF0ZSk7XG4gICAgLy8gSEEgMDJGRUIyNCBBc3NpZ25pbmcgaW5wdXQgdmFsdWUgdG8gcXVlcyBpbnB1dFxuICAgIHF1ZXMuaW5wdXQgPSB0aGlzLmlucFZhbHVlO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5kZXZpY2VJbmZvID0gdGhpcy5kZXZpY2VTZXJ2aWNlLmdldERldmljZUluZm8oKTtcbiAgICB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zLnN1YnNjcmliZSgocGFyYW1zOiBQYXJhbXMpID0+IHtcbiAgICAgIGlmIChwYXJhbXNbJ2lkJ10pIHtcbiAgICAgICAgdGhpcy5pbmRpdmlkdWFsQm9va0J1dHRvbiA9IHRydWU7XG4gICAgICB9ZWxzZSBpZihwYXJhbXNbJ2Jvb2tsZXRJZCddKXtcbiAgICAgICAgdGhpcy5pbmRpdmlkdWFsQm9va0J1dHRvbiA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xuICAgIHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9IFwiQU1cIjtcbiAgICB0aGlzLnByb2Nlc3NRQigpO1xuICAgIC8vY29uc29sZS5sb2cobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2FkZHJlc3MnKSk7XG4gICAgaWYobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJhZGRyZXNzXCIpKXtcbiAgICAgIHRoaXMubG9jYWxhZGRyZXNzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImFkZHJlc3NcIikpO1xuICAgICAgLy9jb25zb2xlLmxvZygnTGVuZ3RoPScrdGhpcy5sb2NhbGFkZHJlc3MubGVuZ3RoKTtcbiAgICAgIHRoaXMuYWxsQWRkcmVzcz10aGlzLmxvY2FsYWRkcmVzcy5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmxvY2FsYWRkcmVzcy5pbmRleE9mKGl0ZW0pID09IGluZGV4KXtcbiAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfVxuICAgICAgfSk7IFxuICAgICAgdGhpcy5hbGxBZGRyZXNzLnNvcnQoZnVuY3Rpb24oYSwgYil7XG4gICAgICAgIHJldHVybiBhLnppcENvZGUgLSBiLnppcENvZGVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZih0aGlzLmRldmljZUluZm8ub3MgPT09ICdpT1MnKXtcbiAgICAgICAgbGV0IG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oXCJhZGRyZXNzREJcIik7XG4gICAgICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IChldmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhcmdldE5ldyA9IGV2ZW50LnRhcmdldCBhcyBJREJSZXF1ZXN0O1xuICAgICAgICAgIGxldCBkYk5ldyA9IHRhcmdldE5ldy5yZXN1bHQ7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdE5ldyA9IGRiTmV3LnRyYW5zYWN0aW9uKCdhZGRyZXNzVGFibGUnKVxuICAgICAgICAgICAgICAgIC5vYmplY3RTdG9yZSgnYWRkcmVzc1RhYmxlJylcbiAgICAgICAgICAgICAgICAuZ2V0KDEpO1xuICAgICAgICAgIHJlcXVlc3ROZXcub25zdWNjZXNzID0gKCk9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRlbXBWYXIgPSByZXF1ZXN0TmV3LnJlc3VsdDtcbiAgICAgICAgICAgICAgdGhpcy5sb2NhbGFkZHJlc3MgPSBKU09OLnBhcnNlKHRlbXBWYXIud2hvbGVBZGRyZXNzU3RyaW5nKTtcbiAgICAgICAgICAgICAgdGhpcy5hbGxBZGRyZXNzPXRoaXMubG9jYWxhZGRyZXNzLmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2NhbGFkZHJlc3MuaW5kZXhPZihpdGVtKSA9PSBpbmRleCl7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pOyBcbiAgICAgICAgICAgICAgdGhpcy5hbGxBZGRyZXNzLnNvcnQoZnVuY3Rpb24oYSwgYil7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuemlwQ29kZSAtIGIuemlwQ29kZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcygpIHtcbiAgICBjb25zb2xlLmxvZygnaW5zaWRlIFF1ZXN0aW9ubmFpcmUgbmdPbkNoYW5nZXMnKTtcbiAgICAvLyBNUiAzMEpBTjI0IFVuY29tbWVudGVkIGJlbG93IGxpbmVzXG4gICAgdGhpcy5wcm9jZXNzUUIoKTtcbiAgfVxuXG4gIGRhdGVfVGltZU1hcCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkaG91ck1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQsIHRoaXMuc2VsZWN0ZWRIb3VyKTtcbiAgICB0aGlzLnNlbGVjdGVkbWludXRlTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCwgdGhpcy5zZWxlY3RlZE1pbnV0ZSk7XG4gIH1cblxuICBkYXkoKSB7XG4gICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zID0ge1xuICAgICAgZGF0ZUZvcm1hdDogXCJkZC5tbS55eXl5XCIsXG4gICAgICBzdW5IaWdobGlnaHQ6IGZhbHNlLFxuICAgICAgZGlzYWJsZURhdGVSYW5nZXM6IFtdLFxuICAgICAgc2hvd0NsZWFyRGF0ZUJ0bjogZmFsc2UsXG4gICAgICBkaXNhYmxlU2luY2U6IHtcbiAgICAgICAgeWVhcjogMCxcbiAgICAgICAgbW9udGg6IDAsXG4gICAgICAgIGRheTogMCxcbiAgICAgIH0sXG4gICAgICBkaXNhYmxlVW50aWw6IHtcbiAgICAgICAgeWVhcjogMCxcbiAgICAgICAgbW9udGg6IDAsXG4gICAgICAgIGRheTogMCxcbiAgICAgIH0sXG4gICAgICBzaG93VG9kYXlCdG46IGZhbHNlLFxuICAgICAgZGF5TGFiZWxzOiB7XG4gICAgICAgIHN1OiBcIkRvbVwiLFxuICAgICAgICBtbzogXCJMdW5cIixcbiAgICAgICAgdHU6IFwiTWFyXCIsXG4gICAgICAgIHdlOiBcIk1pw6lcIixcbiAgICAgICAgdGg6IFwiSnVlXCIsXG4gICAgICAgIGZyOiBcIlZpZVwiLFxuICAgICAgICBzYTogXCJTw6FiXCIsXG4gICAgICB9LFxuICAgICAgbW9udGhMYWJlbHM6IHtcbiAgICAgICAgMTogXCJFbmVcIixcbiAgICAgICAgMjogXCJGZWJcIixcbiAgICAgICAgMzogXCJNYXJcIixcbiAgICAgICAgNDogXCJBYnJcIixcbiAgICAgICAgNTogXCJNYXlvXCIsXG4gICAgICAgIDY6IFwiSnVuXCIsXG4gICAgICAgIDc6IFwiSnVsXCIsXG4gICAgICAgIDg6IFwiQWdvXCIsXG4gICAgICAgIDk6IFwiU2VwXCIsXG4gICAgICAgIDEwOiBcIk9jdFwiLFxuICAgICAgICAxMTogXCJOb3ZcIixcbiAgICAgICAgMTI6IFwiRGljXCIsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBjaGFuZ2UoKSB7XG4gICAgY29uc3QgaHRtbEVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIm15ZHBcIik7XG4gICAgaWYgKHRoaXMuc2VsRGF0ZSA9PT0gbnVsbCB8fCB0aGlzLmlucFZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaHRtbEVsZW1lbnRcbiAgICAgICAgLml0ZW0oMClcbiAgICAgICAgLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwid2lkdGg6MTAwJTtib3JkZXI6IDFweCBzb2xpZCByZWRcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGh0bWxFbGVtZW50XG4gICAgICAgIC5pdGVtKDApXG4gICAgICAgIC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImJvcmRlcjogMXB4IHNvbGlkICM4N2JlMWMgO3dpZHRoOjEwMCVcIik7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1FCKCkge1xuICAgIGNvbnNvbGUubG9nKCdQcm9jZXNzUUInKTtcbiAgICAvL3RoaXMucWJJdGVtXG4gICAgY29uc29sZS5sb2codGhpcy5xYklkKTtcbiAgICAvL2NvbnNvbGUubG9nKCdWZXJzaW9uIGluIHByb2Nlc3MgaXMgOGJmMTFlZmE3ZjkxYTM5MWQ5NTdiZjZiNTA3OGVkYzdlNjU2YjY3YycpO1xuICAgIGlmICh0aGlzLnFiSWQpIHtcbiAgICAgIGlmICh0aGlzLnFiSWQubGVuZ3RoID09IDE4KSB7XG4gICAgICAgIHRoaXMucmVhZFF1ZXN0aW9uQm9vayh0aGlzLnFiSWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBlbHNlIHBhcnQnKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnU2V0dGluZyB0aGUgUXVlc3Rpb24gRGlyZWN0bHkgZm9yIHRlc3RpbmcnKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0gPSBEVFFVRVNUSU9OO1xuICAgICAgICB0aGlzLnFiSXRlbSA9IFRFU1RRQjtcbiAgICAgICAgdGhpcy5wcm9jZXNzUXVlc3Rpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0cmltTGFzdER1bW15KGlucHV0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gKGlucHV0ID0gaW5wdXQuc3Vic3RyaW5nKDAsIGlucHV0Lmxlbmd0aCAtIDYpKTtcbiAgfVxuXG4gIGdldFByb3BlclRpbWUoZGVmOiBzdHJpbmcsIGlucHV0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gaW5wdXQgPT09IFwiXCIgPyBkZWYgOiBpbnB1dDtcbiAgfVxuXG4gIC8vU3VtbWFyeSBRdWVzdGlvbiBDbGlja2FibGUgTG9naWNcbiAgaGFuZGxlRWRpdENsaWNrKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmJhY2tpY29uID0gZmFsc2U7XG4gICAgaWYgKHRoaXMuYWJJdGVtPy5TdGF0dXNfX2MgPT0gXCJQZW5kaW5nXCIpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVhZFF1ZXN0aW9uKHZhbHVlKTtcbiAgICAgIC8vY29uc29sZS5sb2coJyBpbiBzaWRlIHN1bW1hcnlvcGVuJysgdGhpcy5zdW1tYXJ5Lmxlbmd0aCk7XG5cbiAgICAgIC8vQXNzaWduIHF1ZXN0aW9uIHN0YWNrIGxlbmd0aCBmcm9tIHN1bW1hcnkgcGFydFxuICAgICAgdmFyIGFycmF5TGVuZ3RoID0gdGhpcy5xdWVzdGlvblN0YWNrLmxlbmd0aDtcbiAgICAgIHZhciBsZW5ndGhWYWx1ZSA9IHRoaXMucXVlc3Rpb25TdGFjay5pbmRleE9mKHZhbHVlKTtcblxuICAgICAgZm9yIChsZXQgaSA9IGFycmF5TGVuZ3RoOyBpID4gbGVuZ3RoVmFsdWU7IGktLSkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucG9wKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5xYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jID09PSB0cnVlKSB7XG4gICAgICAgIHZhciBhcnJheUxlbmd0aDEgPSB0aGlzLnF1ZXN0aW9uTmFtZS5sZW5ndGg7XG4gICAgICAgIGZvciAobGV0IGogPSBhcnJheUxlbmd0aDE7IGogPiBsZW5ndGhWYWx1ZTsgai0tKSB7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbk5hbWUucG9wKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc3VtbWFyeSA9IFtdO1xuICAgICAgdGhpcy5zdW1tYXJ5RGF0YSA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZU5leHRDbGljaygpIHtcbiAgICB0aGlzLmJhY2tCdXR0b25GbGFnID0gZmFsc2U7XG4gICAgdGhpcy5BbnN3ZXJTYXZlKCk7XG4gIH1cblxuICBBbnN3ZXJTYXZlKCl7XG4gICAgLy90aGlzLnVwZGF0ZVByb2dyZXNzKCk7XG4gICAgaWYgKHRoaXMuY3VycmVudFF1ZXN0aW9uSWQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHF1ZXN0aW9uVHh0PScnO1xuICAgIHRoaXMuY2xlYXJFcnJvcigpO1xuICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5OZXh0X1RyYWNraW5nX0lEX19jKTtcbiAgICB0aGlzLnJlY29yZElkID0gbnVsbDtcbiAgICB2YXIgY1F1ZXN0aW9uOiBRdWVzdGlvbiA9IG5ldyBRdWVzdGlvbigpO1xuICAgIGNRdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25JdGVtO1xuICAgIC8vIE1SIDMwSkFOMjQgLSBBZGRlZCBDb25kaXRpb24gZm9yIHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fciAoQm9vayBRdWVzdGlvbiBhbmQgTm9uLUJvb2spXG4gICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhbiBhcnJheSBvZiBvYmplY3RzIHRvIHN0b3JlIHRoZSB2YWx1ZXNcbiAgICAgICAgZm9yICh2YXIgaT0wOyBpPHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzLmxlbmd0aDtpKyspIHtcbiAgICAgICAgICBpZih0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkc1tpXS5RdWVzdGlvbl9UZXh0X19jKXtcbiAgICAgICAgICAgIHZhciBxdWVzdGlvblRleHQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkc1tpXS5RdWVzdGlvbl9UZXh0X19jLnJlcGxhY2UoLzxbXj5dKz4vZywgJycpOyAvLyBSZW1vdmUgSFRNTCB0YWdzIGZyb20gdGhlIFF1ZXN0aW9uX1RleHRfX2MgdmFsdWVcbiAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHF1ZXN0aW9uVGV4dCA9ICd1bmRlZmluZWQnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzW2ldLmlucHV0O1xuICAgICAgICAgIGNvbnN0IG9iaiA9IHsgW3F1ZXN0aW9uVGV4dF06IGlucHV0IH07IC8vIENyZWF0ZSBhbiBvYmplY3Qgd2l0aCB0aGUgcXVlc3Rpb25UZXh0IGFzIHRoZSBrZXkgYW5kIHRoZSBpbnB1dCBhcyB0aGUgdmFsdWVcbiAgICAgICAgICB0aGlzLnN1bW1hcnlEYXRhLnB1c2gob2JqKTsgLy8gQWRkIHRoZSBvYmplY3QgdG8gdGhlIGRhdGEgYXJyYXlcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcXVlc3Rpb25UZXh0ID0gdGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25fVGV4dF9fYy5yZXBsYWNlKC88W14+XSs+L2csICcnKTtcbiAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICBjb25zdCBvYmogPSB7IFtxdWVzdGlvblRleHRdOiBpbnB1dCB9OyAvLyBDcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlIHF1ZXN0aW9uVGV4dCBhcyB0aGUga2V5IGFuZCB0aGUgaW5wdXQgYXMgdGhlIHZhbHVlXG4gICAgICB0aGlzLnN1bW1hcnlEYXRhLnB1c2gob2JqKTsgLy8gQWRkIHRoZSBvYmplY3QgdG8gdGhlIGRhdGEgYXJyYXlcbiAgICB9XG5cbiAgICAgICAgIHZhciB0eXAgPSBjUXVlc3Rpb24uVHlwZV9fYztcbiAgICAvLyB0aGlzLnNxdWVzICs9IGNRdWVzdGlvbi5RdWVzdGlvbl9fYyArICdAQCMjJCQnO1xuICAgIHZhciBxdWVzVmFsdWUgPSBjUXVlc3Rpb24uUXVlc3Rpb25fVGV4dF9fYztcbiAgICB2YXIgbWFpbGZvcm1hdCA9XG4gICAgICBcIl5bXi5dW2EtekEtWjAtOSEjJCUmJyorLS89P15fYHt8fX5dK1teLl1AW14tXVthLXpBLVowLTkuLV0rW14tXS5bYS16QS1aXXsyLH0kXCI7XG5cbiAgICAvLyBQcm9jZXNzIElucHV0c1xuICAgIGlmICh0aGlzLmNoZWNrYm94RmxhZykge1xuICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgICAvLyBTYXZlIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBpbiB0aGUgaW5wVmFsdWVcbiAgICAgIGZvciAodmFyIG92IG9mIHRoaXMub3B0aW9uVmFsdWVzLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5jaGVja2VkKSkge1xuICAgICAgICB0aGlzLmlucFZhbHVlICs9IG92LlZhbHVlX19jICsgXCJAQCMjJCRcIjtcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IG92Lk5leHRfUXVlc3Rpb25fX2M7XG4gICAgICB9XG4gICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy50cmltTGFzdER1bW15KHRoaXMuaW5wVmFsdWUpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5lbWFpbEZsYWcpIHtcbiAgICAgIGlmICh0aGlzLmlucFZhbHVlICYmIHRoaXMuaW5wVmFsdWUubWF0Y2gobWFpbGZvcm1hdCkpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IHRoaXMucXVlc3Rpb25JdGVtLk5leHRfUXVlc3Rpb25fX2M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5hbHBoYW51bWVyaWNGbGFnKSB7XG4gICAgICB2YXIgaXNOb3RWYWxpZEFjY051bSA9IHRoaXMuaXNOb3RWYWxpZEFjY051bWJlcih0aGlzLmlucFZhbHVlKTtcbiAgICAgIGlmIChpc05vdFZhbGlkQWNjTnVtKSB7XG4gICAgICAgIHRoaXMubm90VmFsaWRBY2NOdW0gPSB0cnVlO1xuICAgICAgICB0aGlzLnJlY29yZElkID0gdGhpcy5xdWVzdGlvbkl0ZW0uTmV4dF9RdWVzdGlvbl9fYztcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5ub3RWYWxpZEFjY051bSA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5udW1iZXJGbGFnKSB7XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICB0aGlzLnJlY29yZElkID0gdGhpcy5xdWVzdGlvbkl0ZW0uTmV4dF9RdWVzdGlvbl9fYztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmJvb2tGbGFnKSB7XG4gICAgICB0aGlzLmlucFZhbHVlID0gXCJcIjtcbiAgICAgIHZhciBoYXNNaXNzaW5nSW5wdXQgPSBmYWxzZTtcbiAgICAgIGZvciAodmFyIGl0ZW0gb2YgdGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHMpIHtcbiAgICAgICAgdmFyIGNvdW50ID0gMDtcbiAgICAgIFxuICAgICAgICBpZihpdGVtLlR5cGVfX2MgPT0gXCJEYXRlXCIgfHwgaXRlbS5UeXBlX19jID09IFwiVGltZVwiKSB7XG4gICAgICAgICAgLy90aGlzIG9uZVxuICAgICAgICAgIHRoaXMuY2hhbmdlKCk7XG4gICAgICAgICAgICBpZihpdGVtLlR5cGVfX2MgPT0gXCJEYXRlXCIpe1xuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGRhdGUgdHlwZSBjb25kID0gJyt0aGlzLnNlbGVjdERhdGUpO1xuICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5zZWxlY3REYXRlO1xuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuaW5wVmFsdWUpXG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zZWxlY3REYXRlKVxuICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICAgICBpZihpdGVtLlR5cGVfX2MgPT0gXCJUaW1lXCIpe1xuICAgICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zZWxlY3RlZEhvdXIrdGhpcy5zZWxlY3RlZE1lcmlkaWVtK3RoaXMuc2VsZWN0ZWRNaW51dGUpXG4gICAgICAgICAgICAgXG4gICAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLlgyNF9Ib3Vyc19fYyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxuICAgICAgICAgICAgICAgICh0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPT09IFwiUE1cIiAmJiB0aGlzLnNlbGVjdGVkSG91ciAhPSBcIjEyXCJcbiAgICAgICAgICAgICAgICAgID8gTnVtYmVyKHRoaXMuc2VsZWN0ZWRIb3VyKSArIDEyXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRIb3VyKSArXG4gICAgICAgICAgICAgICAgXCI6XCIgK1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgKyBcIiBQTVwiO1xuICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIkFNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgPT09IFwiMTJcIikge1xuICAgICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gXCIwMFwiICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlICsgXCIgQU1cIjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jKSB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5zZWxlY3REYXRlKXtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnNlbGVjdERhdGUrXCIgXCIrdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gXCIgXCIrdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuc2VsZWN0RGF0ZSl7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5zZWxlY3REYXRlK1wiIFwiK3RoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiIFwiK3RoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLlgyNF9Ib3Vyc19fYyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGU7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnFiSXRlbS5Qcm9ncmVzc19CYXJfX2MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEhBIDMxLUpBTi0yNCBSZW1vdmVkIHRoZSBzZWxlY3RIb3VyIGFuZCBzZWxlY3RNaW51dGUgY29uZGl0aW9uXG4gICAgICAgICAgaWYgKHRoaXMuc2VsRGF0ZSA9PT0gbnVsbCB8fCB0aGlzLnNlbERhdGUgPT09IHVuZGVmaW5lZCB8fCAhdGhpcy5pbnBWYWx1ZSB8fCAhdGhpcy5zZWxlY3REYXRlKSB7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIG51bGwgY29uZGl0aW9uIG9mIGlucHV0Jyk7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJteWRwXCIpO1xuICAgICAgICAgICAgaHRtbEVsZW1lbnRcbiAgICAgICAgICAgICAgLml0ZW0oMClcbiAgICAgICAgICAgICAgLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwid2lkdGg6MTAwJTtib3JkZXItYm90dG9tOiAxcHggc29saWQgcmVkICFpbXBvcnRhbnQ7XCIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRhdGVfVGltZU1hcCgpO1xuICAgICAgfVxuICAgICAgLy8gSEEgMzEtSkFOLTI0IEFkZGVkIHRleHQgZXJyb3IgY29uZGl0aW9uXG4gICAgICBpZihpdGVtLlR5cGVfX2M9PSBcIlRleHRcIil7XG4gICAgICAgIGlmICghaXRlbS5pbnB1dCkge1xuICAgICAgICAgIGl0ZW0uaW5wdXQgPSBcIlwiO1xuICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyB0aGlzLmlucFZhbHVlID0gaXRlbS5pbnB1dDsgNjM0XG4gICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFpdGVtLklzX09wdGlvbmFsX19jICYmXG4gICAgICAgIC8vICAoKGl0ZW0uVHlwZV9fYyAhPSBcIkZpbGVcIiAmJiAhaXRlbS5pbnB1dCAmJiBpdGVtLlR5cGVfX2MgIT0gJ0RhdGUnICYmIGl0ZW0uVHlwZV9fYyAhPSAnVGltZScpIHx8XG4gICAgICAgICAvLyAgIChpdGVtLlR5cGVfX2MgPT0gXCJGaWxlXCIgJiYgdGhpcy5hdHRhY2htZW50cy5sZW5ndGggPT0gMCkpXG4gICAgICAgICAoaXRlbS5UeXBlX19jID09IFwiRmlsZVwiICYmIHRoaXMuYXR0YWNobWVudHMubGVuZ3RoID09IDApXG4gICAgICAgICkge1xuICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbS5UeXBlX19jID09IFwiUmFkaW9cIikge1xuICAgICAgICAgIGlmICghaXRlbS5pbnB1dCkge1xuICAgICAgICAgICAgaXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtLlR5cGVfX2MgPT0gXCJEcm9wZG93blwiKSB7XG4gICAgICAgICAgaWYgKCFpdGVtLmlucHV0KSB7XG4gICAgICAgICAgICBpdGVtLmlucHV0ID0gXCJcIjtcbiAgICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbS5UeXBlX19jID09IFwiRW1haWxcIikge1xuICAgICAgICAgIGlmIChpdGVtLmlucHV0ICYmIGl0ZW0uaW5wdXQubWF0Y2gobWFpbGZvcm1hdCkpIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24uTmV4dF9RdWVzdGlvbl9fYztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtLlR5cGVfX2MgPT0gXCJGaWxlXCIgJiYgdGhpcy5hdHRhY2htZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudEl0ZW0gb2YgdGhpcy5hdHRhY2htZW50cykge1xuICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSArPVxuICAgICAgICAgICAgICBhdHRhY2htZW50SXRlbS5hdHRhY2htZW50SWQgK1xuICAgICAgICAgICAgICBcIkAjJFwiICtcbiAgICAgICAgICAgICAgYXR0YWNobWVudEl0ZW0uYXR0YWNobWVudE5hbWUgK1xuICAgICAgICAgICAgICBcIixcIjtcbiAgICAgICAgICAgIGlmIChpdGVtLmlucHV0ID09IHRoaXMuaW5wVmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jO1xuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUnICsgcmVjb3JkSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0aGlzLmF0dGFjaG1lbnRzID0gW107XG4gICAgICAgIH0gLy9pdGVtLmlucHV0ID09IHRoaXMuaW5wVmFsdWU7XG5cbiAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSAoaXRlbS5pbnB1dCAhPSB1bmRlZmluZWQgPyBpdGVtLmlucHV0IDogXCJcIikgKyBcIkBAIyMkJFwiO1xuICAgICAgICBxdWVzdGlvblR4dCArPSBpdGVtLlF1ZXN0aW9uX19jICsgXCJAQCMjJCRcIjtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGJvb2sxJyArIHRoaXMuaW5wVmFsdWUpXG4gICAgICB9XG4gICAgICBpZiAoaGFzTWlzc2luZ0lucHV0KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnRyaW1MYXN0RHVtbXkodGhpcy5pbnBWYWx1ZSk7XG4gICAgICBxdWVzdGlvblR4dCA9IHF1ZXN0aW9uVHh0ID8gdGhpcy50cmltTGFzdER1bW15KHF1ZXN0aW9uVHh0KSA6IHF1ZXN0aW9uVHh0O1xuICAgIH0gXG4gICAgZWxzZSBpZiAodGhpcy5saXN0RmxhZykge1xuICAgICAgdGhpcy5pbnBWYWx1ZSA9ICcnO1xuICAgICAgdmFyIGhhc01pc3NpbmdJbnB1dCA9IGZhbHNlO1xuICAgICAgaWYodGhpcy5sb2NhbFN1YlFNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLklkKSl7XG4gICAgICAgIHRoaXMuc3ViQW5zTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICBmb3IgKHZhciBsb2NhbFF1ZXMgb2YgdGhpcy5sb2NhbFN1YlFNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLklkKSkge1xuICAgICAgICAgICAgaWYoIWxvY2FsUXVlcy5pbnB1dCkge1xuICAgICAgICAgICAgICBsb2NhbFF1ZXMuZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgaWYoIXRoaXMuc3ViQW5zTWFwLmhhcyhsb2NhbFF1ZXMuSWQpKXtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgYW5zIG1hcCcpXG4gICAgICAgICAgICB0aGlzLnN1YkFuc01hcC5zZXQobG9jYWxRdWVzLklkLGxvY2FsUXVlcy5pbnB1dCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgYW5zIG1hcCBlbHNlJylcbiAgICAgICAgICAgIHRoaXMuc3ViQW5zTWFwLnNldChsb2NhbFF1ZXMuSWQsdGhpcy5zdWJBbnNNYXAuZ2V0KGxvY2FsUXVlcy5JZCkgKyAnJCRAQCMjJytsb2NhbFF1ZXMuaW5wdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNNaXNzaW5nSW5wdXQpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdmaWxlIHR3bycpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3ViQW5zTWFwLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIE1hcCcgKTtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gICAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSAodmFsdWUgIT0gdW5kZWZpbmVkID8gdmFsdWUgOiAnJykgKyAnQEAjIyQkJztcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnRyaW1MYXN0RHVtbXkodGhpcy5pbnBWYWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuZHJvcGRvd25GbGFnKSB7XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZS5sZW5ndGggPD0gMSkge1xuICAgICAgICB0aGlzLmlucFZhbHVlID0gXCIuXCI7XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5kdEZsYWcgJiYgdGhpcy5kYXRlRmxhZyAmJiB0aGlzLnRpbWVGbGFnKSB7XG4gICAgICAvL3RoaXMgb25lXG4gICAgICB0aGlzLmNoYW5nZSgpO1xuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSB0aGlzLmdldFByb3BlclRpbWUoXCIxMlwiLCB0aGlzLnNlbGVjdGVkSG91cik7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSB0aGlzLmdldFByb3BlclRpbWUoXCIwMFwiLCB0aGlzLnNlbGVjdGVkTWludXRlKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1lcmlkaWVtID0gdGhpcy5nZXRQcm9wZXJUaW1lKFwiQU1cIiwgdGhpcy5zZWxlY3RlZE1lcmlkaWVtKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmlucFZhbHVlLmxlbmd0aCk7XG5cbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLlgyNF9Ib3Vyc19fYyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9XG4gICAgICAgICAgICAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIlBNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgIT0gXCIxMlwiXG4gICAgICAgICAgICAgID8gTnVtYmVyKHRoaXMuc2VsZWN0ZWRIb3VyKSArIDEyXG4gICAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZEhvdXIpICtcbiAgICAgICAgICAgIFwiOlwiICtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgKyBcIiBQTVwiO1xuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPT09IFwiQU1cIiAmJiB0aGlzLnNlbGVjdGVkSG91ciA9PT0gXCIxMlwiKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9IFwiMDBcIiArIFwiOlwiICsgdGhpcy5zZWxlY3RlZE1pbnV0ZSArIFwiIEFNXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLnFiSXRlbS5Qcm9ncmVzc19CYXJfX2MpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgXCIgXCIgKyB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyBcIlRcIiArIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uWDI0X0hvdXJzX19jID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGU7XG4gICAgICAgICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYykge1xuICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyBcIiBcIiArIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZSArIFwiVFwiICsgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnFiSXRlbS5Qcm9ncmVzc19CYXJfX2MpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiYW5zID0+IFwiICsgdGhpcy5pbnBWYWx1ZSk7XG4gICAgICAgICAgdmFyIGRhdGUxOiBhbnkgPSB0aGlzLmlucFZhbHVlLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICBkYXRlMSA9IGRhdGUxWzBdLnNwbGl0KFwiL1wiKTtcbiAgICAgICAgICBkYXRlMSA9IFtkYXRlMVsyXSwgZGF0ZTFbMV0sIGRhdGUxWzBdXS5qb2luKFwiLVwiKTtcbiAgICAgICAgICBkYXRlMSA9IG5ldyBEYXRlKGRhdGUxKTtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGRhdGUxKVxuICAgICAgICAgIHZhciBkYXRlMjogYW55ID0gdGhpcy5pbnN1cmFuY2VTdGFydERhdGUuc3BsaXQoXCIgXCIpO1xuICAgICAgICAgIGRhdGUyID0gbmV3IERhdGUoZGF0ZTJbMF0pO1xuICAgICAgICAgIC8vY29uc29sZS5sb2coZGF0ZTIpO1xuICAgICAgICAgIGlmIChkYXRlMSA8IGRhdGUyKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yLmVycm9yTXNnID1cbiAgICAgICAgICAgICAgXCJObyBlcyBwb3NpYmxlIGRhciBkZSBhbHRhIGxhIHJlY2xhbWFjacOzbiBkZWJpZG8gYSBxdWUgbGEgZmVjaGEgZGVsIGluY2lkZW50ZSBlcyBhbnRlcmlvciBhIGxhIGZlY2hhIGRlIGNvbnRyYXRhY2nDs24gZGUgbGEgcMOzbGl6YVwiO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlJylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsRGF0ZSA9PT0gbnVsbCB8fCAhdGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGVfVGltZU1hcCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lRmxhZyAmJiB0aGlzLmR0RmxhZyAmJiAhdGhpcy5kYXRlRmxhZykge1xuICAgICAgdGhpcy5kYXRlX1RpbWVNYXAoKTtcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5YMjRfSG91cnNfX2MgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPVxuICAgICAgICAgICh0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPT09IFwiUE1cIiAmJiB0aGlzLnNlbGVjdGVkSG91ciAhPSBcIjEyXCJcbiAgICAgICAgICAgID8gTnVtYmVyKHRoaXMuc2VsZWN0ZWRIb3VyKSArIDEyXG4gICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRIb3VyKSArXG4gICAgICAgICAgXCI6XCIgK1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5zZWxlY3RlZEhvdXIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZS5sZW5ndGggPCA1KSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmRhdGVGbGFnICYmIHRoaXMuZHRGbGFnICYmICF0aGlzLnRpbWVGbGFnKSB7XG4gICAgICB0aGlzLmNoYW5nZSgpO1xuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUubGVuZ3RoIDwgNyB8fCB0aGlzLnNlbERhdGUgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuZmlsZUZsYWcpIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ2ZvdXInKVxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgICBpZiAodGhpcy5hdHRhY2htZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnRJdGVtIG9mIHRoaXMuYXR0YWNobWVudHMpIHtcbiAgICAgICAgICB0aGlzLmlucFZhbHVlICs9XG4gICAgICAgICAgICBhdHRhY2htZW50SXRlbS5hdHRhY2htZW50SWQgK1xuICAgICAgICAgICAgXCJAIyRcIiArXG4gICAgICAgICAgICBhdHRhY2htZW50SXRlbS5hdHRhY2htZW50TmFtZSArXG4gICAgICAgICAgICBcIixcIjtcbiAgICAgICAgfVxuICAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmlsZXNzcycgKyB0aGlzLmlucFZhbHVlKTtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUuc3Vic3RyKDAsIHRoaXMuaW5wVmFsdWUubGVuZ3RoIC0gMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciB0aGUgYW5zd2VyIGJlZm9yZSBzYXZpbmcgdG8gdGhlIERCXG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9uSXRlbS5Jc19PcHRpb25hbF9fYyAmJiAhdGhpcy5pbnBWYWx1ZSkge1xuICAgICAgLy8gU2hvdyBlcnJvciB0aGF0IHRoZSBxdWVzdGlvbiBtdXN0IGJlIGFuc3dlcmVkXG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gU2F2ZSB0aGUgQW5zd2VyIGluIHRoZSBEQlxuICAgIHRoaXMuYW5zd2VyV3JhcCA9IG5ldyBBbnN3ZXJXcmFwcGVyKCk7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLmFiSWQgPSB0aGlzLmFiSXRlbS5JZDtcbiAgICB0aGlzLmFuc3dlcldyYXAucXVlc0lkID0gY1F1ZXN0aW9uLklkO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5xdWVzVmFsdWUgPSBxdWVzVmFsdWU7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLnFUeXAgPSB0eXA7XG4gICAgLy8gSEEgMDJGRUIyNCBUbyBkaXNwbGF5IHRoZSB2YWx1ZXMgaW4gc3VtbWFyeSB1c2luZyB0aGlzXG4gICAgdGhpcy5hbGxJbnB1dFZhbHVlcyA9IFtdO1xuICAgIHRoaXMuc3ViUXVlc3Rpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICB2YXIgaW5wdXRWYWx1ZSA9IHt9O1xuICAgICAgaW5wdXRWYWx1ZVsnSWQnXSA9IGVsZW1lbnQ/LklkO1xuICAgICAgaW5wdXRWYWx1ZVsnVHlwZV9fYyddID0gZWxlbWVudD8uVHlwZV9fYztcbiAgICAgIGlucHV0VmFsdWVbJ1JlZmVyZW5jZV9GaWVsZF9fYyddID0gZWxlbWVudD8uUmVmZXJlbmNlX0ZpZWxkX19jO1xuICAgICAgaW5wdXRWYWx1ZVsnUXVlc3Rpb25fVGV4dF9fYyddID0gZWxlbWVudD8uUXVlc3Rpb25fVGV4dF9fYztcbiAgICAgIGlucHV0VmFsdWVbJ2lucHV0J10gPSBlbGVtZW50Py5pbnB1dDtcbiAgICAgIGlucHV0VmFsdWUgPyB0aGlzLmFsbElucHV0VmFsdWVzLnB1c2goaW5wdXRWYWx1ZSkgOiB0aGlzLmFsbElucHV0VmFsdWVzO1xuICAgIH0pO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5teVZhbCA9IHRoaXMuYWxsSW5wdXRWYWx1ZXM7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLmFuc1ZhbHVlID0gdGhpcy5pbnBWYWx1ZTtcbiAgICB0aGlzLmFuc3dlcldyYXAuZ3JvdXBUZXh0ID0gY1F1ZXN0aW9uLkdyb3VwX19jO1xuICAgIGNvbnNvbGUubG9nKCd0aGlzLmFuc3dlcldyYXAucVR5cCcsdGhpcy5hbnN3ZXJXcmFwLnFUeXApO1xuICAgaWYodGhpcy5hbnN3ZXJXcmFwLnFUeXAgPT0gXCJBbHBoYW51bWVyaWNcIil7XG4gICAgICB0aGlzLmFuc3dlcldyYXAuYW5zVmFsdWUgPSAnRVMnKyB0aGlzLmlucFZhbHVlO1xuICAgICAgLy8gY29uc29sZS5sb2coJ0JhbmsgY29uZGl0aW9uJyk7XG4gICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmFuc3dlcldyYXAuYW5zVmFsdWUpO1xuICAgIH1cbiAgICAvKmlmIChjUXVlc3Rpb24uVHlwZV9fYyA9PSAnQm9vaycpe1xuICAgIGZvciAodmFyIHFiIG9mIGNRdWVzdGlvbi5RdWVzdGlvbnNfX3IucmVjb3Jkcyl7XG4gICAgICAvL2NvbnNvbGUubG9nKHFiLlF1ZXN0aW9uX19jKycqKioqJytcIkBAIyMkJFwiKVxuICAgIH0gXG4gIH0qL1xuICAgIC8vdGhpcy5hbnN3ZXJXcmFwLnNxdWVzVmFsdWUgPSBjUXVlc3Rpb24uUXVlc3Rpb25fX2M7XG4gICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSB0aGlzLmlucFZhbHVlO1xuICAgIC8vIGVtaXQgdGhlIGN1cnJlbnQgcXVlc3Rpb24gd2l0aCBpbnB1dCB0byBwYXJlbnRcbiAgICB0aGlzLmhhbmRsZVF1ZXN0aW9uLmVtaXQodGhpcy5xdWVzdGlvbkl0ZW0pO1xuICAgIGNvbnNvbGUubG9nKCdxdWVzdGlvbkl0ZW0tLT4nKTtcbiAgICBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbSk7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLnNxdWVzVmFsdWUgPSBxdWVzdGlvblR4dCA/IHF1ZXN0aW9uVHh0IDogY1F1ZXN0aW9uLlF1ZXN0aW9uX19jO1xuICAgIHRoaXMuc2F2ZUFuc3dlcigpO1xuICB9XG5cbiAgbmV4dCgpIHtcbiAgICB2YXIgY1F1ZXN0aW9uOiBRdWVzdGlvbiA9IG5ldyBRdWVzdGlvbigpO1xuICAgIGNRdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25JdGVtO1xuICAgIHZhciB0eXAgPSBjUXVlc3Rpb24uVHlwZV9fYztcbiAgICAvLyBJZiBubyBlcnJvciB0aGVuIG1vdmUgdG8gbmV4dCBzdGVwc1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucXVlc3Rpb25TdGFjay5wdXNoKGNRdWVzdGlvbi5JZCk7XG4gICAgLy8gIHRoaXMucXVlc3Rpb25OYW1lLnB1c2goY1F1ZXN0aW9uLk5hbWUpO1xuICAgIFxuICAgIC8vIENPTkRJVElPTkFMIHZzIE9QVElPTk9OTFkgJiBVTkNPTkRJVElPTkFMXG4gICAgLy8gSEEgMzEtSkFOLTI0IEFkZGVkIHRlcm5hcnkgZXZlbiBpbiBlbHNlIGNvbmRpdGlvbnMgYmVsb3dcbiAgICBpZiAoY1F1ZXN0aW9uPy5SZWNvcmRUeXBlPy5OYW1lID09IFwiQ09ORElUSU9OQUxcIikge1xuICAgICAgZm9yICh2YXIgY09wdCBvZiBjUXVlc3Rpb24uUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzKSB7XG4gICAgICAgIC8vIFJhZGlvIC8gRGF0YVxuICAgICAgICAvL2NvbnNvbGUubG9nKCdPcHRpb24gPT4gJyArIGNPcHQuVmFsdWVfX2MgKyAnIG1hdGNoaW5nIHdpdGggJyArIGFuc1ZhbCk7XG4gICAgICAgIGlmIChjT3B0LlZhbHVlX19jID09IHRoaXMuaW5wVmFsdWUpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdNYXRjaCBGb3VuZCB1c2luZyAnICsgY09wdC5OZXh0X1F1ZXN0aW9uX19jKTtcbiAgICAgICAgICB0aGlzLnJlY29yZElkID0gY09wdC5OZXh0X1F1ZXN0aW9uX19jO1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ2NvbmRpdGlvbmFsIHJlY29yZCBpZCcrIHRoaXMucmVjb3JkSWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBDb3VsZCBiZSBvZiB0eXBlIERhdGEgYW5kIGV4aXN0aW5nIHZhbHVlXG4gICAgICBpZiAodGhpcy5yZWNvcmRJZCAmJiB0eXAgPT0gXCJEYXRhXCIpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY1F1ZXN0aW9uPy5SZWNvcmRUeXBlPy5OYW1lID09IFwiT1BUSU9OT05MWVwiKSB7XG4gICAgICAvLyAgT1BUSU9OT05MWSBsb2dpY1xuICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jO1xuICAgIH0gZWxzZSBpZiAoY1F1ZXN0aW9uPy5SZWNvcmRUeXBlPy5OYW1lID09IFwiVU5DT05ESVRJT05BTFwiKSB7XG4gICAgICAvL1VuY29uZGl0aW9uYWwgIGxvZ2ljXG4gICAgICAvL2NvbnNvbGUubG9nKFwiaW5zaWRlIHVuY29uZGl0aW9uYWxcIik7XG4gICAgICAvL2luc2lkZSBCb29rIFR5cGVcbiAgICAgIGlmIChjUXVlc3Rpb24uVHlwZV9fYyA9PSBcIkJvb2tcIiAmJiBjUXVlc3Rpb24uUXVlc3Rpb25fTm9fX2MgIT0nNicpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcImluc2lkZSBib29rXCIpO1xuICAgICAgICBmb3IgKGxldCBvcHQgb2YgY1F1ZXN0aW9uLlF1ZXN0aW9uc19fci5yZWNvcmRzKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhvcHQuVHlwZV9fYyk7XG4gICAgICAgICAgaWYgKG9wdC5UeXBlX19jID09IFwiRHJvcGRvd25cIiB8fCBvcHQuVHlwZV9fYyA9PSBcIlJhZGlvXCIpIHtcbiAgICAgICAgICAgIGZvciAodmFyIG9wdDEgb2Ygb3B0LlF1ZXN0aW9uX09wdGlvbnNfX3IucmVjb3Jkcykge1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVOYW1lID09IG9wdDEuVmFsdWVfX2MpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlY29yZElkID1vcHQxLk5leHRfUXVlc3Rpb25fX2MgfHwgY1F1ZXN0aW9uLk5leHRfUXVlc3Rpb25fX2M7ICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnRWxzZScrdGhpcy5yZWNvcmRJZClcbiAgICAgICAgICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLk5leHRfUXVlc3Rpb25fX2M7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZihjUXVlc3Rpb24uVHlwZV9fYyA9PSBcIkJvb2tcIiAmJiBjUXVlc3Rpb24uUXVlc3Rpb25fTm9fX2MgPT0nNicgKSB7XG4gICAgICAgIGZvciAobGV0IG9wdCBvZiBjUXVlc3Rpb24uUXVlc3Rpb25zX19yLnJlY29yZHMpIHtcbiAgICAgICAgICBpZiAob3B0LlR5cGVfX2MgPT0gXCJEcm9wZG93blwiIHx8IG9wdC5UeXBlX19jID09IFwiUmFkaW9cIil7XG4gICAgICAgICAgZm9yICh2YXIgb3B0MSBvZiBvcHQuUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZU5hbWUgPT0gb3B0MS5WYWx1ZV9fYykge1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IG9wdDEuTmV4dF9RdWVzdGlvbl9fYzsgIFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9ICAgIFxuICAgICAgXG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBIQSAzMS1KQU4tMjQgQWRkZWQgZWxzZSB0byBrZWVwIHRoZSBhc3NpZ25tZW50IGRlZmF1bHRcbiAgICBlbHNle1xuICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jO1xuICAgIH1cblxuICAgIC8vIENBVEVHT1JJWkFUSU9OXG4gICAgLy90aGlzLnN0ZXBwZXJDYXRlZygpO1xuXG4gICAgLy8gQ2FsbGluZyB0aGUgcHJvZ3JlcyBiYXIgdXBkYXRlIGZ1bmN0aW9uXG4gICAgdGhpcy5hbnN3ZXJDb3VudCsrO1xuICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3MoKTtcblxuXG4gICAgLy8gQ0FURUdPUklaQVRJT05cbiAgICAvL3RoaXMuc3RlcHBlckNhdGVnKCk7XG5cbiAgICBpZiAodGhpcy5yZWNvcmRJZCkge1xuICAgICAgLy9jb25zb2xlLmxvZygnQmVmb3JlIENhbGxpbmcgcmVhZFF1ZXN0aW9uKCkgdXNpbmcgJyArIHJlY29yZElkKTtcbiAgICAgIHRoaXMucmVhZFF1ZXN0aW9uKHRoaXMucmVjb3JkSWQpO1xuICAgICAgdGhpcy5wb3AgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBvcCA9IGZhbHNlO1xuICAgICAgLy9jb25zb2xlLmxvZygnU3VtbWFyeSBQYWdlIExvZ2ljJyk7XG4gICAgICAvLyBSZXNldCB0aGUgVmFyaWFibGVzXG4gICAgICB0aGlzLmlucFZhbHVlID0gXCJcIjtcbiAgICAgIHRoaXMuYW5zd2VyV3JhcCA9IG5ldyBBbnN3ZXJXcmFwcGVyKCk7XG4gICAgICB0aGlzLm9wdGlvblZhbHVlcyA9IFtdO1xuICAgICAgdGhpcy5zdWJRdWVzdGlvbnMgPSBbXTtcblxuICAgICAgdGhpcy5yZXNldEZsYWcodHlwKTtcbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtID0gbnVsbDtcblxuICAgICAgLy8gU2hvdyBTdW1tYXJ5XG4gICAgICBmb3IgKHZhciBxIG9mIHRoaXMucXVlc3Rpb25TdGFjaykge1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdIYW5kbGluZyBRdWVzdGlvbiA9PiAnICsgcSk7XG4gICAgICAgIHZhciBhbnNXcmFwID0gdGhpcy5hbnN3ZXJNYXAuZ2V0KHEpO1xuICAgICAgICBpZiAoYW5zV3JhcCkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ0hhbmRsaW5nIEFuc3dlciBmb3IgJyArIGFuc1dyYXAucXVlc0lkICsgJyBvZiB0eXBlICcgKyBhbnNXcmFwLnFUeXApO1xuICAgICAgICAgIGlmKGFuc1dyYXAucVR5cCA9PSAnRmlsZScgfHwgYW5zV3JhcC5xVHlwID09ICdCb29rJ3x8YW5zV3JhcC5xVHlwID09ICdMaXN0JyB8fCBhbnNXcmFwLnFUeXAgPT0gJ0NoZWNrYm94Jyl7XG4gICAgICAgICAgICB2YXIgbmV3U3RyID0gJyc7XG4gICAgICAgICAgICBmb3IgKHZhciBhbnNTdHIgb2YgYW5zV3JhcC5hbnNWYWx1ZS5zcGxpdCgnQEAjIyQkJykpIHtcbiAgICAgICAgICAgICAgZm9yICh2YXIgYW5zU3RyMSBvZiBhbnNTdHIuc3BsaXQoJyQkQEAjIycpKSB7XG4gICAgICAgICAgICAgIC8vICBpZihhbnNTdHIxLmluY2x1ZGVzKCdhbnN3ZXJTdHJpbmcnKSl7IC8vcmVtb3ZlIHRoZSBhbnN3ZXIgc3RyaW5nICBcbiAgICAgICAgICAgICAgIC8vICAgY29uc3Qgd2l0aG91dEFuc3dlclN0cmluZyA9IGFuc1N0cjEucmVwbGFjZShcImFuc3dlclN0cmluZzogXCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgIC8vICBhbnNTdHIxID0gd2l0aG91dEFuc3dlclN0cmluZztcbiAgICAgICAgICAgICAgLy8gIH1cbiAgICAgICAgICAgICAgICBpZiAoYW5zU3RyMS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICBpZiAobmV3U3RyLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciA9IGFuc1N0cjE7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdTdHIgKz0gJzsgJyArIGFuc1N0cjE7ICAvL2NvbW1hKCwpIGNoYW5nZWQgYXMgc2VtaSBjb2xvbig7KSBiZWNhdXNlIG9mIGFkZHJlc3MgY29udGFpbnMgY29tbWEoLCkgXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuYXR0YWNobWVudHNNYXAuaGFzKGFuc1dyYXAucXVlc0lkKSl7XG4gICAgICAgICAgICAgICAgICAgICAgZm9yKHZhciBhdHQgb2YgdGhpcy5hdHRhY2htZW50c01hcC5nZXQoYW5zV3JhcC5xdWVzSWQpKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1N0ciA9IG5ld1N0ci5yZXBsYWNlKGF0dC5hdHRhY2htZW50SWQsJycpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBuZXdTdHIgPSAobmV3U3RyLnJlcGxhY2UoJywsJywnLCAnKSkucmVwbGFjZSgnLCAsJywnLCAnKTtcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyID0gbmV3U3RyLnN0YXJ0c1dpdGgoJywnKSA/IG5ld1N0ci5zdWJzdHJpbmcoMSwgbmV3U3RyLmxlbmd0aCkgOiAobmV3U3RyLmVuZHNXaXRoKCcsJykgPyBuZXdTdHIuc3Vic3RyaW5nKDAsIG5ld1N0ci5sZW5ndGggLSAxKSA6IG5ld1N0cik7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9YW5zV3JhcC5hbnNWYWx1ZSA9IG5ld1N0cjtcbiAgICAgICAgICAgIGFuc1dyYXAubXlWYWwgPSB0aGlzLmFsbElucHV0VmFsdWVzO1xuICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zV3JhcCk7XG4gICAgICAgICAgdGhpcy5iYWNraWNvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRUZXh0KHZhbHVlKSB7XG4gICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcodmFsdWUsIFwidGV4dC9odG1sXCIpO1xuICAgIC8vY29uc29sZS5sb2coIGRvYy5kb2N1bWVudEVsZW1lbnQudGV4dENvbnRlbnQpO1xuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChcbiAgICAgIGRvYy5kb2N1bWVudEVsZW1lbnQudGV4dENvbnRlbnRcbiAgICApO1xuICB9XG5cbiAgaGFuZGxlQmFja0NsaWNrKCkge1xuICAgIHRoaXMuYmFjayA9IHRydWU7XG4gICAgaWYgKHRoaXMucG9wID09PSB0cnVlKSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uTmFtZS5wb3AoKTtcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHRoaXMucWJJdGVtLkJhY2tfVHJhY2tpbmdfSURfX2MpO1xuICAgIHZhciBjUXVlc3Rpb246IFF1ZXN0aW9uID0gbmV3IFF1ZXN0aW9uKCk7XG4gICAgY1F1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkl0ZW07XG4gICAgaWYoY1F1ZXN0aW9uLlF1ZXN0aW9uX05vX19jID09JzEnKXtcbiAgICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5CYWNrX19jKTtcbiAgICB9XG4gICAgXG5cbiAgICB0aGlzLmFuc3dlckNvdW50LS07XG4gICAgdGhpcy51cGRhdGVQcm9ncmVzcygpO1xuICAgIC8vIENBVEVHT1JJWkFUSU9OXG4gICAgLy90aGlzLnN0ZXBwZXJDYXRlZygpO1xuXG4gICAgaWYgKHRoaXMuc3VtbWFyeSkge1xuICAgICAgLy9jb25zb2xlLmxvZygnc3VtbWFyeSB0cnVlJyk7XG4gICAgICB0aGlzLnN1bW1hcnkgPSBbXTtcbiAgICB9XG4gICAgaWYodGhpcy5zdW1tYXJ5RGF0YSl7XG4gICAgICB0aGlzLnN1bW1hcnlEYXRhID1bXTtcbiAgICB9XG5cbiAgICAvLyBSZWFkIHRoZSBwcmV2aW91cyBxdWVzdGlvbiBmcm9tIERCXG4gICAgdGhpcy5yZWFkUXVlc3Rpb24odGhpcy5xdWVzdGlvblN0YWNrLnBvcCgpKTtcbiAgICAvL2NvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25TdGFjayk7XG4gIH1cblxuICBoYW5kbGVCYWNrQ2xpY2tOZXcoKSB7XG4gICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHRoaXMucWJJdGVtLkVkaXRfX2MpO1xuICB9XG5cbiAgLy91cGRhdGluZyBzdGF0dXMgb25jZSBRJkEgY29tcGxldGVkLlxuXG4gIHByaXZhdGUgdXBkYXRlQW5zd2VyQm9vayA9ICh1dWlkOiBzdHJpbmcpID0+IHtcbiAgICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIikge1xuICAgICAgLy8gdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAgLy8gICB0aGlzLnRrbixcbiAgICAgIC8vICAgW1wiQW5zd2VyQm9va1wiLCBcIlVwZGF0ZVwiLCB1dWlkXSxcbiAgICAgIC8vICAgdGhpcy5zdWNjZXNzdXBkYXRlQUIsXG4gICAgICAvLyAgIHRoaXMuZmFpbHVyZXVwZGF0ZUFCXG4gICAgICAvLyApO1xuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnQW5zd2VyQm9vaycsJ1VwZGF0ZScsdXVpZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgIChkYXRhKT0+e1xuICAgICAgICBjb25zb2xlLmxvZygndXBkYXRlZCBzdWNjdXNzZnVsbHknKTtcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgIHRoaXMuc3VjY2Vzc3VwZGF0ZUFCKEpTT04ucGFyc2UoZGF0YSkpXG4gICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgICB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFZEIDE1RkVCMjQgLSB1c2VkIHByb2Nlc3NOZXcgbWV0aG9kIFxuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gLy8gVkQgMTJKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLm5ld1Byb2Nlc3NcIixcbiAgICAgICAgW1wiQW5zd2VyQm9va1wiLCBcIlVwZGF0ZVwiLCB1dWlkLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSwnJ10sXG4gICAgICAgIHRoaXMuc3VjY2Vzc3VwZGF0ZUFCLFxuICAgICAgICB0aGlzLmZhaWx1cmV1cGRhdGVBQlxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN1Y2Nlc3N1cGRhdGVBQiA9IChyZXNwb25zZSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICAvLyAvL2NvbnNvbGUubG9nKCdzdGF0dXMgc3VjY2VzcycpXG4gICAgdGhpcy5hYkl0ZW0uU3RhdHVzX19jID0gXCJDb21wbGV0ZWRcIjtcbiAgfTtcbiAgcHJpdmF0ZSBmYWlsdXJldXBkYXRlQUIgPSAocmVzcG9uc2UpID0+IHtcbiAgICAvL2NvbnNvbGUubG9nKCdzdGF0dXMgZmFpbGVkJylcbiAgfTtcblxuICBwcml2YXRlIHJlYWRRdWVzdGlvbkJvb2sgPSAodXVpZDogc3RyaW5nKSA9PiB7XG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgIC8vICAgdGhpcy50a24sXG4gICAgICAvLyAgIFtcIlF1ZXN0aW9uQm9va1wiLCBcInJlYWRcIiwgdXVpZF0sXG4gICAgICAvLyAgIHRoaXMuc3VjY2Vzc1JlYWRCb29rLFxuICAgICAgLy8gICB0aGlzLmZhaWx1cmVSZWFkQm9va1xuICAgICAgLy8gKTtcbiAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zaG93TG9hZGVyKCk7XG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiB0cnVlIH07XG4gICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ1F1ZXN0aW9uQm9vaycsJ3JlYWQnLHV1aWQsSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YSk9PntcbiAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGVMb2FkZXIoKTtcbiAgICAgICAgY29uc29sZS5sb2coJ2RhdGEgY2FtZSBzdWNlc3NmdWxseScpO1xuICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UuaGlkZSgpO1xuICAgICAgICB0aGlzLnN1Y2Nlc3NSZWFkQm9vayhKU09OLnBhcnNlKGRhdGEpKVxuICAgICAgfSwoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHF1ZXN0aW9uIGJvb2tzJywgZXJyb3IpO1xuICAgICAgfVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBNUiAzMEpBTjI0IC0gUGFzc2luZyBmbGFnIGZyb20gTkdOWFRcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IHRydWUgfTtcbiAgICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAgLy8gLCBKU09OLnN0cmluZ2lmeShwYXJhbU1hcClcbiAvLyBWRCAxMkp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLm5ld1Byb2Nlc3NcIixcbiAgICAgICAgW1wiUXVlc3Rpb25Cb29rXCIsIFwicmVhZFwiLCB1dWlkLCBKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksJyddLFxuICAgICAgICB0aGlzLnN1Y2Nlc3NSZWFkQm9vayxcbiAgICAgICAgdGhpcy5mYWlsdXJlUmVhZEJvb2tcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdWNjZXNzUmVhZEJvb2sgPSAocmVzcG9uc2UpID0+IHtcbiAgICBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBzdWNjZXNzUmVhZEJvb2snKTtcbiAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgaWYocmVzcG9uc2UgIT0gbnVsbCB8fCByZXNwb25zZSAhPSB1bmRlZmluZWQpe1xuICAgICAgdGhpcy5xYkl0ZW0gPSByZXNwb25zZS5xdWVzdGlvbmJvb2s7XG4gICAgICB0aGlzLmFiSXRlbSA9IHJlc3BvbnNlLmFuc3dlcmJvb2s7XG4gICAgfVxuICAgLy8gY29uc29sZS5sb2coJ3JlYWRpbmdRdWVzdGlvbiB1c2luZyAnICsgdGhpcy5xYkl0ZW0pO1xuICAgIGlmICh0aGlzLmFiSXRlbT8uU3RhdHVzX19jID09IFwiUGVuZGluZ1wiKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuYWJJdGVtLkFuc3dlcnNfX3IgPT0gbnVsbCB8fFxuICAgICAgICB0aGlzLmFiSXRlbS5BbnN3ZXJzX19yLnJlY29yZHMubGVuZ3RoID09IDBcbiAgICAgICkge1xuICAgICAgICB0aGlzLnJlYWRRdWVzdGlvbih0aGlzLnFiSXRlbS5GaXJzdF9RdWVzdGlvbl9fYyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBQb3B1bGF0ZSB0aGUgZXhpc3RpbmcgYW5zd2Vyc1xuICAgICAgICB2YXIgbGFzdFF1ZXN0aW9uSWQgPSBcIlwiO1xuXG4gICAgICAgIGZvciAodmFyIGFuc09iamVjdCBvZiB0aGlzLmFiSXRlbS5BbnN3ZXJzX19yLnJlY29yZHMpIHtcbiAgICAgICAgICBsYXN0UXVlc3Rpb25JZCA9IGFuc09iamVjdC5RdWVzdGlvbl9SZWZfX2M7XG5cbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucHVzaChhbnNPYmplY3QuUXVlc3Rpb25fUmVmX19jKTtcblxuICAgICAgICAgIHRoaXMuYW5zd2VyTWFwLnNldChhbnNPYmplY3QuUXVlc3Rpb25fUmVmX19jLCB7XG4gICAgICAgICAgICBxdWVzVmFsdWU6IGFuc09iamVjdC5RdWVzdGlvbl9SaWNoX1RleHRfX2MsXG4gICAgICAgICAgICBhbnNWYWx1ZTogYW5zT2JqZWN0LkFuc3dlcl9Mb25nX19jLFxuICAgICAgICAgICAgcXVlc0lkOiBhbnNPYmplY3QuUXVlc3Rpb25fUmVmX19jLFxuICAgICAgICAgICAgcVR5cDogYW5zT2JqZWN0LlF1ZXN0aW9uX1R5cGVfX2MsXG4gICAgICAgICAgICBncm91cFRleHQ6YW5zT2JqZWN0LlF1ZXN0aW9uX0dyb3VwX1RleHRfX2MsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25TdGFjaylcbiAgICAgICAgICBpZiAoYW5zT2JqZWN0LlF1ZXN0aW9uX1R5cGVfX2MgPT0gXCJCb29rXCIpIHtcbiAgICAgICAgICAgIHZhciBhdjEgPSBhbnNPYmplY3QuQW5zd2VyX0xvbmdfX2Muc3BsaXQoXCJAQCMjJCRcIik7XG4gICAgICAgICAgICAvLyAvL2NvbnNvbGUubG9nKFwiYm9vayBsb2dcIik7XG5cbiAgICAgICAgICAgIC8vICAvL2NvbnNvbGUubG9nKFwiYm9va2lkXCIgKyBhdjFbMF0pO1xuICAgICAgICAgICAgdGhpcy5hdHRhY2htZW50c01hcC5zZXQoYW5zT2JqZWN0LlF1ZXN0aW9uX1JlZl9fYywgW1xuICAgICAgICAgICAgICB7IGF0dGFjaG1lbnROYW1lOiBhdjFbMV0sIGF0dGFjaG1lbnRJZDogYXYxWzBdIH0sXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIC8vICAvL2NvbnNvbGUubG9nKHRoaXMuYXR0YWNobWVudHNNYXApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYW5zT2JqZWN0LlF1ZXN0aW9uX1R5cGVfX2MgPT0gXCJGaWxlXCIpIHtcbiAgICAgICAgICAgIC8vICAvL2NvbnNvbGUubG9nKFwiaW5zaWRlIGlmXCIpO1xuICAgICAgICAgICAgdmFyIGF0dExpc3Q7XG4gICAgICAgICAgICB2YXIgYXR0O1xuICAgICAgICAgICAgZm9yICh2YXIgYXR0VmFyIG9mIGFuc09iamVjdC5BbnN3ZXJfTG9uZ19fYy5zcGxpdChcIixcIikpIHtcbiAgICAgICAgICAgICAgdmFyIGF0dElkTmFtZSA9IGF0dFZhci5zcGxpdChcIkBAIyMkJFwiKTtcbiAgICAgICAgICAgICAgYXR0LmF0dGFjaG1lbnROYW1lID0gYXR0SWROYW1lWzFdO1xuICAgICAgICAgICAgICBhdHQuYXR0YWNobWVudElkID0gYXR0SWROYW1lWzBdO1xuICAgICAgICAgICAgICBhdHRMaXN0LnB1c2goYXR0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXR0YWNobWVudHNNYXAuc2V0KGFuc09iamVjdC5RdWVzdGlvbl9SZWZfX2MsIGF0dExpc3QpO1xuICAgICAgICAgICAgLy8gIC8vY29uc29sZS5sb2codGhpcy5hdHRhY2htZW50c01hcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5xdWVzdGlvblN0YWNrLnBvcCgpO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuYW5zd2VyTWFwKTtcbiAgICAgICAgLy8gUmVhZCB0aGUgbGFzdCBhbnN3ZXJlZCBxdWVzdGlvblxuICAgICAgICB0aGlzLnJlYWRRdWVzdGlvbihsYXN0UXVlc3Rpb25JZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmFiSXRlbT8uU3RhdHVzX19jID09IFwiQ29tcGxldGVkXCIpIHtcbiAgICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdChcIlN1bW1hcnl1cGRhdGVkXCIpO1xuICAgICAgLy8gVGVtcG9yYXJ5IEZpeCBmb3IgZHVwbGljYXRlIGFuc3dlcnMgb24gdGhlIHN1bW1hcnkuXG4gICAgICB0aGlzLnN1bW1hcnkgPSBbXTtcbiAgICAgIHRoaXMucGVyY2VudCA9IDEwMDtcbiAgICAgIHRoaXMucHJvZ3Jlc3NTdHlsZSA9IFwiMTAwJVwiO1xuXG4gICAgICBmb3IgKHZhciBhbnN3ZXIgb2YgdGhpcy5hYkl0ZW0uQW5zd2Vyc19fci5yZWNvcmRzKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYW5zd2VyLlF1ZXN0aW9uX0dyb3VwX1RleHRfX2MpO1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdyZXBlYXQnKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhhbnN3ZXIuUXVlc3Rpb25fUmljaF9UZXh0X19jKTtcbiAgICAgICAgdmFyIGFuc3dlcnMgPSB7fTtcbiAgICAgICAgaWYgKGFuc3dlci5RdWVzdGlvbl9UeXBlX19jID09IFwiRmlsZVwiKSB7XG4gICAgICAgICAgdmFyIGZpbGVzID0gXCJcIjtcbiAgICAgICAgICB2YXIgZkluZGV4ID0gMDtcbiAgICAgICAgICB2YXIgZmlsZUxpc3QgPSBhbnN3ZXIuQW5zd2VyX0xvbmdfX2Muc3BsaXQoXCIsXCIpO1xuICAgICAgICAgIGZvciAodmFyIGZpbGVJZE5hbWUgb2YgZmlsZUxpc3QpIHtcbiAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGZpbGVJZE5hbWUuc3BsaXQoXCJAIyRcIik7XG4gICAgICAgICAgICBpZiAoZkluZGV4ID09IDApIHtcbiAgICAgICAgICAgICAgZmlsZXMgPSBmaWxlTmFtZVsxXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZpbGVzID0gZmlsZXMgKyBcIiAsXCIgKyBmaWxlTmFtZVsxXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZkluZGV4Kys7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYW5zd2VycyA9IHtcbiAgICAgICAgICAgIGdyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyxcbiAgICAgICAgICAgIHF1ZXNWYWx1ZTogYW5zd2VyLlF1ZXN0aW9uX1JpY2hfVGV4dF9fYyxcbiAgICAgICAgICAgIGFuc1ZhbHVlOiBmaWxlcyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xuICAgICAgICB9IGVsc2UgaWYgKGFuc3dlci5RdWVzdGlvbl9UeXBlX19jID09IFwiQm9va1wiKSB7XG4gICAgICAgICAgLyogIHZhciBxdWVzTm89MDtcbiAgICAgICAgIGlmKGFuc3dlci5BbnN3ZXJfTG9uZ19fYy5pbmNsdWRlcyhcIkBAIyMkJFwiKSl7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdsaW5lIDEyMjMnKTtcbiAgICAgICAgICAgIGZvciAodmFyIGJxQW5zd2VyVmFsdWUgb2YgYW5zd2VyLkFuc3dlcl9Mb25nX19jLnNwbGl0KFwiQEAjIyQkXCIpKSB7XG4gICAgICAgICAgICAgIHZhciBxdWVzVmFsdWU9YW5zd2VyLlF1ZXN0aW9uX1RleHRfX2Muc3BsaXQoXCJAQCMjJCRcIik7XG4gICAgICAgICAgICAgIGFuc3dlcnMgPSB7fTtcbiAgICAgICAgICAgICAgYW5zd2VycyA9IHtcbiAgICAgICAgICAgICAgIC8vIGdyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fVGV4dF9fYyxcbiAgICAgICAgICAgICAgICBxdWVzVmFsdWU6ICBcIiZsdDtwJmd0O1wiKyBxdWVzVmFsdWVbcXVlc05vXStcIiZsdDtwJmd0O1wiLFxuICAgICAgICAgICAgICAgIGFuc1ZhbHVlOiBicUFuc3dlclZhbHVlLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBxdWVzTm8rKztcbiAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgIH0qL1xuICAgICAgICAgIGlmKGFuc3dlci5BbnN3ZXJfTG9uZ19fYy5pbmNsdWRlcyhcIkBAIyMkJFwiKSl7XG4gICAgICAgICAgICB2YXIgYW5zd2VydmFsdWVzID0gYW5zd2VyLkFuc3dlcl9Mb25nX19jLnNwbGl0KFwiQEAjIyQkXCIpO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygndmFsdWUnKVxuICAgICAgICAgICAgYW5zd2VycyA9IHsgICAgICBcbiAgICAgICAgICAgICAvL2dyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyxcbiAgICAgICAgICAgICBxdWVzVmFsdWU6IGFuc3dlci5RdWVzdGlvbl9SaWNoX1RleHRfX2MsXG4gICAgICAgICAgICAgYW5zVmFsdWU6IGFuc3dlcnZhbHVlcyxcbiAgICAgICAgICAgfTtcbiAgICAgICAgICAgLy9jb25zb2xlLmxvZyhhbnN3ZXJzKVxuICAgICAgICAgICB0aGlzLnN1bW1hcnkucHVzaChhbnN3ZXJzKTtcbiAgICAgICAgICAgfVxuICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICBhbnN3ZXJzID0geyAgICAgIFxuICAgICAgICAgICAgICAvL2dyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyxcbiAgICAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnN3ZXIuUXVlc3Rpb25fUmljaF9UZXh0X19jLFxuICAgICAgICAgICAgICBhbnNWYWx1ZTogYW5zd2VyLkFuc3dlcl9Mb25nX19jLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgIC8vIHZhciBhbnMxID0gYW5zd2VyLkFuc3dlcl9Mb25nX19jLnNwbGl0KFwiQEAjIyQkXCIpO1xuICAgICAgICAgIGFuc3dlcnMgPSB7ICAgICAgXG4gICAgICAgICAgICAvL2dyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyxcbiAgICAgICAgICAgIHF1ZXNWYWx1ZTogYW5zd2VyLlF1ZXN0aW9uX1JpY2hfVGV4dF9fYyxcbiAgICAgICAgICAgIGFuc1ZhbHVlOiBhbnN3ZXIuQW5zd2VyX0xvbmdfX2MsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLnN1bW1hcnkucHVzaChhbnN3ZXJzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGZhaWx1cmVSZWFkQm9vayA9IChyZXNwb25zZSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGZhaWx1cmVSZWFkQm9vaycpO1xuICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRBbnN3ZXJib29rID0gKHV1aWQ6IHN0cmluZykgPT4ge1xuICAgIGlmKHRoaXMuc2VydiA9IFwiYXBpXCIpIHtcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgICAgdGhpcy50a24sXG4gICAgICAgIFtcIkFuc3dlckJvb2tcIiwgXCJyZWFkXCIsIHV1aWRdLFxuICAgICAgICB0aGlzLnN1Y2Nlc3NBbnN3ZXJCb29rUmVhZCxcbiAgICAgICAgdGhpcy5mYWlsdXJlQW5zd2VyQm9va1JlYWRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFZEIDE1RkVCMjQgLSB1c2VkIHByb2Nlc3NOZXcgbWV0aG9kIFxuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gLy8gVkQgMTJKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLm5ld1Byb2Nlc3NcIixcbiAgICAgICAgW1wiQW5zd2VyQm9va1wiLCBcInJlYWRcIiwgdXVpZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksJyddLFxuICAgICAgICB0aGlzLnN1Y2Nlc3NBbnN3ZXJCb29rUmVhZCxcbiAgICAgICAgdGhpcy5mYWlsdXJlQW5zd2VyQm9va1JlYWRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cblxuICBwcml2YXRlIHN1Y2Nlc3NBbnN3ZXJCb29rUmVhZCA9IChyZXNwb25zZSkgPT4ge1xuICAgIGlmICh0aGlzLmFiSXRlbT8uU3RhdHVzX19jID09IFwiQ29tcGxldGVkXCIpIHtcbiAgICAgIGZvciAodmFyIGFuc3dlciBvZiB0aGlzLmFiSXRlbS5BbnN3ZXJzX19yLnJlY29yZHMpIHtcbiAgICAgICAgdmFyIGF2ID0gYW5zd2VyLkFuc3dlcl9Mb25nX19jLnNwbGl0KFwiQEAjIyQkXCIpO1xuICAgICAgICB2YXIgYW5zd2VycyA9IHsgcXVlc1ZhbHVlOiBhbnN3ZXIuUXVlc3Rpb25fUmljaF9UZXh0X19jLCBhbnNWYWx1ZTogYXYsIGdyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyB9O1xuICAgICAgICAvL2NvbnNvbGUubG9nKGFuc3dlcnMpXG4gICAgICAgIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xuICAgICAgfVxuICAgICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KFwiU3VtbWFyeXVwZGF0ZWRcIik7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgZmFpbHVyZUFuc3dlckJvb2tSZWFkID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZhaWx1cmVyZWFkJyk7XG4gICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkUXVlc3Rpb24gPSAodXVpZDogc3RyaW5nKSA9PiB7XG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgIC8vICAgdGhpcy50a24sXG4gICAgICAvLyAgIFtcIlF1ZXN0aW9uXCIsIFwicmVhZFwiLCB1dWlkXSxcbiAgICAgIC8vICAgdGhpcy5zdWNjZXNzUmVhZCxcbiAgICAgIC8vICAgdGhpcy5mYWlsdXJlUmVhZFxuICAgICAgLy8gKTtcbiAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zaG93TG9hZGVyKCk7XG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiB0cnVlIH07XG4gICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ1F1ZXN0aW9uJywncmVhZCcsdXVpZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgICAgKGRhdGEpPT57XG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGVMb2FkZXIoKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnZGF0YSBjYW1lIHN1Y2Vzc2Z1bGx5Jyk7XG4gICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgICAgdGhpcy5zdWNjZXNzUmVhZChKU09OLnBhcnNlKGRhdGEpKVxuICAgICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5oaWRlTG9hZGVyKCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHF1ZXN0aW9uIGJvb2tzJywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgIC8vIC8vIFZEIDE1RkVCMjQgLSBtYWtlIGNyZWF0ZUFuc3dlckJvb2tGbGFnIGZhbHNlIG9ubHlcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuXG4gICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAgICBcIk54dENvbnRyb2xsZXIubmV3UHJvY2Vzc1wiLFxuICAgICAgICBbXCJRdWVzdGlvblwiLCBcInJlYWRcIiwgdXVpZCwgSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLCcnXSxcbiAgICAgICAgdGhpcy5zdWNjZXNzUmVhZCxcbiAgICAgICAgdGhpcy5mYWlsdXJlUmVhZFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN1Y2Nlc3NSZWFkID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgY29uc29sZS5sb2coJ0luc2lkZSB0aGUgc3VjY2Vzc1JlYWQnKTtcbiAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgLy8gSEEgMDJGRUIyNCBGb3IgdGVzdGluZyBmb3IgdXNlZCB0aGlzIGFuZCBpbiBmdXR1cmUgaXQgY2FuIGJlIHVzZWQgdG8gdGVzdCB3aXRoIHN0YXRpYyBkYXRhXG4gICAgLy8gdmFyIGFiID0gWydmaXJzdCcsJ2xhc3QnLCcxMjMnLCcxMi0xMi0yMDAwJywnMjInLCdNYWxlJywnMTIgY3Jvc3MgMScsJ0VtQ29udGFjdCcsJzk4NzY1JywnQScsJ1NpbmdsZSddO1xuICAgIC8vIGZvcihjb25zdCBbaW5kZXgsaXRlbV0gb2YgcmVzcG9uc2UucXVlc3Rpb24uUXVlc3Rpb25zX19yLnJlY29yZHMuZW50cmllcygpKXtcbiAgICAvLyAgIGl0ZW0uaW5wdXQgPSBhYltpbmRleF07XG4gICAgLy8gfVxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtKTtcbiAgICAvLyBSZXNldCB0aGUgVmFyaWFibGVzXG5cbiAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0pIHtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xuICAgICAgdGhpcy5hbnN3ZXJXcmFwID0gbmV3IEFuc3dlcldyYXBwZXIoKTtcbiAgICAgIHRoaXMub3B0aW9uVmFsdWVzID0gW107XG4gICAgICB0aGlzLnN1YlF1ZXN0aW9ucyA9IFtdO1xuICAgICAgdGhpcy5yZXNldEZsYWcodGhpcy5xdWVzdGlvbkl0ZW0uVHlwZV9fYyk7XG4gICAgfVxuICAgIHRoaXMucXVlc3Rpb25JdGVtID0gcmVzcG9uc2UucXVlc3Rpb247XG4gICAgLy8gY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xuXG4gICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0uVHlwZV9fYyA9PT0gJ0FscGhhbnVtZXJpYycpe1xuICAgICAgdGhpcy5zcGxDQ0JhY2tDbGljayA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UXVlc3Rpb25JZCA9IHRoaXMucXVlc3Rpb25JdGVtLklkO1xuICAgIHRoaXMuaGFuZGxlUGFnZS5lbWl0KHRoaXMucXVlc3Rpb25JdGVtLlRyYWNraW5nX0lEX19jKTtcbiAgICAvLyBIYW5kbGUgdGhlIHN1YlF1ZXN0aW9uIG9wdGlvbnNcbiAgICBpZiAocmVzcG9uc2Uuc3FPcHRpb25zKSB7XG4gICAgICAvL3ZhciBuZXdSZWNvcmRzID0gW107XG4gICAgICBmb3IgKHZhciBxIG9mIHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2cocS5OYW1lKTtcbiAgICAgICAgdmFyIHNxID0gcmVzcG9uc2Uuc3FPcHRpb25zW3EuSWRdO1xuICAgICAgICBpZiAoc3EpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdmb3VuZCBvcHRpb25zIGZvciBzdWJxdWVzdGlvbiAnICsgcS5OYW1lKTtcbiAgICAgICAgICBpZiAoIXEuUXVlc3Rpb25fT3B0aW9uc19fcikge1xuICAgICAgICAgICAgcS5RdWVzdGlvbl9PcHRpb25zX19yID0gc3EuUXVlc3Rpb25fT3B0aW9uc19fcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzUXVlc3Rpb24oKTtcbiAgICB0aGlzLmlubmVyaHRtbCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKFxuICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uQWRkaXRpb25hbF9SaWNoX19jXG4gICAgKTtcbiAgICB0aGlzLnRyYWNrSWQoKTtcbiAgfTtcblxuICB0cmFja0lkKCkge1xuICAgIHZhciBxdHJhY2tJZCA9IHRoaXMucXVlc3Rpb25JdGVtLlRyYWNraW5nX0lEX19jO1xuICAgIC8vY29uc29sZS5sb2coJ3RyYWNrSWQtcXVlc3Rpb24nK3F0cmFja0lkKTtcbiAgfVxuXG4gIHByaXZhdGUgZmFpbHVyZVJlYWQgPSAocmVzcG9uc2UpID0+IHtcbiAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmFpbHVyZXJlYWQnKTtcbiAgICAvL2NvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgfTtcblxuICBwcml2YXRlIHNhdmVBbnN3ZXIgPSAoKSA9PiB7XG4gICAgLy8gU2V0IHRoZSBBbnN3ZXIgTnVtYmVyIGJhc2VkIG9uIHRoZSBRdWVzdGlvbiBTdGFjayBMZW5ndGhcbiAgICBpZiAodGhpcy5pbnBWYWx1ZSAhPSBcIi5cIikge1xuICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb25JZCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuYW5zd2VyV3JhcC5hbnNOdW1iZXIgPSB0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoICsgMTtcblxuICAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgICAvLyB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXG4gICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAgLy8gICBbXCJBbnN3ZXJcIiwgXCJjcmVhdGVcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy5hbnN3ZXJXcmFwKV0sXG4gICAgICAvLyAgIHRoaXMuc3VjY2Vzc1NhdmUsXG4gICAgICAvLyAgIHRoaXMuZmFpbHVyZVNhdmVcbiAgICAgIC8vICk7XG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnQW5zd2VyJywnY3JlYXRlJyxKU09OLnN0cmluZ2lmeSh0aGlzLmFuc3dlcldyYXApLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxuICAgICAgKGRhdGEpPT57XG4gICAgICAgIGNvbnNvbGUubG9nKCdkYXRhIGNhbWUgc3VjZXNzZnVsbHknKTtcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgIHRoaXMuc3VjY2Vzc1NhdmUoSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgIH0sKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVkQgMTVGRUIyNCAtIHVzZWQgcHJvY2Vzc05ldyBtZXRob2QgXG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gLy8gVkQgMTJKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLm5ld1Byb2Nlc3NcIixcbiAgICAgICAgW1wiQW5zd2VyXCIsIFwiY3JlYXRlXCIsIEpTT04uc3RyaW5naWZ5KHRoaXMuYW5zd2VyV3JhcCksSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLCcnXSxcbiAgICAgICAgdGhpcy5zdWNjZXNzU2F2ZSxcbiAgICAgICAgdGhpcy5mYWlsdXJlU2F2ZVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgaHRtbERlY29kZShpbnB1dCkge1xuICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGlucHV0LCBcInRleHQvaHRtbFwiKTtcbiAgICByZXR1cm4gZG9jLmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudDtcbiAgfVxuXG4gIHByaXZhdGUgc3VjY2Vzc1NhdmUgPSAocmVzcG9uc2UpID0+IHtcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAvL3RoaXMuYWJJdGVtID0gcmVzcG9uc2UuYW5zd2VyYm9vaztcbiAgICAgIHRoaXMuYW5zd2VyTWFwLnNldChyZXNwb25zZS5hbnN3ZXIucXVlc0lkLCByZXNwb25zZS5hbnN3ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yLmVycm9yTXNnID0gcmVzcG9uc2UuZXJyb3IuZXJyb3JNc2c7XG4gICAgfVxuICAgIGlmKCF0aGlzLmJhY2tCdXR0b25GbGFnKXtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGZhaWx1cmVTYXZlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZhaWx1cmVTYXZlJyk7XG4gICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBwcm9jZXNzUXVlc3Rpb24gPSAoKSA9PiB7XG4gICAgLy8gY29uc29sZS5sb2coJ0luc2lkZSB0aGUgcHJvY2Vzc1F1ZXN0aW9uJyk7XG4gICAgLy8gY29uc29sZS5sb2coJ3NwbENDQmFja0NsaWNrID0gJyt0aGlzLnNwbENDQmFja0NsaWNrKTtcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uU3RhY2spO1xuICAgIC8vY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xuICAgIHRoaXMucG9wID0gdHJ1ZTtcblxuICAgIC8vIGlmKCF0aGlzLmJhY2spe1xuICAgIC8vICAgdGhpcy5xdWVzdGlvbk5hbWUucHVzaCh0aGlzLnF1ZXN0aW9uSXRlbS5OYW1lKVxuICAgIC8vIH1cblxuICAgIGlmICh0aGlzLnFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgPT09IHRydWUpIHtcbiAgICAgIGlmICghdGhpcy5iYWNrKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25OYW1lLnB1c2godGhpcy5xdWVzdGlvbkl0ZW0uTmFtZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmJhY2sgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uTmFtZVswXSA9PT0gdGhpcy5xdWVzdGlvbk5hbWVbMV0pIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbk5hbWUucG9wKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY3VycmVudE5hbWUgPSB0aGlzLnF1ZXN0aW9uSXRlbS5OYW1lO1xuICAgICAgdGhpcy5wYXRocXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uTmFtZS5pbmRleE9mKHRoaXMuY3VycmVudE5hbWUpO1xuICAgICAgdGhpcy5wb3NzaWJpbGl0aWVzID0gdGhpcy5xYkl0ZW0uUG9zc2liaWxpdGllc19fYztcbiAgICB9XG5cbiAgICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnM7XG4gICAgdGhpcy5kYXkoKTtcbiAgICAvL2NvbnNvbGUubG9nKCdwcm9jZXNzaW5nIHF1ZXN0aW9uICcgKyB0aGlzLnF1ZXN0aW9uSXRlbS5OYW1lICsgJyBleGlzdGluZyBhbnN3ZXJzIGFyZSAnICsgdGhpcy5hbnN3ZXJNYXAuc2l6ZSk7IC8vID0+ICcgKyBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXN0aW9uSXRlbSkpO1xuXG4gICAgLy8gU2V0IHRoZSBGbGFncyB0byBzaG93IHJpZ2h0IGZpZWxkc1xuICAgIHRoaXMuc2V0RmxhZyh0aGlzLnF1ZXN0aW9uSXRlbS5UeXBlX19jKTtcbiAgICAvL2NvbnNvbGUubG9nKCdBZnRlciB0aGUgc2V0RmxhZyBtZXRob2QgZHRGbGFnID0gJyt0aGlzLmR0RmxhZyk7XG5cbiAgICAvLyBDaGVjayB0aGUgZXhpc3RpbmcgYW5zd2VyIGZyb20gYW5zd2VyTWFwXG4gICAgaWYgKHRoaXMuYW5zd2VyTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCkpIHtcbiAgICAgIC8vICAvL2NvbnNvbGUubG9nKFwiZXhpc3RpbmcgYW5zd2VyIGZvdW5kIGZvciB0aGlzLnF1ZXN0aW9uSXRlbS5OYW1lXCIpO1xuICAgICAgdmFyIGVBbnN3ZXIgPSB0aGlzLmFuc3dlck1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xuICAgICAgLy8gR2V0IHRoZSBleGlzdGluZyBhbnN3ZXIgZnJvbSB0aGUgTWFwXG4gICAgICB0aGlzLmlucFZhbHVlID0gZUFuc3dlci5hbnNWYWx1ZTtcbiAgICAgIC8vY29uc29sZS5sb2coJ2lucFZhbHVlIGhhcyBiZWVuIHNldCB0byAnICsgdGhpcy5pbnBWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5hdHRhY2htZW50c01hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uSWQpKSB7XG4gICAgICAgIHRoaXMuYXR0YWNobWVudHMgPSB0aGlzLmF0dGFjaG1lbnRzTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSByZW1vdmluZyBhdHRhY2htZW50IGFycmF5Jyk7XG4gICAgICB0aGlzLmF0dGFjaG1lbnRzID0gW107XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuaW5wVmFsdWUpO1xuICAgIGlmKHRoaXMuc3BsQ0NCYWNrQ2xpY2sgJiYgdGhpcy5pbnBWYWx1ZSAmJiB0aGlzLmlucFZhbHVlLmluY2x1ZGVzKCdFUycpKXtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGlmIGNvbmQnKTtcbiAgICAgIHRoaXMuc3BsQ0NCYWNrQ2xpY2sgPSBmYWxzZTtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlLnJlcGxhY2UoJ0VTJywnJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2hlY2tib3hGbGFnKSB7XG4gICAgICAvLyBTZXQgdGhlIE9wdGlvbnMgZm9yIENoZWNrYm94XG4gICAgICB0aGlzLnNldE9wdGlvbnModGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYm9va0ZsYWcpIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ0luaXNlIHRoZSBleHBlY3RlZCBib29rRmxhZyBjb25kJyk7XG4gICAgICAvL2NvbnNvbGUubG9nKCdkdEZsYWcgPSAnK3RoaXMuZHRGbGFnKTtcbi8vICBIQSAyMEZFQjI0IExhYmVsIEZpeFxuICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgZWxlbWVudC5RdWVzdGlvbl9UZXh0X19jID0gZWxlbWVudC5RdWVzdGlvbl9UZXh0X19jLnJlcGxhY2UoLzxbXj5dKz4vZywgJycpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNldFN1YlF1ZXN0aW9ucyh0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxpc3RGbGFnKSB7XG4gICAgICAvLyBTZXQgdGhlIExvY2FsU3ViUXVlc3Rpb25zXG4gICAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIGxpc3QgZmxhZycpO1xuICAgICAgLy8gY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHMpO1xuICAgICAgLy8gY29uc29sZS5sb2codGhpcy5hYkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHMpO1xuICAgICAgaWYoIXRoaXMubG9jYWxTdWJRTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCkpe1xuICAgICAgICB0aGlzLnNldFN1YlF1ZXN0aW9ucyh0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcyk7XG4gICAgICB9IFxuICAgIH0gZWxzZSBpZiAodGhpcy5kdEZsYWcpIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ0luaXNlIHRoZSB1bmV4cGVjdGVkIGR0RmxhZyBjb25kJyk7XG4gICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IFwiXCI7XG4gICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gXCJcIjtcbiAgICAgIHRoaXMuc2VsRGF0ZSA9IFwiXCI7XG4gICAgICAvLyAyMDIxLTUtMTZUMDA6MDBcbiAgICAgIGlmICh0aGlzLmRhdGVNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLklkKSkge1xuICAgICAgICB0aGlzLnNlbERhdGUgPSB0aGlzLmRhdGVNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLklkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkaG91ck1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uSWQpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdGhpcy5zZWxlY3RlZGhvdXJNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLklkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkbWludXRlTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IHRoaXMuc2VsZWN0ZWRtaW51dGVNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLklkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5YMjRfSG91cnNfX2MgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5ob3Vycy5wdXNoKFxuICAgICAgICAgIFwiMTNcIixcbiAgICAgICAgICBcIjE0XCIsXG4gICAgICAgICAgXCIxNVwiLFxuICAgICAgICAgIFwiMTZcIixcbiAgICAgICAgICBcIjE3XCIsXG4gICAgICAgICAgXCIxOFwiLFxuICAgICAgICAgIFwiMTlcIixcbiAgICAgICAgICBcIjIwXCIsXG4gICAgICAgICAgXCIyMVwiLFxuICAgICAgICAgIFwiMjJcIixcbiAgICAgICAgICBcIjIzXCIsXG4gICAgICAgICAgXCIwMFwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uWDI0X0hvdXJzX19jID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLmhvdXJzID0gdGhpcy5ob3Vycy5zbGljZSgwLCAxMik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kdEZsYWcgJiYgdGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICB2YXIgZHRWYWwgPSB0aGlzLmlucFZhbHVlLnNwbGl0KFwiVFwiKTsgXG4gICAgICAgIHZhciBkdHZhbDAgPSB0aGlzLmlucFZhbHVlLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IGR0VmFsWzBdO1xuICAgICAgICB0aGlzLmlucFZhbHVlID0gZHR2YWwwWzBdO1xuXG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gZHRWYWxbMV07XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gZHR2YWwwWzFdO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5Jc19EYXRlX0JhY2t3YXJkX19jIHx8XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLklzX0RhdGVfRm9yd2FyZF9fY1xuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5Jc19EYXRlX0JhY2t3YXJkX19jID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVTaW5jZSA9IHtcbiAgICAgICAgICAgIHllYXI6IHRoaXMudG9kYXkuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIG1vbnRoOiB0aGlzLnRvZGF5LmdldE1vbnRoKCkgKyAxLFxuICAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSArIDEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uSXNfRGF0ZV9Gb3J3YXJkX19jID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVVbnRpbCA9IHtcbiAgICAgICAgICAgIHllYXI6IHRoaXMudG9kYXkuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIG1vbnRoOiB0aGlzLnRvZGF5LmdldE1vbnRoKCkgKyAxLFxuICAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmZpbGVGbGFnKSB7XG4gICAgICB0aGlzLmZpbGVVSSgpO1xuICAgICAgLy8gbG9naWNcbiAgICAgIHRoaXMuYWxsb3dlZEZpbGVFeHRlbnNpb24gPVxuICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uQWxsb3dlZF9GaWxlX0V4dGVuc2lvbnNfX2M/LnNwbGl0KFwiO1wiKTtcbiAgICAgIC8vY29uc29sZS5sb2codGhpcy5hbGxvd2VkRmlsZUV4dGVuc2lvbik7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLnFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgPT09IHRydWUpIHtcbiAgICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICB9XG4gIH07XG5cbiAgc2V0RmxhZyh0eXApIHtcbiAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgc2V0RmxhZyBmb3IgJyArIHR5cCk7XG5cbiAgICBpZiAodHlwKSB7XG4gICAgICAvLyBTZXQgdGhlIEZsYWdzXG4gICAgICBpZiAodHlwID09IFwiVGV4dFwiKSB7XG4gICAgICAgIHRoaXMudGV4dEZsYWcgPSB0cnVlO1xuXG4gICAgICAgIC8vdGhpcy5udW1iZXJGbGFnID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiTnVtYmVyXCIpIHtcbiAgICAgICAgdGhpcy5udW1iZXJGbGFnID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiQWxwaGFOdW1lcmljXCIpIHtcbiAgICAgICAgdGhpcy5hbHBoYW51bWVyaWNGbGFnID0gdHJ1ZTtcbiAgICAgICAgLyppZih0aGlzLmlucFZhbHVlLmxlbmd0aCA9PT0gMCl7XG4gICAgICAgICAgdGhpcy5pbnBWYWx1ZT0nRVMnXG4gICAgICAgIH0qL1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJFbWFpbFwiKSB7XG4gICAgICAgIHRoaXMuZW1haWxGbGFnID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiRmlsZVwiKSB7XG4gICAgICAgIHRoaXMuZmlsZUZsYWcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJEYXRlVGltZVwiKSB7XG4gICAgICAgIHRoaXMuZHRGbGFnID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50aW1lRmxhZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGF0ZUZsYWcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJUZXh0QXJlYVwiKSB7XG4gICAgICAgIHRoaXMudGFGbGFnID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiUmFkaW9cIikge1xuICAgICAgICB0aGlzLnJhZGlvRmxhZyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRyb3Bkb3duXCIpIHtcbiAgICAgICAgdGhpcy5kcm9wZG93bkZsYWcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJDaGVja2JveFwiKSB7XG4gICAgICAgIHRoaXMuY2hlY2tib3hGbGFnID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiQm9va1wiKSB7XG4gICAgICAgIHRoaXMuYm9va0ZsYWcgPSB0cnVlO1xuICAgICAgfWVsc2UgaWYgKHR5cCA9PSAnTGlzdCcpe1xuICAgICAgICB0aGlzLmxpc3RGbGFnID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiVGltZVwiKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgVGltZSBjb25kJyk7XG4gICAgICAgIHRoaXMuZHRGbGFnID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50aW1lRmxhZyA9IHRydWU7XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kdEZsYWcpO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJEYXRlXCIpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBEYXRlIGNvbmQnKTtcbiAgICAgICAgdGhpcy5kdEZsYWcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRhdGVGbGFnID0gdHJ1ZTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmR0RmxhZyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVzZXRGbGFnKHR5cCkge1xuICAgIGlmICh0eXApIHtcbiAgICAgIC8vIFNldCB0aGUgRmxhZ3NcbiAgICAgIGlmICh0eXAgPT0gXCJUZXh0XCIpIHtcbiAgICAgICAgdGhpcy50ZXh0RmxhZyA9IGZhbHNlO1xuICAgICAgICAvL3RoaXMubnVtYmVyRmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJOdW1iZXJcIikge1xuICAgICAgICB0aGlzLm51bWJlckZsYWcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiQWxwaGFudW1lcmljXCIpIHtcbiAgICAgICAgdGhpcy5hbHBoYW51bWVyaWNGbGFnID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkVtYWlsXCIpIHtcbiAgICAgICAgdGhpcy5lbWFpbEZsYWcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiRmlsZVwiKSB7XG4gICAgICAgIHRoaXMuZmlsZUZsYWcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiRGF0ZVRpbWVcIikge1xuICAgICAgICB0aGlzLmR0RmxhZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRhdGVGbGFnID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGltZUZsYWcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiVGV4dEFyZWFcIikge1xuICAgICAgICB0aGlzLnRhRmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJSYWRpb1wiKSB7XG4gICAgICAgIHRoaXMucmFkaW9GbGFnID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRyb3Bkb3duXCIpIHtcbiAgICAgICAgdGhpcy5kcm9wZG93bkZsYWcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiQ2hlY2tib3hcIikge1xuICAgICAgICB0aGlzLmNoZWNrYm94RmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJCb29rXCIpIHtcbiAgICAgICAgdGhpcy5ib29rRmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gJ0xpc3QnKXtcbiAgICAgICAgdGhpcy5saXN0RmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJUaW1lXCIpIHtcbiAgICAgICAgdGhpcy5kdEZsYWcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50aW1lRmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJEYXRlXCIpIHtcbiAgICAgICAgdGhpcy5kdEZsYWcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kYXRlRmxhZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldE9wdGlvbnMocmVjb3Jkcykge1xuICAgIGZvciAodmFyIG9wdCBvZiByZWNvcmRzKSB7XG4gICAgICB2YXIgb3YgPSBuZXcgT3B0aW9uVmFsdWUoKTtcbiAgICAgIG92LklkID0gb3B0LklkO1xuICAgICAgb3YuTmFtZSA9IG9wdC5OYW1lO1xuICAgICAgb3YuVmFsdWVfX2MgPSBvcHQuVmFsdWVfX2M7XG4gICAgICBvdi5OZXh0X1F1ZXN0aW9uX19jID0gb3B0Lk5leHRfUXVlc3Rpb25fX2M7XG4gICAgICBvdi5jaGVja2VkID0gZmFsc2U7XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSAmJlxuICAgICAgICB0aGlzLmlucFZhbHVlLnNwbGl0KFwiQEAjIyQkXCIpLmluY2x1ZGVzKG9wdC5WYWx1ZV9fYylcbiAgICAgICkge1xuICAgICAgICBvdi5jaGVja2VkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vcHRpb25WYWx1ZXMucHVzaChvdik7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2FwdHVyZSBhbmQgUHJvY2VzcyBDaGlsZCBFdmVudFxuICBjaGlsZEV2ZW50Q2FwdHVyZShldmVudCwgcXVlcz86YW55KSB7XG4gICAgY29uc29sZS5sb2coJ2luc2lkZSBjaGlsZEV2ZW50Q2FwdHVyZSAnKTtcbiAgICBjb25zb2xlLmxvZyhldmVudCk7XG4gICAgdGhpcy5jaGFuZ2VTZXJ2aWNlLmFubm91bmNlQ2hhbmdlKGV2ZW50KTtcbiAgICAvLyBIQSAzMS1KQU4tMjQgQXNzaWduIHZhbHVlcyB0byBkcm9wZG93biBxdWVzdGlvblxuICAgIHF1ZXMuaW5wdXQgPSBldmVudD8udmFsdWVPYmo7XG4gICAgLy9xdWVzLmlucHV0ID0gZXZlbnQ7IC8vIGhlcmUgd2hlbiB1c2luZyB0aGUgbmctc2VsZWN0IGdvdCBldmVudCBhcyB2YWx1ZVxuICB9XG5cbiAgc2V0U3ViUXVlc3Rpb25zKHJlY29yZHMpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIHNldFN1YlF1ZXN0aW9ucycpO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlY29yZHMpO1xuICAgIHZhciBxYU1hcCA9IG5ldyBNYXAoKTtcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmlucFZhbHVlKTtcbiAgICBpZiAodGhpcy5pbnBWYWx1ZSkge1xuICAgICAgdmFyIGFJbmRleCA9IDA7XG4gICAgICAvLyBzZWFyY2ggY2hhbmdlZCBhcyBzZW1pIGNvbG9uIGJlY2F1c2Ugb2YgYWRkcmVzcyBjb250YWlucyBjb21tYSBcbiAgICAgIGlmICgodGhpcy5pbnBWYWx1ZS5zZWFyY2goXCI7IFwiKSA9PSAtMSkpIHtcbiAgICAgICAvLyBjb25zdCB3aXRob3V0QW5zd2VyU3RyaW5nID0gdGhpcy5pbnBWYWx1ZS5yZXBsYWNlKFwiYW5zd2VyU3RyaW5nOiBcIiwgXCJcIik7IC8vcmVtb3ZlIHRoZSBhbnN3ZXIgc3RyaW5nXG4gICAgICAgLy8gdGhpcy5pbnBWYWx1ZSA9IHdpdGhvdXRBbnN3ZXJTdHJpbmc7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgJ0BAIyMkJCcgO1xuICAgICAgICBmb3IgKHZhciBhbnNTdHIgb2YgdGhpcy5pbnBWYWx1ZS5zcGxpdChcIkBAIyMkJFwiKSkge1xuICAgICAgICAgIGFJbmRleCsrO1xuICAgICAgICAgIHFhTWFwLnNldChhSW5kZXgsIGFuc1N0cik7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnU2V0dGluZyB0aGUgcWFNYXAgZm9yICcgKyBhSW5kZXggKyAnIHdpdGggJyArIGFuc1N0cik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGFuc1N0ciBvZiB0aGlzLmlucFZhbHVlLnNwbGl0KFwiOyBcIikpIHtcbiAgICAgICAgICBhSW5kZXgrKztcbiAgICAgICAgICBxYU1hcC5zZXQoYUluZGV4LCBhbnNTdHIpO1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ1NldHRpbmcgdGhlIHFhTWFwICcgKyBhSW5kZXggKyAnIHdpdGggJyArIGFuc1N0cik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coJ2FmdGVyIHNldHRpbmcgdmFsdWVzIGZyb20gaW5wdmFsdWUgcWEgbWFwIGFyZScpO1xuICAgIC8vIGNvbnNvbGUubG9nKHFhTWFwKTtcblxuICAgIGZvciAodmFyIHF1ZXMgb2YgcmVjb3Jkcykge1xuICAgICAgaWYgKHF1ZXMuVHlwZV9fYyA9PSBcIkZpbGVcIikge1xuICAgICAgICB0aGlzLnZhbHVlTmFtZTEgPSBxdWVzLkFsbG93ZWRfRmlsZV9FeHRlbnNpb25zX19jO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudmFsdWVOYW1lMSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhbnMgPSAnJztcbiAgICAgIGlmIChxYU1hcC5oYXMocXVlcy5RdWVzdGlvbl9Ob19fYykpIHtcbiAgICAgICAgICBxdWVzLmlucHV0ID0gcWFNYXAuZ2V0KHF1ZXMuUXVlc3Rpb25fTm9fX2MpO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdhZnRlciBmZXRjaGluZyBtYXAgdmFsdWVzJyk7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcy5pbnB1dCk7XG4gICAgICAgICAgaWYocXVlcy5pbnB1dC5pbmRleE9mKCckJEBAIyMnKSA+IDApe1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2Fuc3dlciBzdXBwb3NlZCB0byBiZSB0cmltbWVkJyk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVzLmlucHV0KTtcbiAgICAgICAgICAgIGFucyA9IHF1ZXMuaW5wdXQuc3Vic3RyaW5nKHF1ZXMuaW5wdXQuaW5kZXhPZignJCRAQCMjJykrNixxdWVzLmlucHV0Lmxlbmd0aCk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhhbnMpO1xuICAgICAgICAgICAgcXVlcy5pbnB1dCA9IHF1ZXMuaW5wdXQuc3Vic3RyaW5nKDAscXVlcy5pbnB1dC5pbmRleE9mKCckJEBAIyMnKSk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVzLmlucHV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgaWYgKChxdWVzLlR5cGVfX2MgPT09IFwiRGF0ZVwiKSAmJiAocXVlcy5Jc19EYXRlX0JhY2t3YXJkX19jIHx8IHF1ZXMuSXNfRGF0ZV9Gb3J3YXJkX19jKSkge1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGRhdGUgYmFja3dhcmQvZm9yd2FyZCBjb25kJyk7XG4gICAgICAgIGlmIChxdWVzLklzX0RhdGVfQmFja3dhcmRfX2MgPT09IHRydWUpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIElzX0RhdGVfQmFja3dhcmRfX2MnKTtcbiAgICAgICAgICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnMuZGlzYWJsZVNpbmNlID0ge1xuICAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgbW9udGg6IHRoaXMudG9kYXkuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgICAgICBkYXk6IHRoaXMudG9kYXkuZ2V0RGF0ZSgpICsgMSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChxdWVzLklzX0RhdGVfRm9yd2FyZF9fYyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgSXNfRGF0ZV9Gb3J3YXJkX19jJyk7XG4gICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVVbnRpbCA9IHtcbiAgICAgICAgICAgIHllYXI6IHRoaXMudG9kYXkuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIG1vbnRoOiB0aGlzLnRvZGF5LmdldE1vbnRoKCkgKyAxLFxuICAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5teURhdGVQaWNrZXJPcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdWJRdWVzdGlvbnMucHVzaChxdWVzKTtcbiAgICAgIGZvcih2YXIgaT0wOyBpPHRoaXMuc3ViUXVlc3Rpb25zLmxlbmd0aDtpKyspe1xuICAgICAgICAvLyB0byBzaG93L2hpZGUgdGhlIGRlcGVuZGVudCBkcm9wZG93biBvbmx5IGZpZWxkIHVzaW5nIHRoZSBkcm9wRG93bk9ubHkgYm9vbGVhblxuICAgICAgICBpZih0aGlzLnN1YlF1ZXN0aW9uc1tpXS5TaXplX19jID09IDQpe1xuICAgICAgICAgIHRoaXMuc3ViUXVlc3Rpb25zW2ldLmRyb3BEb3duT25seSA9IHRydWU7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHRoaXMuc3ViUXVlc3Rpb25zW2ldLmRyb3BEb3duT25seSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZihhbnMgIT0gJycpe1xuICAgICAgICBmb3IodmFyIGFuIG9mIChhbnMuc3BsaXQoJyQkQEAjIycpKSl7XG4gICAgICAgICAgdmFyIHNRID0gbmV3IFF1ZXN0aW9uKCk7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihzUSxxdWVzKTtcbiAgICAgICAgICBzUS5pbnB1dCA9IGFuO1xuICAgICAgICAgIHRoaXMuc3ViUXVlc3Rpb25zLnB1c2goc1EpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnZhbHVlTmFtZTEgIT0gbnVsbCAmJiB0aGlzLnZhbHVlTmFtZTEubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5ib29rRmxhZ0FjY2VwdCA9IHRoaXMudmFsdWVOYW1lMS5zcGxpdChcIjtcIik7XG4gICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc3ViUXVlc3Rpb25zKTtcbiAgICB9XG4gICAgdGhpcy5zdHJ1Y3RMb2NhbFN1YlF1ZXN0aW9uKG51bGwpO1xuICAgIC8vIEhBIDAyRkVCMjQgT24gRWRpdCB0byBkaXNwbGF5IHRoZSB2YWx1ZSB1c2lpbmcgdGhpc1xuICAgIGlmKHRoaXMuYWxsSW5wdXRWYWx1ZXMubGVuZ3RoID4gMCl7XG4gICAgICB0aGlzLnN1YlF1ZXN0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBmb3IobGV0IHNpbmdsZUlucHV0IG9mIHRoaXMuYWxsSW5wdXRWYWx1ZXMpe1xuICAgICAgICAgIGlmKGVsZW1lbnQuSWQgPT0gc2luZ2xlSW5wdXQuSWQpe1xuICAgICAgICAgICAgZWxlbWVudC5pbnB1dCA9IHNpbmdsZUlucHV0LmlucHV0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb3B0aW9uQ2hhbmdlKHNlbFZhbHVlKSB7XG4gICAgbGV0IHJhZGlvVHJhY2tpbmdJZDogc3RyaW5nID0gXCJcIjtcbiAgICBmb3IgKHZhciBvcHQgb2YgdGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdvcHRpb25DaGFuZ2UgVHJhY2tpbmdJZCcrb3B0LlRyYWNraW5nX0lEX19jKTtcbiAgICAgIGlmIChvcHQuVmFsdWVfX2MgPT0gc2VsVmFsdWUpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGlmJytvcHQuVHJhY2tpbmdfSURfX2MpXG4gICAgICAgIHJhZGlvVHJhY2tpbmdJZCA9IG9wdC5UcmFja2luZ19JRF9fYztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQocmFkaW9UcmFja2luZ0lkKTtcbiAgICB0aGlzLmNsZWFyRXJyb3IoKTtcbiAgICAvLyAvL2NvbnNvbGUubG9nKCdpbnNpZGUgb3B0aW9uQ2hhbmdlIHVzaW5nICcgKyBzZWxWYWx1ZSk7XG5cbiAgICB0aGlzLmlucFZhbHVlID0gc2VsVmFsdWU7XG4gIH1cblxuICBjbGVhckVycm9yKCkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvcikge1xuICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyTG9jYWxTdWJRdWVzRXJyb3IocXVlc0lkKSB7XG4gICAgcXVlc0lkLmVycm9yID0gbnVsbDtcbiAgfVxuXG4gIGlucHV0VmFsaWRhdGUoZSkge1xuICAgIHZhciBrZXlDb2RlID0gZS5rZXlDb2RlIHx8IGUud2hpY2g7XG4gICAgLy8gT25seSBBU0NJSSBjaGFyYWN0ZXIgaW4gdGhhdCByYW5nZSBhbGxvd2VkXG4gICAgdmFyIEFTQ0lJQ29kZSA9IChlLndoaWNoKSA/IGUud2hpY2ggOiBlLmtleUNvZGU7XG4gICAgaWYgKEFTQ0lJQ29kZSA+IDMxICYmIChBU0NJSUNvZGUgPCA0OCB8fCBBU0NJSUNvZGUgPiA1Nykpe1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgQ0NPbkNoYW5nZShpbnBWYWx1ZTogc3RyaW5nKSB7XG5cbiAgICAgIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gMikge1xuICAgICAgICB0aGlzLmlucFZhbHVlICs9IFwiIFwiO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaW5wVmFsdWUubGVuZ3RoID09IDcpIHtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSAxMikge1xuICAgICAgICB0aGlzLmlucFZhbHVlICs9IFwiIFwiO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaW5wVmFsdWUubGVuZ3RoID09IDE3KSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gMjIpIHtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcbiAgICAgIH1cblxuICB9XG5cbiAgaXNOb3RWYWxpZEFjY051bWJlcihzOiBzdHJpbmcpIHtcbiAgICBzID0gcy5yZXBsYWNlKC9cXHMrL2csIFwiXCIpO1xuICAgIHMgPSAnRVMnICsgcztcbiAgICB2YXIgaXNOb3RWYWxpZFN0ciA9IGZhbHNlO1xuICAgIGlmIChzLmxlbmd0aCA9PSAyNCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpIDw9IDEgJiYgL1thLXpBLVpdLy50ZXN0KHMuY2hhckF0KGkpKSkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJWYWxpZCBjaGFyOiBcIiArIHMuY2hhckF0KGkpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpID4gMSAmJiAvWzAtOV0vLnRlc3Qocy5jaGFyQXQoaSkpKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlZhbGlkIG51bWVyaWM6IFwiICsgcy5jaGFyQXQoaSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzTm90VmFsaWRTdHIgPSB0cnVlO1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJOb3QgYSB2YWxpZCBjaGFyXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzTm90VmFsaWRTdHIgPSB0cnVlO1xuICAgICAgLy9jb25zb2xlLmxvZyhcIk5vdCBhIHZhbGlkIGFjYyBudW1iZXJcIik7XG4gICAgfVxuICAgIHJldHVybiBpc05vdFZhbGlkU3RyO1xuICB9XG5cbiAgY2xlYXJTUUVycm9yKHF1ZXNJZCkge1xuICAgIHZhciBzcUxpc3QgPSB0aGlzLnN1YlF1ZXN0aW9ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uSWQgPT0gcXVlc0lkKTtcbiAgICBmb3IgKHZhciBzcSBvZiBzcUxpc3QpIHtcbiAgICAgIHNxLmVycm9yID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB1cGxvYWRGaWxlKGV2ZW50LHF1ZXM/OmFueSkge1xuICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSB1cGxvYWQnKTtcbiAgICB0aGlzLmNsZWFyRXJyb3IoKTtcbiAgICB0aGlzLmZpbGVUeXBlSW5jb3JyZWN0ID0gZmFsc2U7XG4gICAgdmFyIGxvY2FsID0gdGhpcztcbiAgICBsb2NhbC5hdHRhY2htZW50ID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xuICAgIC8vIFZhbGlkYXRlIHRoZSBmaWxlIGV4dGVuc2lvblxuICAgIC8vY29uc29sZS5sb2cobG9jYWwuYXR0YWNobWVudCk7XG4gICAgbGV0IGZpbGVOYW1lV2l0aFR5cGU6IHN0cmluZyA9XG4gICAgICBsb2NhbC5hdHRhY2htZW50ICYmIGxvY2FsLmF0dGFjaG1lbnQubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLmpwZ1wiKSAmJlxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIucG5nXCIpICYmXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5wZGZcIikgJiZcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLmpwZWdcIikgJiZcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLmhlaWNcIikgJiZcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLmhlaWZcIikgJiZcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLkpQR1wiKSAmJlxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuUE5HXCIpICYmXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5QREZcIikgJiZcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLkpQRUdcIikgJiZcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLkhFSUNcIikgJiZcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLkhFSUZcIilcbiAgICApIHtcbiAgICAgIGxvY2FsLmZpbGVUeXBlSW5jb3JyZWN0ID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gUmV0dXJuIHdoZW4gdGhlIGZpbGUgdHlwZSBpcyBpbmNvcnJlY3RcbiAgICBpZiAobG9jYWwuZmlsZVR5cGVJbmNvcnJlY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGZpbGVDb250ZW50OiBhbnk7XG4gICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgZmlsZUNvbnRlbnQgPSByZWFkZXIucmVzdWx0O1xuICAgICAgbG9jYWwuZmlsZUV4Y2VlZGVkTGltaXQgPSBsb2NhbC5hdHRhY2htZW50LnNpemUgPiAzMjQyODgwOyAvL1ZhbGlkYXRpbmcgZmlsZSBzaXplXG4gICAgICAvLyBVcGxvYWQgdGhlIGZpbGUgdG8gU2FsZXNmb3JjZSB3aGVuIHRoZSBsaW1pdCBpcyB3aXRoaW4gcmFuZ2VcbiAgICAgIGlmICghbG9jYWwuZmlsZUV4Y2VlZGVkTGltaXQpIHtcbiAgICAgICAgbGV0IGZpbGVXcmFwcGVyID0gbmV3IEF0dGFjaG1lbnRXcmFwcGVyKCk7XG4gICAgICAgIGZpbGVXcmFwcGVyLnBhcmVudElkID0gbG9jYWwuYWJJdGVtLklkO1xuICAgICAgICBmaWxlV3JhcHBlci5maWxlTmFtZSA9IGxvY2FsLmF0dGFjaG1lbnQubmFtZTtcbiAgICAgICAgZmlsZVdyYXBwZXIuZmlsZUNvbnRlbnQgPSBmaWxlQ29udGVudDtcbiAgICAgICAgbG9jYWwuY3JlYXRlQXR0YWNobWVudChmaWxlV3JhcHBlcik7XG4gICAgICAgIHF1ZXMuaW5wdXQgPSBmaWxlV3JhcHBlci5maWxlTmFtZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc3Bpbm5lci5zaG93KHRoaXMuc3Bpbm5lck5hbWUpO1xuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGV2ZW50LnRhcmdldC5maWxlc1swXSk7XG4gIH1cblxuICBwcml2YXRlIHN1Y2Nlc3NBdHRhY2htZW50Q3JlYXRlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgbGV0IGNyZWF0ZWRBdHRhY2htZW50OiBBdHRhY2htZW50ID0gbmV3IEF0dGFjaG1lbnQoXG4gICAgICByZXNwb25zZS5hdHRhY2htZW50SWQsXG4gICAgICByZXNwb25zZS5hdHRhY2htZW50TmFtZSxcbiAgICAgIHRoaXMuYXR0YWNobWVudC5sYXN0TW9kaWZpZWREYXRlXG4gICAgKTtcbiAgICB0aGlzLmF0dGFjaG1lbnRzLnB1c2goY3JlYXRlZEF0dGFjaG1lbnQpO1xuICAgIHRoaXMuYXR0YWNobWVudHNNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLklkLCB0aGlzLmF0dGFjaG1lbnRzKTtcbiAgICB0aGlzLnNwaW5uZXIuaGlkZSh0aGlzLnNwaW5uZXJOYW1lKTtcbiAgfTtcblxuICBwcml2YXRlIHN1Y2Nlc3NBdHRhY2htZW50RGVsZXRlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5hdHRhY2htZW50c1tpXS5hdHRhY2htZW50SWQgPT09IHRoaXMuYXR0YWNobWVudElkKSB7XG4gICAgICAgIHRoaXMuYXR0YWNobWVudHMuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGZhaWx1cmVBdHRhY2htZW50Q3JlYXRlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZhaWx1cmVBdHRhY2htZW50Q3JlYXRlJyk7XG4gIH07XG5cbiAgcHJpdmF0ZSBmYWlsdXJlQXR0YWNobWVudERlbGV0ZSA9IChyZXNwb25zZSkgPT4ge1xuICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlQXR0YWNobWVudERlbGV0ZScpO1xuICB9O1xuXG4gIGhhbmRsZVN1Ym1pdENsaWNrKCkge1xuICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5TdWJtaXRfVHJhY2tpbmdfSURfX2MpO1xuICAgIHRoaXMudXBkYXRlQW5zd2VyQm9vayh0aGlzLmFiSXRlbS5JZCk7XG4gIH1cblxuICBoYW5kbGVDYW5jZWxDbGljaygpIHtcbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uQ2FuY2VsX1RyYWNraW5nX0lEX19jKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQXR0YWNobWVudCA9IChmaWxlV3JhcHBlcjogYW55KSA9PiB7XG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgIC8vICAgdGhpcy50a24sXG4gICAgICAvLyAgIFtcIkF0dGFjaG1lbnRcIiwgXCJjcmVhdGVcIiwgSlNPTi5zdHJpbmdpZnkoZmlsZVdyYXBwZXIpXSxcbiAgICAgIC8vICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudENyZWF0ZSxcbiAgICAgIC8vICAgdGhpcy5mYWlsdXJlQXR0YWNobWVudENyZWF0ZVxuICAgICAgLy8gKTtcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ0F0dGFjaG1lbnQnLCdjcmVhdGUnLCBKU09OLnN0cmluZ2lmeShmaWxlV3JhcHBlciksSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YSk9PntcbiAgICAgICAgY29uc29sZS5sb2coJ3VwZGF0ZWQgc3VjY3Vzc2Z1bGx5Jyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50Q3JlYXRlKEpTT04ucGFyc2UoZGF0YSkpXG4gICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmZhaWx1cmVBdHRhY2htZW50Q3JlYXRlKGVycm9yKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHF1ZXN0aW9uIGJvb2tzJywgZXJyb3IpO1xuICAgICAgfVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWRCAxNUZFQjI0IC0gdXNlZCBwcm9jZXNzTmV3IG1ldGhvZCBcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAvLyBWRCAxMkp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAgICBcIk54dENvbnRyb2xsZXIubmV3UHJvY2Vzc1wiLFxuICAgICAgICBbXCJBdHRhY2htZW50XCIsIFwiY3JlYXRlXCIsIEpTT04uc3RyaW5naWZ5KGZpbGVXcmFwcGVyKSxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksJyddLFxuICAgICAgICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50Q3JlYXRlLFxuICAgICAgICB0aGlzLmZhaWx1cmVBdHRhY2htZW50Q3JlYXRlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudElkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmF0dGFjaG1lbnRJZCA9IGF0dGFjaG1lbnRJZDtcbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQoXCJkZWxldGVBdHRhY2htZW50XCIpO1xuICAgIHRoaXMuZGVsZXRlU0ZBdHRhY2htZW50KGF0dGFjaG1lbnRJZCk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVNGQXR0YWNobWVudCA9IChmaWxlSWQ6IHN0cmluZykgPT4ge1xuICAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgICAvLyB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXG4gICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAgLy8gICBbXCJBdHRhY2htZW50XCIsIFwiZGVsZXRlXCIsIGZpbGVJZF0sXG4gICAgICAvLyAgIHRoaXMuc3VjY2Vzc0F0dGFjaG1lbnREZWxldGUsXG4gICAgICAvLyAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnREZWxldGVcbiAgICAgIC8vICk7XG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSUZyb21Ob2RlKCdBdHRhY2htZW50JywnZGVsZXRlJyxmaWxlSWQgLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxuICAgICAgKGRhdGEpPT57XG4gICAgICAgIGNvbnNvbGUubG9nKCd1cGRhdGVkIHN1Y2N1c3NmdWxseScpO1xuICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudERlbGV0ZShKU09OLnBhcnNlKGRhdGEpKVxuICAgICAgfSwoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5mYWlsdXJlQXR0YWNobWVudERlbGV0ZShlcnJvcik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVkQgMTVGRUIyNCAtIHVzZWQgcHJvY2Vzc05ldyBtZXRob2QgXG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG5cbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLm5ld1Byb2Nlc3NcIixcbiAgICAgICAgW1wiQXR0YWNobWVudFwiLCBcImRlbGV0ZVwiLCBmaWxlSWQsSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLCcnXSxcbiAgICAgICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudERlbGV0ZSxcbiAgICAgICAgdGhpcy5mYWlsdXJlQXR0YWNobWVudERlbGV0ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBnZXRGaWxlTmFtZShmaWxlTmFtZXdpdGhJZGFuZFR5cGUpIHtcbiAgICAvL3RydW5jYXRlIGZpbGUgcGF0aFxuICAgIHZhciBmaWxlTmFtZVdpdGhUeXBlID0gZmlsZU5hbWV3aXRoSWRhbmRUeXBlLnN1YnN0cihcbiAgICAgIGZpbGVOYW1ld2l0aElkYW5kVHlwZS5pbmRleE9mKFwiOjo6OlwiKSArIDRcbiAgICApO1xuICAgIHJldHVybiBmaWxlTmFtZVdpdGhUeXBlOyAvL2ZpbGVOYW1lV2l0aFR5cGUucmVwbGFjZSgvXiguKihcXC98XFxcXCkpKC4rKSQvLCAnJDMnKTtcbiAgfVxuICBmaWxlVUkoKSB7XG4gICAgaWYgKHRoaXMuYXR0YWNobWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgfVxuICB9XG5cbiAgLy9VcGRhdGUgZnVuY3Rpb24gZm9yIGNhdGVnb3JpemF0aW9uXG4gIC8vIHN0ZXBwZXJDYXRlZygpIHtcbiAgLy8gICB0aGlzLmZpcnN0Rm9ybUdyb3VwID0gdGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAvLyAgICAgZmlyc3RDdHJsOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdXG4gIC8vICAgfSk7XG4gIC8vICAgdGhpcy5zZWNvbmRGb3JtR3JvdXAgPSB0aGlzLl9mb3JtQnVpbGRlci5ncm91cCh7XG4gIC8vICAgICBzZWNvbmRDdHJsOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdXG4gIC8vICAgfSk7XG5cbiAgLy8gfVxuXG4gIC8vIFVwZGF0ZSBGdW5jdGlvbiBmb3IgdGhlIFByb2dyZXNzIEJhclxuICB1cGRhdGVQcm9ncmVzcygpIHtcbiAgICBpZiAodGhpcy5xYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jID09PSB0cnVlKSB7XG4gICAgICBsZXQgaiA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBvc3NpYmlsaXRpZXMudG90YWw7IGkrKykge1xuICAgICAgICB2YXIgcGF0aHBvc3MgPSBPYmplY3QudmFsdWVzKHRoaXMucG9zc2liaWxpdGllcy5wYXRoc1tpXS5xdWVzdGlvbnMpO1xuICAgICAgICBpZiAocGF0aHBvc3NbdGhpcy5wYXRocXVlc3Rpb25dID09PSB0aGlzLmN1cnJlbnROYW1lKSB7XG4gICAgICAgICAgai5wdXNoKGkpO1xuICAgICAgICAgIHRoaXMuY2hlY2sgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hlY2sgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGoubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRoaXMuY291bnQgPSBqWzBdO1xuICAgICAgfVxuICAgICAgaWYgKGoubGVuZ3RoID4gMSkge1xuICAgICAgICB2YXIgd2lkdGggPVxuICAgICAgICAgIDkwICogKHRoaXMucXVlc3Rpb25TdGFjay5sZW5ndGggLyB0aGlzLnBvc3NpYmlsaXRpZXMubWF4UXVlc3Rpb25zKTtcbiAgICAgICAgdGhpcy5wcm9ncmVzc1N0eWxlID0gTWF0aC5yb3VuZCh3aWR0aCkgKyBcIiVcIjtcbiAgICAgIH0gZWxzZSBpZiAoai5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdmFyIHdpZHRoID1cbiAgICAgICAgICA5MCAqXG4gICAgICAgICAgKHRoaXMucXVlc3Rpb25TdGFjay5sZW5ndGggL1xuICAgICAgICAgICAgdGhpcy5wb3NzaWJpbGl0aWVzLnBhdGhzW3RoaXMuY291bnRdLmNvdW50KTtcbiAgICAgICAgdGhpcy5wcm9ncmVzc1N0eWxlID0gTWF0aC5yb3VuZCh3aWR0aCkgKyBcIiVcIjtcbiAgICAgIH1cbiAgICAgIHRoaXMucGVyY2VudCA9ICtNYXRoLnJvdW5kKHdpZHRoKTtcbiAgICB9XG4gIH1cblxuICB0b3duTmFtZShhcmVhKSB7XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gYXJlYS50b3duO1xuICAgIC8vY29uc29sZS5sb2coJ3RoaXMgdmFsdWU9Jyt0aGlzLnNlbGVjdGVkVmFsdWUpXG4gICAgdGhpcy50ZW1wb0FkZHJlc3MgPSBbXTtcbiAgfVxuXG4gIGdldFRvd25Mb2NhbCgpIHtcbiAgICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgZm9yICh2YXIgdmFsIG9mIHRoaXMubG9jYWxhZGRyZXNzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB2YWwudG93bi5zdWJzdHJpbmcoMCwgdGhpcy5zZWxlY3RlZFZhbHVlLmxlbmd0aCkgPT0gdGhpcy5zZWxlY3RlZFZhbHVlXG4gICAgICAgICkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2codmFsLmNvdW50cnkpXG4gICAgICAgICAgdGhpcy50ZW1wb0FkZHJlc3MucHVzaCh2YWwpO1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ3RlbXBvQWRkcmVzcycrdGhpcy50ZW1wb0FkZHJlc3MpXG4gICAgICAgICAgaWYgKHRoaXMudGVtcG9BZGRyZXNzLmxlbmd0aCA9PSA2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWxlY3RMaXN0XCIpLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgdGhpcy5zZXRTZWFyY2hMaXN0V2lkdGgoKTtcbiAgfVxuXG4gIGNsZWFyTGlzdCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudGVtcG9BZGRyZXNzID0gW107XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIHNldFNlYXJjaExpc3RXaWR0aCgpIHtcbiAgICAvL3RvIHJlc2l6ZSBzZWFyY2ggbGlzdCBiYXNlZCBvbiB0aGUgc2NyZWVuIHNpemVcbiAgICBjb25zdCBzZWFyY2hCb3hXaWR0aCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImF1dG9jb21wbGV0ZS1pbnB1dFwiKS5vZmZzZXRXaWR0aDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlbGVjdExpc3RcIikuc3R5bGUud2lkdGggPSBzZWFyY2hCb3hXaWR0aCArIFwicHhcIjtcbiAgfVxuXG4gICAgZ2V0Q29kZSgpe1xuICAgICAgdGhpcy50ZW1wb0FkZHJlc3MgPSBbXTtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkUG9zdGFsY29kZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAodmFyIHZhbCBvZiB0aGlzLmFsbEFkZHJlc3MpIHtcbiAgICAgICAgICBpZiAodmFsLnppcENvZGUuc3Vic3RyaW5nKDAsIHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlLmxlbmd0aCkgPT0gdGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2codmFsLmNvdW50cnkpXG4gICAgICAgICAgICB0aGlzLnRlbXBvQWRkcmVzcy5wdXNoKHZhbCk7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCd0ZW1wb0FkZHJlc3MnK3RoaXMudGVtcG9BZGRyZXNzKVxuICAgICAgICAgICAgaWYgKHRoaXMudGVtcG9BZGRyZXNzLmxlbmd0aCA9PSA2KSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWxlY3RMaXN0XCIpLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICB0aGlzLnNldFNlYXJjaExpc3RXaWR0aCgpO1xuICAgIH1cbiAgICBnZXRQb3N0YWxjb2RlKHZhbHVlKXtcbiAgICAgdGhpcy5wbGFjZXM9W107XG4gICAgIHRoaXMucHJvdmluY2U9W107XG4gICAgICB2YXIgcHJvdmluY2U7XG4gICAgICB2YXIgdG93bjtcbiAgICAgIHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlID0gdmFsdWUuemlwQ29kZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlLmNvdW50cnk7XG4gICAgICB0aGlzLnRlbXBvQWRkcmVzcz1bXTtcblxuIFxuICAgICAgZm9yKHZhciB2YWwgb2YgdGhpcy5sb2NhbGFkZHJlc3Mpe1xuICAgICAgICBpZih0aGlzLnNlbGVjdGVkUG9zdGFsY29kZSA9PSB2YWwuemlwQ29kZSApe1xuICAgICAgICAgIHRoaXMucGxhY2VzLnB1c2godmFsKTtcbiAgICAgICAgICB0aGlzLnByb3ZpbmNlLnB1c2godmFsKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWwuY291bnRyeTtcbiAgICAgICAgICBwcm92aW5jZSA9IHZhbC5wcm92aW5jZVxuICAgICAgICAgIHRvd24gPSB2YWwudG93bjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYodGhpcy5wbGFjZXMubGVuZ3RoID09IDEpe1xuICAgICAgICBcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByb3ZpbmNlID1wcm92aW5jZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENpdHkgPSB0b3duO1xuICAgICAgfWVsc2UgaWYodGhpcy5wbGFjZXMubGVuZ3RoID4xIHx8IHRoaXMucGxhY2VzLmxlbmd0aCA9PTApe1xuICAgICAgICBcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2l0eSA9Jyc7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFByb3ZpbmNlPScnO1xuICAgICAgfVxuICAgIH1cbiAgICBjbG9zZURyb3Bkb3duKCkge1xuICAgICAgaWYodGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUubGVuZ3RoID09IDUpe1xuICAgICAgICB0aGlzLmdldFBvc3RhbGNvZGUoe3ppcENvZGU6dGhpcy5zZWxlY3RlZFBvc3RhbGNvZGV9KTtcbiAgICAgIH1cblxuICAgc2V0VGltZW91dCgoKT0+IHtcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWxlY3RMaXN0Jykuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgIH0sIDUwMCk7XG4gICB9XG5cblxuICAgLy9QbHVzIGJ1dHRvbiBpbXBsZW1lbnRhdGlvbi5cbiAgIHN0cnVjdExvY2FsU3ViUXVlc3Rpb24ocXVlczogTG9jYWxRdWVzdGlvbil7XG4gICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBzdHJ1Y3RMb2NhbFN1YlF1ZXN0aW9uJyk7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5zdWJRdWVzdGlvbnMubGVuZ3RoOyBpKyspe1xuICAgICAgICB2YXIgbG9jYWxTdWJRdWVzdGlvbiA9IG5ldyBMb2NhbFF1ZXN0aW9uKCk7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5JZCA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLklkO1xuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uTmFtZSA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLk5hbWU7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5RdWVzdGlvbl9fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLlF1ZXN0aW9uX19jO1xuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uUXVlc3Rpb25fVGV4dF9fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLlF1ZXN0aW9uX1RleHRfX2M7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5UeXBlX19jID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uVHlwZV9fYztcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLlRpdGxlX19jID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uVGl0bGVfX2M7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5TdWJUaXRsZV9fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLlN1YlRpdGxlX19jO1xuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uSXNfT3B0aW9uYWxfX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5Jc19PcHRpb25hbF9fYztcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLkVycm9yX01lc3NhZ2VfX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5FcnJvcl9NZXNzYWdlX19jO1xuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uTmV4dF9RdWVzdGlvbl9fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLk5leHRfUXVlc3Rpb25fX2M7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5Hcm91cF9fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLkdyb3VwX19jO1xuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uUXVlc3Rpb25fTm9fX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5RdWVzdGlvbl9Ob19fYztcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLkFsbG93ZWRfRmlsZV9FeHRlbnNpb25zX19jID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uQWxsb3dlZF9GaWxlX0V4dGVuc2lvbnNfX2M7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi51bmlxdWVTdWJRSWQgPSAnJyt0aGlzLnN1YlF1ZXN0aW9uc1tpXS5JZCArIGk7IFxuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uaW5wdXQgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5pbnB1dDtcbiAgICAgICAgICB0aGlzLmxvY2FsU3ViUXVlc3Rpb25zLnB1c2gobG9jYWxTdWJRdWVzdGlvbik7XG4gICAgICB9XG4gIC8vIGNvbnNvbGUubG9nKCdmaW5hbCBsb2NhbCBzdWIgcXVlc3Rpb25zJyk7XG4gIC8vIGNvbnNvbGUubG9nKHRoaXMubG9jYWxTdWJRdWVzdGlvbnMpO1xuICAvLyBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XG4gIHRoaXMubG9jYWxTdWJRTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCx0aGlzLmxvY2FsU3ViUXVlc3Rpb25zKTtcbiAgdGhpcy5sb2NhbFN1YlF1ZXN0aW9ucyA9IFtdO1xuICAvLyBjb25zb2xlLmxvZygnZmluYWwga2V5IGxvY2FsU3ViUU1hcCBtYXAnKTtcbiAgLy8gY29uc29sZS5sb2codGhpcy5sb2NhbFN1YlFNYXApO1xuICB9XG5cbiAgYWRkSW5wdXRCb3gocXVlc3Rpb246IExvY2FsUXVlc3Rpb24sIGluZGV4OiBudW1iZXIpe1xuICAgIHZhciBhcnJhID0gdGhpcy5sb2NhbFN1YlFNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLklkKTtcbiAgICB2YXIgcUluZGV4ID0gYXJyYS5pbmRleE9mKHF1ZXN0aW9uKTtcbiAgICB2YXIgcXVlczogTG9jYWxRdWVzdGlvbiA9IG5ldyBMb2NhbFF1ZXN0aW9uKCk7XG4gICAgT2JqZWN0LmFzc2lnbihxdWVzLCBxdWVzdGlvbik7XG4gICAgLy9jb25zb2xlLmxvZygocXVlcy51bmlxdWVTdWJRSWQpLnN1YnN0cmluZygxOCwgKHF1ZXMudW5pcXVlU3ViUUlkKS5sZW5ndGgpKzEpO1xuICAgIGlmKHRoaXMua2V5SW5kZXggPT0gaW5kZXgpe1xuICAgICAgcXVlcy51bmlxdWVTdWJRSWQgPSBxdWVzLklkICsgKFN0cmluZyhpbmRleCsxKSk7XG4gICAgICB0aGlzLmtleUluZGV4Kys7XG4gICAgfWVsc2V7XG4gICAgICB0aGlzLmtleUluZGV4Kys7XG4gICAgICBxdWVzLnVuaXF1ZVN1YlFJZCA9IHF1ZXMuSWQgKyAoU3RyaW5nKHRoaXMua2V5SW5kZXgpKTtcbiAgICB9XG4gICAgcXVlcy5pbnB1dCA9ICcnO1xuICAgIGFycmEuc3BsaWNlKHFJbmRleCsxLCAwLCBxdWVzKTtcblxuICAgIHRoaXMubG9jYWxTdWJRTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCxhcnJhKTtcbiAgICAvL2NvbnNvbGUubG9nKHRoaXMubG9jYWxTdWJRTWFwKTtcbiAgfVxuXG4gIHJlbW92ZUFkZHJlc3MocXVlc1VuaXF1ZUlkOiBzdHJpbmcsIHFOYW1lOiBzdHJpbmcpIHtcbiAgICAvL2NvbnNvbGUubG9nKHF1ZXNVbmlxdWVJZClcbiAgICB2YXIgdmFsID0gdGhpcy5sb2NhbFN1YlFNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLklkKTtcbiAgICB2YXIga2V5aW5kZXggPSAwO1xuXG4gICAgZm9yKGxldCBpPTA7IGk8dmFsLmxlbmd0aDsgaSsrKXtcbiAgICAgIGlmKHZhbFtpXS5OYW1lID09IHFOYW1lKXtcbiAgICAgICAga2V5aW5kZXgrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZih0aGlzLmxvY2FsU3ViUU1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uSWQpICYmIGtleWluZGV4ID4xKXtcbiAgICAgIHZhciByZW9yZGVyID0gdmFsLmZpbHRlcigoaXRlbSkgPT4gaXRlbS51bmlxdWVTdWJRSWQgIT09IHF1ZXNVbmlxdWVJZClcbiAgICAgIHRoaXMubG9jYWxTdWJRTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCxyZW9yZGVyKTtcbiAgICAgIGtleWluZGV4LS07XG4gICAgfVxuICB9XG5cbiAgZ2V0TG9jYWxTdWJRdWVzdGlvbnMoaWQ6IFN0cmluZyl7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxTdWJRTWFwLmdldChpZCk7XG4gIH1cblxuICAvL1NpbmdsZSBBZGQgYnV0dG9uIGZ1bmN0aW9uYWxpdHkgZm9yIExpc3QgdHlwZVxuQWRkKHF1ZXN0aW9uOiBMb2NhbFF1ZXN0aW9uKXtcbiAgICB0aGlzLmFkZEZsYWcgPSAgZmFsc2U7XG4gICAgdmFyIGFycmEgPSB0aGlzLmxvY2FsU3ViUU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xuICAgIHZhciBpbmRleCAgPSBhcnJhLmxlbmd0aDtcbiAgICB2YXIgYSA9IGFycmEuc2xpY2UoLTEpLnBvcCgpO1xuICAgIHRoaXMuaW5kZXhDb3VudCAgPSBhLlF1ZXN0aW9uX05vX19jO1xuICAgIFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbmRleENvdW50IDsgaSsrKSB7XG4gICAgICB2YXIgcXVlczogTG9jYWxRdWVzdGlvbiA9IG5ldyBMb2NhbFF1ZXN0aW9uKCk7XG4gICAgICBPYmplY3QuYXNzaWduKHF1ZXMsIHF1ZXN0aW9uW2ldKTtcbiAgICAgIHRoaXMua2V5SW5kZXgrKztcbiAgICAgIHF1ZXMudW5pcXVlU3ViUUlkID0gcXVlcy5JZCArIChTdHJpbmcodGhpcy5rZXlJbmRleCkpO1xuICAgICAgcXVlcy5pbnB1dCA9ICcnO1xuICAgICAgYXJyYS5zcGxpY2UoaW5kZXgrKHRoaXMuaW5kZXhDb3VudC0xKSwgMCwgcXVlcyk7XG4gICAgdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLklkLGFycmEpO1xuICAgIH0gIFxuICAgIHRoaXMuYWRkRmxhZyA9IHRydWU7XG4gIH1cbiAgXG4gIGhhbmRsZUxvY2F0aW9uU2VsZWN0ZWQobG9jYXRpb246IGFueSxxdWVzOmFueSkge1xuICAgIHF1ZXMuaW5wdXQgPSBsb2NhdGlvbjtcbiAgfVxuXG4gIHNlbGVjdGVkSW5wdXQoaW5wdXQ6YW55ICxxdWVzOmFueSl7IFxuICAgIHF1ZXMuaW5wdXQgPSBpbnB1dDtcbiAgfVxuXG4gIGhhbmRsZVRleHRhcmVhVmFsdWVDaGFuZ2UodmFsdWUgOnN0cmluZyl7XG4gICAgY29uc29sZS5sb2coJ1NlbGVjdGVkIHRleHQtYXJlYSB0ZXh0OicsIHZhbHVlKTtcbiAgfVxuICBnZXREYXRhKGRhdGE6YW55KXtcbiAgIGNvbnNvbGUubG9nKCd0YWJsZSBkYXRhJyxkYXRhKTtcbiAgfVxuXG4gIGRlcGVuZGVudENoYW5nZSh2YWx1ZTphbnkpe1xuICB0aGlzLm5leHRWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZGlzcGxheURhdGUoZGF0ZVNlbGVjdGVkOiBhbnkscXVlczphbnkpe1xuICAgIC8vIFBhcnNlIHRoZSBkYXRlIHN0cmluZyB1c2luZyBtb21lbnQgYW5kIGFzc2lnbiBpdCB0byB0aGlzLnNlbGVjdGVkRGF0ZVxuICAgIHF1ZXMuaW5wdXQgPSBtb21lbnQoZGF0ZVNlbGVjdGVkLnZhbHVlICwgJ1lZWVktTU0tREQgSEg6bW06c3MnKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKS50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0S2V5KGl0ZW06IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGl0ZW0pWzBdO1xuICB9XG4gIFxuICBnZXRWYWx1ZShpdGVtOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKGl0ZW0pWzBdO1xuICB9XG59IiwiPCEtLSBTcGlubmVyIC0tPlxuPG5neC1zcGlubmVyIFtuYW1lXT1cInNwaW5uZXJOYW1lXCIgW3R5cGVdPVwic3Bpbm5lclR5cGVcIj48L25neC1zcGlubmVyPlxuPCEtLSBjdXN0b20gbG9hZGVyIC0tPlxuPGFwcC1sb2FkZXI+PC9hcHAtbG9hZGVyPlxuPCEtLSBCYWNrIFByb2Nlc3NpbmcgLS0+XG48ZGl2ICpuZ0lmPVwiYmFja2ljb24gPT0gZmFsc2VcIiA+XG4gIDxkaXYgY2xhc3M9XCJiYWNraWNvblwiIFtzdHlsZS52aXNpYmlsaXR5XT1cInF1ZXN0aW9uU3RhY2subGVuZ3RoID4wID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIj5cbiAgICA8YnV0dG9uIChjbGljayk9XCJoYW5kbGVCYWNrQ2xpY2soKVwiIFtjbGFzc109XCIgYWJJdGVtPy5TdGF0dXNfX2MgPT0gJ0NvbXBsZXRlZCcgPyAnc3VtbWFyeS12b2x2ZXInOidhcHAtYmFjazEnXCI+XG4gICAgPGltZyBjbGFzcz1cImljb24tYXJyb3ctYmFja1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1hcnJvdy1iYWNrLnBuZ1wiIGFsdD1cIlNjcm9sbCBkb3duXCI+IHt7IHFiSXRlbT8uQmFja19fYyB9fVxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIFF1ZXN0aW9uIEhhbmxkaW5nIC0tPlxuPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbVwiIFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsX19jID8gJ3F1ZXN0aW9uZGl2MScgOiAncXVlc3Rpb25kaXYxIHBhZGQtYm90dG9tJ1wiPlxuICA8IS0tIFByb2dyZXNzIEJhciAmIFRpdGxlIC0tPlxuICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLlRpdGxlX19jICYmIHFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcIj5cbiAgICA8aDEgY2xhc3M9XCJoZWFkZXIxXCI+e3sgcXVlc3Rpb25JdGVtPy5UaXRsZV9fYyB9fTwvaDE+XG4gICAgPGRpdiBjbGFzcz1cImhlYWRlcjJcIj57eyBxdWVzdGlvbkl0ZW0/LlN1YlRpdGxlX19jIH19PC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gUHJvZ3Jlc3MgJiBHcm91cGluZyAtLT5cbiAgPGRpdiBbbmdDbGFzc109XCJ7IHF1ZXN0aW9uZGl2MjogIXFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cbiAgICA8IS0tIFBpZSBDaGFydCBQcm9ncmVzcyAtLT5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgYmdDb2xvcjogcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2MgfVwiPlxuICAgICAgPGRpdiBpZD1cInByb2dyZXNzXCIgKm5nSWY9XCJxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fY1wiPlxuICAgICAgICA8Y2lyY2xlLXByb2dyZXNzIGNsYXNzPVwidGl0bGViYXJcIiBbcGVyY2VudF09XCJ0aGlzLnBlcmNlbnRcIiBbcmFkaXVzXT1cIjQwXCIgW3NwYWNlXT1cIi00XCIgW291dGVyU3Ryb2tlV2lkdGhdPVwiNFwiXG4gICAgICAgIFtpbm5lclN0cm9rZVdpZHRoXT1cIjRcIiBbb3V0ZXJTdHJva2VDb2xvcl09XCInI2UwYjFiMCdcIiBbaW5uZXJTdHJva2VDb2xvcl09XCInI2U3ZThlYSdcIiBbYW5pbWF0aW9uXT1cInRydWVcIiBbYmFja2dyb3VuZFBhZGRpbmddPSBcIjBcIlxuICAgICAgICBbYmFja2dyb3VuZENvbG9yXT0gXCInI2RkMmUxMydcIiBbYmFja2dyb3VuZEdyYWRpZW50U3RvcENvbG9yXT1cIicjZjliZmJkJ1wiIFt0aXRsZUNvbG9yXT1cIicjZjNlZGVkJ1wiIFxuICAgICAgICBjbGFzcz1cIm5nLXN0YXItaW5zZXJ0ZWRcIiBbdGl0bGVdPVwidGhpcy5wZXJjZW50KyclJ1wiIFtzaG93U3VidGl0bGVdPVwiZmFsc2VcIiBbc2hvd0JhY2tncm91bmRdPVwidHJ1ZVwiIFthbmltYXRpb25EdXJhdGlvbl09XCIzMDBcIlxuICAgICAgICBbc3RhcnRGcm9tWmVyb109XCJmYWxzZVwiIFtyZXNwb25zaXZlXT1cImZhbHNlXCIgPlxuICAgICAgICA8L2NpcmNsZS1wcm9ncmVzcz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTaG93IHRoZSBHcm91cC9Nb2R1bGUgcmVsYXRlZCB0byB0aGUgUHJvZ3Jlc3MgLS0+XG4gICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5Hcm91cF9fYyAmJiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBxdWVzdGlvbmFsaWduOiAhcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2MgfVwiPlxuICAgICAgPGRpdiBjbGFzcz1cImxhcmdlVGl0bGVcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwibXl0LWZvbnQ2IG15dC10ZXh0M1wiPlxuICAgICAgICAgIHt7IHF1ZXN0aW9uSXRlbT8uR3JvdXBfX2MgfX1cbiAgICAgICAgPC9oMz5cbiAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5TdWJfVGV4dF9fYyAhPSAnwr9FbiBxdcOpIHBhw61zIG9jdXJyacOzPydcIiBjbGFzcz1cIm15dC1mb250NSBteXQtdGV4dDFcIj57e3F1ZXN0aW9uSXRlbT8uU3ViX1RleHRfX2N9fTwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLlN1Yl9UZXh0X19jID09PSAnwr9FbiBxdcOpIHBhw61zIG9jdXJyacOzPydcIiBjbGFzcz1cIm15dC1mb250MTAgbXl0LXRleHQyXCI+e3txdWVzdGlvbkl0ZW0/LlN1Yl9UZXh0X19jfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFF1ZXN0aW9uIEhhbmRsaW5nIC0tPlxuICA8ZGl2IGNsYXNzPVwicXVlc3Rpb25kaXYyXCI+XG4gICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5RdWVzdGlvbl9UZXh0X19jXCI+XG4gICAgICA8cCBjbGFzcz1cInF1ZXN0aW9uU3R5bGVcIiBbaW5uZXJIVE1MXT1cImdldFRleHQocXVlc3Rpb25JdGVtPy5RdWVzdGlvbl9UZXh0X19jKVwiPlxuICAgICAgICB7e3F1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fY319XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBUaXRsZSAtLT5cbiAgICA8IS0tIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uSXNfVGl0bGVfX2NcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uVHlwZV9fYyAhPSAnQm9vaycgJiYgcXVlc3Rpb25JdGVtLlF1ZXN0aW9uX05vX19jIT0nNicgJiYgcXVlc3Rpb25JdGVtLlF1ZXN0aW9uX05vX19jIT0nOSdcIj4gXG4gICAgICAgIDxoMyBjbGFzcz1cInF1ZXN0aW9uYWxpZ24gIG15dC1mb250MyBteXQtYWxpZ24gbXl0LXRleHQ0XCIgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fYylcIj5cbiAgICAgICAgICB7e3F1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fY319XG4gICAgICAgIDwvaDM+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG4gICAgPCEtLSBIQSAzMS1KQU4tMjQgUmVtb3ZlZCB0aGUgdW53YW50ZWQgc3R5bGluZyBjbGFzcyAtLT5cbiAgICA8IS0tIDxkaXYgKm5nSWY9XCIhcXVlc3Rpb25JdGVtLklzX1RpdGxlX19jXCIgW2NsYXNzXT1cInFiSXRlbS5pc1NoZW5nZWxfX2MgPyAnaGVhZGVyLXN0eWxlJyA6ICdxdWVzdGlvbi1mLXNpemUnXCI+XG4gICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2MpXCIgPlxuICAgICAgICB7eyBxdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2MgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cblxuICAgIDwhLS0gVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCB3aXRoIEN1c3RvbSBTdHlsaW5nIC0gTVIgLSAxMUFVRzIzIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5UeXBlX19jID09ICdCb29rJ1wiPlxuICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5RdWVzdGlvbl9Ob19fYz09JzYnXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cIm15dC0zMjFcIiBbaW5uZXJIVE1MXT1cImdldFRleHQocXVlc3Rpb25JdGVtPy5RdWVzdGlvbl9UZXh0X19jKVwiPlxuICAgICAgICAgIHt7IHF1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fYyB9fVxuICAgICAgICA8L2gzPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuICAgIFxuICAgIDwhLS0gVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCB3aXRoIEN1c3RvbSBTdHlsaW5nIC0gTVIgLSAxMUFVRzIzIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5UeXBlX19jID09ICdGaWxlJyBcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uUXVlc3Rpb25fTm9fX2M9PSc5J1wiPlxuICAgICAgICA8aDMgY2xhc3M9XCJteXQtMzQ1XCIgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fYylcIj5cbiAgICAgICAgICB7e3F1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fY319XG4gICAgICAgIDwvaDM+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQWRkaXRpb25hbCBJbmZvIC0tPlxuICA8IS0tIFRoZSBiZWxvdyBjb2RlIGNhbiBiZSB3cml0dGVuIGVmZmVjdGl2ZWx5IG5lc3RlZCBuZ0lmIGZvciBSaWNoIFRleHQgJiBPdGhlciBvbncgZm9yIFByb2dyZXNzIEJhciAtLT5cbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5BZGRpdGlvbmFsX1JpY2hfX2MgJiYgcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiID5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImFkZGl0aW9uYWwgXCIgW2lubmVySFRNTF09XCJpbm5lcmh0bWxcIj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uQWRkaXRpb25hbF9SaWNoX19jICYmICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCI+XG4gICAgPGRpdiBjbGFzcz1cImluZm8tYWxlcnQgcXVlcy1hbGVydDFcIj5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaW5mbyBmYS0zeCBpcG9zaXRpb24gaWNvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgPGRpdiBjbGFzcz1cImluZm9kaXZcIiBbaW5uZXJIVE1MXT1cImlubmVyaHRtbFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIERyb3Bkb3duLS0+XG4gIDxkaXYgKm5nSWY9XCJkcm9wZG93bkZsYWdcIiA+XG4gICAgPGRpdiBjbGFzcz1cImRpcy1mbGV4XCI+XG4gICAgICA8c2VsZWN0IFxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ2R0LWxpbmUgbXl0LWFsaWduMyBteXQtYWxpZ24yIGRwRG93biBkcm9wYm94IGRvd24xIG15dC1kcm9wYm94IG15dC1ib3JkZXItciBteXQtZm9udDEnOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICAnY3VzdG9tLXNlbGVjdCc6ICFxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fY1xuICAgICAgICB9XCIgY2xhc3M9XCJtci1zbS0yIGRkLWhlaWdodCBkcm9wYm94IFwiICBpZD1cImRyb3Bkb3duXCIgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIChjaGFuZ2UpPVwiY2xlYXJFcnJvcigpXCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3tcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbT8uZXJyb3IgPyAncmVkJyA6IGlucFZhbHVlPy5sZW5ndGggPiAwID8gJyNmZmYnIDogJydcbiAgICAgICAgfX1cIiBzdHlsZS5jb2xvcj1cInt7IHF1ZXN0aW9uSXRlbT8uZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogMjEuNXJlbSAhaW1wb3J0YW50O1wiPlxuICAgICAgICA8b3B0aW9uICpuZ0Zvcj1cImxldCBvcHQgb2YgcXVlc3Rpb25JdGVtLlF1ZXN0aW9uX09wdGlvbnNfX3IucmVjb3Jkc1wiIGNsYXNzPVwib3B0aW9uXCIgdmFsdWU9XCJ7eyBvcHQuVmFsdWVfX2MgfX1cIj5cbiAgICAgICAgICB7eyBvcHQuVmFsdWVfX2MgfX1cbiAgICAgICAgPC9vcHRpb24+XG4gICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgIDxvcHRpb24gdmFsdWU9XCIuXCIgZGlzYWJsZWQgaGlkZGVuPnt7J3BsZWFzZU1ha2VDaG9pY2UnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fTwvb3B0aW9uPlxuICAgICAgPC9zZWxlY3Q+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gUmFkaW8gLS0+XG4gIDxkaXYgKm5nSWY9XCJyYWRpb0ZsYWcgfHwgZGF0YUZsYWdcIiBjbGFzcz1cIlwiPlxuICAgIDxkaXYgKm5nSWY9XCJ0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvclwiIGNsYXNzPVwiY29uZC1kaXYyXCI+XG4gICAgICB7eyBxdWVzdGlvbkl0ZW0/LkVycm9yX01lc3NhZ2VfX2MgfX1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZGlzLWZsZXhcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdCBvZiBxdWVzdGlvbkl0ZW0uUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzXCIgY2xhc3M9XCJyYWRpbyByYWRpb09wdGlvblwiID5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwicmFkaW9jb250YWluZXIgY29udGFpbmVyICBteXQtZm9udDRcIj57eyBvcHQuVmFsdWVfX2MgfX1cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgW2lkXT1cIm9wdC5JZFwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiBuYW1lPVwiaW5wVmFsdWVcIiB2YWx1ZT1cInt7IG9wdC5WYWx1ZV9fYyB9fVwiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9wdGlvbkNoYW5nZShvcHQuVmFsdWVfX2MpXCIgLz5cbjwhLS0gSEEgMjBGRUIyNCBSZW1vdmVkIGNoZWNrbWFyayBhcyBpdCB3YXMgY2F1c2luZyBzdHlsaW5nIGlzc3VlIGluIFJhZGlvIC0tPlxuICAgICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBDaGVja2JveCAtLT5cbiAgPGRpdiAqbmdJZj1cImNoZWNrYm94RmxhZ1wiIGNsYXNzPVwiXCI+XG4gICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbT8uZXJyb3JcIiBjbGFzcz1cImNvbmQtZGl2MlwiPlxuICAgICAge3sgcXVlc3Rpb25JdGVtPy5FcnJvcl9NZXNzYWdlX19jIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNoZWNrYm94LWNvbnRhaW5lclwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBvcHRpb25WYWx1ZXNcIiBjbGFzcz1cImNoZWNrYm94LXdyYXBwZXJcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29udGFpbmVyMVwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBbaWRdPVwiaXRlbS5JZFwiIFsobmdNb2RlbCldPVwiaXRlbS5jaGVja2VkXCIgKGNsaWNrKT1cImNsZWFyRXJyb3IoKVwiIC8+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaGVja2JveC1sYWJlbFwiPnt7IGl0ZW0uVmFsdWVfX2MgfX08L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBUZXh0IC0tPlxuICA8ZGl2ICpuZ0lmPVwidGV4dEZsYWdcIiBjbGFzcz1cImNvbC1tZC0xMiBteXQtYm9vazFcIj5cbiAgICA8IS0tIEhBIDMxLUpBTi0yNCBUbyByZWR1Y2UgdGhlIG1hcmdpbiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgY2xhc3M9XCJkaXMtZmxleCBteXQtYWxpZ24yXCIgW2NsYXNzXT1cIidjb2wtbWQtJyArIHF1ZXN0aW9uSXRlbT8uU2l6ZV9fYyArICcgcGFkZGluZ25vbmUnXCI+XG4gICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICdib3hvdXRsaW5lIG15dC1mb250MSBteXQtYm9vazEnOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICB0ZXh0Qm94MTogIXFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jXG4gICAgICAgIH1cIiBpZD1cInRleHQtaW5wdXQtaWRcIiByZXF1aXJlZD1cIlwiIChmb2N1cyk9XCJjbGVhckVycm9yKClcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtPy5lcnJvclxuICAgICAgICAgICAgPyAncmVkJ1xuICAgICAgICAgICAgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyAnIzg3YmUxYydcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfX1cIiBvbmlucHV0PVwidGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teYS16QS1aMC05XFxzLjo7LD9dL2csJycpO1wiIC8+XG4gICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZWNrIGNoZWNrLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cImlucFZhbHVlPy5sZW5ndGggPiAwXCI+PC9pPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFRleHQgQXJlYSAtLT5cbiAgPGRpdiAqbmdJZj1cInRhRmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgPGRpdiBjbGFzcz1cImRpcy1mbGV4XCI+XG4gICAgICA8dGV4dGFyZWEgY2xhc3M9XCJ0YS1pbnB1dFwiIGlkPVwidGEtaW5wdXQtaWRcIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgKGNsaWNrKT1cImNsZWFyRXJyb3IoKVwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0/LmVycm9yXG4gICAgICAgICAgICA/ICdyZWQnXG4gICAgICAgICAgICA6IGlucFZhbHVlPy5sZW5ndGggPiAwICYmIHRhRm9jdXNPdXRcbiAgICAgICAgICAgID8gJyM4N2JlMWMnXG4gICAgICAgICAgICA6ICcnXG4gICAgICAgIH19XCIgKGZvY3Vzb3V0KT1cInRhRm9jdXNPdXQgPSB0cnVlXCJcbiAgICAgICAgb25pbnB1dD1cInRoaXMudmFsdWU9dGhpcy52YWx1ZS5yZXBsYWNlKC9bXmEtekEtWjAtOVxccy46Oyw/XS9nLCcnKTtcIj48L3RleHRhcmVhPlxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBjaGVjay1pY29uXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKm5nSWY9XCJpbnBWYWx1ZT8ubGVuZ3RoID4gMCAmJiB0YUZvY3VzT3V0XCI+PC9pPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIENDIE51bWJlciBGb3JtYXQgLS0+XG4gIDxkaXYgKm5nSWY9XCJudW1iZXJGbGFnXCIgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGlzLWZsZXhcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwiVGV4dFwiIHBsYWNlaG9sZGVyPVwiMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwIDAwMDBcIiBbbmdDbGFzc109XCJ7IGJveG91dGxpbmU6IHFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jIH1cIlxuICAgICAgICBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgaWQ9XCJudW1iZXItaW5wdXQtaWRcIiAobmdNb2RlbENoYW5nZSk9XCJDQ09uQ2hhbmdlKCRldmVudClcIiByZXF1aXJlZD1cIlwiIG1heGxlbmd0aD1cIjI5XCJcbiAgICAgICAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiIG9uaW5wdXQ9XCJ0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSgvW14wLTkgXS9nLCcnKTtcIlxuICAgICAgICBzdHlsZT1cIndpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7XCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3tcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvclxuICAgICAgICAgICAgPyAncmVkJ1xuICAgICAgICAgICAgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyAnIzg3YmUxYydcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfX1cIiAvPlxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVja1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHN0eWxlPVwiY29sb3I6ICM4N2JlMWM7IG1hcmdpbi1sZWZ0OiAtMnJlbTsgei1pbmRleDogMTsgcGFkZGluZzogNXB4O1wiXG4gICAgICAgICpuZ0lmPVwiaW5wVmFsdWU/Lmxlbmd0aCA+IDBcIj48L2k+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIEVORC0tPlxuXG4gIDwhLS0gQWxwaGFOdW1lcmljIC0tPlxuICA8ZGl2ICpuZ0lmPVwiYWxwaGFudW1lcmljRmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyXCI+IDwhLS1VSSBub3QgY29tcGxldGVkLS0+XG4gICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOnJlbGF0aXZlO1wiPlxuICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgIDxpbnB1dCB0eXBlPXRleHQgcGxhY2Vob2xkZXI9XCJ7eyd6ZXJvT2ZaZXJvJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX1cIiBzdHlsZT1cInBhZGRpbmc6NXB4IDVweCA1cHggMTUwcHg7XCIgaWQ9XCJ5b3VyaWRoZXJlXCIvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEVtYWlsIC0tPlxuICA8ZGl2ICpuZ0lmPVwiZW1haWxGbGFnXCIgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZGlzLWZsZXhcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBbbmdDbGFzc109XCJ7IGJveG91dGxpbmU6IHFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jIH1cIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgaWQ9XCJlbWFpbC1pbnB1dC1pZFwiXG4gICAgICAgIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3JcbiAgICAgICAgICAgID8gJ3JlZCdcbiAgICAgICAgICAgIDogaW5wVmFsdWU/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gJyM4N2JlMWMnXG4gICAgICAgICAgICA6ICcnXG4gICAgICAgIH19XCIgLz5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2tcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBzdHlsZT1cImNvbG9yOiAjODdiZTFjOyBtYXJnaW4tbGVmdDogLTJyZW07IHotaW5kZXg6IDE7IHBhZGRpbmc6IDVweFwiXG4gICAgICAgICpuZ0lmPVwiaW5wVmFsdWU/Lmxlbmd0aCA+IDBcIj48L2k+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRGF0ZVRpbWUgLS0+XG4gIDxkaXYgKm5nSWY9XCJkdEZsYWdcIiBjbGFzcz1cImNvbC1tZC0xMiBwYWRkaW5nWmVybyBteXQtdGltZTFcIiA+XG4gICAgPCEtLSBFcnJvciBIYW5kbGluZyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uZXJyb3JcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDtcbiAgICBjb2xvcjogcmVkO1wiPnt7cXVlc3Rpb25JdGVtPy5lcnJvcj8uZXJyb3JNc2d9fTwvZGl2PlxuXG4gICAgPCEtLSBEYXRlIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJkYXRlRmxhZ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBwYWRkaW5nQm90dG9tXCI+XG4gICAgICAgIDwhLS0gSEEgMzEtSkFOLTI0IFRoZXNlIGxhYmVscyB3ZXJlIG9jY3VwaW5nIHRoZSBlbXB0eSBzcGFjZSB3aGVuIGRhdGUgcXVlc3Rpb24gY29tZXMtLT5cbiAgICAgICAgPCEtLSA8bGFiZWwgY2xhc3M9XCJkYXRlLXRpbWUgY29sb3JmXCI+e3sgcXVlc3Rpb25JdGVtPy5EYXRlX1RleHRfX2MgfX08L2xhYmVsPiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRpcy1mbGV4XCI+XG4gICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgICA8IS0tIEhBIDAyRkVCMjQgQWRkaXRpb25hbCBwYXJhbSB0byB1cGRhdGUgdGhlIHF1ZXN0aW9uIC0tPlxuICAgICAgICAgIDxteS1kYXRlLXBpY2tlciBuYW1lPVwibXlkYXRlXCIgW29wdGlvbnNdPVwibXlEYXRlUGlja2VyT3B0aW9uc1wiIGlkPVwiZGF0ZVwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4ICFpbXBvcnRhbnQ7XCIgKGRhdGVDaGFuZ2VkKT1cIm9uRGF0ZUNoYW5nZWQoJGV2ZW50LCBxdWVzdGlvbkl0ZW0pXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsRGF0ZVwiIGNsYXNzPVwiZGF0ZS1waWNrZXJcIiBwbGFjZWhvbGRlcj1cInt7J3NlbGVjdERhdGUnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVwiIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cbiAgICAgICAgICA8L215LWRhdGUtcGlja2VyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBUaW1lIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJ0aW1lRmxhZ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBwYWRkaW5nQm90dG9tXCI+XG4gICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiZGF0ZS10aW1lIGNvbG9yZlwiPnt7IHF1ZXN0aW9uSXRlbT8uVGltZV9UZXh0X19jIH19PC9sYWJlbD4gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkaXMtZmxleFwiPlxuICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7J2R0LWxpbmUgZGF0ZS1saW5lIGR0LXRpbWUnOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVhbmRUaW1lOiAhcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2N9XCIgXG4gICAgICAgICAgICAgIGlkPVwiZGF0ZWFuZFRpbWVcIiBbc3R5bGUuYm9yZGVyLWNvbG9yXT1cInF1ZXN0aW9uSXRlbT8uZXJyb3IgPyAncmVkJzogcXVlc3Rpb25JdGVtPy5pbnB1dD8ubGVuZ3RoID4gMCA/ICcnIDogJydcIlxuICAgICAgICAgICAgICAoZm9jdXMpPVwiKGNsZWFyU1FFcnJvcikgXCI+XG4gICAgICAgICAgPHNlbGVjdCBuYW1lPVwiaG91cnNcIiBjbGFzcz1cImRhdGV0aW1lIHNob3dIb3VyIG15dC10aW1lIG15dC1ob3VyXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEhvdXJcIiBpZD1cImhvdXJcIlxuICAgICAgICAgICAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPkhIPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJob3VyXCIgKm5nRm9yPVwibGV0IGhvdXIgb2YgaG91cnNcIj5cbiAgICAgICAgICAgICAge3sgaG91ciB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvblwiPiA6IDwvc3Bhbj5cbiAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJtaW51dGVzXCIgY2xhc3M9XCJkYXRldGltZSBzaG93bWludXRlIG15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1pbnV0ZVwiIGlkPVwibWludXRlXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5NTTwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwibWludXRlXCIgKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBtaW51dGVzXCI+XG4gICAgICAgICAgICAgIHt7IG1pbnV0ZSB9fVxuICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGNvbG9uMTogcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2MgfVwiICpuZ0lmPVwicXVlc3Rpb25JdGVtPy5YMjRfSG91cnNfX2MgPT0gZmFsc2VcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb25cIj4gOiA8L3NwYW4+XG4gICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJBTS9QTVwiIGNsYXNzPVwibXl0LXRpbWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTWVyaWRpZW1cIiBpZD1cIm1lcmlkaWVtXCI+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJBTVwiPkFNPC9vcHRpb24+XG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJQTVwiPlBNPC9vcHRpb24+XG4gICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgIDwhLS0gPGRpdiBbbmdDbGFzc109XCJ7Jyc6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MsICdkYXRlYW5kVGltZSc6ICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jfVwiPjwvZGl2PiAtLT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGkgY2xhc3M9XCJmYSBjaGVjay1pY29uM1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwicXVlc3Rpb25JdGVtPy5pbnB1dD8ubGVuZ3RoID4gMFwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBBdHRhY2htZW50IC8gRmlsZSAtLT5cbiAgPGRpdiAqbmdJZj1cImZpbGVGbGFnXCI+XG4gICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW5mby1hbGVydFwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHRoaXMucXVlc3Rpb25JdGVtPy5lcnJvciA/ICdyZWQnIDogJycgfX1cIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwicGljdHVyZS11cGxvYWRcIiBmb3I9XCJmaWxlLXVwbG9hZFwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGljdHVyZS11cGxvYWQtY2hpbGRcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmlsZS1pbWFnZS1vIGZhLTV4IGljb2xvclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJmYSBmYS1wbHVzIGZhLTJ4IHBpY3R1cmUtdXBsb2FkLWNoaWxkIHBpYy11cGxvYWQgaWNvbG9yXCI+XG4gICAgICAgICAgICA8aSBjbGFzcz1cIlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxpbnB1dCBpZD1cImZpbGUtdXBsb2FkXCIgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCJ7eyBhbGxvd2VkRmlsZUV4dGVuc2lvbiB9fVwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQsdGhpcy5xdWVzdGlvbkl0ZW0pXCIgLz5cbiAgICA8L2Rpdj5cbiAgICA8dWwgKm5nSWY9XCJcbiAgICAgICAgYXR0YWNobWVudHM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgcXVlc3Rpb25JdGVtPy5UeXBlX19jID09PSAnRmlsZScgJiZcbiAgICAgICAgIXFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jXG4gICAgICBcIiBjbGFzcz1cImF0dGFjaC11bGlzdCBjb2wtbWQtMTJcIj5cbiAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBhdHRhY2htZW50c1wiIGNsYXNzPVwiYWxpZ24tbFwiPlxuICAgICAgICB7eyBhdHRhY2htZW50LmF0dGFjaG1lbnROYW1lfX08c3BhbiBjbGFzcz1cImF0dGFjaC1saXN0XCIgKGNsaWNrKT1cImRlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudC5hdHRhY2htZW50SWQpXCI+WDwvc3Bhbj5cbiAgICAgIDwvbGk+XG4gICAgPC91bD5cblxuICAgIDwhLS0gQXR0YWNobWVudCBQcm9ncmVzcyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBhdHRhY2htZW50c1wiIGNsYXNzPVwiZmlsZS11cGxvYWRpbmctYm94XCI+XG4gICAgICAgIDwhLS08aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMngucG5nXCIgY2xhc3M9XCJpY29uLWVkaXQxXCIgLz4tLT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWRpbmctZmlsZS1uYW1lIFwiPnt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWUgfX08L3NwYW4+XG4gICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRlbGV0ZSU0MDJ4LnBuZ1wiIGNsYXNzPVwiZGVsZXRlSWNvblwiXG4gICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudC5hdHRhY2htZW50SWQpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImZpbGUtdXBsb2FkLWJveFwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiPlxuICAgICAgXG4gICAgICAgIDwhLS08aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMngucG5nXCIgY2xhc3M9XCJpY29uLWVkaXQxXCIgLz4tLT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmLU5hbWVcIiBbaW5uZXJIVE1MXT1cImdldFRleHQocXVlc3Rpb25JdGVtPy5RdWVzdGlvbl9UZXh0X19jKVwiPiB7eyBxdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2N9fTwvc3Bhbj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmlsZS1sYWJlbCBcIj5cbiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vZmlsZS11cGxvYWQucG5nXCIgY2xhc3M9XCJmaWxlLWljb25cIi8+XG4gICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgICA8aW5wdXQgbmFtZT1cImF0dGFjaG1lbnRcIiB0eXBlPVwiZmlsZVwiIHBsYWNlaG9sZGVyPVwie3sndG9CdXlUaWNrZXQnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVwiIG11bHRpcGxlXG4gICAgICAgICAgICBhY2NlcHQ9XCIucGRmLCAucG5nLCAuanBnLCAuanBlZywgLmhlaWMsIC5hcHBsaWNhdGlvbi9wZGZcIiAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImZpbGUtdXBsb2FkLWJ0blwiPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQm9vayAtLT5cbiAgPGRpdiAqbmdJZj1cImJvb2tGbGFnXCI+XG4gICAgPGRpdiBbY2xhc3NdPVwicWJJdGVtLmlzU2hlbmdlbF9fYyA/ICdmb3JtLWdyb3VwIGNvbnRlbnQtYm94JyA6ICdmb3JtLWdyb3VwJ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5lcnJvclwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgY29sb3I6IHJlZDtcIj57e3F1ZXN0aW9uSXRlbT8uZXJyb3I/LmVycm9yTXNnfX08L2Rpdj5cbiAgICAgICAgPGRpdiBbY2xhc3NdPVwicWJJdGVtLmlzU2hlbmdlbF9fYyA/ICcnIDogJ215dC1hbGlnbjMnXCIgW2NsYXNzXT1cInFiSXRlbS5pc1NoZW5nZWxfX2MgPyAnY29sLWxnLScgKyBxdWVzLlNpemVfX2MgKyAnIHBhZGRpbmdub25lJyA6ICdjb2wtbWQtJyArIHF1ZXMuU2l6ZV9fYyArICcgcGFkZGluZ25vbmUnXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcXVlcyBvZiBzdWJRdWVzdGlvbnM7bGV0IGkgPSBpbmRleFwiIFtpZF09XCJxdWVzLklkXCI+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGRvd24yOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCI+XG4gICAgICAgICAgICA8c3Bhbj57eyBxdWVzPy5RdWVzdGlvbl9UZXh0X19jIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ1plcm8gbXl0LWRhdGVUaW1lTmV3XCIgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUaW1lJyB8fCBxdWVzLlR5cGVfX2MgPT09ICdEYXRlJ1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0RhdGUnXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiZGF0ZS10aW1lIGNvbG9yZlwiPnt7IHF1ZXN0aW9uSXRlbT8uRGF0ZV9UZXh0X19jIH19PC9sYWJlbD4gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVhbmR0aW1lXCI+XG4gICAgICAgICAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICAgICAgICAgICAgPCEtLSBIQSAwMkZFQjI0IEFkZGl0aW9uYWwgcGFyYW0gdG8gdXBkYXRlIHRoZSBxdWVzdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgIDxteS1kYXRlLXBpY2tlciBuYW1lPVwibXlkYXRlXCIgW29wdGlvbnNdPVwibXlEYXRlUGlja2VyT3B0aW9uc1wiIGlkPVwiZGF0ZVwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4ICFpbXBvcnRhbnQ7XCIgKGRhdGVDaGFuZ2VkKT1cIm9uRGF0ZUNoYW5nZWQoJGV2ZW50LCBxdWVzKVwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsRGF0ZVwiIGNsYXNzPVwiZGF0ZS1waWNrZXJcIiBwbGFjZWhvbGRlcj1cInt7J3NlbGVjdERhdGUnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVwiICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCIgPlxuICAgICAgICAgICAgICAgICAgPC9teS1kYXRlLXBpY2tlcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUaW1lJ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdCb3R0b21cIj5cbiAgICAgICAgICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImRhdGUtdGltZSBjb2xvcmZcIj57eyBxdWVzdGlvbkl0ZW0/LlRpbWVfVGV4dF9fYyB9fTwvbGFiZWw+IC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlYW5kdGltZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydkdC1saW5lIGRhdGUtbGluZSBkdC10aW1lJzogcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZWFuZFRpbWU6ICFxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fY31cIiBcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImRhdGVhbmRUaW1lXCIgW3N0eWxlLmJvcmRlci1jb2xvcl09XCJxdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCc6IHF1ZXN0aW9uSXRlbT8uaW5wdXQ/Lmxlbmd0aCA+IDAgPyAnJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiKGNsZWFyU1FFcnJvcikgXCI+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJob3Vyc1wiIGNsYXNzPVwiZGF0ZXRpbWUgc2hvd0hvdXIgbXl0LXRpbWUgbXl0LWhvdXJcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkSG91clwiIGlkPVwiaG91clwiXG4gICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPkhIPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImhvdXJcIiAqbmdGb3I9XCJsZXQgaG91ciBvZiBob3Vyc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGhvdXIgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb25cIj4gOiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJtaW51dGVzXCIgY2xhc3M9XCJkYXRldGltZSBzaG93bWludXRlIG15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1pbnV0ZVwiIGlkPVwibWludXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+TU08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwibWludXRlXCIgKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBtaW51dGVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgbWludXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgY29sb24xOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uWDI0X0hvdXJzX19jID09IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb25cIj4gOiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cIkFNL1BNXCIgY2xhc3M9XCJteXQtdGltZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRNZXJpZGllbVwiIGlkPVwibWVyaWRpZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQU1cIj5BTTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJQTVwiPlBNPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdEYXRlVGltZSdcIj5cbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLWRhdGUtcGlja2VyIFttaW5EYXRlXT1cInF1ZXMubWluRGF0ZVwiIFtkYXRlXT1cInF1ZXMuaW5wdXRcIiAoZGF0ZUNoYW5nZSk9XCJkaXNwbGF5RGF0ZSgkZXZlbnQscXVlcylcIj48L2FwcC1jdXN0b20tZGF0ZS1waWNrZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ1RleHQnXCI+XG4gICAgICAgICAgICA8bGFiZWw+e3sgcXVlcy5RdWVzdGlvbl9UZXh0X19jIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLWlucHV0XG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicXVlcz8uaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NWYWx1ZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgJ2Rpcy1mbGV4IGR0LWxpbmUgZGF0ZS1saW5lIGJvb2tUZXh0IGJveG91dGxpbmUgbXl0LWZvbnQxJzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0Qm94OiAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1xuICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwicXVlc1wiIFxuICAgICAgICAgICAgICAgICAgW2lkVmFsdWVdPVwicXVlcz8uVHJhY2tpbmdfSURfX2NcIlxuICAgICAgICAgICAgICAgICAgW2ZvY3VzRXZlbnRdPVwiY2xlYXJTUUVycm9yKHF1ZXM/LklkKVwiXG4gICAgICAgICAgICAgICAgICBbZXJyb3JdPVwicXVlcz8uZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInF1ZXM/LlF1ZXN0aW9uX19jXCJcbiAgICAgICAgICAgICAgICAgIChpbnB1dFZhbHVlKT1cInNlbGVjdGVkSW5wdXQoJGV2ZW50LHF1ZXMpXCI+XG4gICAgICAgICAgICA8L2FwcC1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0xvY2F0aW9uJ1wiPlxuICAgICAgICAgICAgPCEtLSBmb3IgcGljayBsb2NhdGlvbiAtLT5cbiAgICAgICAgICAgIDwhLS0gSEExMDAxMjAyNCBBZGRlZCBBcGkga2V5IGFzIGlucHV0IC0tPlxuICAgICAgICAgICAgPGFwcC1waWNrLWxvY2F0aW9uIFthcGlLZXldPVwicWJJdGVtWydBcGlfS2V5X19jJ11cIiBbYWRkcmVzc109XCJxdWVzLmlucHV0XCIgKGxvY2F0aW9uU2VsZWN0ZWQpPVwiaGFuZGxlTG9jYXRpb25TZWxlY3RlZCgkZXZlbnQscXVlcylcIj48L2FwcC1waWNrLWxvY2F0aW9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gZm9yICB0ZXh0IGFyZWEgICAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnVGV4dEFyZWEnXCI+XG4gICAgICAgICAgICA8YXBwLWN1c3RvbS10ZXh0LWFyZWEgW3ZhbHVlXT1cInF1ZXMuaW5wdXRcIiBbcm93c109XCIzXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbcGxhY2Vob2xkZXJdPVwicXVlcy5RdWVzdGlvbl9fYyBcIiAodGV4dGFyZWFWYWx1ZUNoYW5nZSk9XCJoYW5kbGVUZXh0YXJlYVZhbHVlQ2hhbmdlKCRldmVudClcIj48L2FwcC1jdXN0b20tdGV4dC1hcmVhPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPCEtLSBFbWFpbCAtLT5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnRW1haWwnXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgWyhuZ01vZGVsKV09XCJxdWVzLmlucHV0XCIgW2lkXT1cInF1ZXMuSWRcIiByZXF1aXJlZD1cIlwiIChmb2N1cyk9XCJjbGVhclNRRXJyb3IocXVlcy5JZClcIlxuICAgICAgICAgICAgICBzdHlsZS5ib3JkZXItY29sb3I9XCJ7eyBxdWVzLmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiIHBsYWNlaG9sZGVyPVwie3sgcXVlcy5RdWVzdGlvbl9fYyB9fVwiIC8+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnRmlsZSdcIj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJwaWN0dXJlLXVwbG9hZCBjdXN0b20tZmlsZS11cGxvYWQgYmdjb2xvci13XCIgZm9yPVwiZmlsZS11cGxvYWRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBpY3R1cmUtdXBsb2FkLWNoaWxkXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbGUtaW1hZ2UtbyBmYS01eCBpY29sb3JcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiXG4gICAgICAgICAgICAgICAgICAgIGZhIGZhLXBsdXMgZmEtMnhcbiAgICAgICAgICAgICAgICAgICAgcGljdHVyZS11cGxvYWQtY2hpbGRcbiAgICAgICAgICAgICAgICAgICAgcGljLXVwbG9hZFxuICAgICAgICAgICAgICAgICAgICBpY29sb3JcbiAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJmaWxlLXVwbG9hZFwiIHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwie3sgYm9va0ZsYWdBY2NlcHQgfX1cIiAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50LHF1ZXMpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8dWwgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50cz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgIHF1ZXMuVHlwZV9fYyA9PT0gJ0ZpbGUnICYmXG4gICAgICAgICAgICAgICAgIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcbiAgICAgICAgICAgICAgXCIgY2xhc3M9XCJhdHRhY2gtdWxpc3QgY29sLW1kLTEyXCI+XG4gICAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBhdHRhY2htZW50c1wiIGNsYXNzPVwiYWxpZ24tbFwiPlxuICAgICAgICAgICAgICAgIHt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWVcbiAgICAgICAgICAgICAgICB9fTxzcGFuIGNsYXNzPVwiYXR0YWNoLWxpc3RcIiAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIj5YPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPC91bD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteXQtYm94XCIgKm5nSWY9XCJxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCI+XG5cbiAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBhdHRhY2htZW50c1wiIGNsYXNzPVwiZmlsZS11cGxvYWRpbmctYm94XCI+XG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDJ4LnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0MVwiIC8+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWRpbmctZmlsZS1uYW1lIG15dC1mb250MSBmb250LXdlaWdodDogbm9ybWFsO1wiPiB7eyBhdHRhY2htZW50LmF0dGFjaG1lbnROYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRlbGV0ZSU0MDJ4LnBuZ1wiIGNsYXNzPVwiZGVsZXRlSWNvblwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIiAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbGUtdXBsb2FkLWJveFwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAyeC5wbmdcIiBjbGFzcz1cImljb24tZWRpdDFcIiAvPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZi1OYW1lXCI+e3sgcXVlcz8uUXVlc3Rpb25fX2MgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmlsZS1sYWJlbCBcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6ICNjNTI4MWM7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eydhdHRhY2gnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiYXR0YWNobWVudFwiIHR5cGU9XCJmaWxlXCIgcGxhY2Vob2xkZXI9XCJ7eyd0b0J1eVRpY2tldCcgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19XCIgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgYWNjZXB0PVwiLnBkZiwgLnBuZywgLmpwZywgLmpwZWcsIC5oZWljLCAuYXBwbGljYXRpb24vcGRmXCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCxxdWVzKVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsZS11cGxvYWQtYnRuXCI+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gVGFibGUgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ1RhYmxlJ1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICA8YXBwLWN1c3RvbS10YWJsZSBcbiAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cInF1ZXNcIlxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuSWQpXCI+XG4gICAgICAgICAgICA8L2FwcC1jdXN0b20tdGFibGU+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIERyb3Bkb3duIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdEcm9wZG93bidcIiBjbGFzcz1cIlwiPlxuICAgICAgICAgICAgPCEtLSBmb3IgY29tbW9uIGRyb3Bkb3duIC0tPlxuICAgICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLWRyb3Bkb3duIFtmcm9tU2hlbmdlbF09XCJxYkl0ZW0uaXNTaGVuZ2VsX19jXCJcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwicXVlcy5RdWVzdGlvbl9PcHRpb25zX19yLnJlY29yZHNcIlxuICAgICAgICAgICAgICAgICAgICBbYXBpTWV0YV09XCJxdWVzLlN1Yl9UZXh0X19jXCJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cInF1ZXMuTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZFZhbHVlXT1cInF1ZXMuaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIi0tLXt7J3NlbGVjdCcgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19LS0tXCJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yTWVzc2FnZV09XCJxdWVzPy5FcnJvcl9NZXNzYWdlX19jXCJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cInF1ZXM/LmVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLklkKVwiPlxuICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWRyb3Bkb3duPlxuICAgICAgICAgICAgPGFwcC1kcm9wZG93bi13aXRoLWZsYWcgKm5nSWY9XCJxdWVzLmlzRGVwZW5kZW50UGlja2xpc3QgJiYgIXF1ZXMuZHJvcERvd25Pbmx5XCIgIFtjZXJ0aWZpZWRdPVwicXVlcy5jZXJ0aWZpZWRGbGFnXCIgIFtKb2JQZXJmb3JtZXJDZXJ0aWZpY2F0ZXNdPVwicXVlcy5jZXJ0aWZpY2F0ZUxpc3RcIiAoZmxhZ0Ryb3BEb3duQ2hhbmdlKT1cImRlcGVuZGVudENoYW5nZSgkZXZlbnQpXCI+PC9hcHAtZHJvcGRvd24td2l0aC1mbGFnPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cInF1ZXN0aW9uSXRlbT8uaW5wdXQ/Lmxlbmd0aCA+IDBcIj48L2k+XG4gICAgICAgICAgPC9kaXY+ICAgICAgICAgIFxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tTGlzdCBzdGFydC0tPlxuICA8ZGl2ICpuZ0lmPVwibGlzdEZsYWdcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tcm93XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5lcnJvclwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1xuICAgICAgICAgICAgY29sb3I6IHJlZDtcIj57e3F1ZXN0aW9uSXRlbT8uZXJyb3I/LmVycm9yTXNnfX08L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm15dC1hbGlnbjNcIiBbY2xhc3NdPVwiJ2NvbC1tZC0nICsgcXVlcy5TaXplX19jICsgJyBwYWRkaW5nbm9uZSdcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBxdWVzIG9mIGdldExvY2FsU3ViUXVlc3Rpb25zKHF1ZXN0aW9uSXRlbS5JZCk7bGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImRpcy1mbGV4IG15dC1mb250MyBteXQtZm9udDdcIj57eyBxdWVzPy5RdWVzdGlvbl9fYyB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnVGV4dCdcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwicXVlcy5pbnB1dFwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAnZGlzLWZsZXggZHQtbGluZSBkYXRlLWxpbmUgYm9va1RleHQgYm94b3V0bGluZSBteXQtZm9udDEnOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jLFxuICAgICAgICAgICAgIHRleHRCb3g6ICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXG4gICAgICAgICAgICB9XCIgaWQ9XCJ0ZXh0XCIgW2lkXT1cInF1ZXMudW5pcXVlU3ViUUlkXCIgcmVxdWlyZWQ9XCJcIiAoZm9jdXMpPVwiY2xlYXJMb2NhbFN1YlF1ZXNFcnJvcihxdWVzKVwiXG4gICAgICAgICAgICBzdHlsZS5ib3JkZXItY29sb3I9XCJ7eyBxdWVzLmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiIHBsYWNlaG9sZGVyPVwie3sgcXVlcy5RdWVzdGlvbl9fYyB9fVwiXG4gICAgICAgICAgICBvbmlucHV0PVwidGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teYS16QS1aMC05XFxzLjo7LD9dL2csJycpO1wiIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiXCIgKm5nSWY9XCJhZGRGbGFnXCI+XG4gICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJBZGQoZ2V0TG9jYWxTdWJRdWVzdGlvbnMocXVlc3Rpb25JdGVtLklkKSlcIiBjbGFzcz1cImJ0blwiPjxpIGNsYXNzPVwiZmEgZmEtcGx1c1wiID48L2k+e3snYWRkJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX08L2J1dHRvbj5cbiAgICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tTGlzdCBFbmQtLT5cblxuICA8IS0tIEFjdGlvbnMgLS0+XG4gIDwhLS0gVkQgYnV0dG9uIGNvbmRpdGlvbiByZW1vdmVkLS0+XG4gIDxkaXYgY2xhc3M9XCJmbGV4ZXJcIj5cbiAgICA8IS0tIEJhY2t3YXJkIC8gQmFjayAtLT5cbiAgICA8IS0tIEhBIDAyRkVCMjQgSGlkaW5nIHRoZSBidXR0b24gd2hlbiB0aGVyZSBpcyBubyB2YWx1ZSBmcm9tIHRoZSBiYWNrZW5kIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJiYWNrYnV0dG9uXCIgW25nQ2xhc3NdPVwieyAnY29sLW1kLTYnOiAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyB9XCJcbiAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cInF1ZXN0aW9uU3RhY2subGVuZ3RoID4gMCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCIgKm5nSWY9XCJxYkl0ZW0uQmFja19fY1wiPlxuICAgICAgPGRpdiBbbmdDbGFzc109XCJ7fVwiPlxuICAgICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdsZWZ0LWJ0JzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgYnRuLWJhY2stY29sb3InOlxuICAgICAgICAgICAgICAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1xuICAgICAgICAgIH1cIiAoY2xpY2spPVwiaGFuZGxlQmFja0NsaWNrKClcIj5cbiAgICAgICAgICB7eyBxYkl0ZW0/LkJhY2tfX2MgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gRm9yd2FyZCAvIE5leHQgLS0+XG4gICAgPCEtLSBIQSAwMkZFQjI0IEhpZGluZyB0aGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gdmFsdWUgZnJvbSB0aGUgYmFja2VuZCAtLT5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2NvbC1tZC02JzogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiICpuZ0lmPVwicWJJdGVtLk5leHRfX2NcIj5cbiAgICAgIDxkaXY+XG4gICAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ3J1c3R5JzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgYnRuLWJhY2stY29sb3InOlxuICAgICAgICAgICAgICAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1xuICAgICAgICAgIH1cIiAoY2xpY2spPVwiaGFuZGxlTmV4dENsaWNrKClcIj5cbiAgICAgICAgICB7eyBxYkl0ZW0uTmV4dF9fYyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIFN1bW1hcnkgLS0+XG48ZGl2ICpuZ0lmPVwic3VtbWFyeSAmJiBzdW1tYXJ5Lmxlbmd0aCA+IDBcIiBoZWlnaHQ9XCIxMDAlICFpbXBvcnRhbnRcIiBjbGFzcz1cImNvbC1tZC0xMlwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgJ2NvbC1tZC0xMic6IXFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcbiAgICAgICAgICAgICAgIH1cIj5cbiAgICA8aDEgY2xhc3M9XCJoZWFkZXIxIHN1bW1hcnlwYWRkXCIgPnt7IHFiSXRlbS5TdWJUaXRsZV9fYyB9fTwvaDE+ICAgICAgICAgXG4gIDxkaXYgaWQ9XCJwcm9ncmVzczJcIiAqbmdJZj1cIiFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jICYmIHRoaXMuYWJJdGVtLlN0YXR1c19fYyAhPSAnQ29tcGxldGVkJyBcIj5cbiAgPGRpdiBbbmdDbGFzc109XCJ7ICdmdWxsLXN1bW1hcnknOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cbiAgICA8ZGl2ICpuZ0Zvcj1cImxldCBxYSBvZiBzdW1tYXJ5XCI+XG4gICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBub246ICBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgc3VtbWFyeTogICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cbiAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0uRWRpdF9fY1wiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uJzogdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnIH1cIj5cbiAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwieyBhc3VtOiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgPT09ICdDb21wbGV0ZWQnIH1cIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+e3sgcWEucXVlc1ZhbHVlIH19PC9hPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLkVkaXRfX2NcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdxdWVzdGlvbic6IHRoaXMuYWJJdGVtLlN0YXR1c19fYyAhPSAnQ29tcGxldGVkJyB9XCI+XG4gICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAncXVlc3Rpb24nOiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgPT09ICdDb21wbGV0ZWQnIH1cIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+XG4gICAgICAgICAgICAgICAge3sgcWEucXVlc1ZhbHVlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYW5zd2VyXCIgPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwID09PSAnRmlsZSdcIj5cbiAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAxLnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0LXN1bW1hcnlcIiAvPlxuICAgICAgICAgICAgICAgICAge3sgcWEuYW5zVmFsdWUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIEhBIDAyRkVCMjQgRGlzcGxheWluZyB0aGUgaW4gc3VtbWFyeSBmb3IgYm9vayB0eXBlIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwID09ICdCb29rJ1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgdmFsIG9mIHFhLm15VmFsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwPnt7IHZhbC5RdWVzdGlvbl9UZXh0X19jIH19OiA8c3Bhbj57eyB2YWwuaW5wdXQgfX08L3NwYW4+PC9wPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBIQSAwMkZFQjI0IERpc3BsYXlpbmcgdGhlIHZhbHVlIGZvciBkaXJlY3QgcXVlc3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFhLnFUeXAgIT0gJ0ZpbGUnICYmIHFhLnFUeXAgIT0gJ0Jvb2snXCI+e3sgcWEuUXVlc3Rpb25fVGV4dF9fYyB9fTogPHNwYW4+PC9zcGFuPnt7IHFhLmFuc1ZhbHVlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5FZGl0X19jICYmIHRoaXMuYWJJdGVtLlN0YXR1c19fYyAhPSAnQ29tcGxldGVkJ1wiIHN0eWxlPVwiYmFja2dyb3VuZDogI2RlZGRkZDtcIj5cbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJlZGl0XCIgKGNsaWNrKT1cImhhbmRsZUVkaXRDbGljayhxYS5xdWVzSWQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkZXZpY2VJbmZvLm9zID09PSAnaU9TJ1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1lZGl0JTQwMngucG5nXCIgc3R5bGU9XCJ3aWR0aDo1MCUhaW1wb3J0YW50O1wiIGNsYXNzPVwiaWNvbi1lZGl0aW9zXCIvPlxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiZGV2aWNlSW5mby5vcyAhPT0gJ2lPUydcIiBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZWRpdCU0MDJ4LnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgKm5nSWY9XCJ0aGlzLmFiSXRlbS5TdGF0dXNfX2MgPT09ICdDb21wbGV0ZWQnXCIgY2xhc3M9XCJjb2wtbGctMTJcIiBzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtcIj5cbiAgICA8aDI+e3t0aGlzLnFiSXRlbS5TdW1tYXJ5X1RleHRfX2N9fTwvaDI+XG4gICAgPHA+e3t0aGlzLnFiSXRlbS5TdW1tYXJ5X1N1Yl9UZXh0X19jfX08L3A+XG4gIDwvZGl2PlxuXG4gIDxkaXYgaWQ9XCJwcm9ncmVzczJcIiAqbmdJZj1cInFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgXCI+XG4gICAgPGRpdiBbbmdDbGFzc109XCJ7J2JnQ29sb3Igc3VtbWFyeS10b3AnIDogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyB9XCIgPlxuICAgICAgPGRpdiBpZD1cInByb2dyZXNzLXN1bW1hcnlcIiAqbmdJZj1cInFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcIj5cbiAgICAgICAgPGNpcmNsZS1wcm9ncmVzcyBjbGFzcz1cInRpdGxlYmFyXCIgW3BlcmNlbnRdPVwidGhpcy5wZXJjZW50XCIgW3JhZGl1c109XCI0MFwiIFtzcGFjZV09XCItNFwiIFtvdXRlclN0cm9rZVdpZHRoXT1cIjRcIlxuICAgICAgICBbaW5uZXJTdHJva2VXaWR0aF09XCI0XCIgW291dGVyU3Ryb2tlQ29sb3JdPVwiJyNlMGIxYjAnXCIgW2lubmVyU3Ryb2tlQ29sb3JdPVwiJyNlN2U4ZWEnXCIgW2FuaW1hdGlvbl09XCJ0cnVlXCIgW2JhY2tncm91bmRQYWRkaW5nXT0gXCIwXCJcbiAgICAgICAgW2JhY2tncm91bmRDb2xvcl09IFwiJyNkZDJlMTMnXCIgW2JhY2tncm91bmRHcmFkaWVudFN0b3BDb2xvcl09XCInI2Y5YmZiZCdcIiBbdGl0bGVDb2xvcl09XCInI2YzZWRlZCdcIiBcbiAgICAgICAgY2xhc3M9XCJuZy1zdGFyLWluc2VydGVkXCIgW3RpdGxlXT1cInRoaXMucGVyY2VudCsnJSdcIiBbc2hvd1N1YnRpdGxlXT1cImZhbHNlXCIgW3Nob3dCYWNrZ3JvdW5kXT1cInRydWVcIiBbYW5pbWF0aW9uRHVyYXRpb25dPVwiMzAwXCJcbiAgICAgICAgW3N0YXJ0RnJvbVplcm9dPVwiZmFsc2VcIiBbcmVzcG9uc2l2ZV09XCJmYWxzZVwiID5cbiAgICAgIDwvY2lyY2xlLXByb2dyZXNzPlxuICAgICAgXG4gICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLlN1bW1hcnlfVGV4dF9fYyAmJiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCIgXG4gICAgICBbbmdDbGFzc109XCJ7IHN1bW1hcnlUaXRsZTogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyB9XCI+XG4gICAgICAgIDxoMyBjbGFzcz1cInN1YlRpdGxlXCIgPnt7IHFiSXRlbS5TdW1tYXJ5X1RleHRfX2MgfX08L2gzPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiYWJJdGVtLlN0YXR1c19fYyAhPSAnQ29tcGxldGVkJ1wiIGNsYXNzPVwic3ViVGl0bGUxXCIgPnt7IHFiSXRlbS5TdW1tYXJ5X1N1Yl9UZXh0X19jfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiPlxuICAgICAgPGgzIGNsYXNzPVwic3VtbWFyeS1oXCI+XG4gICAgICAgIHt7IHFiSXRlbS5TdW1tYXJ5X1RleHRfX2MgfX1cbiAgICAgIDwvaDM+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2Z1bGwtc3VtbWFyeSc6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiPlxuICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5LWdyb3VwVGV4dCBteXQtZm9udDJcIj5cbiAgICAgIDwhLS0gPHA+SW5mb3JtZSBkZSBkYcOxbzwvcD4gLS0+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgcWEgb2Ygc3VtbWFyeVwiID5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IG5vbjogIHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5XCI+XG4gICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCIhcWJJdGVtLkVkaXRfX2NcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdxdWVzdGlvbiBzdW0tcXVlcyBteXQtZm9udDMgbXl0LWZvbnQ4JzogdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnIH1cIj5cbiAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwieyBhc3VtOiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgPT09ICdDb21wbGV0ZWQnIH1cIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+e3sgcWEucXVlc1ZhbHVlIH19PC9hPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLkVkaXRfX2NcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzdW0tcXVlcyBxdWVzdGlvbiBteXQtZm9udDMgbXl0LWZvbnQ4JzogdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnIH1cIj5cbiAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdzdW0tcXVlczEgcXVlc3Rpb24xIHN1bW1hcnktY29tcGxldGVkIG15dC1mb250MyBteXQtZm9udDgnOiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgPT09ICdDb21wbGV0ZWQnIH1cIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+XG4gICAgICAgICAgICAgICAge3sgcWEucXVlc1ZhbHVlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5FZGl0X19jICYmIHRoaXMuYWJJdGVtLlN0YXR1c19fYyAhPSAnQ29tcGxldGVkJ1wiIHN0eWxlPVwiYmFja2dyb3VuZDogI2RlZGRkZDtcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImVkaXRcIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIj5cbiAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiZGV2aWNlSW5mby5vcyA9PT0gJ2lPUydcIiBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZWRpdCU0MDJ4LnBuZ1wiIHN0eWxlPVwid2lkdGg6NTAlIWltcG9ydGFudDtcIiBjbGFzcz1cImljb24tZWRpdGlvc1wiLz5cbiAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiZGV2aWNlSW5mby5vcyAhPT0gJ2lPUydcIiBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZWRpdCU0MDJ4LnBuZ1wiIGNsYXNzPVwiaWNvbi1lZGl0XCIgLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYW5zd2VyXCI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwID09PSAnRmlsZSdcIj5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMS5wbmdcIiBjbGFzcz1cImljb24tZWRpdC1zdW1tYXJ5XCIgLz5cbiAgICAgICAgICAgICAgICB7eyBxYS5hbnNWYWx1ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFhLnFUeXAgIT0gJ0ZpbGUnXCI+XG4gICAgICAgICAgICAgICAge3sgcWEuYW5zVmFsdWUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleGVyMVwiICpuZ0lmPVwiYWJJdGVtXCI+XG4gICAgPGRpdiBjbGFzcz1cIlwiICpuZ0lmPVwiYWJJdGVtLlN0YXR1c19fYyA9PSAnQ29tcGxldGVkJyAmJiBxYkl0ZW0uQ2FuY2VsX19jXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwieydidG4tdGV4dCc6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ254dC1idG4gYnRuLXByaW1hcnkgYnRuLWxnIGJ0bi1ibG9jayBidG4tYmFjay1jb2xvcic6ICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jfVwiXG4gICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUNhbmNlbENsaWNrKClcIj5cbiAgICAgICAgICB7eyBxYkl0ZW0uQ2FuY2VsX19jIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PiAtLT5cblxuICA8IS0tIEdyb3VwIEFjdGlvbnMgLS0+XG4gIDxkaXYgY2xhc3M9XCJhbGlnbi1lZGl0LXN1Ym1pdFwiICpuZ0lmPVwiYWJJdGVtLlN0YXR1c19fYyAhPSAnQ29tcGxldGVkJ1wiPlxuICAgIDwhLS0gSEEgMDJGRUIyNCBIaWRpbmcgdGhlIGJ1dHRvbiB3aGVuIHRoZXJlIGlzIG5vIHZhbHVlIGZyb20gdGhlIGJhY2tlbmQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJxYkl0ZW0uU3VibWl0X19jXCI+XG4gICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cInsgJ2J0bi10ZXh0Mic6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ254dC1idG4gYnRuLXByaW1hcnkgYnRuLWxnIGJ0bi1ibG9jayBidG4tYmFjay1jb2xvcic6ICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jIH1cIiBcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZVN1Ym1pdENsaWNrKClcIj5cbiAgICAgICAge3sgcWJJdGVtLlN1Ym1pdF9fYyB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBIQSAwMkZFQjI0IEhpZGluZyB0aGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gdmFsdWUgZnJvbSB0aGUgYmFja2VuZCAtLT5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwicWJJdGVtLkVkaXRfX2NcIj5cbiAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwieydncmV5JzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnh0LWJ0biBidG4tcHJpbWFyeSBidG4tbGcgYnRuLWJsb2NrIGJ0bi1iYWNrLWNvbG9yJzogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2N9XCIgXG4gICAgICAgICAgICAgIChjbGljayk9XCJoYW5kbGVCYWNrQ2xpY2tOZXcoKVwiPlxuICAgICAgICB7eyBxYkl0ZW0uRWRpdF9fYyB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+IC0tPlxuICA8L2Rpdj5cblxuPC9kaXY+Il19
|
|
2282
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvcXVlc3Rpb25uYWlyZS9xdWVzdGlvbm5haXJlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbm5haXJlL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FHbEIsTUFBTSxlQUFlLENBQUM7QUFTdkIsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRzlELE9BQU8sRUFDTCxRQUFRLEVBR1IsYUFBYSxFQUViLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLGFBQWEsRUFDZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFeEQsT0FBTyxFQUVMLFVBQVUsRUFNVixNQUFNLEdBQ1AsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZdEIsTUFBTSxPQUFPLHNCQUFzQjtJQTBNdkI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUVBO0lBRUQ7SUFwTkEsSUFBSSxDQUFTO0lBQ2Isa0JBQWtCLENBQVM7SUFDM0IsSUFBSSxDQUFTO0lBQ2IsR0FBRyxDQUFTO0lBQ1osR0FBRyxDQUFTLENBQUMsOEJBQThCO0lBQzFDLFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO0lBQ2pDLFVBQVUsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztJ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dkIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBFbGVtZW50UmVmLFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IFNhbGVzZm9yY2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NhbGVzZm9yY2Uuc2VydmljZVwiO1xuaW1wb3J0IHsgSU15RGF0ZU1vZGVsLCBJTXlEcE9wdGlvbnMgfSBmcm9tIFwibXlkYXRlcGlja2VyXCI7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcbmltcG9ydCB7IFVudHlwZWRGb3JtQnVpbGRlciB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgTmd4U3Bpbm5lclNlcnZpY2UgfSBmcm9tIFwibmd4LXNwaW5uZXJcIjtcbi8vaW1wb3J0IHsgTmd4SW5kZXhlZERCU2VydmljZSwgSW5kZXhEZXRhaWxzfSBmcm9tICduZ3gtaW5kZXhlZC1kYic7XG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tICduZ3gtZGV2aWNlLWRldGVjdG9yJztcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnOyBcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IENoYW5nZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jaGFuZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NoYXJlZC5zZXJ2aWNlXCI7XG5cbmltcG9ydCB7XG4gIFF1ZXN0aW9uLFxuICBRdWVzdGlvbkJvb2ssXG4gIEFuc3dlckJvb2ssXG4gIEFuc3dlcldyYXBwZXIsXG4gIE9wdGlvbixcbiAgT3B0aW9uVmFsdWUsXG4gIEF0dGFjaG1lbnRXcmFwcGVyLFxuICBBdHRhY2htZW50LFxuICBMb2NhbFF1ZXN0aW9uXG59IGZyb20gXCIuLi8uLi93cmFwcGVyXCI7XG5pbXBvcnQgeyBFcnJvcldyYXBwZXIgfSBmcm9tIFwiLi4vLi4vbW9kZWwvZXJyb3JXcmFwcGVyXCI7XG5cbmltcG9ydCB7XG4gIFRFU1RRVUVTVElPTixcbiAgRFRRVUVTVElPTixcbiAgRklMRVFVRVNUSU9OLFxuICBUQVFVRVNUSU9OLFxuICBSQURJT1FVRVNUSU9OLFxuICBDSEVDS1FVRVNUSU9OLFxuICBCT09LUVVFU1RJT04sXG4gIFRFU1RRQixcbn0gZnJvbSBcIi4uLy4uL3NhbXBsZVwiO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gXCJyeGpzXCI7XG4vLyBIQSAxOURFQzIzIGltcG9ydGVkIHRyYW5zbGF0aW9uIHNlcnZpY2VcbmltcG9ydCB7IEkxOG5TZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL2kxOG4uc2VydmljZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwibGliLXF1ZXN0aW9ubmFpcmVcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9xdWVzdGlvbm5haXJlLmNvbXBvbmVudC5odG1sXCIsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHByb3ZpZGVyczogW0NoYW5nZVNlcnZpY2VdLFxuICBzdHlsZVVybHM6IFtcIi4vcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbm5haXJlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcWJJZDogc3RyaW5nO1xuICBASW5wdXQoKSBpbnN1cmFuY2VTdGFydERhdGU6IHN0cmluZztcbiAgQElucHV0KCkgc2Vydjogc3RyaW5nO1xuICBASW5wdXQoKSB0a246IHN0cmluZztcbiAgQElucHV0KCkgYXBpOiBzdHJpbmc7IC8vIFZEIGdldHRpbmcgdGhlIGFwaSBhcyBpbnB1dFxuICBAT3V0cHV0KCkgaGFuZGxlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBoYW5kbGVQYWdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGhhbmRsZVF1ZXN0aW9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGhhbmRsZUJvb2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHBhcmFtczogUGFyYW1zO1xuICBwdWJsaWMgZGV2aWNlSW5mbyA9IG51bGw7XG4gIHB1YmxpYyBhYkl0ZW06IEFuc3dlckJvb2s7XG4gIHB1YmxpYyBxYkl0ZW06IFF1ZXN0aW9uQm9vaztcbiAgcHVibGljIHF1ZXN0aW9uSXRlbTogUXVlc3Rpb247XG4gIHB1YmxpYyBhbnN3ZXJXcmFwOiBBbnN3ZXJXcmFwcGVyO1xuXG4gIC8vIENPTkRJVElPTkFMIFRZUEVTXG4gIHB1YmxpYyByYWRpb0ZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGRhdGFGbGFnOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gT1BUSU9OT05MWSBUWVBFU1xuICBwdWJsaWMgZHJvcGRvd25GbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBjaGVja2JveEZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBVTkNPTkRJVElPTkFMIFRZUEVTXG4gIHB1YmxpYyB0ZXh0RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgdGFGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBkdEZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHRpbWVGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBkYXRlRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZmlsZUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGVtYWlsRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgbnVtYmVyRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYWxwaGFudW1lcmljRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYm9va0ZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGxpc3RGbGFnOiBib29sZWFuPSBmYWxzZTtcbiAgLy9CYWNrIGJ1dHRvblxuICBwdWJsaWMgYmFja0J1dHRvbkZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIG9wdGlvblZhbHVlczogT3B0aW9uVmFsdWVbXSA9IFtdO1xuICBwdWJsaWMgc3ViUXVlc3Rpb25zOiBRdWVzdGlvbltdID0gW107XG4gIHB1YmxpYyBpbnBWYWx1ZTogc3RyaW5nO1xuICBwdWJsaWMgYW5zd2VyTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgZGF0ZU1hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIHNlbGVjdGVkaG91ck1hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIHNlbGVjdGVkbWludXRlTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgYXR0YWNobWVudHNNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBzcU9wdGlvbnMgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBzdWJBbnNNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBsb2NhbFN1YlF1ZXN0aW9uczogTG9jYWxRdWVzdGlvbltdID0gW107XG4gIHB1YmxpYyBxdWVzdGlvblN0YWNrID0gW107XG4gIHB1YmxpYyBxdWVzdGlvbk5hbWUgPSBbXTtcbiAgcHVibGljIGF0dGFjaG1lbnRzOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgYXR0YWNobWVudElkTGlzdDogYW55W10gPSBbXTtcbiAgcHVibGljIGF0dGFjaG1lbnRJZDogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIGF0dGFjaG1lbnQ6IGFueTtcbiAgcHVibGljIGFsbG93ZWRGaWxlRXh0ZW5zaW9uOiBzdHJpbmdbXTtcbiAgcHVibGljIGZpbGVFeGNlZWRlZExpbWl0OiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBmaWxlVHlwZUluY29ycmVjdDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYmFjazogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgYmFja2ljb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGNoZWNrOiBib29sZWFuO1xuICBwdWJsaWMgcG9wOiBib29sZWFuO1xuICBwdWJsaWMgbG9jYWxEYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyBjdXJyZW50TmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcGF0aHF1ZXN0aW9uOiBudW1iZXI7XG4gIHB1YmxpYyBwZXJjZW50OiBudW1iZXI7XG4gIHB1YmxpYyBjb3VudDogbnVtYmVyO1xuICBwdWJsaWMgdGFGb2N1c091dDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgbm90VmFsaWRBY2NOdW06IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHNwbENDQmFja0NsaWNrOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzdW1tYXJ5ID0gW107XG4gIHB1YmxpYyBsb2NhbFN1YlFNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBrZXlJbmRleDogbnVtYmVyID0gMDtcbiAgLy9wdWJsaWMgc3F1ZXM6IHN0cmluZztcbiAgcHVibGljIHNlbERhdGU6IGFueSA9IHt9O1xuICBwdWJsaWMgc2VsZWN0RGF0ZTogc3RyaW5nO1xuICBwcml2YXRlIHRvZGF5OiBEYXRlID0gbmV3IERhdGUoKTtcbiAgcHJpdmF0ZSBlbDogSFRNTEVsZW1lbnQ7XG4gIHB1YmxpYyBpbm5lcmh0bWw6IGFueTtcbiAgcHVibGljIHBvc3NpYmlsaXRpZXM6IGFueTtcbiAgcHVibGljIGlubmVyaHRtbDE6IGFueTtcbiAgcHVibGljIHN1bW1hcnlEYXRhID1bXTtcblxuICBwdWJsaWMgaG91cnM6IGFueVtdID0gW1xuICAgIFwiMDFcIixcbiAgICBcIjAyXCIsXG4gICAgXCIwM1wiLFxuICAgIFwiMDRcIixcbiAgICBcIjA1XCIsXG4gICAgXCIwNlwiLFxuICAgIFwiMDdcIixcbiAgICBcIjA4XCIsXG4gICAgXCIwOVwiLFxuICAgIFwiMTBcIixcbiAgICBcIjExXCIsXG4gICAgXCIxMlwiLFxuICBdO1xuXG4gIHB1YmxpYyBtaW51dGVzOiBzdHJpbmdbXSA9IFtcbiAgICBcIjAwXCIsXG4gICAgXCIwMVwiLFxuICAgIFwiMDJcIixcbiAgICBcIjAzXCIsXG4gICAgXCIwNFwiLFxuICAgIFwiMDVcIixcbiAgICBcIjA2XCIsXG4gICAgXCIwN1wiLFxuICAgIFwiMDhcIixcbiAgICBcIjA5XCIsXG4gICAgXCIxMFwiLFxuICAgIFwiMTFcIixcbiAgICBcIjEyXCIsXG4gICAgXCIxM1wiLFxuICAgIFwiMTRcIixcbiAgICBcIjE1XCIsXG4gICAgXCIxNlwiLFxuICAgIFwiMTdcIixcbiAgICBcIjE4XCIsXG4gICAgXCIxOVwiLFxuICAgIFwiMjBcIixcbiAgICBcIjIxXCIsXG4gICAgXCIyMlwiLFxuICAgIFwiMjNcIixcbiAgICBcIjI0XCIsXG4gICAgXCIyNVwiLFxuICAgIFwiMjZcIixcbiAgICBcIjI3XCIsXG4gICAgXCIyOFwiLFxuICAgIFwiMjlcIixcbiAgICBcIjMwXCIsXG4gICAgXCIzMVwiLFxuICAgIFwiMzJcIixcbiAgICBcIjMzXCIsXG4gICAgXCIzNFwiLFxuICAgIFwiMzVcIixcbiAgICBcIjM2XCIsXG4gICAgXCIzN1wiLFxuICAgIFwiMzhcIixcbiAgICBcIjM5XCIsXG4gICAgXCI0MFwiLFxuICAgIFwiNDFcIixcbiAgICBcIjQyXCIsXG4gICAgXCI0M1wiLFxuICAgIFwiNDRcIixcbiAgICBcIjQ1XCIsXG4gICAgXCI0NlwiLFxuICAgIFwiNDdcIixcbiAgICBcIjQ4XCIsXG4gICAgXCI0OVwiLFxuICAgIFwiNTBcIixcbiAgICBcIjUxXCIsXG4gICAgXCI1MlwiLFxuICAgIFwiNTNcIixcbiAgICBcIjU0XCIsXG4gICAgXCI1NVwiLFxuICAgIFwiNTZcIixcbiAgICBcIjU3XCIsXG4gICAgXCI1OFwiLFxuICAgIFwiNTlcIixcbiAgXTtcblxuICBwdWJsaWMgc2VsZWN0ZWRIb3VyOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgc2VsZWN0ZWRNaW51dGU6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBzZWxlY3RlZE1lcmlkaWVtOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgdmFsdWVOYW1lOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgdmFsdWVOYW1lMTogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIGJvb2tGbGFnQWNjZXB0OiBzdHJpbmdbXTtcbiAgcHVibGljIHJlY29yZElkOiBzdHJpbmc7XG4gIHB1YmxpYyBjdXJyZW50UXVlc3Rpb25JZDogc3RyaW5nO1xuICBwdWJsaWMgc3Bpbm5lclR5cGU6IHN0cmluZztcbiAgcHVibGljIHNwaW5uZXJOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBuZXh0VmFsdWU6c3RyaW5nID0nJztcblxuICBzdGFydF9kYXRlPzogYW55O1xuXG4gIC8vc2VhcmNoIGNvbXBvbmVudFxuICBwdWJsaWMgdGVtcG9BZGRyZXNzOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgc2VsZWN0ZWRWYWx1ZTogc3RyaW5nO1xuICBwdWJsaWMgc2VsZWN0ZWRQb3N0YWxjb2RlOiBzdHJpbmc7XG4gIHB1YmxpYyBzZWxlY3RlZFByb3ZpbmNlOiBzdHJpbmc7XG4gIHB1YmxpYyBzZWxlY3RlZENpdHk6IHN0cmluZztcbiAgcHVibGljIHNlbGVjdGVkQXJlYTogc3RyaW5nO1xuICBwdWJsaWMgbG9jYWxhZGRyZXNzOiBhbnlbXSA9IFtdO1xuXG4gIHB1YmxpYyBhbGxBZGRyZXNzIDphbnkgW10gPSBbXTtcbiAgcHVibGljIFBvc3RhbENvZGU6c3RyaW5nO1xuICBwdWJsaWMgcGxhY2VzOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgcHJvdmluY2U6YW55W109W107XG4gXG4gIC8vIFJFUS0wMSBQUk9HUkVTUyBCQVJcbiAgcHVibGljIHByb2dyZXNzU3R5bGU6IHN0cmluZyA9IFwiMCVcIjtcbiAgcHVibGljIGFuc3dlckNvdW50OiBudW1iZXIgPSAwO1xuICBwdWJsaWMgaW5kZXhDb3VudDogbnVtYmVyID0gMDtcbiAgcHVibGljIGFkZEZsYWc6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIHB1YmxpYyBteURhdGVQaWNrZXJPcHRpb25zOiBJTXlEcE9wdGlvbnMgPSB7fTtcbiAgaW5kaXZpZHVhbEJvb2tCdXR0b246IGJvb2xlYW47XG5cbiAgcHVibGljIGFsbElucHV0VmFsdWVzID0gW107IC8vIEhBIDAyRkVCMjQgVG8gc3RvcmUgYWxsIHRoZSBpbnB1dCB2YWx1ZXNcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzZlNlcnZpY2U6IFNhbGVzZm9yY2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlU2VydmljZTogQ2hhbmdlU2VydmljZSwgXG4gICAgcHJpdmF0ZSBzaGFyZWRTZXJ2aWNlOiBTaGFyZWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXIsXG4gICAgcHJpdmF0ZSBzcGlubmVyOiBOZ3hTcGlubmVyU2VydmljZSxcbiAgICBwcml2YXRlIF9mb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxuICAgIC8vcHJpdmF0ZSBkYlNlcnZpY2U6IE5neEluZGV4ZWREQlNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkZXZpY2VTZXJ2aWNlOiBEZXZpY2VEZXRlY3RvclNlcnZpY2UsXG4gICAgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHVibGljIGkxOG5TZXJ2aWNlOiBJMThuU2VydmljZVxuICApIHtcbiAgICB0aGlzLnNwaW5uZXJOYW1lID0gXCJzcDFcIjtcbiAgICB0aGlzLnNwaW5uZXJUeXBlID0gXCJiYWxsLXNwaW4tY2xvY2t3aXNlXCI7XG4gIH1cblxuICAvLyBIQSAwMkZFQjI0IE9uIGRhdGUgY2hhbmdlIG5lZWQgdG8gc3RvcmUgdGhlIGNoYW5nZWQgdmFsdWUgc28gcGFzc2luZyB0aGUgcXVlc3Rpb25cbiAgb25EYXRlQ2hhbmdlZChldmVudDogSU15RGF0ZU1vZGVsLCBxdWVzOiBhbnkpIHtcbiAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIG9uRGF0ZUNoYW5nZWQnKTtcbiAgICAvL3RvIGNoYW5nZSB0aGUgYm9yZGVyIGNvbG9yXG4gICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYykge1xuICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBwcm9ncmVzc0JhciBjb25kJyk7XG4gICAgICB0aGlzLmlucFZhbHVlID1cbiAgICAgICAgZXZlbnQuZGF0ZS5kYXkgKyBcIi9cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi9cIiArIGV2ZW50LmRhdGUueWVhcjtcbiAgICAgIGlmKHRoaXMucXVlc3Rpb25JdGVtLlR5cGVfX2MgPT1cIkJvb2tcIil7XG4gICAgICAgIHRoaXMuc2VsZWN0RGF0ZSA9ICBldmVudC5kYXRlLmRheSArIFwiL1wiICsgZXZlbnQuZGF0ZS5tb250aCArIFwiL1wiICsgZXZlbnQuZGF0ZS55ZWFyO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIEVMU0Ugb2YgcHJvZ3Jlc3NCYXIgY29uZCcpO1xuICAgICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0uVHlwZV9fYyA9PVwiQm9va1wiKXtcbiAgICAgICAgdGhpcy5zZWxlY3REYXRlID0gIGV2ZW50LmRhdGUuZGF5ICsgXCItXCIgKyBldmVudC5kYXRlLm1vbnRoICsgXCItXCIgKyBldmVudC5kYXRlLnllYXI7XG4gICAgICB9XG4gICAgICB0aGlzLmlucFZhbHVlID1cbiAgICAgICAgZXZlbnQuZGF0ZS55ZWFyICsgXCItXCIgKyBldmVudC5kYXRlLm1vbnRoICsgXCItXCIgKyBldmVudC5kYXRlLmRheTtcbiAgICB9XG4gICAgY29uc3QgaHRtbEVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIm15ZHBcIik7XG4gICAgaHRtbEVsZW1lbnRcbiAgICAgIC5pdGVtKDApXG4gICAgICAuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJib3JkZXItY29sb3I6Izg3YmUxYzt3aWR0aDoxMDAlXCIpO1xuICAgIHRoaXMuZGF0ZU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQsIGV2ZW50KTtcbiAgICBpZiAoXG4gICAgICBldmVudC5kYXRlLmRheSA9PT0gMCAmJlxuICAgICAgZXZlbnQuZGF0ZS5tb250aCA9PT0gMCAmJlxuICAgICAgZXZlbnQuZGF0ZS55ZWFyID09PSAwXG4gICAgKSB7XG4gICAgICB0aGlzLmRhdGVNYXAuZGVsZXRlKHRoaXMucXVlc3Rpb25JdGVtLklkKTtcbiAgICAgIHRoaXMuYW5zd2VyTWFwLmRlbGV0ZSh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XG4gICAgfVxuICAgIC8vY29uc29sZS5sb2coJ3RoaXMuaW5wVmFsdWUgPSAnK3RoaXMuaW5wVmFsdWUpO1xuICAgIC8vY29uc29sZS5sb2coJ3RoaXMuc2VsZWN0RGF0ZSA9ICcrdGhpcy5zZWxlY3REYXRlKTtcbiAgICAvLyBIQSAwMkZFQjI0IEFzc2lnbmluZyBpbnB1dCB2YWx1ZSB0byBxdWVzIGlucHV0XG4gICAgcXVlcy5pbnB1dCA9IHRoaXMuaW5wVmFsdWU7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmRldmljZUluZm8gPSB0aGlzLmRldmljZVNlcnZpY2UuZ2V0RGV2aWNlSW5mbygpO1xuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbXM6IFBhcmFtcykgPT4ge1xuICAgICAgaWYgKHBhcmFtc1snaWQnXSkge1xuICAgICAgICB0aGlzLmluZGl2aWR1YWxCb29rQnV0dG9uID0gdHJ1ZTtcbiAgICAgIH1lbHNlIGlmKHBhcmFtc1snYm9va2xldElkJ10pe1xuICAgICAgICB0aGlzLmluZGl2aWR1YWxCb29rQnV0dG9uID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgdGhpcy5zZWxlY3RlZE1lcmlkaWVtID0gXCJBTVwiO1xuICAgIHRoaXMucHJvY2Vzc1FCKCk7XG4gICAgLy9jb25zb2xlLmxvZyhsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnYWRkcmVzcycpKTtcbiAgICBpZihsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcImFkZHJlc3NcIikpe1xuICAgICAgdGhpcy5sb2NhbGFkZHJlc3MgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYWRkcmVzc1wiKSk7XG4gICAgICAvL2NvbnNvbGUubG9nKCdMZW5ndGg9Jyt0aGlzLmxvY2FsYWRkcmVzcy5sZW5ndGgpO1xuICAgICAgdGhpcy5hbGxBZGRyZXNzPXRoaXMubG9jYWxhZGRyZXNzLmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMubG9jYWxhZGRyZXNzLmluZGV4T2YoaXRlbSkgPT0gaW5kZXgpe1xuICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9XG4gICAgICB9KTsgXG4gICAgICB0aGlzLmFsbEFkZHJlc3Muc29ydChmdW5jdGlvbihhLCBiKXtcbiAgICAgICAgcmV0dXJuIGEuemlwQ29kZSAtIGIuemlwQ29kZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmKHRoaXMuZGV2aWNlSW5mby5vcyA9PT0gJ2lPUycpe1xuICAgICAgICBsZXQgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihcImFkZHJlc3NEQlwiKTtcbiAgICAgICAgb3BlblJlcXVlc3Qub25zdWNjZXNzID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFyZ2V0TmV3ID0gZXZlbnQudGFyZ2V0IGFzIElEQlJlcXVlc3Q7XG4gICAgICAgICAgbGV0IGRiTmV3ID0gdGFyZ2V0TmV3LnJlc3VsdDtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0TmV3ID0gZGJOZXcudHJhbnNhY3Rpb24oJ2FkZHJlc3NUYWJsZScpXG4gICAgICAgICAgICAgICAgLm9iamVjdFN0b3JlKCdhZGRyZXNzVGFibGUnKVxuICAgICAgICAgICAgICAgIC5nZXQoMSk7XG4gICAgICAgICAgcmVxdWVzdE5ldy5vbnN1Y2Nlc3MgPSAoKT0+IHtcbiAgICAgICAgICAgICAgY29uc3QgdGVtcFZhciA9IHJlcXVlc3ROZXcucmVzdWx0O1xuICAgICAgICAgICAgICB0aGlzLmxvY2FsYWRkcmVzcyA9IEpTT04ucGFyc2UodGVtcFZhci53aG9sZUFkZHJlc3NTdHJpbmcpO1xuICAgICAgICAgICAgICB0aGlzLmFsbEFkZHJlc3M9dGhpcy5sb2NhbGFkZHJlc3MuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxvY2FsYWRkcmVzcy5pbmRleE9mKGl0ZW0pID09IGluZGV4KXtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7IFxuICAgICAgICAgICAgICB0aGlzLmFsbEFkZHJlc3Muc29ydChmdW5jdGlvbihhLCBiKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS56aXBDb2RlIC0gYi56aXBDb2RlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuLy8gY2FsbCB3aGVuIGJvb2tJZCBjaGFuZ2VzXG4gIG5nT25DaGFuZ2VzKHNpbXBsZWNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZihzaW1wbGVjaGFuZ2VzWydxYklkJ10pe1xuICAgICAgdGhpcy5wcm9jZXNzUUIoKTtcbiAgICB9XG4gIH1cblxuICBkYXRlX1RpbWVNYXAoKSB7XG4gICAgdGhpcy5zZWxlY3RlZGhvdXJNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLklkLCB0aGlzLnNlbGVjdGVkSG91cik7XG4gICAgdGhpcy5zZWxlY3RlZG1pbnV0ZU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQsIHRoaXMuc2VsZWN0ZWRNaW51dGUpO1xuICB9XG5cbiAgZGF5KCkge1xuICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucyA9IHtcbiAgICAgIGRhdGVGb3JtYXQ6IFwiZGQubW0ueXl5eVwiLFxuICAgICAgc3VuSGlnaGxpZ2h0OiBmYWxzZSxcbiAgICAgIGRpc2FibGVEYXRlUmFuZ2VzOiBbXSxcbiAgICAgIHNob3dDbGVhckRhdGVCdG46IGZhbHNlLFxuICAgICAgZGlzYWJsZVNpbmNlOiB7XG4gICAgICAgIHllYXI6IDAsXG4gICAgICAgIG1vbnRoOiAwLFxuICAgICAgICBkYXk6IDAsXG4gICAgICB9LFxuICAgICAgZGlzYWJsZVVudGlsOiB7XG4gICAgICAgIHllYXI6IDAsXG4gICAgICAgIG1vbnRoOiAwLFxuICAgICAgICBkYXk6IDAsXG4gICAgICB9LFxuICAgICAgc2hvd1RvZGF5QnRuOiBmYWxzZSxcbiAgICAgIGRheUxhYmVsczoge1xuICAgICAgICBzdTogXCJEb21cIixcbiAgICAgICAgbW86IFwiTHVuXCIsXG4gICAgICAgIHR1OiBcIk1hclwiLFxuICAgICAgICB3ZTogXCJNacOpXCIsXG4gICAgICAgIHRoOiBcIkp1ZVwiLFxuICAgICAgICBmcjogXCJWaWVcIixcbiAgICAgICAgc2E6IFwiU8OhYlwiLFxuICAgICAgfSxcbiAgICAgIG1vbnRoTGFiZWxzOiB7XG4gICAgICAgIDE6IFwiRW5lXCIsXG4gICAgICAgIDI6IFwiRmViXCIsXG4gICAgICAgIDM6IFwiTWFyXCIsXG4gICAgICAgIDQ6IFwiQWJyXCIsXG4gICAgICAgIDU6IFwiTWF5b1wiLFxuICAgICAgICA2OiBcIkp1blwiLFxuICAgICAgICA3OiBcIkp1bFwiLFxuICAgICAgICA4OiBcIkFnb1wiLFxuICAgICAgICA5OiBcIlNlcFwiLFxuICAgICAgICAxMDogXCJPY3RcIixcbiAgICAgICAgMTE6IFwiTm92XCIsXG4gICAgICAgIDEyOiBcIkRpY1wiLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgY2hhbmdlKCkge1xuICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJteWRwXCIpO1xuICAgIGlmICh0aGlzLnNlbERhdGUgPT09IG51bGwgfHwgdGhpcy5pbnBWYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIGh0bWxFbGVtZW50XG4gICAgICAgIC5pdGVtKDApXG4gICAgICAgIC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcIndpZHRoOjEwMCU7Ym9yZGVyOiAxcHggc29saWQgcmVkXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBodG1sRWxlbWVudFxuICAgICAgICAuaXRlbSgwKVxuICAgICAgICAuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJib3JkZXI6IDFweCBzb2xpZCAjODdiZTFjIDt3aWR0aDoxMDAlXCIpO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NRQigpIHtcbiAgICBjb25zb2xlLmxvZygnUHJvY2Vzc1FCJyk7XG4gICAgLy90aGlzLnFiSXRlbVxuICAgIGNvbnNvbGUubG9nKHRoaXMucWJJZCk7XG4gICAgLy9jb25zb2xlLmxvZygnVmVyc2lvbiBpbiBwcm9jZXNzIGlzIDhiZjExZWZhN2Y5MWEzOTFkOTU3YmY2YjUwNzhlZGM3ZTY1NmI2N2MnKTtcbiAgICBpZiAodGhpcy5xYklkKSB7XG4gICAgICBpZiAodGhpcy5xYklkLmxlbmd0aCA9PSAxOCkge1xuICAgICAgICB0aGlzLnJlYWRRdWVzdGlvbkJvb2sodGhpcy5xYklkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgZWxzZSBwYXJ0Jyk7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ1NldHRpbmcgdGhlIFF1ZXN0aW9uIERpcmVjdGx5IGZvciB0ZXN0aW5nJyk7XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtID0gRFRRVUVTVElPTjtcbiAgICAgICAgdGhpcy5xYkl0ZW0gPSBURVNUUUI7XG4gICAgICAgIHRoaXMucHJvY2Vzc1F1ZXN0aW9uKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdHJpbUxhc3REdW1teShpbnB1dDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIChpbnB1dCA9IGlucHV0LnN1YnN0cmluZygwLCBpbnB1dC5sZW5ndGggLSA2KSk7XG4gIH1cblxuICBnZXRQcm9wZXJUaW1lKGRlZjogc3RyaW5nLCBpbnB1dDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGlucHV0ID09PSBcIlwiID8gZGVmIDogaW5wdXQ7XG4gIH1cblxuICAvL1N1bW1hcnkgUXVlc3Rpb24gQ2xpY2thYmxlIExvZ2ljXG4gIGhhbmRsZUVkaXRDbGljayh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5iYWNraWNvbiA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmFiSXRlbT8uU3RhdHVzX19jID09IFwiUGVuZGluZ1wiKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnJlYWRRdWVzdGlvbih2YWx1ZSk7XG4gICAgICAvL2NvbnNvbGUubG9nKCcgaW4gc2lkZSBzdW1tYXJ5b3BlbicrIHRoaXMuc3VtbWFyeS5sZW5ndGgpO1xuXG4gICAgICAvL0Fzc2lnbiBxdWVzdGlvbiBzdGFjayBsZW5ndGggZnJvbSBzdW1tYXJ5IHBhcnRcbiAgICAgIHZhciBhcnJheUxlbmd0aCA9IHRoaXMucXVlc3Rpb25TdGFjay5sZW5ndGg7XG4gICAgICB2YXIgbGVuZ3RoVmFsdWUgPSB0aGlzLnF1ZXN0aW9uU3RhY2suaW5kZXhPZih2YWx1ZSk7XG5cbiAgICAgIGZvciAobGV0IGkgPSBhcnJheUxlbmd0aDsgaSA+IGxlbmd0aFZhbHVlOyBpLS0pIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvblN0YWNrLnBvcCgpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYyA9PT0gdHJ1ZSkge1xuICAgICAgICB2YXIgYXJyYXlMZW5ndGgxID0gdGhpcy5xdWVzdGlvbk5hbWUubGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBqID0gYXJyYXlMZW5ndGgxOyBqID4gbGVuZ3RoVmFsdWU7IGotLSkge1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25OYW1lLnBvcCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnN1bW1hcnkgPSBbXTtcbiAgICAgIHRoaXMuc3VtbWFyeURhdGEgPSBbXTtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVOZXh0Q2xpY2soKSB7XG4gICAgdGhpcy5iYWNrQnV0dG9uRmxhZyA9IGZhbHNlO1xuICAgIHRoaXMuQW5zd2VyU2F2ZSgpO1xuICB9XG5cbiAgQW5zd2VyU2F2ZSgpe1xuICAgIC8vdGhpcy51cGRhdGVQcm9ncmVzcygpO1xuICAgIGlmICh0aGlzLmN1cnJlbnRRdWVzdGlvbklkID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBxdWVzdGlvblR4dD0nJztcbiAgICB0aGlzLmNsZWFyRXJyb3IoKTtcbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uTmV4dF9UcmFja2luZ19JRF9fYyk7XG4gICAgdGhpcy5yZWNvcmRJZCA9IG51bGw7XG4gICAgdmFyIGNRdWVzdGlvbjogUXVlc3Rpb24gPSBuZXcgUXVlc3Rpb24oKTtcbiAgICBjUXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uSXRlbTtcbiAgICAvLyBNUiAzMEpBTjI0IC0gQWRkZWQgQ29uZGl0aW9uIGZvciB0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IgKEJvb2sgUXVlc3Rpb24gYW5kIE5vbi1Cb29rKVxuICAgIGlmKHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fcikge1xuICAgICAgICAvLyBDcmVhdGUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB0byBzdG9yZSB0aGUgdmFsdWVzXG4gICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcy5sZW5ndGg7aSsrKSB7XG4gICAgICAgICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHNbaV0uUXVlc3Rpb25fVGV4dF9fYyl7XG4gICAgICAgICAgICB2YXIgcXVlc3Rpb25UZXh0ID0gdGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHNbaV0uUXVlc3Rpb25fVGV4dF9fYy5yZXBsYWNlKC88W14+XSs+L2csICcnKTsgLy8gUmVtb3ZlIEhUTUwgdGFncyBmcm9tIHRoZSBRdWVzdGlvbl9UZXh0X19jIHZhbHVlXG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBxdWVzdGlvblRleHQgPSAndW5kZWZpbmVkJztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkc1tpXS5pbnB1dDtcbiAgICAgICAgICBjb25zdCBvYmogPSB7IFtxdWVzdGlvblRleHRdOiBpbnB1dCB9OyAvLyBDcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlIHF1ZXN0aW9uVGV4dCBhcyB0aGUga2V5IGFuZCB0aGUgaW5wdXQgYXMgdGhlIHZhbHVlXG4gICAgICAgICAgdGhpcy5zdW1tYXJ5RGF0YS5wdXNoKG9iaik7IC8vIEFkZCB0aGUgb2JqZWN0IHRvIHRoZSBkYXRhIGFycmF5XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHF1ZXN0aW9uVGV4dCA9IHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uX1RleHRfX2MucmVwbGFjZSgvPFtePl0rPi9nLCAnJyk7XG4gICAgICBjb25zdCBpbnB1dCA9IHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgY29uc3Qgb2JqID0geyBbcXVlc3Rpb25UZXh0XTogaW5wdXQgfTsgLy8gQ3JlYXRlIGFuIG9iamVjdCB3aXRoIHRoZSBxdWVzdGlvblRleHQgYXMgdGhlIGtleSBhbmQgdGhlIGlucHV0IGFzIHRoZSB2YWx1ZVxuICAgICAgdGhpcy5zdW1tYXJ5RGF0YS5wdXNoKG9iaik7IC8vIEFkZCB0aGUgb2JqZWN0IHRvIHRoZSBkYXRhIGFycmF5XG4gICAgfVxuXG4gICAgICAgICB2YXIgdHlwID0gY1F1ZXN0aW9uLlR5cGVfX2M7XG4gICAgLy8gdGhpcy5zcXVlcyArPSBjUXVlc3Rpb24uUXVlc3Rpb25fX2MgKyAnQEAjIyQkJztcbiAgICB2YXIgcXVlc1ZhbHVlID0gY1F1ZXN0aW9uLlF1ZXN0aW9uX1RleHRfX2M7XG4gICAgdmFyIG1haWxmb3JtYXQgPVxuICAgICAgXCJeW14uXVthLXpBLVowLTkhIyQlJicqKy0vPT9eX2B7fH1+XStbXi5dQFteLV1bYS16QS1aMC05Li1dK1teLV0uW2EtekEtWl17Mix9JFwiO1xuXG4gICAgLy8gUHJvY2VzcyBJbnB1dHNcbiAgICBpZiAodGhpcy5jaGVja2JveEZsYWcpIHtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xuICAgICAgLy8gU2F2ZSBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnMgaW4gdGhlIGlucFZhbHVlXG4gICAgICBmb3IgKHZhciBvdiBvZiB0aGlzLm9wdGlvblZhbHVlcy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uY2hlY2tlZCkpIHtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSBvdi5WYWx1ZV9fYyArIFwiQEAjIyQkXCI7XG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSBvdi5OZXh0X1F1ZXN0aW9uX19jO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMudHJpbUxhc3REdW1teSh0aGlzLmlucFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZW1haWxGbGFnKSB7XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZSAmJiB0aGlzLmlucFZhbHVlLm1hdGNoKG1haWxmb3JtYXQpKSB7XG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5OZXh0X1F1ZXN0aW9uX19jO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuYWxwaGFudW1lcmljRmxhZykge1xuICAgICAgdmFyIGlzTm90VmFsaWRBY2NOdW0gPSB0aGlzLmlzTm90VmFsaWRBY2NOdW1iZXIodGhpcy5pbnBWYWx1ZSk7XG4gICAgICBpZiAoaXNOb3RWYWxpZEFjY051bSkge1xuICAgICAgICB0aGlzLm5vdFZhbGlkQWNjTnVtID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IHRoaXMucXVlc3Rpb25JdGVtLk5leHRfUXVlc3Rpb25fX2M7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMubm90VmFsaWRBY2NOdW0gPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubnVtYmVyRmxhZykge1xuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUpIHtcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IHRoaXMucXVlc3Rpb25JdGVtLk5leHRfUXVlc3Rpb25fX2M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5ib29rRmxhZykge1xuICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgICB2YXIgaGFzTWlzc2luZ0lucHV0ID0gZmFsc2U7XG4gICAgICBmb3IgKHZhciBpdGVtIG9mIHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzKSB7XG4gICAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICBcbiAgICAgICAgaWYoaXRlbS5UeXBlX19jID09IFwiRGF0ZVwiIHx8IGl0ZW0uVHlwZV9fYyA9PSBcIlRpbWVcIikge1xuICAgICAgICAgIC8vdGhpcyBvbmVcbiAgICAgICAgICB0aGlzLmNoYW5nZSgpO1xuICAgICAgICAgICAgaWYoaXRlbS5UeXBlX19jID09IFwiRGF0ZVwiKXtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBkYXRlIHR5cGUgY29uZCA9ICcrdGhpcy5zZWxlY3REYXRlKTtcbiAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuc2VsZWN0RGF0ZTtcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmlucFZhbHVlKVxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2VsZWN0RGF0ZSlcbiAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgaWYoaXRlbS5UeXBlX19jID09IFwiVGltZVwiKXtcbiAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2VsZWN0ZWRIb3VyK3RoaXMuc2VsZWN0ZWRNZXJpZGllbSt0aGlzLnNlbGVjdGVkTWludXRlKVxuICAgICAgICAgICAgIFxuICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5YMjRfSG91cnNfX2MgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID1cbiAgICAgICAgICAgICAgICAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIlBNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgIT0gXCIxMlwiXG4gICAgICAgICAgICAgICAgICA/IE51bWJlcih0aGlzLnNlbGVjdGVkSG91cikgKyAxMlxuICAgICAgICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkSG91cikgK1xuICAgICAgICAgICAgICAgIFwiOlwiICtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlICsgXCIgUE1cIjtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9PT0gXCJBTVwiICYmIHRoaXMuc2VsZWN0ZWRIb3VyID09PSBcIjEyXCIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9IFwiMDBcIiArIFwiOlwiICsgdGhpcy5zZWxlY3RlZE1pbnV0ZSArIFwiIEFNXCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKHRoaXMucWJJdGVtLlByb2dyZXNzX0Jhcl9fYykge1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuc2VsZWN0RGF0ZSl7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5zZWxlY3REYXRlK1wiIFwiK3RoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiIFwiK3RoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZih0aGlzLnNlbGVjdERhdGUpe1xuICAgICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuc2VsZWN0RGF0ZStcIiBcIit0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIiBcIit0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5YMjRfSG91cnNfX2MgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlO1xuICAgICAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBIQSAzMS1KQU4tMjQgUmVtb3ZlZCB0aGUgc2VsZWN0SG91ciBhbmQgc2VsZWN0TWludXRlIGNvbmRpdGlvblxuICAgICAgICAgIGlmICh0aGlzLnNlbERhdGUgPT09IG51bGwgfHwgdGhpcy5zZWxEYXRlID09PSB1bmRlZmluZWQgfHwgIXRoaXMuaW5wVmFsdWUgfHwgIXRoaXMuc2VsZWN0RGF0ZSkge1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBudWxsIGNvbmRpdGlvbiBvZiBpbnB1dCcpO1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgICBjb25zdCBodG1sRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibXlkcFwiKTtcbiAgICAgICAgICAgIGh0bWxFbGVtZW50XG4gICAgICAgICAgICAgIC5pdGVtKDApXG4gICAgICAgICAgICAgIC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcIndpZHRoOjEwMCU7Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJlZCAhaW1wb3J0YW50O1wiKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5kYXRlX1RpbWVNYXAoKTtcbiAgICAgIH1cbiAgICAgIC8vIEhBIDMxLUpBTi0yNCBBZGRlZCB0ZXh0IGVycm9yIGNvbmRpdGlvblxuICAgICAgaWYoaXRlbS5UeXBlX19jPT0gXCJUZXh0XCIpe1xuICAgICAgICBpZiAoIWl0ZW0uaW5wdXQpIHtcbiAgICAgICAgICBpdGVtLmlucHV0ID0gXCJcIjtcbiAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdGhpcy5pbnBWYWx1ZSA9IGl0ZW0uaW5wdXQ7IDYzNFxuICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhaXRlbS5Jc19PcHRpb25hbF9fYyAmJlxuICAgICAgICAvLyAgKChpdGVtLlR5cGVfX2MgIT0gXCJGaWxlXCIgJiYgIWl0ZW0uaW5wdXQgJiYgaXRlbS5UeXBlX19jICE9ICdEYXRlJyAmJiBpdGVtLlR5cGVfX2MgIT0gJ1RpbWUnKSB8fFxuICAgICAgICAgLy8gICAoaXRlbS5UeXBlX19jID09IFwiRmlsZVwiICYmIHRoaXMuYXR0YWNobWVudHMubGVuZ3RoID09IDApKVxuICAgICAgICAgKGl0ZW0uVHlwZV9fYyA9PSBcIkZpbGVcIiAmJiB0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCA9PSAwKVxuICAgICAgICApIHtcbiAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0uVHlwZV9fYyA9PSBcIlJhZGlvXCIpIHtcbiAgICAgICAgICBpZiAoIWl0ZW0uaW5wdXQpIHtcbiAgICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbS5UeXBlX19jID09IFwiRHJvcGRvd25cIikge1xuICAgICAgICAgIGlmICghaXRlbS5pbnB1dCkge1xuICAgICAgICAgICAgaXRlbS5pbnB1dCA9IFwiXCI7XG4gICAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0uVHlwZV9fYyA9PSBcIkVtYWlsXCIpIHtcbiAgICAgICAgICBpZiAoaXRlbS5pbnB1dCAmJiBpdGVtLmlucHV0Lm1hdGNoKG1haWxmb3JtYXQpKSB7XG4gICAgICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLk5leHRfUXVlc3Rpb25fX2M7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbS5UeXBlX19jID09IFwiRmlsZVwiICYmIHRoaXMuYXR0YWNobWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnRJdGVtIG9mIHRoaXMuYXR0YWNobWVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgKz1cbiAgICAgICAgICAgICAgYXR0YWNobWVudEl0ZW0uYXR0YWNobWVudElkICtcbiAgICAgICAgICAgICAgXCJAIyRcIiArXG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRJdGVtLmF0dGFjaG1lbnROYW1lICtcbiAgICAgICAgICAgICAgXCIsXCI7XG4gICAgICAgICAgICBpZiAoaXRlbS5pbnB1dCA9PSB0aGlzLmlucFZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24uTmV4dF9RdWVzdGlvbl9fYztcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlJyArIHJlY29yZElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdGhpcy5hdHRhY2htZW50cyA9IFtdO1xuICAgICAgICB9IC8vaXRlbS5pbnB1dCA9PSB0aGlzLmlucFZhbHVlO1xuXG4gICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gKGl0ZW0uaW5wdXQgIT0gdW5kZWZpbmVkID8gaXRlbS5pbnB1dCA6IFwiXCIpICsgXCJAQCMjJCRcIjtcbiAgICAgICAgcXVlc3Rpb25UeHQgKz0gaXRlbS5RdWVzdGlvbl9fYyArIFwiQEAjIyQkXCI7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBib29rMScgKyB0aGlzLmlucFZhbHVlKVxuICAgICAgfVxuICAgICAgaWYgKGhhc01pc3NpbmdJbnB1dCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy50cmltTGFzdER1bW15KHRoaXMuaW5wVmFsdWUpO1xuICAgICAgcXVlc3Rpb25UeHQgPSBxdWVzdGlvblR4dCA/IHRoaXMudHJpbUxhc3REdW1teShxdWVzdGlvblR4dCkgOiBxdWVzdGlvblR4dDtcbiAgICB9IFxuICAgIGVsc2UgaWYgKHRoaXMubGlzdEZsYWcpIHtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSAnJztcbiAgICAgIHZhciBoYXNNaXNzaW5nSW5wdXQgPSBmYWxzZTtcbiAgICAgIGlmKHRoaXMubG9jYWxTdWJRTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCkpe1xuICAgICAgICB0aGlzLnN1YkFuc01hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgZm9yICh2YXIgbG9jYWxRdWVzIG9mIHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCkpIHtcbiAgICAgICAgICAgIGlmKCFsb2NhbFF1ZXMuaW5wdXQpIHtcbiAgICAgICAgICAgICAgbG9jYWxRdWVzLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIGlmKCF0aGlzLnN1YkFuc01hcC5oYXMobG9jYWxRdWVzLklkKSl7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIGFucyBtYXAnKVxuICAgICAgICAgICAgdGhpcy5zdWJBbnNNYXAuc2V0KGxvY2FsUXVlcy5JZCxsb2NhbFF1ZXMuaW5wdXQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIGFucyBtYXAgZWxzZScpXG4gICAgICAgICAgICB0aGlzLnN1YkFuc01hcC5zZXQobG9jYWxRdWVzLklkLHRoaXMuc3ViQW5zTWFwLmdldChsb2NhbFF1ZXMuSWQpICsgJyQkQEAjIycrbG9jYWxRdWVzLmlucHV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzTWlzc2luZ0lucHV0KSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnZmlsZSB0d28nKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN1YkFuc01hcC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBNYXAnICk7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2codmFsdWUpO1xuICAgICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gKHZhbHVlICE9IHVuZGVmaW5lZCA/IHZhbHVlIDogJycpICsgJ0BAIyMkJCc7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy50cmltTGFzdER1bW15KHRoaXMuaW5wVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmRyb3Bkb3duRmxhZykge1xuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiLlwiO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuZHRGbGFnICYmIHRoaXMuZGF0ZUZsYWcgJiYgdGhpcy50aW1lRmxhZykge1xuICAgICAgLy90aGlzIG9uZVxuICAgICAgdGhpcy5jaGFuZ2UoKTtcbiAgICAgIGlmICh0aGlzLmlucFZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdGhpcy5nZXRQcm9wZXJUaW1lKFwiMTJcIiwgdGhpcy5zZWxlY3RlZEhvdXIpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gdGhpcy5nZXRQcm9wZXJUaW1lKFwiMDBcIiwgdGhpcy5zZWxlY3RlZE1pbnV0ZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9IHRoaXMuZ2V0UHJvcGVyVGltZShcIkFNXCIsIHRoaXMuc2VsZWN0ZWRNZXJpZGllbSk7XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5pbnBWYWx1ZS5sZW5ndGgpO1xuXG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5YMjRfSG91cnNfX2MgPT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxuICAgICAgICAgICAgKHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9PT0gXCJQTVwiICYmIHRoaXMuc2VsZWN0ZWRIb3VyICE9IFwiMTJcIlxuICAgICAgICAgICAgICA/IE51bWJlcih0aGlzLnNlbGVjdGVkSG91cikgKyAxMlxuICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRIb3VyKSArXG4gICAgICAgICAgICBcIjpcIiArXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlICsgXCIgUE1cIjtcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIkFNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgPT09IFwiMTJcIikge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSBcIjAwXCIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGUgKyBcIiBBTVwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jKSB7XG4gICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZSArIFwiIFwiICsgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgXCJUXCIgKyB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLlgyNF9Ib3Vyc19fYyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID1cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlO1xuICAgICAgICAgIGlmICh0aGlzLnFiSXRlbS5Qcm9ncmVzc19CYXJfX2MpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgXCIgXCIgKyB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyBcIlRcIiArIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5xYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcImFucyA9PiBcIiArIHRoaXMuaW5wVmFsdWUpO1xuICAgICAgICAgIHZhciBkYXRlMTogYW55ID0gdGhpcy5pbnBWYWx1ZS5zcGxpdChcIiBcIik7XG4gICAgICAgICAgZGF0ZTEgPSBkYXRlMVswXS5zcGxpdChcIi9cIik7XG4gICAgICAgICAgZGF0ZTEgPSBbZGF0ZTFbMl0sIGRhdGUxWzFdLCBkYXRlMVswXV0uam9pbihcIi1cIik7XG4gICAgICAgICAgZGF0ZTEgPSBuZXcgRGF0ZShkYXRlMSk7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhkYXRlMSlcbiAgICAgICAgICB2YXIgZGF0ZTI6IGFueSA9IHRoaXMuaW5zdXJhbmNlU3RhcnREYXRlLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICBkYXRlMiA9IG5ldyBEYXRlKGRhdGUyWzBdKTtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGRhdGUyKTtcbiAgICAgICAgICBpZiAoZGF0ZTEgPCBkYXRlMikge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvci5lcnJvck1zZyA9XG4gICAgICAgICAgICAgIFwiTm8gZXMgcG9zaWJsZSBkYXIgZGUgYWx0YSBsYSByZWNsYW1hY2nDs24gZGViaWRvIGEgcXVlIGxhIGZlY2hhIGRlbCBpbmNpZGVudGUgZXMgYW50ZXJpb3IgYSBsYSBmZWNoYSBkZSBjb250cmF0YWNpw7NuIGRlIGxhIHDDs2xpemFcIjtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZScpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnNlbERhdGUgPT09IG51bGwgfHwgIXRoaXMuaW5wVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kYXRlX1RpbWVNYXAoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudGltZUZsYWcgJiYgdGhpcy5kdEZsYWcgJiYgIXRoaXMuZGF0ZUZsYWcpIHtcbiAgICAgIHRoaXMuZGF0ZV9UaW1lTWFwKCk7XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uWDI0X0hvdXJzX19jID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLmlucFZhbHVlID1cbiAgICAgICAgICAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIlBNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgIT0gXCIxMlwiXG4gICAgICAgICAgICA/IE51bWJlcih0aGlzLnNlbGVjdGVkSG91cikgKyAxMlxuICAgICAgICAgICAgOiB0aGlzLnNlbGVjdGVkSG91cikgK1xuICAgICAgICAgIFwiOlwiICtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRIb3VyICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUubGVuZ3RoIDwgNSkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5kYXRlRmxhZyAmJiB0aGlzLmR0RmxhZyAmJiAhdGhpcy50aW1lRmxhZykge1xuICAgICAgdGhpcy5jaGFuZ2UoKTtcbiAgICAgIGlmICh0aGlzLmlucFZhbHVlLmxlbmd0aCA8IDcgfHwgdGhpcy5zZWxEYXRlID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmZpbGVGbGFnKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdmb3VyJylcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xuICAgICAgaWYgKHRoaXMuYXR0YWNobWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50SXRlbSBvZiB0aGlzLmF0dGFjaG1lbnRzKSB7XG4gICAgICAgICAgdGhpcy5pbnBWYWx1ZSArPVxuICAgICAgICAgICAgYXR0YWNobWVudEl0ZW0uYXR0YWNobWVudElkICtcbiAgICAgICAgICAgIFwiQCMkXCIgK1xuICAgICAgICAgICAgYXR0YWNobWVudEl0ZW0uYXR0YWNobWVudE5hbWUgK1xuICAgICAgICAgICAgXCIsXCI7XG4gICAgICAgIH1cbiAgICAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZpbGVzc3MnICsgdGhpcy5pbnBWYWx1ZSk7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlLnN1YnN0cigwLCB0aGlzLmlucFZhbHVlLmxlbmd0aCAtIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBmb3IgdGhlIGFuc3dlciBiZWZvcmUgc2F2aW5nIHRvIHRoZSBEQlxuICAgIGlmICghdGhpcy5xdWVzdGlvbkl0ZW0uSXNfT3B0aW9uYWxfX2MgJiYgIXRoaXMuaW5wVmFsdWUpIHtcbiAgICAgIC8vIFNob3cgZXJyb3IgdGhhdCB0aGUgcXVlc3Rpb24gbXVzdCBiZSBhbnN3ZXJlZFxuICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFNhdmUgdGhlIEFuc3dlciBpbiB0aGUgREJcbiAgICB0aGlzLmFuc3dlcldyYXAgPSBuZXcgQW5zd2VyV3JhcHBlcigpO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5hYklkID0gdGhpcy5hYkl0ZW0uSWQ7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLnF1ZXNJZCA9IGNRdWVzdGlvbi5JZDtcbiAgICB0aGlzLmFuc3dlcldyYXAucXVlc1ZhbHVlID0gcXVlc1ZhbHVlO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5xVHlwID0gdHlwO1xuICAgIC8vIEhBIDAyRkVCMjQgVG8gZGlzcGxheSB0aGUgdmFsdWVzIGluIHN1bW1hcnkgdXNpbmcgdGhpc1xuICAgIHRoaXMuYWxsSW5wdXRWYWx1ZXMgPSBbXTtcbiAgICB0aGlzLnN1YlF1ZXN0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgdmFyIGlucHV0VmFsdWUgPSB7fTtcbiAgICAgIGlucHV0VmFsdWVbJ0lkJ10gPSBlbGVtZW50Py5JZDtcbiAgICAgIGlucHV0VmFsdWVbJ1R5cGVfX2MnXSA9IGVsZW1lbnQ/LlR5cGVfX2M7XG4gICAgICBpbnB1dFZhbHVlWydSZWZlcmVuY2VfRmllbGRfX2MnXSA9IGVsZW1lbnQ/LlJlZmVyZW5jZV9GaWVsZF9fYztcbiAgICAgIGlucHV0VmFsdWVbJ1F1ZXN0aW9uX1RleHRfX2MnXSA9IGVsZW1lbnQ/LlF1ZXN0aW9uX1RleHRfX2M7XG4gICAgICBpbnB1dFZhbHVlWydpbnB1dCddID0gZWxlbWVudD8uaW5wdXQ7XG4gICAgICBpbnB1dFZhbHVlID8gdGhpcy5hbGxJbnB1dFZhbHVlcy5wdXNoKGlucHV0VmFsdWUpIDogdGhpcy5hbGxJbnB1dFZhbHVlcztcbiAgICB9KTtcbiAgICB0aGlzLmFuc3dlcldyYXAubXlWYWwgPSB0aGlzLmFsbElucHV0VmFsdWVzO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5hbnNWYWx1ZSA9IHRoaXMuaW5wVmFsdWU7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLmdyb3VwVGV4dCA9IGNRdWVzdGlvbi5Hcm91cF9fYztcbiAgICBjb25zb2xlLmxvZygndGhpcy5hbnN3ZXJXcmFwLnFUeXAnLHRoaXMuYW5zd2VyV3JhcC5xVHlwKTtcbiAgIGlmKHRoaXMuYW5zd2VyV3JhcC5xVHlwID09IFwiQWxwaGFudW1lcmljXCIpe1xuICAgICAgdGhpcy5hbnN3ZXJXcmFwLmFuc1ZhbHVlID0gJ0VTJysgdGhpcy5pbnBWYWx1ZTtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdCYW5rIGNvbmRpdGlvbicpO1xuICAgICAgLy8gY29uc29sZS5sb2codGhpcy5hbnN3ZXJXcmFwLmFuc1ZhbHVlKTtcbiAgICB9XG4gICAgLyppZiAoY1F1ZXN0aW9uLlR5cGVfX2MgPT0gJ0Jvb2snKXtcbiAgICBmb3IgKHZhciBxYiBvZiBjUXVlc3Rpb24uUXVlc3Rpb25zX19yLnJlY29yZHMpe1xuICAgICAgLy9jb25zb2xlLmxvZyhxYi5RdWVzdGlvbl9fYysnKioqKicrXCJAQCMjJCRcIilcbiAgICB9IFxuICB9Ki9cbiAgICAvL3RoaXMuYW5zd2VyV3JhcC5zcXVlc1ZhbHVlID0gY1F1ZXN0aW9uLlF1ZXN0aW9uX19jO1xuICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gdGhpcy5pbnBWYWx1ZTtcbiAgICAvLyBlbWl0IHRoZSBjdXJyZW50IHF1ZXN0aW9uIHdpdGggaW5wdXQgdG8gcGFyZW50XG4gICAgbGV0IHF1ZXN0aW9uQW5zID0ge31cbiAgICBxdWVzdGlvbkFuc1sncXVlc3Rpb25EZXRhaWwnXSA9IHRoaXMucXVlc3Rpb25JdGVtO1xuICAgIHF1ZXN0aW9uQW5zWydhbnN3ZXJCb29rRGV0YWlsJ10gPSB0aGlzLmFiSXRlbTtcbiAgICBjb25zb2xlLmxvZyhxdWVzdGlvbkFucyk7XG4gICAgdGhpcy5oYW5kbGVRdWVzdGlvbi5lbWl0KHF1ZXN0aW9uQW5zKTtcbiAgICBjb25zb2xlLmxvZygncXVlc3Rpb25JdGVtLS0+Jyk7XG4gICAgY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5zcXVlc1ZhbHVlID0gcXVlc3Rpb25UeHQgPyBxdWVzdGlvblR4dCA6IGNRdWVzdGlvbi5RdWVzdGlvbl9fYztcbiAgICB0aGlzLnNhdmVBbnN3ZXIoKTtcbiAgfVxuXG4gIG5leHQoKSB7XG4gICAgdmFyIGNRdWVzdGlvbjogUXVlc3Rpb24gPSBuZXcgUXVlc3Rpb24oKTtcbiAgICBjUXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uSXRlbTtcbiAgICB2YXIgdHlwID0gY1F1ZXN0aW9uLlR5cGVfX2M7XG4gICAgLy8gSWYgbm8gZXJyb3IgdGhlbiBtb3ZlIHRvIG5leHQgc3RlcHNcbiAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucHVzaChjUXVlc3Rpb24uSWQpO1xuICAgIC8vICB0aGlzLnF1ZXN0aW9uTmFtZS5wdXNoKGNRdWVzdGlvbi5OYW1lKTtcbiAgICBcbiAgICAvLyBDT05ESVRJT05BTCB2cyBPUFRJT05PTkxZICYgVU5DT05ESVRJT05BTFxuICAgIC8vIEhBIDMxLUpBTi0yNCBBZGRlZCB0ZXJuYXJ5IGV2ZW4gaW4gZWxzZSBjb25kaXRpb25zIGJlbG93XG4gICAgaWYgKGNRdWVzdGlvbj8uUmVjb3JkVHlwZT8uTmFtZSA9PSBcIkNPTkRJVElPTkFMXCIpIHtcbiAgICAgIGZvciAodmFyIGNPcHQgb2YgY1F1ZXN0aW9uLlF1ZXN0aW9uX09wdGlvbnNfX3IucmVjb3Jkcykge1xuICAgICAgICAvLyBSYWRpbyAvIERhdGFcbiAgICAgICAgLy9jb25zb2xlLmxvZygnT3B0aW9uID0+ICcgKyBjT3B0LlZhbHVlX19jICsgJyBtYXRjaGluZyB3aXRoICcgKyBhbnNWYWwpO1xuICAgICAgICBpZiAoY09wdC5WYWx1ZV9fYyA9PSB0aGlzLmlucFZhbHVlKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnTWF0Y2ggRm91bmQgdXNpbmcgJyArIGNPcHQuTmV4dF9RdWVzdGlvbl9fYyk7XG4gICAgICAgICAgaWYoY09wdC5OZXh0X1F1ZXN0aW9uX19jKXtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjT3B0Lk5leHRfUXVlc3Rpb25fX2M7XG4gICAgICAgICAgfWVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdjb25kaXRpb25hbCByZWNvcmQgaWQnKyB0aGlzLnJlY29yZElkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gQ291bGQgYmUgb2YgdHlwZSBEYXRhIGFuZCBleGlzdGluZyB2YWx1ZVxuICAgICAgaWYgKHRoaXMucmVjb3JkSWQgJiYgdHlwID09IFwiRGF0YVwiKSB7XG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24uTmV4dF9RdWVzdGlvbl9fYztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNRdWVzdGlvbj8uUmVjb3JkVHlwZT8uTmFtZSA9PSBcIk9QVElPTk9OTFlcIikge1xuICAgICAgLy8gIE9QVElPTk9OTFkgbG9naWNcbiAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24uTmV4dF9RdWVzdGlvbl9fYztcbiAgICB9IGVsc2UgaWYgKGNRdWVzdGlvbj8uUmVjb3JkVHlwZT8uTmFtZSA9PSBcIlVOQ09ORElUSU9OQUxcIikge1xuICAgICAgLy9VbmNvbmRpdGlvbmFsICBsb2dpY1xuICAgICAgLy9jb25zb2xlLmxvZyhcImluc2lkZSB1bmNvbmRpdGlvbmFsXCIpO1xuICAgICAgLy9pbnNpZGUgQm9vayBUeXBlXG4gICAgICBpZiAoY1F1ZXN0aW9uLlR5cGVfX2MgPT0gXCJCb29rXCIgJiYgY1F1ZXN0aW9uLlF1ZXN0aW9uX05vX19jICE9JzYnKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coXCJpbnNpZGUgYm9va1wiKTtcbiAgICAgICAgZm9yIChsZXQgb3B0IG9mIGNRdWVzdGlvbi5RdWVzdGlvbnNfX3IucmVjb3Jkcykge1xuICAgICAgICAgIC8vY29uc29sZS5sb2cob3B0LlR5cGVfX2MpO1xuICAgICAgICAgIGlmIChvcHQuVHlwZV9fYyA9PSBcIkRyb3Bkb3duXCIgfHwgb3B0LlR5cGVfX2MgPT0gXCJSYWRpb1wiKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBvcHQxIG9mIG9wdC5RdWVzdGlvbl9PcHRpb25zX19yLnJlY29yZHMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlTmFtZSA9PSBvcHQxLlZhbHVlX19jKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9b3B0MS5OZXh0X1F1ZXN0aW9uX19jIHx8IGNRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jOyAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ0Vsc2UnK3RoaXMucmVjb3JkSWQpXG4gICAgICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5OZXh0X1F1ZXN0aW9uX19jO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24uTmV4dF9RdWVzdGlvbl9fYztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYoY1F1ZXN0aW9uLlR5cGVfX2MgPT0gXCJCb29rXCIgJiYgY1F1ZXN0aW9uLlF1ZXN0aW9uX05vX19jID09JzYnICkge1xuICAgICAgICBmb3IgKGxldCBvcHQgb2YgY1F1ZXN0aW9uLlF1ZXN0aW9uc19fci5yZWNvcmRzKSB7XG4gICAgICAgICAgaWYgKG9wdC5UeXBlX19jID09IFwiRHJvcGRvd25cIiB8fCBvcHQuVHlwZV9fYyA9PSBcIlJhZGlvXCIpe1xuICAgICAgICAgIGZvciAodmFyIG9wdDEgb2Ygb3B0LlF1ZXN0aW9uX09wdGlvbnNfX3IucmVjb3Jkcykge1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVOYW1lID09IG9wdDEuVmFsdWVfX2MpIHtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBvcHQxLk5leHRfUXVlc3Rpb25fX2M7ICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAgICBcbiAgICAgIFxuICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24uTmV4dF9RdWVzdGlvbl9fYztcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gSEEgMzEtSkFOLTI0IEFkZGVkIGVsc2UgdG8ga2VlcCB0aGUgYXNzaWdubWVudCBkZWZhdWx0XG4gICAgZWxzZXtcbiAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24uTmV4dF9RdWVzdGlvbl9fYztcbiAgICB9XG5cbiAgICAvLyBDQVRFR09SSVpBVElPTlxuICAgIC8vdGhpcy5zdGVwcGVyQ2F0ZWcoKTtcblxuICAgIC8vIENhbGxpbmcgdGhlIHByb2dyZXMgYmFyIHVwZGF0ZSBmdW5jdGlvblxuICAgIHRoaXMuYW5zd2VyQ291bnQrKztcbiAgICB0aGlzLnVwZGF0ZVByb2dyZXNzKCk7XG5cblxuICAgIC8vIENBVEVHT1JJWkFUSU9OXG4gICAgLy90aGlzLnN0ZXBwZXJDYXRlZygpO1xuXG4gICAgaWYgKHRoaXMucmVjb3JkSWQpIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ0JlZm9yZSBDYWxsaW5nIHJlYWRRdWVzdGlvbigpIHVzaW5nICcgKyByZWNvcmRJZCk7XG4gICAgICB0aGlzLnJlYWRRdWVzdGlvbih0aGlzLnJlY29yZElkKTtcbiAgICAgIHRoaXMucG9wID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wb3AgPSBmYWxzZTtcbiAgICAgIC8vY29uc29sZS5sb2coJ1N1bW1hcnkgUGFnZSBMb2dpYycpO1xuICAgICAgLy8gUmVzZXQgdGhlIFZhcmlhYmxlc1xuICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgICB0aGlzLmFuc3dlcldyYXAgPSBuZXcgQW5zd2VyV3JhcHBlcigpO1xuICAgICAgdGhpcy5vcHRpb25WYWx1ZXMgPSBbXTtcbiAgICAgIHRoaXMuc3ViUXVlc3Rpb25zID0gW107XG5cbiAgICAgIHRoaXMucmVzZXRGbGFnKHR5cCk7XG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbSA9IG51bGw7XG5cbiAgICAgIC8vIFNob3cgU3VtbWFyeVxuICAgICAgZm9yICh2YXIgcSBvZiB0aGlzLnF1ZXN0aW9uU3RhY2spIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnSGFuZGxpbmcgUXVlc3Rpb24gPT4gJyArIHEpO1xuICAgICAgICB2YXIgYW5zV3JhcCA9IHRoaXMuYW5zd2VyTWFwLmdldChxKTtcbiAgICAgICAgaWYgKGFuc1dyYXApIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdIYW5kbGluZyBBbnN3ZXIgZm9yICcgKyBhbnNXcmFwLnF1ZXNJZCArICcgb2YgdHlwZSAnICsgYW5zV3JhcC5xVHlwKTtcbiAgICAgICAgICBpZihhbnNXcmFwLnFUeXAgPT0gJ0ZpbGUnIHx8IGFuc1dyYXAucVR5cCA9PSAnQm9vayd8fGFuc1dyYXAucVR5cCA9PSAnTGlzdCcgfHwgYW5zV3JhcC5xVHlwID09ICdDaGVja2JveCcpe1xuICAgICAgICAgICAgdmFyIG5ld1N0ciA9ICcnO1xuICAgICAgICAgICAgZm9yICh2YXIgYW5zU3RyIG9mIGFuc1dyYXAuYW5zVmFsdWUuc3BsaXQoJ0BAIyMkJCcpKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGFuc1N0cjEgb2YgYW5zU3RyLnNwbGl0KCckJEBAIyMnKSkge1xuICAgICAgICAgICAgICAvLyAgaWYoYW5zU3RyMS5pbmNsdWRlcygnYW5zd2VyU3RyaW5nJykpeyAvL3JlbW92ZSB0aGUgYW5zd2VyIHN0cmluZyAgXG4gICAgICAgICAgICAgICAvLyAgIGNvbnN0IHdpdGhvdXRBbnN3ZXJTdHJpbmcgPSBhbnNTdHIxLnJlcGxhY2UoXCJhbnN3ZXJTdHJpbmc6IFwiLCBcIlwiKTtcbiAgICAgICAgICAgICAgICAvLyAgYW5zU3RyMSA9IHdpdGhvdXRBbnN3ZXJTdHJpbmc7XG4gICAgICAgICAgICAgIC8vICB9XG4gICAgICAgICAgICAgICAgaWYgKGFuc1N0cjEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgaWYgKG5ld1N0ci5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdTdHIgPSBhbnNTdHIxO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyICs9ICc7ICcgKyBhbnNTdHIxOyAgLy9jb21tYSgsKSBjaGFuZ2VkIGFzIHNlbWkgY29sb24oOykgYmVjYXVzZSBvZiBhZGRyZXNzIGNvbnRhaW5zIGNvbW1hKCwpIFxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmF0dGFjaG1lbnRzTWFwLmhhcyhhbnNXcmFwLnF1ZXNJZCkpe1xuICAgICAgICAgICAgICAgICAgICAgIGZvcih2YXIgYXR0IG9mIHRoaXMuYXR0YWNobWVudHNNYXAuZ2V0KGFuc1dyYXAucXVlc0lkKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTdHIgPSBuZXdTdHIucmVwbGFjZShhdHQuYXR0YWNobWVudElkLCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyID0gKG5ld1N0ci5yZXBsYWNlKCcsLCcsJywgJykpLnJlcGxhY2UoJywgLCcsJywgJyk7XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciA9IG5ld1N0ci5zdGFydHNXaXRoKCcsJykgPyBuZXdTdHIuc3Vic3RyaW5nKDEsIG5ld1N0ci5sZW5ndGgpIDogKG5ld1N0ci5lbmRzV2l0aCgnLCcpID8gbmV3U3RyLnN1YnN0cmluZygwLCBuZXdTdHIubGVuZ3RoIC0gMSkgOiBuZXdTdHIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfWFuc1dyYXAuYW5zVmFsdWUgPSBuZXdTdHI7XG4gICAgICAgICAgICBhbnNXcmFwLm15VmFsID0gdGhpcy5hbGxJbnB1dFZhbHVlcztcbiAgICAgICAgfVxuICAgICAgICAgIC8vIFZEIENoZWNrIGlmIHRoZSBzdW1tYXJ5IGFscmVhZHkgY29udGFpbnMgYW4gZW50cnkgZm9yIHRoZSBzYW1lIHF1ZXNJZFxuICAgICAgICAgIGNvbnN0IGV4aXN0aW5nQW5zV3JhcCA9IHRoaXMuc3VtbWFyeS5maW5kKGl0ZW0gPT4gaXRlbS5xdWVzSWQgPT09IGFuc1dyYXAucXVlc0lkKTtcbiAgICAgICAgICBpZiAoZXhpc3RpbmdBbnNXcmFwKSB7XG4gICAgICAgICAgICAvLyBJZiBpdCBleGlzdHMsIHVwZGF0ZSB0aGUgYW5zVmFsdWUgYW5kIG15VmFsXG4gICAgICAgICAgICBleGlzdGluZ0Fuc1dyYXAuYW5zVmFsdWUgPSBhbnNXcmFwLmFuc1ZhbHVlO1xuICAgICAgICAgICAgZXhpc3RpbmdBbnNXcmFwLm15VmFsID0gYW5zV3JhcC5teVZhbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgaXQgZG9lc24ndCBleGlzdCwgcHVzaCB0aGUgYW5zV3JhcCB0byB0aGUgc3VtbWFyeSBhcnJheVxuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zV3JhcCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYmFja2ljb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0VGV4dCh2YWx1ZSkge1xuICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHZhbHVlLCBcInRleHQvaHRtbFwiKTtcbiAgICAvL2NvbnNvbGUubG9nKCBkb2MuZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50KTtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoXG4gICAgICBkb2MuZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50XG4gICAgKTtcbiAgfVxuXG4gIGhhbmRsZUJhY2tDbGljaygpIHtcbiAgICB0aGlzLmJhY2sgPSB0cnVlO1xuICAgIGlmICh0aGlzLnBvcCA9PT0gdHJ1ZSkge1xuICAgICAgdGhpcy5xdWVzdGlvbk5hbWUucG9wKCk7XG4gICAgfVxuICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5CYWNrX1RyYWNraW5nX0lEX19jKTtcbiAgICB2YXIgY1F1ZXN0aW9uOiBRdWVzdGlvbiA9IG5ldyBRdWVzdGlvbigpO1xuICAgIGNRdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25JdGVtO1xuICAgIGlmKGNRdWVzdGlvbi5RdWVzdGlvbl9Ob19fYyA9PScxJyl7XG4gICAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uQmFja19fYyk7XG4gICAgfVxuICAgIFxuXG4gICAgdGhpcy5hbnN3ZXJDb3VudC0tO1xuICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICAvLyBDQVRFR09SSVpBVElPTlxuICAgIC8vdGhpcy5zdGVwcGVyQ2F0ZWcoKTtcblxuICAgIGlmICh0aGlzLnN1bW1hcnkpIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ3N1bW1hcnkgdHJ1ZScpO1xuICAgICAgdGhpcy5zdW1tYXJ5ID0gW107XG4gICAgfVxuICAgIGlmKHRoaXMuc3VtbWFyeURhdGEpe1xuICAgICAgdGhpcy5zdW1tYXJ5RGF0YSA9W107XG4gICAgfVxuXG4gICAgLy8gUmVhZCB0aGUgcHJldmlvdXMgcXVlc3Rpb24gZnJvbSBEQlxuICAgIHRoaXMucmVhZFF1ZXN0aW9uKHRoaXMucXVlc3Rpb25TdGFjay5wb3AoKSk7XG4gICAgLy9jb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uU3RhY2spO1xuICB9XG5cbiAgaGFuZGxlQmFja0NsaWNrTmV3KCkge1xuICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5FZGl0X19jKTtcbiAgfVxuXG4gIC8vdXBkYXRpbmcgc3RhdHVzIG9uY2UgUSZBIGNvbXBsZXRlZC5cblxuICBwcml2YXRlIHVwZGF0ZUFuc3dlckJvb2sgPSAodXVpZDogc3RyaW5nKSA9PiB7XG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgIC8vICAgdGhpcy50a24sXG4gICAgICAvLyAgIFtcIkFuc3dlckJvb2tcIiwgXCJVcGRhdGVcIiwgdXVpZF0sXG4gICAgICAvLyAgIHRoaXMuc3VjY2Vzc3VwZGF0ZUFCLFxuICAgICAgLy8gICB0aGlzLmZhaWx1cmV1cGRhdGVBQlxuICAgICAgLy8gKTtcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ0Fuc3dlckJvb2snLCdVcGRhdGUnLHV1aWQsSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YSk9PntcbiAgICAgICAgY29uc29sZS5sb2coJ3VwZGF0ZWQgc3VjY3Vzc2Z1bGx5Jyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICB0aGlzLnN1Y2Nlc3N1cGRhdGVBQihKU09OLnBhcnNlKGRhdGEpKVxuICAgICAgfSwoZXJyb3IpID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHF1ZXN0aW9uIGJvb2tzJywgZXJyb3IpO1xuICAgICAgfVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWRCAxNUZFQjI0IC0gdXNlZCBwcm9jZXNzTmV3IG1ldGhvZCBcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuIC8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgICAgIFwiTnh0Q29udHJvbGxlci5uZXdQcm9jZXNzXCIsXG4gICAgICAgIFtcIkFuc3dlckJvb2tcIiwgXCJVcGRhdGVcIiwgdXVpZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksJyddLFxuICAgICAgICB0aGlzLnN1Y2Nlc3N1cGRhdGVBQixcbiAgICAgICAgdGhpcy5mYWlsdXJldXBkYXRlQUJcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdWNjZXNzdXBkYXRlQUIgPSAocmVzcG9uc2UpID0+IHtcbiAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgbGV0IGRhdGEgPSByZXNwb25zZTtcbiAgICAvLyAvL2NvbnNvbGUubG9nKCdzdGF0dXMgc3VjY2VzcycpXG4gICAgdGhpcy5hYkl0ZW0uU3RhdHVzX19jID0gXCJDb21wbGV0ZWRcIjtcbiAgXG4gICAgICB0aGlzLmRlbGV0ZUFuc3dlcnMoZGF0YS5BbnN3ZXJCb29rKVxuICB9O1xuXG4gIC8vIFZEIGZvciBkZWxldGUgYW5zd2Vyc1xuICBkZWxldGVBbnN3ZXJzKGFuc3dlcmJvb2spe1xuICAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKXsgXG4gICAgICBpZihhbnN3ZXJib29rICYmIGFuc3dlcmJvb2suU3RhdHVzX19jID09ICdDb21wbGV0ZWQnKXtcbiAgICAgICAgY29uc3QgYW5zQm9va0lkID0gYW5zd2VyYm9vay5JZDtcbiAgICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnQW5zd2VyQm9vaycsJ2RlbGV0ZScsYW5zQm9va0lkLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxuICAgICAgICAoZGF0YSk9PntcbiAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgICB0aGlzLnN1Y2Nlc3NEZWxldGVBQihKU09OLnBhcnNlKGRhdGEpKVxuICAgICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9XG4gLy8gVkQgZm9yIGRlbGV0ZSBhbnN3ZXJzXG4gIHByaXZhdGUgc3VjY2Vzc0RlbGV0ZUFCID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICAgaWYocmVzcG9uc2Uuc3RhdHVzID09ICdzdWNjZXNzJyl7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IocmVzcG9uc2UubWVzc2FnZSk7XG4gICAgIH1lbHNlIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2Vycm9yJywgcmVzcG9uc2UubWVzc2FnZSk7XG4gICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmFpbHVyZXVwZGF0ZUFCID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgLy9jb25zb2xlLmxvZygnc3RhdHVzIGZhaWxlZCcpXG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkUXVlc3Rpb25Cb29rID0gKHV1aWQ6IHN0cmluZykgPT4ge1xuICAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgICAvLyB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXG4gICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAgLy8gICBbXCJRdWVzdGlvbkJvb2tcIiwgXCJyZWFkXCIsIHV1aWRdLFxuICAgICAgLy8gICB0aGlzLnN1Y2Nlc3NSZWFkQm9vayxcbiAgICAgIC8vICAgdGhpcy5mYWlsdXJlUmVhZEJvb2tcbiAgICAgIC8vICk7XG4gICAgICB0aGlzLnNoYXJlZFNlcnZpY2Uuc2hvd0xvYWRlcigpO1xuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogdHJ1ZSB9O1xuICAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSUZyb21Ob2RlKCdRdWVzdGlvbkJvb2snLCdyZWFkJyx1dWlkLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxuICAgICAgKGRhdGEpPT57XG4gICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5oaWRlTG9hZGVyKCk7XG4gICAgICAgIGNvbnNvbGUubG9nKCdkYXRhIGNhbWUgc3VjZXNzZnVsbHknKTtcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGUoKTtcbiAgICAgICAgdGhpcy5zdWNjZXNzUmVhZEJvb2soSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgIH0sKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTVIgMzBKQU4yNCAtIFBhc3NpbmcgZmxhZyBmcm9tIE5HTlhUXG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiB0cnVlIH07XG4gICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgIC8vICwgSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApXG4gLy8gVkQgMTJKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgICAgIFwiTnh0Q29udHJvbGxlci5uZXdQcm9jZXNzXCIsXG4gICAgICAgIFtcIlF1ZXN0aW9uQm9va1wiLCBcInJlYWRcIiwgdXVpZCwgSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLCcnXSxcbiAgICAgICAgdGhpcy5zdWNjZXNzUmVhZEJvb2ssXG4gICAgICAgIHRoaXMuZmFpbHVyZVJlYWRCb29rXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3VjY2Vzc1JlYWRCb29rID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgY29uc29sZS5sb2coJ0luc2lkZSB0aGUgc3VjY2Vzc1JlYWRCb29rJyk7XG4gICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgIGlmKHJlc3BvbnNlICE9IG51bGwgfHwgcmVzcG9uc2UgIT0gdW5kZWZpbmVkKXtcbiAgICAgIHRoaXMucWJJdGVtID0gcmVzcG9uc2UucXVlc3Rpb25ib29rO1xuICAgICAgdGhpcy5hYkl0ZW0gPSByZXNwb25zZS5hbnN3ZXJib29rO1xuICAgICAgdGhpcy5oYW5kbGVCb29rLmVtaXQocmVzcG9uc2UpO1xuXG4gICAgfVxuICAgLy8gY29uc29sZS5sb2coJ3JlYWRpbmdRdWVzdGlvbiB1c2luZyAnICsgdGhpcy5xYkl0ZW0pO1xuICAgIGlmICh0aGlzLmFiSXRlbT8uU3RhdHVzX19jID09IFwiUGVuZGluZ1wiKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuYWJJdGVtLkFuc3dlcnNfX3IgPT0gbnVsbCB8fFxuICAgICAgICB0aGlzLmFiSXRlbS5BbnN3ZXJzX19yLnJlY29yZHMubGVuZ3RoID09IDBcbiAgICAgICkge1xuICAgICAgICB0aGlzLnJlYWRRdWVzdGlvbih0aGlzLnFiSXRlbS5GaXJzdF9RdWVzdGlvbl9fYyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBQb3B1bGF0ZSB0aGUgZXhpc3RpbmcgYW5zd2Vyc1xuICAgICAgICB2YXIgbGFzdFF1ZXN0aW9uSWQgPSBcIlwiO1xuXG4gICAgICAgIGZvciAodmFyIGFuc09iamVjdCBvZiB0aGlzLmFiSXRlbS5BbnN3ZXJzX19yLnJlY29yZHMpIHtcbiAgICAgICAgICBsYXN0UXVlc3Rpb25JZCA9IGFuc09iamVjdC5RdWVzdGlvbl9SZWZfX2M7XG5cbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucHVzaChhbnNPYmplY3QuUXVlc3Rpb25fUmVmX19jKTtcblxuICAgICAgICAgIHRoaXMuYW5zd2VyTWFwLnNldChhbnNPYmplY3QuUXVlc3Rpb25fUmVmX19jLCB7XG4gICAgICAgICAgICBxdWVzVmFsdWU6IGFuc09iamVjdC5RdWVzdGlvbl9SaWNoX1RleHRfX2MsXG4gICAgICAgICAgICBhbnNWYWx1ZTogYW5zT2JqZWN0LkFuc3dlcl9Mb25nX19jLFxuICAgICAgICAgICAgcXVlc0lkOiBhbnNPYmplY3QuUXVlc3Rpb25fUmVmX19jLFxuICAgICAgICAgICAgcVR5cDogYW5zT2JqZWN0LlF1ZXN0aW9uX1R5cGVfX2MsXG4gICAgICAgICAgICBncm91cFRleHQ6YW5zT2JqZWN0LlF1ZXN0aW9uX0dyb3VwX1RleHRfX2MsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25TdGFjaylcbiAgICAgICAgICBpZiAoYW5zT2JqZWN0LlF1ZXN0aW9uX1R5cGVfX2MgPT0gXCJCb29rXCIpIHtcbiAgICAgICAgICAgIHZhciBhdjEgPSBhbnNPYmplY3QuQW5zd2VyX0xvbmdfX2Muc3BsaXQoXCJAQCMjJCRcIik7XG4gICAgICAgICAgICAvLyAvL2NvbnNvbGUubG9nKFwiYm9vayBsb2dcIik7XG5cbiAgICAgICAgICAgIC8vICAvL2NvbnNvbGUubG9nKFwiYm9va2lkXCIgKyBhdjFbMF0pO1xuICAgICAgICAgICAgdGhpcy5hdHRhY2htZW50c01hcC5zZXQoYW5zT2JqZWN0LlF1ZXN0aW9uX1JlZl9fYywgW1xuICAgICAgICAgICAgICB7IGF0dGFjaG1lbnROYW1lOiBhdjFbMV0sIGF0dGFjaG1lbnRJZDogYXYxWzBdIH0sXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIC8vICAvL2NvbnNvbGUubG9nKHRoaXMuYXR0YWNobWVudHNNYXApO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYW5zT2JqZWN0LlF1ZXN0aW9uX1R5cGVfX2MgPT0gXCJGaWxlXCIpIHtcbiAgICAgICAgICAgIC8vICAvL2NvbnNvbGUubG9nKFwiaW5zaWRlIGlmXCIpO1xuICAgICAgICAgICAgdmFyIGF0dExpc3Q7XG4gICAgICAgICAgICB2YXIgYXR0O1xuICAgICAgICAgICAgZm9yICh2YXIgYXR0VmFyIG9mIGFuc09iamVjdC5BbnN3ZXJfTG9uZ19fYy5zcGxpdChcIixcIikpIHtcbiAgICAgICAgICAgICAgdmFyIGF0dElkTmFtZSA9IGF0dFZhci5zcGxpdChcIkBAIyMkJFwiKTtcbiAgICAgICAgICAgICAgYXR0LmF0dGFjaG1lbnROYW1lID0gYXR0SWROYW1lWzFdO1xuICAgICAgICAgICAgICBhdHQuYXR0YWNobWVudElkID0gYXR0SWROYW1lWzBdO1xuICAgICAgICAgICAgICBhdHRMaXN0LnB1c2goYXR0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXR0YWNobWVudHNNYXAuc2V0KGFuc09iamVjdC5RdWVzdGlvbl9SZWZfX2MsIGF0dExpc3QpO1xuICAgICAgICAgICAgLy8gIC8vY29uc29sZS5sb2codGhpcy5hdHRhY2htZW50c01hcCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5xdWVzdGlvblN0YWNrLnBvcCgpO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuYW5zd2VyTWFwKTtcbiAgICAgICAgLy8gUmVhZCB0aGUgbGFzdCBhbnN3ZXJlZCBxdWVzdGlvblxuICAgICAgICB0aGlzLnJlYWRRdWVzdGlvbihsYXN0UXVlc3Rpb25JZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmFiSXRlbT8uU3RhdHVzX19jID09IFwiQ29tcGxldGVkXCIpIHtcbiAgICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdChcIlN1bW1hcnl1cGRhdGVkXCIpO1xuICAgICAgLy8gVGVtcG9yYXJ5IEZpeCBmb3IgZHVwbGljYXRlIGFuc3dlcnMgb24gdGhlIHN1bW1hcnkuXG4gICAgICB0aGlzLnN1bW1hcnkgPSBbXTtcbiAgICAgIHRoaXMucGVyY2VudCA9IDEwMDtcbiAgICAgIHRoaXMucHJvZ3Jlc3NTdHlsZSA9IFwiMTAwJVwiO1xuXG4gICAgICBmb3IgKHZhciBhbnN3ZXIgb2YgdGhpcy5hYkl0ZW0uQW5zd2Vyc19fci5yZWNvcmRzKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coYW5zd2VyLlF1ZXN0aW9uX0dyb3VwX1RleHRfX2MpO1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdyZXBlYXQnKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhhbnN3ZXIuUXVlc3Rpb25fUmljaF9UZXh0X19jKTtcbiAgICAgICAgdmFyIGFuc3dlcnMgPSB7fTtcbiAgICAgICAgaWYgKGFuc3dlci5RdWVzdGlvbl9UeXBlX19jID09IFwiRmlsZVwiKSB7XG4gICAgICAgICAgdmFyIGZpbGVzID0gXCJcIjtcbiAgICAgICAgICB2YXIgZkluZGV4ID0gMDtcbiAgICAgICAgICB2YXIgZmlsZUxpc3QgPSBhbnN3ZXIuQW5zd2VyX0xvbmdfX2Muc3BsaXQoXCIsXCIpO1xuICAgICAgICAgIGZvciAodmFyIGZpbGVJZE5hbWUgb2YgZmlsZUxpc3QpIHtcbiAgICAgICAgICAgIHZhciBmaWxlTmFtZSA9IGZpbGVJZE5hbWUuc3BsaXQoXCJAIyRcIik7XG4gICAgICAgICAgICBpZiAoZkluZGV4ID09IDApIHtcbiAgICAgICAgICAgICAgZmlsZXMgPSBmaWxlTmFtZVsxXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGZpbGVzID0gZmlsZXMgKyBcIiAsXCIgKyBmaWxlTmFtZVsxXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZkluZGV4Kys7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYW5zd2VycyA9IHtcbiAgICAgICAgICAgIGdyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyxcbiAgICAgICAgICAgIHF1ZXNWYWx1ZTogYW5zd2VyLlF1ZXN0aW9uX1JpY2hfVGV4dF9fYyxcbiAgICAgICAgICAgIGFuc1ZhbHVlOiBmaWxlcyxcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xuICAgICAgICB9IGVsc2UgaWYgKGFuc3dlci5RdWVzdGlvbl9UeXBlX19jID09IFwiQm9va1wiKSB7XG4gICAgICAgICAgLyogIHZhciBxdWVzTm89MDtcbiAgICAgICAgIGlmKGFuc3dlci5BbnN3ZXJfTG9uZ19fYy5pbmNsdWRlcyhcIkBAIyMkJFwiKSl7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdsaW5lIDEyMjMnKTtcbiAgICAgICAgICAgIGZvciAodmFyIGJxQW5zd2VyVmFsdWUgb2YgYW5zd2VyLkFuc3dlcl9Mb25nX19jLnNwbGl0KFwiQEAjIyQkXCIpKSB7XG4gICAgICAgICAgICAgIHZhciBxdWVzVmFsdWU9YW5zd2VyLlF1ZXN0aW9uX1RleHRfX2Muc3BsaXQoXCJAQCMjJCRcIik7XG4gICAgICAgICAgICAgIGFuc3dlcnMgPSB7fTtcbiAgICAgICAgICAgICAgYW5zd2VycyA9IHtcbiAgICAgICAgICAgICAgIC8vIGdyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fVGV4dF9fYyxcbiAgICAgICAgICAgICAgICBxdWVzVmFsdWU6ICBcIiZsdDtwJmd0O1wiKyBxdWVzVmFsdWVbcXVlc05vXStcIiZsdDtwJmd0O1wiLFxuICAgICAgICAgICAgICAgIGFuc1ZhbHVlOiBicUFuc3dlclZhbHVlLFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBxdWVzTm8rKztcbiAgICAgICAgICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgIH0qL1xuICAgICAgICAgIGlmKGFuc3dlci5BbnN3ZXJfTG9uZ19fYy5pbmNsdWRlcyhcIkBAIyMkJFwiKSl7XG4gICAgICAgICAgICB2YXIgYW5zd2VydmFsdWVzID0gYW5zd2VyLkFuc3dlcl9Mb25nX19jLnNwbGl0KFwiQEAjIyQkXCIpO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygndmFsdWUnKVxuICAgICAgICAgICAgYW5zd2VycyA9IHsgICAgICBcbiAgICAgICAgICAgICAvL2dyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyxcbiAgICAgICAgICAgICBxdWVzVmFsdWU6IGFuc3dlci5RdWVzdGlvbl9SaWNoX1RleHRfX2MsXG4gICAgICAgICAgICAgYW5zVmFsdWU6IGFuc3dlcnZhbHVlcyxcbiAgICAgICAgICAgfTtcbiAgICAgICAgICAgLy9jb25zb2xlLmxvZyhhbnN3ZXJzKVxuICAgICAgICAgICB0aGlzLnN1bW1hcnkucHVzaChhbnN3ZXJzKTtcbiAgICAgICAgICAgfVxuICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICBhbnN3ZXJzID0geyAgICAgIFxuICAgICAgICAgICAgICAvL2dyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyxcbiAgICAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnN3ZXIuUXVlc3Rpb25fUmljaF9UZXh0X19jLFxuICAgICAgICAgICAgICBhbnNWYWx1ZTogYW5zd2VyLkFuc3dlcl9Mb25nX19jLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgIC8vIHZhciBhbnMxID0gYW5zd2VyLkFuc3dlcl9Mb25nX19jLnNwbGl0KFwiQEAjIyQkXCIpO1xuICAgICAgICAgIGFuc3dlcnMgPSB7ICAgICAgXG4gICAgICAgICAgICAvL2dyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyxcbiAgICAgICAgICAgIHF1ZXNWYWx1ZTogYW5zd2VyLlF1ZXN0aW9uX1JpY2hfVGV4dF9fYyxcbiAgICAgICAgICAgIGFuc1ZhbHVlOiBhbnN3ZXIuQW5zd2VyX0xvbmdfX2MsXG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLnN1bW1hcnkucHVzaChhbnN3ZXJzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGZhaWx1cmVSZWFkQm9vayA9IChyZXNwb25zZSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGZhaWx1cmVSZWFkQm9vaycpO1xuICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgfTtcblxuICBwcml2YXRlIHJlYWRBbnN3ZXJib29rID0gKHV1aWQ6IHN0cmluZykgPT4ge1xuICAgIGlmKHRoaXMuc2VydiA9IFwiYXBpXCIpIHtcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgICAgdGhpcy50a24sXG4gICAgICAgIFtcIkFuc3dlckJvb2tcIiwgXCJyZWFkXCIsIHV1aWRdLFxuICAgICAgICB0aGlzLnN1Y2Nlc3NBbnN3ZXJCb29rUmVhZCxcbiAgICAgICAgdGhpcy5mYWlsdXJlQW5zd2VyQm9va1JlYWRcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFZEIDE1RkVCMjQgLSB1c2VkIHByb2Nlc3NOZXcgbWV0aG9kIFxuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gLy8gVkQgMTJKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLm5ld1Byb2Nlc3NcIixcbiAgICAgICAgW1wiQW5zd2VyQm9va1wiLCBcInJlYWRcIiwgdXVpZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksJyddLFxuICAgICAgICB0aGlzLnN1Y2Nlc3NBbnN3ZXJCb29rUmVhZCxcbiAgICAgICAgdGhpcy5mYWlsdXJlQW5zd2VyQm9va1JlYWRcbiAgICAgICk7XG4gICAgfVxuICB9XG5cblxuICBwcml2YXRlIHN1Y2Nlc3NBbnN3ZXJCb29rUmVhZCA9IChyZXNwb25zZSkgPT4ge1xuICAgIGlmICh0aGlzLmFiSXRlbT8uU3RhdHVzX19jID09IFwiQ29tcGxldGVkXCIpIHtcbiAgICAgIGZvciAodmFyIGFuc3dlciBvZiB0aGlzLmFiSXRlbS5BbnN3ZXJzX19yLnJlY29yZHMpIHtcbiAgICAgICAgdmFyIGF2ID0gYW5zd2VyLkFuc3dlcl9Mb25nX19jLnNwbGl0KFwiQEAjIyQkXCIpO1xuICAgICAgICB2YXIgYW5zd2VycyA9IHsgcXVlc1ZhbHVlOiBhbnN3ZXIuUXVlc3Rpb25fUmljaF9UZXh0X19jLCBhbnNWYWx1ZTogYXYsIGdyb3VwVGV4dDphbnN3ZXIuUXVlc3Rpb25fR3JvdXBfVGV4dF9fYyB9O1xuICAgICAgICAvL2NvbnNvbGUubG9nKGFuc3dlcnMpXG4gICAgICAgIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xuICAgICAgfVxuICAgICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KFwiU3VtbWFyeXVwZGF0ZWRcIik7XG4gICAgfVxuICB9O1xuXG4gIHByaXZhdGUgZmFpbHVyZUFuc3dlckJvb2tSZWFkID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZhaWx1cmVyZWFkJyk7XG4gICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gIH07XG5cbiAgcHJpdmF0ZSByZWFkUXVlc3Rpb24gPSAodXVpZDogc3RyaW5nKSA9PiB7XG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgIC8vICAgdGhpcy50a24sXG4gICAgICAvLyAgIFtcIlF1ZXN0aW9uXCIsIFwicmVhZFwiLCB1dWlkXSxcbiAgICAgIC8vICAgdGhpcy5zdWNjZXNzUmVhZCxcbiAgICAgIC8vICAgdGhpcy5mYWlsdXJlUmVhZFxuICAgICAgLy8gKTtcbiAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5zaG93TG9hZGVyKCk7XG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiB0cnVlIH07XG4gICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ1F1ZXN0aW9uJywncmVhZCcsdXVpZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgICAgKGRhdGEpPT57XG4gICAgICAgICAgdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGVMb2FkZXIoKTtcbiAgICAgICAgICBjb25zb2xlLmxvZygnZGF0YSBjYW1lIHN1Y2Vzc2Z1bGx5Jyk7XG4gICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgICAgdGhpcy5zdWNjZXNzUmVhZChKU09OLnBhcnNlKGRhdGEpKVxuICAgICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgICAgIHRoaXMuc2hhcmVkU2VydmljZS5oaWRlTG9hZGVyKCk7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHF1ZXN0aW9uIGJvb2tzJywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgIC8vIC8vIFZEIDE1RkVCMjQgLSBtYWtlIGNyZWF0ZUFuc3dlckJvb2tGbGFnIGZhbHNlIG9ubHlcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuXG4gICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAgICBcIk54dENvbnRyb2xsZXIubmV3UHJvY2Vzc1wiLFxuICAgICAgICBbXCJRdWVzdGlvblwiLCBcInJlYWRcIiwgdXVpZCwgSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLCcnXSxcbiAgICAgICAgdGhpcy5zdWNjZXNzUmVhZCxcbiAgICAgICAgdGhpcy5mYWlsdXJlUmVhZFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN1Y2Nlc3NSZWFkID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgY29uc29sZS5sb2coJ0luc2lkZSB0aGUgc3VjY2Vzc1JlYWQnKTtcbiAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgLy8gSEEgMDJGRUIyNCBGb3IgdGVzdGluZyBmb3IgdXNlZCB0aGlzIGFuZCBpbiBmdXR1cmUgaXQgY2FuIGJlIHVzZWQgdG8gdGVzdCB3aXRoIHN0YXRpYyBkYXRhXG4gICAgLy8gdmFyIGFiID0gWydmaXJzdCcsJ2xhc3QnLCcxMjMnLCcxMi0xMi0yMDAwJywnMjInLCdNYWxlJywnMTIgY3Jvc3MgMScsJ0VtQ29udGFjdCcsJzk4NzY1JywnQScsJ1NpbmdsZSddO1xuICAgIC8vIGZvcihjb25zdCBbaW5kZXgsaXRlbV0gb2YgcmVzcG9uc2UucXVlc3Rpb24uUXVlc3Rpb25zX19yLnJlY29yZHMuZW50cmllcygpKXtcbiAgICAvLyAgIGl0ZW0uaW5wdXQgPSBhYltpbmRleF07XG4gICAgLy8gfVxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtKTtcbiAgICAvLyBSZXNldCB0aGUgVmFyaWFibGVzXG5cbiAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0pIHtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xuICAgICAgdGhpcy5hbnN3ZXJXcmFwID0gbmV3IEFuc3dlcldyYXBwZXIoKTtcbiAgICAgIHRoaXMub3B0aW9uVmFsdWVzID0gW107XG4gICAgICB0aGlzLnN1YlF1ZXN0aW9ucyA9IFtdO1xuICAgICAgdGhpcy5yZXNldEZsYWcodGhpcy5xdWVzdGlvbkl0ZW0uVHlwZV9fYyk7XG4gICAgfVxuICAgIHRoaXMucXVlc3Rpb25JdGVtID0gcmVzcG9uc2UucXVlc3Rpb247XG4gICAgLy8gY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xuXG4gICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0uVHlwZV9fYyA9PT0gJ0FscGhhbnVtZXJpYycpe1xuICAgICAgdGhpcy5zcGxDQ0JhY2tDbGljayA9IHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50UXVlc3Rpb25JZCA9IHRoaXMucXVlc3Rpb25JdGVtLklkO1xuICAgIHRoaXMuaGFuZGxlUGFnZS5lbWl0KHRoaXMucXVlc3Rpb25JdGVtLlRyYWNraW5nX0lEX19jKTtcbiAgICAvLyBIYW5kbGUgdGhlIHN1YlF1ZXN0aW9uIG9wdGlvbnNcbiAgICBpZiAocmVzcG9uc2Uuc3FPcHRpb25zKSB7XG4gICAgICAvL3ZhciBuZXdSZWNvcmRzID0gW107XG4gICAgICBmb3IgKHZhciBxIG9mIHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2cocS5OYW1lKTtcbiAgICAgICAgdmFyIHNxID0gcmVzcG9uc2Uuc3FPcHRpb25zW3EuSWRdO1xuICAgICAgICBpZiAoc3EpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdmb3VuZCBvcHRpb25zIGZvciBzdWJxdWVzdGlvbiAnICsgcS5OYW1lKTtcbiAgICAgICAgICBpZiAoIXEuUXVlc3Rpb25fT3B0aW9uc19fcikge1xuICAgICAgICAgICAgcS5RdWVzdGlvbl9PcHRpb25zX19yID0gc3EuUXVlc3Rpb25fT3B0aW9uc19fcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wcm9jZXNzUXVlc3Rpb24oKTtcbiAgICB0aGlzLmlubmVyaHRtbCA9IHRoaXMuc2FuaXRpemVyLmJ5cGFzc1NlY3VyaXR5VHJ1c3RIdG1sKFxuICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uQWRkaXRpb25hbF9SaWNoX19jXG4gICAgKTtcbiAgICB0aGlzLnRyYWNrSWQoKTtcbiAgfTtcblxuICB0cmFja0lkKCkge1xuICAgIHZhciBxdHJhY2tJZCA9IHRoaXMucXVlc3Rpb25JdGVtLlRyYWNraW5nX0lEX19jO1xuICAgIC8vY29uc29sZS5sb2coJ3RyYWNrSWQtcXVlc3Rpb24nK3F0cmFja0lkKTtcbiAgfVxuXG4gIHByaXZhdGUgZmFpbHVyZVJlYWQgPSAocmVzcG9uc2UpID0+IHtcbiAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmFpbHVyZXJlYWQnKTtcbiAgICAvL2NvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgfTtcblxuICBwcml2YXRlIHNhdmVBbnN3ZXIgPSAoKSA9PiB7XG4gICAgLy8gU2V0IHRoZSBBbnN3ZXIgTnVtYmVyIGJhc2VkIG9uIHRoZSBRdWVzdGlvbiBTdGFjayBMZW5ndGhcbiAgICBpZiAodGhpcy5pbnBWYWx1ZSAhPSBcIi5cIikge1xuICAgICAgdGhpcy5jdXJyZW50UXVlc3Rpb25JZCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuYW5zd2VyV3JhcC5hbnNOdW1iZXIgPSB0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoICsgMTtcblxuICAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgICAvLyB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXG4gICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAgLy8gICBbXCJBbnN3ZXJcIiwgXCJjcmVhdGVcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy5hbnN3ZXJXcmFwKV0sXG4gICAgICAvLyAgIHRoaXMuc3VjY2Vzc1NhdmUsXG4gICAgICAvLyAgIHRoaXMuZmFpbHVyZVNhdmVcbiAgICAgIC8vICk7XG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnQW5zd2VyJywnY3JlYXRlJyxKU09OLnN0cmluZ2lmeSh0aGlzLmFuc3dlcldyYXApLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxuICAgICAgKGRhdGEpPT57XG4gICAgICAgIGNvbnNvbGUubG9nKCdkYXRhIGNhbWUgc3VjZXNzZnVsbHknKTtcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgIHRoaXMuc3VjY2Vzc1NhdmUoSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgIH0sKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVkQgMTVGRUIyNCAtIHVzZWQgcHJvY2Vzc05ldyBtZXRob2QgXG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gLy8gVkQgMTJKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLm5ld1Byb2Nlc3NcIixcbiAgICAgICAgW1wiQW5zd2VyXCIsIFwiY3JlYXRlXCIsIEpTT04uc3RyaW5naWZ5KHRoaXMuYW5zd2VyV3JhcCksSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLCcnXSxcbiAgICAgICAgdGhpcy5zdWNjZXNzU2F2ZSxcbiAgICAgICAgdGhpcy5mYWlsdXJlU2F2ZVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgaHRtbERlY29kZShpbnB1dCkge1xuICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGlucHV0LCBcInRleHQvaHRtbFwiKTtcbiAgICByZXR1cm4gZG9jLmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudDtcbiAgfVxuXG4gIHByaXZhdGUgc3VjY2Vzc1NhdmUgPSAocmVzcG9uc2UpID0+IHtcbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzID09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAvL3RoaXMuYWJJdGVtID0gcmVzcG9uc2UuYW5zd2VyYm9vaztcbiAgICAgIHRoaXMuYW5zd2VyTWFwLnNldChyZXNwb25zZS5hbnN3ZXIucXVlc0lkLCByZXNwb25zZS5hbnN3ZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yLmVycm9yTXNnID0gcmVzcG9uc2UuZXJyb3IuZXJyb3JNc2c7XG4gICAgfVxuICAgIGlmKCF0aGlzLmJhY2tCdXR0b25GbGFnKXtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGZhaWx1cmVTYXZlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZhaWx1cmVTYXZlJyk7XG4gICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBwcm9jZXNzUXVlc3Rpb24gPSAoKSA9PiB7XG4gICAgLy8gY29uc29sZS5sb2coJ0luc2lkZSB0aGUgcHJvY2Vzc1F1ZXN0aW9uJyk7XG4gICAgLy8gY29uc29sZS5sb2coJ3NwbENDQmFja0NsaWNrID0gJyt0aGlzLnNwbENDQmFja0NsaWNrKTtcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uU3RhY2spO1xuICAgIC8vY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xuICAgIHRoaXMucG9wID0gdHJ1ZTtcblxuICAgIC8vIGlmKCF0aGlzLmJhY2spe1xuICAgIC8vICAgdGhpcy5xdWVzdGlvbk5hbWUucHVzaCh0aGlzLnF1ZXN0aW9uSXRlbS5OYW1lKVxuICAgIC8vIH1cblxuICAgIGlmICh0aGlzLnFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgPT09IHRydWUpIHtcbiAgICAgIGlmICghdGhpcy5iYWNrKSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25OYW1lLnB1c2godGhpcy5xdWVzdGlvbkl0ZW0uTmFtZSk7XG4gICAgICB9XG4gICAgICB0aGlzLmJhY2sgPSBmYWxzZTtcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uTmFtZVswXSA9PT0gdGhpcy5xdWVzdGlvbk5hbWVbMV0pIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbk5hbWUucG9wKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY3VycmVudE5hbWUgPSB0aGlzLnF1ZXN0aW9uSXRlbS5OYW1lO1xuICAgICAgdGhpcy5wYXRocXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uTmFtZS5pbmRleE9mKHRoaXMuY3VycmVudE5hbWUpO1xuICAgICAgdGhpcy5wb3NzaWJpbGl0aWVzID0gdGhpcy5xYkl0ZW0uUG9zc2liaWxpdGllc19fYztcbiAgICB9XG5cbiAgICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnM7XG4gICAgdGhpcy5kYXkoKTtcbiAgICAvL2NvbnNvbGUubG9nKCdwcm9jZXNzaW5nIHF1ZXN0aW9uICcgKyB0aGlzLnF1ZXN0aW9uSXRlbS5OYW1lICsgJyBleGlzdGluZyBhbnN3ZXJzIGFyZSAnICsgdGhpcy5hbnN3ZXJNYXAuc2l6ZSk7IC8vID0+ICcgKyBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXN0aW9uSXRlbSkpO1xuXG4gICAgLy8gU2V0IHRoZSBGbGFncyB0byBzaG93IHJpZ2h0IGZpZWxkc1xuICAgIHRoaXMuc2V0RmxhZyh0aGlzLnF1ZXN0aW9uSXRlbS5UeXBlX19jKTtcbiAgICAvL2NvbnNvbGUubG9nKCdBZnRlciB0aGUgc2V0RmxhZyBtZXRob2QgZHRGbGFnID0gJyt0aGlzLmR0RmxhZyk7XG5cbiAgICAvLyBDaGVjayB0aGUgZXhpc3RpbmcgYW5zd2VyIGZyb20gYW5zd2VyTWFwXG4gICAgaWYgKHRoaXMuYW5zd2VyTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCkpIHtcbiAgICAgIC8vICAvL2NvbnNvbGUubG9nKFwiZXhpc3RpbmcgYW5zd2VyIGZvdW5kIGZvciB0aGlzLnF1ZXN0aW9uSXRlbS5OYW1lXCIpO1xuICAgICAgdmFyIGVBbnN3ZXIgPSB0aGlzLmFuc3dlck1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xuICAgICAgLy8gR2V0IHRoZSBleGlzdGluZyBhbnN3ZXIgZnJvbSB0aGUgTWFwXG4gICAgICB0aGlzLmlucFZhbHVlID0gZUFuc3dlci5hbnNWYWx1ZTtcbiAgICAgIC8vY29uc29sZS5sb2coJ2lucFZhbHVlIGhhcyBiZWVuIHNldCB0byAnICsgdGhpcy5pbnBWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5hdHRhY2htZW50c01hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uSWQpKSB7XG4gICAgICAgIHRoaXMuYXR0YWNobWVudHMgPSB0aGlzLmF0dGFjaG1lbnRzTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSByZW1vdmluZyBhdHRhY2htZW50IGFycmF5Jyk7XG4gICAgICB0aGlzLmF0dGFjaG1lbnRzID0gW107XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuaW5wVmFsdWUpO1xuICAgIGlmKHRoaXMuc3BsQ0NCYWNrQ2xpY2sgJiYgdGhpcy5pbnBWYWx1ZSAmJiB0aGlzLmlucFZhbHVlLmluY2x1ZGVzKCdFUycpKXtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGlmIGNvbmQnKTtcbiAgICAgIHRoaXMuc3BsQ0NCYWNrQ2xpY2sgPSBmYWxzZTtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlLnJlcGxhY2UoJ0VTJywnJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2hlY2tib3hGbGFnKSB7XG4gICAgICAvLyBTZXQgdGhlIE9wdGlvbnMgZm9yIENoZWNrYm94XG4gICAgICB0aGlzLnNldE9wdGlvbnModGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYm9va0ZsYWcpIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ0luaXNlIHRoZSBleHBlY3RlZCBib29rRmxhZyBjb25kJyk7XG4gICAgICAvL2NvbnNvbGUubG9nKCdkdEZsYWcgPSAnK3RoaXMuZHRGbGFnKTtcbi8vICBIQSAyMEZFQjI0IExhYmVsIEZpeFxuICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgZWxlbWVudC5RdWVzdGlvbl9UZXh0X19jID0gZWxlbWVudC5RdWVzdGlvbl9UZXh0X19jLnJlcGxhY2UoLzxbXj5dKz4vZywgJycpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnNldFN1YlF1ZXN0aW9ucyh0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmxpc3RGbGFnKSB7XG4gICAgICAvLyBTZXQgdGhlIExvY2FsU3ViUXVlc3Rpb25zXG4gICAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIGxpc3QgZmxhZycpO1xuICAgICAgLy8gY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHMpO1xuICAgICAgLy8gY29uc29sZS5sb2codGhpcy5hYkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHMpO1xuICAgICAgaWYoIXRoaXMubG9jYWxTdWJRTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCkpe1xuICAgICAgICB0aGlzLnNldFN1YlF1ZXN0aW9ucyh0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcyk7XG4gICAgICB9IFxuICAgIH0gZWxzZSBpZiAodGhpcy5kdEZsYWcpIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ0luaXNlIHRoZSB1bmV4cGVjdGVkIGR0RmxhZyBjb25kJyk7XG4gICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IFwiXCI7XG4gICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gXCJcIjtcbiAgICAgIHRoaXMuc2VsRGF0ZSA9IFwiXCI7XG4gICAgICAvLyAyMDIxLTUtMTZUMDA6MDBcbiAgICAgIGlmICh0aGlzLmRhdGVNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLklkKSkge1xuICAgICAgICB0aGlzLnNlbERhdGUgPSB0aGlzLmRhdGVNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLklkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkaG91ck1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uSWQpKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdGhpcy5zZWxlY3RlZGhvdXJNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLklkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkbWludXRlTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCkpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IHRoaXMuc2VsZWN0ZWRtaW51dGVNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLklkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5YMjRfSG91cnNfX2MgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5ob3Vycy5wdXNoKFxuICAgICAgICAgIFwiMTNcIixcbiAgICAgICAgICBcIjE0XCIsXG4gICAgICAgICAgXCIxNVwiLFxuICAgICAgICAgIFwiMTZcIixcbiAgICAgICAgICBcIjE3XCIsXG4gICAgICAgICAgXCIxOFwiLFxuICAgICAgICAgIFwiMTlcIixcbiAgICAgICAgICBcIjIwXCIsXG4gICAgICAgICAgXCIyMVwiLFxuICAgICAgICAgIFwiMjJcIixcbiAgICAgICAgICBcIjIzXCIsXG4gICAgICAgICAgXCIwMFwiXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uWDI0X0hvdXJzX19jID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLmhvdXJzID0gdGhpcy5ob3Vycy5zbGljZSgwLCAxMik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kdEZsYWcgJiYgdGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICB2YXIgZHRWYWwgPSB0aGlzLmlucFZhbHVlLnNwbGl0KFwiVFwiKTsgXG4gICAgICAgIHZhciBkdHZhbDAgPSB0aGlzLmlucFZhbHVlLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IGR0VmFsWzBdO1xuICAgICAgICB0aGlzLmlucFZhbHVlID0gZHR2YWwwWzBdO1xuXG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gZHRWYWxbMV07XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gZHR2YWwwWzFdO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5Jc19EYXRlX0JhY2t3YXJkX19jIHx8XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLklzX0RhdGVfRm9yd2FyZF9fY1xuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5Jc19EYXRlX0JhY2t3YXJkX19jID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVTaW5jZSA9IHtcbiAgICAgICAgICAgIHllYXI6IHRoaXMudG9kYXkuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIG1vbnRoOiB0aGlzLnRvZGF5LmdldE1vbnRoKCkgKyAxLFxuICAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSArIDEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uSXNfRGF0ZV9Gb3J3YXJkX19jID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVVbnRpbCA9IHtcbiAgICAgICAgICAgIHllYXI6IHRoaXMudG9kYXkuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIG1vbnRoOiB0aGlzLnRvZGF5LmdldE1vbnRoKCkgKyAxLFxuICAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmZpbGVGbGFnKSB7XG4gICAgICB0aGlzLmZpbGVVSSgpO1xuICAgICAgLy8gbG9naWNcbiAgICAgIHRoaXMuYWxsb3dlZEZpbGVFeHRlbnNpb24gPVxuICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uQWxsb3dlZF9GaWxlX0V4dGVuc2lvbnNfX2M/LnNwbGl0KFwiO1wiKTtcbiAgICAgIC8vY29uc29sZS5sb2codGhpcy5hbGxvd2VkRmlsZUV4dGVuc2lvbik7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLnFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgPT09IHRydWUpIHtcbiAgICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICB9XG4gIH07XG5cbiAgc2V0RmxhZyh0eXApIHtcbiAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgc2V0RmxhZyBmb3IgJyArIHR5cCk7XG5cbiAgICBpZiAodHlwKSB7XG4gICAgICAvLyBTZXQgdGhlIEZsYWdzXG4gICAgICBpZiAodHlwID09IFwiVGV4dFwiKSB7XG4gICAgICAgIHRoaXMudGV4dEZsYWcgPSB0cnVlO1xuXG4gICAgICAgIC8vdGhpcy5udW1iZXJGbGFnID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiTnVtYmVyXCIpIHtcbiAgICAgICAgdGhpcy5udW1iZXJGbGFnID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiQWxwaGFOdW1lcmljXCIpIHtcbiAgICAgICAgdGhpcy5hbHBoYW51bWVyaWNGbGFnID0gdHJ1ZTtcbiAgICAgICAgLyppZih0aGlzLmlucFZhbHVlLmxlbmd0aCA9PT0gMCl7XG4gICAgICAgICAgdGhpcy5pbnBWYWx1ZT0nRVMnXG4gICAgICAgIH0qL1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJFbWFpbFwiKSB7XG4gICAgICAgIHRoaXMuZW1haWxGbGFnID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiRmlsZVwiKSB7XG4gICAgICAgIHRoaXMuZmlsZUZsYWcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJEYXRlVGltZVwiKSB7XG4gICAgICAgIHRoaXMuZHRGbGFnID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50aW1lRmxhZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZGF0ZUZsYWcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJUZXh0QXJlYVwiKSB7XG4gICAgICAgIHRoaXMudGFGbGFnID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiUmFkaW9cIikge1xuICAgICAgICB0aGlzLnJhZGlvRmxhZyA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRyb3Bkb3duXCIpIHtcbiAgICAgICAgdGhpcy5kcm9wZG93bkZsYWcgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJDaGVja2JveFwiKSB7XG4gICAgICAgIHRoaXMuY2hlY2tib3hGbGFnID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiQm9va1wiKSB7XG4gICAgICAgIHRoaXMuYm9va0ZsYWcgPSB0cnVlO1xuICAgICAgfWVsc2UgaWYgKHR5cCA9PSAnTGlzdCcpe1xuICAgICAgICB0aGlzLmxpc3RGbGFnID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiVGltZVwiKSB7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgVGltZSBjb25kJyk7XG4gICAgICAgIHRoaXMuZHRGbGFnID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50aW1lRmxhZyA9IHRydWU7XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kdEZsYWcpO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJEYXRlXCIpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBEYXRlIGNvbmQnKTtcbiAgICAgICAgdGhpcy5kdEZsYWcgPSB0cnVlO1xuICAgICAgICB0aGlzLmRhdGVGbGFnID0gdHJ1ZTtcbiAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmR0RmxhZyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVzZXRGbGFnKHR5cCkge1xuICAgIGlmICh0eXApIHtcbiAgICAgIC8vIFNldCB0aGUgRmxhZ3NcbiAgICAgIGlmICh0eXAgPT0gXCJUZXh0XCIpIHtcbiAgICAgICAgdGhpcy50ZXh0RmxhZyA9IGZhbHNlO1xuICAgICAgICAvL3RoaXMubnVtYmVyRmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJOdW1iZXJcIikge1xuICAgICAgICB0aGlzLm51bWJlckZsYWcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiQWxwaGFudW1lcmljXCIpIHtcbiAgICAgICAgdGhpcy5hbHBoYW51bWVyaWNGbGFnID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkVtYWlsXCIpIHtcbiAgICAgICAgdGhpcy5lbWFpbEZsYWcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiRmlsZVwiKSB7XG4gICAgICAgIHRoaXMuZmlsZUZsYWcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiRGF0ZVRpbWVcIikge1xuICAgICAgICB0aGlzLmR0RmxhZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRhdGVGbGFnID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGltZUZsYWcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiVGV4dEFyZWFcIikge1xuICAgICAgICB0aGlzLnRhRmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJSYWRpb1wiKSB7XG4gICAgICAgIHRoaXMucmFkaW9GbGFnID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRyb3Bkb3duXCIpIHtcbiAgICAgICAgdGhpcy5kcm9wZG93bkZsYWcgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAodHlwID09IFwiQ2hlY2tib3hcIikge1xuICAgICAgICB0aGlzLmNoZWNrYm94RmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJCb29rXCIpIHtcbiAgICAgICAgdGhpcy5ib29rRmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gJ0xpc3QnKXtcbiAgICAgICAgdGhpcy5saXN0RmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJUaW1lXCIpIHtcbiAgICAgICAgdGhpcy5kdEZsYWcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50aW1lRmxhZyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJEYXRlXCIpIHtcbiAgICAgICAgdGhpcy5kdEZsYWcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kYXRlRmxhZyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldE9wdGlvbnMocmVjb3Jkcykge1xuICAgIGZvciAodmFyIG9wdCBvZiByZWNvcmRzKSB7XG4gICAgICB2YXIgb3YgPSBuZXcgT3B0aW9uVmFsdWUoKTtcbiAgICAgIG92LklkID0gb3B0LklkO1xuICAgICAgb3YuTmFtZSA9IG9wdC5OYW1lO1xuICAgICAgb3YuVmFsdWVfX2MgPSBvcHQuVmFsdWVfX2M7XG4gICAgICBvdi5OZXh0X1F1ZXN0aW9uX19jID0gb3B0Lk5leHRfUXVlc3Rpb25fX2M7XG4gICAgICBvdi5jaGVja2VkID0gZmFsc2U7XG5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSAmJlxuICAgICAgICB0aGlzLmlucFZhbHVlLnNwbGl0KFwiQEAjIyQkXCIpLmluY2x1ZGVzKG9wdC5WYWx1ZV9fYylcbiAgICAgICkge1xuICAgICAgICBvdi5jaGVja2VkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5vcHRpb25WYWx1ZXMucHVzaChvdik7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2FwdHVyZSBhbmQgUHJvY2VzcyBDaGlsZCBFdmVudFxuICBjaGlsZEV2ZW50Q2FwdHVyZShldmVudCwgcXVlcz86YW55KSB7XG4gICAgY29uc29sZS5sb2coJ2luc2lkZSBjaGlsZEV2ZW50Q2FwdHVyZSAnKTtcbiAgICBjb25zb2xlLmxvZyhldmVudCk7XG4gICAgdGhpcy5jaGFuZ2VTZXJ2aWNlLmFubm91bmNlQ2hhbmdlKGV2ZW50KTtcbiAgICAvLyBIQSAzMS1KQU4tMjQgQXNzaWduIHZhbHVlcyB0byBkcm9wZG93biBxdWVzdGlvblxuICAgIHF1ZXMuaW5wdXQgPSBldmVudD8udmFsdWVPYmo7XG4gICAgLy9xdWVzLmlucHV0ID0gZXZlbnQ7IC8vIGhlcmUgd2hlbiB1c2luZyB0aGUgbmctc2VsZWN0IGdvdCBldmVudCBhcyB2YWx1ZVxuICB9XG5cbiAgc2V0U3ViUXVlc3Rpb25zKHJlY29yZHMpIHtcbiAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIHNldFN1YlF1ZXN0aW9ucycpO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlY29yZHMpO1xuICAgIHZhciBxYU1hcCA9IG5ldyBNYXAoKTtcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmlucFZhbHVlKTtcbiAgICBpZiAodGhpcy5pbnBWYWx1ZSkge1xuICAgICAgdmFyIGFJbmRleCA9IDA7XG4gICAgICAvLyBzZWFyY2ggY2hhbmdlZCBhcyBzZW1pIGNvbG9uIGJlY2F1c2Ugb2YgYWRkcmVzcyBjb250YWlucyBjb21tYSBcbiAgICAgIGlmICgodGhpcy5pbnBWYWx1ZS5zZWFyY2goXCI7IFwiKSA9PSAtMSkpIHtcbiAgICAgICAvLyBjb25zdCB3aXRob3V0QW5zd2VyU3RyaW5nID0gdGhpcy5pbnBWYWx1ZS5yZXBsYWNlKFwiYW5zd2VyU3RyaW5nOiBcIiwgXCJcIik7IC8vcmVtb3ZlIHRoZSBhbnN3ZXIgc3RyaW5nXG4gICAgICAgLy8gdGhpcy5pbnBWYWx1ZSA9IHdpdGhvdXRBbnN3ZXJTdHJpbmc7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgJ0BAIyMkJCcgO1xuICAgICAgICBmb3IgKHZhciBhbnNTdHIgb2YgdGhpcy5pbnBWYWx1ZS5zcGxpdChcIkBAIyMkJFwiKSkge1xuICAgICAgICAgIGFJbmRleCsrO1xuICAgICAgICAgIHFhTWFwLnNldChhSW5kZXgsIGFuc1N0cik7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnU2V0dGluZyB0aGUgcWFNYXAgZm9yICcgKyBhSW5kZXggKyAnIHdpdGggJyArIGFuc1N0cik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGFuc1N0ciBvZiB0aGlzLmlucFZhbHVlLnNwbGl0KFwiOyBcIikpIHtcbiAgICAgICAgICBhSW5kZXgrKztcbiAgICAgICAgICBxYU1hcC5zZXQoYUluZGV4LCBhbnNTdHIpO1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ1NldHRpbmcgdGhlIHFhTWFwICcgKyBhSW5kZXggKyAnIHdpdGggJyArIGFuc1N0cik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coJ2FmdGVyIHNldHRpbmcgdmFsdWVzIGZyb20gaW5wdmFsdWUgcWEgbWFwIGFyZScpO1xuICAgIC8vIGNvbnNvbGUubG9nKHFhTWFwKTtcblxuICAgIGZvciAodmFyIHF1ZXMgb2YgcmVjb3Jkcykge1xuICAgICAgaWYgKHF1ZXMuVHlwZV9fYyA9PSBcIkZpbGVcIikge1xuICAgICAgICB0aGlzLnZhbHVlTmFtZTEgPSBxdWVzLkFsbG93ZWRfRmlsZV9FeHRlbnNpb25zX19jO1xuICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMudmFsdWVOYW1lMSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhbnMgPSAnJztcbiAgICAgIGlmIChxYU1hcC5oYXMocXVlcy5RdWVzdGlvbl9Ob19fYykpIHtcbiAgICAgICAgICBxdWVzLmlucHV0ID0gcWFNYXAuZ2V0KHF1ZXMuUXVlc3Rpb25fTm9fX2MpO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdhZnRlciBmZXRjaGluZyBtYXAgdmFsdWVzJyk7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcy5pbnB1dCk7XG4gICAgICAgICAgaWYocXVlcy5pbnB1dC5pbmRleE9mKCckJEBAIyMnKSA+IDApe1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2Fuc3dlciBzdXBwb3NlZCB0byBiZSB0cmltbWVkJyk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVzLmlucHV0KTtcbiAgICAgICAgICAgIGFucyA9IHF1ZXMuaW5wdXQuc3Vic3RyaW5nKHF1ZXMuaW5wdXQuaW5kZXhPZignJCRAQCMjJykrNixxdWVzLmlucHV0Lmxlbmd0aCk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhhbnMpO1xuICAgICAgICAgICAgcXVlcy5pbnB1dCA9IHF1ZXMuaW5wdXQuc3Vic3RyaW5nKDAscXVlcy5pbnB1dC5pbmRleE9mKCckJEBAIyMnKSk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVzLmlucHV0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgaWYgKChxdWVzLlR5cGVfX2MgPT09IFwiRGF0ZVwiKSAmJiAocXVlcy5Jc19EYXRlX0JhY2t3YXJkX19jIHx8IHF1ZXMuSXNfRGF0ZV9Gb3J3YXJkX19jKSkge1xuICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGRhdGUgYmFja3dhcmQvZm9yd2FyZCBjb25kJyk7XG4gICAgICAgIGlmIChxdWVzLklzX0RhdGVfQmFja3dhcmRfX2MgPT09IHRydWUpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIElzX0RhdGVfQmFja3dhcmRfX2MnKTtcbiAgICAgICAgICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnMuZGlzYWJsZVNpbmNlID0ge1xuICAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICAgbW9udGg6IHRoaXMudG9kYXkuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgICAgICBkYXk6IHRoaXMudG9kYXkuZ2V0RGF0ZSgpICsgMSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChxdWVzLklzX0RhdGVfRm9yd2FyZF9fYyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgSXNfRGF0ZV9Gb3J3YXJkX19jJyk7XG4gICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVVbnRpbCA9IHtcbiAgICAgICAgICAgIHllYXI6IHRoaXMudG9kYXkuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgIG1vbnRoOiB0aGlzLnRvZGF5LmdldE1vbnRoKCkgKyAxLFxuICAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5teURhdGVQaWNrZXJPcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdWJRdWVzdGlvbnMucHVzaChxdWVzKTtcbiAgICAgIGZvcih2YXIgaT0wOyBpPHRoaXMuc3ViUXVlc3Rpb25zLmxlbmd0aDtpKyspe1xuICAgICAgICAvLyB0byBzaG93L2hpZGUgdGhlIGRlcGVuZGVudCBkcm9wZG93biBvbmx5IGZpZWxkIHVzaW5nIHRoZSBkcm9wRG93bk9ubHkgYm9vbGVhblxuICAgICAgICBpZih0aGlzLnN1YlF1ZXN0aW9uc1tpXS5TaXplX19jID09IDQpe1xuICAgICAgICAgIHRoaXMuc3ViUXVlc3Rpb25zW2ldLmRyb3BEb3duT25seSA9IHRydWU7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIHRoaXMuc3ViUXVlc3Rpb25zW2ldLmRyb3BEb3duT25seSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZihhbnMgIT0gJycpe1xuICAgICAgICBmb3IodmFyIGFuIG9mIChhbnMuc3BsaXQoJyQkQEAjIycpKSl7XG4gICAgICAgICAgdmFyIHNRID0gbmV3IFF1ZXN0aW9uKCk7XG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihzUSxxdWVzKTtcbiAgICAgICAgICBzUS5pbnB1dCA9IGFuO1xuICAgICAgICAgIHRoaXMuc3ViUXVlc3Rpb25zLnB1c2goc1EpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnZhbHVlTmFtZTEgIT0gbnVsbCAmJiB0aGlzLnZhbHVlTmFtZTEubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5ib29rRmxhZ0FjY2VwdCA9IHRoaXMudmFsdWVOYW1lMS5zcGxpdChcIjtcIik7XG4gICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc3ViUXVlc3Rpb25zKTtcbiAgICB9XG4gICAgdGhpcy5zdHJ1Y3RMb2NhbFN1YlF1ZXN0aW9uKG51bGwpO1xuICAgIC8vIEhBIDAyRkVCMjQgT24gRWRpdCB0byBkaXNwbGF5IHRoZSB2YWx1ZSB1c2lpbmcgdGhpc1xuICAgIGlmKHRoaXMuYWxsSW5wdXRWYWx1ZXMubGVuZ3RoID4gMCl7XG4gICAgICB0aGlzLnN1YlF1ZXN0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBmb3IobGV0IHNpbmdsZUlucHV0IG9mIHRoaXMuYWxsSW5wdXRWYWx1ZXMpe1xuICAgICAgICAgIGlmKGVsZW1lbnQuSWQgPT0gc2luZ2xlSW5wdXQuSWQpe1xuICAgICAgICAgICAgZWxlbWVudC5pbnB1dCA9IHNpbmdsZUlucHV0LmlucHV0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb3B0aW9uQ2hhbmdlKHNlbFZhbHVlKSB7XG4gICAgbGV0IHJhZGlvVHJhY2tpbmdJZDogc3RyaW5nID0gXCJcIjtcbiAgICBmb3IgKHZhciBvcHQgb2YgdGhpcy5xdWVzdGlvbkl0ZW0uUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdvcHRpb25DaGFuZ2UgVHJhY2tpbmdJZCcrb3B0LlRyYWNraW5nX0lEX19jKTtcbiAgICAgIGlmIChvcHQuVmFsdWVfX2MgPT0gc2VsVmFsdWUpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGlmJytvcHQuVHJhY2tpbmdfSURfX2MpXG4gICAgICAgIHJhZGlvVHJhY2tpbmdJZCA9IG9wdC5UcmFja2luZ19JRF9fYztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQocmFkaW9UcmFja2luZ0lkKTtcbiAgICB0aGlzLmNsZWFyRXJyb3IoKTtcbiAgICAvLyAvL2NvbnNvbGUubG9nKCdpbnNpZGUgb3B0aW9uQ2hhbmdlIHVzaW5nICcgKyBzZWxWYWx1ZSk7XG5cbiAgICB0aGlzLmlucFZhbHVlID0gc2VsVmFsdWU7XG4gIH1cblxuICBjbGVhckVycm9yKCkge1xuICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvcikge1xuICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGNsZWFyTG9jYWxTdWJRdWVzRXJyb3IocXVlc0lkKSB7XG4gICAgcXVlc0lkLmVycm9yID0gbnVsbDtcbiAgfVxuXG4gIGlucHV0VmFsaWRhdGUoZSkge1xuICAgIHZhciBrZXlDb2RlID0gZS5rZXlDb2RlIHx8IGUud2hpY2g7XG4gICAgLy8gT25seSBBU0NJSSBjaGFyYWN0ZXIgaW4gdGhhdCByYW5nZSBhbGxvd2VkXG4gICAgdmFyIEFTQ0lJQ29kZSA9IChlLndoaWNoKSA/IGUud2hpY2ggOiBlLmtleUNvZGU7XG4gICAgaWYgKEFTQ0lJQ29kZSA+IDMxICYmIChBU0NJSUNvZGUgPCA0OCB8fCBBU0NJSUNvZGUgPiA1Nykpe1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1lbHNle1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgQ0NPbkNoYW5nZShpbnBWYWx1ZTogc3RyaW5nKSB7XG5cbiAgICAgIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gMikge1xuICAgICAgICB0aGlzLmlucFZhbHVlICs9IFwiIFwiO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaW5wVmFsdWUubGVuZ3RoID09IDcpIHtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSAxMikge1xuICAgICAgICB0aGlzLmlucFZhbHVlICs9IFwiIFwiO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoaW5wVmFsdWUubGVuZ3RoID09IDE3KSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gMjIpIHtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcbiAgICAgIH1cblxuICB9XG5cbiAgaXNOb3RWYWxpZEFjY051bWJlcihzOiBzdHJpbmcpIHtcbiAgICBzID0gcy5yZXBsYWNlKC9cXHMrL2csIFwiXCIpO1xuICAgIHMgPSAnRVMnICsgcztcbiAgICB2YXIgaXNOb3RWYWxpZFN0ciA9IGZhbHNlO1xuICAgIGlmIChzLmxlbmd0aCA9PSAyNCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpIDw9IDEgJiYgL1thLXpBLVpdLy50ZXN0KHMuY2hhckF0KGkpKSkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJWYWxpZCBjaGFyOiBcIiArIHMuY2hhckF0KGkpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpID4gMSAmJiAvWzAtOV0vLnRlc3Qocy5jaGFyQXQoaSkpKSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlZhbGlkIG51bWVyaWM6IFwiICsgcy5jaGFyQXQoaSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlzTm90VmFsaWRTdHIgPSB0cnVlO1xuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJOb3QgYSB2YWxpZCBjaGFyXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzTm90VmFsaWRTdHIgPSB0cnVlO1xuICAgICAgLy9jb25zb2xlLmxvZyhcIk5vdCBhIHZhbGlkIGFjYyBudW1iZXJcIik7XG4gICAgfVxuICAgIHJldHVybiBpc05vdFZhbGlkU3RyO1xuICB9XG5cbiAgY2xlYXJTUUVycm9yKHF1ZXNJZCkge1xuICAgIHZhciBzcUxpc3QgPSB0aGlzLnN1YlF1ZXN0aW9ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uSWQgPT0gcXVlc0lkKTtcbiAgICBmb3IgKHZhciBzcSBvZiBzcUxpc3QpIHtcbiAgICAgIHNxLmVycm9yID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB1cGxvYWRGaWxlKGV2ZW50LHF1ZXM/OmFueSkge1xuICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSB1cGxvYWQnKTtcbiAgICB0aGlzLmNsZWFyRXJyb3IoKTtcbiAgICB0aGlzLmZpbGVUeXBlSW5jb3JyZWN0ID0gZmFsc2U7XG4gICAgdmFyIGxvY2FsID0gdGhpcztcbiAgICBsb2NhbC5hdHRhY2htZW50ID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xuICAgIC8vIFZhbGlkYXRlIHRoZSBmaWxlIGV4dGVuc2lvblxuICAgIC8vY29uc29sZS5sb2cobG9jYWwuYXR0YWNobWVudCk7XG4gICAgbGV0IGZpbGVOYW1lV2l0aFR5cGU6IHN0cmluZyA9XG4gICAgICBsb2NhbC5hdHRhY2htZW50ICYmIGxvY2FsLmF0dGFjaG1lbnQubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLmpwZ1wiKSAmJlxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIucG5nXCIpICYmXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5wZGZcIikgJiZcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLmpwZWdcIikgJiZcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLmhlaWNcIikgJiZcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLmhlaWZcIikgJiZcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLkpQR1wiKSAmJlxuICAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuUE5HXCIpICYmXG4gICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5QREZcIikgJiZcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLkpQRUdcIikgJiZcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLkhFSUNcIikgJiZcbiAgICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLkhFSUZcIilcbiAgICApIHtcbiAgICAgIGxvY2FsLmZpbGVUeXBlSW5jb3JyZWN0ID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gUmV0dXJuIHdoZW4gdGhlIGZpbGUgdHlwZSBpcyBpbmNvcnJlY3RcbiAgICBpZiAobG9jYWwuZmlsZVR5cGVJbmNvcnJlY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IGZpbGVDb250ZW50OiBhbnk7XG4gICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgZmlsZUNvbnRlbnQgPSByZWFkZXIucmVzdWx0O1xuICAgICAgbG9jYWwuZmlsZUV4Y2VlZGVkTGltaXQgPSBsb2NhbC5hdHRhY2htZW50LnNpemUgPiAzMjQyODgwOyAvL1ZhbGlkYXRpbmcgZmlsZSBzaXplXG4gICAgICAvLyBVcGxvYWQgdGhlIGZpbGUgdG8gU2FsZXNmb3JjZSB3aGVuIHRoZSBsaW1pdCBpcyB3aXRoaW4gcmFuZ2VcbiAgICAgIGlmICghbG9jYWwuZmlsZUV4Y2VlZGVkTGltaXQpIHtcbiAgICAgICAgbGV0IGZpbGVXcmFwcGVyID0gbmV3IEF0dGFjaG1lbnRXcmFwcGVyKCk7XG4gICAgICAgIGZpbGVXcmFwcGVyLnBhcmVudElkID0gbG9jYWwuYWJJdGVtLklkO1xuICAgICAgICBmaWxlV3JhcHBlci5maWxlTmFtZSA9IGxvY2FsLmF0dGFjaG1lbnQubmFtZTtcbiAgICAgICAgZmlsZVdyYXBwZXIuZmlsZUNvbnRlbnQgPSBmaWxlQ29udGVudDtcbiAgICAgICAgbG9jYWwuY3JlYXRlQXR0YWNobWVudChmaWxlV3JhcHBlcik7XG4gICAgICAgIHF1ZXMuaW5wdXQgPSBmaWxlV3JhcHBlci5maWxlTmFtZTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuc3Bpbm5lci5zaG93KHRoaXMuc3Bpbm5lck5hbWUpO1xuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGV2ZW50LnRhcmdldC5maWxlc1swXSk7XG4gIH1cblxuICBwcml2YXRlIHN1Y2Nlc3NBdHRhY2htZW50Q3JlYXRlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgbGV0IGNyZWF0ZWRBdHRhY2htZW50OiBBdHRhY2htZW50ID0gbmV3IEF0dGFjaG1lbnQoXG4gICAgICByZXNwb25zZS5hdHRhY2htZW50SWQsXG4gICAgICByZXNwb25zZS5hdHRhY2htZW50TmFtZSxcbiAgICAgIHRoaXMuYXR0YWNobWVudC5sYXN0TW9kaWZpZWREYXRlXG4gICAgKTtcbiAgICB0aGlzLmF0dGFjaG1lbnRzLnB1c2goY3JlYXRlZEF0dGFjaG1lbnQpO1xuICAgIHRoaXMuYXR0YWNobWVudHNNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLklkLCB0aGlzLmF0dGFjaG1lbnRzKTtcbiAgICB0aGlzLnNwaW5uZXIuaGlkZSh0aGlzLnNwaW5uZXJOYW1lKTtcbiAgfTtcblxuICBwcml2YXRlIHN1Y2Nlc3NBdHRhY2htZW50RGVsZXRlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAodGhpcy5hdHRhY2htZW50c1tpXS5hdHRhY2htZW50SWQgPT09IHRoaXMuYXR0YWNobWVudElkKSB7XG4gICAgICAgIHRoaXMuYXR0YWNobWVudHMuc3BsaWNlKGksIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIGZhaWx1cmVBdHRhY2htZW50Q3JlYXRlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZhaWx1cmVBdHRhY2htZW50Q3JlYXRlJyk7XG4gIH07XG5cbiAgcHJpdmF0ZSBmYWlsdXJlQXR0YWNobWVudERlbGV0ZSA9IChyZXNwb25zZSkgPT4ge1xuICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlQXR0YWNobWVudERlbGV0ZScpO1xuICB9O1xuXG4gIGhhbmRsZVN1Ym1pdENsaWNrKCkge1xuICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5TdWJtaXRfVHJhY2tpbmdfSURfX2MpO1xuICAgIHRoaXMudXBkYXRlQW5zd2VyQm9vayh0aGlzLmFiSXRlbS5JZCk7XG4gIH1cblxuICBoYW5kbGVDYW5jZWxDbGljaygpIHtcbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uQ2FuY2VsX1RyYWNraW5nX0lEX19jKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQXR0YWNobWVudCA9IChmaWxlV3JhcHBlcjogYW55KSA9PiB7XG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgIC8vICAgdGhpcy50a24sXG4gICAgICAvLyAgIFtcIkF0dGFjaG1lbnRcIiwgXCJjcmVhdGVcIiwgSlNPTi5zdHJpbmdpZnkoZmlsZVdyYXBwZXIpXSxcbiAgICAgIC8vICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudENyZWF0ZSxcbiAgICAgIC8vICAgdGhpcy5mYWlsdXJlQXR0YWNobWVudENyZWF0ZVxuICAgICAgLy8gKTtcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ0F0dGFjaG1lbnQnLCdjcmVhdGUnLCBKU09OLnN0cmluZ2lmeShmaWxlV3JhcHBlciksSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXG4gICAgICAoZGF0YSk9PntcbiAgICAgICAgY29uc29sZS5sb2coJ3VwZGF0ZWQgc3VjY3Vzc2Z1bGx5Jyk7XG4gICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50Q3JlYXRlKEpTT04ucGFyc2UoZGF0YSkpXG4gICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgICB0aGlzLmZhaWx1cmVBdHRhY2htZW50Q3JlYXRlKGVycm9yKTtcbiAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHF1ZXN0aW9uIGJvb2tzJywgZXJyb3IpO1xuICAgICAgfVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBWRCAxNUZFQjI0IC0gdXNlZCBwcm9jZXNzTmV3IG1ldGhvZCBcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAvLyBWRCAxMkp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAgICBcIk54dENvbnRyb2xsZXIubmV3UHJvY2Vzc1wiLFxuICAgICAgICBbXCJBdHRhY2htZW50XCIsIFwiY3JlYXRlXCIsIEpTT04uc3RyaW5naWZ5KGZpbGVXcmFwcGVyKSxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksJyddLFxuICAgICAgICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50Q3JlYXRlLFxuICAgICAgICB0aGlzLmZhaWx1cmVBdHRhY2htZW50Q3JlYXRlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudElkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmF0dGFjaG1lbnRJZCA9IGF0dGFjaG1lbnRJZDtcbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQoXCJkZWxldGVBdHRhY2htZW50XCIpO1xuICAgIHRoaXMuZGVsZXRlU0ZBdHRhY2htZW50KGF0dGFjaG1lbnRJZCk7XG4gIH1cblxuICBwcml2YXRlIGRlbGV0ZVNGQXR0YWNobWVudCA9IChmaWxlSWQ6IHN0cmluZykgPT4ge1xuICAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgICAvLyB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXG4gICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAgLy8gICBbXCJBdHRhY2htZW50XCIsIFwiZGVsZXRlXCIsIGZpbGVJZF0sXG4gICAgICAvLyAgIHRoaXMuc3VjY2Vzc0F0dGFjaG1lbnREZWxldGUsXG4gICAgICAvLyAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnREZWxldGVcbiAgICAgIC8vICk7XG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSUZyb21Ob2RlKCdBdHRhY2htZW50JywnZGVsZXRlJyxmaWxlSWQgLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxuICAgICAgKGRhdGEpPT57XG4gICAgICAgIGNvbnNvbGUubG9nKCd1cGRhdGVkIHN1Y2N1c3NmdWxseScpO1xuICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudERlbGV0ZShKU09OLnBhcnNlKGRhdGEpKVxuICAgICAgfSwoZXJyb3IpID0+IHtcbiAgICAgICAgdGhpcy5mYWlsdXJlQXR0YWNobWVudERlbGV0ZShlcnJvcik7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVkQgMTVGRUIyNCAtIHVzZWQgcHJvY2Vzc05ldyBtZXRob2QgXG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG5cbiAgICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLm5ld1Byb2Nlc3NcIixcbiAgICAgICAgW1wiQXR0YWNobWVudFwiLCBcImRlbGV0ZVwiLCBmaWxlSWQsSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLCcnXSxcbiAgICAgICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudERlbGV0ZSxcbiAgICAgICAgdGhpcy5mYWlsdXJlQXR0YWNobWVudERlbGV0ZVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBnZXRGaWxlTmFtZShmaWxlTmFtZXdpdGhJZGFuZFR5cGUpIHtcbiAgICAvL3RydW5jYXRlIGZpbGUgcGF0aFxuICAgIHZhciBmaWxlTmFtZVdpdGhUeXBlID0gZmlsZU5hbWV3aXRoSWRhbmRUeXBlLnN1YnN0cihcbiAgICAgIGZpbGVOYW1ld2l0aElkYW5kVHlwZS5pbmRleE9mKFwiOjo6OlwiKSArIDRcbiAgICApO1xuICAgIHJldHVybiBmaWxlTmFtZVdpdGhUeXBlOyAvL2ZpbGVOYW1lV2l0aFR5cGUucmVwbGFjZSgvXiguKihcXC98XFxcXCkpKC4rKSQvLCAnJDMnKTtcbiAgfVxuICBmaWxlVUkoKSB7XG4gICAgaWYgKHRoaXMuYXR0YWNobWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgfVxuICB9XG5cbiAgLy9VcGRhdGUgZnVuY3Rpb24gZm9yIGNhdGVnb3JpemF0aW9uXG4gIC8vIHN0ZXBwZXJDYXRlZygpIHtcbiAgLy8gICB0aGlzLmZpcnN0Rm9ybUdyb3VwID0gdGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAvLyAgICAgZmlyc3RDdHJsOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdXG4gIC8vICAgfSk7XG4gIC8vICAgdGhpcy5zZWNvbmRGb3JtR3JvdXAgPSB0aGlzLl9mb3JtQnVpbGRlci5ncm91cCh7XG4gIC8vICAgICBzZWNvbmRDdHJsOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdXG4gIC8vICAgfSk7XG5cbiAgLy8gfVxuXG4gIC8vIFVwZGF0ZSBGdW5jdGlvbiBmb3IgdGhlIFByb2dyZXNzIEJhclxuICB1cGRhdGVQcm9ncmVzcygpIHtcbiAgICBpZiAodGhpcy5xYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jID09PSB0cnVlKSB7XG4gICAgICBsZXQgaiA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBvc3NpYmlsaXRpZXMudG90YWw7IGkrKykge1xuICAgICAgICB2YXIgcGF0aHBvc3MgPSBPYmplY3QudmFsdWVzKHRoaXMucG9zc2liaWxpdGllcy5wYXRoc1tpXS5xdWVzdGlvbnMpO1xuICAgICAgICBpZiAocGF0aHBvc3NbdGhpcy5wYXRocXVlc3Rpb25dID09PSB0aGlzLmN1cnJlbnROYW1lKSB7XG4gICAgICAgICAgai5wdXNoKGkpO1xuICAgICAgICAgIHRoaXMuY2hlY2sgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuY2hlY2sgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGoubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHRoaXMuY291bnQgPSBqWzBdO1xuICAgICAgfVxuICAgICAgaWYgKGoubGVuZ3RoID4gMSkge1xuICAgICAgICB2YXIgd2lkdGggPVxuICAgICAgICAgIDkwICogKHRoaXMucXVlc3Rpb25TdGFjay5sZW5ndGggLyB0aGlzLnBvc3NpYmlsaXRpZXMubWF4UXVlc3Rpb25zKTtcbiAgICAgICAgdGhpcy5wcm9ncmVzc1N0eWxlID0gTWF0aC5yb3VuZCh3aWR0aCkgKyBcIiVcIjtcbiAgICAgIH0gZWxzZSBpZiAoai5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdmFyIHdpZHRoID1cbiAgICAgICAgICA5MCAqXG4gICAgICAgICAgKHRoaXMucXVlc3Rpb25TdGFjay5sZW5ndGggL1xuICAgICAgICAgICAgdGhpcy5wb3NzaWJpbGl0aWVzLnBhdGhzW3RoaXMuY291bnRdLmNvdW50KTtcbiAgICAgICAgdGhpcy5wcm9ncmVzc1N0eWxlID0gTWF0aC5yb3VuZCh3aWR0aCkgKyBcIiVcIjtcbiAgICAgIH1cbiAgICAgIHRoaXMucGVyY2VudCA9ICtNYXRoLnJvdW5kKHdpZHRoKTtcbiAgICB9XG4gIH1cblxuICB0b3duTmFtZShhcmVhKSB7XG4gICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gYXJlYS50b3duO1xuICAgIC8vY29uc29sZS5sb2coJ3RoaXMgdmFsdWU9Jyt0aGlzLnNlbGVjdGVkVmFsdWUpXG4gICAgdGhpcy50ZW1wb0FkZHJlc3MgPSBbXTtcbiAgfVxuXG4gIGdldFRvd25Mb2NhbCgpIHtcbiAgICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgZm9yICh2YXIgdmFsIG9mIHRoaXMubG9jYWxhZGRyZXNzKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB2YWwudG93bi5zdWJzdHJpbmcoMCwgdGhpcy5zZWxlY3RlZFZhbHVlLmxlbmd0aCkgPT0gdGhpcy5zZWxlY3RlZFZhbHVlXG4gICAgICAgICkge1xuICAgICAgICAgIC8vY29uc29sZS5sb2codmFsLmNvdW50cnkpXG4gICAgICAgICAgdGhpcy50ZW1wb0FkZHJlc3MucHVzaCh2YWwpO1xuICAgICAgICAgIC8vY29uc29sZS5sb2coJ3RlbXBvQWRkcmVzcycrdGhpcy50ZW1wb0FkZHJlc3MpXG4gICAgICAgICAgaWYgKHRoaXMudGVtcG9BZGRyZXNzLmxlbmd0aCA9PSA2KSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWxlY3RMaXN0XCIpLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgdGhpcy5zZXRTZWFyY2hMaXN0V2lkdGgoKTtcbiAgfVxuXG4gIGNsZWFyTGlzdCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudGVtcG9BZGRyZXNzID0gW107XG4gICAgfSwgNTAwKTtcbiAgfVxuXG4gIHNldFNlYXJjaExpc3RXaWR0aCgpIHtcbiAgICAvL3RvIHJlc2l6ZSBzZWFyY2ggbGlzdCBiYXNlZCBvbiB0aGUgc2NyZWVuIHNpemVcbiAgICBjb25zdCBzZWFyY2hCb3hXaWR0aCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImF1dG9jb21wbGV0ZS1pbnB1dFwiKS5vZmZzZXRXaWR0aDtcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlbGVjdExpc3RcIikuc3R5bGUud2lkdGggPSBzZWFyY2hCb3hXaWR0aCArIFwicHhcIjtcbiAgfVxuXG4gICAgZ2V0Q29kZSgpe1xuICAgICAgdGhpcy50ZW1wb0FkZHJlc3MgPSBbXTtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkUG9zdGFsY29kZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGZvciAodmFyIHZhbCBvZiB0aGlzLmFsbEFkZHJlc3MpIHtcbiAgICAgICAgICBpZiAodmFsLnppcENvZGUuc3Vic3RyaW5nKDAsIHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlLmxlbmd0aCkgPT0gdGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2codmFsLmNvdW50cnkpXG4gICAgICAgICAgICB0aGlzLnRlbXBvQWRkcmVzcy5wdXNoKHZhbCk7XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCd0ZW1wb0FkZHJlc3MnK3RoaXMudGVtcG9BZGRyZXNzKVxuICAgICAgICAgICAgaWYgKHRoaXMudGVtcG9BZGRyZXNzLmxlbmd0aCA9PSA2KSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWxlY3RMaXN0XCIpLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICB0aGlzLnNldFNlYXJjaExpc3RXaWR0aCgpO1xuICAgIH1cbiAgICBnZXRQb3N0YWxjb2RlKHZhbHVlKXtcbiAgICAgdGhpcy5wbGFjZXM9W107XG4gICAgIHRoaXMucHJvdmluY2U9W107XG4gICAgICB2YXIgcHJvdmluY2U7XG4gICAgICB2YXIgdG93bjtcbiAgICAgIHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlID0gdmFsdWUuemlwQ29kZTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlLmNvdW50cnk7XG4gICAgICB0aGlzLnRlbXBvQWRkcmVzcz1bXTtcblxuIFxuICAgICAgZm9yKHZhciB2YWwgb2YgdGhpcy5sb2NhbGFkZHJlc3Mpe1xuICAgICAgICBpZih0aGlzLnNlbGVjdGVkUG9zdGFsY29kZSA9PSB2YWwuemlwQ29kZSApe1xuICAgICAgICAgIHRoaXMucGxhY2VzLnB1c2godmFsKTtcbiAgICAgICAgICB0aGlzLnByb3ZpbmNlLnB1c2godmFsKTtcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWwuY291bnRyeTtcbiAgICAgICAgICBwcm92aW5jZSA9IHZhbC5wcm92aW5jZVxuICAgICAgICAgIHRvd24gPSB2YWwudG93bjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYodGhpcy5wbGFjZXMubGVuZ3RoID09IDEpe1xuICAgICAgICBcbiAgICAgICAgdGhpcy5zZWxlY3RlZFByb3ZpbmNlID1wcm92aW5jZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENpdHkgPSB0b3duO1xuICAgICAgfWVsc2UgaWYodGhpcy5wbGFjZXMubGVuZ3RoID4xIHx8IHRoaXMucGxhY2VzLmxlbmd0aCA9PTApe1xuICAgICAgICBcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2l0eSA9Jyc7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFByb3ZpbmNlPScnO1xuICAgICAgfVxuICAgIH1cbiAgICBjbG9zZURyb3Bkb3duKCkge1xuICAgICAgaWYodGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUubGVuZ3RoID09IDUpe1xuICAgICAgICB0aGlzLmdldFBvc3RhbGNvZGUoe3ppcENvZGU6dGhpcy5zZWxlY3RlZFBvc3RhbGNvZGV9KTtcbiAgICAgIH1cblxuICAgc2V0VGltZW91dCgoKT0+IHtcbiAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWxlY3RMaXN0Jykuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgIH0sIDUwMCk7XG4gICB9XG5cblxuICAgLy9QbHVzIGJ1dHRvbiBpbXBsZW1lbnRhdGlvbi5cbiAgIHN0cnVjdExvY2FsU3ViUXVlc3Rpb24ocXVlczogTG9jYWxRdWVzdGlvbil7XG4gICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBzdHJ1Y3RMb2NhbFN1YlF1ZXN0aW9uJyk7XG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5zdWJRdWVzdGlvbnMubGVuZ3RoOyBpKyspe1xuICAgICAgICB2YXIgbG9jYWxTdWJRdWVzdGlvbiA9IG5ldyBMb2NhbFF1ZXN0aW9uKCk7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5JZCA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLklkO1xuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uTmFtZSA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLk5hbWU7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5RdWVzdGlvbl9fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLlF1ZXN0aW9uX19jO1xuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uUXVlc3Rpb25fVGV4dF9fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLlF1ZXN0aW9uX1RleHRfX2M7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5UeXBlX19jID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uVHlwZV9fYztcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLlRpdGxlX19jID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uVGl0bGVfX2M7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5TdWJUaXRsZV9fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLlN1YlRpdGxlX19jO1xuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uSXNfT3B0aW9uYWxfX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5Jc19PcHRpb25hbF9fYztcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLkVycm9yX01lc3NhZ2VfX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5FcnJvcl9NZXNzYWdlX19jO1xuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uTmV4dF9RdWVzdGlvbl9fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLk5leHRfUXVlc3Rpb25fX2M7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5Hcm91cF9fYyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLkdyb3VwX19jO1xuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uUXVlc3Rpb25fTm9fX2MgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5RdWVzdGlvbl9Ob19fYztcbiAgICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLkFsbG93ZWRfRmlsZV9FeHRlbnNpb25zX19jID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uQWxsb3dlZF9GaWxlX0V4dGVuc2lvbnNfX2M7XG4gICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi51bmlxdWVTdWJRSWQgPSAnJyt0aGlzLnN1YlF1ZXN0aW9uc1tpXS5JZCArIGk7IFxuICAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uaW5wdXQgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5pbnB1dDtcbiAgICAgICAgICB0aGlzLmxvY2FsU3ViUXVlc3Rpb25zLnB1c2gobG9jYWxTdWJRdWVzdGlvbik7XG4gICAgICB9XG4gIC8vIGNvbnNvbGUubG9nKCdmaW5hbCBsb2NhbCBzdWIgcXVlc3Rpb25zJyk7XG4gIC8vIGNvbnNvbGUubG9nKHRoaXMubG9jYWxTdWJRdWVzdGlvbnMpO1xuICAvLyBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbS5JZCk7XG4gIHRoaXMubG9jYWxTdWJRTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCx0aGlzLmxvY2FsU3ViUXVlc3Rpb25zKTtcbiAgdGhpcy5sb2NhbFN1YlF1ZXN0aW9ucyA9IFtdO1xuICAvLyBjb25zb2xlLmxvZygnZmluYWwga2V5IGxvY2FsU3ViUU1hcCBtYXAnKTtcbiAgLy8gY29uc29sZS5sb2codGhpcy5sb2NhbFN1YlFNYXApO1xuICB9XG5cbiAgYWRkSW5wdXRCb3gocXVlc3Rpb246IExvY2FsUXVlc3Rpb24sIGluZGV4OiBudW1iZXIpe1xuICAgIHZhciBhcnJhID0gdGhpcy5sb2NhbFN1YlFNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLklkKTtcbiAgICB2YXIgcUluZGV4ID0gYXJyYS5pbmRleE9mKHF1ZXN0aW9uKTtcbiAgICB2YXIgcXVlczogTG9jYWxRdWVzdGlvbiA9IG5ldyBMb2NhbFF1ZXN0aW9uKCk7XG4gICAgT2JqZWN0LmFzc2lnbihxdWVzLCBxdWVzdGlvbik7XG4gICAgLy9jb25zb2xlLmxvZygocXVlcy51bmlxdWVTdWJRSWQpLnN1YnN0cmluZygxOCwgKHF1ZXMudW5pcXVlU3ViUUlkKS5sZW5ndGgpKzEpO1xuICAgIGlmKHRoaXMua2V5SW5kZXggPT0gaW5kZXgpe1xuICAgICAgcXVlcy51bmlxdWVTdWJRSWQgPSBxdWVzLklkICsgKFN0cmluZyhpbmRleCsxKSk7XG4gICAgICB0aGlzLmtleUluZGV4Kys7XG4gICAgfWVsc2V7XG4gICAgICB0aGlzLmtleUluZGV4Kys7XG4gICAgICBxdWVzLnVuaXF1ZVN1YlFJZCA9IHF1ZXMuSWQgKyAoU3RyaW5nKHRoaXMua2V5SW5kZXgpKTtcbiAgICB9XG4gICAgcXVlcy5pbnB1dCA9ICcnO1xuICAgIGFycmEuc3BsaWNlKHFJbmRleCsxLCAwLCBxdWVzKTtcblxuICAgIHRoaXMubG9jYWxTdWJRTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCxhcnJhKTtcbiAgICAvL2NvbnNvbGUubG9nKHRoaXMubG9jYWxTdWJRTWFwKTtcbiAgfVxuXG4gIHJlbW92ZUFkZHJlc3MocXVlc1VuaXF1ZUlkOiBzdHJpbmcsIHFOYW1lOiBzdHJpbmcpIHtcbiAgICAvL2NvbnNvbGUubG9nKHF1ZXNVbmlxdWVJZClcbiAgICB2YXIgdmFsID0gdGhpcy5sb2NhbFN1YlFNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLklkKTtcbiAgICB2YXIga2V5aW5kZXggPSAwO1xuXG4gICAgZm9yKGxldCBpPTA7IGk8dmFsLmxlbmd0aDsgaSsrKXtcbiAgICAgIGlmKHZhbFtpXS5OYW1lID09IHFOYW1lKXtcbiAgICAgICAga2V5aW5kZXgrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZih0aGlzLmxvY2FsU3ViUU1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uSWQpICYmIGtleWluZGV4ID4xKXtcbiAgICAgIHZhciByZW9yZGVyID0gdmFsLmZpbHRlcigoaXRlbSkgPT4gaXRlbS51bmlxdWVTdWJRSWQgIT09IHF1ZXNVbmlxdWVJZClcbiAgICAgIHRoaXMubG9jYWxTdWJRTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5JZCxyZW9yZGVyKTtcbiAgICAgIGtleWluZGV4LS07XG4gICAgfVxuICB9XG5cbiAgZ2V0TG9jYWxTdWJRdWVzdGlvbnMoaWQ6IFN0cmluZyl7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxTdWJRTWFwLmdldChpZCk7XG4gIH1cblxuICAvL1NpbmdsZSBBZGQgYnV0dG9uIGZ1bmN0aW9uYWxpdHkgZm9yIExpc3QgdHlwZVxuQWRkKHF1ZXN0aW9uOiBMb2NhbFF1ZXN0aW9uKXtcbiAgICB0aGlzLmFkZEZsYWcgPSAgZmFsc2U7XG4gICAgdmFyIGFycmEgPSB0aGlzLmxvY2FsU3ViUU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uSWQpO1xuICAgIHZhciBpbmRleCAgPSBhcnJhLmxlbmd0aDtcbiAgICB2YXIgYSA9IGFycmEuc2xpY2UoLTEpLnBvcCgpO1xuICAgIHRoaXMuaW5kZXhDb3VudCAgPSBhLlF1ZXN0aW9uX05vX19jO1xuICAgIFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbmRleENvdW50IDsgaSsrKSB7XG4gICAgICB2YXIgcXVlczogTG9jYWxRdWVzdGlvbiA9IG5ldyBMb2NhbFF1ZXN0aW9uKCk7XG4gICAgICBPYmplY3QuYXNzaWduKHF1ZXMsIHF1ZXN0aW9uW2ldKTtcbiAgICAgIHRoaXMua2V5SW5kZXgrKztcbiAgICAgIHF1ZXMudW5pcXVlU3ViUUlkID0gcXVlcy5JZCArIChTdHJpbmcodGhpcy5rZXlJbmRleCkpO1xuICAgICAgcXVlcy5pbnB1dCA9ICcnO1xuICAgICAgYXJyYS5zcGxpY2UoaW5kZXgrKHRoaXMuaW5kZXhDb3VudC0xKSwgMCwgcXVlcyk7XG4gICAgdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLklkLGFycmEpO1xuICAgIH0gIFxuICAgIHRoaXMuYWRkRmxhZyA9IHRydWU7XG4gIH1cbiAgXG4gIGhhbmRsZUxvY2F0aW9uU2VsZWN0ZWQobG9jYXRpb246IGFueSxxdWVzOmFueSkge1xuICAgIHF1ZXMuaW5wdXQgPSBsb2NhdGlvbjtcbiAgfVxuXG4gIHNlbGVjdGVkSW5wdXQoaW5wdXQ6YW55ICxxdWVzOmFueSl7IFxuICAgIHF1ZXMuaW5wdXQgPSBpbnB1dDtcbiAgfVxuXG4gIGhhbmRsZVRleHRhcmVhVmFsdWVDaGFuZ2UodmFsdWUgOnN0cmluZyl7XG4gICAgY29uc29sZS5sb2coJ1NlbGVjdGVkIHRleHQtYXJlYSB0ZXh0OicsIHZhbHVlKTtcbiAgfVxuICBnZXREYXRhKGRhdGE6YW55KXtcbiAgIGNvbnNvbGUubG9nKCd0YWJsZSBkYXRhJyxkYXRhKTtcbiAgfVxuXG4gIGRlcGVuZGVudENoYW5nZSh2YWx1ZTphbnkpe1xuICB0aGlzLm5leHRWYWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgZGlzcGxheURhdGUoZGF0ZVNlbGVjdGVkOiBhbnkscXVlczphbnkpe1xuICAgIC8vIFBhcnNlIHRoZSBkYXRlIHN0cmluZyB1c2luZyBtb21lbnQgYW5kIGFzc2lnbiBpdCB0byB0aGlzLnNlbGVjdGVkRGF0ZVxuICAgIHF1ZXMuaW5wdXQgPSBtb21lbnQoZGF0ZVNlbGVjdGVkLnZhbHVlICwgJ1lZWVktTU0tREQgSEg6bW06c3MnKS5mb3JtYXQoJ1lZWVktTU0tREQgSEg6bW06c3MnKS50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0S2V5KGl0ZW06IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGl0ZW0pWzBdO1xuICB9XG4gIFxuICBnZXRWYWx1ZShpdGVtOiBhbnkpOiBhbnkge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKGl0ZW0pWzBdO1xuICB9XG59IiwiPCEtLSBTcGlubmVyIC0tPlxuPG5neC1zcGlubmVyIFtuYW1lXT1cInNwaW5uZXJOYW1lXCIgW3R5cGVdPVwic3Bpbm5lclR5cGVcIj48L25neC1zcGlubmVyPlxuPCEtLSBjdXN0b20gbG9hZGVyIC0tPlxuPGFwcC1sb2FkZXI+PC9hcHAtbG9hZGVyPlxuPCEtLSBCYWNrIFByb2Nlc3NpbmcgLS0+XG48IS0tIDxkaXYgKm5nSWY9XCJiYWNraWNvbiA9PSBmYWxzZVwiID5cbiAgPGRpdiBjbGFzcz1cImJhY2tpY29uXCIgPlxuICAgIDxidXR0b24gKGNsaWNrKT1cImhhbmRsZUJhY2tDbGljaygpXCIgW2NsYXNzXT1cIiBhYkl0ZW0/LlN0YXR1c19fYyA9PSAnQ29tcGxldGVkJyA/ICdzdW1tYXJ5LXZvbHZlcic6J2FwcC1iYWNrMSdcIj5cbiAgICA8aW1nIGNsYXNzPVwiaWNvbi1hcnJvdy1iYWNrXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWFycm93LWJhY2sucG5nXCIgYWx0PVwiU2Nyb2xsIGRvd25cIj4ge3sgcWJJdGVtPy5CYWNrX19jIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+IC0tPlxuXG48IS0tIFF1ZXN0aW9uIEhhbmxkaW5nIC0tPlxuPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbVwiIFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsX19jID8gJ3F1ZXN0aW9uZGl2MScgOiAncXVlc3Rpb25kaXYxIHBhZGQtYm90dG9tJ1wiPlxuICA8IS0tIFByb2dyZXNzIEJhciAmIFRpdGxlIC0tPlxuICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLlRpdGxlX19jXCI+XG4gICAgPGgxPnt7IHF1ZXN0aW9uSXRlbT8uVGl0bGVfX2MgfX08L2gxPlxuICAgIDxkaXY+e3sgcXVlc3Rpb25JdGVtPy5TdWJUaXRsZV9fYyB9fTwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFByb2dyZXNzICYgR3JvdXBpbmcgLS0+XG4gIDxkaXY+XG4gICAgPCEtLSBQaWUgQ2hhcnQgUHJvZ3Jlc3MgLS0+XG4gICAgPGRpdiBbbmdDbGFzc109XCJ7IGJnQ29sb3I6IHFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jIH1cIj5cbiAgICAgIDxkaXYgaWQ9XCJueHQtcHJvZ3Jlc3NcIiAqbmdJZj1cInFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jXCI+XG4gICAgICAgIDxjaXJjbGUtcHJvZ3Jlc3MgY2xhc3M9XCJ0aXRsZWJhclwiIFtwZXJjZW50XT1cInRoaXMucGVyY2VudFwiIFtyYWRpdXNdPVwiNDBcIiBbc3BhY2VdPVwiLTRcIiBbb3V0ZXJTdHJva2VXaWR0aF09XCI0XCJcbiAgICAgICAgW2lubmVyU3Ryb2tlV2lkdGhdPVwiNFwiIFtvdXRlclN0cm9rZUNvbG9yXT1cIicjZTBiMWIwJ1wiIFtpbm5lclN0cm9rZUNvbG9yXT1cIicjZTdlOGVhJ1wiIFthbmltYXRpb25dPVwidHJ1ZVwiIFtiYWNrZ3JvdW5kUGFkZGluZ109IFwiMFwiXG4gICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPSBcIicjZGQyZTEzJ1wiIFtiYWNrZ3JvdW5kR3JhZGllbnRTdG9wQ29sb3JdPVwiJyNmOWJmYmQnXCIgW3RpdGxlQ29sb3JdPVwiJyNmM2VkZWQnXCIgXG4gICAgICAgIGNsYXNzPVwibmctc3Rhci1pbnNlcnRlZFwiIFt0aXRsZV09XCJ0aGlzLnBlcmNlbnQrJyUnXCIgW3Nob3dTdWJ0aXRsZV09XCJmYWxzZVwiIFtzaG93QmFja2dyb3VuZF09XCJ0cnVlXCIgW2FuaW1hdGlvbkR1cmF0aW9uXT1cIjMwMFwiXG4gICAgICAgIFtzdGFydEZyb21aZXJvXT1cImZhbHNlXCIgW3Jlc3BvbnNpdmVdPVwiZmFsc2VcIiA+XG4gICAgICAgIDwvY2lyY2xlLXByb2dyZXNzPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFNob3cgdGhlIEdyb3VwL01vZHVsZSByZWxhdGVkIHRvIHRoZSBQcm9ncmVzcyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLkdyb3VwX19jICYmIHFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcIlxuICAgICAgICBbbmdDbGFzc109XCJ7IHF1ZXN0aW9uYWxpZ246ICFxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibnh0LWxhcmdlVGl0bGVcIj5cbiAgICAgICAgPGgzIGNsYXNzPVwibXl0LWZvbnQ2IG15dC10ZXh0M1wiPlxuICAgICAgICAgIHt7IHF1ZXN0aW9uSXRlbT8uR3JvdXBfX2MgfX1cbiAgICAgICAgPC9oMz5cbiAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5TdWJfVGV4dF9fYyAhPSAnwr9FbiBxdcOpIHBhw61zIG9jdXJyacOzPydcIiBjbGFzcz1cIm15dC1mb250NSBteXQtdGV4dDFcIj57e3F1ZXN0aW9uSXRlbT8uU3ViX1RleHRfX2N9fTwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLlN1Yl9UZXh0X19jID09PSAnwr9FbiBxdcOpIHBhw61zIG9jdXJyacOzPydcIiBjbGFzcz1cIm15dC1mb250MTAgbXl0LXRleHQyXCI+e3txdWVzdGlvbkl0ZW0/LlN1Yl9UZXh0X19jfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFF1ZXN0aW9uIEhhbmRsaW5nIC0tPlxuICA8ZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uUXVlc3Rpb25fVGV4dF9fY1wiPlxuICAgICAgPHAgY2xhc3M9XCJueHQtbGFiZWxcIiBbaW5uZXJIVE1MXT1cImdldFRleHQocXVlc3Rpb25JdGVtPy5RdWVzdGlvbl9UZXh0X19jKVwiPlxuICAgICAgICB7e3F1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fY319XG4gICAgICA8L3A+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBUaXRsZSAtLT5cbiAgICA8IS0tIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uSXNfVGl0bGVfX2NcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uVHlwZV9fYyAhPSAnQm9vaycgJiYgcXVlc3Rpb25JdGVtLlF1ZXN0aW9uX05vX19jIT0nNicgJiYgcXVlc3Rpb25JdGVtLlF1ZXN0aW9uX05vX19jIT0nOSdcIj4gXG4gICAgICAgIDxoMyBjbGFzcz1cInF1ZXN0aW9uYWxpZ24gIG15dC1mb250MyBteXQtYWxpZ24gbXl0LXRleHQ0XCIgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fYylcIj5cbiAgICAgICAgICB7e3F1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fY319XG4gICAgICAgIDwvaDM+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG4gICAgPCEtLSBIQSAzMS1KQU4tMjQgUmVtb3ZlZCB0aGUgdW53YW50ZWQgc3R5bGluZyBjbGFzcyAtLT5cbiAgICA8IS0tIDxkaXYgKm5nSWY9XCIhcXVlc3Rpb25JdGVtLklzX1RpdGxlX19jXCIgW2NsYXNzXT1cInFiSXRlbS5pc1NoZW5nZWxfX2MgPyAnaGVhZGVyLXN0eWxlJyA6ICdxdWVzdGlvbi1mLXNpemUnXCI+XG4gICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2MpXCIgPlxuICAgICAgICB7eyBxdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2MgfX1cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cblxuICAgIDwhLS0gVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCB3aXRoIEN1c3RvbSBTdHlsaW5nIC0gTVIgLSAxMUFVRzIzIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5UeXBlX19jID09ICdCb29rJ1wiPlxuICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5RdWVzdGlvbl9Ob19fYz09JzYnXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cIm15dC0zMjFcIiBbaW5uZXJIVE1MXT1cImdldFRleHQocXVlc3Rpb25JdGVtPy5RdWVzdGlvbl9UZXh0X19jKVwiPlxuICAgICAgICAgIHt7IHF1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fYyB9fVxuICAgICAgICA8L2gzPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuICAgIFxuICAgIDwhLS0gVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCB3aXRoIEN1c3RvbSBTdHlsaW5nIC0gTVIgLSAxMUFVRzIzIC0tPlxuICAgIDwhLS0gPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5UeXBlX19jID09ICdGaWxlJyBcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uUXVlc3Rpb25fTm9fX2M9PSc5J1wiPlxuICAgICAgICA8aDMgY2xhc3M9XCJteXQtMzQ1XCIgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fYylcIj5cbiAgICAgICAgICB7e3F1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fY319XG4gICAgICAgIDwvaDM+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQWRkaXRpb25hbCBJbmZvIC0tPlxuICA8IS0tIFRoZSBiZWxvdyBjb2RlIGNhbiBiZSB3cml0dGVuIGVmZmVjdGl2ZWx5IG5lc3RlZCBuZ0lmIGZvciBSaWNoIFRleHQgJiBPdGhlciBvbncgZm9yIFByb2dyZXNzIEJhciAtLT5cbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5BZGRpdGlvbmFsX1JpY2hfX2MgJiYgcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiID5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cIm54dC1hZGRpdGlvbmFsIFwiIFtpbm5lckhUTUxdPVwiaW5uZXJodG1sXCI+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLkFkZGl0aW9uYWxfUmljaF9fYyAmJiAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiPlxuICAgIDxkaXYgY2xhc3M9XCJpbmZvLWFsZXJ0IHF1ZXMtYWxlcnQxXCI+XG4gICAgICA8aSBjbGFzcz1cImZhIGZhLWluZm8gZmEtM3ggaXBvc2l0aW9uIGljb2xvclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbmZvZGl2XCIgW2lubmVySFRNTF09XCJpbm5lcmh0bWxcIj48L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBEcm9wZG93bi0tPlxuICA8ZGl2ICpuZ0lmPVwiZHJvcGRvd25GbGFnXCIgPlxuICAgIDxkaXYgY2xhc3M9XCJueHQtZGlzLWZsZXhcIj5cbiAgICAgIDxzZWxlY3QgY2xhc3M9XCJueHRkcm9wZG93blwiXG4gICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAnZHQtbGluZSBueHQtbXl0LWFsaWduMyBueHQtbXl0LWFsaWduMiBkcERvd24gbnh0LWRyb3Bib3ggZG93bjEgbXl0LWRyb3Bib3ggbXl0LWJvcmRlci1yIG15dC1mb250MSc6IHFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jLFxuICAgICAgICAgICdjdXN0b20tc2VsZWN0JzogIXFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jXG4gICAgICAgIH1cIiBjbGFzcz1cIm1yLXNtLTIgZGQtaGVpZ2h0IG54dC1kcm9wYm94IFwiICBpZD1cImRyb3Bkb3duXCIgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIChjaGFuZ2UpPVwiY2xlYXJFcnJvcigpXCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3tcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbT8uZXJyb3IgPyAncmVkJyA6IGlucFZhbHVlPy5sZW5ndGggPiAwID8gJyNmZmYnIDogJydcbiAgICAgICAgfX1cIiBzdHlsZS5jb2xvcj1cInt7IHF1ZXN0aW9uSXRlbT8uZXJyb3IgPyAncmVkJyA6ICcnIH19XCI+XG4gICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdCBvZiBxdWVzdGlvbkl0ZW0uUXVlc3Rpb25fT3B0aW9uc19fci5yZWNvcmRzXCIgY2xhc3M9XCJvcHRpb25cIiB2YWx1ZT1cInt7IG9wdC5WYWx1ZV9fYyB9fVwiPlxuICAgICAgICAgIHt7IG9wdC5WYWx1ZV9fYyB9fVxuICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIi5cIiBkaXNhYmxlZCBoaWRkZW4+e3sncGxlYXNlTWFrZUNob2ljZScgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19PC9vcHRpb24+XG4gICAgICA8L3NlbGVjdD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLVZEIFJhZGlvIHVwZGF0ZSAtLT5cbiAgPGRpdiAqbmdJZj1cInJhZGlvRmxhZyB8fCBkYXRhRmxhZ1wiIGNsYXNzPVwiXCI+XG4gICAgPGRpdiBjbGFzcz1cIm54dC1jdXN0b20tcmFkaW8tY29udGFpbmVyXCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBvcHQgb2YgcXVlc3Rpb25JdGVtLlF1ZXN0aW9uX09wdGlvbnNfX3IucmVjb3Jkc1wiIFxuICAgICAgW2NsYXNzXT1cIiB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA/ICdueHQtY3VzdG9tLXJhZGlvLW9wdGlvbiBpbnZhbGlkJyA6ICdueHQtY3VzdG9tLXJhZGlvLW9wdGlvbidcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICBbaWRdPVwib3B0LlZhbHVlX19jXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCJcbiAgICAgICAgICBuYW1lPVwiaW5wVmFsdWVcIlxuICAgICAgICAgIFt2YWx1ZV09XCJvcHQuVmFsdWVfX2NcIlxuICAgICAgICAgIChjaGFuZ2UpPVwib3B0aW9uQ2hhbmdlKG9wdC5WYWx1ZV9fYylcIlxuICAgICAgICAvPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJueHQtcmFkaW8tbGFiZWxcIiBbZm9yXT1cIm9wdC5WYWx1ZV9fY1wiPiB7eyBvcHQuVmFsdWVfX2MgfX08L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgIDxzcGFuICpuZ0lmPVwidGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3JcIiBjbGFzcz1cIm54dC1lcnJvci1tc2dcIj4ge3sgcXVlc3Rpb25JdGVtPy5FcnJvcl9NZXNzYWdlX19jIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwibnh0LWRpcy1mbGV4XCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBvcHQgb2YgcXVlc3Rpb25JdGVtLlF1ZXN0aW9uX09wdGlvbnNfX3IucmVjb3Jkc1wiIGNsYXNzPVwicmFkaW8gbnh0LXJhZGlvT3B0aW9uXCI+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cIm54dC1yYWRpb2NvbnRhaW5lciBjb250YWluZXIgbXl0LWZvbnQ0XCI+XG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIFtpZF09XCJvcHQuSWRcIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgbmFtZT1cImlucFZhbHVlXCIgW3ZhbHVlXT1cIm9wdC5WYWx1ZV9fY1wiXG4gICAgICAgICAgICAoY2hhbmdlKT1cIm9wdGlvbkNoYW5nZShvcHQuVmFsdWVfX2MpXCIgLz5cbiAgICAgICAgICB7eyBvcHQuVmFsdWVfX2MgfX1cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PiAtLT5cbiAgPC9kaXY+ICBcbiAgPCEtLSBDaGVja2JveCAtLT5cbiAgPGRpdiAqbmdJZj1cImNoZWNrYm94RmxhZ1wiIGNsYXNzPVwiXCI+XG4gICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbT8uZXJyb3JcIiBjbGFzcz1cImNvbmQtZGl2MlwiPlxuICAgICAge3sgcXVlc3Rpb25JdGVtPy5FcnJvcl9NZXNzYWdlX19jIH19XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm54dC1jaGVja2JveC1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2Ygb3B0aW9uVmFsdWVzXCIgY2xhc3M9XCJueHQtY2hlY2tib3gtd3JhcHBlclwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJueHQtY29udGFpbmVyMVwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnh0LWNoZWNrYm94XCIgW2lkXT1cIml0ZW0uSWRcIiBbKG5nTW9kZWwpXT1cIml0ZW0uY2hlY2tlZFwiIChjbGljayk9XCJjbGVhckVycm9yKClcIiAvPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibnh0LWNoZWNrYm94LWxhYmVsXCI+e3sgaXRlbS5WYWx1ZV9fYyB9fTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFRleHQgLS0+XG4gIDxkaXYgKm5nSWY9XCJ0ZXh0RmxhZ1wiPlxuICAgIDwhLS0gSEEgMzEtSkFOLTI0IFRvIHJlZHVjZSB0aGUgbWFyZ2luIC0tPlxuICAgIDxkaXYgW2NsYXNzXT1cIidjb2wtbWQtJyArIHF1ZXN0aW9uSXRlbT8uU2l6ZV9fYyArICcgcGFkZGluZ25vbmUnXCI+XG4gICAgICA8aW5wdXQgY2xhc3M9XCJueHQtaW5wdXRcIiB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiBcbiAgICAgICBpZD1cInRleHQtaW5wdXQtaWRcIiByZXF1aXJlZD1cIlwiIChmb2N1cyk9XCJjbGVhckVycm9yKClcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtPy5lcnJvclxuICAgICAgICAgICAgPyAncmVkJ1xuICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9fVwiIG9uaW5wdXQ9XCJ0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSgvW15hLXpBLVowLTlcXHMuOjssP10vZywnJyk7XCIgLz5cbiAgICAgIDwhLS0gPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBueHQtY2hlY2staWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwiaW5wVmFsdWU/Lmxlbmd0aCA+IDBcIj48L2k+IC0tPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFRleHQgQXJlYSAtLT5cbiAgPGRpdiAqbmdJZj1cInRhRmxhZ1wiID5cbiAgICA8ZGl2PlxuICAgICAgPHRleHRhcmVhIGNsYXNzPVwibnh0LWlucHV0IG54dC10ZXh0LWFyZWFcIiBpZD1cInRhLWlucHV0LWlkXCIgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIChjbGljayk9XCJjbGVhckVycm9yKClcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtPy5lcnJvclxuICAgICAgICAgICAgPyAncmVkJ1xuICAgICAgICAgICAgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMCAmJiB0YUZvY3VzT3V0XG4gICAgICAgICAgICA/ICcjODdiZTFjJ1xuICAgICAgICAgICAgOiAnJ1xuICAgICAgICB9fVwiIChmb2N1c291dCk9XCJ0YUZvY3VzT3V0ID0gdHJ1ZVwiXG4gICAgICAgIG9uaW5wdXQ9XCJ0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSgvW15hLXpBLVowLTlcXHMuOjssP10vZywnJyk7XCI+PC90ZXh0YXJlYT5cbiAgICAgIDwhLS0gPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBueHQtY2hlY2staWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwiaW5wVmFsdWU/Lmxlbmd0aCA+IDAgJiYgdGFGb2N1c091dFwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcIj48L2k+IC0tPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIENDIE51bWJlciBGb3JtYXQgLS0+XG4gIDxkaXYgKm5nSWY9XCJudW1iZXJGbGFnXCIgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICA8ZGl2IGNsYXNzPVwibnh0LWRpcy1mbGV4XCI+XG4gICAgICA8aW5wdXQgdHlwZT1cIlRleHRcIiBwbGFjZWhvbGRlcj1cIjAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwXCIgW25nQ2xhc3NdPVwieyBib3hvdXRsaW5lOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCJcbiAgICAgICAgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIGlkPVwibnVtYmVyLWlucHV0LWlkXCIgKG5nTW9kZWxDaGFuZ2UpPVwiQ0NPbkNoYW5nZSgkZXZlbnQpXCIgcmVxdWlyZWQ9XCJcIiBtYXhsZW5ndGg9XCIyOVwiXG4gICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIiBvbmlucHV0PVwidGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teMC05IF0vZywnJyk7XCJcbiAgICAgICAgc3R5bGU9XCJ3aWR0aDotd2Via2l0LWZpbGwtYXZhaWxhYmxlO1wiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3JcbiAgICAgICAgICAgID8gJ3JlZCdcbiAgICAgICAgICAgIDogaW5wVmFsdWU/Lmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gJyM4N2JlMWMnXG4gICAgICAgICAgICA6ICcnXG4gICAgICAgIH19XCIgLz5cbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2tcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBzdHlsZT1cImNvbG9yOiAjODdiZTFjOyBtYXJnaW4tbGVmdDogLTJyZW07IHotaW5kZXg6IDE7IHBhZGRpbmc6IDVweDtcIlxuICAgICAgICAqbmdJZj1cImlucFZhbHVlPy5sZW5ndGggPiAwXCI+PC9pPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPCEtLSBFTkQtLT5cblxuICA8IS0tIEFscGhhTnVtZXJpYyAtLT5cbiAgPGRpdiAqbmdJZj1cImFscGhhbnVtZXJpY0ZsYWdcIiBjbGFzcz1cImNvbC1tZC0xMlwiPiA8IS0tVUkgbm90IGNvbXBsZXRlZC0tPlxuICAgIDxkaXYgc3R5bGU9XCJwb3NpdGlvbjpyZWxhdGl2ZTtcIj5cbiAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICA8aW5wdXQgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPVwie3snemVyb09mWmVybycgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19XCIgc3R5bGU9XCJwYWRkaW5nOjVweCA1cHggNXB4IDE1MHB4O1wiIGlkPVwieW91cmlkaGVyZVwiLz5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBFbWFpbCAtLT5cbiAgPGRpdiAqbmdJZj1cImVtYWlsRmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyXCI+XG4gICAgPGRpdiBjbGFzcz1cIm54dC1kaXMtZmxleFwiPlxuICAgICAgPGlucHV0IHR5cGU9XCJlbWFpbFwiIFtuZ0NsYXNzXT1cInsgYm94b3V0bGluZTogcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2MgfVwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiBpZD1cImVtYWlsLWlucHV0LWlkXCJcbiAgICAgICAgcmVxdWlyZWQ9XCJcIiAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3tcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvclxuICAgICAgICAgICAgPyAncmVkJ1xuICAgICAgICAgICAgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyAnIzg3YmUxYydcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfX1cIiAvPlxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVja1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHN0eWxlPVwiY29sb3I6ICM4N2JlMWM7IG1hcmdpbi1sZWZ0OiAtMnJlbTsgei1pbmRleDogMTsgcGFkZGluZzogNXB4XCJcbiAgICAgICAgKm5nSWY9XCJpbnBWYWx1ZT8ubGVuZ3RoID4gMFwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBEYXRlVGltZSAtLT5cbiAgPGRpdiAqbmdJZj1cImR0RmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdaZXJvIG54dG15dC10aW1lMVwiID5cbiAgICA8IS0tIEVycm9yIEhhbmRsaW5nIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5lcnJvclwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1xuICAgIGNvbG9yOiByZWQ7XCI+e3txdWVzdGlvbkl0ZW0/LmVycm9yPy5lcnJvck1zZ319PC9kaXY+XG5cbiAgICA8IS0tIERhdGUgLS0+XG4gICAgPGRpdiAqbmdJZj1cImRhdGVGbGFnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdCb3R0b21cIj5cbiAgICAgICAgPCEtLSBIQSAzMS1KQU4tMjQgVGhlc2UgbGFiZWxzIHdlcmUgb2NjdXBpbmcgdGhlIGVtcHR5IHNwYWNlIHdoZW4gZGF0ZSBxdWVzdGlvbiBjb21lcy0tPlxuICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImRhdGUtdGltZSBjb2xvcmZcIj57eyBxdWVzdGlvbkl0ZW0/LkRhdGVfVGV4dF9fYyB9fTwvbGFiZWw+IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibnh0LWRpcy1mbGV4XCI+XG4gICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgICA8IS0tIEhBIDAyRkVCMjQgQWRkaXRpb25hbCBwYXJhbSB0byB1cGRhdGUgdGhlIHF1ZXN0aW9uIC0tPlxuICAgICAgICAgIDxteS1kYXRlLXBpY2tlciBuYW1lPVwibXlkYXRlXCIgW29wdGlvbnNdPVwibXlEYXRlUGlja2VyT3B0aW9uc1wiIGlkPVwiZGF0ZVwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4ICFpbXBvcnRhbnQ7XCIgKGRhdGVDaGFuZ2VkKT1cIm9uRGF0ZUNoYW5nZWQoJGV2ZW50LCBxdWVzdGlvbkl0ZW0pXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsRGF0ZVwiIGNsYXNzPVwiZGF0ZS1waWNrZXJcIiBwbGFjZWhvbGRlcj1cInt7J3NlbGVjdERhdGUnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVwiIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cbiAgICAgICAgICA8L215LWRhdGUtcGlja2VyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBUaW1lIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJ0aW1lRmxhZ1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBwYWRkaW5nQm90dG9tXCI+XG4gICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiZGF0ZS10aW1lIGNvbG9yZlwiPnt7IHF1ZXN0aW9uSXRlbT8uVGltZV9UZXh0X19jIH19PC9sYWJlbD4gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJueHQtZGlzLWZsZXhcIj5cbiAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydkdC1saW5lIGRhdGUtbGluZSBueHQtZHQtdGltZSc6IHFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZWFuZFRpbWU6ICFxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fY31cIiBcbiAgICAgICAgICAgICAgaWQ9XCJkYXRlYW5kVGltZVwiIFtzdHlsZS5ib3JkZXItY29sb3JdPVwicXVlc3Rpb25JdGVtPy5lcnJvciA/ICdyZWQnOiBxdWVzdGlvbkl0ZW0/LmlucHV0Py5sZW5ndGggPiAwID8gJycgOiAnJ1wiXG4gICAgICAgICAgICAgIChmb2N1cyk9XCIoY2xlYXJTUUVycm9yKSBcIj5cbiAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJob3Vyc1wiIGNsYXNzPVwiZGF0ZXRpbWUgc2hvd0hvdXIgbnh0bXl0LXRpbWUgbXl0LWhvdXJcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkSG91clwiIGlkPVwiaG91clwiXG4gICAgICAgICAgICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCI+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+SEg8L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImhvdXJcIiAqbmdGb3I9XCJsZXQgaG91ciBvZiBob3Vyc1wiPlxuICAgICAgICAgICAgICB7eyBob3VyIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9uXCI+IDogPC9zcGFuPlxuICAgICAgICAgIDxzZWxlY3QgbmFtZT1cIm1pbnV0ZXNcIiBjbGFzcz1cImRhdGV0aW1lIG54dHNob3dtaW51dGUgbnh0bXl0LXRpbWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTWludXRlXCIgaWQ9XCJtaW51dGVcIlxuICAgICAgICAgICAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiPlxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPk1NPC9vcHRpb24+XG4gICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJtaW51dGVcIiAqbmdGb3I9XCJsZXQgbWludXRlIG9mIG1pbnV0ZXNcIj5cbiAgICAgICAgICAgICAge3sgbWludXRlIH19XG4gICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgY29sb24xOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0/LlgyNF9Ib3Vyc19fYyA9PSBmYWxzZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvblwiPiA6IDwvc3Bhbj5cbiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cIkFNL1BNXCIgY2xhc3M9XCJueHRteXQtdGltZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRNZXJpZGllbVwiIGlkPVwibWVyaWRpZW1cIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFNXCI+QU08L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlBNXCI+UE08L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPCEtLSA8ZGl2IFtuZ0NsYXNzXT1cInsnJzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYywgJ2RhdGVhbmRUaW1lJzogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2N9XCI+PC9kaXY+IC0tPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8aSBjbGFzcz1cImZhIGNoZWNrLWljb24zXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0/LmlucHV0Py5sZW5ndGggPiAwXCI+PC9pPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEF0dGFjaG1lbnQgLyBGaWxlIC0tPlxuICA8ZGl2ICpuZ0lmPVwiZmlsZUZsYWdcIj5cbiAgICA8ZGl2ICpuZ0lmPVwiIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWFsZXJ0XCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgdGhpcy5xdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJwaWN0dXJlLXVwbG9hZFwiIGZvcj1cImZpbGUtdXBsb2FkXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwaWN0dXJlLXVwbG9hZC1jaGlsZFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWxlLWltYWdlLW8gZmEtNXggaWNvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXBsdXMgZmEtMnggcGljdHVyZS11cGxvYWQtY2hpbGQgcGljLXVwbG9hZCBpY29sb3JcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGlucHV0IGlkPVwiZmlsZS11cGxvYWRcIiB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cInt7IGFsbG93ZWRGaWxlRXh0ZW5zaW9uIH19XCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCx0aGlzLnF1ZXN0aW9uSXRlbSlcIiAvPlxuICAgIDwvZGl2PlxuICAgIDx1bCAqbmdJZj1cIlxuICAgICAgICBhdHRhY2htZW50cz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICBxdWVzdGlvbkl0ZW0/LlR5cGVfX2MgPT09ICdGaWxlJyAmJlxuICAgICAgICAhcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2NcbiAgICAgIFwiIGNsYXNzPVwiYXR0YWNoLXVsaXN0IGNvbC1tZC0xMlwiPlxuICAgICAgPGxpICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJhbGlnbi1sXCI+XG4gICAgICAgIHt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWV9fTxzcGFuIGNsYXNzPVwiYXR0YWNoLWxpc3RcIiAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIj5YPC9zcGFuPlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuXG4gICAgPCEtLSBBdHRhY2htZW50IFByb2dyZXNzIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJueHRmaWxlLXVwbG9hZGluZy1ib3hcIj5cbiAgICAgICAgPCEtLTxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAyeC5wbmdcIiBjbGFzcz1cImljb24tZWRpdDFcIiAvPi0tPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInVwbG9hZGluZy1maWxlLW5hbWUgXCI+e3sgYXR0YWNobWVudC5hdHRhY2htZW50TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZGVsZXRlJTQwMngucG5nXCIgY2xhc3M9XCJkZWxldGVJY29uXCJcbiAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIiAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibnh0ZmlsZS11cGxvYWQtYm94XCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPyAncmVkJyA6ICcnIH19XCI+XG4gICAgICBcbiAgICAgICAgPCEtLTxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAyeC5wbmdcIiBjbGFzcz1cImljb24tZWRpdDFcIiAvPi0tPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImYtTmFtZVwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LlF1ZXN0aW9uX1RleHRfX2MpXCI+IHt7IHF1ZXN0aW9uSXRlbT8uUXVlc3Rpb25fVGV4dF9fY319PC9zcGFuPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaWxlLWxhYmVsIFwiPlxuICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9maWxlLXVwbG9hZC5wbmdcIiBjbGFzcz1cImZpbGUtaWNvblwiLz5cbiAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICAgIDxpbnB1dCBuYW1lPVwiYXR0YWNobWVudFwiIHR5cGU9XCJmaWxlXCIgcGxhY2Vob2xkZXI9XCJ7eyd0b0J1eVRpY2tldCcgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19XCIgbXVsdGlwbGVcbiAgICAgICAgICAgIGFjY2VwdD1cIi5wZGYsIC5wbmcsIC5qcGcsIC5qcGVnLCAuaGVpYywgLmFwcGxpY2F0aW9uL3BkZlwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmlsZS11cGxvYWQtYnRuXCI+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBCb29rIC0tPlxuICA8ZGl2ICpuZ0lmPVwiYm9va0ZsYWdcIj5cbiAgICA8ZGl2IFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsX19jID8gJ2Zvcm0tZ3JvdXAgY29udGVudC1ib3gnIDogJ2Zvcm0tZ3JvdXAnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0lmPVwicXVlc3Rpb25JdGVtLmVycm9yXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICBjb2xvcjogcmVkO1wiPnt7cXVlc3Rpb25JdGVtPy5lcnJvcj8uZXJyb3JNc2d9fTwvZGl2PlxuICAgICAgICA8ZGl2IFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsX19jID8gJycgOiAnbnh0LW15dC1hbGlnbjMnXCIgW2NsYXNzXT1cInFiSXRlbS5pc1NoZW5nZWxfX2MgPyAnY29sLWxnLScgKyBxdWVzLlNpemVfX2MgKyAnIHBhZGRpbmdub25lJyA6ICdjb2wtbWQtJyArIHF1ZXMuU2l6ZV9fYyArICcgcGFkZGluZ25vbmUnXCJcbiAgICAgICAgICAqbmdGb3I9XCJsZXQgcXVlcyBvZiBzdWJRdWVzdGlvbnM7bGV0IGkgPSBpbmRleFwiIFtpZF09XCJxdWVzLklkXCI+XG4gICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGRvd24yOiBxYkl0ZW0/LlByb2dyZXNzX0Jhcl9fYyB9XCI+XG4gICAgICAgICAgICA8c3Bhbj57eyBxdWVzPy5RdWVzdGlvbl9UZXh0X19jIH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ1plcm8gbnh0bXl0LWRhdGVUaW1lTmV3XCIgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUaW1lJyB8fCBxdWVzLlR5cGVfX2MgPT09ICdEYXRlJ1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0RhdGUnXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiZGF0ZS10aW1lIGNvbG9yZlwiPnt7IHF1ZXN0aW9uSXRlbT8uRGF0ZV9UZXh0X19jIH19PC9sYWJlbD4gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVhbmR0aW1lXCI+XG4gICAgICAgICAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICAgICAgICAgICAgPCEtLSBIQSAwMkZFQjI0IEFkZGl0aW9uYWwgcGFyYW0gdG8gdXBkYXRlIHRoZSBxdWVzdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgIDxteS1kYXRlLXBpY2tlciBuYW1lPVwibXlkYXRlXCIgW29wdGlvbnNdPVwibXlEYXRlUGlja2VyT3B0aW9uc1wiIGlkPVwiZGF0ZVwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4ICFpbXBvcnRhbnQ7XCIgKGRhdGVDaGFuZ2VkKT1cIm9uRGF0ZUNoYW5nZWQoJGV2ZW50LCBxdWVzKVwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsRGF0ZVwiIGNsYXNzPVwiZGF0ZS1waWNrZXJcIiBwbGFjZWhvbGRlcj1cInt7J3NlbGVjdERhdGUnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVwiICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCIgPlxuICAgICAgICAgICAgICAgICAgPC9teS1kYXRlLXBpY2tlcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdUaW1lJ1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdCb3R0b21cIj5cbiAgICAgICAgICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImRhdGUtdGltZSBjb2xvcmZcIj57eyBxdWVzdGlvbkl0ZW0/LlRpbWVfVGV4dF9fYyB9fTwvbGFiZWw+IC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRlYW5kdGltZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydkdC1saW5lIGRhdGUtbGluZSBueHQtZHQtdGltZSc6IHFiSXRlbT8uUHJvZ3Jlc3NfQmFyX19jLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVhbmRUaW1lOiAhcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2N9XCIgXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJkYXRlYW5kVGltZVwiIFtzdHlsZS5ib3JkZXItY29sb3JdPVwicXVlc3Rpb25JdGVtPy5lcnJvciA/ICdyZWQnOiBxdWVzdGlvbkl0ZW0/LmlucHV0Py5sZW5ndGggPiAwID8gJycgOiAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cIihjbGVhclNRRXJyb3IpIFwiPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwiaG91cnNcIiBjbGFzcz1cImRhdGV0aW1lIHNob3dIb3VyIG54dG15dC10aW1lIG15dC1ob3VyXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZEhvdXJcIiBpZD1cImhvdXJcIlxuICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5ISDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIFt2YWx1ZV09XCJob3VyXCIgKm5nRm9yPVwibGV0IGhvdXIgb2YgaG91cnNcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBob3VyIH19XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9uXCI+IDogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwibWludXRlc1wiIGNsYXNzPVwiZGF0ZXRpbWUgbnh0c2hvd21pbnV0ZSBueHRteXQtdGltZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRNaW51dGVcIiBpZD1cIm1pbnV0ZVwiXG4gICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPk1NPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIm1pbnV0ZVwiICpuZ0Zvcj1cImxldCBtaW51dGUgb2YgbWludXRlc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IG1pbnV0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IGNvbG9uMTogcWJJdGVtPy5Qcm9ncmVzc19CYXJfX2MgfVwiICpuZ0lmPVwicXVlc3Rpb25JdGVtLlgyNF9Ib3Vyc19fYyA9PSBmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9uXCI+IDogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJBTS9QTVwiIGNsYXNzPVwibnh0bXl0LXRpbWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTWVyaWRpZW1cIiBpZD1cIm1lcmlkaWVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFNXCI+QU08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUE1cIj5QTTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy5UeXBlX19jID09PSAnRGF0ZVRpbWUnXCI+XG4gICAgICAgICAgICA8YXBwLWN1c3RvbS1kYXRlLXBpY2tlciBbbWluRGF0ZV09XCJxdWVzLm1pbkRhdGVcIiBbZGF0ZV09XCJxdWVzLmlucHV0XCIgKGRhdGVDaGFuZ2UpPVwiZGlzcGxheURhdGUoJGV2ZW50LHF1ZXMpXCI+PC9hcHAtY3VzdG9tLWRhdGUtcGlja2VyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gVkQgdG8gc2hvdyBsYWJsZS0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdMYWJlbCdcIj5cbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLWxhYmVsIFtsYWJlbFN0eWxlXT1cInF1ZXMuVGl0bGVfX2NcIiBbbGFiZWxWYWx1ZV09XCJxdWVzLlF1ZXN0aW9uX19jXCI+XG4gICAgICAgICAgICA8L2FwcC1jdXN0b20tbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ1RleHQnXCI+XG4gICAgICAgICAgICA8bGFiZWw+e3sgcXVlcy5RdWVzdGlvbl9UZXh0X19jIH19PC9sYWJlbD5cbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLWlucHV0XG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwicXVlcz8uaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cInF1ZXNcIiBcbiAgICAgICAgICAgICAgICAgIFtpZFZhbHVlXT1cInF1ZXM/LlRyYWNraW5nX0lEX19jXCJcbiAgICAgICAgICAgICAgICAgIFtmb2N1c0V2ZW50XT1cImNsZWFyU1FFcnJvcihxdWVzPy5JZClcIlxuICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cInF1ZXM/LmVycm9yXCJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJxdWVzPy5RdWVzdGlvbl9fY1wiXG4gICAgICAgICAgICAgICAgICAoaW5wdXRWYWx1ZSk9XCJzZWxlY3RlZElucHV0KCRldmVudCxxdWVzKVwiPlxuICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWlucHV0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdMb2NhdGlvbidcIj5cbiAgICAgICAgICAgIDwhLS0gZm9yIHBpY2sgbG9jYXRpb24gLS0+XG4gICAgICAgICAgICA8IS0tIEhBMTAwMTIwMjQgQWRkZWQgQXBpIGtleSBhcyBpbnB1dCAtLT5cbiAgICAgICAgICAgIDxhcHAtcGljay1sb2NhdGlvbiBbYXBpS2V5XT1cInFiSXRlbVsnQXBpX0tleV9fYyddXCIgW2FkZHJlc3NdPVwicXVlcy5pbnB1dFwiIChsb2NhdGlvblNlbGVjdGVkKT1cImhhbmRsZUxvY2F0aW9uU2VsZWN0ZWQoJGV2ZW50LHF1ZXMpXCI+PC9hcHAtcGljay1sb2NhdGlvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIGZvciAgdGV4dCBhcmVhICAgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ1RleHRBcmVhJ1wiPlxuICAgICAgICAgICAgPGFwcC1jdXN0b20tdGV4dC1hcmVhIFt2YWx1ZV09XCJxdWVzLmlucHV0XCIgW3Jvd3NdPVwiM1wiIFtlcnJvcl09XCJxdWVzLmVycm9yXCIgW3BsYWNlaG9sZGVyXT1cInF1ZXMuUXVlc3Rpb25fX2MgXCIgKHRleHRhcmVhVmFsdWVDaGFuZ2UpPVwiaGFuZGxlVGV4dGFyZWFWYWx1ZUNoYW5nZSgkZXZlbnQpXCI+PC9hcHAtY3VzdG9tLXRleHQtYXJlYT5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gRW1haWwgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0VtYWlsJ1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJlbWFpbFwiIFsobmdNb2RlbCldPVwicXVlcy5pbnB1dFwiIFtpZF09XCJxdWVzLklkXCIgcmVxdWlyZWQ9XCJcIiAoZm9jdXMpPVwiY2xlYXJTUUVycm9yKHF1ZXMuSWQpXCJcbiAgICAgICAgICAgICAgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgcXVlcy5lcnJvciA/ICdyZWQnIDogJycgfX1cIiBwbGFjZWhvbGRlcj1cInt7IHF1ZXMuUXVlc3Rpb25fX2MgfX1cIiAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ0ZpbGUnXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcIj5cbiAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwicGljdHVyZS11cGxvYWQgY3VzdG9tLWZpbGUtdXBsb2FkIGJnY29sb3Itd1wiIGZvcj1cImZpbGUtdXBsb2FkXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwaWN0dXJlLXVwbG9hZC1jaGlsZFwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWxlLWltYWdlLW8gZmEtNXggaWNvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIlxuICAgICAgICAgICAgICAgICAgICBmYSBmYS1wbHVzIGZhLTJ4XG4gICAgICAgICAgICAgICAgICAgIHBpY3R1cmUtdXBsb2FkLWNoaWxkXG4gICAgICAgICAgICAgICAgICAgIHBpYy11cGxvYWRcbiAgICAgICAgICAgICAgICAgICAgaWNvbG9yXG4gICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPGlucHV0IGlkPVwiZmlsZS11cGxvYWRcIiB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cInt7IGJvb2tGbGFnQWNjZXB0IH19XCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCxxdWVzKVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPHVsICpuZ0lmPVwiXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHM/Lmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgICAgICBxdWVzLlR5cGVfX2MgPT09ICdGaWxlJyAmJlxuICAgICAgICAgICAgICAgICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXG4gICAgICAgICAgICAgIFwiIGNsYXNzPVwiYXR0YWNoLXVsaXN0IGNvbC1tZC0xMlwiPlxuICAgICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHNcIiBjbGFzcz1cImFsaWduLWxcIj5cbiAgICAgICAgICAgICAgICB7eyBhdHRhY2htZW50LmF0dGFjaG1lbnROYW1lXG4gICAgICAgICAgICAgICAgfX08c3BhbiBjbGFzcz1cImF0dGFjaC1saXN0XCIgKGNsaWNrKT1cImRlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudC5hdHRhY2htZW50SWQpXCI+WDwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXl0LWJveFwiICpuZ0lmPVwicWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiPlxuXG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHNcIiBjbGFzcz1cIm54dGZpbGUtdXBsb2FkaW5nLWJveFwiPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAyeC5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXQxXCIgLz5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVwbG9hZGluZy1maWxlLW5hbWUgbXl0LWZvbnQxIGZvbnQtd2VpZ2h0OiBub3JtYWw7XCI+IHt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZGVsZXRlJTQwMngucG5nXCIgY2xhc3M9XCJkZWxldGVJY29uXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnQuYXR0YWNobWVudElkKVwiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibnh0ZmlsZS11cGxvYWQtYm94XCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPyAncmVkJyA6ICcnIH19XCI+XG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDJ4LnBuZ1wiIGNsYXNzPVwibnh0LWljb24tZWRpdDFcIiAvPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZi1OYW1lXCI+e3sgcXVlcz8uUXVlc3Rpb25fX2MgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmlsZS1sYWJlbCBcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6ICNjNTI4MWM7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eydhdHRhY2gnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiYXR0YWNobWVudFwiIHR5cGU9XCJmaWxlXCIgcGxhY2Vob2xkZXI9XCJ7eyd0b0J1eVRpY2tldCcgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19XCIgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgYWNjZXB0PVwiLnBkZiwgLnBuZywgLmpwZywgLmpwZWcsIC5oZWljLCAuYXBwbGljYXRpb24vcGRmXCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCxxdWVzKVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsZS11cGxvYWQtYnRuXCI+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gVGFibGUgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ1RhYmxlJ1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICA8YXBwLWN1c3RvbS10YWJsZSBcbiAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cInF1ZXNcIlxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuSWQpXCI+XG4gICAgICAgICAgICA8L2FwcC1jdXN0b20tdGFibGU+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIERyb3Bkb3duIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLlR5cGVfX2MgPT09ICdEcm9wZG93bidcIiBjbGFzcz1cIm54dGRyb3Bkb3duXCI+XG4gICAgICAgICAgICA8IS0tIGZvciBjb21tb24gZHJvcGRvd24gLS0+XG4gICAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICAgICAgPGFwcC1jdXN0b20tZHJvcGRvd24gW2Zyb21TaGVuZ2VsXT1cInFiSXRlbS5pc1NoZW5nZWxfX2NcIlxuICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJxdWVzLlF1ZXN0aW9uX09wdGlvbnNfX3IucmVjb3Jkc1wiXG4gICAgICAgICAgICAgICAgICAgIFthcGlNZXRhXT1cInF1ZXMuU3ViX1RleHRfX2NcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwicXVlcy5OYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkVmFsdWVdPVwicXVlcy5pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiLS0te3snc2VsZWN0JyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX0tLS1cIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JNZXNzYWdlXT1cInF1ZXM/LkVycm9yX01lc3NhZ2VfX2NcIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JdPVwicXVlcz8uZXJyb3JcIlxuICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuSWQpXCI+XG4gICAgICAgICAgICA8L2FwcC1jdXN0b20tZHJvcGRvd24+XG4gICAgICAgICAgICA8YXBwLWRyb3Bkb3duLXdpdGgtZmxhZyAqbmdJZj1cInF1ZXMuaXNEZXBlbmRlbnRQaWNrbGlzdCAmJiAhcXVlcy5kcm9wRG93bk9ubHlcIiAgW2NlcnRpZmllZF09XCJxdWVzLmNlcnRpZmllZEZsYWdcIiAgW0pvYlBlcmZvcm1lckNlcnRpZmljYXRlc109XCJxdWVzLmNlcnRpZmljYXRlTGlzdFwiIChmbGFnRHJvcERvd25DaGFuZ2UpPVwiZGVwZW5kZW50Q2hhbmdlKCRldmVudClcIj48L2FwcC1kcm9wZG93bi13aXRoLWZsYWc+XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZWNrIFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwicXVlc3Rpb25JdGVtPy5pbnB1dD8ubGVuZ3RoID4gMFwiPjwvaT5cbiAgICAgICAgICA8L2Rpdj4gICAgICAgICAgXG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS1MaXN0IHN0YXJ0LS0+XG4gIDxkaXYgKm5nSWY9XCJsaXN0RmxhZ1wiPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiICpuZ0lmPVwicXVlc3Rpb25JdGVtLmVycm9yXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHg7XG4gICAgICAgICAgICBjb2xvcjogcmVkO1wiPnt7cXVlc3Rpb25JdGVtPy5lcnJvcj8uZXJyb3JNc2d9fTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwibnh0LW15dC1hbGlnbjNcIiBbY2xhc3NdPVwiJ2NvbC1tZC0nICsgcXVlcy5TaXplX19jICsgJyBwYWRkaW5nbm9uZSdcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBxdWVzIG9mIGdldExvY2FsU3ViUXVlc3Rpb25zKHF1ZXN0aW9uSXRlbS5JZCk7bGV0IGkgPSBpbmRleFwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm54dC1kaXMtZmxleCBteXQtZm9udDMgbXl0LWZvbnQ3XCI+e3sgcXVlcz8uUXVlc3Rpb25fX2MgfX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMuVHlwZV9fYyA9PT0gJ1RleHQnXCI+XG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInF1ZXMuaW5wdXRcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgJ254dC1kaXMtZmxleCBkdC1saW5lIGRhdGUtbGluZSBueHRib29rVGV4dCBib3hvdXRsaW5lIG15dC1mb250MSc6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MsXG4gICAgICAgICAgICAgdGV4dEJveDogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2NcbiAgICAgICAgICAgIH1cIiBpZD1cInRleHRcIiBbaWRdPVwicXVlcy51bmlxdWVTdWJRSWRcIiByZXF1aXJlZD1cIlwiIChmb2N1cyk9XCJjbGVhckxvY2FsU3ViUXVlc0Vycm9yKHF1ZXMpXCJcbiAgICAgICAgICAgIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHF1ZXMuZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgcGxhY2Vob2xkZXI9XCJ7eyBxdWVzLlF1ZXN0aW9uX19jIH19XCJcbiAgICAgICAgICAgIG9uaW5wdXQ9XCJ0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSgvW15hLXpBLVowLTlcXHMuOjssP10vZywnJyk7XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJcIiAqbmdJZj1cImFkZEZsYWdcIj5cbiAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIkFkZChnZXRMb2NhbFN1YlF1ZXN0aW9ucyhxdWVzdGlvbkl0ZW0uSWQpKVwiIGNsYXNzPVwiYnRuXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzXCIgPjwvaT57eydhZGQnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fTwvYnV0dG9uPlxuICAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDwhLS1MaXN0IEVuZC0tPlxuXG4gIDwhLS0gQWN0aW9ucyAtLT5cbiAgPCEtLSBWRCBidXR0b24gY29uZGl0aW9uIHJlbW92ZWQtLT5cbiAgPGRpdiBjbGFzcz1cImZsZXhlclwiPlxuICAgIDwhLS0gQmFja3dhcmQgLyBCYWNrIC0tPlxuICAgIDwhLS0gSEEgMDJGRUIyNCBIaWRpbmcgdGhlIGJ1dHRvbiB3aGVuIHRoZXJlIGlzIG5vIHZhbHVlIGZyb20gdGhlIGJhY2tlbmQgLS0+XG4gICAgPGRpdiBjbGFzcz1cImJhY2tidXR0b25cIiBcbiAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cInF1ZXN0aW9uU3RhY2subGVuZ3RoID4gMCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCIgKm5nSWY9XCJxYkl0ZW0uQmFja19fY1wiPlxuICAgICAgPGRpdiBbbmdDbGFzc109XCJ7fVwiPlxuICAgICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICdueHQtbGVmdC1idCc6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MsXG4gICAgICAgICAgICAnbnh0LWJ0biBidG4tcHJpbWFyeSc6XG4gICAgICAgICAgICAgICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXG4gICAgICAgICAgfVwiIChjbGljayk9XCJoYW5kbGVCYWNrQ2xpY2soKVwiPlxuICAgICAgICAgIHt7IHFiSXRlbT8uQmFja19fYyB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBGb3J3YXJkIC8gTmV4dCAtLT5cbiAgICA8IS0tIEhBIDAyRkVCMjQgSGlkaW5nIHRoZSBidXR0b24gd2hlbiB0aGVyZSBpcyBubyB2YWx1ZSBmcm9tIHRoZSBiYWNrZW5kIC0tPlxuICAgIDxkaXYgICpuZ0lmPVwicWJJdGVtLk5leHRfX2NcIiA+XG4gICAgICA8ZGl2IGNsYXNzPVwibnh0YnV0dG9uXCI+XG4gICAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ254dC1ydXN0eSc6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MsXG4gICAgICAgICAgICAnbnh0LWJ0biBidG4tcHJpbWFyeSc6XG4gICAgICAgICAgICAgICFxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXG4gICAgICAgICAgfVwiIChjbGljayk9XCJoYW5kbGVOZXh0Q2xpY2soKVwiPlxuICAgICAgICAgIHt7IHFiSXRlbS5OZXh0X19jIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gU3VtbWFyeSAtLT5cbjxkaXYgKm5nSWY9XCJzdW1tYXJ5ICYmIHN1bW1hcnkubGVuZ3RoID4gMFwiIGhlaWdodD1cIjEwMCUgIWltcG9ydGFudFwiIGNsYXNzPVwiY29sLW1kLTEyXCIgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAnY29sLW1kLTEyJzohcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1xuICAgICAgICAgICAgICAgfVwiPlxuICAgIDxoMSBjbGFzcz1cIm54dC1oZWFkZXIxIG54dC1zdW1tYXJ5cGFkZFwiID57eyBxYkl0ZW0uU3ViVGl0bGVfX2MgfX08L2gxPiAgICAgICAgIFxuICA8ZGl2IGlkPVwibnh0LXByb2dyZXNzMlwiICpuZ0lmPVwiIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgJiYgdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnIFwiPlxuICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2Z1bGwtc3VtbWFyeSc6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IHFhIG9mIHN1bW1hcnlcIj5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IG5vbjogIHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiPlxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBzdW1tYXJ5OiAgIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiPlxuICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXFiSXRlbS5FZGl0X19jXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncXVlc3Rpb24nOiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgIT0gJ0NvbXBsZXRlZCcgfVwiPlxuICAgICAgICAgICAgICA8cCBbbmdDbGFzc109XCJ7IGFzdW06IHRoaXMuYWJJdGVtLlN0YXR1c19fYyA9PT0gJ0NvbXBsZXRlZCcgfVwiIChjbGljayk9XCJoYW5kbGVFZGl0Q2xpY2socWEucXVlc0lkKVwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRUZXh0KHFhLnF1ZXNWYWx1ZSlcIj57eyBxYS5xdWVzVmFsdWUgfX08L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0uRWRpdF9fY1wiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uJzogdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnIH1cIj5cbiAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdxdWVzdGlvbic6IHRoaXMuYWJJdGVtLlN0YXR1c19fYyA9PT0gJ0NvbXBsZXRlZCcgfVwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRUZXh0KHFhLnF1ZXNWYWx1ZSlcIj5cbiAgICAgICAgICAgICAgICB7eyBxYS5xdWVzVmFsdWUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJueHQtYW5zd2VyXCIgPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwID09PSAnRmlsZSdcIj5cbiAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAxLnBuZ1wiIGNsYXNzPVwibnh0LWljb24tZWRpdC1zdW1tYXJ5XCIgLz5cbiAgICAgICAgICAgICAgICAgIHt7IHFhLmFuc1ZhbHVlIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBIQSAwMkZFQjI0IERpc3BsYXlpbmcgdGhlIGluIHN1bW1hcnkgZm9yIGJvb2sgdHlwZSAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWEucVR5cCA9PSAnQm9vaydcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHZhbCBvZiBxYS5teVZhbFwiPlxuICAgICAgICAgICAgICAgICAgICA8cD57eyB2YWwuUXVlc3Rpb25fVGV4dF9fYyB9fTo8c3Bhbj57eyB2YWwuaW5wdXQgfX08L3NwYW4+PC9wPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBIQSAwMkZFQjI0IERpc3BsYXlpbmcgdGhlIHZhbHVlIGZvciBkaXJlY3QgcXVlc3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFhLnFUeXAgIT0gJ0ZpbGUnICYmIHFhLnFUeXAgIT0gJ0Jvb2snXCI+e3sgcWEuUXVlc3Rpb25fVGV4dF9fYyB9fSA8c3Bhbj48L3NwYW4+e3sgcWEuYW5zVmFsdWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLkVkaXRfX2MgJiYgdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjZGVkZGRkO1wiPlxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm54dC1lZGl0XCIgKGNsaWNrKT1cImhhbmRsZUVkaXRDbGljayhxYS5xdWVzSWQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkZXZpY2VJbmZvLm9zID09PSAnaU9TJ1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1lZGl0JTQwMngucG5nXCIgc3R5bGU9XCJ3aWR0aDo1MCUhaW1wb3J0YW50O1wiIGNsYXNzPVwibnh0LWljb24tZWRpdGlvc1wiLz5cbiAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImRldmljZUluZm8ub3MgIT09ICdpT1MnXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWVkaXQlNDAyeC5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXRcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPGRpdiAqbmdJZj1cInRoaXMuYWJJdGVtLlN0YXR1c19fYyA9PT0gJ0NvbXBsZXRlZCdcIiBjbGFzcz1cImNvbC1sZy0xMlwiIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO1wiPlxuICAgIDxoMj57e3RoaXMucWJJdGVtLlN1bW1hcnlfVGV4dF9fY319PC9oMj5cbiAgICA8cD57e3RoaXMucWJJdGVtLlN1bW1hcnlfU3ViX1RleHRfX2N9fTwvcD5cbiAgPC9kaXY+XG5cbiAgPGRpdiBpZD1cIm54dC1wcm9ncmVzczJcIiAqbmdJZj1cInFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgXCI+XG4gICAgPGRpdiBbbmdDbGFzc109XCJ7J2JnQ29sb3Igbnh0c3VtbWFyeS10b3AnIDogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyB9XCIgPlxuICAgICAgPGRpdiBpZD1cIm54dC1wcm9ncmVzcy1zdW1tYXJ5XCIgKm5nSWY9XCJxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jXCI+XG4gICAgICAgIDxjaXJjbGUtcHJvZ3Jlc3MgY2xhc3M9XCJ0aXRsZWJhclwiIFtwZXJjZW50XT1cInRoaXMucGVyY2VudFwiIFtyYWRpdXNdPVwiNDBcIiBbc3BhY2VdPVwiLTRcIiBbb3V0ZXJTdHJva2VXaWR0aF09XCI0XCJcbiAgICAgICAgW2lubmVyU3Ryb2tlV2lkdGhdPVwiNFwiIFtvdXRlclN0cm9rZUNvbG9yXT1cIicjZTBiMWIwJ1wiIFtpbm5lclN0cm9rZUNvbG9yXT1cIicjZTdlOGVhJ1wiIFthbmltYXRpb25dPVwidHJ1ZVwiIFtiYWNrZ3JvdW5kUGFkZGluZ109IFwiMFwiXG4gICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPSBcIicjZGQyZTEzJ1wiIFtiYWNrZ3JvdW5kR3JhZGllbnRTdG9wQ29sb3JdPVwiJyNmOWJmYmQnXCIgW3RpdGxlQ29sb3JdPVwiJyNmM2VkZWQnXCIgXG4gICAgICAgIGNsYXNzPVwibmctc3Rhci1pbnNlcnRlZFwiIFt0aXRsZV09XCJ0aGlzLnBlcmNlbnQrJyUnXCIgW3Nob3dTdWJ0aXRsZV09XCJmYWxzZVwiIFtzaG93QmFja2dyb3VuZF09XCJ0cnVlXCIgW2FuaW1hdGlvbkR1cmF0aW9uXT1cIjMwMFwiXG4gICAgICAgIFtzdGFydEZyb21aZXJvXT1cImZhbHNlXCIgW3Jlc3BvbnNpdmVdPVwiZmFsc2VcIiA+XG4gICAgICA8L2NpcmNsZS1wcm9ncmVzcz5cbiAgICAgIFxuICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5TdW1tYXJ5X1RleHRfX2MgJiYgcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiIFxuICAgICAgW25nQ2xhc3NdPVwieyBzdW1tYXJ5VGl0bGU6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJueHQtc3ViVGl0bGVcIiA+e3sgcWJJdGVtLlN1bW1hcnlfVGV4dF9fYyB9fTwvaDM+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJhYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnXCIgY2xhc3M9XCJueHQtc3ViVGl0bGUxXCIgPnt7IHFiSXRlbS5TdW1tYXJ5X1N1Yl9UZXh0X19jfX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY1wiPlxuICAgICAgPGgzIGNsYXNzPVwic3VtbWFyeS1oXCI+XG4gICAgICAgIHt7IHFiSXRlbS5TdW1tYXJ5X1RleHRfX2MgfX1cbiAgICAgIDwvaDM+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2Z1bGwtc3VtbWFyeSc6IHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiPlxuICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5LWdyb3VwVGV4dCBteXQtZm9udDJcIj5cbiAgICAgIDwhLS0gPHA+SW5mb3JtZSBkZSBkYcOxbzwvcD4gLS0+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgcWEgb2Ygc3VtbWFyeVwiID5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IG5vbjogIHFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5XCI+XG4gICAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCIhcWJJdGVtLkVkaXRfX2NcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdxdWVzdGlvbiBzdW0tcXVlcyBteXQtZm9udDMgbXl0LWZvbnQ4JzogdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnIH1cIj5cbiAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwieyBhc3VtOiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgPT09ICdDb21wbGV0ZWQnIH1cIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+e3sgcWEucXVlc1ZhbHVlIH19PC9hPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLkVkaXRfX2NcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdzdW0tcXVlcyBxdWVzdGlvbiBteXQtZm9udDMgbXl0LWZvbnQ4JzogdGhpcy5hYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnIH1cIj5cbiAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdzdW0tcXVlczEgcXVlc3Rpb24xIHN1bW1hcnktY29tcGxldGVkIG15dC1mb250MyBteXQtZm9udDgnOiB0aGlzLmFiSXRlbS5TdGF0dXNfX2MgPT09ICdDb21wbGV0ZWQnIH1cIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+XG4gICAgICAgICAgICAgICAge3sgcWEucXVlc1ZhbHVlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5FZGl0X19jICYmIHRoaXMuYWJJdGVtLlN0YXR1c19fYyAhPSAnQ29tcGxldGVkJ1wiIHN0eWxlPVwiYmFja2dyb3VuZDogI2RlZGRkZDtcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm54dC1lZGl0XCIgKGNsaWNrKT1cImhhbmRsZUVkaXRDbGljayhxYS5xdWVzSWQpXCI+XG4gICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImRldmljZUluZm8ub3MgPT09ICdpT1MnXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWVkaXQlNDAyeC5wbmdcIiBzdHlsZT1cIndpZHRoOjUwJSFpbXBvcnRhbnQ7XCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0aW9zXCIvPlxuICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkZXZpY2VJbmZvLm9zICE9PSAnaU9TJ1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1lZGl0JTQwMngucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0XCIgLz5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibnh0LWFuc3dlclwiPlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWEucVR5cCA9PT0gJ0ZpbGUnXCI+XG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDEucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0LXN1bW1hcnlcIiAvPlxuICAgICAgICAgICAgICAgIHt7IHFhLmFuc1ZhbHVlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWEucVR5cCAhPSAnRmlsZSdcIj5cbiAgICAgICAgICAgICAgICB7eyBxYS5hbnNWYWx1ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIDxkaXYgY2xhc3M9XCJmbGV4ZXIxXCIgKm5nSWY9XCJhYkl0ZW1cIj5cbiAgICA8ZGl2IGNsYXNzPVwiXCIgKm5nSWY9XCJhYkl0ZW0uU3RhdHVzX19jID09ICdDb21wbGV0ZWQnICYmIHFiSXRlbS5DYW5jZWxfX2NcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICAgICAgPGJ1dHRvbiBbbmdDbGFzc109XCJ7J2J0bi10ZXh0JzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnh0LWJ0biBidG4tcHJpbWFyeSBidG4tbGcgYnRuLWJsb2NrIGJ0bi1iYWNrLWNvbG9yJzogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2N9XCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2FuY2VsQ2xpY2soKVwiPlxuICAgICAgICAgIHt7IHFiSXRlbS5DYW5jZWxfX2MgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+IC0tPlxuXG4gIDwhLS0gR3JvdXAgQWN0aW9ucyAtLT5cbiAgPGRpdiBjbGFzcz1cImFsaWduLWVkaXQtc3VibWl0XCIgKm5nSWY9XCJhYkl0ZW0uU3RhdHVzX19jICE9ICdDb21wbGV0ZWQnXCI+XG4gICAgPCEtLSBIQSAwMkZFQjI0IEhpZGluZyB0aGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gdmFsdWUgZnJvbSB0aGUgYmFja2VuZCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cInFiSXRlbS5TdWJtaXRfX2NcIj5cbiAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwieyAnYnRuLXRleHQyJzogcWJJdGVtLlByb2dyZXNzX0Jhcl9fYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnh0LWJ0biBidG4tcHJpbWFyeSBidG4tbGcgYnRuLWJsb2NrIGJ0bi1iYWNrLWNvbG9yJzogIXFiSXRlbS5Qcm9ncmVzc19CYXJfX2MgfVwiIFxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlU3VibWl0Q2xpY2soKVwiPlxuICAgICAgICB7eyBxYkl0ZW0uU3VibWl0X19jIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8IS0tIEhBIDAyRkVCMjQgSGlkaW5nIHRoZSBidXR0b24gd2hlbiB0aGVyZSBpcyBubyB2YWx1ZSBmcm9tIHRoZSBiYWNrZW5kIC0tPlxuICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbC1tZC02XCIgKm5nSWY9XCJxYkl0ZW0uRWRpdF9fY1wiPlxuICAgICAgPGJ1dHRvbiBbbmdDbGFzc109XCJ7J2dyZXknOiBxYkl0ZW0uUHJvZ3Jlc3NfQmFyX19jLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgYnRuLWJhY2stY29sb3InOiAhcWJJdGVtLlByb2dyZXNzX0Jhcl9fY31cIiBcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImhhbmRsZUJhY2tDbGlja05ldygpXCI+XG4gICAgICAgIHt7IHFiSXRlbS5FZGl0X19jIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj4gLS0+XG4gIDwvZGl2PlxuXG48L2Rpdj4iXX0=
|