@rangertechnologies/ngnxt 2.1.82 → 2.1.83
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +26 -26
- package/esm2022/lib/ar.i18n.mjs +1 -1
- package/esm2022/lib/components/custom-button/custom-button.component.mjs +3 -3
- package/esm2022/lib/components/custom-calendar/custom-calendar.component.mjs +3 -3
- package/esm2022/lib/components/custom-date/custom-date.component.mjs +3 -3
- package/esm2022/lib/components/custom-date-picker/custom-date-picker.component.mjs +3 -3
- package/esm2022/lib/components/custom-dropdown/custom-dropdown.component.mjs +3 -3
- package/esm2022/lib/components/custom-image/custom-image.component.mjs +1 -1
- package/esm2022/lib/components/custom-input/custom-input.component.mjs +3 -3
- package/esm2022/lib/components/custom-label/custom-label.component.mjs +3 -3
- package/esm2022/lib/components/custom-model/custom-model.component.mjs +3 -3
- package/esm2022/lib/components/custom-radio/custom-radio.component.mjs +3 -3
- package/esm2022/lib/components/custom-rich-text/custom-rich-text.component.mjs +3 -3
- package/esm2022/lib/components/custom-table/custom-table.component.mjs +3 -3
- package/esm2022/lib/components/custom-text-area/custom-text-area.component.mjs +3 -3
- package/esm2022/lib/components/custom-time/custom-time.component.mjs +3 -3
- package/esm2022/lib/components/dependent-table/dependent-table.component.mjs +3 -3
- package/esm2022/lib/components/dropdown-with-flag/dropdown-with-flag.component.mjs +3 -3
- package/esm2022/lib/components/file-upload/file-upload.component.mjs +3 -3
- package/esm2022/lib/components/file-view/file-view.component.mjs +3 -3
- package/esm2022/lib/components/loader/loader.component.mjs +3 -3
- package/esm2022/lib/components/pick-location/pick-location.component.mjs +3 -3
- package/esm2022/lib/components/search-box/search-box.component.mjs +3 -3
- package/esm2022/lib/components/table-appendix/table-appendix.component.mjs +3 -3
- package/esm2022/lib/directives/componenthost/componenthost.directive.mjs +1 -1
- package/esm2022/lib/en.i18n.mjs +1 -1
- package/esm2022/lib/i18n-config.service.mjs +1 -1
- package/esm2022/lib/i18n.component.mjs +19 -19
- package/esm2022/lib/i18n.module.mjs +1 -1
- package/esm2022/lib/i18n.pipe.mjs +1 -1
- package/esm2022/lib/i18n.service.mjs +1 -1
- package/esm2022/lib/interfaces/actionMeta.mjs +1 -1
- package/esm2022/lib/interfaces/apimeta.mjs +1 -1
- package/esm2022/lib/interfaces/dependencyMeta.mjs +1 -1
- package/esm2022/lib/model/bookletWrapper.mjs +1 -1
- package/esm2022/lib/model/changeWrapper.mjs +1 -1
- package/esm2022/lib/model/errorWrapper.mjs +1 -1
- package/esm2022/lib/model/tableWrapper.mjs +1 -1
- package/esm2022/lib/nxt-app.component.mjs +9 -9
- package/esm2022/lib/nxt-app.module.mjs +1 -1
- package/esm2022/lib/nxt-app.service.mjs +1 -1
- package/esm2022/lib/pages/booklet/booklet.component.mjs +3 -3
- package/esm2022/lib/pages/questionbook/questionbook.component.mjs +3 -3
- package/esm2022/lib/pages/questionnaire/questionnaire.component.mjs +3 -3
- package/esm2022/lib/pages/summary-page/summary-page.component.mjs +3 -3
- package/esm2022/lib/pipe/get-value.pipe.mjs +1 -1
- package/esm2022/lib/services/change.service.mjs +1 -1
- package/esm2022/lib/services/data.service.mjs +1 -1
- package/esm2022/lib/services/salesforce.service.mjs +1 -1
- package/esm2022/lib/services/shared.service.mjs +1 -1
- package/esm2022/lib/services/storage.service.mjs +1 -1
- package/esm2022/lib/tam.i18n.mjs +1 -1
- package/esm2022/lib/wrapper.mjs +1 -1
- package/esm2022/public-api.mjs +1 -1
- package/fesm2022/rangertechnologies-ngnxt.mjs +76 -76
- package/fesm2022/rangertechnologies-ngnxt.mjs.map +1 -1
- package/package.json +1 -1
- package/rangertechnologies-ngnxt-2.1.83.tgz +0 -0
- package/rangertechnologies-ngnxt-2.1.82.tgz +0 -0
|
@@ -2358,11 +2358,11 @@ export class QuestionnaireComponent {
|
|
|
2358
2358
|
return Object.values(item)[0];
|
|
2359
2359
|
}
|
|
2360
2360
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", 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 });
|
|
2361
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", 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", handleSubmit: "handleSubmit" }, providers: [ChangeService], usesOnChanges: true, ngImport: i0, template: "<!-- Spinner -->\n<ngx-spinner size=\"medium\" [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 == '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 }}\n </button>\n </div>\n</div> -->\n\n<!-- Question Hanlding -->\n<!-- VD removed unwanted condition -->\n<!-- RS 09DEC24 Changed keys-->\n<div *ngIf=\"questionItem\" class=\"questiondiv1 padd-bottom\">\n <!-- Progress Bar & Title -->\n <div *ngIf=\"questionItem.title\">\n <h1>{{ questionItem?.title }}</h1>\n <div>{{ questionItem?.subTitle }}</div>\n </div>\n\n <!-- Progress & Grouping -->\n <div>\n <!-- Pie Chart Progress -->\n <div [ngClass]=\"{ bgColor: qbItem?.progressBar }\">\n <div id=\"nxt-progress\" *ngIf=\"qbItem?.progressBar\">\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 <!-- RS 09DEC24 Changed keys-->\n <!-- Show the Group/Module related to the Progress -->\n <div *ngIf=\"questionItem.groupName && qbItem.progressBar\"\n [ngClass]=\"{ questionalign: !qbItem?.progressBar }\">\n <div class=\"nxt-largeTitle\">\n <h3 class=\"myt-font6 myt-text3\">\n {{ questionItem?.groupName }}\n </h3>\n <div *ngIf=\"questionItem.subText != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.subText}}</div>\n <div *ngIf=\"questionItem.subText === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.subText}}</div>\n </div>\n </div>\n </div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Question Handling -->\n <!-- VD 10Aug24- question no -->\n <div>\n <div *ngIf=\"questionItem.questionText\" style=\"display: flex;\">\n <span>{{questionItem?.questionNumber}}.</span>\n <p class=\"nxt-label\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </p>\n </div>\n <!-- Title -->\n <!-- <div *ngIf=\"questionItem.isTitle\">\n <div *ngIf=\"questionItem.type != 'Book' && questionItem.questionNumber!='6' && questionItem.questionNumber!='9'\"> \n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </h3>\n </div>\n </div> -->\n <!-- HA 31-JAN-24 Removed the unwanted styling class -->\n <!-- <div *ngIf=\"!questionItem.isTitle\" [class]=\"qbItem.isShengel ? 'header-style' : 'question-f-size'\">\n <div [innerHTML]=\"getText(questionItem?.questionText)\" >\n {{ questionItem?.questionText }}\n </div>\n </div> -->\n\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.type == 'Book'\">\n <div *ngIf=\"questionItem.questionNumber=='6'\">\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{ questionItem?.questionText }}\n </h3>\n </div>\n </div> -->\n \n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.type == 'File' \">\n <div *ngIf=\"questionItem.questionNumber=='9'\">\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\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.additionalRichContent && qbItem.progressBar\" >\n <div\n class=\"nxt-additional \" [innerHTML]=\"innerhtml\">\n </div>\n </div>\n <div *ngIf=\"questionItem.additionalRichContent && !qbItem.progressBar\">\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?.progressBar,\n 'custom-select': !qbItem?.progressBar\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.options\" class=\"option\" value=\"{{ opt.value }}\">\n {{ opt.value }}\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 <span *ngIf=\"this.questionItem.error\" class=\"nxt-error-msg\"> {{ questionItem?.errorMessage }}</span>\n <div class=\"nxt-custom-radio-container\">\n <div *ngFor=\"let opt of questionItem.options\" \n [class]=\" this.questionItem.error ? 'nxt-custom-radio-option invalid' : 'nxt-custom-radio-option'\">\n <input\n type=\"radio\"\n [id]=\"opt.value\"\n [(ngModel)]=\"inpValue\"\n name=\"inpValue\"\n [value]=\"opt.value\"\n (change)=\"optionChange(opt.value)\"\n />\n <label class=\"nxt-radio-label\" [for]=\"opt.value\"> {{ opt.value }}</label>\n </div>\n </div>\n\n <!-- <div class=\"nxt-dis-flex\">\n <div *ngFor=\"let opt of questionItem.options.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\"\n (change)=\"optionChange(opt.value)\" />\n {{ opt.value }}\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?.errorMessage }}\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 }}</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 + ' 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\n <!-- RS 06JAN25 -->\n <!-- for rich text -->\n <div *ngIf=\"rtaFlag\">\n <div [class]=\"'col-md-' + questionItem?.size + ' paddingnone'\">\n <app-custom-rich-text\n [value]=\"inpValue\"\n [question]=\"questionItem\"\n [error]=\"questionItem?.error\"\n (textValueChange)=\"handleRichTextChange($event)\">\n </app-custom-rich-text>\n </div>\n </div>\n \n \n <!-- <div *ngIf=\"ques.type === 'RichTextArea'\">\n\n <app-custom-rich-text\n [value]=\"ques.input\"\n [rows]=\"3\"\n [error]=\"ques.error\" [placeholder]=\"ques.question \" \n (textValueChange)=\"handleRichTextChange($event)\">\n </app-custom-rich-text>\n</div> -->\n <!-- CC Number Format -->\n <!-- RS 09DEC24 Changed keys-->\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?.progressBar }\"\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 <!-- RS 09DEC24 Changed keys-->\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\" [(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?.dateText }}</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?.timeText }}</label> -->\n <div class=\"nxt-dis-flex\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\n dateandTime: !qbItem?.progressBar}\" \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?.progressBar }\" *ngIf=\"questionItem?.x24Hours == 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.progressBar, 'dateandTime': !qbItem.progressBar}\"></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.progressBar\">\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 === 'File' &&\n !qbItem?.progressBar\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.progressBar\">\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?.questionText)\"> {{ questionItem?.questionText}}</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 <!-- RS 09DEC24 Changed keys-->\n <!-- Book -->\n <div *ngIf=\"bookFlag\">\n <div [class]=\"qbItem.isShengel ? '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 ? '' : 'nxt-myt-align3'\" [class]=\"qbItem.isShengel ? 'col-lg-' + ques.size + ' paddingnone' : 'col-md-' + ques.size + ' paddingnone'\"\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.id\">\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\">\n <span>{{ ques?.questionText }}</span>\n </div>\n <div class=\"col-md-12 paddingZero nxtmyt-dateTimeNew\" *ngIf=\"ques.type === 'Time' || ques.type === 'Date'\">\n <div *ngIf=\"ques.type === 'Date'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</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 === 'Time'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\n <div class=\"dateandtime\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\n dateandTime: !qbItem?.progressBar}\" \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?.progressBar }\" *ngIf=\"questionItem.x24Hours == 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 === '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 === 'Label'\">\n <app-custom-label [labelStyle]=\"ques.title\" [labelValue]=\"ques.question\">\n </app-custom-label>\n </div>\n <div *ngIf=\"ques.type === 'Text'\">\n <label>{{ ques.questionText }}</label>\n <app-custom-input\n [value]=\"ques?.input\"\n [question]=\"ques\" \n [idValue]=\"ques?.trackingId\"\n [focusEvent]=\"clearSQError(ques?.id)\"\n [error]=\"ques?.error\"\n [placeholder]=\"ques?.question\"\n (inputValue)=\"selectedInput($event,ques)\">\n </app-custom-input>\n </div>\n <div *ngIf=\"ques.type === 'Location'\">\n <!-- for pick location -->\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\n </div>\n <!-- for text area -->\n <div *ngIf=\"ques.type === 'TextArea'\">\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.question \" (textareaValueChange)=\"handleTextareaValueChange($event)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.type === '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 }}\" />\n </div>\n\n <div *ngIf=\"ques.type === 'File'\">\n <div *ngIf=\"!qbItem.progressBar\">\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 === 'File' &&\n !qbItem.progressBar\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.progressBar\">\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 }}</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 === '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 === 'Dropdown'\" class=\"nxtdropdown\">\n <!-- for common dropdown -->\n <!-- HA 20DEC23 For Translation -->\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel\"\n [options]=\"ques.options\"\n [apiMeta]=\"ques.subText\"\n [id]=\"ques.Name\"\n [selectedValue]=\"ques.input\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques?.errorMessage\"\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 + ' 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 }}</span>\n </div>\n <div *ngIf=\"ques.type === 'Text'\">\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\n 'nxt-dis-flex dt-line date-line nxtbookText boxoutline myt-font1': qbItem.progressBar,\n textBox: !qbItem.progressBar\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\"\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 <!--VD disabled -->\n <div class=\"backbutton\" \n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\" *ngIf=\"qbItem.back\">\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-left-bt': qbItem.progressBar,\n 'nxt-btn btn-primary':\n !qbItem.progressBar\n }\" (click)=\"handleBackClick()\">\n {{ qbItem?.back }}\n </button>\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\" >\n <div class=\"nxtbutton\">\n <!--VD disabled -->\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-rusty': qbItem.progressBar,\n 'nxt-btn btn-primary':\n !qbItem.progressBar\n }\" (click)=\"handleNextClick()\">\n {{ qbItem.next }}\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<!-- Summary -->\n<div *ngIf=\"this.abItem?.status === 'Completed'\" class=\"col-lg-12\" style=\"text-align: center;\">\n <h2>{{this.qbItem.summaryText}}</h2>\n <p>{{this.qbItem.summarySubText}}</p>\n</div>\n\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\n 'col-md-12':!qbItem.progressBar\n }\">\n <h1 class=\"nxt-header1 nxt-summarypadd\" >{{ qbItem.subTitle }}</h1> \n <div id=\"nxt-progress2\" *ngIf=\"!qbItem.progressBar && this.abItem.status != 'Completed' \">\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\n <div *ngFor=\"let qa of summary\">\n <div [ngClass]=\"{ non: qbItem.progressBar }\">\n <div [ngClass]=\"{ summary: !qbItem.progressBar }\">\n <div *ngIf=\"!qbItem.edit\"\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\n <p [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</p>\n </div>\n <!-- VD Question No added -->\n <div *ngIf=\"qbItem.edit\"\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\n <div [ngClass]=\"{ 'question': this.abItem.status === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\"><span>{{ qa.questionNumber }}</span>\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.questionText }}:<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.questionText }} <span></span>{{ qa.ansValue }}</div>\n <div *ngIf=\"qbItem.edit && this.abItem.status != '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\n\n <div id=\"nxt-progress2\" *ngIf=\"qbItem.progressBar \">\n <div [ngClass]=\"{'bgColor nxtsummary-top' : qbItem.progressBar }\" >\n <div id=\"nxt-progress-summary\" *ngIf=\"qbItem.progressBar\">\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.summaryText && qbItem.progressBar\" \n [ngClass]=\"{ summaryTitle: qbItem.progressBar }\">\n <h3 class=\"nxt-subTitle\" >{{ qbItem.summaryText }}</h3>\n <div *ngIf=\"abItem.status != 'Completed'\" class=\"nxt-subTitle1\" >{{ qbItem.summarySubText}}</div>\n </div>\n </div>\n <div *ngIf=\"!qbItem.progressBar\">\n <h3 class=\"summary-h\">\n {{ qbItem.summaryText }}\n </h3>\n </div>\n </div>\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\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.progressBar }\">\n <div class=\"summary\">\n <!-- <div *ngIf=\"!qbItem.edit\"\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\n <a [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\n </div>\n <div *ngIf=\"qbItem.edit\"\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.status === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div> -->\n <div *ngIf=\"qbItem.edit && this.abItem.status != '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 == 'Completed' && qbItem.cancel\">\n <div class=\"col-md-12\">\n <button [ngClass]=\"{'btn-text': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\"\n (click)=\"handleCancelClick()\">\n {{ qbItem.cancel }}\n </button>\n </div>\n </div>\n </div> -->\n\n <!-- Group Actions -->\n <div class=\"align-edit-submit\" *ngIf=\"abItem.status != 'Completed'\">\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"col-md-6\" *ngIf=\"qbItem.submit\">\n <button [ngClass]=\"{ 'btn-text2': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar }\" \n (click)=\"handleSubmitClick()\">\n {{ qbItem.submit }}\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\">\n <button [ngClass]=\"{'grey': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\" \n (click)=\"handleBackClickNew()\">\n {{ qbItem.edit }}\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: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: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;padding-left:2px}.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;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: "component", type: i11.CustomRichTextComponent, selector: "app-custom-rich-text", inputs: ["value", "placeholder", "error", "question", "rows", "readOnly", "minLength", "maxLength"], outputs: ["textValueChange"] }, { kind: "directive", type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i12.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: i7.NgxSpinnerComponent, selector: "ngx-spinner", inputs: ["bdColor", "size", "color", "type", "fullScreen", "name", "zIndex", "template", "showSpinner", "disableAnimation"] }, { 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", "question", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "component", type: i21.CustomLabelComponent, selector: "app-custom-label", inputs: ["labelValue", "labelStyle"] }, { kind: "pipe", type: i22.I18nPipe, name: "i18n" }], encapsulation: i0.ViewEncapsulation.None });
|
|
2361
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", 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", handleSubmit: "handleSubmit" }, providers: [ChangeService], usesOnChanges: true, ngImport: i0, template: "<!-- Spinner -->\r\n<ngx-spinner size=\"medium\" [name]=\"spinnerName\" [type]=\"spinnerType\"></ngx-spinner>\r\n<!-- custom loader -->\r\n<!-- <app-loader></app-loader> -->\r\n<!-- Back Processing -->\r\n<!-- <div *ngIf=\"backicon == false\" >\r\n <div class=\"backicon\" >\r\n <button (click)=\"handleBackClick()\" [class]=\" abItem?.status == 'Completed' ? 'summary-volver':'app-back1'\">\r\n <img class=\"icon-arrow-back\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-arrow-back.png\" alt=\"Scroll down\"> {{ qbItem?.back }}\r\n </button>\r\n </div>\r\n</div> -->\r\n\r\n<!-- Question Hanlding -->\r\n<!-- VD removed unwanted condition -->\r\n<!-- RS 09DEC24 Changed keys-->\r\n<div *ngIf=\"questionItem\" class=\"questiondiv1 padd-bottom\">\r\n <!-- Progress Bar & Title -->\r\n <div *ngIf=\"questionItem.title\">\r\n <h1>{{ questionItem?.title }}</h1>\r\n <div>{{ questionItem?.subTitle }}</div>\r\n </div>\r\n\r\n <!-- Progress & Grouping -->\r\n <div>\r\n <!-- Pie Chart Progress -->\r\n <div [ngClass]=\"{ bgColor: qbItem?.progressBar }\">\r\n <div id=\"nxt-progress\" *ngIf=\"qbItem?.progressBar\">\r\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\r\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\r\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \r\n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\r\n [startFromZero]=\"false\" [responsive]=\"false\" >\r\n </circle-progress>\r\n </div>\r\n </div>\r\n <!-- RS 09DEC24 Changed keys-->\r\n <!-- Show the Group/Module related to the Progress -->\r\n <div *ngIf=\"questionItem.groupName && qbItem.progressBar\"\r\n [ngClass]=\"{ questionalign: !qbItem?.progressBar }\">\r\n <div class=\"nxt-largeTitle\">\r\n <h3 class=\"myt-font6 myt-text3\">\r\n {{ questionItem?.groupName }}\r\n </h3>\r\n <div *ngIf=\"questionItem.subText != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.subText}}</div>\r\n <div *ngIf=\"questionItem.subText === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.subText}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- RS 09DEC24 Changed keys-->\r\n <!-- Question Handling -->\r\n <!-- VD 10Aug24- question no -->\r\n <div>\r\n <div *ngIf=\"questionItem.questionText\" style=\"display: flex;\">\r\n <span>{{questionItem?.questionNumber}}.</span>\r\n <p class=\"nxt-label\" [innerHTML]=\"getText(questionItem?.questionText)\">\r\n {{questionItem?.questionText}}\r\n </p>\r\n </div>\r\n <!-- Title -->\r\n <!-- <div *ngIf=\"questionItem.isTitle\">\r\n <div *ngIf=\"questionItem.type != 'Book' && questionItem.questionNumber!='6' && questionItem.questionNumber!='9'\"> \r\n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.questionText)\">\r\n {{questionItem?.questionText}}\r\n </h3>\r\n </div>\r\n </div> -->\r\n <!-- HA 31-JAN-24 Removed the unwanted styling class -->\r\n <!-- <div *ngIf=\"!questionItem.isTitle\" [class]=\"qbItem.isShengel ? 'header-style' : 'question-f-size'\">\r\n <div [innerHTML]=\"getText(questionItem?.questionText)\" >\r\n {{ questionItem?.questionText }}\r\n </div>\r\n </div> -->\r\n\r\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\r\n <!-- <div *ngIf=\"questionItem.type == 'Book'\">\r\n <div *ngIf=\"questionItem.questionNumber=='6'\">\r\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.questionText)\">\r\n {{ questionItem?.questionText }}\r\n </h3>\r\n </div>\r\n </div> -->\r\n \r\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\r\n <!-- <div *ngIf=\"questionItem.type == 'File' \">\r\n <div *ngIf=\"questionItem.questionNumber=='9'\">\r\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.questionText)\">\r\n {{questionItem?.questionText}}\r\n </h3>\r\n </div>\r\n </div> -->\r\n </div>\r\n\r\n <!-- Additional Info -->\r\n <!-- The below code can be written effectively nested ngIf for Rich Text & Other onw for Progress Bar -->\r\n <div *ngIf=\"questionItem.additionalRichContent && qbItem.progressBar\" >\r\n <div\r\n class=\"nxt-additional \" [innerHTML]=\"innerhtml\">\r\n </div>\r\n </div>\r\n <div *ngIf=\"questionItem.additionalRichContent && !qbItem.progressBar\">\r\n <div class=\"info-alert ques-alert1\">\r\n <i class=\"fa fa-info fa-3x iposition icolor\" aria-hidden=\"true\"></i>\r\n <div class=\"infodiv\" [innerHTML]=\"innerhtml\"></div>\r\n </div>\r\n </div>\r\n\r\n <!-- Dropdown-->\r\n <div *ngIf=\"dropdownFlag\" >\r\n <div class=\"nxt-dis-flex\">\r\n <select class=\"nxtdropdown\"\r\n [ngClass]=\"{\r\n 'dt-line nxt-myt-align3 nxt-myt-align2 dpDown nxt-dropbox down1 myt-dropbox myt-border-r myt-font1': qbItem?.progressBar,\r\n 'custom-select': !qbItem?.progressBar\r\n }\" class=\"mr-sm-2 dd-height nxt-dropbox \" id=\"dropdown\" [(ngModel)]=\"inpValue\" (change)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem?.error ? 'red' : inpValue?.length > 0 ? '#fff' : ''\r\n }}\" style.color=\"{{ questionItem?.error ? 'red' : '' }}\">\r\n <option *ngFor=\"let opt of questionItem.options\" class=\"option\" value=\"{{ opt.value }}\">\r\n {{ opt.value }}\r\n </option>\r\n <!-- HA 20DEC23 For Translation -->\r\n <option value=\".\" disabled hidden>{{'pleaseMakeChoice' | i18n:i18nService.currentLanguage}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!--VD Radio update -->\r\n <div *ngIf=\"radioFlag || dataFlag\" class=\"\">\r\n <span *ngIf=\"this.questionItem.error\" class=\"nxt-error-msg\"> {{ questionItem?.errorMessage }}</span>\r\n <div class=\"nxt-custom-radio-container\">\r\n <div *ngFor=\"let opt of questionItem.options\" \r\n [class]=\" this.questionItem.error ? 'nxt-custom-radio-option invalid' : 'nxt-custom-radio-option'\">\r\n <input\r\n type=\"radio\"\r\n [id]=\"opt.value\"\r\n [(ngModel)]=\"inpValue\"\r\n name=\"inpValue\"\r\n [value]=\"opt.value\"\r\n (change)=\"optionChange(opt.value)\"\r\n />\r\n <label class=\"nxt-radio-label\" [for]=\"opt.value\"> {{ opt.value }}</label>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"nxt-dis-flex\">\r\n <div *ngFor=\"let opt of questionItem.options.records\" class=\"radio nxt-radioOption\">\r\n <label class=\"nxt-radiocontainer container myt-font4\">\r\n <input type=\"radio\" [id]=\"opt.id\" [(ngModel)]=\"inpValue\" name=\"inpValue\" [value]=\"opt.value\"\r\n (change)=\"optionChange(opt.value)\" />\r\n {{ opt.value }}\r\n </label>\r\n </div>\r\n </div> -->\r\n </div> \r\n <!-- Checkbox -->\r\n <div *ngIf=\"checkboxFlag\" class=\"\">\r\n <div *ngIf=\"questionItem?.error\" class=\"cond-div2\">\r\n {{ questionItem?.errorMessage }}\r\n </div>\r\n <div class=\"nxt-checkbox-container\">\r\n <div *ngFor=\"let item of optionValues\" class=\"nxt-checkbox-wrapper\">\r\n <label class=\"nxt-container1\">\r\n <input type=\"nxt-checkbox\" [id]=\"item.id\" [(ngModel)]=\"item.checked\" (click)=\"clearError()\" />\r\n <span class=\"nxt-checkbox-label\">{{ item.value }}</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Text -->\r\n <div *ngIf=\"textFlag\">\r\n <!-- HA 31-JAN-24 To reduce the margin -->\r\n <div [class]=\"'col-md-' + questionItem?.size + ' paddingnone'\">\r\n <input class=\"nxt-input\" type=\"text\" [(ngModel)]=\"inpValue\" \r\n id=\"text-input-id\" required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem?.error\r\n ? 'red'\r\n : ''\r\n }}\" oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\r\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0\"></i> -->\r\n </div>\r\n </div>\r\n\r\n <!-- Text Area -->\r\n <div *ngIf=\"taFlag\" >\r\n <div>\r\n <textarea class=\"nxt-input nxt-text-area\" id=\"ta-input-id\" [(ngModel)]=\"inpValue\" (click)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem?.error\r\n ? 'red'\r\n : inpValue?.length > 0 && taFocusOut\r\n ? '#87be1c'\r\n : ''\r\n }}\" (focusout)=\"taFocusOut = true\"\r\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\"></textarea>\r\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> -->\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- RS 06JAN25 -->\r\n <!-- for rich text -->\r\n <div *ngIf=\"rtaFlag\">\r\n <div [class]=\"'col-md-' + questionItem?.size + ' paddingnone'\">\r\n <app-custom-rich-text\r\n [value]=\"inpValue\"\r\n [question]=\"questionItem\"\r\n [error]=\"questionItem?.error\"\r\n (textValueChange)=\"handleRichTextChange($event)\">\r\n </app-custom-rich-text>\r\n </div>\r\n </div>\r\n \r\n \r\n <!-- <div *ngIf=\"ques.type === 'RichTextArea'\">\r\n\r\n <app-custom-rich-text\r\n [value]=\"ques.input\"\r\n [rows]=\"3\"\r\n [error]=\"ques.error\" [placeholder]=\"ques.question \" \r\n (textValueChange)=\"handleRichTextChange($event)\">\r\n </app-custom-rich-text>\r\n</div> -->\r\n <!-- CC Number Format -->\r\n <!-- RS 09DEC24 Changed keys-->\r\n <div *ngIf=\"numberFlag\" class=\"col-md-12\">\r\n <div class=\"nxt-dis-flex\">\r\n <input type=\"Text\" placeholder=\"0000 0000 0000 0000 0000 0000\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\"\r\n [(ngModel)]=\"inpValue\" id=\"number-input-id\" (ngModelChange)=\"CCOnChange($event)\" required=\"\" maxlength=\"29\"\r\n (focus)=\"clearError()\" oninput=\"this.value=this.value.replace(/[^0-9 ]/g,'');\"\r\n style=\"width:-webkit-fill-available;\" style.border-color=\"{{\r\n this.questionItem.error\r\n ? 'red'\r\n : inpValue?.length > 0\r\n ? '#87be1c'\r\n : ''\r\n }}\" />\r\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px;\"\r\n *ngIf=\"inpValue?.length > 0\"></i>\r\n </div>\r\n </div>\r\n <!-- END-->\r\n\r\n <!-- AlphaNumeric -->\r\n <div *ngIf=\"alphanumericFlag\" class=\"col-md-12\"> <!--UI not completed-->\r\n <div style=\"position:relative;\">\r\n <!-- HA 20DEC23 For Translation -->\r\n <input type=text placeholder=\"{{'zeroOfZero' | i18n:i18nService.currentLanguage}}\" style=\"padding:5px 5px 5px 150px;\" id=\"youridhere\"/>\r\n </div>\r\n </div>\r\n\r\n <!-- Email -->\r\n <!-- RS 09DEC24 Changed keys-->\r\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\r\n <div class=\"nxt-dis-flex\">\r\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\" [(ngModel)]=\"inpValue\" id=\"email-input-id\"\r\n required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem.error\r\n ? 'red'\r\n : inpValue?.length > 0\r\n ? '#87be1c'\r\n : ''\r\n }}\" />\r\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px\"\r\n *ngIf=\"inpValue?.length > 0\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- DateTime -->\r\n <div *ngIf=\"dtFlag\" class=\"col-md-12 paddingZero nxtmyt-time1\" >\r\n <!-- Error Handling -->\r\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\r\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\r\n\r\n <!-- Date -->\r\n <div *ngIf=\"dateFlag\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <!-- HA 31-JAN-24 These labels were occuping the empty space when date question comes-->\r\n <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</label> -->\r\n <div class=\"nxt-dis-flex\">\r\n <!-- HA 20DEC23 For Translation -->\r\n <!-- HA 02FEB24 Additional param to update the question -->\r\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, questionItem)\"\r\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\">\r\n </my-date-picker>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Time -->\r\n <div *ngIf=\"timeFlag\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\r\n <div class=\"nxt-dis-flex\">\r\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\r\n dateandTime: !qbItem?.progressBar}\" \r\n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\r\n (focus)=\"(clearSQError) \">\r\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">HH</option>\r\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\r\n {{ hour }}\r\n </option>\r\n </select>\r\n <span class=\"colon\"> : </span>\r\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">MM</option>\r\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\r\n {{ minute }}\r\n </option>\r\n </select>\r\n <div [ngClass]=\"{ colon1: qbItem?.progressBar }\" *ngIf=\"questionItem?.x24Hours == false\">\r\n <span class=\"colon\"> : </span>\r\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\r\n <option value=\"AM\">AM</option>\r\n <option value=\"PM\">PM</option>\r\n </select>\r\n <!-- <div [ngClass]=\"{'': qbItem.progressBar, 'dateandTime': !qbItem.progressBar}\"></div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <i class=\"fa check-icon3\" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- Attachment / File -->\r\n <div *ngIf=\"fileFlag\">\r\n <div *ngIf=\"!qbItem.progressBar\">\r\n <div class=\"info-alert\" style.border-color=\"{{ this.questionItem?.error ? 'red' : '' }}\">\r\n <label class=\"picture-upload\" for=\"file-upload\">\r\n <span class=\"picture-upload-child\">\r\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span class=\"fa fa-plus fa-2x picture-upload-child pic-upload icolor\">\r\n <i class=\"\" aria-hidden=\"true\"></i>\r\n </span>\r\n </label>\r\n </div>\r\n <input id=\"file-upload\" type=\"file\" accept=\"{{ allowedFileExtension }}\" (change)=\"uploadFile($event,this.questionItem)\" />\r\n </div>\r\n <ul *ngIf=\"\r\n attachments?.length > 0 &&\r\n questionItem?.type === 'File' &&\r\n !qbItem?.progressBar\r\n \" class=\"attach-ulist col-md-12\">\r\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\r\n {{ attachment.attachmentName}}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\r\n </li>\r\n </ul>\r\n\r\n <!-- Attachment Progress -->\r\n <div *ngIf=\"qbItem.progressBar\">\r\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\r\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\r\n <span class=\"uploading-file-name \">{{ attachment.attachmentName }}</span>\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\r\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\r\n </div>\r\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\r\n \r\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\r\n <span class=\"f-Name\" [innerHTML]=\"getText(questionItem?.questionText)\"> {{ questionItem?.questionText}}</span>\r\n <label class=\"file-label \">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/file-upload.png\" class=\"file-icon\"/>\r\n <!-- HA 20DEC23 For Translation -->\r\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\r\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event)\"\r\n class=\"file-upload-btn\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- RS 09DEC24 Changed keys-->\r\n <!-- Book -->\r\n <div *ngIf=\"bookFlag\">\r\n <div [class]=\"qbItem.isShengel ? 'form-group content-box' : 'form-group'\">\r\n <div class=\"form-row\">\r\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\r\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\r\n <div [class]=\"qbItem.isShengel ? '' : 'nxt-myt-align3'\" [class]=\"qbItem.isShengel ? 'col-lg-' + ques.size + ' paddingnone' : 'col-md-' + ques.size + ' paddingnone'\"\r\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.id\">\r\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\">\r\n <span>{{ ques?.questionText }}</span>\r\n </div>\r\n <div class=\"col-md-12 paddingZero nxtmyt-dateTimeNew\" *ngIf=\"ques.type === 'Time' || ques.type === 'Date'\">\r\n <div *ngIf=\"ques.type === 'Date'\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</label> -->\r\n <div class=\"dateandtime\">\r\n <!-- HA 20DEC23 For Translation -->\r\n <!-- HA 02FEB24 Additional param to update the question -->\r\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, ques)\"\r\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\" >\r\n </my-date-picker>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"ques.type === 'Time'\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\r\n <div class=\"dateandtime\">\r\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\r\n dateandTime: !qbItem?.progressBar}\" \r\n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\r\n (focus)=\"(clearSQError) \">\r\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">HH</option>\r\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\r\n {{ hour }}\r\n </option>\r\n </select>\r\n <span class=\"colon\"> : </span>\r\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">MM</option>\r\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\r\n {{ minute }}\r\n </option>\r\n </select>\r\n <div [ngClass]=\"{ colon1: qbItem?.progressBar }\" *ngIf=\"questionItem.x24Hours == false\">\r\n <span class=\"colon\"> : </span>\r\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\r\n <option value=\"AM\">AM</option>\r\n <option value=\"PM\">PM</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"ques.type === 'DateTime'\">\r\n <app-custom-date-picker [minDate]=\"ques.minDate\" [date]=\"ques.input\" (dateChange)=\"displayDate($event,ques)\"></app-custom-date-picker>\r\n </div>\r\n <!-- VD to show lable-->\r\n <div *ngIf=\"ques.type === 'Label'\">\r\n <app-custom-label [labelStyle]=\"ques.title\" [labelValue]=\"ques.question\">\r\n </app-custom-label>\r\n </div>\r\n <div *ngIf=\"ques.type === 'Text'\">\r\n <label>{{ ques.questionText }}</label>\r\n <app-custom-input\r\n [value]=\"ques?.input\"\r\n [question]=\"ques\" \r\n [idValue]=\"ques?.trackingId\"\r\n [focusEvent]=\"clearSQError(ques?.id)\"\r\n [error]=\"ques?.error\"\r\n [placeholder]=\"ques?.question\"\r\n (inputValue)=\"selectedInput($event,ques)\">\r\n </app-custom-input>\r\n </div>\r\n <div *ngIf=\"ques.type === 'Location'\">\r\n <!-- for pick location -->\r\n <!-- HA10012024 Added Api key as input -->\r\n <app-pick-location [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\r\n </div>\r\n <!-- for text area -->\r\n <div *ngIf=\"ques.type === 'TextArea'\">\r\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.question \" (textareaValueChange)=\"handleTextareaValueChange($event)\"></app-custom-text-area>\r\n </div>\r\n\r\n <!-- Email -->\r\n <div *ngIf=\"ques.type === 'Email'\">\r\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.id\" required=\"\" (focus)=\"clearSQError(ques.id)\"\r\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\" />\r\n </div>\r\n\r\n <div *ngIf=\"ques.type === 'File'\">\r\n <div *ngIf=\"!qbItem.progressBar\">\r\n <label class=\"picture-upload custom-file-upload bgcolor-w\" for=\"file-upload\">\r\n <span class=\"picture-upload-child\">\r\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span class=\"\r\n fa fa-plus fa-2x\r\n picture-upload-child\r\n pic-upload\r\n icolor\r\n \">\r\n <i class=\"\" aria-hidden=\"true\"></i>\r\n </span>\r\n </label>\r\n <input id=\"file-upload\" type=\"file\" accept=\"{{ bookFlagAccept }}\" (change)=\"uploadFile($event,ques)\" />\r\n </div>\r\n\r\n <ul *ngIf=\"\r\n attachments?.length > 0 &&\r\n ques.type === 'File' &&\r\n !qbItem.progressBar\r\n \" class=\"attach-ulist col-md-12\">\r\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\r\n {{ attachment.attachmentName\r\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\r\n </li>\r\n </ul>\r\n <div class=\"myt-box\" *ngIf=\"qbItem.progressBar\">\r\n\r\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\r\n <span class=\"uploading-file-name myt-font1 font-weight: normal;\"> {{ attachment.attachmentName }}</span>\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\r\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\r\n </div>\r\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\r\n <span class=\"f-Name\">{{ ques?.question }}</span>\r\n <label class=\"file-label \">\r\n <span style=\"color: #c5281c;text-decoration:underline\">\r\n {{'attach' | i18n:i18nService.currentLanguage}}\r\n </span>\r\n <!-- HA 20DEC23 For Translation -->\r\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\r\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event,ques)\"\r\n class=\"file-upload-btn\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Table -->\r\n <div *ngIf=\"ques.type === 'Table'\" class=\"\">\r\n <app-custom-table \r\n [question]=\"ques\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-table>\r\n </div>\r\n\r\n <!-- Dropdown -->\r\n <div *ngIf=\"ques.type === 'Dropdown'\" class=\"nxtdropdown\">\r\n <!-- for common dropdown -->\r\n <!-- HA 20DEC23 For Translation -->\r\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel\"\r\n [options]=\"ques.options\"\r\n [apiMeta]=\"ques.subText\"\r\n [id]=\"ques.Name\"\r\n [selectedValue]=\"ques.input\"\r\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\r\n [errorMessage]=\"ques?.errorMessage\"\r\n [error]=\"ques?.error\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-dropdown>\r\n <app-dropdown-with-flag *ngIf=\"ques.isDependentPicklist && !ques.dropDownOnly\" [certified]=\"ques.certifiedFlag\" [JobPerformerCertificates]=\"ques.certificateList\" (flagDropDownChange)=\"dependentChange($event)\"></app-dropdown-with-flag>\r\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\r\n </div> \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--List start-->\r\n <div *ngIf=\"listFlag\">\r\n <div class=\"form-group\">\r\n <div class=\"form-row\">\r\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\r\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\r\n <div class=\"nxt-myt-align3\" [class]=\"'col-md-' + ques.size + ' paddingnone'\"\r\n *ngFor=\"let ques of getLocalSubQuestions(questionItem.id);let i = index\">\r\n <div>\r\n <span class=\"nxt-dis-flex myt-font3 myt-font7\">{{ ques?.question }}</span>\r\n </div>\r\n <div *ngIf=\"ques.type === 'Text'\">\r\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\r\n 'nxt-dis-flex dt-line date-line nxtbookText boxoutline myt-font1': qbItem.progressBar,\r\n textBox: !qbItem.progressBar\r\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\r\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\"\r\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\r\n </div>\r\n </div>\r\n <div class=\"\" *ngIf=\"addFlag\">\r\n <!-- HA 20DEC23 For Translation -->\r\n <button (click)=\"Add(getLocalSubQuestions(questionItem.id))\" class=\"btn\"><i class=\"fa fa-plus\" ></i>{{'add' | i18n:i18nService.currentLanguage}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!--List End-->\r\n\r\n <!-- Actions -->\r\n <!-- VD button condition removed-->\r\n <div class=\"flexer\">\r\n <!-- Backward / Back -->\r\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\r\n <!--VD disabled -->\r\n <div class=\"backbutton\" \r\n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\" *ngIf=\"qbItem.back\">\r\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\r\n 'nxt-left-bt': qbItem.progressBar,\r\n 'nxt-btn btn-primary':\r\n !qbItem.progressBar\r\n }\" (click)=\"handleBackClick()\">\r\n {{ qbItem?.back }}\r\n </button>\r\n </div>\r\n\r\n <!-- Forward / Next -->\r\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\r\n <div *ngIf=\"qbItem.next\" >\r\n <div class=\"nxtbutton\">\r\n <!--VD disabled -->\r\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\r\n 'nxt-rusty': qbItem.progressBar,\r\n 'nxt-btn btn-primary':\r\n !qbItem.progressBar\r\n }\" (click)=\"handleNextClick()\">\r\n {{ qbItem.next }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Summary -->\r\n<div *ngIf=\"this.abItem?.status === 'Completed'\" class=\"col-lg-12\" style=\"text-align: center;\">\r\n <h2>{{this.qbItem.summaryText}}</h2>\r\n <p>{{this.qbItem.summarySubText}}</p>\r\n</div>\r\n\r\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\r\n 'col-md-12':!qbItem.progressBar\r\n }\">\r\n <h1 class=\"nxt-header1 nxt-summarypadd\" >{{ qbItem.subTitle }}</h1> \r\n <div id=\"nxt-progress2\" *ngIf=\"!qbItem.progressBar && this.abItem.status != 'Completed' \">\r\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\r\n <div *ngFor=\"let qa of summary\">\r\n <div [ngClass]=\"{ non: qbItem.progressBar }\">\r\n <div [ngClass]=\"{ summary: !qbItem.progressBar }\">\r\n <div *ngIf=\"!qbItem.edit\"\r\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\r\n <p [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\r\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</p>\r\n </div>\r\n <!-- VD Question No added -->\r\n <div *ngIf=\"qbItem.edit\"\r\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\r\n <div [ngClass]=\"{ 'question': this.abItem.status === 'Completed' }\"\r\n [innerHTML]=\"getText(qa.quesValue)\"><span>{{ qa.questionNumber }}</span>\r\n {{ qa.quesValue }}\r\n </div>\r\n </div>\r\n <div class=\"nxt-answer\" >\r\n <div *ngIf=\"qa.qTyp === 'File'\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\r\n {{ qa.ansValue }}\r\n </div>\r\n <!-- HA 02FEB24 Displaying the in summary for book type -->\r\n <div *ngIf=\"qa.qTyp == 'Book'\">\r\n <div *ngFor=\"let val of qa.myVal\">\r\n <p>{{ val.questionText }}:<span>{{ val.input }}</span></p>\r\n </div>\r\n </div>\r\n <!-- HA 02FEB24 Displaying the value for direct question -->\r\n <div *ngIf=\"qa.qTyp != 'File' && qa.qTyp != 'Book'\">{{ qa.questionText }} <span></span>{{ qa.ansValue }}</div>\r\n <div *ngIf=\"qbItem.edit && this.abItem.status != 'Completed'\" style=\"background: #dedddd;\">\r\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\r\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\"/>\r\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div id=\"nxt-progress2\" *ngIf=\"qbItem.progressBar \">\r\n <div [ngClass]=\"{'bgColor nxtsummary-top' : qbItem.progressBar }\" >\r\n <div id=\"nxt-progress-summary\" *ngIf=\"qbItem.progressBar\">\r\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\r\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\r\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \r\n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\r\n [startFromZero]=\"false\" [responsive]=\"false\" >\r\n </circle-progress>\r\n \r\n <div *ngIf=\"qbItem.summaryText && qbItem.progressBar\" \r\n [ngClass]=\"{ summaryTitle: qbItem.progressBar }\">\r\n <h3 class=\"nxt-subTitle\" >{{ qbItem.summaryText }}</h3>\r\n <div *ngIf=\"abItem.status != 'Completed'\" class=\"nxt-subTitle1\" >{{ qbItem.summarySubText}}</div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!qbItem.progressBar\">\r\n <h3 class=\"summary-h\">\r\n {{ qbItem.summaryText }}\r\n </h3>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\r\n <div class=\"summary-groupText myt-font2\">\r\n <!-- <p>Informe de da\u00F1o</p> -->\r\n </div>\r\n <div *ngFor=\"let qa of summary\" >\r\n <div [ngClass]=\"{ non: qbItem.progressBar }\">\r\n <div class=\"summary\">\r\n <!-- <div *ngIf=\"!qbItem.edit\"\r\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\r\n <a [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\r\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\r\n </div>\r\n <div *ngIf=\"qbItem.edit\"\r\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\r\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.status === 'Completed' }\"\r\n [innerHTML]=\"getText(qa.quesValue)\">\r\n {{ qa.quesValue }}\r\n </div>\r\n </div> -->\r\n <div *ngIf=\"qbItem.edit && this.abItem.status != 'Completed'\" style=\"background: #dedddd;\">\r\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\r\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\"/>\r\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\r\n </button>\r\n </div>\r\n \r\n <div class=\"nxt-answer\">\r\n <div *ngIf=\"qa.qTyp === 'File'\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\r\n {{ qa.ansValue }}\r\n </div>\r\n <div *ngIf=\"qa.qTyp != 'File'\">\r\n {{ qa.ansValue }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"flexer1\" *ngIf=\"abItem\">\r\n <div class=\"\" *ngIf=\"abItem.status == 'Completed' && qbItem.cancel\">\r\n <div class=\"col-md-12\">\r\n <button [ngClass]=\"{'btn-text': qbItem.progressBar,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\"\r\n (click)=\"handleCancelClick()\">\r\n {{ qbItem.cancel }}\r\n </button>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Group Actions -->\r\n <div class=\"align-edit-submit\" *ngIf=\"abItem.status != 'Completed'\">\r\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\r\n <div class=\"col-md-6\" *ngIf=\"qbItem.submit\">\r\n <button [ngClass]=\"{ 'btn-text2': qbItem.progressBar,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar }\" \r\n (click)=\"handleSubmitClick()\">\r\n {{ qbItem.submit }}\r\n </button>\r\n </div>\r\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\r\n <!-- <div class=\"col-md-6\" *ngIf=\"qbItem.edit\">\r\n <button [ngClass]=\"{'grey': qbItem.progressBar,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\" \r\n (click)=\"handleBackClickNew()\">\r\n {{ qbItem.edit }}\r\n </button>\r\n </div> -->\r\n </div>\r\n\r\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: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: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;padding-left:2px}.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;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: "component", type: i11.CustomRichTextComponent, selector: "app-custom-rich-text", inputs: ["value", "placeholder", "error", "question", "rows", "readOnly", "minLength", "maxLength"], outputs: ["textValueChange"] }, { kind: "directive", type: i12.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i12.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i12.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: i7.NgxSpinnerComponent, selector: "ngx-spinner", inputs: ["bdColor", "size", "color", "type", "fullScreen", "name", "zIndex", "template", "showSpinner", "disableAnimation"] }, { 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", "question", "referenceField", "token"], outputs: ["valueChange"] }, { kind: "component", type: i21.CustomLabelComponent, selector: "app-custom-label", inputs: ["labelValue", "labelStyle"] }, { kind: "pipe", type: i22.I18nPipe, name: "i18n" }], encapsulation: i0.ViewEncapsulation.None });
|
|
2362
2362
|
}
|
|
2363
2363
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: QuestionnaireComponent, decorators: [{
|
|
2364
2364
|
type: Component,
|
|
2365
|
-
args: [{ selector: "lib-questionnaire", encapsulation: ViewEncapsulation.None, providers: [ChangeService], template: "<!-- Spinner -->\n<ngx-spinner size=\"medium\" [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 == '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 }}\n </button>\n </div>\n</div> -->\n\n<!-- Question Hanlding -->\n<!-- VD removed unwanted condition -->\n<!-- RS 09DEC24 Changed keys-->\n<div *ngIf=\"questionItem\" class=\"questiondiv1 padd-bottom\">\n <!-- Progress Bar & Title -->\n <div *ngIf=\"questionItem.title\">\n <h1>{{ questionItem?.title }}</h1>\n <div>{{ questionItem?.subTitle }}</div>\n </div>\n\n <!-- Progress & Grouping -->\n <div>\n <!-- Pie Chart Progress -->\n <div [ngClass]=\"{ bgColor: qbItem?.progressBar }\">\n <div id=\"nxt-progress\" *ngIf=\"qbItem?.progressBar\">\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 <!-- RS 09DEC24 Changed keys-->\n <!-- Show the Group/Module related to the Progress -->\n <div *ngIf=\"questionItem.groupName && qbItem.progressBar\"\n [ngClass]=\"{ questionalign: !qbItem?.progressBar }\">\n <div class=\"nxt-largeTitle\">\n <h3 class=\"myt-font6 myt-text3\">\n {{ questionItem?.groupName }}\n </h3>\n <div *ngIf=\"questionItem.subText != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.subText}}</div>\n <div *ngIf=\"questionItem.subText === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.subText}}</div>\n </div>\n </div>\n </div>\n <!-- RS 09DEC24 Changed keys-->\n <!-- Question Handling -->\n <!-- VD 10Aug24- question no -->\n <div>\n <div *ngIf=\"questionItem.questionText\" style=\"display: flex;\">\n <span>{{questionItem?.questionNumber}}.</span>\n <p class=\"nxt-label\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </p>\n </div>\n <!-- Title -->\n <!-- <div *ngIf=\"questionItem.isTitle\">\n <div *ngIf=\"questionItem.type != 'Book' && questionItem.questionNumber!='6' && questionItem.questionNumber!='9'\"> \n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\n </h3>\n </div>\n </div> -->\n <!-- HA 31-JAN-24 Removed the unwanted styling class -->\n <!-- <div *ngIf=\"!questionItem.isTitle\" [class]=\"qbItem.isShengel ? 'header-style' : 'question-f-size'\">\n <div [innerHTML]=\"getText(questionItem?.questionText)\" >\n {{ questionItem?.questionText }}\n </div>\n </div> -->\n\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.type == 'Book'\">\n <div *ngIf=\"questionItem.questionNumber=='6'\">\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{ questionItem?.questionText }}\n </h3>\n </div>\n </div> -->\n \n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\n <!-- <div *ngIf=\"questionItem.type == 'File' \">\n <div *ngIf=\"questionItem.questionNumber=='9'\">\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.questionText)\">\n {{questionItem?.questionText}}\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.additionalRichContent && qbItem.progressBar\" >\n <div\n class=\"nxt-additional \" [innerHTML]=\"innerhtml\">\n </div>\n </div>\n <div *ngIf=\"questionItem.additionalRichContent && !qbItem.progressBar\">\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?.progressBar,\n 'custom-select': !qbItem?.progressBar\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.options\" class=\"option\" value=\"{{ opt.value }}\">\n {{ opt.value }}\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 <span *ngIf=\"this.questionItem.error\" class=\"nxt-error-msg\"> {{ questionItem?.errorMessage }}</span>\n <div class=\"nxt-custom-radio-container\">\n <div *ngFor=\"let opt of questionItem.options\" \n [class]=\" this.questionItem.error ? 'nxt-custom-radio-option invalid' : 'nxt-custom-radio-option'\">\n <input\n type=\"radio\"\n [id]=\"opt.value\"\n [(ngModel)]=\"inpValue\"\n name=\"inpValue\"\n [value]=\"opt.value\"\n (change)=\"optionChange(opt.value)\"\n />\n <label class=\"nxt-radio-label\" [for]=\"opt.value\"> {{ opt.value }}</label>\n </div>\n </div>\n\n <!-- <div class=\"nxt-dis-flex\">\n <div *ngFor=\"let opt of questionItem.options.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\"\n (change)=\"optionChange(opt.value)\" />\n {{ opt.value }}\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?.errorMessage }}\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 }}</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 + ' 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\n <!-- RS 06JAN25 -->\n <!-- for rich text -->\n <div *ngIf=\"rtaFlag\">\n <div [class]=\"'col-md-' + questionItem?.size + ' paddingnone'\">\n <app-custom-rich-text\n [value]=\"inpValue\"\n [question]=\"questionItem\"\n [error]=\"questionItem?.error\"\n (textValueChange)=\"handleRichTextChange($event)\">\n </app-custom-rich-text>\n </div>\n </div>\n \n \n <!-- <div *ngIf=\"ques.type === 'RichTextArea'\">\n\n <app-custom-rich-text\n [value]=\"ques.input\"\n [rows]=\"3\"\n [error]=\"ques.error\" [placeholder]=\"ques.question \" \n (textValueChange)=\"handleRichTextChange($event)\">\n </app-custom-rich-text>\n</div> -->\n <!-- CC Number Format -->\n <!-- RS 09DEC24 Changed keys-->\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?.progressBar }\"\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 <!-- RS 09DEC24 Changed keys-->\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\n <div class=\"nxt-dis-flex\">\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\" [(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?.dateText }}</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?.timeText }}</label> -->\n <div class=\"nxt-dis-flex\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\n dateandTime: !qbItem?.progressBar}\" \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?.progressBar }\" *ngIf=\"questionItem?.x24Hours == 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.progressBar, 'dateandTime': !qbItem.progressBar}\"></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.progressBar\">\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 === 'File' &&\n !qbItem?.progressBar\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.progressBar\">\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?.questionText)\"> {{ questionItem?.questionText}}</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 <!-- RS 09DEC24 Changed keys-->\n <!-- Book -->\n <div *ngIf=\"bookFlag\">\n <div [class]=\"qbItem.isShengel ? '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 ? '' : 'nxt-myt-align3'\" [class]=\"qbItem.isShengel ? 'col-lg-' + ques.size + ' paddingnone' : 'col-md-' + ques.size + ' paddingnone'\"\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.id\">\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\">\n <span>{{ ques?.questionText }}</span>\n </div>\n <div class=\"col-md-12 paddingZero nxtmyt-dateTimeNew\" *ngIf=\"ques.type === 'Time' || ques.type === 'Date'\">\n <div *ngIf=\"ques.type === 'Date'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</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 === 'Time'\">\n <div class=\"col-md-12 paddingBottom\">\n <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\n <div class=\"dateandtime\">\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\n dateandTime: !qbItem?.progressBar}\" \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?.progressBar }\" *ngIf=\"questionItem.x24Hours == 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 === '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 === 'Label'\">\n <app-custom-label [labelStyle]=\"ques.title\" [labelValue]=\"ques.question\">\n </app-custom-label>\n </div>\n <div *ngIf=\"ques.type === 'Text'\">\n <label>{{ ques.questionText }}</label>\n <app-custom-input\n [value]=\"ques?.input\"\n [question]=\"ques\" \n [idValue]=\"ques?.trackingId\"\n [focusEvent]=\"clearSQError(ques?.id)\"\n [error]=\"ques?.error\"\n [placeholder]=\"ques?.question\"\n (inputValue)=\"selectedInput($event,ques)\">\n </app-custom-input>\n </div>\n <div *ngIf=\"ques.type === 'Location'\">\n <!-- for pick location -->\n <!-- HA10012024 Added Api key as input -->\n <app-pick-location [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\n </div>\n <!-- for text area -->\n <div *ngIf=\"ques.type === 'TextArea'\">\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.question \" (textareaValueChange)=\"handleTextareaValueChange($event)\"></app-custom-text-area>\n </div>\n\n <!-- Email -->\n <div *ngIf=\"ques.type === '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 }}\" />\n </div>\n\n <div *ngIf=\"ques.type === 'File'\">\n <div *ngIf=\"!qbItem.progressBar\">\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 === 'File' &&\n !qbItem.progressBar\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.progressBar\">\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 }}</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 === '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 === 'Dropdown'\" class=\"nxtdropdown\">\n <!-- for common dropdown -->\n <!-- HA 20DEC23 For Translation -->\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel\"\n [options]=\"ques.options\"\n [apiMeta]=\"ques.subText\"\n [id]=\"ques.Name\"\n [selectedValue]=\"ques.input\"\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\n [errorMessage]=\"ques?.errorMessage\"\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 + ' 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 }}</span>\n </div>\n <div *ngIf=\"ques.type === 'Text'\">\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\n 'nxt-dis-flex dt-line date-line nxtbookText boxoutline myt-font1': qbItem.progressBar,\n textBox: !qbItem.progressBar\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\"\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 <!--VD disabled -->\n <div class=\"backbutton\" \n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\" *ngIf=\"qbItem.back\">\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-left-bt': qbItem.progressBar,\n 'nxt-btn btn-primary':\n !qbItem.progressBar\n }\" (click)=\"handleBackClick()\">\n {{ qbItem?.back }}\n </button>\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\" >\n <div class=\"nxtbutton\">\n <!--VD disabled -->\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\n 'nxt-rusty': qbItem.progressBar,\n 'nxt-btn btn-primary':\n !qbItem.progressBar\n }\" (click)=\"handleNextClick()\">\n {{ qbItem.next }}\n </button>\n </div>\n </div>\n </div>\n</div>\n\n<!-- Summary -->\n<div *ngIf=\"this.abItem?.status === 'Completed'\" class=\"col-lg-12\" style=\"text-align: center;\">\n <h2>{{this.qbItem.summaryText}}</h2>\n <p>{{this.qbItem.summarySubText}}</p>\n</div>\n\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\n 'col-md-12':!qbItem.progressBar\n }\">\n <h1 class=\"nxt-header1 nxt-summarypadd\" >{{ qbItem.subTitle }}</h1> \n <div id=\"nxt-progress2\" *ngIf=\"!qbItem.progressBar && this.abItem.status != 'Completed' \">\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\n <div *ngFor=\"let qa of summary\">\n <div [ngClass]=\"{ non: qbItem.progressBar }\">\n <div [ngClass]=\"{ summary: !qbItem.progressBar }\">\n <div *ngIf=\"!qbItem.edit\"\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\n <p [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</p>\n </div>\n <!-- VD Question No added -->\n <div *ngIf=\"qbItem.edit\"\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\n <div [ngClass]=\"{ 'question': this.abItem.status === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\"><span>{{ qa.questionNumber }}</span>\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.questionText }}:<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.questionText }} <span></span>{{ qa.ansValue }}</div>\n <div *ngIf=\"qbItem.edit && this.abItem.status != '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\n\n <div id=\"nxt-progress2\" *ngIf=\"qbItem.progressBar \">\n <div [ngClass]=\"{'bgColor nxtsummary-top' : qbItem.progressBar }\" >\n <div id=\"nxt-progress-summary\" *ngIf=\"qbItem.progressBar\">\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.summaryText && qbItem.progressBar\" \n [ngClass]=\"{ summaryTitle: qbItem.progressBar }\">\n <h3 class=\"nxt-subTitle\" >{{ qbItem.summaryText }}</h3>\n <div *ngIf=\"abItem.status != 'Completed'\" class=\"nxt-subTitle1\" >{{ qbItem.summarySubText}}</div>\n </div>\n </div>\n <div *ngIf=\"!qbItem.progressBar\">\n <h3 class=\"summary-h\">\n {{ qbItem.summaryText }}\n </h3>\n </div>\n </div>\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\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.progressBar }\">\n <div class=\"summary\">\n <!-- <div *ngIf=\"!qbItem.edit\"\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\n <a [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\n </div>\n <div *ngIf=\"qbItem.edit\"\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.status === 'Completed' }\"\n [innerHTML]=\"getText(qa.quesValue)\">\n {{ qa.quesValue }}\n </div>\n </div> -->\n <div *ngIf=\"qbItem.edit && this.abItem.status != '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 == 'Completed' && qbItem.cancel\">\n <div class=\"col-md-12\">\n <button [ngClass]=\"{'btn-text': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\"\n (click)=\"handleCancelClick()\">\n {{ qbItem.cancel }}\n </button>\n </div>\n </div>\n </div> -->\n\n <!-- Group Actions -->\n <div class=\"align-edit-submit\" *ngIf=\"abItem.status != 'Completed'\">\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\n <div class=\"col-md-6\" *ngIf=\"qbItem.submit\">\n <button [ngClass]=\"{ 'btn-text2': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar }\" \n (click)=\"handleSubmitClick()\">\n {{ qbItem.submit }}\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\">\n <button [ngClass]=\"{'grey': qbItem.progressBar,\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\" \n (click)=\"handleBackClickNew()\">\n {{ qbItem.edit }}\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: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: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;padding-left:2px}.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;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"] }]
|
|
2365
|
+
args: [{ selector: "lib-questionnaire", encapsulation: ViewEncapsulation.None, providers: [ChangeService], template: "<!-- Spinner -->\r\n<ngx-spinner size=\"medium\" [name]=\"spinnerName\" [type]=\"spinnerType\"></ngx-spinner>\r\n<!-- custom loader -->\r\n<!-- <app-loader></app-loader> -->\r\n<!-- Back Processing -->\r\n<!-- <div *ngIf=\"backicon == false\" >\r\n <div class=\"backicon\" >\r\n <button (click)=\"handleBackClick()\" [class]=\" abItem?.status == 'Completed' ? 'summary-volver':'app-back1'\">\r\n <img class=\"icon-arrow-back\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-arrow-back.png\" alt=\"Scroll down\"> {{ qbItem?.back }}\r\n </button>\r\n </div>\r\n</div> -->\r\n\r\n<!-- Question Hanlding -->\r\n<!-- VD removed unwanted condition -->\r\n<!-- RS 09DEC24 Changed keys-->\r\n<div *ngIf=\"questionItem\" class=\"questiondiv1 padd-bottom\">\r\n <!-- Progress Bar & Title -->\r\n <div *ngIf=\"questionItem.title\">\r\n <h1>{{ questionItem?.title }}</h1>\r\n <div>{{ questionItem?.subTitle }}</div>\r\n </div>\r\n\r\n <!-- Progress & Grouping -->\r\n <div>\r\n <!-- Pie Chart Progress -->\r\n <div [ngClass]=\"{ bgColor: qbItem?.progressBar }\">\r\n <div id=\"nxt-progress\" *ngIf=\"qbItem?.progressBar\">\r\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\r\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\r\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \r\n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\r\n [startFromZero]=\"false\" [responsive]=\"false\" >\r\n </circle-progress>\r\n </div>\r\n </div>\r\n <!-- RS 09DEC24 Changed keys-->\r\n <!-- Show the Group/Module related to the Progress -->\r\n <div *ngIf=\"questionItem.groupName && qbItem.progressBar\"\r\n [ngClass]=\"{ questionalign: !qbItem?.progressBar }\">\r\n <div class=\"nxt-largeTitle\">\r\n <h3 class=\"myt-font6 myt-text3\">\r\n {{ questionItem?.groupName }}\r\n </h3>\r\n <div *ngIf=\"questionItem.subText != '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font5 myt-text1\">{{questionItem?.subText}}</div>\r\n <div *ngIf=\"questionItem.subText === '\u00BFEn qu\u00E9 pa\u00EDs ocurri\u00F3?'\" class=\"myt-font10 myt-text2\">{{questionItem?.subText}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- RS 09DEC24 Changed keys-->\r\n <!-- Question Handling -->\r\n <!-- VD 10Aug24- question no -->\r\n <div>\r\n <div *ngIf=\"questionItem.questionText\" style=\"display: flex;\">\r\n <span>{{questionItem?.questionNumber}}.</span>\r\n <p class=\"nxt-label\" [innerHTML]=\"getText(questionItem?.questionText)\">\r\n {{questionItem?.questionText}}\r\n </p>\r\n </div>\r\n <!-- Title -->\r\n <!-- <div *ngIf=\"questionItem.isTitle\">\r\n <div *ngIf=\"questionItem.type != 'Book' && questionItem.questionNumber!='6' && questionItem.questionNumber!='9'\"> \r\n <h3 class=\"questionalign myt-font3 myt-align myt-text4\" [innerHTML]=\"getText(questionItem?.questionText)\">\r\n {{questionItem?.questionText}}\r\n </h3>\r\n </div>\r\n </div> -->\r\n <!-- HA 31-JAN-24 Removed the unwanted styling class -->\r\n <!-- <div *ngIf=\"!questionItem.isTitle\" [class]=\"qbItem.isShengel ? 'header-style' : 'question-f-size'\">\r\n <div [innerHTML]=\"getText(questionItem?.questionText)\" >\r\n {{ questionItem?.questionText }}\r\n </div>\r\n </div> -->\r\n\r\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\r\n <!-- <div *ngIf=\"questionItem.type == 'Book'\">\r\n <div *ngIf=\"questionItem.questionNumber=='6'\">\r\n <h3 class=\"myt-321\" [innerHTML]=\"getText(questionItem?.questionText)\">\r\n {{ questionItem?.questionText }}\r\n </h3>\r\n </div>\r\n </div> -->\r\n \r\n <!-- This should be removed with Custom Styling - MR - 11AUG23 -->\r\n <!-- <div *ngIf=\"questionItem.type == 'File' \">\r\n <div *ngIf=\"questionItem.questionNumber=='9'\">\r\n <h3 class=\"myt-345\" [innerHTML]=\"getText(questionItem?.questionText)\">\r\n {{questionItem?.questionText}}\r\n </h3>\r\n </div>\r\n </div> -->\r\n </div>\r\n\r\n <!-- Additional Info -->\r\n <!-- The below code can be written effectively nested ngIf for Rich Text & Other onw for Progress Bar -->\r\n <div *ngIf=\"questionItem.additionalRichContent && qbItem.progressBar\" >\r\n <div\r\n class=\"nxt-additional \" [innerHTML]=\"innerhtml\">\r\n </div>\r\n </div>\r\n <div *ngIf=\"questionItem.additionalRichContent && !qbItem.progressBar\">\r\n <div class=\"info-alert ques-alert1\">\r\n <i class=\"fa fa-info fa-3x iposition icolor\" aria-hidden=\"true\"></i>\r\n <div class=\"infodiv\" [innerHTML]=\"innerhtml\"></div>\r\n </div>\r\n </div>\r\n\r\n <!-- Dropdown-->\r\n <div *ngIf=\"dropdownFlag\" >\r\n <div class=\"nxt-dis-flex\">\r\n <select class=\"nxtdropdown\"\r\n [ngClass]=\"{\r\n 'dt-line nxt-myt-align3 nxt-myt-align2 dpDown nxt-dropbox down1 myt-dropbox myt-border-r myt-font1': qbItem?.progressBar,\r\n 'custom-select': !qbItem?.progressBar\r\n }\" class=\"mr-sm-2 dd-height nxt-dropbox \" id=\"dropdown\" [(ngModel)]=\"inpValue\" (change)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem?.error ? 'red' : inpValue?.length > 0 ? '#fff' : ''\r\n }}\" style.color=\"{{ questionItem?.error ? 'red' : '' }}\">\r\n <option *ngFor=\"let opt of questionItem.options\" class=\"option\" value=\"{{ opt.value }}\">\r\n {{ opt.value }}\r\n </option>\r\n <!-- HA 20DEC23 For Translation -->\r\n <option value=\".\" disabled hidden>{{'pleaseMakeChoice' | i18n:i18nService.currentLanguage}}</option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <!--VD Radio update -->\r\n <div *ngIf=\"radioFlag || dataFlag\" class=\"\">\r\n <span *ngIf=\"this.questionItem.error\" class=\"nxt-error-msg\"> {{ questionItem?.errorMessage }}</span>\r\n <div class=\"nxt-custom-radio-container\">\r\n <div *ngFor=\"let opt of questionItem.options\" \r\n [class]=\" this.questionItem.error ? 'nxt-custom-radio-option invalid' : 'nxt-custom-radio-option'\">\r\n <input\r\n type=\"radio\"\r\n [id]=\"opt.value\"\r\n [(ngModel)]=\"inpValue\"\r\n name=\"inpValue\"\r\n [value]=\"opt.value\"\r\n (change)=\"optionChange(opt.value)\"\r\n />\r\n <label class=\"nxt-radio-label\" [for]=\"opt.value\"> {{ opt.value }}</label>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"nxt-dis-flex\">\r\n <div *ngFor=\"let opt of questionItem.options.records\" class=\"radio nxt-radioOption\">\r\n <label class=\"nxt-radiocontainer container myt-font4\">\r\n <input type=\"radio\" [id]=\"opt.id\" [(ngModel)]=\"inpValue\" name=\"inpValue\" [value]=\"opt.value\"\r\n (change)=\"optionChange(opt.value)\" />\r\n {{ opt.value }}\r\n </label>\r\n </div>\r\n </div> -->\r\n </div> \r\n <!-- Checkbox -->\r\n <div *ngIf=\"checkboxFlag\" class=\"\">\r\n <div *ngIf=\"questionItem?.error\" class=\"cond-div2\">\r\n {{ questionItem?.errorMessage }}\r\n </div>\r\n <div class=\"nxt-checkbox-container\">\r\n <div *ngFor=\"let item of optionValues\" class=\"nxt-checkbox-wrapper\">\r\n <label class=\"nxt-container1\">\r\n <input type=\"nxt-checkbox\" [id]=\"item.id\" [(ngModel)]=\"item.checked\" (click)=\"clearError()\" />\r\n <span class=\"nxt-checkbox-label\">{{ item.value }}</span>\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Text -->\r\n <div *ngIf=\"textFlag\">\r\n <!-- HA 31-JAN-24 To reduce the margin -->\r\n <div [class]=\"'col-md-' + questionItem?.size + ' paddingnone'\">\r\n <input class=\"nxt-input\" type=\"text\" [(ngModel)]=\"inpValue\" \r\n id=\"text-input-id\" required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem?.error\r\n ? 'red'\r\n : ''\r\n }}\" oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\r\n <!-- <i class=\"fa fa-check nxt-check-icon\" aria-hidden=\"true\" *ngIf=\"inpValue?.length > 0\"></i> -->\r\n </div>\r\n </div>\r\n\r\n <!-- Text Area -->\r\n <div *ngIf=\"taFlag\" >\r\n <div>\r\n <textarea class=\"nxt-input nxt-text-area\" id=\"ta-input-id\" [(ngModel)]=\"inpValue\" (click)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem?.error\r\n ? 'red'\r\n : inpValue?.length > 0 && taFocusOut\r\n ? '#87be1c'\r\n : ''\r\n }}\" (focusout)=\"taFocusOut = true\"\r\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\"></textarea>\r\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> -->\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- RS 06JAN25 -->\r\n <!-- for rich text -->\r\n <div *ngIf=\"rtaFlag\">\r\n <div [class]=\"'col-md-' + questionItem?.size + ' paddingnone'\">\r\n <app-custom-rich-text\r\n [value]=\"inpValue\"\r\n [question]=\"questionItem\"\r\n [error]=\"questionItem?.error\"\r\n (textValueChange)=\"handleRichTextChange($event)\">\r\n </app-custom-rich-text>\r\n </div>\r\n </div>\r\n \r\n \r\n <!-- <div *ngIf=\"ques.type === 'RichTextArea'\">\r\n\r\n <app-custom-rich-text\r\n [value]=\"ques.input\"\r\n [rows]=\"3\"\r\n [error]=\"ques.error\" [placeholder]=\"ques.question \" \r\n (textValueChange)=\"handleRichTextChange($event)\">\r\n </app-custom-rich-text>\r\n</div> -->\r\n <!-- CC Number Format -->\r\n <!-- RS 09DEC24 Changed keys-->\r\n <div *ngIf=\"numberFlag\" class=\"col-md-12\">\r\n <div class=\"nxt-dis-flex\">\r\n <input type=\"Text\" placeholder=\"0000 0000 0000 0000 0000 0000\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\"\r\n [(ngModel)]=\"inpValue\" id=\"number-input-id\" (ngModelChange)=\"CCOnChange($event)\" required=\"\" maxlength=\"29\"\r\n (focus)=\"clearError()\" oninput=\"this.value=this.value.replace(/[^0-9 ]/g,'');\"\r\n style=\"width:-webkit-fill-available;\" style.border-color=\"{{\r\n this.questionItem.error\r\n ? 'red'\r\n : inpValue?.length > 0\r\n ? '#87be1c'\r\n : ''\r\n }}\" />\r\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px;\"\r\n *ngIf=\"inpValue?.length > 0\"></i>\r\n </div>\r\n </div>\r\n <!-- END-->\r\n\r\n <!-- AlphaNumeric -->\r\n <div *ngIf=\"alphanumericFlag\" class=\"col-md-12\"> <!--UI not completed-->\r\n <div style=\"position:relative;\">\r\n <!-- HA 20DEC23 For Translation -->\r\n <input type=text placeholder=\"{{'zeroOfZero' | i18n:i18nService.currentLanguage}}\" style=\"padding:5px 5px 5px 150px;\" id=\"youridhere\"/>\r\n </div>\r\n </div>\r\n\r\n <!-- Email -->\r\n <!-- RS 09DEC24 Changed keys-->\r\n <div *ngIf=\"emailFlag\" class=\"col-md-12\">\r\n <div class=\"nxt-dis-flex\">\r\n <input type=\"email\" [ngClass]=\"{ boxoutline: qbItem?.progressBar }\" [(ngModel)]=\"inpValue\" id=\"email-input-id\"\r\n required=\"\" (focus)=\"clearError()\" style.border-color=\"{{\r\n this.questionItem.error\r\n ? 'red'\r\n : inpValue?.length > 0\r\n ? '#87be1c'\r\n : ''\r\n }}\" />\r\n <i class=\"fa fa-check\" aria-hidden=\"true\" style=\"color: #87be1c; margin-left: -2rem; z-index: 1; padding: 5px\"\r\n *ngIf=\"inpValue?.length > 0\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- DateTime -->\r\n <div *ngIf=\"dtFlag\" class=\"col-md-12 paddingZero nxtmyt-time1\" >\r\n <!-- Error Handling -->\r\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\r\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\r\n\r\n <!-- Date -->\r\n <div *ngIf=\"dateFlag\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <!-- HA 31-JAN-24 These labels were occuping the empty space when date question comes-->\r\n <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</label> -->\r\n <div class=\"nxt-dis-flex\">\r\n <!-- HA 20DEC23 For Translation -->\r\n <!-- HA 02FEB24 Additional param to update the question -->\r\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, questionItem)\"\r\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\">\r\n </my-date-picker>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Time -->\r\n <div *ngIf=\"timeFlag\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\r\n <div class=\"nxt-dis-flex\">\r\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\r\n dateandTime: !qbItem?.progressBar}\" \r\n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\r\n (focus)=\"(clearSQError) \">\r\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">HH</option>\r\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\r\n {{ hour }}\r\n </option>\r\n </select>\r\n <span class=\"colon\"> : </span>\r\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">MM</option>\r\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\r\n {{ minute }}\r\n </option>\r\n </select>\r\n <div [ngClass]=\"{ colon1: qbItem?.progressBar }\" *ngIf=\"questionItem?.x24Hours == false\">\r\n <span class=\"colon\"> : </span>\r\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\r\n <option value=\"AM\">AM</option>\r\n <option value=\"PM\">PM</option>\r\n </select>\r\n <!-- <div [ngClass]=\"{'': qbItem.progressBar, 'dateandTime': !qbItem.progressBar}\"></div> -->\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <i class=\"fa check-icon3\" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\r\n </div>\r\n </div>\r\n\r\n <!-- Attachment / File -->\r\n <div *ngIf=\"fileFlag\">\r\n <div *ngIf=\"!qbItem.progressBar\">\r\n <div class=\"info-alert\" style.border-color=\"{{ this.questionItem?.error ? 'red' : '' }}\">\r\n <label class=\"picture-upload\" for=\"file-upload\">\r\n <span class=\"picture-upload-child\">\r\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span class=\"fa fa-plus fa-2x picture-upload-child pic-upload icolor\">\r\n <i class=\"\" aria-hidden=\"true\"></i>\r\n </span>\r\n </label>\r\n </div>\r\n <input id=\"file-upload\" type=\"file\" accept=\"{{ allowedFileExtension }}\" (change)=\"uploadFile($event,this.questionItem)\" />\r\n </div>\r\n <ul *ngIf=\"\r\n attachments?.length > 0 &&\r\n questionItem?.type === 'File' &&\r\n !qbItem?.progressBar\r\n \" class=\"attach-ulist col-md-12\">\r\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\r\n {{ attachment.attachmentName}}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\r\n </li>\r\n </ul>\r\n\r\n <!-- Attachment Progress -->\r\n <div *ngIf=\"qbItem.progressBar\">\r\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\r\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\r\n <span class=\"uploading-file-name \">{{ attachment.attachmentName }}</span>\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\r\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\r\n </div>\r\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\r\n \r\n <!--<img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"icon-edit1\" />-->\r\n <span class=\"f-Name\" [innerHTML]=\"getText(questionItem?.questionText)\"> {{ questionItem?.questionText}}</span>\r\n <label class=\"file-label \">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/file-upload.png\" class=\"file-icon\"/>\r\n <!-- HA 20DEC23 For Translation -->\r\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\r\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event)\"\r\n class=\"file-upload-btn\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- RS 09DEC24 Changed keys-->\r\n <!-- Book -->\r\n <div *ngIf=\"bookFlag\">\r\n <div [class]=\"qbItem.isShengel ? 'form-group content-box' : 'form-group'\">\r\n <div class=\"form-row\">\r\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\r\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\r\n <div [class]=\"qbItem.isShengel ? '' : 'nxt-myt-align3'\" [class]=\"qbItem.isShengel ? 'col-lg-' + ques.size + ' paddingnone' : 'col-md-' + ques.size + ' paddingnone'\"\r\n *ngFor=\"let ques of subQuestions;let i = index\" [id]=\"ques.id\">\r\n <div [ngClass]=\"{ down2: qbItem?.progressBar }\">\r\n <span>{{ ques?.questionText }}</span>\r\n </div>\r\n <div class=\"col-md-12 paddingZero nxtmyt-dateTimeNew\" *ngIf=\"ques.type === 'Time' || ques.type === 'Date'\">\r\n <div *ngIf=\"ques.type === 'Date'\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <!-- <label class=\"date-time colorf\">{{ questionItem?.dateText }}</label> -->\r\n <div class=\"dateandtime\">\r\n <!-- HA 20DEC23 For Translation -->\r\n <!-- HA 02FEB24 Additional param to update the question -->\r\n <my-date-picker name=\"mydate\" [options]=\"myDatePickerOptions\" id=\"date\" style=\"font-size: 18px !important;\" (dateChanged)=\"onDateChanged($event, ques)\"\r\n [(ngModel)]=\"selDate\" class=\"date-picker\" placeholder=\"{{'selectDate' | i18n:i18nService.currentLanguage}}\" (focus)=\"clearError()\" >\r\n </my-date-picker>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"ques.type === 'Time'\">\r\n <div class=\"col-md-12 paddingBottom\">\r\n <!-- <label class=\"date-time colorf\">{{ questionItem?.timeText }}</label> -->\r\n <div class=\"dateandtime\">\r\n <div [ngClass]=\"{'dt-line date-line nxt-dt-time': qbItem?.progressBar,\r\n dateandTime: !qbItem?.progressBar}\" \r\n id=\"dateandTime\" [style.border-color]=\"questionItem?.error ? 'red': questionItem?.input?.length > 0 ? '' : ''\"\r\n (focus)=\"(clearSQError) \">\r\n <select name=\"hours\" class=\"datetime showHour nxtmyt-time myt-hour\" [(ngModel)]=\"selectedHour\" id=\"hour\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">HH</option>\r\n <option [value]=\"hour\" *ngFor=\"let hour of hours\">\r\n {{ hour }}\r\n </option>\r\n </select>\r\n <span class=\"colon\"> : </span>\r\n <select name=\"minutes\" class=\"datetime nxtshowminute nxtmyt-time\" [(ngModel)]=\"selectedMinute\" id=\"minute\"\r\n (focus)=\"clearError()\">\r\n <option value=\"\">MM</option>\r\n <option [value]=\"minute\" *ngFor=\"let minute of minutes\">\r\n {{ minute }}\r\n </option>\r\n </select>\r\n <div [ngClass]=\"{ colon1: qbItem?.progressBar }\" *ngIf=\"questionItem.x24Hours == false\">\r\n <span class=\"colon\"> : </span>\r\n <select name=\"AM/PM\" class=\"nxtmyt-time\" [(ngModel)]=\"selectedMeridiem\" id=\"meridiem\">\r\n <option value=\"AM\">AM</option>\r\n <option value=\"PM\">PM</option>\r\n </select>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"ques.type === 'DateTime'\">\r\n <app-custom-date-picker [minDate]=\"ques.minDate\" [date]=\"ques.input\" (dateChange)=\"displayDate($event,ques)\"></app-custom-date-picker>\r\n </div>\r\n <!-- VD to show lable-->\r\n <div *ngIf=\"ques.type === 'Label'\">\r\n <app-custom-label [labelStyle]=\"ques.title\" [labelValue]=\"ques.question\">\r\n </app-custom-label>\r\n </div>\r\n <div *ngIf=\"ques.type === 'Text'\">\r\n <label>{{ ques.questionText }}</label>\r\n <app-custom-input\r\n [value]=\"ques?.input\"\r\n [question]=\"ques\" \r\n [idValue]=\"ques?.trackingId\"\r\n [focusEvent]=\"clearSQError(ques?.id)\"\r\n [error]=\"ques?.error\"\r\n [placeholder]=\"ques?.question\"\r\n (inputValue)=\"selectedInput($event,ques)\">\r\n </app-custom-input>\r\n </div>\r\n <div *ngIf=\"ques.type === 'Location'\">\r\n <!-- for pick location -->\r\n <!-- HA10012024 Added Api key as input -->\r\n <app-pick-location [apiKey]=\"qbItem['apiKey']\" [address]=\"ques.input\" (locationSelected)=\"handleLocationSelected($event,ques)\"></app-pick-location>\r\n </div>\r\n <!-- for text area -->\r\n <div *ngIf=\"ques.type === 'TextArea'\">\r\n <app-custom-text-area [value]=\"ques.input\" [rows]=\"3\" [error]=\"ques.error\" [placeholder]=\"ques.question \" (textareaValueChange)=\"handleTextareaValueChange($event)\"></app-custom-text-area>\r\n </div>\r\n\r\n <!-- Email -->\r\n <div *ngIf=\"ques.type === 'Email'\">\r\n <input type=\"email\" [(ngModel)]=\"ques.input\" [id]=\"ques.id\" required=\"\" (focus)=\"clearSQError(ques.id)\"\r\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\" />\r\n </div>\r\n\r\n <div *ngIf=\"ques.type === 'File'\">\r\n <div *ngIf=\"!qbItem.progressBar\">\r\n <label class=\"picture-upload custom-file-upload bgcolor-w\" for=\"file-upload\">\r\n <span class=\"picture-upload-child\">\r\n <i class=\"fa fa-file-image-o fa-5x icolor\" aria-hidden=\"true\"></i>\r\n </span>\r\n <span class=\"\r\n fa fa-plus fa-2x\r\n picture-upload-child\r\n pic-upload\r\n icolor\r\n \">\r\n <i class=\"\" aria-hidden=\"true\"></i>\r\n </span>\r\n </label>\r\n <input id=\"file-upload\" type=\"file\" accept=\"{{ bookFlagAccept }}\" (change)=\"uploadFile($event,ques)\" />\r\n </div>\r\n\r\n <ul *ngIf=\"\r\n attachments?.length > 0 &&\r\n ques.type === 'File' &&\r\n !qbItem.progressBar\r\n \" class=\"attach-ulist col-md-12\">\r\n <li *ngFor=\"let attachment of attachments\" class=\"align-l\">\r\n {{ attachment.attachmentName\r\n }}<span class=\"attach-list\" (click)=\"deleteAttachment(attachment.attachmentId)\">X</span>\r\n </li>\r\n </ul>\r\n <div class=\"myt-box\" *ngIf=\"qbItem.progressBar\">\r\n\r\n <div *ngFor=\"let attachment of attachments\" class=\"nxtfile-uploading-box\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\r\n <span class=\"uploading-file-name myt-font1 font-weight: normal;\"> {{ attachment.attachmentName }}</span>\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-delete%402x.png\" class=\"deleteIcon\"\r\n (click)=\"deleteAttachment(attachment.attachmentId)\" />\r\n </div>\r\n <div class=\"nxtfile-upload-box\" style.border-color=\"{{ this.questionItem.error ? 'red' : '' }}\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%402x.png\" class=\"nxt-icon-edit1\" />\r\n <span class=\"f-Name\">{{ ques?.question }}</span>\r\n <label class=\"file-label \">\r\n <span style=\"color: #c5281c;text-decoration:underline\">\r\n {{'attach' | i18n:i18nService.currentLanguage}}\r\n </span>\r\n <!-- HA 20DEC23 For Translation -->\r\n <input name=\"attachment\" type=\"file\" placeholder=\"{{'toBuyTicket' | i18n:i18nService.currentLanguage}}\" multiple\r\n accept=\".pdf, .png, .jpg, .jpeg, .heic, .application/pdf\" (change)=\"uploadFile($event,ques)\"\r\n class=\"file-upload-btn\">\r\n </label>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Table -->\r\n <div *ngIf=\"ques.type === 'Table'\" class=\"\">\r\n <app-custom-table \r\n [question]=\"ques\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-table>\r\n </div>\r\n\r\n <!-- Dropdown -->\r\n <div *ngIf=\"ques.type === 'Dropdown'\" class=\"nxtdropdown\">\r\n <!-- for common dropdown -->\r\n <!-- HA 20DEC23 For Translation -->\r\n <app-custom-dropdown [fromShengel]=\"qbItem.isShengel\"\r\n [options]=\"ques.options\"\r\n [apiMeta]=\"ques.subText\"\r\n [id]=\"ques.Name\"\r\n [selectedValue]=\"ques.input\"\r\n placeholder=\"---{{'select' | i18n:i18nService.currentLanguage}}---\"\r\n [errorMessage]=\"ques?.errorMessage\"\r\n [error]=\"ques?.error\"\r\n (valueChange)=\"childEventCapture($event, ques); clearSQError(ques.id)\">\r\n </app-custom-dropdown>\r\n <app-dropdown-with-flag *ngIf=\"ques.isDependentPicklist && !ques.dropDownOnly\" [certified]=\"ques.certifiedFlag\" [JobPerformerCertificates]=\"ques.certificateList\" (flagDropDownChange)=\"dependentChange($event)\"></app-dropdown-with-flag>\r\n <i class=\"fa fa-check \" aria-hidden=\"true\" *ngIf=\"questionItem?.input?.length > 0\"></i>\r\n </div> \r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--List start-->\r\n <div *ngIf=\"listFlag\">\r\n <div class=\"form-group\">\r\n <div class=\"form-row\">\r\n <div class=\"col-md-12\" *ngIf=\"questionItem.error\" style=\"font-size: 18px;\r\n color: red;\">{{questionItem?.error?.errorMsg}}</div>\r\n <div class=\"nxt-myt-align3\" [class]=\"'col-md-' + ques.size + ' paddingnone'\"\r\n *ngFor=\"let ques of getLocalSubQuestions(questionItem.id);let i = index\">\r\n <div>\r\n <span class=\"nxt-dis-flex myt-font3 myt-font7\">{{ ques?.question }}</span>\r\n </div>\r\n <div *ngIf=\"ques.type === 'Text'\">\r\n <input type=\"text\" [(ngModel)]=\"ques.input\" [ngClass]=\"{\r\n 'nxt-dis-flex dt-line date-line nxtbookText boxoutline myt-font1': qbItem.progressBar,\r\n textBox: !qbItem.progressBar\r\n }\" id=\"text\" [id]=\"ques.uniqueSubQId\" required=\"\" (focus)=\"clearLocalSubQuesError(ques)\"\r\n style.border-color=\"{{ ques.error ? 'red' : '' }}\" placeholder=\"{{ ques.question }}\"\r\n oninput=\"this.value=this.value.replace(/[^a-zA-Z0-9\\s.:;,?]/g,'');\" />\r\n </div>\r\n </div>\r\n <div class=\"\" *ngIf=\"addFlag\">\r\n <!-- HA 20DEC23 For Translation -->\r\n <button (click)=\"Add(getLocalSubQuestions(questionItem.id))\" class=\"btn\"><i class=\"fa fa-plus\" ></i>{{'add' | i18n:i18nService.currentLanguage}}</button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <!--List End-->\r\n\r\n <!-- Actions -->\r\n <!-- VD button condition removed-->\r\n <div class=\"flexer\">\r\n <!-- Backward / Back -->\r\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\r\n <!--VD disabled -->\r\n <div class=\"backbutton\" \r\n [style.visibility]=\"questionStack.length > 0 ? 'visible' : 'hidden'\" *ngIf=\"qbItem.back\">\r\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\r\n 'nxt-left-bt': qbItem.progressBar,\r\n 'nxt-btn btn-primary':\r\n !qbItem.progressBar\r\n }\" (click)=\"handleBackClick()\">\r\n {{ qbItem?.back }}\r\n </button>\r\n </div>\r\n\r\n <!-- Forward / Next -->\r\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\r\n <div *ngIf=\"qbItem.next\" >\r\n <div class=\"nxtbutton\">\r\n <!--VD disabled -->\r\n <button [disabled]=\"isButtonDisabled\" [ngClass]=\"{\r\n 'nxt-rusty': qbItem.progressBar,\r\n 'nxt-btn btn-primary':\r\n !qbItem.progressBar\r\n }\" (click)=\"handleNextClick()\">\r\n {{ qbItem.next }}\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<!-- Summary -->\r\n<div *ngIf=\"this.abItem?.status === 'Completed'\" class=\"col-lg-12\" style=\"text-align: center;\">\r\n <h2>{{this.qbItem.summaryText}}</h2>\r\n <p>{{this.qbItem.summarySubText}}</p>\r\n</div>\r\n\r\n<div *ngIf=\"summary && summary.length > 0\" height=\"100% !important\" class=\"col-md-12\" [ngClass]=\"{\r\n 'col-md-12':!qbItem.progressBar\r\n }\">\r\n <h1 class=\"nxt-header1 nxt-summarypadd\" >{{ qbItem.subTitle }}</h1> \r\n <div id=\"nxt-progress2\" *ngIf=\"!qbItem.progressBar && this.abItem.status != 'Completed' \">\r\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\r\n <div *ngFor=\"let qa of summary\">\r\n <div [ngClass]=\"{ non: qbItem.progressBar }\">\r\n <div [ngClass]=\"{ summary: !qbItem.progressBar }\">\r\n <div *ngIf=\"!qbItem.edit\"\r\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\r\n <p [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\r\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</p>\r\n </div>\r\n <!-- VD Question No added -->\r\n <div *ngIf=\"qbItem.edit\"\r\n [ngClass]=\"{ 'question': this.abItem.status != 'Completed' }\">\r\n <div [ngClass]=\"{ 'question': this.abItem.status === 'Completed' }\"\r\n [innerHTML]=\"getText(qa.quesValue)\"><span>{{ qa.questionNumber }}</span>\r\n {{ qa.quesValue }}\r\n </div>\r\n </div>\r\n <div class=\"nxt-answer\" >\r\n <div *ngIf=\"qa.qTyp === 'File'\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\r\n {{ qa.ansValue }}\r\n </div>\r\n <!-- HA 02FEB24 Displaying the in summary for book type -->\r\n <div *ngIf=\"qa.qTyp == 'Book'\">\r\n <div *ngFor=\"let val of qa.myVal\">\r\n <p>{{ val.questionText }}:<span>{{ val.input }}</span></p>\r\n </div>\r\n </div>\r\n <!-- HA 02FEB24 Displaying the value for direct question -->\r\n <div *ngIf=\"qa.qTyp != 'File' && qa.qTyp != 'Book'\">{{ qa.questionText }} <span></span>{{ qa.ansValue }}</div>\r\n <div *ngIf=\"qbItem.edit && this.abItem.status != 'Completed'\" style=\"background: #dedddd;\">\r\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\r\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\"/>\r\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n\r\n <div id=\"nxt-progress2\" *ngIf=\"qbItem.progressBar \">\r\n <div [ngClass]=\"{'bgColor nxtsummary-top' : qbItem.progressBar }\" >\r\n <div id=\"nxt-progress-summary\" *ngIf=\"qbItem.progressBar\">\r\n <circle-progress class=\"titlebar\" [percent]=\"this.percent\" [radius]=\"40\" [space]=\"-4\" [outerStrokeWidth]=\"4\"\r\n [innerStrokeWidth]=\"4\" [outerStrokeColor]=\"'#e0b1b0'\" [innerStrokeColor]=\"'#e7e8ea'\" [animation]=\"true\" [backgroundPadding]= \"0\"\r\n [backgroundColor]= \"'#dd2e13'\" [backgroundGradientStopColor]=\"'#f9bfbd'\" [titleColor]=\"'#f3eded'\" \r\n class=\"ng-star-inserted\" [title]=\"this.percent+'%'\" [showSubtitle]=\"false\" [showBackground]=\"true\" [animationDuration]=\"300\"\r\n [startFromZero]=\"false\" [responsive]=\"false\" >\r\n </circle-progress>\r\n \r\n <div *ngIf=\"qbItem.summaryText && qbItem.progressBar\" \r\n [ngClass]=\"{ summaryTitle: qbItem.progressBar }\">\r\n <h3 class=\"nxt-subTitle\" >{{ qbItem.summaryText }}</h3>\r\n <div *ngIf=\"abItem.status != 'Completed'\" class=\"nxt-subTitle1\" >{{ qbItem.summarySubText}}</div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"!qbItem.progressBar\">\r\n <h3 class=\"summary-h\">\r\n {{ qbItem.summaryText }}\r\n </h3>\r\n </div>\r\n </div>\r\n <div [ngClass]=\"{ 'full-summary': qbItem.progressBar }\">\r\n <div class=\"summary-groupText myt-font2\">\r\n <!-- <p>Informe de da\u00F1o</p> -->\r\n </div>\r\n <div *ngFor=\"let qa of summary\" >\r\n <div [ngClass]=\"{ non: qbItem.progressBar }\">\r\n <div class=\"summary\">\r\n <!-- <div *ngIf=\"!qbItem.edit\"\r\n [ngClass]=\"{ 'question sum-ques myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\r\n <a [ngClass]=\"{ asum: this.abItem.status === 'Completed' }\" (click)=\"handleEditClick(qa.quesId)\"\r\n [innerHTML]=\"getText(qa.quesValue)\">{{ qa.quesValue }}</a>\r\n </div>\r\n <div *ngIf=\"qbItem.edit\"\r\n [ngClass]=\"{ 'sum-ques question myt-font3 myt-font8': this.abItem.status != 'Completed' }\">\r\n <div [ngClass]=\"{ 'sum-ques1 question1 summary-completed myt-font3 myt-font8': this.abItem.status === 'Completed' }\"\r\n [innerHTML]=\"getText(qa.quesValue)\">\r\n {{ qa.quesValue }}\r\n </div>\r\n </div> -->\r\n <div *ngIf=\"qbItem.edit && this.abItem.status != 'Completed'\" style=\"background: #dedddd;\">\r\n <button class=\"nxt-edit\" (click)=\"handleEditClick(qa.quesId)\">\r\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\"/>\r\n <img *ngIf=\"deviceInfo.os !== 'iOS'\" src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-edit%402x.png\" class=\"nxt-icon-edit\" />\r\n </button>\r\n </div>\r\n \r\n <div class=\"nxt-answer\">\r\n <div *ngIf=\"qa.qTyp === 'File'\">\r\n <img src=\"https://rnxt.s3.amazonaws.com/MytIcon/icon-doc-img%401.png\" class=\"nxt-icon-edit-summary\" />\r\n {{ qa.ansValue }}\r\n </div>\r\n <div *ngIf=\"qa.qTyp != 'File'\">\r\n {{ qa.ansValue }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"flexer1\" *ngIf=\"abItem\">\r\n <div class=\"\" *ngIf=\"abItem.status == 'Completed' && qbItem.cancel\">\r\n <div class=\"col-md-12\">\r\n <button [ngClass]=\"{'btn-text': qbItem.progressBar,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\"\r\n (click)=\"handleCancelClick()\">\r\n {{ qbItem.cancel }}\r\n </button>\r\n </div>\r\n </div>\r\n </div> -->\r\n\r\n <!-- Group Actions -->\r\n <div class=\"align-edit-submit\" *ngIf=\"abItem.status != 'Completed'\">\r\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\r\n <div class=\"col-md-6\" *ngIf=\"qbItem.submit\">\r\n <button [ngClass]=\"{ 'btn-text2': qbItem.progressBar,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar }\" \r\n (click)=\"handleSubmitClick()\">\r\n {{ qbItem.submit }}\r\n </button>\r\n </div>\r\n <!-- HA 02FEB24 Hiding the button when there is no value from the backend -->\r\n <!-- <div class=\"col-md-6\" *ngIf=\"qbItem.edit\">\r\n <button [ngClass]=\"{'grey': qbItem.progressBar,\r\n 'nxt-btn btn-primary btn-lg btn-block btn-back-color': !qbItem.progressBar}\" \r\n (click)=\"handleBackClickNew()\">\r\n {{ qbItem.edit }}\r\n </button>\r\n </div> -->\r\n </div>\r\n\r\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: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: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;padding-left:2px}.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;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"] }]
|
|
2366
2366
|
}], ctorParameters: () => [{ 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: [{
|
|
2367
2367
|
type: Input
|
|
2368
2368
|
}], insuranceStartDate: [{
|
|
@@ -2384,4 +2384,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
2384
2384
|
}], handleSubmit: [{
|
|
2385
2385
|
type: Output
|
|
2386
2386
|
}] } });
|
|
2387
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvcXVlc3Rpb25uYWlyZS9xdWVzdGlvbm5haXJlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbm5haXJlL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FHbEIsTUFBTSxlQUFlLENBQUM7QUFTdkIsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTlELE9BQU8sRUFDTCxRQUFRLEVBR1IsYUFBYSxFQUViLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLGFBQWEsRUFDZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUVMLFVBQVUsRUFNVixNQUFNLEVBRVAsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVd0QixNQUFNLE9BQU8sc0JBQXNCO0lBNE12QjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBRUE7SUFFRDtJQXROQSxJQUFJLENBQVM7SUFDYixrQkFBa0IsQ0FBUztJQUMzQixJQUFJLENBQVM7SUFDYixHQUFHLENBQVM7SUFDWixHQUFHLENBQVMsQ0FBQyw4QkFBOEI7SUFDMUMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDakMsVUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lB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QWdCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2xELGdCQUFnQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUMxRCxnQkFBZ0IsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7WUFDbEUsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2xELGdCQUFnQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNwRCxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDMUQsZ0JBQWdCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQzlELGdCQUFnQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUNsRSxnQkFBZ0IsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7WUFDbEUsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzVELGdCQUFnQixDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztZQUN0RSxnQkFBZ0IsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDO1lBQ3BGLGdCQUFnQixDQUFDLFlBQVksR0FBRyxFQUFFLEdBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQy9ELGdCQUFnQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNwRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDbEQsQ0FBQztRQUNMLDRDQUE0QztRQUM1Qyx1Q0FBdUM7UUFDdkMscUNBQXFDO1FBQ3JDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7UUFDNUIsNkNBQTZDO1FBQzdDLGtDQUFrQztJQUNsQyxDQUFDO0lBRUQsV0FBVyxDQUFDLFFBQXVCLEVBQUUsS0FBYTtRQUNoRCxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZELElBQUksTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsSUFBSSxJQUFJLEdBQWtCLElBQUksYUFBYSxFQUFFLENBQUM7UUFDOUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUIsK0VBQStFO1FBQy9FLElBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxLQUFLLEVBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDaEQsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2xCLENBQUM7YUFBSSxDQUFDO1lBQ0osSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUUvQixJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBQyxJQUFJLENBQUMsQ0FBQztRQUNqRCxpQ0FBaUM7SUFDbkMsQ0FBQztJQUVELGFBQWEsQ0FBQyxZQUFvQixFQUFFLEtBQWE7UUFDL0MsMkJBQTJCO1FBQzNCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdEQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBRWpCLEtBQUksSUFBSSxDQUFDLEdBQUMsQ0FBQyxFQUFFLENBQUMsR0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFDLENBQUM7WUFDOUIsSUFBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLEtBQUssRUFBQyxDQUFDO2dCQUN2QixRQUFRLEVBQUUsQ0FBQztZQUNiLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBRyxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxJQUFJLFFBQVEsR0FBRSxDQUFDLEVBQUMsQ0FBQztZQUM3RCxJQUFJLE9BQU8sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsWUFBWSxLQUFLLFlBQVksQ0FBQyxDQUFBO1lBQ3RFLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BELFFBQVEsRUFBRSxDQUFDO1FBQ2IsQ0FBQztJQUNILENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxFQUFVO1FBQzdCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVELCtDQUErQztJQUNoRCxHQUFHLENBQUMsUUFBdUI7UUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBSSxLQUFLLENBQUM7UUFDdEIsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2RCxJQUFJLEtBQUssR0FBSSxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFJLENBQUMsQ0FBQyxjQUFjLENBQUM7UUFFcEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUMxQyxJQUFJLElBQUksR0FBa0IsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUM5QyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNqQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDbEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUMsSUFBSSxDQUFDLENBQUM7UUFDakQsQ0FBQztRQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxRQUFhLEVBQUMsSUFBUTtRQUMzQyxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQztJQUN4QixDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQVMsRUFBRSxJQUFRO1FBQy9CLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3JCLENBQUM7SUFFRCx5QkFBeUIsQ0FBQyxLQUFhO1FBQ3JDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUNELE9BQU8sQ0FBQyxJQUFRO1FBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFTO1FBQ3pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxXQUFXLENBQUMsWUFBaUIsRUFBQyxJQUFRO1FBQ3BDLHdFQUF3RTtRQUN4RSxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFHLHFCQUFxQixDQUFDLENBQUMsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0csQ0FBQztJQUVELE1BQU0sQ0FBQyxJQUFTO1FBQ2QsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxRQUFRLENBQUMsSUFBUztRQUNoQixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsQ0FBQzt3R0FyN0VXLHNCQUFzQjs0RkFBdEIsc0JBQXNCLG1UQUh0QixDQUFDLGFBQWEsQ0FBQywrQ0N0RDVCLHFocUNBOHZCTTs7NEZEcnNCTyxzQkFBc0I7a0JBUGxDLFNBQVM7K0JBQ0UsbUJBQW1CLGlCQUVkLGlCQUFpQixDQUFDLElBQUksYUFDMUIsQ0FBQyxhQUFhLENBQUM7eVhBSWpCLElBQUk7c0JBQVosS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIE9uQ2hhbmdlcyxcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBFbGVtZW50UmVmLFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcbmltcG9ydCB7IFNhbGVzZm9yY2VTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NhbGVzZm9yY2Uuc2VydmljZVwiO1xuaW1wb3J0IHsgSU15RGF0ZU1vZGVsLCBJTXlEcE9wdGlvbnMgfSBmcm9tIFwibXlkYXRlcGlja2VyXCI7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcbmltcG9ydCB7IFVudHlwZWRGb3JtQnVpbGRlciB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xuaW1wb3J0IHsgTmd4U3Bpbm5lclNlcnZpY2UgfSBmcm9tIFwibmd4LXNwaW5uZXJcIjtcbi8vaW1wb3J0IHsgTmd4SW5kZXhlZERCU2VydmljZSwgSW5kZXhEZXRhaWxzfSBmcm9tICduZ3gtaW5kZXhlZC1kYic7XG5pbXBvcnQgeyBEZXZpY2VEZXRlY3RvclNlcnZpY2UgfSBmcm9tICduZ3gtZGV2aWNlLWRldGVjdG9yJztcbmltcG9ydCAqIGFzIG1vbWVudCBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2hhbmdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NoYW5nZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNoYXJlZFNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2hhcmVkLnNlcnZpY2VcIjtcbmltcG9ydCB7XG4gIFF1ZXN0aW9uLFxuICBRdWVzdGlvbkJvb2ssXG4gIEFuc3dlckJvb2ssXG4gIEFuc3dlcldyYXBwZXIsXG4gIE9wdGlvbixcbiAgT3B0aW9uVmFsdWUsXG4gIEF0dGFjaG1lbnRXcmFwcGVyLFxuICBBdHRhY2htZW50LFxuICBMb2NhbFF1ZXN0aW9uXG59IGZyb20gXCIuLi8uLi93cmFwcGVyXCI7XG5pbXBvcnQgeyBFcnJvcldyYXBwZXIgfSBmcm9tIFwiLi4vLi4vbW9kZWwvZXJyb3JXcmFwcGVyXCI7XG5pbXBvcnQge1xuICBURVNUUVVFU1RJT04sXG4gIERUUVVFU1RJT04sXG4gIEZJTEVRVUVTVElPTixcbiAgVEFRVUVTVElPTixcbiAgUkFESU9RVUVTVElPTixcbiAgQ0hFQ0tRVUVTVElPTixcbiAgQk9PS1FVRVNUSU9OLFxuICBURVNUUUIsXG4gIFJUQVFVRVNUSU9OIC8vUlMgMDZKQU4yNVxufSBmcm9tIFwiLi4vLi4vc2FtcGxlXCI7XG5pbXBvcnQgeyBmcm9tIH0gZnJvbSBcInJ4anNcIjtcbi8vIEhBIDE5REVDMjMgaW1wb3J0ZWQgdHJhbnNsYXRpb24gc2VydmljZVxuaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vaTE4bi5zZXJ2aWNlXCI7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6IFwibGliLXF1ZXN0aW9ubmFpcmVcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9xdWVzdGlvbm5haXJlLmNvbXBvbmVudC5odG1sXCIsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHByb3ZpZGVyczogW0NoYW5nZVNlcnZpY2VdLFxuICBzdHlsZVVybHM6IFtcIi4vcXVlc3Rpb25uYWlyZS5jb21wb25lbnQuY3NzXCJdLFxufSlcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbm5haXJlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQElucHV0KCkgcWJJZDogc3RyaW5nO1xuICBASW5wdXQoKSBpbnN1cmFuY2VTdGFydERhdGU6IHN0cmluZztcbiAgQElucHV0KCkgc2Vydjogc3RyaW5nO1xuICBASW5wdXQoKSB0a246IHN0cmluZztcbiAgQElucHV0KCkgYXBpOiBzdHJpbmc7IC8vIFZEIGdldHRpbmcgdGhlIGFwaSBhcyBpbnB1dFxuICBAT3V0cHV0KCkgaGFuZGxlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBoYW5kbGVQYWdlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGhhbmRsZVF1ZXN0aW9uOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGhhbmRsZUJvb2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgaGFuZGxlU3VibWl0OiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwYXJhbXM6IFBhcmFtcztcbiAgcHVibGljIGRldmljZUluZm8gPSBudWxsO1xuICBwdWJsaWMgYWJJdGVtOiBBbnN3ZXJCb29rO1xuICBwdWJsaWMgcWJJdGVtOiBRdWVzdGlvbkJvb2s7XG4gIHB1YmxpYyBxdWVzdGlvbkl0ZW06IFF1ZXN0aW9uO1xuICBwdWJsaWMgYW5zd2VyV3JhcDogQW5zd2VyV3JhcHBlcjtcbiBcbiAgLy8gQ09ORElUSU9OQUwgVFlQRVNcbiAgcHVibGljIHJhZGlvRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZGF0YUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiBcbiAgLy8gT1BUSU9OT05MWSBUWVBFU1xuICBwdWJsaWMgZHJvcGRvd25GbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBjaGVja2JveEZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiBcbiAgLy8gVU5DT05ESVRJT05BTCBUWVBFU1xuICBwdWJsaWMgdGV4dEZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHRhRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgcnRhRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZHRGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyB0aW1lRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZGF0ZUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGZpbGVGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBlbWFpbEZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIG51bWJlckZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGFscGhhbnVtZXJpY0ZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGJvb2tGbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBsaXN0RmxhZzogYm9vbGVhbj0gZmFsc2U7XG4gIC8vQmFjayBidXR0b25cbiAgcHVibGljIGJhY2tCdXR0b25GbGFnOiBib29sZWFuID0gZmFsc2U7XG4gIC8vIFZEIGRpc2FibGVkXG4gIHB1YmxpYyBpc0J1dHRvbkRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBvcHRpb25WYWx1ZXM6IE9wdGlvblZhbHVlW10gPSBbXTtcbiAgcHVibGljIHN1YlF1ZXN0aW9uczogUXVlc3Rpb25bXSA9IFtdO1xuICBwdWJsaWMgaW5wVmFsdWU6IHN0cmluZztcbiAgcHVibGljIGFuc3dlck1hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIGRhdGVNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBzZWxlY3RlZGhvdXJNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBzZWxlY3RlZG1pbnV0ZU1hcCA9IG5ldyBNYXAoKTtcbiAgcHVibGljIGF0dGFjaG1lbnRzTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgc3FPcHRpb25zID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgc3ViQW5zTWFwID0gbmV3IE1hcCgpO1xuICBwdWJsaWMgbG9jYWxTdWJRdWVzdGlvbnM6IExvY2FsUXVlc3Rpb25bXSA9IFtdO1xuICBwdWJsaWMgcXVlc3Rpb25TdGFjayA9IFtdO1xuICBwdWJsaWMgcXVlc3Rpb25OYW1lID0gW107XG4gIHB1YmxpYyBhdHRhY2htZW50czogYW55W10gPSBbXTtcbiAgcHVibGljIGF0dGFjaG1lbnRJZExpc3Q6IGFueVtdID0gW107XG4gIHB1YmxpYyBhdHRhY2htZW50SWQ6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBhdHRhY2htZW50OiBhbnk7XG4gIHB1YmxpYyBhbGxvd2VkRmlsZUV4dGVuc2lvbjogc3RyaW5nW107XG4gIHB1YmxpYyBmaWxlRXhjZWVkZWRMaW1pdDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgZmlsZVR5cGVJbmNvcnJlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGJhY2s6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGJhY2tpY29uOiBib29sZWFuID0gdHJ1ZTtcbiAgcHVibGljIGNoZWNrOiBib29sZWFuO1xuICBwdWJsaWMgcG9wOiBib29sZWFuO1xuICBwdWJsaWMgbG9jYWxEYXRlOiBzdHJpbmc7XG4gIHB1YmxpYyBjdXJyZW50TmFtZTogc3RyaW5nO1xuICBwdWJsaWMgcGF0aHF1ZXN0aW9uOiBudW1iZXI7XG4gIHB1YmxpYyBwZXJjZW50OiBudW1iZXI7XG4gIHB1YmxpYyBjb3VudDogbnVtYmVyO1xuICBwdWJsaWMgdGFGb2N1c091dDogYm9vbGVhbiA9IGZhbHNlO1xuICBwdWJsaWMgbm90VmFsaWRBY2NOdW06IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIHNwbENDQmFja0NsaWNrOiBib29sZWFuID0gZmFsc2U7XG4gIHB1YmxpYyBzdW1tYXJ5ID0gW107XG4gIHB1YmxpYyBsb2NhbFN1YlFNYXAgPSBuZXcgTWFwKCk7XG4gIHB1YmxpYyBrZXlJbmRleDogbnVtYmVyID0gMDtcbiAgLy9wdWJsaWMgc3F1ZXM6IHN0cmluZztcbiAgcHVibGljIHNlbERhdGU6IGFueSA9IHt9O1xuICBwdWJsaWMgc2VsZWN0RGF0ZTogc3RyaW5nO1xuICBwcml2YXRlIHRvZGF5OiBEYXRlID0gbmV3IERhdGUoKTtcbiAgcHJpdmF0ZSBlbDogSFRNTEVsZW1lbnQ7XG4gIHB1YmxpYyBpbm5lcmh0bWw6IGFueTtcbiAgcHVibGljIHBvc3NpYmlsaXRpZXM6IGFueTtcbiAgcHVibGljIGlubmVyaHRtbDE6IGFueTtcbiAgcHVibGljIHN1bW1hcnlEYXRhID1bXTtcbiBcbiAgcHVibGljIGhvdXJzOiBhbnlbXSA9IFtcbiAgICBcIjAxXCIsXG4gICAgXCIwMlwiLFxuICAgIFwiMDNcIixcbiAgICBcIjA0XCIsXG4gICAgXCIwNVwiLFxuICAgIFwiMDZcIixcbiAgICBcIjA3XCIsXG4gICAgXCIwOFwiLFxuICAgIFwiMDlcIixcbiAgICBcIjEwXCIsXG4gICAgXCIxMVwiLFxuICAgIFwiMTJcIixcbiAgXTtcbiBcbiAgcHVibGljIG1pbnV0ZXM6IHN0cmluZ1tdID0gW1xuICAgIFwiMDBcIixcbiAgICBcIjAxXCIsXG4gICAgXCIwMlwiLFxuICAgIFwiMDNcIixcbiAgICBcIjA0XCIsXG4gICAgXCIwNVwiLFxuICAgIFwiMDZcIixcbiAgICBcIjA3XCIsXG4gICAgXCIwOFwiLFxuICAgIFwiMDlcIixcbiAgICBcIjEwXCIsXG4gICAgXCIxMVwiLFxuICAgIFwiMTJcIixcbiAgICBcIjEzXCIsXG4gICAgXCIxNFwiLFxuICAgIFwiMTVcIixcbiAgICBcIjE2XCIsXG4gICAgXCIxN1wiLFxuICAgIFwiMThcIixcbiAgICBcIjE5XCIsXG4gICAgXCIyMFwiLFxuICAgIFwiMjFcIixcbiAgICBcIjIyXCIsXG4gICAgXCIyM1wiLFxuICAgIFwiMjRcIixcbiAgICBcIjI1XCIsXG4gICAgXCIyNlwiLFxuICAgIFwiMjdcIixcbiAgICBcIjI4XCIsXG4gICAgXCIyOVwiLFxuICAgIFwiMzBcIixcbiAgICBcIjMxXCIsXG4gICAgXCIzMlwiLFxuICAgIFwiMzNcIixcbiAgICBcIjM0XCIsXG4gICAgXCIzNVwiLFxuICAgIFwiMzZcIixcbiAgICBcIjM3XCIsXG4gICAgXCIzOFwiLFxuICAgIFwiMzlcIixcbiAgICBcIjQwXCIsXG4gICAgXCI0MVwiLFxuICAgIFwiNDJcIixcbiAgICBcIjQzXCIsXG4gICAgXCI0NFwiLFxuICAgIFwiNDVcIixcbiAgICBcIjQ2XCIsXG4gICAgXCI0N1wiLFxuICAgIFwiNDhcIixcbiAgICBcIjQ5XCIsXG4gICAgXCI1MFwiLFxuICAgIFwiNTFcIixcbiAgICBcIjUyXCIsXG4gICAgXCI1M1wiLFxuICAgIFwiNTRcIixcbiAgICBcIjU1XCIsXG4gICAgXCI1NlwiLFxuICAgIFwiNTdcIixcbiAgICBcIjU4XCIsXG4gICAgXCI1OVwiLFxuICBdO1xuIFxuICBwdWJsaWMgc2VsZWN0ZWRIb3VyOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgc2VsZWN0ZWRNaW51dGU6IHN0cmluZyA9IFwiXCI7XG4gIHB1YmxpYyBzZWxlY3RlZE1lcmlkaWVtOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgdmFsdWVOYW1lOiBzdHJpbmcgPSBcIlwiO1xuICBwdWJsaWMgdmFsdWVOYW1lMTogc3RyaW5nID0gXCJcIjtcbiAgcHVibGljIGJvb2tGbGFnQWNjZXB0OiBzdHJpbmdbXTtcbiAgcHVibGljIHJlY29yZElkOiBzdHJpbmc7XG4gIHB1YmxpYyBjdXJyZW50UXVlc3Rpb25JZDogc3RyaW5nO1xuICBwdWJsaWMgc3Bpbm5lclR5cGU6IHN0cmluZztcbiAgcHVibGljIHNwaW5uZXJOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyBuZXh0VmFsdWU6c3RyaW5nID0nJztcbiBcbiAgc3RhcnRfZGF0ZT86IGFueTtcbiBcbiAgLy9zZWFyY2ggY29tcG9uZW50XG4gIHB1YmxpYyB0ZW1wb0FkZHJlc3M6IGFueVtdID0gW107XG4gIHB1YmxpYyBzZWxlY3RlZFZhbHVlOiBzdHJpbmc7XG4gIHB1YmxpYyBzZWxlY3RlZFBvc3RhbGNvZGU6IHN0cmluZztcbiAgcHVibGljIHNlbGVjdGVkUHJvdmluY2U6IHN0cmluZztcbiAgcHVibGljIHNlbGVjdGVkQ2l0eTogc3RyaW5nO1xuICBwdWJsaWMgc2VsZWN0ZWRBcmVhOiBzdHJpbmc7XG4gIHB1YmxpYyBsb2NhbGFkZHJlc3M6IGFueVtdID0gW107XG4gIHB1YmxpYyBhbGxBZGRyZXNzIDphbnkgW10gPSBbXTtcbiAgcHVibGljIFBvc3RhbENvZGU6c3RyaW5nO1xuICBwdWJsaWMgcGxhY2VzOiBhbnlbXSA9IFtdO1xuICBwdWJsaWMgcHJvdmluY2U6YW55W109W107XG4gXG4gIC8vIFJFUS0wMSBQUk9HUkVTUyBCQVJcbiAgcHVibGljIHByb2dyZXNzU3R5bGU6IHN0cmluZyA9IFwiMCVcIjtcbiAgcHVibGljIGFuc3dlckNvdW50OiBudW1iZXIgPSAwO1xuICBwdWJsaWMgaW5kZXhDb3VudDogbnVtYmVyID0gMDtcbiAgcHVibGljIGFkZEZsYWc6IGJvb2xlYW4gPSB0cnVlO1xuICBwdWJsaWMgbXlEYXRlUGlja2VyT3B0aW9uczogSU15RHBPcHRpb25zID0ge307XG4gIGluZGl2aWR1YWxCb29rQnV0dG9uOiBib29sZWFuO1xuIFxuICBwdWJsaWMgYWxsSW5wdXRWYWx1ZXMgPSBbXTsgLy8gSEEgMDJGRUIyNCBUbyBzdG9yZSBhbGwgdGhlIGlucHV0IHZhbHVlc1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNmU2VydmljZTogU2FsZXNmb3JjZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VTZXJ2aWNlOiBDaGFuZ2VTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyLFxuICAgIHByaXZhdGUgc3Bpbm5lcjogTmd4U3Bpbm5lclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBfZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICAvL3ByaXZhdGUgZGJTZXJ2aWNlOiBOZ3hJbmRleGVkREJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGV2aWNlU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxuICAgIGVsOiBFbGVtZW50UmVmLFxuICAgIHB1YmxpYyBpMThuU2VydmljZTogSTE4blNlcnZpY2VcbiAgKSB7XG4gICAgLy8gVkQgMTBBdWcyNC1zcGlubmVyIGNoYW5nZXNcbiAgICB0aGlzLnNwaW5uZXJOYW1lID0gXCJzcDFcIjtcbiAgICB0aGlzLnNwaW5uZXJUeXBlID0gXCJiYWxsLXNwaW4tY2xvY2t3aXNlLWZhZGVcIjtcbiAgfVxuIFxuICAvLyBIQSAwMkZFQjI0IE9uIGRhdGUgY2hhbmdlIG5lZWQgdG8gc3RvcmUgdGhlIGNoYW5nZWQgdmFsdWUgc28gcGFzc2luZyB0aGUgcXVlc3Rpb25cbiAgLy8gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXNcbiAgb25EYXRlQ2hhbmdlZChldmVudDogSU15RGF0ZU1vZGVsLCBxdWVzOiBhbnkpIHtcbiAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIG9uRGF0ZUNoYW5nZWQnKTtcbiAgICAvL3RvIGNoYW5nZSB0aGUgYm9yZGVyIGNvbG9yXG4gICAgaWYgKHRoaXMucWJJdGVtLnByb2dyZXNzQmFyKSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIHByb2dyZXNzQmFyIGNvbmQnKTtcbiAgICAgIHRoaXMuaW5wVmFsdWUgPVxuICAgICAgICBldmVudC5kYXRlLmRheSArIFwiL1wiICsgZXZlbnQuZGF0ZS5tb250aCArIFwiL1wiICsgZXZlbnQuZGF0ZS55ZWFyO1xuICAgICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0udHlwZSA9PVwiQm9va1wiKXtcbiAgICAgICAgdGhpcy5zZWxlY3REYXRlID0gIGV2ZW50LmRhdGUuZGF5ICsgXCIvXCIgKyBldmVudC5kYXRlLm1vbnRoICsgXCIvXCIgKyBldmVudC5kYXRlLnllYXI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgRUxTRSBvZiBwcm9ncmVzc0JhciBjb25kJyk7XG4gICAgICBpZih0aGlzLnF1ZXN0aW9uSXRlbS50eXBlID09XCJCb29rXCIpe1xuICAgICAgICB0aGlzLnNlbGVjdERhdGUgPSAgZXZlbnQuZGF0ZS5kYXkgKyBcIi1cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi1cIiArIGV2ZW50LmRhdGUueWVhcjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5wVmFsdWUgPVxuICAgICAgICBldmVudC5kYXRlLnllYXIgKyBcIi1cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi1cIiArIGV2ZW50LmRhdGUuZGF5O1xuICAgIH1cbiAgICBjb25zdCBodG1sRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibXlkcFwiKTtcbiAgICBodG1sRWxlbWVudFxuICAgICAgLml0ZW0oMClcbiAgICAgIC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcImJvcmRlci1jb2xvcjojODdiZTFjO3dpZHRoOjEwMCVcIik7XG4gICAgdGhpcy5kYXRlTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCwgZXZlbnQpO1xuICAgIGlmIChcbiAgICAgIGV2ZW50LmRhdGUuZGF5ID09PSAwICYmXG4gICAgICBldmVudC5kYXRlLm1vbnRoID09PSAwICYmXG4gICAgICBldmVudC5kYXRlLnllYXIgPT09IDBcbiAgICApIHtcbiAgICAgIHRoaXMuZGF0ZU1hcC5kZWxldGUodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuICAgICAgdGhpcy5hbnN3ZXJNYXAuZGVsZXRlKHRoaXMucXVlc3Rpb25JdGVtLmlkKTtcbiAgICB9XG4gICAgLy9jb25zb2xlLmxvZygndGhpcy5pbnBWYWx1ZSA9ICcrdGhpcy5pbnBWYWx1ZSk7XG4gICAgLy9jb25zb2xlLmxvZygndGhpcy5zZWxlY3REYXRlID0gJyt0aGlzLnNlbGVjdERhdGUpO1xuICAgIC8vIEhBIDAyRkVCMjQgQXNzaWduaW5nIGlucHV0IHZhbHVlIHRvIHF1ZXMgaW5wdXRcbiAgICBxdWVzLmlucHV0ID0gdGhpcy5pbnBWYWx1ZTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZGV2aWNlSW5mbyA9IHRoaXMuZGV2aWNlU2VydmljZS5nZXREZXZpY2VJbmZvKCk7XG4gICAgdGhpcy5yb3V0ZS5xdWVyeVBhcmFtcy5zdWJzY3JpYmUoKHBhcmFtczogUGFyYW1zKSA9PiB7XG4gICAgICBpZiAocGFyYW1zWydpZCddKSB7XG4gICAgICAgIHRoaXMuaW5kaXZpZHVhbEJvb2tCdXR0b24gPSB0cnVlO1xuICAgICAgfWVsc2UgaWYocGFyYW1zWydib29rbGV0SWQnXSl7XG4gICAgICAgIHRoaXMuaW5kaXZpZHVhbEJvb2tCdXR0b24gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmlucFZhbHVlID0gXCJcIjtcbiAgICB0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPSBcIkFNXCI7XG4gICAgdGhpcy5wcm9jZXNzUUIoKTtcbiAgICAvL2NvbnNvbGUubG9nKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhZGRyZXNzJykpO1xuICAgIGlmKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYWRkcmVzc1wiKSl7XG4gICAgICB0aGlzLmxvY2FsYWRkcmVzcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJhZGRyZXNzXCIpKTtcbiAgICAgIC8vY29uc29sZS5sb2coJ0xlbmd0aD0nK3RoaXMubG9jYWxhZGRyZXNzLmxlbmd0aCk7XG4gICAgICB0aGlzLmFsbEFkZHJlc3M9dGhpcy5sb2NhbGFkZHJlc3MuZmlsdGVyKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5sb2NhbGFkZHJlc3MuaW5kZXhPZihpdGVtKSA9PSBpbmRleCl7XG4gICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5hbGxBZGRyZXNzLnNvcnQoZnVuY3Rpb24oYSwgYil7XG4gICAgICAgIHJldHVybiBhLnppcENvZGUgLSBiLnppcENvZGVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZih0aGlzLmRldmljZUluZm8ub3MgPT09ICdpT1MnKXtcbiAgICAgICAgbGV0IG9wZW5SZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oXCJhZGRyZXNzREJcIik7XG4gICAgICAgIG9wZW5SZXF1ZXN0Lm9uc3VjY2VzcyA9IChldmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHRhcmdldE5ldyA9IGV2ZW50LnRhcmdldCBhcyBJREJSZXF1ZXN0O1xuICAgICAgICAgIGxldCBkYk5ldyA9IHRhcmdldE5ldy5yZXN1bHQ7XG4gICAgICAgICAgY29uc3QgcmVxdWVzdE5ldyA9IGRiTmV3LnRyYW5zYWN0aW9uKCdhZGRyZXNzVGFibGUnKVxuICAgICAgICAgICAgICAgIC5vYmplY3RTdG9yZSgnYWRkcmVzc1RhYmxlJylcbiAgICAgICAgICAgICAgICAuZ2V0KDEpO1xuICAgICAgICAgIHJlcXVlc3ROZXcub25zdWNjZXNzID0gKCk9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHRlbXBWYXIgPSByZXF1ZXN0TmV3LnJlc3VsdDtcbiAgICAgICAgICAgICAgdGhpcy5sb2NhbGFkZHJlc3MgPSBKU09OLnBhcnNlKHRlbXBWYXIud2hvbGVBZGRyZXNzU3RyaW5nKTtcbiAgICAgICAgICAgICAgdGhpcy5hbGxBZGRyZXNzPXRoaXMubG9jYWxhZGRyZXNzLmZpbHRlcigoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2NhbGFkZHJlc3MuaW5kZXhPZihpdGVtKSA9PSBpbmRleCl7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB0aGlzLmFsbEFkZHJlc3Muc29ydChmdW5jdGlvbihhLCBiKXtcbiAgICAgICAgICAgICAgICByZXR1cm4gYS56aXBDb2RlIC0gYi56aXBDb2RlXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfVxuLy8gY2FsbCB3aGVuIGJvb2tJZCBjaGFuZ2VzXG4gIG5nT25DaGFuZ2VzKHNpbXBsZWNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZihzaW1wbGVjaGFuZ2VzWydxYklkJ10pe1xuICAgICAgdGhpcy5wcm9jZXNzUUIoKTtcbiAgICB9XG4gIH1cbiAgIC8vIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzXG4gIGRhdGVfVGltZU1hcCgpIHtcbiAgICB0aGlzLnNlbGVjdGVkaG91ck1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQsIHRoaXMuc2VsZWN0ZWRIb3VyKTtcbiAgICB0aGlzLnNlbGVjdGVkbWludXRlTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCwgdGhpcy5zZWxlY3RlZE1pbnV0ZSk7XG4gIH1cbiBcbiAgZGF5KCkge1xuICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucyA9IHtcbiAgICAgIGRhdGVGb3JtYXQ6IFwiZGQubW0ueXl5eVwiLFxuICAgICAgc3VuSGlnaGxpZ2h0OiBmYWxzZSxcbiAgICAgIGRpc2FibGVEYXRlUmFuZ2VzOiBbXSxcbiAgICAgIHNob3dDbGVhckRhdGVCdG46IGZhbHNlLFxuICAgICAgZGlzYWJsZVNpbmNlOiB7XG4gICAgICAgIHllYXI6IDAsXG4gICAgICAgIG1vbnRoOiAwLFxuICAgICAgICBkYXk6IDAsXG4gICAgICB9LFxuICAgICAgZGlzYWJsZVVudGlsOiB7XG4gICAgICAgIHllYXI6IDAsXG4gICAgICAgIG1vbnRoOiAwLFxuICAgICAgICBkYXk6IDAsXG4gICAgICB9LFxuICAgICAgc2hvd1RvZGF5QnRuOiBmYWxzZSxcbiAgICAgIGRheUxhYmVsczoge1xuICAgICAgICBzdTogXCJEb21cIixcbiAgICAgICAgbW86IFwiTHVuXCIsXG4gICAgICAgIHR1OiBcIk1hclwiLFxuICAgICAgICB3ZTogXCJNacOpXCIsXG4gICAgICAgIHRoOiBcIkp1ZVwiLFxuICAgICAgICBmcjogXCJWaWVcIixcbiAgICAgICAgc2E6IFwiU8OhYlwiLFxuICAgICAgfSxcbiAgICAgIG1vbnRoTGFiZWxzOiB7XG4gICAgICAgIDE6IFwiRW5lXCIsXG4gICAgICAgIDI6IFwiRmViXCIsXG4gICAgICAgIDM6IFwiTWFyXCIsXG4gICAgICAgIDQ6IFwiQWJyXCIsXG4gICAgICAgIDU6IFwiTWF5b1wiLFxuICAgICAgICA2OiBcIkp1blwiLFxuICAgICAgICA3OiBcIkp1bFwiLFxuICAgICAgICA4OiBcIkFnb1wiLFxuICAgICAgICA5OiBcIlNlcFwiLFxuICAgICAgICAxMDogXCJPY3RcIixcbiAgICAgICAgMTE6IFwiTm92XCIsXG4gICAgICAgIDEyOiBcIkRpY1wiLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG4gXG4gIGNoYW5nZSgpIHtcbiAgICBjb25zdCBodG1sRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibXlkcFwiKTtcbiAgICBpZiAodGhpcy5zZWxEYXRlID09PSBudWxsIHx8IHRoaXMuaW5wVmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICBodG1sRWxlbWVudFxuICAgICAgICAuaXRlbSgwKVxuICAgICAgICAuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJ3aWR0aDoxMDAlO2JvcmRlcjogMXB4IHNvbGlkIHJlZFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaHRtbEVsZW1lbnRcbiAgICAgICAgLml0ZW0oMClcbiAgICAgICAgLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwiYm9yZGVyOiAxcHggc29saWQgIzg3YmUxYyA7d2lkdGg6MTAwJVwiKTtcbiAgICB9XG4gIH1cbiBcbiAgcHJvY2Vzc1FCKCkge1xuICAgIFxuICAgIGNvbnNvbGUubG9nKCdQcm9jZXNzUUInKTtcbiAgICAvL3RoaXMucWJJdGVtXG4gICAgY29uc29sZS5sb2codGhpcy5xYklkKTtcbiAgICAvL2NvbnNvbGUubG9nKCdWZXJzaW9uIGluIHByb2Nlc3MgaXMgOGJmMTFlZmE3ZjkxYTM5MWQ5NTdiZjZiNTA3OGVkYzdlNjU2YjY3YycpO1xuICAgIGlmICh0aGlzLnFiSWQpIHtcbiAgICAgIGlmICh0aGlzLnFiSWQubGVuZ3RoID09IDE4KSB7XG4gICAgICAgIHRoaXMucmVhZFF1ZXN0aW9uQm9vayh0aGlzLnFiSWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBlbHNlIHBhcnQnKTtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnU2V0dGluZyB0aGUgUXVlc3Rpb24gRGlyZWN0bHkgZm9yIHRlc3RpbmcnKTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0gPSBEVFFVRVNUSU9OO1xuICAgICAgICB0aGlzLnFiSXRlbSA9IFRFU1RRQjtcbiAgICAgICAgdGhpcy5wcm9jZXNzUXVlc3Rpb24oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiBcbiAgdHJpbUxhc3REdW1teShpbnB1dDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIChpbnB1dCA9IGlucHV0LnN1YnN0cmluZygwLCBpbnB1dC5sZW5ndGggLSA2KSk7XG4gIH1cbiBcbiAgZ2V0UHJvcGVyVGltZShkZWY6IHN0cmluZywgaW5wdXQ6IHN0cmluZykge1xuICAgIHJldHVybiBpbnB1dCA9PT0gXCJcIiA/IGRlZiA6IGlucHV0O1xuICB9XG4gICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xuICAvL1N1bW1hcnkgUXVlc3Rpb24gQ2xpY2thYmxlIExvZ2ljXG4gIGhhbmRsZUVkaXRDbGljayh2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5iYWNraWNvbiA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmFiSXRlbT8uc3RhdHVzID09IFwiUGVuZGluZ1wiKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnJlYWRRdWVzdGlvbih2YWx1ZSk7XG4gICAgICAvL2NvbnNvbGUubG9nKCcgaW4gc2lkZSBzdW1tYXJ5b3BlbicrIHRoaXMuc3VtbWFyeS5sZW5ndGgpO1xuIFxuICAgICAgLy9Bc3NpZ24gcXVlc3Rpb24gc3RhY2sgbGVuZ3RoIGZyb20gc3VtbWFyeSBwYXJ0XG4gICAgICB2YXIgYXJyYXlMZW5ndGggPSB0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoO1xuICAgICAgdmFyIGxlbmd0aFZhbHVlID0gdGhpcy5xdWVzdGlvblN0YWNrLmluZGV4T2YodmFsdWUpO1xuIFxuICAgICAgZm9yIChsZXQgaSA9IGFycmF5TGVuZ3RoOyBpID4gbGVuZ3RoVmFsdWU7IGktLSkge1xuICAgICAgICAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucG9wKCk7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIgPT09IHRydWUpIHtcbiAgICAgICAgdmFyIGFycmF5TGVuZ3RoMSA9IHRoaXMucXVlc3Rpb25OYW1lLmxlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaiA9IGFycmF5TGVuZ3RoMTsgaiA+IGxlbmd0aFZhbHVlOyBqLS0pIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uTmFtZS5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5zdW1tYXJ5ID0gW107XG4gICAgICB0aGlzLnN1bW1hcnlEYXRhID0gW107XG4gICAgfVxuICB9XG4gXG4gIGhhbmRsZU5leHRDbGljaygpIHtcbiAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5zaG93TG9hZGVyKCk7XG4gICB0aGlzLnNwaW5uZXIuc2hvdyh0aGlzLnNwaW5uZXJOYW1lKTtcbiAgICB0aGlzLmlzQnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xuICAgIHRoaXMuYmFja0J1dHRvbkZsYWcgPSBmYWxzZTtcbiAgICB0aGlzLkFuc3dlclNhdmUoKTtcbiAgfVxuIFxuICBBbnN3ZXJTYXZlKCl7XG4gICAgLy90aGlzLnVwZGF0ZVByb2dyZXNzKCk7XG4gICAgaWYgKHRoaXMuY3VycmVudFF1ZXN0aW9uSWQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHF1ZXN0aW9uVHh0PScnO1xuICAgIHRoaXMuY2xlYXJFcnJvcigpO1xuICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5uZXh0VHJhY2tpbmdJZCk7XG4gICAgdGhpcy5yZWNvcmRJZCA9IG51bGw7XG4gICAgdmFyIGNRdWVzdGlvbjogUXVlc3Rpb24gPSBuZXcgUXVlc3Rpb24oKTtcbiAgICBjUXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uSXRlbTtcbiAgICAvLyBNUiAzMEpBTjI0IC0gQWRkZWQgQ29uZGl0aW9uIGZvciB0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IgKEJvb2sgUXVlc3Rpb24gYW5kIE5vbi1Cb29rKVxuICAgIGlmKHRoaXMucXVlc3Rpb25JdGVtLnN1YlF1ZXN0aW9ucykge1xuICAgICAgICAvLyBDcmVhdGUgYW4gYXJyYXkgb2Ygb2JqZWN0cyB0byBzdG9yZSB0aGUgdmFsdWVzXG4gICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnMubGVuZ3RoO2krKykge1xuICAgICAgICAgIGlmKHRoaXMucXVlc3Rpb25JdGVtLnN1YlF1ZXN0aW9uc1tpXS5xdWVzdGlvblRleHQpe1xuICAgICAgICAgICAgdmFyIHF1ZXN0aW9uVGV4dCA9IHRoaXMucXVlc3Rpb25JdGVtLnN1YlF1ZXN0aW9uc1tpXS5xdWVzdGlvblRleHQucmVwbGFjZSgvPFtePl0rPi9nLCAnJyk7IC8vIFJlbW92ZSBIVE1MIHRhZ3MgZnJvbSB0aGUgcXVlc3Rpb25UZXh0IHZhbHVlXG4gICAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBxdWVzdGlvblRleHQgPSAndW5kZWZpbmVkJztcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnNbaV0uaW5wdXQ7XG4gICAgICAgICAgY29uc3Qgb2JqID0geyBbcXVlc3Rpb25UZXh0XTogaW5wdXQgfTsgLy8gQ3JlYXRlIGFuIG9iamVjdCB3aXRoIHRoZSBxdWVzdGlvblRleHQgYXMgdGhlIGtleSBhbmQgdGhlIGlucHV0IGFzIHRoZSB2YWx1ZVxuICAgICAgICAgIHRoaXMuc3VtbWFyeURhdGEucHVzaChvYmopOyAvLyBBZGQgdGhlIG9iamVjdCB0byB0aGUgZGF0YSBhcnJheVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBxdWVzdGlvblRleHQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5xdWVzdGlvblRleHQucmVwbGFjZSgvPFtePl0rPi9nLCAnJyk7XG4gICAgICBjb25zdCBpbnB1dCA9IHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgY29uc3Qgb2JqID0geyBbcXVlc3Rpb25UZXh0XTogaW5wdXQgfTsgLy8gQ3JlYXRlIGFuIG9iamVjdCB3aXRoIHRoZSBxdWVzdGlvblRleHQgYXMgdGhlIGtleSBhbmQgdGhlIGlucHV0IGFzIHRoZSB2YWx1ZVxuICAgICAgdGhpcy5zdW1tYXJ5RGF0YS5wdXNoKG9iaik7IC8vIEFkZCB0aGUgb2JqZWN0IHRvIHRoZSBkYXRhIGFycmF5XG4gICAgfVxuIFxuICAgICAgICAgdmFyIHR5cCA9IGNRdWVzdGlvbi50eXBlO1xuICAgIC8vIHRoaXMuc3F1ZXMgKz0gY1F1ZXN0aW9uLnF1ZXN0aW9uICsgJ0BAIyMkJCc7XG4gICAgdmFyIHF1ZXNWYWx1ZSA9IGNRdWVzdGlvbi5xdWVzdGlvblRleHQ7XG4gICAgdmFyIG1haWxmb3JtYXQgPVxuICAgICAgXCJeW14uXVthLXpBLVowLTkhIyQlJicqKy0vPT9eX2B7fH1+XStbXi5dQFteLV1bYS16QS1aMC05Li1dK1teLV0uW2EtekEtWl17Mix9JFwiO1xuIFxuICAgIC8vIFByb2Nlc3MgSW5wdXRzXG4gICAgaWYgKHRoaXMuY2hlY2tib3hGbGFnKSB7XG4gICAgICB0aGlzLmlucFZhbHVlID0gXCJcIjtcbiAgICAgIC8vIFNhdmUgYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zIGluIHRoZSBpbnBWYWx1ZVxuICAgICAgZm9yICh2YXIgb3Ygb2YgdGhpcy5vcHRpb25WYWx1ZXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmNoZWNrZWQpKSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gb3YudmFsdWUgKyBcIkBAIyMkJFwiO1xuICAgICAgICB0aGlzLnJlY29yZElkID0gb3YubmV4dFF1ZXN0aW9uO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMudHJpbUxhc3REdW1teSh0aGlzLmlucFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZW1haWxGbGFnKSB7XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZSAmJiB0aGlzLmlucFZhbHVlLm1hdGNoKG1haWxmb3JtYXQpKSB7XG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5uZXh0UXVlc3Rpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5hbHBoYW51bWVyaWNGbGFnKSB7XG4gICAgICB2YXIgaXNOb3RWYWxpZEFjY051bSA9IHRoaXMuaXNOb3RWYWxpZEFjY051bWJlcih0aGlzLmlucFZhbHVlKTtcbiAgICAgIGlmIChpc05vdFZhbGlkQWNjTnVtKSB7XG4gICAgICAgIHRoaXMubm90VmFsaWRBY2NOdW0gPSB0cnVlO1xuICAgICAgICB0aGlzLnJlY29yZElkID0gdGhpcy5xdWVzdGlvbkl0ZW0ubmV4dFF1ZXN0aW9uO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLm5vdFZhbGlkQWNjTnVtID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLm51bWJlckZsYWcpIHtcbiAgICAgIGlmICh0aGlzLmlucFZhbHVlKSB7XG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5uZXh0UXVlc3Rpb247XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5ib29rRmxhZykge1xuICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgICB2YXIgaGFzTWlzc2luZ0lucHV0ID0gZmFsc2U7XG4gICAgICBmb3IgKHZhciBpdGVtIG9mIHRoaXMucXVlc3Rpb25JdGVtLnN1YlF1ZXN0aW9ucykge1xuICAgICAgICB2YXIgY291bnQgPSAwO1xuIFxuICAgICAgICBpZihpdGVtLnR5cGUgPT0gXCJEYXRlXCIgfHwgaXRlbS50eXBlID09IFwiVGltZVwiKSB7XG4gICAgICAgICAgLy90aGlzIG9uZVxuICAgICAgICAgIHRoaXMuY2hhbmdlKCk7XG4gICAgICAgICAgICBpZihpdGVtLnR5cGUgPT0gXCJEYXRlXCIpe1xuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGRhdGUgdHlwZSBjb25kID0gJyt0aGlzLnNlbGVjdERhdGUpO1xuICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5zZWxlY3REYXRlO1xuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuaW5wVmFsdWUpXG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zZWxlY3REYXRlKVxuIFxuICAgICAgICAgICAgfVxuICAgICAgICAgICBpZihpdGVtLnR5cGUgPT0gXCJUaW1lXCIpe1xuICAgICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5zZWxlY3RlZEhvdXIrdGhpcy5zZWxlY3RlZE1lcmlkaWVtK3RoaXMuc2VsZWN0ZWRNaW51dGUpXG4gXG4gICAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLngyNEhvdXJzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9XG4gICAgICAgICAgICAgICAgKHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9PT0gXCJQTVwiICYmIHRoaXMuc2VsZWN0ZWRIb3VyICE9IFwiMTJcIlxuICAgICAgICAgICAgICAgICAgPyBOdW1iZXIodGhpcy5zZWxlY3RlZEhvdXIpICsgMTJcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZEhvdXIpICtcbiAgICAgICAgICAgICAgICBcIjpcIiArXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSArIFwiIFBNXCI7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPT09IFwiQU1cIiAmJiB0aGlzLnNlbGVjdGVkSG91ciA9PT0gXCIxMlwiKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSBcIjAwXCIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGUgKyBcIiBBTVwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmICh0aGlzLnFiSXRlbS5wcm9ncmVzc0Jhcikge1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuc2VsZWN0RGF0ZSl7XG4gICAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5zZWxlY3REYXRlK1wiIFwiK3RoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiIFwiK3RoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZih0aGlzLnNlbGVjdERhdGUpe1xuICAgICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuc2VsZWN0RGF0ZStcIiBcIit0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIiBcIit0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgICB9XG4gXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS54MjRIb3VycyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGU7XG4gICAgICAgICAgICAgIGlmICh0aGlzLnFiSXRlbS5wcm9ncmVzc0Jhcikge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSEEgMzEtSkFOLTI0IFJlbW92ZWQgdGhlIHNlbGVjdEhvdXIgYW5kIHNlbGVjdE1pbnV0ZSBjb25kaXRpb25cbiAgICAgICAgICBpZiAodGhpcy5zZWxEYXRlID09PSBudWxsIHx8IHRoaXMuc2VsRGF0ZSA9PT0gdW5kZWZpbmVkIHx8ICF0aGlzLmlucFZhbHVlIHx8ICF0aGlzLnNlbGVjdERhdGUpIHtcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgbnVsbCBjb25kaXRpb24gb2YgaW5wdXQnKTtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgY29uc3QgaHRtbEVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIm15ZHBcIik7XG4gICAgICAgICAgICBodG1sRWxlbWVudFxuICAgICAgICAgICAgICAuaXRlbSgwKVxuICAgICAgICAgICAgICAuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJ3aWR0aDoxMDAlO2JvcmRlci1ib3R0b206IDFweCBzb2xpZCByZWQgIWltcG9ydGFudDtcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZGF0ZV9UaW1lTWFwKCk7XG4gICAgICB9XG4gICAgICAvLyBIQSAzMS1KQU4tMjQgQWRkZWQgdGV4dCBlcnJvciBjb25kaXRpb25cbiAgICAgIGlmKGl0ZW0udHlwZT09IFwiVGV4dFwiKXtcbiAgICAgICAgaWYgKCFpdGVtLmlucHV0KSB7XG4gICAgICAgICAgaXRlbS5pbnB1dCA9IFwiXCI7XG4gICAgICAgICAgaXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHRoaXMuaW5wVmFsdWUgPSBpdGVtLmlucHV0OyA2MzRcbiAgICAgIH1cbiBcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFpdGVtLmlzT3B0aW9uYWwgJiZcbiAgICAgICAgLy8gICgoaXRlbS50eXBlICE9IFwiRmlsZVwiICYmICFpdGVtLmlucHV0ICYmIGl0ZW0udHlwZSAhPSAnRGF0ZScgJiYgaXRlbS50eXBlICE9ICdUaW1lJykgfHxcbiAgICAgICAgIC8vICAgKGl0ZW0udHlwZSA9PSBcIkZpbGVcIiAmJiB0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCA9PSAwKSlcbiAgICAgICAgIChpdGVtLnR5cGUgPT0gXCJGaWxlXCIgJiYgdGhpcy5hdHRhY2htZW50cy5sZW5ndGggPT0gMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgaXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT0gXCJSYWRpb1wiKSB7XG4gICAgICAgICAgaWYgKCFpdGVtLmlucHV0KSB7XG4gICAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PSBcIkRyb3Bkb3duXCIpIHtcbiAgICAgICAgICBpZiAoIWl0ZW0uaW5wdXQpIHtcbiAgICAgICAgICAgIGl0ZW0uaW5wdXQgPSBcIlwiO1xuICAgICAgICAgICAgaXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT0gXCJFbWFpbFwiKSB7XG4gICAgICAgICAgaWYgKGl0ZW0uaW5wdXQgJiYgaXRlbS5pbnB1dC5tYXRjaChtYWlsZm9ybWF0KSkge1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5uZXh0UXVlc3Rpb247XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXRlbS50eXBlID09IFwiRmlsZVwiICYmIHRoaXMuYXR0YWNobWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnRJdGVtIG9mIHRoaXMuYXR0YWNobWVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgKz1cbiAgICAgICAgICAgICAgYXR0YWNobWVudEl0ZW0uYXR0YWNobWVudElkICtcbiAgICAgICAgICAgICAgXCJAIyRcIiArXG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRJdGVtLmF0dGFjaG1lbnROYW1lICtcbiAgICAgICAgICAgICAgXCIsXCI7XG4gICAgICAgICAgICBpZiAoaXRlbS5pbnB1dCA9PSB0aGlzLmlucFZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUnICsgcmVjb3JkSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0aGlzLmF0dGFjaG1lbnRzID0gW107XG4gICAgICAgIH0gLy9pdGVtLmlucHV0ID09IHRoaXMuaW5wVmFsdWU7XG4gXG4gICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gKGl0ZW0uaW5wdXQgIT0gdW5kZWZpbmVkID8gaXRlbS5pbnB1dCA6IFwiXCIpICsgXCJAQCMjJCRcIjtcbiAgICAgICAgcXVlc3Rpb25UeHQgKz0gaXRlbS5xdWVzdGlvbiArIFwiQEAjIyQkXCI7XG4gICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBib29rMScgKyB0aGlzLmlucFZhbHVlKVxuICAgICAgfVxuICAgICAgaWYgKGhhc01pc3NpbmdJbnB1dCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy50cmltTGFzdER1bW15KHRoaXMuaW5wVmFsdWUpO1xuICAgICAgcXVlc3Rpb25UeHQgPSBxdWVzdGlvblR4dCA/IHRoaXMudHJpbUxhc3REdW1teShxdWVzdGlvblR4dCkgOiBxdWVzdGlvblR4dDtcbiAgICB9XG4gICAgZWxzZSBpZiAodGhpcy5saXN0RmxhZykge1xuICAgICAgdGhpcy5pbnBWYWx1ZSA9ICcnO1xuICAgICAgdmFyIGhhc01pc3NpbmdJbnB1dCA9IGZhbHNlO1xuICAgICAgaWYodGhpcy5sb2NhbFN1YlFNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLmlkKSl7XG4gICAgICAgIHRoaXMuc3ViQW5zTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICBmb3IgKHZhciBsb2NhbFF1ZXMgb2YgdGhpcy5sb2NhbFN1YlFNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkKSkge1xuICAgICAgICAgICAgaWYoIWxvY2FsUXVlcy5pbnB1dCkge1xuICAgICAgICAgICAgICBsb2NhbFF1ZXMuZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgaWYoIXRoaXMuc3ViQW5zTWFwLmhhcyhsb2NhbFF1ZXMuaWQpKXtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgYW5zIG1hcCcpXG4gICAgICAgICAgICB0aGlzLnN1YkFuc01hcC5zZXQobG9jYWxRdWVzLmlkLGxvY2FsUXVlcy5pbnB1dCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgYW5zIG1hcCBlbHNlJylcbiAgICAgICAgICAgIHRoaXMuc3ViQW5zTWFwLnNldChsb2NhbFF1ZXMuaWQsdGhpcy5zdWJBbnNNYXAuZ2V0KGxvY2FsUXVlcy5pZCkgKyAnJCRAQCMjJytsb2NhbFF1ZXMuaW5wdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuIFxuICAgICAgICBpZiAoaGFzTWlzc2luZ0lucHV0KSB7XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnZmlsZSB0d28nKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN1YkFuc01hcC5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBNYXAnICk7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2codmFsdWUpO1xuICAgICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gKHZhbHVlICE9IHVuZGVmaW5lZCA/IHZhbHVlIDogJycpICsgJ0BAIyMkJCc7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy50cmltTGFzdER1bW15KHRoaXMuaW5wVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0aGlzLmRyb3Bkb3duRmxhZykge1xuICAgICAgaWYgKHRoaXMuaW5wVmFsdWUubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiLlwiO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuZHRGbGFnICYmIHRoaXMuZGF0ZUZsYWcgJiYgdGhpcy50aW1lRmxhZykge1xuICAgICAgLy90aGlzIG9uZVxuICAgICAgdGhpcy5jaGFuZ2UoKTtcbiAgICAgIGlmICh0aGlzLmlucFZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdGhpcy5nZXRQcm9wZXJUaW1lKFwiMTJcIiwgdGhpcy5zZWxlY3RlZEhvdXIpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gdGhpcy5nZXRQcm9wZXJUaW1lKFwiMDBcIiwgdGhpcy5zZWxlY3RlZE1pbnV0ZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9IHRoaXMuZ2V0UHJvcGVyVGltZShcIkFNXCIsIHRoaXMuc2VsZWN0ZWRNZXJpZGllbSk7XG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5pbnBWYWx1ZS5sZW5ndGgpO1xuIFxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0ueDI0SG91cnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxuICAgICAgICAgICAgKHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9PT0gXCJQTVwiICYmIHRoaXMuc2VsZWN0ZWRIb3VyICE9IFwiMTJcIlxuICAgICAgICAgICAgICA/IE51bWJlcih0aGlzLnNlbGVjdGVkSG91cikgKyAxMlxuICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRIb3VyKSArXG4gICAgICAgICAgICBcIjpcIiArXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlICsgXCIgUE1cIjtcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIkFNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgPT09IFwiMTJcIikge1xuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSBcIjAwXCIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGUgKyBcIiBBTVwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgXCIgXCIgKyB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyBcIlRcIiArIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0ueDI0SG91cnMgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciArIFwiOlwiICsgdGhpcy5zZWxlY3RlZE1pbnV0ZTtcbiAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgXCIgXCIgKyB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyBcIlRcIiArIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiYW5zID0+IFwiICsgdGhpcy5pbnBWYWx1ZSk7XG4gICAgICAgICAgdmFyIGRhdGUxOiBhbnkgPSB0aGlzLmlucFZhbHVlLnNwbGl0KFwiIFwiKTtcbiAgICAgICAgICBkYXRlMSA9IGRhdGUxWzBdLnNwbGl0KFwiL1wiKTtcbiAgICAgICAgICBkYXRlMSA9IFtkYXRlMVsyXSwgZGF0ZTFbMV0sIGRhdGUxWzBdXS5qb2luKFwiLVwiKTtcbiAgICAgICAgICBkYXRlMSA9IG5ldyBEYXRlKGRhdGUxKTtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGRhdGUxKVxuICAgICAgICAgIHZhciBkYXRlMjogYW55ID0gdGhpcy5pbnN1cmFuY2VTdGFydERhdGUuc3BsaXQoXCIgXCIpO1xuICAgICAgICAgIGRhdGUyID0gbmV3IERhdGUoZGF0ZTJbMF0pO1xuICAgICAgICAgIC8vY29uc29sZS5sb2coZGF0ZTIpO1xuICAgICAgICAgIGlmIChkYXRlMSA8IGRhdGUyKSB7XG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yLmVycm9yTXNnID1cbiAgICAgICAgICAgICAgXCJObyBlcyBwb3NpYmxlIGRhciBkZSBhbHRhIGxhIHJlY2xhbWFjacOzbiBkZWJpZG8gYSBxdWUgbGEgZmVjaGEgZGVsIGluY2lkZW50ZSBlcyBhbnRlcmlvciBhIGxhIGZlY2hhIGRlIGNvbnRyYXRhY2nDs24gZGUgbGEgcMOzbGl6YVwiO1xuICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlJylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2VsRGF0ZSA9PT0gbnVsbCB8fCAhdGhpcy5pbnBWYWx1ZSkge1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRhdGVfVGltZU1hcCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lRmxhZyAmJiB0aGlzLmR0RmxhZyAmJiAhdGhpcy5kYXRlRmxhZykge1xuICAgICAgdGhpcy5kYXRlX1RpbWVNYXAoKTtcbiAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS54MjRIb3VycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9XG4gICAgICAgICAgKHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9PT0gXCJQTVwiICYmIHRoaXMuc2VsZWN0ZWRIb3VyICE9IFwiMTJcIlxuICAgICAgICAgICAgPyBOdW1iZXIodGhpcy5zZWxlY3RlZEhvdXIpICsgMTJcbiAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZEhvdXIpICtcbiAgICAgICAgICBcIjpcIiArXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnNlbGVjdGVkSG91ciArIFwiOlwiICsgdGhpcy5zZWxlY3RlZE1pbnV0ZTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlucFZhbHVlLmxlbmd0aCA8IDUpIHtcbiAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMuZGF0ZUZsYWcgJiYgdGhpcy5kdEZsYWcgJiYgIXRoaXMudGltZUZsYWcpIHtcbiAgICAgIHRoaXMuY2hhbmdlKCk7XG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZS5sZW5ndGggPCA3IHx8IHRoaXMuc2VsRGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5maWxlRmxhZykge1xuICAgICAgLy9jb25zb2xlLmxvZygnZm91cicpXG4gICAgICB0aGlzLmlucFZhbHVlID0gXCJcIjtcbiAgICAgIGlmICh0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yICh2YXIgYXR0YWNobWVudEl0ZW0gb2YgdGhpcy5hdHRhY2htZW50cykge1xuICAgICAgICAgIHRoaXMuaW5wVmFsdWUgKz1cbiAgICAgICAgICAgIGF0dGFjaG1lbnRJdGVtLmF0dGFjaG1lbnRJZCArXG4gICAgICAgICAgICBcIkAjJFwiICtcbiAgICAgICAgICAgIGF0dGFjaG1lbnRJdGVtLmF0dGFjaG1lbnROYW1lICtcbiAgICAgICAgICAgIFwiLFwiO1xuICAgICAgICB9XG4gICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmaWxlc3NzJyArIHRoaXMuaW5wVmFsdWUpO1xuICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5pbnBWYWx1ZS5zdWJzdHIoMCwgdGhpcy5pbnBWYWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuIFxuICAgIC8vIENoZWNrIGZvciB0aGUgYW5zd2VyIGJlZm9yZSBzYXZpbmcgdG8gdGhlIERCXG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9uSXRlbS5pc09wdGlvbmFsICYmICF0aGlzLmlucFZhbHVlKSB7XG4gICAgICAvLyBTaG93IGVycm9yIHRoYXQgdGhlIHF1ZXN0aW9uIG11c3QgYmUgYW5zd2VyZWRcbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xuICAgICAgLy8gVkQgZGlzYWJsZWRcbiAgICAgIC8vdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGVMb2FkZXIoKTtcbiAgICAgIHRoaXMuc3Bpbm5lci5oaWRlKHRoaXMuc3Bpbm5lck5hbWUpO1xuICAgICAgdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gZmFsc2VcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gU2F2ZSB0aGUgQW5zd2VyIGluIHRoZSBEQlxuICAgIHRoaXMuYW5zd2VyV3JhcCA9IG5ldyBBbnN3ZXJXcmFwcGVyKCk7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLmFiSWQgPSB0aGlzLmFiSXRlbS5pZDtcbiAgICB0aGlzLmFuc3dlcldyYXAucXVlc0lkID0gY1F1ZXN0aW9uLmlkO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5xdWVzVmFsdWUgPSBxdWVzVmFsdWU7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLnFUeXAgPSB0eXA7XG4gICAgLy8gSEEgMDJGRUIyNCBUbyBkaXNwbGF5IHRoZSB2YWx1ZXMgaW4gc3VtbWFyeSB1c2luZyB0aGlzXG4gICAgdGhpcy5hbGxJbnB1dFZhbHVlcyA9IFtdO1xuICAgIHRoaXMuc3ViUXVlc3Rpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICB2YXIgaW5wdXRWYWx1ZSA9IHt9O1xuICAgICAgaW5wdXRWYWx1ZVsnSWQnXSA9IGVsZW1lbnQ/LmlkO1xuICAgICAgaW5wdXRWYWx1ZVsndHlwZSddID0gZWxlbWVudD8udHlwZTtcbiAgICAgIGlucHV0VmFsdWVbJ3JlZmVyZW5jZUZpZWxkJ10gPSBlbGVtZW50Py5yZWZlcmVuY2VGaWVsZDtcbiAgICAgIGlucHV0VmFsdWVbJ3F1ZXN0aW9uVGV4dCddID0gZWxlbWVudD8ucXVlc3Rpb25UZXh0O1xuICAgICAgaW5wdXRWYWx1ZVsnaW5wdXQnXSA9IGVsZW1lbnQ/LmlucHV0O1xuICAgICAgaW5wdXRWYWx1ZSA/IHRoaXMuYWxsSW5wdXRWYWx1ZXMucHVzaChpbnB1dFZhbHVlKSA6IHRoaXMuYWxsSW5wdXRWYWx1ZXM7XG4gICAgfSk7XG4gICAgdGhpcy5hbnN3ZXJXcmFwLm15VmFsID0gdGhpcy5hbGxJbnB1dFZhbHVlcztcbiAgICB0aGlzLmFuc3dlcldyYXAuYW5zVmFsdWUgPSB0aGlzLmlucFZhbHVlO1xuICAgIHRoaXMuYW5zd2VyV3JhcC5ncm91cFRleHQgPSBjUXVlc3Rpb24uZ3JvdXBOYW1lO1xuICAgIGNvbnNvbGUubG9nKCd0aGlzLmFuc3dlcldyYXAucVR5cCcsdGhpcy5hbnN3ZXJXcmFwLnFUeXApO1xuICAgaWYodGhpcy5hbnN3ZXJXcmFwLnFUeXAgPT0gXCJBbHBoYW51bWVyaWNcIil7XG4gICAgICB0aGlzLmFuc3dlcldyYXAuYW5zVmFsdWUgPSAnRVMnKyB0aGlzLmlucFZhbHVlO1xuICAgICAgLy8gY29uc29sZS5sb2coJ0JhbmsgY29uZGl0aW9uJyk7XG4gICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmFuc3dlcldyYXAuYW5zVmFsdWUpO1xuICAgIH1cbiAgICAvKmlmIChjUXVlc3Rpb24udHlwZSA9PSAnQm9vaycpe1xuICAgIGZvciAodmFyIHFiIG9mIGNRdWVzdGlvbi5RdWVzdGlvbnNfX3IucmVjb3Jkcyl7XG4gICAgICAvL2NvbnNvbGUubG9nKHFiLnF1ZXN0aW9uKycqKioqJytcIkBAIyMkJFwiKVxuICAgIH1cbiAgfSovXG4gICAgLy90aGlzLmFuc3dlcldyYXAuc3F1ZXNWYWx1ZSA9IGNRdWVzdGlvbi5xdWVzdGlvbjtcbiAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9IHRoaXMuaW5wVmFsdWU7XG4gICAgLy8gZW1pdCB0aGUgY3VycmVudCBxdWVzdGlvbiB3aXRoIGlucHV0IHRvIHBhcmVudFxuICAgIGxldCBxdWVzdGlvbkFucyA9IHt9XG4gICAgcXVlc3Rpb25BbnNbJ3F1ZXN0aW9uRGV0YWlsJ10gPSB0aGlzLnF1ZXN0aW9uSXRlbTtcbiAgICBxdWVzdGlvbkFuc1snYW5zd2VyQm9va0RldGFpbCddID0gdGhpcy5hYkl0ZW07XG4gICAgY29uc29sZS5sb2cocXVlc3Rpb25BbnMpO1xuICAgIHRoaXMuaGFuZGxlUXVlc3Rpb24uZW1pdChxdWVzdGlvbkFucyk7XG4gICAgY29uc29sZS5sb2coJ3F1ZXN0aW9uSXRlbS0tPicpO1xuICAgIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtKTtcbiAgICB0aGlzLmFuc3dlcldyYXAuc3F1ZXNWYWx1ZSA9IHF1ZXN0aW9uVHh0ID8gcXVlc3Rpb25UeHQgOiBjUXVlc3Rpb24ucXVlc3Rpb247XG4gICAgdGhpcy5zYXZlQW5zd2VyKCk7XG4gIH1cbiAgIC8vIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzXG4gIG5leHQoKSB7XG4gICAgdmFyIGNRdWVzdGlvbjogUXVlc3Rpb24gPSBuZXcgUXVlc3Rpb24oKTtcbiAgICBjUXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uSXRlbTtcbiAgICB2YXIgdHlwID0gY1F1ZXN0aW9uLnR5cGU7XG4gICAgLy8gSWYgbm8gZXJyb3IgdGhlbiBtb3ZlIHRvIG5leHQgc3RlcHNcbiAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gXG4gICAgdGhpcy5xdWVzdGlvblN0YWNrLnB1c2goY1F1ZXN0aW9uLmlkKTtcbiAgICAvLyAgdGhpcy5xdWVzdGlvbk5hbWUucHVzaChjUXVlc3Rpb24uTmFtZSk7XG4gXG4gICAgLy8gQ09ORElUSU9OQUwgdnMgT1BUSU9OT05MWSAmIFVOQ09ORElUSU9OQUxcbiAgICAvLyBIQSAzMS1KQU4tMjQgQWRkZWQgdGVybmFyeSBldmVuIGluIGVsc2UgY29uZGl0aW9ucyBiZWxvd1xuICAgIGlmIChjUXVlc3Rpb24/LlJlY29yZFR5cGU/Lk5hbWUgPT0gXCJDT05ESVRJT05BTFwiKSB7XG4gICAgICBmb3IgKHZhciBjT3B0IG9mIGNRdWVzdGlvbi5vcHRpb25zKSB7XG4gICAgICAgIC8vIFJhZGlvIC8gRGF0YVxuICAgICAgICAvL2NvbnNvbGUubG9nKCdPcHRpb24gPT4gJyArIGNPcHQudmFsdWUgKyAnIG1hdGNoaW5nIHdpdGggJyArIGFuc1ZhbCk7XG4gICAgICAgIGlmIChjT3B0LnZhbHVlID09IHRoaXMuaW5wVmFsdWUpIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdNYXRjaCBGb3VuZCB1c2luZyAnICsgY09wdC5uZXh0UXVlc3Rpb24pO1xuICAgICAgICAgIGlmKGNPcHQubmV4dFF1ZXN0aW9uKXtcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjT3B0Lm5leHRRdWVzdGlvbjtcbiAgICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLm5leHRRdWVzdGlvbjtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnY29uZGl0aW9uYWwgcmVjb3JkIGlkJysgdGhpcy5yZWNvcmRJZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIENvdWxkIGJlIG9mIHR5cGUgRGF0YSBhbmQgZXhpc3RpbmcgdmFsdWVcbiAgICAgIGlmICh0aGlzLnJlY29yZElkICYmIHR5cCA9PSBcIkRhdGFcIikge1xuICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLm5leHRRdWVzdGlvbjtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNRdWVzdGlvbj8uUmVjb3JkVHlwZT8uTmFtZSA9PSBcIk9QVElPTk9OTFlcIikge1xuICAgICAgLy8gIE9QVElPTk9OTFkgbG9naWNcbiAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xuICAgIH0gZWxzZSBpZiAoY1F1ZXN0aW9uPy5SZWNvcmRUeXBlPy5OYW1lID09IFwiVU5DT05ESVRJT05BTFwiKSB7XG4gICAgICAvL1VuY29uZGl0aW9uYWwgIGxvZ2ljXG4gICAgICAvL2NvbnNvbGUubG9nKFwiaW5zaWRlIHVuY29uZGl0aW9uYWxcIik7XG4gICAgICAvL2luc2lkZSBCb29rIFR5cGVcbiAgICAgIGlmIChjUXVlc3Rpb24udHlwZSA9PSBcIkJvb2tcIiAmJiBjUXVlc3Rpb24ucXVlc3Rpb25OdW1iZXIgIT0nNicpIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZyhcImluc2lkZSBib29rXCIpO1xuICAgICAgICBmb3IgKGxldCBvcHQgb2YgY1F1ZXN0aW9uLnN1YlF1ZXN0aW9ucykge1xuICAgICAgICAgIC8vY29uc29sZS5sb2cob3B0LnR5cGUpO1xuICAgICAgICAgIGlmIChvcHQudHlwZSA9PSBcIkRyb3Bkb3duXCIgfHwgb3B0LnR5cGUgPT0gXCJSYWRpb1wiKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBvcHQxIG9mIG9wdC5vcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZU5hbWUgPT0gb3B0MS52YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPW9wdDEubmV4dFF1ZXN0aW9uIHx8IGNRdWVzdGlvbi5uZXh0UXVlc3Rpb247XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnRWxzZScrdGhpcy5yZWNvcmRJZClcbiAgICAgICAgICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLm5leHRRdWVzdGlvbjtcbiBcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLm5leHRRdWVzdGlvbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYoY1F1ZXN0aW9uLnR5cGUgPT0gXCJCb29rXCIgJiYgY1F1ZXN0aW9uLnF1ZXN0aW9uTnVtYmVyID09JzYnICkge1xuICAgICAgICBmb3IgKGxldCBvcHQgb2YgY1F1ZXN0aW9uLnN1YlF1ZXN0aW9ucykge1xuICAgICAgICAgIGlmIChvcHQudHlwZSA9PSBcIkRyb3Bkb3duXCIgfHwgb3B0LnR5cGUgPT0gXCJSYWRpb1wiKXtcbiAgICAgICAgICBmb3IgKHZhciBvcHQxIG9mIG9wdC5vcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZU5hbWUgPT0gb3B0MS52YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IG9wdDEubmV4dFF1ZXN0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gXG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5uZXh0UXVlc3Rpb247XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEhBIDMxLUpBTi0yNCBBZGRlZCBlbHNlIHRvIGtlZXAgdGhlIGFzc2lnbm1lbnQgZGVmYXVsdFxuICAgIGVsc2V7XG4gICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLm5leHRRdWVzdGlvbjtcbiAgICB9XG4gXG4gICAgLy8gQ0FURUdPUklaQVRJT05cbiAgICAvL3RoaXMuc3RlcHBlckNhdGVnKCk7XG4gXG4gICAgLy8gQ2FsbGluZyB0aGUgcHJvZ3JlcyBiYXIgdXBkYXRlIGZ1bmN0aW9uXG4gICAgdGhpcy5hbnN3ZXJDb3VudCsrO1xuICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3MoKTtcbiBcbiBcbiAgICAvLyBDQVRFR09SSVpBVElPTlxuICAgIC8vdGhpcy5zdGVwcGVyQ2F0ZWcoKTtcbiBcbiAgICBpZiAodGhpcy5yZWNvcmRJZCkge1xuICAgICAgdGhpcy5yZWFkUXVlc3Rpb24odGhpcy5yZWNvcmRJZCk7XG4gICAgICB0aGlzLnBvcCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucG9wID0gZmFsc2U7XG4gICAgICAvLyBWRCBkaXNhYmxlZFxuICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UuaGlkZUxvYWRlcigpO1xuICAgICAgdGhpcy5zcGlubmVyLmhpZGUodGhpcy5zcGlubmVyTmFtZSk7XG4gICAgICB0aGlzLmlzQnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgIC8vIFJlc2V0IHRoZSBWYXJpYWJsZXNcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xuICAgICAgdGhpcy5hbnN3ZXJXcmFwID0gbmV3IEFuc3dlcldyYXBwZXIoKTtcbiAgICAgIHRoaXMub3B0aW9uVmFsdWVzID0gW107XG4gICAgICB0aGlzLnN1YlF1ZXN0aW9ucyA9IFtdO1xuIFxuICAgICAgdGhpcy5yZXNldEZsYWcodHlwKTtcbiAgICAgIHRoaXMucXVlc3Rpb25JdGVtID0gbnVsbDtcbiBcbiAgICAgIC8vIFNob3cgU3VtbWFyeVxuICAgICAgZm9yICh2YXIgcSBvZiB0aGlzLnF1ZXN0aW9uU3RhY2spIHtcbiAgICAgICAgLy9jb25zb2xlLmxvZygnSGFuZGxpbmcgUXVlc3Rpb24gPT4gJyArIHEpO1xuICAgICAgICB2YXIgYW5zV3JhcCA9IHRoaXMuYW5zd2VyTWFwLmdldChxKTtcbiAgICAgICAgaWYgKGFuc1dyYXApIHtcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdIYW5kbGluZyBBbnN3ZXIgZm9yICcgKyBhbnNXcmFwLnF1ZXNJZCArICcgb2YgdHlwZSAnICsgYW5zV3JhcC5xVHlwKTtcbiAgICAgICAgICBpZihhbnNXcmFwLnFUeXAgPT0gJ0ZpbGUnIHx8IGFuc1dyYXAucVR5cCA9PSAnQm9vayd8fGFuc1dyYXAucVR5cCA9PSAnTGlzdCcgfHwgYW5zV3JhcC5xVHlwID09ICdDaGVja2JveCcpe1xuICAgICAgICAgICAgdmFyIG5ld1N0ciA9ICcnO1xuICAgICAgICAgICAgZm9yICh2YXIgYW5zU3RyIG9mIGFuc1dyYXAuYW5zVmFsdWUuc3BsaXQoJ0BAIyMkJCcpKSB7XG4gICAgICAgICAgICAgIGZvciAodmFyIGFuc1N0cjEgb2YgYW5zU3RyLnNwbGl0KCckJEBAIyMnKSkge1xuICAgICAgICAgICAgICAvLyAgaWYoYW5zU3RyMS5pbmNsdWRlcygnYW5zd2VyU3RyaW5nJykpeyAvL3JlbW92ZSB0aGUgYW5zd2VyIHN0cmluZ1xuICAgICAgICAgICAgICAgLy8gICBjb25zdCB3aXRob3V0QW5zd2VyU3RyaW5nID0gYW5zU3RyMS5yZXBsYWNlKFwiYW5zd2VyU3RyaW5nOiBcIiwgXCJcIik7XG4gICAgICAgICAgICAgICAgLy8gIGFuc1N0cjEgPSB3aXRob3V0QW5zd2VyU3RyaW5nO1xuICAgICAgICAgICAgICAvLyAgfVxuICAgICAgICAgICAgICAgIGlmIChhbnNTdHIxLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgIGlmIChuZXdTdHIubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyID0gYW5zU3RyMTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciArPSAnOyAnICsgYW5zU3RyMTsgIC8vY29tbWEoLCkgY2hhbmdlZCBhcyBzZW1pIGNvbG9uKDspIGJlY2F1c2Ugb2YgYWRkcmVzcyBjb250YWlucyBjb21tYSgsKVxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmF0dGFjaG1lbnRzTWFwLmhhcyhhbnNXcmFwLnF1ZXNJZCkpe1xuICAgICAgICAgICAgICAgICAgICAgIGZvcih2YXIgYXR0IG9mIHRoaXMuYXR0YWNobWVudHNNYXAuZ2V0KGFuc1dyYXAucXVlc0lkKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTdHIgPSBuZXdTdHIucmVwbGFjZShhdHQuYXR0YWNobWVudElkLCcnKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyID0gKG5ld1N0ci5yZXBsYWNlKCcsLCcsJywgJykpLnJlcGxhY2UoJywgLCcsJywgJyk7XG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciA9IG5ld1N0ci5zdGFydHNXaXRoKCcsJykgPyBuZXdTdHIuc3Vic3RyaW5nKDEsIG5ld1N0ci5sZW5ndGgpIDogKG5ld1N0ci5lbmRzV2l0aCgnLCcpID8gbmV3U3RyLnN1YnN0cmluZygwLCBuZXdTdHIubGVuZ3RoIC0gMSkgOiBuZXdTdHIpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYW5zV3JhcC5hbnNWYWx1ZSA9IG5ld1N0cjtcbiAgICAgICAgICAgIGFuc1dyYXAubXlWYWwgPSB0aGlzLmFsbElucHV0VmFsdWVzO1xuICAgICAgICB9XG4gICAgICAgICAgLy8gVkQgQ2hlY2sgaWYgdGhlIHN1bW1hcnkgYWxyZWFkeSBjb250YWlucyBhbiBlbnRyeSBmb3IgdGhlIHNhbWUgcXVlc0lkXG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdBbnNXcmFwID0gdGhpcy5zdW1tYXJ5LmZpbmQoaXRlbSA9PiBpdGVtLnF1ZXNJZCA9PT0gYW5zV3JhcC5xdWVzSWQpO1xuICAgICAgICAgIGlmIChleGlzdGluZ0Fuc1dyYXApIHtcbiAgICAgICAgICAgIC8vIElmIGl0IGV4aXN0cywgdXBkYXRlIHRoZSBhbnNWYWx1ZSBhbmQgbXlWYWxcbiAgICAgICAgICAgIGV4aXN0aW5nQW5zV3JhcC5hbnNWYWx1ZSA9IGFuc1dyYXAuYW5zVmFsdWU7XG4gICAgICAgICAgICBleGlzdGluZ0Fuc1dyYXAubXlWYWwgPSBhbnNXcmFwLm15VmFsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiBpdCBkb2Vzbid0IGV4aXN0LCBwdXNoIHRoZSBhbnNXcmFwIHRvIHRoZSBzdW1tYXJ5IGFycmF5XG4gICAgICAgICAgICB0aGlzLnN1bW1hcnkucHVzaChhbnNXcmFwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5iYWNraWNvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiBcbiAgZ2V0VGV4dCh2YWx1ZSkge1xuICAgIHZhciBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHZhbHVlLCBcInRleHQvaHRtbFwiKTtcbiAgICAvL2NvbnNvbGUubG9nKCBkb2MuZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50KTtcbiAgICByZXR1cm4gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoXG4gICAgICBkb2MuZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50XG4gICAgKTtcbiAgfVxuIFxuICBoYW5kbGVCYWNrQ2xpY2soKSB7XG4gICAgdGhpcy5iYWNrID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5wb3AgPT09IHRydWUpIHtcbiAgICAgIHRoaXMucXVlc3Rpb25OYW1lLnBvcCgpO1xuICAgIH1cbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uYmFja1RyYWNraW5nSWQpO1xuICAgIHZhciBjUXVlc3Rpb246IFF1ZXN0aW9uID0gbmV3IFF1ZXN0aW9uKCk7XG4gICAgY1F1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkl0ZW07XG4gICAgaWYoY1F1ZXN0aW9uLnF1ZXN0aW9uTnVtYmVyID09JzEnKXtcbiAgICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5iYWNrKTtcbiAgICB9XG4gXG4gXG4gICAgdGhpcy5hbnN3ZXJDb3VudC0tO1xuICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3MoKTtcbiAgICAvLyBDQVRFR09SSVpBVElPTlxuICAgIC8vdGhpcy5zdGVwcGVyQ2F0ZWcoKTtcbiBcbiAgICBpZiAodGhpcy5zdW1tYXJ5KSB7XG4gICAgICAvL2NvbnNvbGUubG9nKCdzdW1tYXJ5IHRydWUnKTtcbiAgICAgIHRoaXMuc3VtbWFyeSA9IFtdO1xuICAgIH1cbiAgICBpZih0aGlzLnN1bW1hcnlEYXRhKXtcbiAgICAgIHRoaXMuc3VtbWFyeURhdGEgPVtdO1xuICAgIH1cbiBcbiAgICAvLyBSZWFkIHRoZSBwcmV2aW91cyBxdWVzdGlvbiBmcm9tIERCXG4gICAgLy8gVkQgZGlzYWJsZWRcbiAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5zaG93TG9hZGVyKCk7XG4gICAgdGhpcy5zcGlubmVyLnNob3codGhpcy5zcGlubmVyTmFtZSk7XG4gICAgdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gdHJ1ZTtcbiAgICB0aGlzLnJlYWRRdWVzdGlvbih0aGlzLnF1ZXN0aW9uU3RhY2sucG9wKCkpO1xuICAgIC8vY29uc29sZS5sb2codGhpcy5xdWVzdGlvblN0YWNrKTtcbiAgfVxuIFxuICBoYW5kbGVCYWNrQ2xpY2tOZXcoKSB7XG4gICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHRoaXMucWJJdGVtLmVkaXQpO1xuICB9XG4gXG4gIC8vdXBkYXRpbmcgc3RhdHVzIG9uY2UgUSZBIGNvbXBsZXRlZC5cbiBcbiAgcHJpdmF0ZSB1cGRhdGVBbnN3ZXJCb29rID0gKHV1aWQ6IHN0cmluZykgPT4ge1xuICAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgICAvLyB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXG4gICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAgLy8gICBbXCJBbnN3ZXJCb29rXCIsIFwiVXBkYXRlXCIsIHV1aWRdLFxuICAgICAgLy8gICB0aGlzLnN1Y2Nlc3N1cGRhdGVBQixcbiAgICAgIC8vICAgdGhpcy5mYWlsdXJldXBkYXRlQUJcbiAgICAgIC8vICk7XG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSUZyb21Ob2RlKCdBbnN3ZXJCb29rJywnVXBkYXRlJyx1dWlkLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxuICAgICAgKGRhdGEpPT57XG4gICAgICAgIGNvbnNvbGUubG9nKCd1cGRhdGVkIHN1Y2N1c3NmdWxseScpO1xuICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICAgdGhpcy5zdWNjZXNzdXBkYXRlQUIoSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgIH0sKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgIH1cbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVkQgMTVGRUIyNCAtIHVzZWQgcHJvY2Vzc05ldyBtZXRob2RcbiAgICAgICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgIGxldCBwYXJhID0ge1xuICAgICAgICBkYXRhVHlwZTogXCJBbnN3ZXJCb29rXCIsXG4gICAgICAgIG9wZXJhdGlvbjogXCJVcGRhdGVcIixcbiAgICAgICAgcGFyYW0xOiB1dWlkLFxuICAgICAgICBwYXJhbUpTT046IEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSxcbiAgICAgICAgbGFuZ3VhZ2VDb2RlIDogJydcbiAgICAgIH1cbiAvLyBWRCAxMkp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc0RhdGFcIixcbiAgICAgICAgW0pTT04uc3RyaW5naWZ5KHBhcmEpXSxcbiAgICAgICAgdGhpcy5zdWNjZXNzdXBkYXRlQUIsXG4gICAgICAgIHRoaXMuZmFpbHVyZXVwZGF0ZUFCXG4gICAgICApO1xuICAgIH1cbiAgfVxuIFxuICBwcml2YXRlIHN1Y2Nlc3N1cGRhdGVBQiA9IChyZXNwb25zZSkgPT4ge1xuICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiAgICBsZXQgZGF0YSA9IHJlc3BvbnNlO1xuICAgIGlmKGRhdGEpe1xuICAgICAgdGhpcy5oYW5kbGVTdWJtaXQuZW1pdChkYXRhKTtcbiAgICAgIHRoaXMuYWJJdGVtLnN0YXR1cyA9IFwiQ29tcGxldGVkXCI7XG4gICAgICB0aGlzLmRlbGV0ZUFuc3dlcnMoZGF0YS5BbnN3ZXJCb29rKVxuICAgIH1cbiAgfTtcbiBcbiAgLy8gVkQgZm9yIGRlbGV0ZSBhbnN3ZXJzXG4gIGRlbGV0ZUFuc3dlcnMoYW5zd2VyYm9vayl7XG4gICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpe1xuICAgICAgaWYoYW5zd2VyYm9vayAmJiBhbnN3ZXJib29rLnN0YXR1cyA9PSAnQ29tcGxldGVkJyl7XG4gICAgICAgIGNvbnN0IGFuc0Jvb2tJZCA9IGFuc3dlcmJvb2suaWQ7XG4gICAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ0Fuc3dlckJvb2snLCdkZWxldGUnLGFuc0Jvb2tJZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcbiAgICAgICAgKGRhdGEpPT57XG4gICAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgICAgdGhpcy5zdWNjZXNzRGVsZXRlQUIoSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgICAgfSwoZXJyb3IpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvLyBWRCBmb3IgZGVsZXRlIGFuc3dlcnNcbiAgcHJpdmF0ZSBzdWNjZXNzRGVsZXRlQUIgPSAocmVzcG9uc2UpID0+IHtcbiAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICAgaWYocmVzcG9uc2Uuc3RhdHVzID09ICdzdWNjZXNzJyl7XG4gICAgICAgY29uc29sZS5sb2cocmVzcG9uc2UubWVzc2FnZSk7XG4gICAgfWVsc2Uge1xuICAgICBjb25zb2xlLmVycm9yKCdlcnJvcicsIHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgIH1cbiB9XG5cbiBwcml2YXRlIGZhaWx1cmV1cGRhdGVBQiA9IChyZXNwb25zZSkgPT4ge1xuICAgLy9jb25zb2xlLmxvZygnc3RhdHVzIGZhaWxlZCcpXG4gfTtcblxuIHByaXZhdGUgcmVhZFF1ZXN0aW9uQm9vayA9ICh1dWlkOiBzdHJpbmcpID0+IHtcbiAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgLy8gICB0aGlzLnRrbixcbiAgICAgLy8gICBbXCJRdWVzdGlvbkJvb2tcIiwgXCJyZWFkXCIsIHV1aWRdLFxuICAgICAvLyAgIHRoaXMuc3VjY2Vzc1JlYWRCb29rLFxuICAgICAvLyAgIHRoaXMuZmFpbHVyZVJlYWRCb29rXG4gICAgIC8vICk7XG4gICAgIC8vdGhpcy5zaGFyZWRTZXJ2aWNlLnNob3dMb2FkZXIoKTtcbiAgICAgdGhpcy5zcGlubmVyLnNob3codGhpcy5zcGlubmVyTmFtZSk7XG4gICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IHRydWUgfTtcbiAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xuICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSUZyb21Ob2RlKCdRdWVzdGlvbkJvb2snLCdyZWFkJyx1dWlkLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxuICAgICAoZGF0YSk9PntcbiAgICAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5oaWRlTG9hZGVyKCk7XG4gICAgICAvLyB0aGlzLnNwaW5uZXIuaGlkZSh0aGlzLnNwaW5uZXJOYW1lKTtcbiAgICAgICAvLyBWRCBkaXNhYmxlZFxuICAgICAgIHRoaXMuaXNCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGUoKTtcbiAgICAgICB0aGlzLnN1Y2Nlc3NSZWFkQm9vayhKU09OLnBhcnNlKGRhdGEpKVxuICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgfVxuICAgICApXG4gICB9IGVsc2Uge1xuICAgICAvLyBNUiAzMEpBTjI0IC0gUGFzc2luZyBmbGFnIGZyb20gTkdOWFRcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogdHJ1ZSB9O1xuICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxuICAgICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgbGV0IHBhcmExID0ge1xuICAgICAgZGF0YVR5cGU6IFwiUXVlc3Rpb25Cb29rXCIsXG4gICAgICBvcGVyYXRpb246IFwicmVhZFwiLFxuICAgICAgcGFyYW0xOiB1dWlkLFxuICAgICAgcGFyYW1KU09OOiBKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksXG4gICAgICBsYW5ndWFnZUNvZGUgOiAnJ1xuICAgIH1cbiAgICAgLy8gLCBKU09OLnN0cmluZ2lmeShwYXJhbU1hcClcbi8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc0RhdGFcIixcbiAgICAgICBbSlNPTi5zdHJpbmdpZnkocGFyYTEpXSxcbiAgICAgICB0aGlzLnN1Y2Nlc3NSZWFkQm9vayxcbiAgICAgICB0aGlzLmZhaWx1cmVSZWFkQm9va1xuICAgICApO1xuICAgfVxuIH1cbiBwcml2YXRlIHN1Y2Nlc3NSZWFkQm9vayA9IChyZXNwb25zZSkgPT4ge1xuICAgY29uc29sZS5sb2coJ0luc2lkZSB0aGUgc3VjY2Vzc1JlYWRCb29rJyk7XG4gICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gICBpZihyZXNwb25zZSAhPSBudWxsIHx8IHJlc3BvbnNlICE9IHVuZGVmaW5lZCl7XG4gICAgIHRoaXMucWJJdGVtID0gcmVzcG9uc2UucXVlc3Rpb25ib29rO1xuICAgICB0aGlzLmFiSXRlbSA9IHJlc3BvbnNlLmFuc3dlcmJvb2s7XG4gICAgIHRoaXMuaGFuZGxlQm9vay5lbWl0KHJlc3BvbnNlKTtcblxuICAgfVxuICAvLyBjb25zb2xlLmxvZygncmVhZGluZ1F1ZXN0aW9uIHVzaW5nICcgKyB0aGlzLnFiSXRlbSk7XG4gICBpZiAodGhpcy5hYkl0ZW0/LnN0YXR1cyA9PSBcIlBlbmRpbmdcIikge1xuICAgICBpZiAoXG4gICAgICAgdGhpcy5hYkl0ZW0uYW5zd2VycyA9PSBudWxsIHx8XG4gICAgICAgdGhpcy5hYkl0ZW0uYW5zd2Vycy5sZW5ndGggPT0gMFxuICAgICApIHtcbiAgICAgICB0aGlzLnJlYWRRdWVzdGlvbih0aGlzLnFiSXRlbS5maXJzdFF1ZXN0aW9uKTtcbiAgICAgfSBlbHNlIHtcbiAgICAgICAvLyBQb3B1bGF0ZSB0aGUgZXhpc3RpbmcgYW5zd2Vyc1xuICAgICAgIHZhciBsYXN0UXVlc3Rpb25JZCA9IFwiXCI7XG5cbiAgICAgICBmb3IgKHZhciBhbnNPYmplY3Qgb2YgdGhpcy5hYkl0ZW0uYW5zd2Vycykge1xuICAgICAgICAgbGFzdFF1ZXN0aW9uSWQgPSBhbnNPYmplY3QucXVlc0lkO1xuXG4gICAgICAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucHVzaChhbnNPYmplY3QucXVlc0lkKTtcblxuICAgICAgICAgdGhpcy5hbnN3ZXJNYXAuc2V0KGFuc09iamVjdC5xdWVzSWQsIHtcbiAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnNPYmplY3QucXVlc1ZhbHVlLFxuICAgICAgICAgICBhbnNWYWx1ZTogYW5zT2JqZWN0LmFuc1ZhbHVlLFxuICAgICAgICAgICBxdWVzSWQ6IGFuc09iamVjdC5xdWVzSWQsXG4gICAgICAgICAgIHFUeXA6IGFuc09iamVjdC5xVHlwLFxuICAgICAgICAgICBncm91cFRleHQ6YW5zT2JqZWN0Lmdyb3VwVGV4dCxcbiAgICAgICAgIH0pO1xuXG4gICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25TdGFjaylcbiAgICAgICAgIGlmIChhbnNPYmplY3QucVR5cCA9PSBcIkJvb2tcIikge1xuICAgICAgICAgICB2YXIgYXYxID0gYW5zT2JqZWN0LmFuc1ZhbHVlLnNwbGl0KFwiQEAjIyQkXCIpO1xuICAgICAgICAgICAvLyAvL2NvbnNvbGUubG9nKFwiYm9vayBsb2dcIik7XG5cbiAgICAgICAgICAgLy8gIC8vY29uc29sZS5sb2coXCJib29raWRcIiArIGF2MVswXSk7XG4gICAgICAgICAgIHRoaXMuYXR0YWNobWVudHNNYXAuc2V0KGFuc09iamVjdC5xdWVzSWQsIFtcbiAgICAgICAgICAgICB7IGF0dGFjaG1lbnROYW1lOiBhdjFbMV0sIGF0dGFjaG1lbnRJZDogYXYxWzBdIH0sXG4gICAgICAgICAgIF0pO1xuICAgICAgICAgICAvLyAgLy9jb25zb2xlLmxvZyh0aGlzLmF0dGFjaG1lbnRzTWFwKTtcbiAgICAgICAgIH0gZWxzZSBpZiAoYW5zT2JqZWN0LnFUeXAgPT0gXCJGaWxlXCIpIHtcbiAgICAgICAgICAgLy8gIC8vY29uc29sZS5sb2coXCJpbnNpZGUgaWZcIik7XG4gICAgICAgICAgIHZhciBhdHRMaXN0O1xuICAgICAgICAgICB2YXIgYXR0O1xuICAgICAgICAgICBmb3IgKHZhciBhdHRWYXIgb2YgYW5zT2JqZWN0LmFuc1ZhbHVlLnNwbGl0KFwiLFwiKSkge1xuICAgICAgICAgICAgIHZhciBhdHRJZE5hbWUgPSBhdHRWYXIuc3BsaXQoXCJAQCMjJCRcIik7XG4gICAgICAgICAgICAgYXR0LmF0dGFjaG1lbnROYW1lID0gYXR0SWROYW1lWzFdO1xuICAgICAgICAgICAgIGF0dC5hdHRhY2htZW50SWQgPSBhdHRJZE5hbWVbMF07XG4gICAgICAgICAgICAgYXR0TGlzdC5wdXNoKGF0dCk7XG4gICAgICAgICAgIH1cbiAgICAgICAgICAgdGhpcy5hdHRhY2htZW50c01hcC5zZXQoYW5zT2JqZWN0LnF1ZXNJZCwgYXR0TGlzdCk7XG4gICAgICAgICAgIC8vICAvL2NvbnNvbGUubG9nKHRoaXMuYXR0YWNobWVudHNNYXApO1xuICAgICAgICAgfVxuICAgICAgIH1cblxuICAgICAgIHRoaXMucXVlc3Rpb25TdGFjay5wb3AoKTtcbiAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuYW5zd2VyTWFwKTtcbiAgICAgICAvLyBSZWFkIHRoZSBsYXN0IGFuc3dlcmVkIHF1ZXN0aW9uXG4gICAgICAgdGhpcy5yZWFkUXVlc3Rpb24obGFzdFF1ZXN0aW9uSWQpO1xuICAgICB9XG4gICB9IGVsc2UgaWYgKHRoaXMuYWJJdGVtPy5zdGF0dXMgPT0gXCJDb21wbGV0ZWRcIikge1xuICAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQoXCJTdW1tYXJ5dXBkYXRlZFwiKTtcbiAgICAgdGhpcy5zcGlubmVyLmhpZGUodGhpcy5zcGlubmVyTmFtZSk7XG4gICAgIC8vIFRlbXBvcmFyeSBGaXggZm9yIGR1cGxpY2F0ZSBhbnN3ZXJzIG9uIHRoZSBzdW1tYXJ5LlxuICAgICB0aGlzLnN1bW1hcnkgPSBbXTtcbiAgICAgdGhpcy5wZXJjZW50ID0gMTAwO1xuICAgICB0aGlzLnByb2dyZXNzU3R5bGUgPSBcIjEwMCVcIjtcbiAgICAgaWYodGhpcy5zZXJ2ICE9ICdhcGknKXtcbiAgICAgIC8vIFZEIDMxTk9WMjQgd3JhcHBlciBjaGFuZ2VzXG4gICAgICAgZm9yICh2YXIgYW5zd2VyIG9mIHRoaXMuYWJJdGVtLmFuc3dlcnMpIHtcbiAgICAgICAgIHZhciBhbnN3ZXJzID0ge307XG4gICAgICAgICBpZiAoYW5zd2VyLnFUeXAgPT0gXCJGaWxlXCIpIHtcbiAgICAgICAgICAgdmFyIGZpbGVzID0gXCJcIjtcbiAgICAgICAgICAgdmFyIGZJbmRleCA9IDA7XG4gICAgICAgICAgIHZhciBmaWxlTGlzdCA9IGFuc3dlci5hbnNWYWx1ZS5zcGxpdChcIixcIik7XG4gICAgICAgICAgIGZvciAodmFyIGZpbGVJZE5hbWUgb2YgZmlsZUxpc3QpIHtcbiAgICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSBmaWxlSWROYW1lLnNwbGl0KFwiQCMkXCIpO1xuICAgICAgICAgICAgIGlmIChmSW5kZXggPT0gMCkge1xuICAgICAgICAgICAgICAgZmlsZXMgPSBmaWxlTmFtZVsxXTtcbiAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgZmlsZXMgPSBmaWxlcyArIFwiICxcIiArIGZpbGVOYW1lWzFdO1xuICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICBmSW5kZXgrKztcbiAgICAgICAgICAgfVxuXG4gICAgICAgICAgIGFuc3dlcnMgPSB7XG4gICAgICAgICAgICAgZ3JvdXBUZXh0OmFuc3dlci5ncm91cFRleHQsXG4gICAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnN3ZXIucXVlc1ZhbHVlLFxuICAgICAgICAgICAgIGFuc1ZhbHVlOiBmaWxlcyxcbiAgICAgICAgICAgfTtcbiAgICAgICAgIC8vICB0aGlzLnN1bW1hcnkucHVzaChhbnN3ZXJzKTtcbiAgICAgICAgIH0gZWxzZSBpZiAoYW5zd2VyLnFUeXAgPT0gXCJCb29rXCIpIHtcbiAgICAgICAgICAgLyogIHZhciBxdWVzTm89MDtcbiAgICAgICAgICBpZihhbnN3ZXIuYW5zVmFsdWUuaW5jbHVkZXMoXCJAQCMjJCRcIikpe1xuICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2xpbmUgMTIyMycpO1xuICAgICAgICAgICAgIGZvciAodmFyIGJxQW5zd2VyVmFsdWUgb2YgYW5zd2VyLmFuc1ZhbHVlLnNwbGl0KFwiQEAjIyQkXCIpKSB7XG4gICAgICAgICAgICAgICB2YXIgcXVlc1ZhbHVlPWFuc3dlci5xdWVzdGlvblRleHQuc3BsaXQoXCJAQCMjJCRcIik7XG4gICAgICAgICAgICAgICBhbnN3ZXJzID0ge307XG4gICAgICAgICAgICAgICBhbnN3ZXJzID0ge1xuICAgICAgICAgICAgICAgIC8vIGdyb3VwVGV4dDphbnN3ZXIucXVlc3Rpb25UZXh0LFxuICAgICAgICAgICAgICAgICBxdWVzVmFsdWU6ICBcIiZsdDtwJmd0O1wiKyBxdWVzVmFsdWVbcXVlc05vXStcIiZsdDtwJmd0O1wiLFxuICAgICAgICAgICAgICAgICBhbnNWYWx1ZTogYnFBbnN3ZXJWYWx1ZSxcbiAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICBxdWVzTm8rKztcbiAgICAgICAgICAgICAgIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xuICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0qL1xuICAgICAgICAgICBpZihhbnN3ZXIuYW5zVmFsdWUuaW5jbHVkZXMoXCJAQCMjJCRcIikpe1xuICAgICAgICAgICAgIHZhciBhbnN3ZXJ2YWx1ZXMgPSBhbnN3ZXIuYW5zVmFsdWUuc3BsaXQoXCJAQCMjJCRcIik7XG4gICAgICAgICAgICAgLy9jb25zb2xlLmxvZygndmFsdWUnKVxuICAgICAgICAgICAgIGFuc3dlcnMgPSB7XG4gICAgICAgICAgICAgIC8vZ3JvdXBUZXh0OmFuc3dlci5ncm91cFRleHQsXG4gICAgICAgICAgICAgIHF1ZXNWYWx1ZTogYW5zd2VyLnF1ZXNWYWx1ZSxcbiAgICAgICAgICAgICAgYW5zVmFsdWU6IGFuc3dlcnZhbHVlcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKGFuc3dlcnMpXG4gICAgICAgICAgIC8vIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgIGFuc3dlcnMgPSB7XG4gICAgICAgICAgICAgICAvL2dyb3VwVGV4dDphbnN3ZXIuZ3JvdXBUZXh0LFxuICAgICAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnN3ZXIucXVlc1ZhbHVlLFxuICAgICAgICAgICAgICAgYW5zVmFsdWU6IGFuc3dlci5hbnNWYWx1ZSxcbiAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XG4gICAgICAgICAgIH1cbiAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gdmFyIGFuczEgPSBhbnN3ZXIuYW5zVmFsdWUuc3BsaXQoXCJAQCMjJCRcIik7XG4gICAgICAgICAgIGFuc3dlcnMgPSB7XG4gICAgICAgICAgICAgLy9ncm91cFRleHQ6YW5zd2VyLmdyb3VwVGV4dCxcbiAgICAgICAgICAgICBxdWVzVmFsdWU6IGFuc3dlci5xdWVzVmFsdWUsXG4gICAgICAgICAgICAgYW5zVmFsdWU6IGFuc3dlci5hbnNWYWx1ZSxcbiAgICAgICAgICAgfTtcbiAgICAgICAgICAvLyB0aGlzLnN1bW1hcnkucHVzaChhbnN3ZXJzKTtcbiAgICAgICAgIH1cbiAgICAgICB9XG4gICAgIH1cblxuICAgfVxuIH07XG5cbiBwcml2YXRlIGZhaWx1cmVSZWFkQm9vayA9IChyZXNwb25zZSkgPT4ge1xuICAgY29uc29sZS5sb2coJ0luc2lkZSB0aGUgZmFpbHVyZVJlYWRCb29rJyk7XG4gICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gfTtcblxuIHByaXZhdGUgcmVhZEFuc3dlcmJvb2sgPSAodXVpZDogc3RyaW5nKSA9PiB7XG4gICBpZih0aGlzLnNlcnYgPSBcImFwaVwiKSB7XG4gICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgICB0aGlzLnRrbixcbiAgICAgICBbXCJBbnN3ZXJCb29rXCIsIFwicmVhZFwiLCB1dWlkXSxcbiAgICAgICB0aGlzLnN1Y2Nlc3NBbnN3ZXJCb29rUmVhZCxcbiAgICAgICB0aGlzLmZhaWx1cmVBbnN3ZXJCb29rUmVhZFxuICAgICApO1xuICAgfSBlbHNlIHtcbiAgICAgLy8gVkQgMTVGRUIyNCAtIHVzZWQgcHJvY2Vzc05ldyBtZXRob2RcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xuICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgIGxldCBwYXJhMiA9IHtcbiAgICAgIGRhdGFUeXBlOiBcIkFuc3dlckJvb2tcIixcbiAgICAgIG9wZXJhdGlvbjogXCJyZWFkXCIsXG4gICAgICBwYXJhbTE6IHV1aWQsXG4gICAgICBwYXJhbUpTT046IEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSxcbiAgICAgIGxhbmd1YWdlQ29kZSA6ICcnXG4gICAgfVxuLy8gVkQgMTJKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcbiAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAgIFwiTnh0Q29udHJvbGxlci5wcm9jZXNzRGF0YVwiLFxuICAgICAgIFtKU09OLnN0cmluZ2lmeShwYXJhMildLFxuICAgICAgIHRoaXMuc3VjY2Vzc0Fuc3dlckJvb2tSZWFkLFxuICAgICAgIHRoaXMuZmFpbHVyZUFuc3dlckJvb2tSZWFkXG4gICAgICk7XG4gICB9XG4gfVxuXG5cbiBwcml2YXRlIHN1Y2Nlc3NBbnN3ZXJCb29rUmVhZCA9IChyZXNwb25zZSkgPT4ge1xuICAgaWYgKHRoaXMuYWJJdGVtPy5zdGF0dXMgPT0gXCJDb21wbGV0ZWRcIikge1xuICAgICBmb3IgKHZhciBhbnN3ZXIgb2YgdGhpcy5hYkl0ZW0uYW5zd2Vycykge1xuICAgICAgIHZhciBhdiA9IGFuc3dlci5hbnNWYWx1ZS5zcGxpdChcIkBAIyMkJFwiKTtcbiAgICAgICB2YXIgYW5zd2VycyA9IHsgcXVlc1ZhbHVlOiBhbnN3ZXIucXVlc1ZhbHVlLCBhbnNWYWx1ZTogYXYsIGdyb3VwVGV4dDphbnN3ZXIuZ3JvdXBUZXh0IH07XG4gICAgICAgLy9jb25zb2xlLmxvZyhhbnN3ZXJzKVxuICAgICAgIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xuICAgICB9XG4gICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdChcIlN1bW1hcnl1cGRhdGVkXCIpO1xuICAgfVxuIH07XG5cbiBwcml2YXRlIGZhaWx1cmVBbnN3ZXJCb29rUmVhZCA9IChyZXNwb25zZSkgPT4ge1xuICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZhaWx1cmVyZWFkJyk7XG4gICAvL2NvbnNvbGUubG9nKHJlc3BvbnNlKTtcbiB9O1xuXG4gcHJpdmF0ZSByZWFkUXVlc3Rpb24gPSAodXVpZDogc3RyaW5nKSA9PiB7XG4gICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIikge1xuICAgICAvLyB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXG4gICAgIC8vICAgdGhpcy50a24sXG4gICAgIC8vICAgW1wiUXVlc3Rpb25cIiwgXCJyZWFkXCIsIHV1aWRdLFxuICAgICAvLyAgIHRoaXMuc3VjY2Vzc1JlYWQsXG4gICAgIC8vICAgdGhpcy5mYWlsdXJlUmVhZFxuICAgICAvLyApO1xuICAgICAvL3RoaXMuc2hhcmVkU2VydmljZS5zaG93TG9hZGVyKCk7XG4gICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IHRydWUgfTtcbiAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xuICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSUZyb21Ob2RlKCdRdWVzdGlvbicsJ3JlYWQnLHV1aWQsSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXG4gICAgICAgKGRhdGEpPT57XG4gICAgICAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5oaWRlTG9hZGVyKCk7XG4gICAgICAgICB0aGlzLnNwaW5uZXIuaGlkZSh0aGlzLnNwaW5uZXJOYW1lKTtcbiAgICAgICAgIC8vIFZEIGRpc2FibGVkXG4gICAgICAgICB0aGlzLmlzQnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgIGNvbnNvbGUubG9nKCdkYXRhIGNhbWUgc3VjZXNzZnVsbHknKTtcbiAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgICAgdGhpcy5zdWNjZXNzUmVhZChKU09OLnBhcnNlKGRhdGEpKVxuICAgICAgIH0sKGVycm9yKSA9PiB7XG4gICAgICAgICAvL3RoaXMuc2hhcmVkU2VydmljZS5oaWRlTG9hZGVyKCk7XG4gICAgICAgICB0aGlzLnNwaW5uZXIuaGlkZSh0aGlzLnNwaW5uZXJOYW1lKTtcbiAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgICB9XG4gICAgICAgKVxuICAgfSBlbHNlIHtcbiAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgLy8gLy8gVkQgMTVGRUIyNCAtIG1ha2UgY3JlYXRlQW5zd2VyQm9va0ZsYWcgZmFsc2Ugb25seVxuICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgIC8vIFZEIDMxTk9WMjQgcGFyYW0gY2hhbmdlcyB3aXRoIG5ldyBtZXRob2RcbiAgICAgbGV0IHBhcmEyID0ge1xuICAgICAgZGF0YVR5cGU6IFwiUXVlc3Rpb25cIixcbiAgICAgIG9wZXJhdGlvbjogXCJyZWFkXCIsXG4gICAgICBwYXJhbTE6IHV1aWQsXG4gICAgICBwYXJhbUpTT046IEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSxcbiAgICAgIGxhbmd1YWdlQ29kZSA6ICcnXG4gICAgfVxuICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXG4gICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXG4gICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NEYXRhXCIsXG4gICAgICAgW0pTT04uc3RyaW5naWZ5KHBhcmEyKV0sXG4gICAgICAgdGhpcy5zdWNjZXNzUmVhZCxcbiAgICAgICB0aGlzLmZhaWx1cmVSZWFkXG4gICAgICk7XG4gICB9XG4gfVxuXG4gcHJpdmF0ZSBzdWNjZXNzUmVhZCA9IChyZXNwb25zZSkgPT4ge1xuICB0aGlzLnNwaW5uZXIuaGlkZSh0aGlzLnNwaW5uZXJOYW1lKTtcbiAgLy8gVkQgZGlzYWJsZWRcbiAgdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gZmFsc2U7XG4gICBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBzdWNjZXNzUmVhZCcpO1xuICAgY29uc29sZS5sb2cocmVzcG9uc2UpO1xuICAgLy8gSEEgMDJGRUIyNCBGb3IgdGVzdGluZyBmb3IgdXNlZCB0aGlzIGFuZCBpbiBmdXR1cmUgaXQgY2FuIGJlIHVzZWQgdG8gdGVzdCB3aXRoIHN0YXRpYyBkYXRhXG4gICAvLyB2YXIgYWIgPSBbJ2ZpcnN0JywnbGFzdCcsJzEyMycsJzEyLTEyLTIwMDAnLCcyMicsJ01hbGUnLCcxMiBjcm9zcyAxJywnRW1Db250YWN0JywnOTg3NjUnLCdBJywnU2luZ2xlJ107XG4gICAvLyBmb3IoY29uc3QgW2luZGV4LGl0ZW1dIG9mIHJlc3BvbnNlLnF1ZXN0aW9uLnN1YlF1ZXN0aW9ucy5lbnRyaWVzKCkpe1xuICAgLy8gICBpdGVtLmlucHV0ID0gYWJbaW5kZXhdO1xuICAgLy8gfVxuICAgLy8gY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xuICAgLy8gUmVzZXQgdGhlIFZhcmlhYmxlc1xuXG4gICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0pIHtcbiAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XG4gICAgIHRoaXMuYW5zd2VyV3JhcCA9IG5ldyBBbnN3ZXJXcmFwcGVyKCk7XG4gICAgIHRoaXMub3B0aW9uVmFsdWVzID0gW107XG4gICAgIHRoaXMuc3ViUXVlc3Rpb25zID0gW107XG4gICAgIHRoaXMucmVzZXRGbGFnKHRoaXMucXVlc3Rpb25JdGVtLnR5cGUpO1xuICAgfVxuICAgdGhpcy5xdWVzdGlvbkl0ZW0gPSByZXNwb25zZS5xdWVzdGlvbjtcbiAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtKTtcblxuICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0udHlwZSA9PT0gJ0FscGhhbnVtZXJpYycpe1xuICAgICB0aGlzLnNwbENDQmFja0NsaWNrID0gdHJ1ZTtcbiAgIH1cblxuICAgdGhpcy5jdXJyZW50UXVlc3Rpb25JZCA9IHRoaXMucXVlc3Rpb25JdGVtLmlkO1xuICAgdGhpcy5oYW5kbGVQYWdlLmVtaXQodGhpcy5xdWVzdGlvbkl0ZW0udHJhY2tpbmdJZCk7XG4gICAvLyBIYW5kbGUgdGhlIHN1YlF1ZXN0aW9uIG9wdGlvbnNcbiAgIGlmIChyZXNwb25zZS5zcU9wdGlvbnMpIHtcbiAgICAgLy92YXIgbmV3UmVjb3JkcyA9IFtdO1xuICAgICBmb3IgKHZhciBxIG9mIHRoaXMucXVlc3Rpb25JdGVtLnN1YlF1ZXN0aW9ucykge1xuICAgICAgIC8vY29uc29sZS5sb2cocS5OYW1lKTtcbiAgICAgICB2YXIgc3EgPSByZXNwb25zZS5zcU9wdGlvbnNbcS5pZF07XG4gICAgICAgaWYgKHNxKSB7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKCdmb3VuZCBvcHRpb25zIGZvciBzdWJxdWVzdGlvbiAnICsgcS5OYW1lKTtcbiAgICAgICAgIGlmICghcS5vcHRpb25zKSB7XG4gICAgICAgICAgIHEub3B0aW9ucyA9IHNxLm9wdGlvbnM7XG4gICAgICAgICB9XG4gICAgICAgfVxuICAgICB9XG4gICB9XG4gICB0aGlzLnByb2Nlc3NRdWVzdGlvbigpO1xuICAgdGhpcy5pbm5lcmh0bWwgPSB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChcbiAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uYWRkaXRpb25hbFJpY2hDb250ZW50XG4gICApO1xuICAgdGhpcy50cmFja0lkKCk7XG4gfTtcblxuIHRyYWNrSWQoKSB7XG4gICB2YXIgcXRyYWNrSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS50cmFja2luZ0lkO1xuICAgLy9jb25zb2xlLmxvZygndHJhY2tJZC1xdWVzdGlvbicrcXRyYWNrSWQpO1xuIH1cblxuIHByaXZhdGUgZmFpbHVyZVJlYWQgPSAocmVzcG9uc2UpID0+IHtcbiAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlcmVhZCcpO1xuICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gfTtcblxuIHByaXZhdGUgc2F2ZUFuc3dlciA9ICgpID0+IHtcbiAgIC8vIFNldCB0aGUgQW5zd2VyIE51bWJlciBiYXNlZCBvbiB0aGUgUXVlc3Rpb24gU3RhY2sgTGVuZ3RoXG4gICBpZiAodGhpcy5pbnBWYWx1ZSAhPSBcIi5cIikge1xuICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbklkID0gbnVsbDtcbiAgIH1cbiAgIHRoaXMuYW5zd2VyV3JhcC5hbnNOdW1iZXIgPSB0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoICsgMTtcblxuICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcbiAgICAgLy8gdGhpcy5kYXRhU2VydmljZS5nZXRBUElEYXRhKFxuICAgICAvLyAgIHRoaXMudGtuLFxuICAgICAvLyAgIFtcIkFuc3dlclwiLCBcImNyZWF0ZVwiLCBKU09OLnN0cmluZ2lmeSh0aGlzLmFuc3dlcldyYXApXSxcbiAgICAgLy8gICB0aGlzLnN1Y2Nlc3NTYXZlLFxuICAgICAvLyAgIHRoaXMuZmFpbHVyZVNhdmVcbiAgICAgLy8gKTtcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnQW5zd2VyJywnY3JlYXRlJyxKU09OLnN0cmluZ2lmeSh0aGlzLmFuc3dlcldyYXApLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxuICAgICAoZGF0YSk9PntcbiAgICAgICBjb25zb2xlLmxvZygnZGF0YSBjYW1lIHN1Y2Vzc2Z1bGx5Jyk7XG4gICAgICAgY29uc29sZS5sb2coZGF0YSk7XG4gICAgICAgdGhpcy5zdWNjZXNzU2F2ZShKU09OLnBhcnNlKGRhdGEpKVxuICAgICB9LChlcnJvcikgPT4ge1xuICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcbiAgICAgfVxuICAgICApXG4gICB9IGVsc2Uge1xuICAgICAvLyBWRCAxNUZFQjI0IC0gdXNlZCBwcm9jZXNzTmV3IG1ldGhvZFxuICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXG4gICAgIGxldCBwYXJhMyA9IHtcbiAgICAgIGRhdGFUeXBlOiBcIkFuc3dlclwiLFxuICAgICAgb3BlcmF0aW9uOiBcImNyZWF0ZVwiLFxuICAgICAgcGFyYW0xOiBKU09OLnN0cmluZ2lmeSh0aGlzLmFuc3dlcldyYXApLFxuICAgICAgcGFyYW1KU09OOiBKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksXG4gICAgICBsYW5ndWFnZUNvZGUgOiAnJ1xuICAgIH1cbi8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXG4gICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc0RhdGFcIixcbiAgICAgICBbSlNPTi5zdHJpbmdpZnkocGFyYTMpXSxcbiAgICAgICB0aGlzLnN1Y2Nlc3NTYXZlLFxuICAgICAgIHRoaXMuZmFpbHVyZVNhdmVcbiAgICAgKTtcbiAgIH1cbiB9O1xuXG4gaHRtbERlY29kZShpbnB1dCkge1xuICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaW5wdXQsIFwidGV4dC9odG1sXCIpO1xuICAgcmV0dXJuIGRvYy5kb2N1bWVudEVsZW1lbnQudGV4dENvbnRlbnQ7XG4gfVxuXG4gcHJpdmF0ZSBzdWNjZXNzU2F2ZSA9IChyZXNwb25zZSkgPT4ge1xuICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PSBcInN1Y2Nlc3NcIikge1xuICAgICAvL3RoaXMuYWJJdGVtID0gcmVzcG9uc2UuYW5zd2VyYm9vaztcbiAgICAgdGhpcy5hbnN3ZXJNYXAuc2V0KHJlc3BvbnNlLmFuc3dlci5xdWVzSWQsIHJlc3BvbnNlLmFuc3dlcik7XG4gICB9IGVsc2Uge1xuICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcbiAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IuZXJyb3JNc2cgPSByZXNwb25zZS5lcnJvci5lcnJvck1zZztcbiAgIH1cbiAgIGlmKCF0aGlzLmJhY2tCdXR0b25GbGFnKXtcbiAgICAgdGhpcy5uZXh0KCk7XG4gICB9XG4gfTtcblxuIHByaXZhdGUgZmFpbHVyZVNhdmUgPSAocmVzcG9uc2UpID0+IHtcbiAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlU2F2ZScpO1xuICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZSk7XG4gfTtcblxuIHByaXZhdGUgcHJvY2Vzc1F1ZXN0aW9uID0gKCkgPT4ge1xuICAgLy8gY29uc29sZS5sb2coJ0luc2lkZSB0aGUgcHJvY2Vzc1F1ZXN0aW9uJyk7XG4gICAvLyBjb25zb2xlLmxvZygnc3BsQ0NCYWNrQ2xpY2sgPSAnK3RoaXMuc3BsQ0NCYWNrQ2xpY2spO1xuICAgLy8gY29uc29sZS5sb2codGhpcy5xdWVzdGlvblN0YWNrKTtcbiAgIC8vY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xuICAgdGhpcy5wb3AgPSB0cnVlO1xuXG4gICAvLyBpZighdGhpcy5iYWNrKXtcbiAgIC8vICAgdGhpcy5xdWVzdGlvbk5hbWUucHVzaCh0aGlzLnF1ZXN0aW9uSXRlbS5OYW1lKVxuICAgLy8gfVxuXG4gICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIgPT09IHRydWUpIHtcbiAgICAgaWYgKCF0aGlzLmJhY2spIHtcbiAgICAgICB0aGlzLnF1ZXN0aW9uTmFtZS5wdXNoKHRoaXMucXVlc3Rpb25JdGVtLk5hbWUpO1xuICAgICB9XG4gICAgIHRoaXMuYmFjayA9IGZhbHNlO1xuICAgICBpZiAodGhpcy5xdWVzdGlvbk5hbWVbMF0gPT09IHRoaXMucXVlc3Rpb25OYW1lWzFdKSB7XG4gICAgICAgdGhpcy5xdWVzdGlvbk5hbWUucG9wKCk7XG4gICAgIH1cblxuICAgICB0aGlzLmN1cnJlbnROYW1lID0gdGhpcy5xdWVzdGlvbkl0ZW0uTmFtZTtcbiAgICAgdGhpcy5wYXRocXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uTmFtZS5pbmRleE9mKHRoaXMuY3VycmVudE5hbWUpO1xuICAgICB0aGlzLnBvc3NpYmlsaXRpZXMgPSB0aGlzLnFiSXRlbS5wb3NzaWJpbGl0aWVzO1xuICAgfVxuXG4gICB0aGlzLm15RGF0ZVBpY2tlck9wdGlvbnM7XG4gICB0aGlzLmRheSgpO1xuICAgLy9jb25zb2xlLmxvZygncHJvY2Vzc2luZyBxdWVzdGlvbiAnICsgdGhpcy5xdWVzdGlvbkl0ZW0uTmFtZSArICcgZXhpc3RpbmcgYW5zd2VycyBhcmUgJyArIHRoaXMuYW5zd2VyTWFwLnNpemUpOyAvLyA9PiAnICsgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWVzdGlvbkl0ZW0pKTtcblxuICAgLy8gU2V0IHRoZSBGbGFncyB0byBzaG93IHJpZ2h0IGZpZWxkc1xuICAgdGhpcy5zZXRGbGFnKHRoaXMucXVlc3Rpb25JdGVtLnR5cGUpO1xuICAgLy9jb25zb2xlLmxvZygnQWZ0ZXIgdGhlIHNldEZsYWcgbWV0aG9kIGR0RmxhZyA9ICcrdGhpcy5kdEZsYWcpO1xuXG4gICAvLyBDaGVjayB0aGUgZXhpc3RpbmcgYW5zd2VyIGZyb20gYW5zd2VyTWFwXG4gICBpZiAodGhpcy5hbnN3ZXJNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLmlkKSkge1xuICAgICAvLyAgLy9jb25zb2xlLmxvZyhcImV4aXN0aW5nIGFuc3dlciBmb3VuZCBmb3IgdGhpcy5xdWVzdGlvbkl0ZW0uTmFtZVwiKTtcbiAgICAgdmFyIGVBbnN3ZXIgPSB0aGlzLmFuc3dlck1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuICAgICAvLyBHZXQgdGhlIGV4aXN0aW5nIGFuc3dlciBmcm9tIHRoZSBNYXBcbiAgICAgdGhpcy5pbnBWYWx1ZSA9IGVBbnN3ZXIuYW5zVmFsdWU7XG4gICAgIC8vY29uc29sZS5sb2coJ2lucFZhbHVlIGhhcyBiZWVuIHNldCB0byAnICsgdGhpcy5pbnBWYWx1ZSk7XG4gICAgIGlmICh0aGlzLmF0dGFjaG1lbnRzTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpIHtcbiAgICAgICB0aGlzLmF0dGFjaG1lbnRzID0gdGhpcy5hdHRhY2htZW50c01hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuICAgICB9XG4gICB9IGVsc2Uge1xuICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgcmVtb3ZpbmcgYXR0YWNobWVudCBhcnJheScpO1xuICAgICB0aGlzLmF0dGFjaG1lbnRzID0gW107XG4gICB9XG4gICAvLyBjb25zb2xlLmxvZyh0aGlzLmlucFZhbHVlKTtcbiAgIGlmKHRoaXMuc3BsQ0NCYWNrQ2xpY2sgJiYgdGhpcy5pbnBWYWx1ZSAmJiB0aGlzLmlucFZhbHVlLmluY2x1ZGVzKCdFUycpKXtcbiAgICAgLy8gY29uc29sZS5sb2coJ0luc2lkZSB0aGUgaWYgY29uZCcpO1xuICAgICB0aGlzLnNwbENDQmFja0NsaWNrID0gZmFsc2U7XG4gICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlLnJlcGxhY2UoJ0VTJywnJyk7XG4gICB9XG5cbiAgIGlmICh0aGlzLmNoZWNrYm94RmxhZykge1xuICAgICAvLyBTZXQgdGhlIE9wdGlvbnMgZm9yIENoZWNrYm94XG4gICAgIHRoaXMuc2V0T3B0aW9ucyh0aGlzLnF1ZXN0aW9uSXRlbS5vcHRpb25zKTtcbiAgIH0gZWxzZSBpZiAodGhpcy5ib29rRmxhZykge1xuICAgICAvL2NvbnNvbGUubG9nKCdJbmlzZSB0aGUgZXhwZWN0ZWQgYm9va0ZsYWcgY29uZCcpO1xuICAgICAvL2NvbnNvbGUubG9nKCdkdEZsYWcgPSAnK3RoaXMuZHRGbGFnKTtcbi8vICBIQSAyMEZFQjI0IExhYmVsIEZpeFxuICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICBlbGVtZW50LnF1ZXN0aW9uVGV4dCA9IGVsZW1lbnQucXVlc3Rpb25UZXh0LnJlcGxhY2UoLzxbXj5dKz4vZywgJycpO1xuICAgICB9KTtcbiAgICAgdGhpcy5zZXRTdWJRdWVzdGlvbnModGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zKTtcbiAgIH0gZWxzZSBpZiAodGhpcy5saXN0RmxhZykge1xuICAgICAvLyBTZXQgdGhlIExvY2FsU3ViUXVlc3Rpb25zXG4gICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgbGlzdCBmbGFnJyk7XG4gICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzKTtcbiAgICAgLy8gY29uc29sZS5sb2codGhpcy5hYkl0ZW0uUXVlc3Rpb25zX19yLnJlY29yZHMpO1xuICAgICBpZighdGhpcy5sb2NhbFN1YlFNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLmlkKSl7XG4gICAgICAgdGhpcy5zZXRTdWJRdWVzdGlvbnModGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zKTtcbiAgICAgfVxuICAgfSBlbHNlIGlmICh0aGlzLmR0RmxhZykge1xuICAgICAvL2NvbnNvbGUubG9nKCdJbmlzZSB0aGUgdW5leHBlY3RlZCBkdEZsYWcgY29uZCcpO1xuICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IFwiXCI7XG4gICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBcIlwiO1xuICAgICB0aGlzLnNlbERhdGUgPSBcIlwiO1xuICAgICAvLyAyMDIxLTUtMTZUMDA6MDBcbiAgICAgaWYgKHRoaXMuZGF0ZU1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uaWQpKSB7XG4gICAgICAgdGhpcy5zZWxEYXRlID0gdGhpcy5kYXRlTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XG4gICAgIH1cbiAgICAgaWYgKHRoaXMuc2VsZWN0ZWRob3VyTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpIHtcbiAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHRoaXMuc2VsZWN0ZWRob3VyTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XG4gICAgIH1cbiAgICAgaWYgKHRoaXMuc2VsZWN0ZWRtaW51dGVNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLmlkKSkge1xuICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSB0aGlzLnNlbGVjdGVkbWludXRlTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XG4gICAgIH1cbiAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLngyNEhvdXJzID09PSB0cnVlKSB7XG4gICAgICAgdGhpcy5ob3Vycy5wdXNoKFxuICAgICAgICAgXCIxM1wiLFxuICAgICAgICAgXCIxNFwiLFxuICAgICAgICAgXCIxNVwiLFxuICAgICAgICAgXCIxNlwiLFxuICAgICAgICAgXCIxN1wiLFxuICAgICAgICAgXCIxOFwiLFxuICAgICAgICAgXCIxOVwiLFxuICAgICAgICAgXCIyMFwiLFxuICAgICAgICAgXCIyMVwiLFxuICAgICAgICAgXCIyMlwiLFxuICAgICAgICAgXCIyM1wiLFxuICAgICAgICAgXCIwMFwiXG4gICAgICAgKTtcbiAgICAgfVxuICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0ueDI0SG91cnMgPT09IGZhbHNlKSB7XG4gICAgICAgdGhpcy5ob3VycyA9IHRoaXMuaG91cnMuc2xpY2UoMCwgMTIpO1xuICAgICB9XG4gICAgIGlmICh0aGlzLmR0RmxhZyAmJiB0aGlzLmlucFZhbHVlKSB7XG4gICAgICAgdmFyIGR0VmFsID0gdGhpcy5pbnBWYWx1ZS5zcGxpdChcIlRcIik7XG4gICAgICAgdmFyIGR0dmFsMCA9IHRoaXMuaW5wVmFsdWUuc3BsaXQoXCIgXCIpO1xuICAgICAgIHRoaXMuaW5wVmFsdWUgPSBkdFZhbFswXTtcbiAgICAgICB0aGlzLmlucFZhbHVlID0gZHR2YWwwWzBdO1xuXG4gICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSBkdFZhbFsxXTtcbiAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9IGR0dmFsMFsxXTtcbiAgICAgfVxuICAgICBpZiAoXG4gICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaXNEYXRlQmFja3dhcmQgfHxcbiAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pc0RhdGVGb3J3YXJkXG4gICAgICkge1xuICAgICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS5pc0RhdGVCYWNrd2FyZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVTaW5jZSA9IHtcbiAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICBtb250aDogdGhpcy50b2RheS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSArIDEsXG4gICAgICAgICB9O1xuICAgICAgIH1cbiAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0uaXNEYXRlRm9yd2FyZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVVbnRpbCA9IHtcbiAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICBtb250aDogdGhpcy50b2RheS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSxcbiAgICAgICAgIH07XG4gICAgICAgfVxuICAgICB9XG4gICB9IGVsc2UgaWYgKHRoaXMuZmlsZUZsYWcpIHtcbiAgICAgdGhpcy5maWxlVUkoKTtcbiAgICAgLy8gbG9naWNcbiAgICAgdGhpcy5hbGxvd2VkRmlsZUV4dGVuc2lvbiA9XG4gICAgIHRoaXMucXVlc3Rpb25JdGVtLmFsbG93ZWRGaWxlRXh0ZW5zaW9ucz8uc3BsaXQoXCI7XCIpO1xuICAgICAvL2NvbnNvbGUubG9nKHRoaXMuYWxsb3dlZEZpbGVFeHRlbnNpb24pO1xuICAgfVxuXG4gICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIgPT09IHRydWUpIHtcbiAgICAgdGhpcy51cGRhdGVQcm9ncmVzcygpO1xuICAgfVxuIH07XG5cbiBzZXRGbGFnKHR5cCkge1xuICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIHNldEZsYWcgZm9yICcgKyB0eXApO1xuXG4gICBpZiAodHlwKSB7XG4gICAgIC8vIFNldCB0aGUgRmxhZ3NcbiAgICAgaWYgKHR5cCA9PSBcIlRleHRcIikge1xuICAgICAgIHRoaXMudGV4dEZsYWcgPSB0cnVlO1xuXG4gICAgICAgLy90aGlzLm51bWJlckZsYWcgPSB0cnVlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIk51bWJlclwiKSB7XG4gICAgICAgdGhpcy5udW1iZXJGbGFnID0gdHJ1ZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJBbHBoYU51bWVyaWNcIikge1xuICAgICAgIHRoaXMuYWxwaGFudW1lcmljRmxhZyA9IHRydWU7XG4gICAgICAgLyppZih0aGlzLmlucFZhbHVlLmxlbmd0aCA9PT0gMCl7XG4gICAgICAgICB0aGlzLmlucFZhbHVlPSdFUydcbiAgICAgICB9Ki9cbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJFbWFpbFwiKSB7XG4gICAgICAgdGhpcy5lbWFpbEZsYWcgPSB0cnVlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkZpbGVcIikge1xuICAgICAgIHRoaXMuZmlsZUZsYWcgPSB0cnVlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRhdGVUaW1lXCIpIHtcbiAgICAgICB0aGlzLmR0RmxhZyA9IHRydWU7XG4gICAgICAgdGhpcy50aW1lRmxhZyA9IHRydWU7XG4gICAgICAgdGhpcy5kYXRlRmxhZyA9IHRydWU7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiVGV4dEFyZWFcIikge1xuICAgICAgIHRoaXMudGFGbGFnID0gdHJ1ZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJSYWRpb1wiKSB7XG4gICAgICAgdGhpcy5yYWRpb0ZsYWcgPSB0cnVlO1xuICAgICAgfSBcbiAgICAvLyAgIGVsc2UgaWYgKHR5cCA9PSBcIlJpY2hUZXh0QXJlYVwiKSB7XG4gICAgLy8gICAgIHRoaXMucnRhRmxhZyA9IHRydWU7XG4gICAgLy8gIH0gXG4gICAgIGVsc2UgaWYgKHR5cCA9PSBcIkRyb3Bkb3duXCIpIHtcbiAgICAgICB0aGlzLmRyb3Bkb3duRmxhZyA9IHRydWU7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiQ2hlY2tib3hcIikge1xuICAgICAgIHRoaXMuY2hlY2tib3hGbGFnID0gdHJ1ZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJCb29rXCIpIHtcbiAgICAgICB0aGlzLmJvb2tGbGFnID0gdHJ1ZTtcbiAgICAgfWVsc2UgaWYgKHR5cCA9PSAnTGlzdCcpe1xuICAgICAgIHRoaXMubGlzdEZsYWcgPSB0cnVlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlRpbWVcIikge1xuICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgVGltZSBjb25kJyk7XG4gICAgICAgdGhpcy5kdEZsYWcgPSB0cnVlO1xuICAgICAgIHRoaXMudGltZUZsYWcgPSB0cnVlO1xuICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kdEZsYWcpO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRhdGVcIikge1xuICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgRGF0ZSBjb25kJyk7XG4gICAgICAgdGhpcy5kdEZsYWcgPSB0cnVlO1xuICAgICAgIHRoaXMuZGF0ZUZsYWcgPSB0cnVlO1xuICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kdEZsYWcpO1xuICAgICB9XG4gICB9XG4gfVxuXG4gcmVzZXRGbGFnKHR5cCkge1xuICAgaWYgKHR5cCkge1xuICAgICAvLyBTZXQgdGhlIEZsYWdzXG4gICAgIGlmICh0eXAgPT0gXCJUZXh0XCIpIHtcbiAgICAgICB0aGlzLnRleHRGbGFnID0gZmFsc2U7XG4gICAgICAgLy90aGlzLm51bWJlckZsYWcgPSBmYWxzZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJOdW1iZXJcIikge1xuICAgICAgIHRoaXMubnVtYmVyRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkFscGhhbnVtZXJpY1wiKSB7XG4gICAgICAgdGhpcy5hbHBoYW51bWVyaWNGbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiRW1haWxcIikge1xuICAgICAgIHRoaXMuZW1haWxGbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiRmlsZVwiKSB7XG4gICAgICAgdGhpcy5maWxlRmxhZyA9IGZhbHNlO1xuICAgICAgfSBcbiAgICAvLyAgIGVsc2UgaWYgKHR5cCA9PSBcIlJpY2hUZXh0QXJlYVwiKSB7XG4gICAgLy8gICAgIHRoaXMucnRhRmxhZyA9IGZhbHNlO1xuICAgIC8vICB9IFxuICAgICBlbHNlIGlmICh0eXAgPT0gXCJEYXRlVGltZVwiKSB7XG4gICAgICAgdGhpcy5kdEZsYWcgPSBmYWxzZTtcbiAgICAgICB0aGlzLmRhdGVGbGFnID0gZmFsc2U7XG4gICAgICAgdGhpcy50aW1lRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlRleHRBcmVhXCIpIHtcbiAgICAgICB0aGlzLnRhRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlJhZGlvXCIpIHtcbiAgICAgICB0aGlzLnJhZGlvRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkRyb3Bkb3duXCIpIHtcbiAgICAgICB0aGlzLmRyb3Bkb3duRmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkNoZWNrYm94XCIpIHtcbiAgICAgICB0aGlzLmNoZWNrYm94RmxhZyA9IGZhbHNlO1xuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkJvb2tcIikge1xuICAgICAgIHRoaXMuYm9va0ZsYWcgPSBmYWxzZTtcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gJ0xpc3QnKXtcbiAgICAgICB0aGlzLmxpc3RGbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiVGltZVwiKSB7XG4gICAgICAgdGhpcy5kdEZsYWcgPSBmYWxzZTtcbiAgICAgICB0aGlzLnRpbWVGbGFnID0gZmFsc2U7XG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiRGF0ZVwiKSB7XG4gICAgICAgdGhpcy5kdEZsYWcgPSBmYWxzZTtcbiAgICAgICB0aGlzLmRhdGVGbGFnID0gZmFsc2U7XG4gICAgIH1cbiAgIH1cbiB9XG5cbiBzZXRPcHRpb25zKHJlY29yZHMpIHtcbiAgIGZvciAodmFyIG9wdCBvZiByZWNvcmRzKSB7XG4gICAgIHZhciBvdiA9IG5ldyBPcHRpb25WYWx1ZSgpO1xuICAgICBvdi5pZCA9IG9wdC5pZDtcbiAgICAgb3YuTmFtZSA9IG9wdC5OYW1lO1xuICAgICBvdi52YWx1ZSA9IG9wdC52YWx1ZTtcbiAgICAgb3YubmV4dFF1ZXN0aW9uID0gb3B0Lm5leHRRdWVzdGlvbjtcbiAgICAgb3YuY2hlY2tlZCA9IGZhbHNlO1xuXG4gICAgIGlmIChcbiAgICAgICB0aGlzLmlucFZhbHVlICYmXG4gICAgICAgdGhpcy5pbnBWYWx1ZS5zcGxpdChcIkBAIyMkJFwiKS5pbmNsdWRlcyhvcHQudmFsdWUpXG4gICAgICkge1xuICAgICAgIG92LmNoZWNrZWQgPSB0cnVlO1xuICAgICB9XG5cbiAgICAgdGhpcy5vcHRpb25WYWx1ZXMucHVzaChvdik7XG4gICB9XG4gfVxuXG4gLy8gQ2FwdHVyZSBhbmQgUHJvY2VzcyBDaGlsZCBFdmVudFxuIGNoaWxkRXZlbnRDYXB0dXJlKGV2ZW50LCBxdWVzPzphbnkpIHtcbiAgIGNvbnNvbGUubG9nKCdpbnNpZGUgY2hpbGRFdmVudENhcHR1cmUgJyk7XG4gICBjb25zb2xlLmxvZyhldmVudCk7XG4gICB0aGlzLmNoYW5nZVNlcnZpY2UuYW5ub3VuY2VDaGFuZ2UoZXZlbnQpO1xuICAgLy8gSEEgMzEtSkFOLTI0IEFzc2lnbiB2YWx1ZXMgdG8gZHJvcGRvd24gcXVlc3Rpb25cbiAgIHF1ZXMuaW5wdXQgPSBldmVudD8udmFsdWVPYmo7XG4gICAvL3F1ZXMuaW5wdXQgPSBldmVudDsgLy8gaGVyZSB3aGVuIHVzaW5nIHRoZSBuZy1zZWxlY3QgZ290IGV2ZW50IGFzIHZhbHVlXG4gfVxuXG4vLyAgUlMgMDZKQU4yNVxuLy8gZm9yIHJpY2h0ZXh0XG4gaGFuZGxlUmljaFRleHRDaGFuZ2UodmFsdWU6IHN0cmluZykge1xuICAvLyB0aGlzLmlucFZhbHVlID0gdmFsdWU7XG4gIC8vIHRoaXMuY2xlYXJFcnJvcigpOyBcbiAgICBjb25zb2xlLmxvZygnUmljaCBUZXh0IENoYW5nZSBDYXB0dXJlZDonLCB2YWx1ZSk7XG59XG5cbiBzZXRTdWJRdWVzdGlvbnMocmVjb3Jkcykge1xuICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBzZXRTdWJRdWVzdGlvbnMnKTtcbiAgIC8vIGNvbnNvbGUubG9nKHJlY29yZHMpO1xuICAgdmFyIHFhTWFwID0gbmV3IE1hcCgpO1xuICAgLy8gY29uc29sZS5sb2codGhpcy5pbnBWYWx1ZSk7XG4gICBpZiAodGhpcy5pbnBWYWx1ZSkge1xuICAgICB2YXIgYUluZGV4ID0gMDtcbiAgICAgLy8gc2VhcmNoIGNoYW5nZWQgYXMgc2VtaSBjb2xvbiBiZWNhdXNlIG9mIGFkZHJlc3MgY29udGFpbnMgY29tbWFcbiAgICAgaWYgKCh0aGlzLmlucFZhbHVlLnNlYXJjaChcIjsgXCIpID09IC0xKSkge1xuICAgICAgLy8gY29uc3Qgd2l0aG91dEFuc3dlclN0cmluZyA9IHRoaXMuaW5wVmFsdWUucmVwbGFjZShcImFuc3dlclN0cmluZzogXCIsIFwiXCIpOyAvL3JlbW92ZSB0aGUgYW5zd2VyIHN0cmluZ1xuICAgICAgLy8gdGhpcy5pbnBWYWx1ZSA9IHdpdGhvdXRBbnN3ZXJTdHJpbmc7XG4gICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyAnQEAjIyQkJyA7XG4gICAgICAgZm9yICh2YXIgYW5zU3RyIG9mIHRoaXMuaW5wVmFsdWUuc3BsaXQoXCJAQCMjJCRcIikpIHtcbiAgICAgICAgIGFJbmRleCsrO1xuICAgICAgICAgcWFNYXAuc2V0KGFJbmRleCwgYW5zU3RyKTtcbiAgICAgICAgIC8vY29uc29sZS5sb2coJ1NldHRpbmcgdGhlIHFhTWFwIGZvciAnICsgYUluZGV4ICsgJyB3aXRoICcgKyBhbnNTdHIpO1xuICAgICAgIH1cbiAgICAgfSBlbHNlIHtcbiAgICAgICBmb3IgKHZhciBhbnNTdHIgb2YgdGhpcy5pbnBWYWx1ZS5zcGxpdChcIjsgXCIpKSB7XG4gICAgICAgICBhSW5kZXgrKztcbiAgICAgICAgIHFhTWFwLnNldChhSW5kZXgsIGFuc1N0cik7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKCdTZXR0aW5nIHRoZSBxYU1hcCAnICsgYUluZGV4ICsgJyB3aXRoICcgKyBhbnNTdHIpO1xuICAgICAgIH1cbiAgICAgfVxuICAgfVxuICAgLy8gY29uc29sZS5sb2coJ2FmdGVyIHNldHRpbmcgdmFsdWVzIGZyb20gaW5wdmFsdWUgcWEgbWFwIGFyZScpO1xuICAgLy8gY29uc29sZS5sb2cocWFNYXApO1xuXG4gICBmb3IgKHZhciBxdWVzIG9mIHJlY29yZHMpIHtcbiAgICAgaWYgKHF1ZXMudHlwZSA9PSBcIkZpbGVcIikge1xuICAgICAgIHRoaXMudmFsdWVOYW1lMSA9IHF1ZXMuYWxsb3dlZEZpbGVFeHRlbnNpb25zO1xuICAgICAgIC8vY29uc29sZS5sb2codGhpcy52YWx1ZU5hbWUxKTtcbiAgICAgfVxuXG4gICAgIHZhciBhbnMgPSAnJztcbiAgICAgaWYgKHFhTWFwLmhhcyhxdWVzLnF1ZXN0aW9uTnVtYmVyKSkge1xuICAgICAgICAgcXVlcy5pbnB1dCA9IHFhTWFwLmdldChxdWVzLnF1ZXN0aW9uTnVtYmVyKTtcbiAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdhZnRlciBmZXRjaGluZyBtYXAgdmFsdWVzJyk7XG4gICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVzLmlucHV0KTtcbiAgICAgICAgIGlmKHF1ZXMuaW5wdXQuaW5kZXhPZignJCRAQCMjJykgPiAwKXtcbiAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2Fuc3dlciBzdXBwb3NlZCB0byBiZSB0cmltbWVkJyk7XG4gICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXMuaW5wdXQpO1xuICAgICAgICAgICBhbnMgPSBxdWVzLmlucHV0LnN1YnN0cmluZyhxdWVzLmlucHV0LmluZGV4T2YoJyQkQEAjIycpKzYscXVlcy5pbnB1dC5sZW5ndGgpO1xuICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhhbnMpO1xuICAgICAgICAgICBxdWVzLmlucHV0ID0gcXVlcy5pbnB1dC5zdWJzdHJpbmcoMCxxdWVzLmlucHV0LmluZGV4T2YoJyQkQEAjIycpKTtcbiAgICAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcy5pbnB1dCk7XG4gICAgICAgICB9XG4gICAgICAgfVxuXG4gICAgIGlmICgocXVlcy50eXBlID09PSBcIkRhdGVcIikgJiYgKHF1ZXMuaXNEYXRlQmFja3dhcmQgfHwgcXVlcy5pc0RhdGVGb3J3YXJkKSkge1xuICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgZGF0ZSBiYWNrd2FyZC9mb3J3YXJkIGNvbmQnKTtcbiAgICAgICBpZiAocXVlcy5pc0RhdGVCYWNrd2FyZCA9PT0gdHJ1ZSkge1xuICAgICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBpc0RhdGVCYWNrd2FyZCcpO1xuICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVTaW5jZSA9IHtcbiAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxuICAgICAgICAgICBtb250aDogdGhpcy50b2RheS5nZXRNb250aCgpICsgMSxcbiAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSArIDEsXG4gICAgICAgICB9O1xuICAgICAgIH1cbiAgICAgICBpZiAocXVlcy5pc0RhdGVGb3J3YXJkID09PSB0cnVlKSB7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGlzRGF0ZUZvcndhcmQnKTtcbiAgICAgICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucy5kaXNhYmxlVW50aWwgPSB7XG4gICAgICAgICAgIHllYXI6IHRoaXMudG9kYXkuZ2V0RnVsbFllYXIoKSxcbiAgICAgICAgICAgbW9udGg6IHRoaXMudG9kYXkuZ2V0TW9udGgoKSArIDEsXG4gICAgICAgICAgIGRheTogdGhpcy50b2RheS5nZXREYXRlKCksXG4gICAgICAgICB9O1xuICAgICAgIH1cbiAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucyk7XG4gICAgIH1cblxuICAgICB0aGlzLnN1YlF1ZXN0aW9ucy5wdXNoKHF1ZXMpO1xuICAgICBmb3IodmFyIGk9MDsgaTx0aGlzLnN1YlF1ZXN0aW9ucy5sZW5ndGg7aSsrKXtcbiAgICAgICAvLyB0byBzaG93L2hpZGUgdGhlIGRlcGVuZGVudCBkcm9wZG93biBvbmx5IGZpZWxkIHVzaW5nIHRoZSBkcm9wRG93bk9ubHkgYm9vbGVhblxuICAgICAgIGlmKHRoaXMuc3ViUXVlc3Rpb25zW2ldLnNpemUgPT0gNCl7XG4gICAgICAgICB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5kcm9wRG93bk9ubHkgPSB0cnVlO1xuICAgICAgIH1lbHNle1xuICAgICAgICAgdGhpcy5zdWJRdWVzdGlvbnNbaV0uZHJvcERvd25Pbmx5ID0gZmFsc2U7XG4gICAgICAgfVxuICAgICB9XG4gICAgIGlmKGFucyAhPSAnJyl7XG4gICAgICAgZm9yKHZhciBhbiBvZiAoYW5zLnNwbGl0KCckJEBAIyMnKSkpe1xuICAgICAgICAgdmFyIHNRID0gbmV3IFF1ZXN0aW9uKCk7XG4gICAgICAgICBPYmplY3QuYXNzaWduKHNRLHF1ZXMpO1xuICAgICAgICAgc1EuaW5wdXQgPSBhbjtcbiAgICAgICAgIHRoaXMuc3ViUXVlc3Rpb25zLnB1c2goc1EpO1xuICAgICAgIH1cbiAgICAgfVxuICAgfVxuICAgaWYgKHRoaXMudmFsdWVOYW1lMSAhPSBudWxsICYmIHRoaXMudmFsdWVOYW1lMS5sZW5ndGggPiAwKSB7XG4gICAgIHRoaXMuYm9va0ZsYWdBY2NlcHQgPSB0aGlzLnZhbHVlTmFtZTEuc3BsaXQoXCI7XCIpO1xuICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc3ViUXVlc3Rpb25zKTtcbiAgIH1cbiAgIHRoaXMuc3RydWN0TG9jYWxTdWJRdWVzdGlvbihudWxsKTtcbiAgIC8vIEhBIDAyRkVCMjQgT24gRWRpdCB0byBkaXNwbGF5IHRoZSB2YWx1ZSB1c2lpbmcgdGhpc1xuICAgaWYodGhpcy5hbGxJbnB1dFZhbHVlcy5sZW5ndGggPiAwKXtcbiAgICAgdGhpcy5zdWJRdWVzdGlvbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICBmb3IobGV0IHNpbmdsZUlucHV0IG9mIHRoaXMuYWxsSW5wdXRWYWx1ZXMpe1xuICAgICAgICAgaWYoZWxlbWVudC5pZCA9PSBzaW5nbGVJbnB1dC5pZCl7XG4gICAgICAgICAgIGVsZW1lbnQuaW5wdXQgPSBzaW5nbGVJbnB1dC5pbnB1dDtcbiAgICAgICAgIH1cbiAgICAgICB9XG4gICAgIH0pO1xuICAgfVxuIH1cblxuIG9wdGlvbkNoYW5nZShzZWxWYWx1ZSkge1xuICAgbGV0IHJhZGlvVHJhY2tpbmdJZDogc3RyaW5nID0gXCJcIjtcbiAgIGZvciAodmFyIG9wdCBvZiB0aGlzLnF1ZXN0aW9uSXRlbS5vcHRpb25zKSB7XG4gICAgIC8vY29uc29sZS5sb2coJ29wdGlvbkNoYW5nZSBUcmFja2luZ0lkJytvcHQudHJhY2tpbmdJZCk7XG4gICAgIGlmIChvcHQudmFsdWUgPT0gc2VsVmFsdWUpIHtcbiAgICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgaWYnK29wdC50cmFja2luZ0lkKVxuICAgICAgIHJhZGlvVHJhY2tpbmdJZCA9IG9wdC50cmFja2luZ0lkO1xuICAgICB9XG4gICB9XG5cbiAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdChyYWRpb1RyYWNraW5nSWQpO1xuICAgdGhpcy5jbGVhckVycm9yKCk7XG4gICAvLyAvL2NvbnNvbGUubG9nKCdpbnNpZGUgb3B0aW9uQ2hhbmdlIHVzaW5nICcgKyBzZWxWYWx1ZSk7XG5cbiAgIHRoaXMuaW5wVmFsdWUgPSBzZWxWYWx1ZTtcbiB9XG5cbiBjbGVhckVycm9yKCkge1xuICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLmVycm9yKSB7XG4gICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbnVsbDtcbiAgIH1cbiB9XG5cbiBjbGVhckxvY2FsU3ViUXVlc0Vycm9yKHF1ZXNJZCkge1xuICAgcXVlc0lkLmVycm9yID0gbnVsbDtcbiB9XG5cbiBpbnB1dFZhbGlkYXRlKGUpIHtcbiAgIHZhciBrZXlDb2RlID0gZS5rZXlDb2RlIHx8IGUud2hpY2g7XG4gICAvLyBPbmx5IEFTQ0lJIGNoYXJhY3RlciBpbiB0aGF0IHJhbmdlIGFsbG93ZWRcbiAgIHZhciBBU0NJSUNvZGUgPSAoZS53aGljaCkgPyBlLndoaWNoIDogZS5rZXlDb2RlO1xuICAgaWYgKEFTQ0lJQ29kZSA+IDMxICYmIChBU0NJSUNvZGUgPCA0OCB8fCBBU0NJSUNvZGUgPiA1Nykpe1xuICAgICByZXR1cm4gZmFsc2U7XG4gICB9ZWxzZXtcbiAgICAgcmV0dXJuIHRydWU7XG4gICB9XG4gfVxuXG4gQ0NPbkNoYW5nZShpbnBWYWx1ZTogc3RyaW5nKSB7XG5cbiAgICAgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSAyKSB7XG4gICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcbiAgICAgfVxuICAgICBlbHNlIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gNykge1xuICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XG4gICAgIH1cbiAgICAgZWxzZSBpZiAoaW5wVmFsdWUubGVuZ3RoID09IDEyKSB7XG4gICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcbiAgICAgfVxuICAgICBlbHNlIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gMTcpIHtcbiAgICAgICB0aGlzLmlucFZhbHVlICs9IFwiIFwiO1xuICAgICB9XG4gICAgIGVsc2UgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSAyMikge1xuICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XG4gICAgIH1cblxuIH1cblxuIGlzTm90VmFsaWRBY2NOdW1iZXIoczogc3RyaW5nKSB7XG4gICBzID0gcy5yZXBsYWNlKC9cXHMrL2csIFwiXCIpO1xuICAgcyA9ICdFUycgKyBzO1xuICAgdmFyIGlzTm90VmFsaWRTdHIgPSBmYWxzZTtcbiAgIGlmIChzLmxlbmd0aCA9PSAyNCkge1xuICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICBpZiAoaSA8PSAxICYmIC9bYS16QS1aXS8udGVzdChzLmNoYXJBdChpKSkpIHtcbiAgICAgICAgIC8vY29uc29sZS5sb2coXCJWYWxpZCBjaGFyOiBcIiArIHMuY2hhckF0KGkpKTtcbiAgICAgICB9IGVsc2UgaWYgKGkgPiAxICYmIC9bMC05XS8udGVzdChzLmNoYXJBdChpKSkpIHtcbiAgICAgICAgIC8vY29uc29sZS5sb2coXCJWYWxpZCBudW1lcmljOiBcIiArIHMuY2hhckF0KGkpKTtcbiAgICAgICB9IGVsc2Uge1xuICAgICAgICAgaXNOb3RWYWxpZFN0ciA9IHRydWU7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKFwiTm90IGEgdmFsaWQgY2hhclwiKTtcbiAgICAgICB9XG4gICAgIH1cbiAgIH0gZWxzZSB7XG4gICAgIGlzTm90VmFsaWRTdHIgPSB0cnVlO1xuICAgICAvL2NvbnNvbGUubG9nKFwiTm90IGEgdmFsaWQgYWNjIG51bWJlclwiKTtcbiAgIH1cbiAgIHJldHVybiBpc05vdFZhbGlkU3RyO1xuIH1cblxuIGNsZWFyU1FFcnJvcihxdWVzSWQpIHtcbiAgIHZhciBzcUxpc3QgPSB0aGlzLnN1YlF1ZXN0aW9ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQgPT0gcXVlc0lkKTtcbiAgIGZvciAodmFyIHNxIG9mIHNxTGlzdCkge1xuICAgICBzcS5lcnJvciA9IG51bGw7XG4gICB9XG4gfVxuXG4gdXBsb2FkRmlsZShldmVudCxxdWVzPzphbnkpIHtcbiAgIC8vY29uc29sZS5sb2coJ2luc2lkZSB1cGxvYWQnKTtcbiAgIHRoaXMuY2xlYXJFcnJvcigpO1xuICAgdGhpcy5maWxlVHlwZUluY29ycmVjdCA9IGZhbHNlO1xuICAgdmFyIGxvY2FsID0gdGhpcztcbiAgIGxvY2FsLmF0dGFjaG1lbnQgPSBldmVudC50YXJnZXQuZmlsZXNbMF07XG4gICAvLyBWYWxpZGF0ZSB0aGUgZmlsZSBleHRlbnNpb25cbiAgIC8vY29uc29sZS5sb2cobG9jYWwuYXR0YWNobWVudCk7XG4gICBsZXQgZmlsZU5hbWVXaXRoVHlwZTogc3RyaW5nID1cbiAgICAgbG9jYWwuYXR0YWNobWVudCAmJiBsb2NhbC5hdHRhY2htZW50Lm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgIGlmIChcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuanBnXCIpICYmXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLnBuZ1wiKSAmJlxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5wZGZcIikgJiZcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuanBlZ1wiKSAmJlxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5oZWljXCIpICYmXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLmhlaWZcIikgJiZcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuSlBHXCIpICYmXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLlBOR1wiKSAmJlxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5QREZcIikgJiZcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuSlBFR1wiKSAmJlxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5IRUlDXCIpICYmXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLkhFSUZcIilcbiAgICkge1xuICAgICBsb2NhbC5maWxlVHlwZUluY29ycmVjdCA9IHRydWU7XG4gICB9XG4gICAvLyBSZXR1cm4gd2hlbiB0aGUgZmlsZSB0eXBlIGlzIGluY29ycmVjdFxuICAgaWYgKGxvY2FsLmZpbGVUeXBlSW5jb3JyZWN0KSB7XG4gICAgIHJldHVybjtcbiAgIH1cbiAgIGxldCBmaWxlQ29udGVudDogYW55O1xuICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgIGZpbGVDb250ZW50ID0gcmVhZGVyLnJlc3VsdDtcbiAgICAgbG9jYWwuZmlsZUV4Y2VlZGVkTGltaXQgPSBsb2NhbC5hdHRhY2htZW50LnNpemUgPiAzMjQyODgwOyAvL1ZhbGlkYXRpbmcgZmlsZSBzaXplXG4gICAgIC8vIFVwbG9hZCB0aGUgZmlsZSB0byBTYWxlc2ZvcmNlIHdoZW4gdGhlIGxpbWl0IGlzIHdpdGhpbiByYW5nZVxuICAgICBpZiAoIWxvY2FsLmZpbGVFeGNlZWRlZExpbWl0KSB7XG4gICAgICAgbGV0IGZpbGVXcmFwcGVyID0gbmV3IEF0dGFjaG1lbnRXcmFwcGVyKCk7XG4gICAgICAgZmlsZVdyYXBwZXIucGFyZW50SWQgPSBsb2NhbC5hYkl0ZW0uaWQ7XG4gICAgICAgZmlsZVdyYXBwZXIuZmlsZU5hbWUgPSBsb2NhbC5hdHRhY2htZW50Lm5hbWU7XG4gICAgICAgZmlsZVdyYXBwZXIuZmlsZUNvbnRlbnQgPSBmaWxlQ29udGVudDtcbiAgICAgICBsb2NhbC5jcmVhdGVBdHRhY2htZW50KGZpbGVXcmFwcGVyKTtcbiAgICAgICBxdWVzLmlucHV0ID0gZmlsZVdyYXBwZXIuZmlsZU5hbWU7XG4gICAgIH1cbiAgIH07XG4gICB0aGlzLnNwaW5uZXIuc2hvdyh0aGlzLnNwaW5uZXJOYW1lKTtcbiAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGV2ZW50LnRhcmdldC5maWxlc1swXSk7XG4gfVxuXG4gcHJpdmF0ZSBzdWNjZXNzQXR0YWNobWVudENyZWF0ZSA9IChyZXNwb25zZSkgPT4ge1xuICAgbGV0IGNyZWF0ZWRBdHRhY2htZW50OiBBdHRhY2htZW50ID0gbmV3IEF0dGFjaG1lbnQoXG4gICAgIHJlc3BvbnNlLmF0dGFjaG1lbnRJZCxcbiAgICAgcmVzcG9uc2UuYXR0YWNobWVudE5hbWUsXG4gICAgIHRoaXMuYXR0YWNobWVudC5sYXN0TW9kaWZpZWREYXRlXG4gICApO1xuICAgdGhpcy5hdHRhY2htZW50cy5wdXNoKGNyZWF0ZWRBdHRhY2htZW50KTtcbiAgIHRoaXMuYXR0YWNobWVudHNNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkLCB0aGlzLmF0dGFjaG1lbnRzKTtcbiAgIHRoaXMuc3Bpbm5lci5oaWRlKHRoaXMuc3Bpbm5lck5hbWUpO1xuIH07XG5cbiBwcml2YXRlIHN1Y2Nlc3NBdHRhY2htZW50RGVsZXRlID0gKHJlc3BvbnNlKSA9PiB7XG4gICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuYXR0YWNobWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgaWYgKHRoaXMuYXR0YWNobWVudHNbaV0uYXR0YWNobWVudElkID09PSB0aGlzLmF0dGFjaG1lbnRJZCkge1xuICAgICAgIHRoaXMuYXR0YWNobWVudHMuc3BsaWNlKGksIDEpO1xuICAgICB9XG4gICB9XG4gfTtcblxuIHByaXZhdGUgZmFpbHVyZUF0dGFjaG1lbnRDcmVhdGUgPSAocmVzcG9uc2UpID0+IHtcbiAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlQXR0YWNobWVudENyZWF0ZScpO1xuIH07XG5cbiBwcml2YXRlIGZhaWx1cmVBdHRhY2htZW50RGVsZXRlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmFpbHVyZUF0dGFjaG1lbnREZWxldGUnKTtcbiB9O1xuXG4gaGFuZGxlU3VibWl0Q2xpY2soKSB7XG4gICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uc3VibWl0VHJhY2tpbmdJZCk7XG4gICB0aGlzLnVwZGF0ZUFuc3dlckJvb2sodGhpcy5hYkl0ZW0uaWQpO1xuIH1cblxuIGhhbmRsZUNhbmNlbENsaWNrKCkge1xuICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHRoaXMucWJJdGVtLmNhbmNlbFRyYWNraW5nSWQpO1xuIH1cblxuIHByaXZhdGUgY3JlYXRlQXR0YWNobWVudCA9IChmaWxlV3JhcHBlcjogYW55KSA9PiB7XG4gICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIikge1xuICAgICAvLyB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXG4gICAgIC8vICAgdGhpcy50a24sXG4gICAgIC8vICAgW1wiQXR0YWNobWVudFwiLCBcImNyZWF0ZVwiLCBKU09OLnN0cmluZ2lmeShmaWxlV3JhcHBlcildLFxuICAgICAvLyAgIHRoaXMuc3VjY2Vzc0F0dGFjaG1lbnRDcmVhdGUsXG4gICAgIC8vICAgdGhpcy5mYWlsdXJlQXR0YWNobWVudENyZWF0ZVxuICAgICAvLyApO1xuICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xuICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xuICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSUZyb21Ob2RlKCdBdHRhY2htZW50JywnY3JlYXRlJywgSlNPTi5zdHJpbmdpZnkoZmlsZVdyYXBwZXIpLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxuICAgICAoZGF0YSk9PntcbiAgICAgICBjb25zb2xlLmxvZygndXBkYXRlZCBzdWNjdXNzZnVsbHknKTtcbiAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcbiAgICAgICB0aGlzLnN1Y2Nlc3NBdHRhY2htZW50Q3JlYXRlKEpTT04ucGFyc2UoZGF0YSkpXG4gICAgIH0sKGVycm9yKSA9PiB7XG4gICAgICAgdGhpcy5mYWlsdXJlQXR0YWNobWVudENyZWF0ZShlcnJvcik7XG4gICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHF1ZXN0aW9uIGJvb2tzJywgZXJyb3IpO1xuICAgICB9XG4gICAgIClcbiAgIH0gZWxzZSB7XG4gICAgIC8vIFZEIDE1RkVCMjQgLSB1c2VkIHByb2Nlc3NOZXcgbWV0aG9kXG4gICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAvLyBWRCAxMkp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xuICAgLy8gVkQgMzFOT1YyNCBwYXJhbSBjaGFuZ2VzIHdpdGggbmV3IG1ldGhvZFxuICAgIGxldCBwYXJhMyA9IHtcbiAgICAgIGRhdGFUeXBlOiBcIkF0dGFjaG1lbnRcIixcbiAgICAgIG9wZXJhdGlvbjogXCJjcmVhdGVcIixcbiAgICAgIHBhcmFtMTogSlNPTi5zdHJpbmdpZnkoZmlsZVdyYXBwZXIpLFxuICAgICAgcGFyYW1KU09OOiBKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksXG4gICAgICBsYW5ndWFnZUNvZGUgOiAnJ1xuICAgIH1cbiAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxuICAgICAgIFwiTnh0Q29udHJvbGxlci5wcm9jZXNzRGF0YVwiLFxuICAgICAgIFtKU09OLnN0cmluZ2lmeShwYXJhMyldLFxuICAgICAgIHRoaXMuc3VjY2Vzc0F0dGFjaG1lbnRDcmVhdGUsXG4gICAgICAgdGhpcy5mYWlsdXJlQXR0YWNobWVudENyZWF0ZVxuICAgICApO1xuICAgfVxuIH1cblxuIGRlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudElkOiBzdHJpbmcpIHtcbiAgIHRoaXMuYXR0YWNobWVudElkID0gYXR0YWNobWVudElkO1xuICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KFwiZGVsZXRlQXR0YWNobWVudFwiKTtcbiAgIHRoaXMuZGVsZXRlU0ZBdHRhY2htZW50KGF0dGFjaG1lbnRJZCk7XG4gfVxuXG4gcHJpdmF0ZSBkZWxldGVTRkF0dGFjaG1lbnQgPSAoZmlsZUlkOiBzdHJpbmcpID0+IHtcbiAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XG4gICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcbiAgICAgLy8gICB0aGlzLnRrbixcbiAgICAgLy8gICBbXCJBdHRhY2htZW50XCIsIFwiZGVsZXRlXCIsIGZpbGVJZF0sXG4gICAgIC8vICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudERlbGV0ZSxcbiAgICAgLy8gICB0aGlzLmZhaWx1cmVBdHRhY2htZW50RGVsZXRlXG4gICAgIC8vICk7XG4gICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XG4gICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XG4gICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ0F0dGFjaG1lbnQnLCdkZWxldGUnLGZpbGVJZCAsSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXG4gICAgIChkYXRhKT0+e1xuICAgICAgIGNvbnNvbGUubG9nKCd1cGRhdGVkIHN1Y2N1c3NmdWxseScpO1xuICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xuICAgICAgIHRoaXMuc3VjY2Vzc0F0dGFjaG1lbnREZWxldGUoSlNPTi5wYXJzZShkYXRhKSlcbiAgICAgfSwoZXJyb3IpID0+IHtcbiAgICAgICB0aGlzLmZhaWx1cmVBdHRhY2htZW50RGVsZXRlKGVycm9yKTtcbiAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XG4gICAgIH1cbiAgICAgKVxuICAgfSBlbHNlIHtcbiAgICAgLy8gVkQgMTVGRUIyNCAtIHVzZWQgcHJvY2Vzc05ldyBtZXRob2RcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcbiAgICAgLy8gVkQgMzFOT1YyNCBwYXJhbSBjaGFuZ2VzIHdpdGggbmV3IG1ldGhvZFxuICAgICBsZXQgcGFyYTQgPSB7XG4gICAgICBkYXRhVHlwZTogXCJBdHRhY2htZW50XCIsXG4gICAgICBvcGVyYXRpb246IFwiZGVsZXRlXCIsXG4gICAgICBwYXJhbTE6IGZpbGVJZCxcbiAgICAgIHBhcmFtSlNPTjogSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLFxuICAgICAgbGFuZ3VhZ2VDb2RlIDogJydcbiAgICB9XG4gICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcbiAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc0RhdGFcIixcbiAgICAgICBbZmlsZUlkLEpTT04uc3RyaW5naWZ5KHBhcmE0KV0sXG4gICAgICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudERlbGV0ZSxcbiAgICAgICB0aGlzLmZhaWx1cmVBdHRhY2htZW50RGVsZXRlXG4gICAgICk7XG4gICB9XG4gfVxuXG4gZ2V0RmlsZU5hbWUoZmlsZU5hbWV3aXRoSWRhbmRUeXBlKSB7XG4gICAvL3RydW5jYXRlIGZpbGUgcGF0aFxuICAgdmFyIGZpbGVOYW1lV2l0aFR5cGUgPSBmaWxlTmFtZXdpdGhJZGFuZFR5cGUuc3Vic3RyKFxuICAgICBmaWxlTmFtZXdpdGhJZGFuZFR5cGUuaW5kZXhPZihcIjo6OjpcIikgKyA0XG4gICApO1xuICAgcmV0dXJuIGZpbGVOYW1lV2l0aFR5cGU7IC8vZmlsZU5hbWVXaXRoVHlwZS5yZXBsYWNlKC9eKC4qKFxcL3xcXFxcKSkoLispJC8sICckMycpO1xuIH1cbiBmaWxlVUkoKSB7XG4gICBpZiAodGhpcy5hdHRhY2htZW50cy5sZW5ndGggPT09IDApIHtcbiAgIH1cbiB9XG5cbiAvL1VwZGF0ZSBmdW5jdGlvbiBmb3IgY2F0ZWdvcml6YXRpb25cbiAvLyBzdGVwcGVyQ2F0ZWcoKSB7XG4gLy8gICB0aGlzLmZpcnN0Rm9ybUdyb3VwID0gdGhpcy5fZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuIC8vICAgICBmaXJzdEN0cmw6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAvLyAgIH0pO1xuIC8vICAgdGhpcy5zZWNvbmRGb3JtR3JvdXAgPSB0aGlzLl9mb3JtQnVpbGRlci5ncm91cCh7XG4gLy8gICAgIHNlY29uZEN0cmw6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF1cbiAvLyAgIH0pO1xuXG4gLy8gfVxuXG4gLy8gVXBkYXRlIEZ1bmN0aW9uIGZvciB0aGUgUHJvZ3Jlc3MgQmFyXG4gdXBkYXRlUHJvZ3Jlc3MoKSB7XG4gICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIgPT09IHRydWUpIHtcbiAgICAgbGV0IGogPSBbXTtcbiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBvc3NpYmlsaXRpZXMudG90YWw7IGkrKykge1xuICAgICAgIHZhciBwYXRocG9zcyA9IE9iamVjdC52YWx1ZXModGhpcy5wb3NzaWJpbGl0aWVzLnBhdGhzW2ldLnF1ZXN0aW9ucyk7XG4gICAgICAgaWYgKHBhdGhwb3NzW3RoaXMucGF0aHF1ZXN0aW9uXSA9PT0gdGhpcy5jdXJyZW50TmFtZSkge1xuICAgICAgICAgai5wdXNoKGkpO1xuICAgICAgICAgdGhpcy5jaGVjayA9IHRydWU7XG4gICAgICAgfSBlbHNlIHtcbiAgICAgICAgIHRoaXMuY2hlY2sgPSBmYWxzZTtcbiAgICAgICB9XG4gICAgIH1cbiAgICAgaWYgKGoubGVuZ3RoID09PSAxKSB7XG4gICAgICAgdGhpcy5jb3VudCA9IGpbMF07XG4gICAgIH1cbiAgICAgaWYgKGoubGVuZ3RoID4gMSkge1xuICAgICAgIHZhciB3aWR0aCA9XG4gICAgICAgICA5MCAqICh0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoIC8gdGhpcy5wb3NzaWJpbGl0aWVzLm1heFF1ZXN0aW9ucyk7XG4gICAgICAgdGhpcy5wcm9ncmVzc1N0eWxlID0gTWF0aC5yb3VuZCh3aWR0aCkgKyBcIiVcIjtcbiAgICAgfSBlbHNlIGlmIChqLmxlbmd0aCA9PT0gMSkge1xuICAgICAgIHZhciB3aWR0aCA9XG4gICAgICAgICA5MCAqXG4gICAgICAgICAodGhpcy5xdWVzdGlvblN0YWNrLmxlbmd0aCAvXG4gICAgICAgICAgIHRoaXMucG9zc2liaWxpdGllcy5wYXRoc1t0aGlzLmNvdW50XS5jb3VudCk7XG4gICAgICAgdGhpcy5wcm9ncmVzc1N0eWxlID0gTWF0aC5yb3VuZCh3aWR0aCkgKyBcIiVcIjtcbiAgICAgfVxuICAgICB0aGlzLnBlcmNlbnQgPSArTWF0aC5yb3VuZCh3aWR0aCk7XG4gICB9XG4gfVxuXG4gdG93bk5hbWUoYXJlYSkge1xuICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gYXJlYS50b3duO1xuICAgLy9jb25zb2xlLmxvZygndGhpcyB2YWx1ZT0nK3RoaXMuc2VsZWN0ZWRWYWx1ZSlcbiAgIHRoaXMudGVtcG9BZGRyZXNzID0gW107XG4gfVxuXG4gZ2V0VG93bkxvY2FsKCkge1xuICAgdGhpcy50ZW1wb0FkZHJlc3MgPSBbXTtcbiAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoID4gMCkge1xuICAgICBmb3IgKHZhciB2YWwgb2YgdGhpcy5sb2NhbGFkZHJlc3MpIHtcbiAgICAgICBpZiAoXG4gICAgICAgICB2YWwudG93bi5zdWJzdHJpbmcoMCwgdGhpcy5zZWxlY3RlZFZhbHVlLmxlbmd0aCkgPT0gdGhpcy5zZWxlY3RlZFZhbHVlXG4gICAgICAgKSB7XG4gICAgICAgICAvL2NvbnNvbGUubG9nKHZhbC5jb3VudHJ5KVxuICAgICAgICAgdGhpcy50ZW1wb0FkZHJlc3MucHVzaCh2YWwpO1xuICAgICAgICAgLy9jb25zb2xlLmxvZygndGVtcG9BZGRyZXNzJyt0aGlzLnRlbXBvQWRkcmVzcylcbiAgICAgICAgIGlmICh0aGlzLnRlbXBvQWRkcmVzcy5sZW5ndGggPT0gNikge1xuICAgICAgICAgICBicmVhaztcbiAgICAgICAgIH1cbiAgICAgICB9XG4gICAgIH1cbiAgIH1cbiAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VsZWN0TGlzdFwiKS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgdGhpcy5zZXRTZWFyY2hMaXN0V2lkdGgoKTtcbiB9XG5cbiBjbGVhckxpc3QoKSB7XG4gICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgdGhpcy50ZW1wb0FkZHJlc3MgPSBbXTtcbiAgIH0sIDUwMCk7XG4gfVxuXG4gc2V0U2VhcmNoTGlzdFdpZHRoKCkge1xuICAgLy90byByZXNpemUgc2VhcmNoIGxpc3QgYmFzZWQgb24gdGhlIHNjcmVlbiBzaXplXG4gICBjb25zdCBzZWFyY2hCb3hXaWR0aCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImF1dG9jb21wbGV0ZS1pbnB1dFwiKS5vZmZzZXRXaWR0aDtcbiAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VsZWN0TGlzdFwiKS5zdHlsZS53aWR0aCA9IHNlYXJjaEJveFdpZHRoICsgXCJweFwiO1xuIH1cblxuICAgZ2V0Q29kZSgpe1xuICAgICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xuICAgICBpZiAodGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUubGVuZ3RoID4gMCkge1xuICAgICAgIGZvciAodmFyIHZhbCBvZiB0aGlzLmFsbEFkZHJlc3MpIHtcbiAgICAgICAgIGlmICh2YWwuemlwQ29kZS5zdWJzdHJpbmcoMCwgdGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUubGVuZ3RoKSA9PSB0aGlzLnNlbGVjdGVkUG9zdGFsY29kZSkge1xuICAgICAgICAgICAvL2NvbnNvbGUubG9nKHZhbC5jb3VudHJ5KVxuICAgICAgICAgICB0aGlzLnRlbXBvQWRkcmVzcy5wdXNoKHZhbCk7XG4gICAgICAgICAgIC8vY29uc29sZS5sb2coJ3RlbXBvQWRkcmVzcycrdGhpcy50ZW1wb0FkZHJlc3MpXG4gICAgICAgICAgIGlmICh0aGlzLnRlbXBvQWRkcmVzcy5sZW5ndGggPT0gNikge1xuICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICB9XG4gICAgICAgICB9XG4gICAgICAgfVxuICAgICB9XG4gICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VsZWN0TGlzdFwiKS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICB0aGlzLnNldFNlYXJjaExpc3RXaWR0aCgpO1xuICAgfVxuICAgZ2V0UG9zdGFsY29kZSh2YWx1ZSl7XG4gICAgdGhpcy5wbGFjZXM9W107XG4gICAgdGhpcy5wcm92aW5jZT1bXTtcbiAgICAgdmFyIHByb3ZpbmNlO1xuICAgICB2YXIgdG93bjtcbiAgICAgdGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUgPSB2YWx1ZS56aXBDb2RlO1xuICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZS5jb3VudHJ5O1xuICAgICB0aGlzLnRlbXBvQWRkcmVzcz1bXTtcblxuXG4gICAgIGZvcih2YXIgdmFsIG9mIHRoaXMubG9jYWxhZGRyZXNzKXtcbiAgICAgICBpZih0aGlzLnNlbGVjdGVkUG9zdGFsY29kZSA9PSB2YWwuemlwQ29kZSApe1xuICAgICAgICAgdGhpcy5wbGFjZXMucHVzaCh2YWwpO1xuICAgICAgICAgdGhpcy5wcm92aW5jZS5wdXNoKHZhbCk7XG4gICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWwuY291bnRyeTtcbiAgICAgICAgIHByb3ZpbmNlID0gdmFsLnByb3ZpbmNlXG4gICAgICAgICB0b3duID0gdmFsLnRvd247XG4gICAgICAgfVxuICAgICB9XG4gICAgIGlmKHRoaXMucGxhY2VzLmxlbmd0aCA9PSAxKXtcblxuICAgICAgIHRoaXMuc2VsZWN0ZWRQcm92aW5jZSA9cHJvdmluY2U7XG4gICAgICAgdGhpcy5zZWxlY3RlZENpdHkgPSB0b3duO1xuICAgICB9ZWxzZSBpZih0aGlzLnBsYWNlcy5sZW5ndGggPjEgfHwgdGhpcy5wbGFjZXMubGVuZ3RoID09MCl7XG5cbiAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaXR5ID0nJztcbiAgICAgICAgIHRoaXMuc2VsZWN0ZWRQcm92aW5jZT0nJztcbiAgICAgfVxuICAgfVxuICAgY2xvc2VEcm9wZG93bigpIHtcbiAgICAgaWYodGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUubGVuZ3RoID09IDUpe1xuICAgICAgIHRoaXMuZ2V0UG9zdGFsY29kZSh7emlwQ29kZTp0aGlzLnNlbGVjdGVkUG9zdGFsY29kZX0pO1xuICAgICB9XG5cbiAgc2V0VGltZW91dCgoKT0+IHtcbiAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NlbGVjdExpc3QnKS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICB9LCA1MDApO1xuICB9XG5cblxuICAvL1BsdXMgYnV0dG9uIGltcGxlbWVudGF0aW9uLlxuICBzdHJ1Y3RMb2NhbFN1YlF1ZXN0aW9uKHF1ZXM6IExvY2FsUXVlc3Rpb24pe1xuICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBzdHJ1Y3RMb2NhbFN1YlF1ZXN0aW9uJyk7XG4gICAgIGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnN1YlF1ZXN0aW9ucy5sZW5ndGg7IGkrKyl7XG4gICAgICAgdmFyIGxvY2FsU3ViUXVlc3Rpb24gPSBuZXcgTG9jYWxRdWVzdGlvbigpO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5pZCA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLmlkO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5OYW1lID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uTmFtZTtcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24ucXVlc3Rpb24gPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5xdWVzdGlvbjtcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24ucXVlc3Rpb25UZXh0ID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0ucXVlc3Rpb25UZXh0O1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi50eXBlID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0udHlwZTtcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24udGl0bGUgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS50aXRsZTtcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uc3ViVGl0bGUgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5zdWJUaXRsZTtcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uaXNPcHRpb25hbCA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLmlzT3B0aW9uYWw7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLmVycm9yTWVzc2FnZSA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLmVycm9yTWVzc2FnZTtcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24ubmV4dFF1ZXN0aW9uID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0ubmV4dFF1ZXN0aW9uO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5ncm91cE5hbWUgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5ncm91cE5hbWU7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLnF1ZXN0aW9uTnVtYmVyID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0ucXVlc3Rpb25OdW1iZXI7XG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLmFsbG93ZWRGaWxlRXh0ZW5zaW9ucyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLmFsbG93ZWRGaWxlRXh0ZW5zaW9ucztcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24udW5pcXVlU3ViUUlkID0gJycrdGhpcy5zdWJRdWVzdGlvbnNbaV0uaWQgKyBpO1xuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5pbnB1dCA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLmlucHV0O1xuICAgICAgICAgdGhpcy5sb2NhbFN1YlF1ZXN0aW9ucy5wdXNoKGxvY2FsU3ViUXVlc3Rpb24pO1xuICAgICB9XG4gLy8gY29uc29sZS5sb2coJ2ZpbmFsIGxvY2FsIHN1YiBxdWVzdGlvbnMnKTtcbiAvLyBjb25zb2xlLmxvZyh0aGlzLmxvY2FsU3ViUXVlc3Rpb25zKTtcbiAvLyBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XG4gdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkLHRoaXMubG9jYWxTdWJRdWVzdGlvbnMpO1xuIHRoaXMubG9jYWxTdWJRdWVzdGlvbnMgPSBbXTtcbiAvLyBjb25zb2xlLmxvZygnZmluYWwga2V5IGxvY2FsU3ViUU1hcCBtYXAnKTtcbiAvLyBjb25zb2xlLmxvZyh0aGlzLmxvY2FsU3ViUU1hcCk7XG4gfVxuXG4gYWRkSW5wdXRCb3gocXVlc3Rpb246IExvY2FsUXVlc3Rpb24sIGluZGV4OiBudW1iZXIpe1xuICAgdmFyIGFycmEgPSB0aGlzLmxvY2FsU3ViUU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xuICAgdmFyIHFJbmRleCA9IGFycmEuaW5kZXhPZihxdWVzdGlvbik7XG4gICB2YXIgcXVlczogTG9jYWxRdWVzdGlvbiA9IG5ldyBMb2NhbFF1ZXN0aW9uKCk7XG4gICBPYmplY3QuYXNzaWduKHF1ZXMsIHF1ZXN0aW9uKTtcbiAgIC8vY29uc29sZS5sb2coKHF1ZXMudW5pcXVlU3ViUUlkKS5zdWJzdHJpbmcoMTgsIChxdWVzLnVuaXF1ZVN1YlFJZCkubGVuZ3RoKSsxKTtcbiAgIGlmKHRoaXMua2V5SW5kZXggPT0gaW5kZXgpe1xuICAgICBxdWVzLnVuaXF1ZVN1YlFJZCA9IHF1ZXMuaWQgKyAoU3RyaW5nKGluZGV4KzEpKTtcbiAgICAgdGhpcy5rZXlJbmRleCsrO1xuICAgfWVsc2V7XG4gICAgIHRoaXMua2V5SW5kZXgrKztcbiAgICAgcXVlcy51bmlxdWVTdWJRSWQgPSBxdWVzLmlkICsgKFN0cmluZyh0aGlzLmtleUluZGV4KSk7XG4gICB9XG4gICBxdWVzLmlucHV0ID0gJyc7XG4gICBhcnJhLnNwbGljZShxSW5kZXgrMSwgMCwgcXVlcyk7XG5cbiAgIHRoaXMubG9jYWxTdWJRTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCxhcnJhKTtcbiAgIC8vY29uc29sZS5sb2codGhpcy5sb2NhbFN1YlFNYXApO1xuIH1cblxuIHJlbW92ZUFkZHJlc3MocXVlc1VuaXF1ZUlkOiBzdHJpbmcsIHFOYW1lOiBzdHJpbmcpIHtcbiAgIC8vY29uc29sZS5sb2cocXVlc1VuaXF1ZUlkKVxuICAgdmFyIHZhbCA9IHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XG4gICB2YXIga2V5aW5kZXggPSAwO1xuXG4gICBmb3IobGV0IGk9MDsgaTx2YWwubGVuZ3RoOyBpKyspe1xuICAgICBpZih2YWxbaV0uTmFtZSA9PSBxTmFtZSl7XG4gICAgICAga2V5aW5kZXgrKztcbiAgICAgfVxuICAgfVxuXG4gICBpZih0aGlzLmxvY2FsU3ViUU1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uaWQpICYmIGtleWluZGV4ID4xKXtcbiAgICAgdmFyIHJlb3JkZXIgPSB2YWwuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnVuaXF1ZVN1YlFJZCAhPT0gcXVlc1VuaXF1ZUlkKVxuICAgICB0aGlzLmxvY2FsU3ViUU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQscmVvcmRlcik7XG4gICAgIGtleWluZGV4LS07XG4gICB9XG4gfVxuXG4gZ2V0TG9jYWxTdWJRdWVzdGlvbnMoaWQ6IFN0cmluZyl7XG4gICByZXR1cm4gdGhpcy5sb2NhbFN1YlFNYXAuZ2V0KGlkKTtcbiB9XG5cbiAvL1NpbmdsZSBBZGQgYnV0dG9uIGZ1bmN0aW9uYWxpdHkgZm9yIExpc3QgdHlwZVxuQWRkKHF1ZXN0aW9uOiBMb2NhbFF1ZXN0aW9uKXtcbiAgIHRoaXMuYWRkRmxhZyA9ICBmYWxzZTtcbiAgIHZhciBhcnJhID0gdGhpcy5sb2NhbFN1YlFNYXAuZ2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkKTtcbiAgIHZhciBpbmRleCAgPSBhcnJhLmxlbmd0aDtcbiAgIHZhciBhID0gYXJyYS5zbGljZSgtMSkucG9wKCk7XG4gICB0aGlzLmluZGV4Q291bnQgID0gYS5xdWVzdGlvbk51bWJlcjtcblxuICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmluZGV4Q291bnQgOyBpKyspIHtcbiAgICAgdmFyIHF1ZXM6IExvY2FsUXVlc3Rpb24gPSBuZXcgTG9jYWxRdWVzdGlvbigpO1xuICAgICBPYmplY3QuYXNzaWduKHF1ZXMsIHF1ZXN0aW9uW2ldKTtcbiAgICAgdGhpcy5rZXlJbmRleCsrO1xuICAgICBxdWVzLnVuaXF1ZVN1YlFJZCA9IHF1ZXMuaWQgKyAoU3RyaW5nKHRoaXMua2V5SW5kZXgpKTtcbiAgICAgcXVlcy5pbnB1dCA9ICcnO1xuICAgICBhcnJhLnNwbGljZShpbmRleCsodGhpcy5pbmRleENvdW50LTEpLCAwLCBxdWVzKTtcbiAgIHRoaXMubG9jYWxTdWJRTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCxhcnJhKTtcbiAgIH1cbiAgIHRoaXMuYWRkRmxhZyA9IHRydWU7XG4gfVxuXG4gaGFuZGxlTG9jYXRpb25TZWxlY3RlZChsb2NhdGlvbjogYW55LHF1ZXM6YW55KSB7XG4gICBxdWVzLmlucHV0ID0gbG9jYXRpb247XG4gfVxuXG4gc2VsZWN0ZWRJbnB1dChpbnB1dDphbnkgLHF1ZXM6YW55KXtcbiAgIHF1ZXMuaW5wdXQgPSBpbnB1dDtcbiB9XG5cbiBoYW5kbGVUZXh0YXJlYVZhbHVlQ2hhbmdlKHZhbHVlIDpzdHJpbmcpe1xuICAgY29uc29sZS5sb2coJ1NlbGVjdGVkIHRleHQtYXJlYSB0ZXh0OicsIHZhbHVlKTtcbiB9XG4gZ2V0RGF0YShkYXRhOmFueSl7XG4gIGNvbnNvbGUubG9nKCd0YWJsZSBkYXRhJyxkYXRhKTtcbiB9XG5cbiBkZXBlbmRlbnRDaGFuZ2UodmFsdWU6YW55KXtcbiB0aGlzLm5leHRWYWx1ZSA9IHZhbHVlO1xuIH1cblxuIGRpc3BsYXlEYXRlKGRhdGVTZWxlY3RlZDogYW55LHF1ZXM6YW55KXtcbiAgIC8vIFBhcnNlIHRoZSBkYXRlIHN0cmluZyB1c2luZyBtb21lbnQgYW5kIGFzc2lnbiBpdCB0byB0aGlzLnNlbGVjdGVkRGF0ZVxuICAgcXVlcy5pbnB1dCA9IG1vbWVudChkYXRlU2VsZWN0ZWQudmFsdWUgLCAnWVlZWS1NTS1ERCBISDptbTpzcycpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpLnRvU3RyaW5nKCk7XG4gfVxuXG4gZ2V0S2V5KGl0ZW06IGFueSk6IGFueSB7XG4gICByZXR1cm4gT2JqZWN0LmtleXMoaXRlbSlbMF07XG4gfVxuXG4gZ2V0VmFsdWUoaXRlbTogYW55KTogYW55IHtcbiAgIHJldHVybiBPYmplY3QudmFsdWVzKGl0ZW0pWzBdO1xuIH1cbn0iLCI8IS0tIFNwaW5uZXIgLS0+XG48bmd4LXNwaW5uZXIgc2l6ZT1cIm1lZGl1bVwiIFtuYW1lXT1cInNwaW5uZXJOYW1lXCIgW3R5cGVdPVwic3Bpbm5lclR5cGVcIj48L25neC1zcGlubmVyPlxuPCEtLSBjdXN0b20gbG9hZGVyIC0tPlxuPCEtLSA8YXBwLWxvYWRlcj48L2FwcC1sb2FkZXI+IC0tPlxuPCEtLSBCYWNrIFByb2Nlc3NpbmcgLS0+XG48IS0tIDxkaXYgKm5nSWY9XCJiYWNraWNvbiA9PSBmYWxzZVwiID5cbiAgPGRpdiBjbGFzcz1cImJhY2tpY29uXCIgPlxuICAgIDxidXR0b24gKGNsaWNrKT1cImhhbmRsZUJhY2tDbGljaygpXCIgW2NsYXNzXT1cIiBhYkl0ZW0/LnN0YXR1cyA9PSAnQ29tcGxldGVkJyA/ICdzdW1tYXJ5LXZvbHZlcic6J2FwcC1iYWNrMSdcIj5cbiAgICA8aW1nIGNsYXNzPVwiaWNvbi1hcnJvdy1iYWNrXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWFycm93LWJhY2sucG5nXCIgYWx0PVwiU2Nyb2xsIGRvd25cIj4ge3sgcWJJdGVtPy5iYWNrIH19XG4gICAgPC9idXR0b24+XG4gIDwvZGl2PlxuPC9kaXY+IC0tPlxuXG48IS0tIFF1ZXN0aW9uIEhhbmxkaW5nIC0tPlxuPCEtLSBWRCByZW1vdmVkIHVud2FudGVkIGNvbmRpdGlvbiAtLT5cbjwhLS0gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXMtLT5cbjxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW1cIiBjbGFzcz1cInF1ZXN0aW9uZGl2MSBwYWRkLWJvdHRvbVwiPlxuICA8IS0tIFByb2dyZXNzIEJhciAmIFRpdGxlIC0tPlxuICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLnRpdGxlXCI+XG4gICAgPGgxPnt7IHF1ZXN0aW9uSXRlbT8udGl0bGUgfX08L2gxPlxuICAgIDxkaXY+e3sgcXVlc3Rpb25JdGVtPy5zdWJUaXRsZSB9fTwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIFByb2dyZXNzICYgR3JvdXBpbmcgLS0+XG4gIDxkaXY+XG4gICAgPCEtLSBQaWUgQ2hhcnQgUHJvZ3Jlc3MgLS0+XG4gICAgPGRpdiBbbmdDbGFzc109XCJ7IGJnQ29sb3I6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIgfVwiPlxuICAgICAgPGRpdiBpZD1cIm54dC1wcm9ncmVzc1wiICpuZ0lmPVwicWJJdGVtPy5wcm9ncmVzc0JhclwiPlxuICAgICAgICA8Y2lyY2xlLXByb2dyZXNzIGNsYXNzPVwidGl0bGViYXJcIiBbcGVyY2VudF09XCJ0aGlzLnBlcmNlbnRcIiBbcmFkaXVzXT1cIjQwXCIgW3NwYWNlXT1cIi00XCIgW291dGVyU3Ryb2tlV2lkdGhdPVwiNFwiXG4gICAgICAgIFtpbm5lclN0cm9rZVdpZHRoXT1cIjRcIiBbb3V0ZXJTdHJva2VDb2xvcl09XCInI2UwYjFiMCdcIiBbaW5uZXJTdHJva2VDb2xvcl09XCInI2U3ZThlYSdcIiBbYW5pbWF0aW9uXT1cInRydWVcIiBbYmFja2dyb3VuZFBhZGRpbmddPSBcIjBcIlxuICAgICAgICBbYmFja2dyb3VuZENvbG9yXT0gXCInI2RkMmUxMydcIiBbYmFja2dyb3VuZEdyYWRpZW50U3RvcENvbG9yXT1cIicjZjliZmJkJ1wiIFt0aXRsZUNvbG9yXT1cIicjZjNlZGVkJ1wiIFxuICAgICAgICBjbGFzcz1cIm5nLXN0YXItaW5zZXJ0ZWRcIiBbdGl0bGVdPVwidGhpcy5wZXJjZW50KyclJ1wiIFtzaG93U3VidGl0bGVdPVwiZmFsc2VcIiBbc2hvd0JhY2tncm91bmRdPVwidHJ1ZVwiIFthbmltYXRpb25EdXJhdGlvbl09XCIzMDBcIlxuICAgICAgICBbc3RhcnRGcm9tWmVyb109XCJmYWxzZVwiIFtyZXNwb25zaXZlXT1cImZhbHNlXCIgPlxuICAgICAgICA8L2NpcmNsZS1wcm9ncmVzcz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDwhLS0gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXMtLT5cbiAgICA8IS0tIFNob3cgdGhlIEdyb3VwL01vZHVsZSByZWxhdGVkIHRvIHRoZSBQcm9ncmVzcyAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLmdyb3VwTmFtZSAmJiBxYkl0ZW0ucHJvZ3Jlc3NCYXJcIlxuICAgICAgICBbbmdDbGFzc109XCJ7IHF1ZXN0aW9uYWxpZ246ICFxYkl0ZW0/LnByb2dyZXNzQmFyIH1cIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJueHQtbGFyZ2VUaXRsZVwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJteXQtZm9udDYgbXl0LXRleHQzXCI+XG4gICAgICAgICAge3sgcXVlc3Rpb25JdGVtPy5ncm91cE5hbWUgfX1cbiAgICAgICAgPC9oMz5cbiAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5zdWJUZXh0ICE9ICfCv0VuIHF1w6kgcGHDrXMgb2N1cnJpw7M/J1wiIGNsYXNzPVwibXl0LWZvbnQ1IG15dC10ZXh0MVwiPnt7cXVlc3Rpb25JdGVtPy5zdWJUZXh0fX08L2Rpdj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5zdWJUZXh0ID09PSAnwr9FbiBxdcOpIHBhw61zIG9jdXJyacOzPydcIiBjbGFzcz1cIm15dC1mb250MTAgbXl0LXRleHQyXCI+e3txdWVzdGlvbkl0ZW0/LnN1YlRleHR9fTwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG4gIDwhLS0gUXVlc3Rpb24gSGFuZGxpbmcgLS0+XG4gICAgPCEtLSBWRCAxMEF1ZzI0LSBxdWVzdGlvbiBubyAtLT5cbiAgPGRpdj5cbiAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLnF1ZXN0aW9uVGV4dFwiIHN0eWxlPVwiZGlzcGxheTogZmxleDtcIj5cbiAgICAgIDxzcGFuPnt7cXVlc3Rpb25JdGVtPy5xdWVzdGlvbk51bWJlcn19Ljwvc3Bhbj5cbiAgICAgIDxwIGNsYXNzPVwibnh0LWxhYmVsXCIgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0KVwiPlxuICAgICAgIHt7cXVlc3Rpb25JdGVtPy5xdWVzdGlvblRleHR9fVxuICAgICAgPC9wPlxuICAgIDwvZGl2PlxuICAgIDwhLS0gVGl0bGUgLS0+XG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLmlzVGl0bGVcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0udHlwZSAhPSAnQm9vaycgJiYgcXVlc3Rpb25JdGVtLnF1ZXN0aW9uTnVtYmVyIT0nNicgJiYgcXVlc3Rpb25JdGVtLnF1ZXN0aW9uTnVtYmVyIT0nOSdcIj4gXG4gICAgICAgIDxoMyBjbGFzcz1cInF1ZXN0aW9uYWxpZ24gIG15dC1mb250MyBteXQtYWxpZ24gbXl0LXRleHQ0XCIgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0KVwiPlxuICAgICAgICAgIHt7cXVlc3Rpb25JdGVtPy5xdWVzdGlvblRleHR9fVxuICAgICAgICA8L2gzPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuICAgIDwhLS0gSEEgMzEtSkFOLTI0IFJlbW92ZWQgdGhlIHVud2FudGVkIHN0eWxpbmcgY2xhc3MgLS0+XG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwiIXF1ZXN0aW9uSXRlbS5pc1RpdGxlXCIgW2NsYXNzXT1cInFiSXRlbS5pc1NoZW5nZWwgPyAnaGVhZGVyLXN0eWxlJyA6ICdxdWVzdGlvbi1mLXNpemUnXCI+XG4gICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dClcIiA+XG4gICAgICAgIHt7IHF1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0IH19XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG5cbiAgICA8IS0tIFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgd2l0aCBDdXN0b20gU3R5bGluZyAtIE1SIC0gMTFBVUcyMyAtLT5cbiAgICA8IS0tIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0udHlwZSA9PSAnQm9vaydcIj5cbiAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0ucXVlc3Rpb25OdW1iZXI9PSc2J1wiPlxuICAgICAgICA8aDMgY2xhc3M9XCJteXQtMzIxXCIgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0KVwiPlxuICAgICAgICAgIHt7IHF1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0IH19XG4gICAgICAgIDwvaDM+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG4gICAgXG4gICAgPCEtLSBUaGlzIHNob3VsZCBiZSByZW1vdmVkIHdpdGggQ3VzdG9tIFN0eWxpbmcgLSBNUiAtIDExQVVHMjMgLS0+XG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLnR5cGUgPT0gJ0ZpbGUnIFwiPlxuICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5xdWVzdGlvbk51bWJlcj09JzknXCI+XG4gICAgICAgIDxoMyBjbGFzcz1cIm15dC0zNDVcIiBbaW5uZXJIVE1MXT1cImdldFRleHQocXVlc3Rpb25JdGVtPy5xdWVzdGlvblRleHQpXCI+XG4gICAgICAgICAge3txdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dH19XG4gICAgICAgIDwvaDM+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj4gLS0+XG4gIDwvZGl2PlxuXG4gIDwhLS0gQWRkaXRpb25hbCBJbmZvIC0tPlxuICA8IS0tIFRoZSBiZWxvdyBjb2RlIGNhbiBiZSB3cml0dGVuIGVmZmVjdGl2ZWx5IG5lc3RlZCBuZ0lmIGZvciBSaWNoIFRleHQgJiBPdGhlciBvbncgZm9yIFByb2dyZXNzIEJhciAtLT5cbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5hZGRpdGlvbmFsUmljaENvbnRlbnQgJiYgcWJJdGVtLnByb2dyZXNzQmFyXCIgPlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwibnh0LWFkZGl0aW9uYWwgXCIgW2lubmVySFRNTF09XCJpbm5lcmh0bWxcIj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uYWRkaXRpb25hbFJpY2hDb250ZW50ICYmICFxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaW5mby1hbGVydCBxdWVzLWFsZXJ0MVwiPlxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1pbmZvIGZhLTN4IGlwb3NpdGlvbiBpY29sb3JcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW5mb2RpdlwiIFtpbm5lckhUTUxdPVwiaW5uZXJodG1sXCI+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gRHJvcGRvd24tLT5cbiAgPGRpdiAqbmdJZj1cImRyb3Bkb3duRmxhZ1wiID5cbiAgICA8ZGl2IGNsYXNzPVwibnh0LWRpcy1mbGV4XCI+XG4gICAgICA8c2VsZWN0IGNsYXNzPVwibnh0ZHJvcGRvd25cIlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ2R0LWxpbmUgbnh0LW15dC1hbGlnbjMgbnh0LW15dC1hbGlnbjIgZHBEb3duIG54dC1kcm9wYm94IGRvd24xIG15dC1kcm9wYm94IG15dC1ib3JkZXItciBteXQtZm9udDEnOiBxYkl0ZW0/LnByb2dyZXNzQmFyLFxuICAgICAgICAgICdjdXN0b20tc2VsZWN0JzogIXFiSXRlbT8ucHJvZ3Jlc3NCYXJcbiAgICAgICAgfVwiIGNsYXNzPVwibXItc20tMiBkZC1oZWlnaHQgbnh0LWRyb3Bib3ggXCIgIGlkPVwiZHJvcGRvd25cIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgKGNoYW5nZSk9XCJjbGVhckVycm9yKClcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7e1xuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtPy5lcnJvciA/ICdyZWQnIDogaW5wVmFsdWU/Lmxlbmd0aCA+IDAgPyAnI2ZmZicgOiAnJ1xuICAgICAgICB9fVwiIHN0eWxlLmNvbG9yPVwie3sgcXVlc3Rpb25JdGVtPy5lcnJvciA/ICdyZWQnIDogJycgfX1cIj5cbiAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0IG9mIHF1ZXN0aW9uSXRlbS5vcHRpb25zXCIgY2xhc3M9XCJvcHRpb25cIiB2YWx1ZT1cInt7IG9wdC52YWx1ZSB9fVwiPlxuICAgICAgICAgIHt7IG9wdC52YWx1ZSB9fVxuICAgICAgICA8L29wdGlvbj5cbiAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIi5cIiBkaXNhYmxlZCBoaWRkZW4+e3sncGxlYXNlTWFrZUNob2ljZScgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19PC9vcHRpb24+XG4gICAgICA8L3NlbGVjdD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLVZEIFJhZGlvIHVwZGF0ZSAtLT5cbiAgPGRpdiAqbmdJZj1cInJhZGlvRmxhZyB8fCBkYXRhRmxhZ1wiIGNsYXNzPVwiXCI+XG4gICAgPHNwYW4gKm5nSWY9XCJ0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvclwiIGNsYXNzPVwibnh0LWVycm9yLW1zZ1wiPiB7eyBxdWVzdGlvbkl0ZW0/LmVycm9yTWVzc2FnZSB9fTwvc3Bhbj5cbiAgICA8ZGl2IGNsYXNzPVwibnh0LWN1c3RvbS1yYWRpby1jb250YWluZXJcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdCBvZiBxdWVzdGlvbkl0ZW0ub3B0aW9uc1wiIFxuICAgICAgW2NsYXNzXT1cIiB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA/ICdueHQtY3VzdG9tLXJhZGlvLW9wdGlvbiBpbnZhbGlkJyA6ICdueHQtY3VzdG9tLXJhZGlvLW9wdGlvbidcIj5cbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgICBbaWRdPVwib3B0LnZhbHVlXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCJcbiAgICAgICAgICBuYW1lPVwiaW5wVmFsdWVcIlxuICAgICAgICAgIFt2YWx1ZV09XCJvcHQudmFsdWVcIlxuICAgICAgICAgIChjaGFuZ2UpPVwib3B0aW9uQ2hhbmdlKG9wdC52YWx1ZSlcIlxuICAgICAgICAvPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJueHQtcmFkaW8tbGFiZWxcIiBbZm9yXT1cIm9wdC52YWx1ZVwiPiB7eyBvcHQudmFsdWUgfX08L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJueHQtZGlzLWZsZXhcIj5cbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdCBvZiBxdWVzdGlvbkl0ZW0ub3B0aW9ucy5yZWNvcmRzXCIgY2xhc3M9XCJyYWRpbyBueHQtcmFkaW9PcHRpb25cIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwibnh0LXJhZGlvY29udGFpbmVyIGNvbnRhaW5lciBteXQtZm9udDRcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cInJhZGlvXCIgW2lkXT1cIm9wdC5pZFwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiBuYW1lPVwiaW5wVmFsdWVcIiBbdmFsdWVdPVwib3B0LnZhbHVlXCJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib3B0aW9uQ2hhbmdlKG9wdC52YWx1ZSlcIiAvPlxuICAgICAgICAgIHt7IG9wdC52YWx1ZSB9fVxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+IC0tPlxuICA8L2Rpdj4gIFxuICA8IS0tIENoZWNrYm94IC0tPlxuICA8ZGl2ICpuZ0lmPVwiY2hlY2tib3hGbGFnXCIgY2xhc3M9XCJcIj5cbiAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtPy5lcnJvclwiIGNsYXNzPVwiY29uZC1kaXYyXCI+XG4gICAgICB7eyBxdWVzdGlvbkl0ZW0/LmVycm9yTWVzc2FnZSB9fVxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJueHQtY2hlY2tib3gtY29udGFpbmVyXCI+XG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIG9wdGlvblZhbHVlc1wiIGNsYXNzPVwibnh0LWNoZWNrYm94LXdyYXBwZXJcIj5cbiAgICAgICAgPGxhYmVsIGNsYXNzPVwibnh0LWNvbnRhaW5lcjFcIj5cbiAgICAgICAgICA8aW5wdXQgdHlwZT1cIm54dC1jaGVja2JveFwiIFtpZF09XCJpdGVtLmlkXCIgWyhuZ01vZGVsKV09XCJpdGVtLmNoZWNrZWRcIiAoY2xpY2spPVwiY2xlYXJFcnJvcigpXCIgLz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm54dC1jaGVja2JveC1sYWJlbFwiPnt7IGl0ZW0udmFsdWUgfX08L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBUZXh0IC0tPlxuICA8ZGl2ICpuZ0lmPVwidGV4dEZsYWdcIj5cbiAgICA8IS0tIEhBIDMxLUpBTi0yNCBUbyByZWR1Y2UgdGhlIG1hcmdpbiAtLT5cbiAgICA8ZGl2IFtjbGFzc109XCInY29sLW1kLScgKyBxdWVzdGlvbkl0ZW0/LnNpemUgKyAnIHBhZGRpbmdub25lJ1wiPlxuICAgICAgPGlucHV0IGNsYXNzPVwibnh0LWlucHV0XCIgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgXG4gICAgICAgaWQ9XCJ0ZXh0LWlucHV0LWlkXCIgcmVxdWlyZWQ9XCJcIiAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3tcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbT8uZXJyb3JcbiAgICAgICAgICAgID8gJ3JlZCdcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfX1cIiBvbmlucHV0PVwidGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teYS16QS1aMC05XFxzLjo7LD9dL2csJycpO1wiIC8+XG4gICAgICA8IS0tIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgbnh0LWNoZWNrLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cImlucFZhbHVlPy5sZW5ndGggPiAwXCI+PC9pPiAtLT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBUZXh0IEFyZWEgLS0+XG4gIDxkaXYgKm5nSWY9XCJ0YUZsYWdcIiA+XG4gICAgPGRpdj5cbiAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cIm54dC1pbnB1dCBueHQtdGV4dC1hcmVhXCIgaWQ9XCJ0YS1pbnB1dC1pZFwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiAoY2xpY2spPVwiY2xlYXJFcnJvcigpXCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3tcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbT8uZXJyb3JcbiAgICAgICAgICAgID8gJ3JlZCdcbiAgICAgICAgICAgIDogaW5wVmFsdWU/Lmxlbmd0aCA+IDAgJiYgdGFGb2N1c091dFxuICAgICAgICAgICAgPyAnIzg3YmUxYydcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfX1cIiAoZm9jdXNvdXQpPVwidGFGb2N1c091dCA9IHRydWVcIlxuICAgICAgICBvbmlucHV0PVwidGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teYS16QS1aMC05XFxzLjo7LD9dL2csJycpO1wiPjwvdGV4dGFyZWE+XG4gICAgICA8IS0tIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgbnh0LWNoZWNrLWljb25cIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cImlucFZhbHVlPy5sZW5ndGggPiAwICYmIHRhRm9jdXNPdXRcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XCI+PC9pPiAtLT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cblxuICA8IS0tIFJTIDA2SkFOMjUgLS0+XG4gICA8IS0tIGZvciByaWNoIHRleHQgLS0+XG4gIDxkaXYgKm5nSWY9XCJydGFGbGFnXCI+XG4gICAgPGRpdiBbY2xhc3NdPVwiJ2NvbC1tZC0nICsgcXVlc3Rpb25JdGVtPy5zaXplICsgJyBwYWRkaW5nbm9uZSdcIj5cbiAgICAgIDxhcHAtY3VzdG9tLXJpY2gtdGV4dFxuICAgICAgICBbdmFsdWVdPVwiaW5wVmFsdWVcIlxuICAgICAgICBbcXVlc3Rpb25dPVwicXVlc3Rpb25JdGVtXCJcbiAgICAgICAgW2Vycm9yXT1cInF1ZXN0aW9uSXRlbT8uZXJyb3JcIlxuICAgICAgICAodGV4dFZhbHVlQ2hhbmdlKT1cImhhbmRsZVJpY2hUZXh0Q2hhbmdlKCRldmVudClcIj5cbiAgICAgIDwvYXBwLWN1c3RvbS1yaWNoLXRleHQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICBcbiAgICAgICAgXG4gIDwhLS0gPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1JpY2hUZXh0QXJlYSdcIj5cblxuICAgIDxhcHAtY3VzdG9tLXJpY2gtdGV4dFxuICAgICAgW3ZhbHVlXT1cInF1ZXMuaW5wdXRcIlxuICAgICAgW3Jvd3NdPVwiM1wiXG4gICAgICBbZXJyb3JdPVwicXVlcy5lcnJvclwiICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJxdWVzLnF1ZXN0aW9uIFwiIFxuICAgICAgKHRleHRWYWx1ZUNoYW5nZSk9XCJoYW5kbGVSaWNoVGV4dENoYW5nZSgkZXZlbnQpXCI+XG4gICAgPC9hcHAtY3VzdG9tLXJpY2gtdGV4dD5cbjwvZGl2PiAtLT5cbiAgPCEtLSBDQyBOdW1iZXIgRm9ybWF0IC0tPlxuICA8IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG4gIDxkaXYgKm5nSWY9XCJudW1iZXJGbGFnXCIgY2xhc3M9XCJjb2wtbWQtMTJcIj5cbiAgICA8ZGl2IGNsYXNzPVwibnh0LWRpcy1mbGV4XCI+XG4gICAgICA8aW5wdXQgdHlwZT1cIlRleHRcIiBwbGFjZWhvbGRlcj1cIjAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwXCIgW25nQ2xhc3NdPVwieyBib3hvdXRsaW5lOiBxYkl0ZW0/LnByb2dyZXNzQmFyIH1cIlxuICAgICAgICBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgaWQ9XCJudW1iZXItaW5wdXQtaWRcIiAobmdNb2RlbENoYW5nZSk9XCJDQ09uQ2hhbmdlKCRldmVudClcIiByZXF1aXJlZD1cIlwiIG1heGxlbmd0aD1cIjI5XCJcbiAgICAgICAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiIG9uaW5wdXQ9XCJ0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSgvW14wLTkgXS9nLCcnKTtcIlxuICAgICAgICBzdHlsZT1cIndpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7XCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3tcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvclxuICAgICAgICAgICAgPyAncmVkJ1xuICAgICAgICAgICAgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyAnIzg3YmUxYydcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfX1cIiAvPlxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVja1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHN0eWxlPVwiY29sb3I6ICM4N2JlMWM7IG1hcmdpbi1sZWZ0OiAtMnJlbTsgei1pbmRleDogMTsgcGFkZGluZzogNXB4O1wiXG4gICAgICAgICpuZ0lmPVwiaW5wVmFsdWU/Lmxlbmd0aCA+IDBcIj48L2k+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8IS0tIEVORC0tPlxuXG4gIDwhLS0gQWxwaGFOdW1lcmljIC0tPlxuICA8ZGl2ICpuZ0lmPVwiYWxwaGFudW1lcmljRmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyXCI+IDwhLS1VSSBub3QgY29tcGxldGVkLS0+XG4gICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOnJlbGF0aXZlO1wiPlxuICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgIDxpbnB1dCB0eXBlPXRleHQgcGxhY2Vob2xkZXI9XCJ7eyd6ZXJvT2ZaZXJvJyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX1cIiBzdHlsZT1cInBhZGRpbmc6NXB4IDVweCA1cHggMTUwcHg7XCIgaWQ9XCJ5b3VyaWRoZXJlXCIvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEVtYWlsIC0tPlxuICA8IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XG4gIDxkaXYgKm5nSWY9XCJlbWFpbEZsYWdcIiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgIDxkaXYgY2xhc3M9XCJueHQtZGlzLWZsZXhcIj5cbiAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBbbmdDbGFzc109XCJ7IGJveG91dGxpbmU6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIgfVwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiBpZD1cImVtYWlsLWlucHV0LWlkXCJcbiAgICAgICAgcmVxdWlyZWQ9XCJcIiAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3tcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvclxuICAgICAgICAgICAgPyAncmVkJ1xuICAgICAgICAgICAgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMFxuICAgICAgICAgICAgPyAnIzg3YmUxYydcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfX1cIiAvPlxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVja1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHN0eWxlPVwiY29sb3I6ICM4N2JlMWM7IG1hcmdpbi1sZWZ0OiAtMnJlbTsgei1pbmRleDogMTsgcGFkZGluZzogNXB4XCJcbiAgICAgICAgKm5nSWY9XCJpbnBWYWx1ZT8ubGVuZ3RoID4gMFwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBEYXRlVGltZSAtLT5cbiAgPGRpdiAqbmdJZj1cImR0RmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdaZXJvIG54dG15dC10aW1lMVwiID5cbiAgICA8IS0tIEVycm9yIEhhbmRsaW5nIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTJcIiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5lcnJvclwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4O1xuICAgIGNvbG9yOiByZWQ7XCI+e3txdWVzdGlvbkl0ZW0/LmVycm9yPy5lcnJvck1zZ319PC9kaXY+XG5cbiAgICA8IS0tIERhdGUgLS0+XG4gICAgPGRpdiAqbmdJZj1cImRhdGVGbGFnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdCb3R0b21cIj5cbiAgICAgICAgPCEtLSBIQSAzMS1KQU4tMjQgVGhlc2UgbGFiZWxzIHdlcmUgb2NjdXBpbmcgdGhlIGVtcHR5IHNwYWNlIHdoZW4gZGF0ZSBxdWVzdGlvbiBjb21lcy0tPlxuICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImRhdGUtdGltZSBjb2xvcmZcIj57eyBxdWVzdGlvbkl0ZW0/LmRhdGVUZXh0IH19PC9sYWJlbD4gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJueHQtZGlzLWZsZXhcIj5cbiAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICAgIDwhLS0gSEEgMDJGRUIyNCBBZGRpdGlvbmFsIHBhcmFtIHRvIHVwZGF0ZSB0aGUgcXVlc3Rpb24gLS0+XG4gICAgICAgICAgPG15LWRhdGUtcGlja2VyIG5hbWU9XCJteWRhdGVcIiBbb3B0aW9uc109XCJteURhdGVQaWNrZXJPcHRpb25zXCIgaWQ9XCJkYXRlXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHggIWltcG9ydGFudDtcIiAoZGF0ZUNoYW5nZWQpPVwib25EYXRlQ2hhbmdlZCgkZXZlbnQsIHF1ZXN0aW9uSXRlbSlcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxEYXRlXCIgY2xhc3M9XCJkYXRlLXBpY2tlclwiIHBsYWNlaG9sZGVyPVwie3snc2VsZWN0RGF0ZScgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19XCIgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiPlxuICAgICAgICAgIDwvbXktZGF0ZS1waWNrZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFRpbWUgLS0+XG4gICAgPGRpdiAqbmdJZj1cInRpbWVGbGFnXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdCb3R0b21cIj5cbiAgICAgICAgPCEtLSA8bGFiZWwgY2xhc3M9XCJkYXRlLXRpbWUgY29sb3JmXCI+e3sgcXVlc3Rpb25JdGVtPy50aW1lVGV4dCB9fTwvbGFiZWw+IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibnh0LWRpcy1mbGV4XCI+XG4gICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnZHQtbGluZSBkYXRlLWxpbmUgbnh0LWR0LXRpbWUnOiBxYkl0ZW0/LnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZWFuZFRpbWU6ICFxYkl0ZW0/LnByb2dyZXNzQmFyfVwiIFxuICAgICAgICAgICAgICBpZD1cImRhdGVhbmRUaW1lXCIgW3N0eWxlLmJvcmRlci1jb2xvcl09XCJxdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCc6IHF1ZXN0aW9uSXRlbT8uaW5wdXQ/Lmxlbmd0aCA+IDAgPyAnJyA6ICcnXCJcbiAgICAgICAgICAgICAgKGZvY3VzKT1cIihjbGVhclNRRXJyb3IpIFwiPlxuICAgICAgICAgIDxzZWxlY3QgbmFtZT1cImhvdXJzXCIgY2xhc3M9XCJkYXRldGltZSBzaG93SG91ciBueHRteXQtdGltZSBteXQtaG91clwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRIb3VyXCIgaWQ9XCJob3VyXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cbiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJcIj5ISDwvb3B0aW9uPlxuICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiaG91clwiICpuZ0Zvcj1cImxldCBob3VyIG9mIGhvdXJzXCI+XG4gICAgICAgICAgICAgIHt7IGhvdXIgfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb25cIj4gOiA8L3NwYW4+XG4gICAgICAgICAgPHNlbGVjdCBuYW1lPVwibWludXRlc1wiIGNsYXNzPVwiZGF0ZXRpbWUgbnh0c2hvd21pbnV0ZSBueHRteXQtdGltZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRNaW51dGVcIiBpZD1cIm1pbnV0ZVwiXG4gICAgICAgICAgICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCI+XG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+TU08L29wdGlvbj5cbiAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cIm1pbnV0ZVwiICpuZ0Zvcj1cImxldCBtaW51dGUgb2YgbWludXRlc1wiPlxuICAgICAgICAgICAgICB7eyBtaW51dGUgfX1cbiAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBjb2xvbjE6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIgfVwiICpuZ0lmPVwicXVlc3Rpb25JdGVtPy54MjRIb3VycyA9PSBmYWxzZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvblwiPiA6IDwvc3Bhbj5cbiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cIkFNL1BNXCIgY2xhc3M9XCJueHRteXQtdGltZVwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRNZXJpZGllbVwiIGlkPVwibWVyaWRpZW1cIj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFNXCI+QU08L29wdGlvbj5cbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlBNXCI+UE08L29wdGlvbj5cbiAgICAgICAgICAgIDwvc2VsZWN0PlxuICAgICAgICAgICAgPCEtLSA8ZGl2IFtuZ0NsYXNzXT1cInsnJzogcWJJdGVtLnByb2dyZXNzQmFyLCAnZGF0ZWFuZFRpbWUnOiAhcWJJdGVtLnByb2dyZXNzQmFyfVwiPjwvZGl2PiAtLT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGkgY2xhc3M9XCJmYSBjaGVjay1pY29uM1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwicXVlc3Rpb25JdGVtPy5pbnB1dD8ubGVuZ3RoID4gMFwiPjwvaT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBBdHRhY2htZW50IC8gRmlsZSAtLT5cbiAgPGRpdiAqbmdJZj1cImZpbGVGbGFnXCI+XG4gICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJpbmZvLWFsZXJ0XCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgdGhpcy5xdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiPlxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJwaWN0dXJlLXVwbG9hZFwiIGZvcj1cImZpbGUtdXBsb2FkXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJwaWN0dXJlLXVwbG9hZC1jaGlsZFwiPlxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWxlLWltYWdlLW8gZmEtNXggaWNvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImZhIGZhLXBsdXMgZmEtMnggcGljdHVyZS11cGxvYWQtY2hpbGQgcGljLXVwbG9hZCBpY29sb3JcIj5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGlucHV0IGlkPVwiZmlsZS11cGxvYWRcIiB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cInt7IGFsbG93ZWRGaWxlRXh0ZW5zaW9uIH19XCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCx0aGlzLnF1ZXN0aW9uSXRlbSlcIiAvPlxuICAgIDwvZGl2PlxuICAgIDx1bCAqbmdJZj1cIlxuICAgICAgICBhdHRhY2htZW50cz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICBxdWVzdGlvbkl0ZW0/LnR5cGUgPT09ICdGaWxlJyAmJlxuICAgICAgICAhcWJJdGVtPy5wcm9ncmVzc0JhclxuICAgICAgXCIgY2xhc3M9XCJhdHRhY2gtdWxpc3QgY29sLW1kLTEyXCI+XG4gICAgICA8bGkgKm5nRm9yPVwibGV0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHNcIiBjbGFzcz1cImFsaWduLWxcIj5cbiAgICAgICAge3sgYXR0YWNobWVudC5hdHRhY2htZW50TmFtZX19PHNwYW4gY2xhc3M9XCJhdHRhY2gtbGlzdFwiIChjbGljayk9XCJkZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnQuYXR0YWNobWVudElkKVwiPlg8L3NwYW4+XG4gICAgICA8L2xpPlxuICAgIDwvdWw+XG5cbiAgICA8IS0tIEF0dGFjaG1lbnQgUHJvZ3Jlc3MgLS0+XG4gICAgPGRpdiAqbmdJZj1cInFiSXRlbS5wcm9ncmVzc0JhclwiPlxuICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBhdHRhY2htZW50c1wiIGNsYXNzPVwibnh0ZmlsZS11cGxvYWRpbmctYm94XCI+XG4gICAgICAgIDwhLS08aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMngucG5nXCIgY2xhc3M9XCJpY29uLWVkaXQxXCIgLz4tLT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ1cGxvYWRpbmctZmlsZS1uYW1lIFwiPnt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWUgfX08L3NwYW4+XG4gICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRlbGV0ZSU0MDJ4LnBuZ1wiIGNsYXNzPVwiZGVsZXRlSWNvblwiXG4gICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudC5hdHRhY2htZW50SWQpXCIgLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm54dGZpbGUtdXBsb2FkLWJveFwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiPlxuICAgICAgXG4gICAgICAgIDwhLS08aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMngucG5nXCIgY2xhc3M9XCJpY29uLWVkaXQxXCIgLz4tLT5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJmLU5hbWVcIiBbaW5uZXJIVE1MXT1cImdldFRleHQocXVlc3Rpb25JdGVtPy5xdWVzdGlvblRleHQpXCI+IHt7IHF1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0fX08L3NwYW4+XG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZpbGUtbGFiZWwgXCI+XG4gICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ZpbGUtdXBsb2FkLnBuZ1wiIGNsYXNzPVwiZmlsZS1pY29uXCIvPlxuICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgPGlucHV0IG5hbWU9XCJhdHRhY2htZW50XCIgdHlwZT1cImZpbGVcIiBwbGFjZWhvbGRlcj1cInt7J3RvQnV5VGlja2V0JyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX1cIiBtdWx0aXBsZVxuICAgICAgICAgICAgYWNjZXB0PVwiLnBkZiwgLnBuZywgLmpwZywgLmpwZWcsIC5oZWljLCAuYXBwbGljYXRpb24vcGRmXCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJmaWxlLXVwbG9hZC1idG5cIj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPCEtLSBSUyAwOURFQzI0IENoYW5nZWQga2V5cy0tPlxuICA8IS0tIEJvb2sgLS0+XG4gIDxkaXYgKm5nSWY9XCJib29rRmxhZ1wiPlxuICAgIDxkaXYgW2NsYXNzXT1cInFiSXRlbS5pc1NoZW5nZWwgPyAnZm9ybS1ncm91cCBjb250ZW50LWJveCcgOiAnZm9ybS1ncm91cCdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uZXJyb3JcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgIGNvbG9yOiByZWQ7XCI+e3txdWVzdGlvbkl0ZW0/LmVycm9yPy5lcnJvck1zZ319PC9kaXY+XG4gICAgICAgIDxkaXYgW2NsYXNzXT1cInFiSXRlbS5pc1NoZW5nZWwgPyAnJyA6ICdueHQtbXl0LWFsaWduMydcIiBbY2xhc3NdPVwicWJJdGVtLmlzU2hlbmdlbCA/ICdjb2wtbGctJyArIHF1ZXMuc2l6ZSArICcgcGFkZGluZ25vbmUnIDogJ2NvbC1tZC0nICsgcXVlcy5zaXplICsgJyBwYWRkaW5nbm9uZSdcIlxuICAgICAgICAgICpuZ0Zvcj1cImxldCBxdWVzIG9mIHN1YlF1ZXN0aW9ucztsZXQgaSA9IGluZGV4XCIgW2lkXT1cInF1ZXMuaWRcIj5cbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgZG93bjI6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIgfVwiPlxuICAgICAgICAgICAgPHNwYW4+e3sgcXVlcz8ucXVlc3Rpb25UZXh0IH19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ1plcm8gbnh0bXl0LWRhdGVUaW1lTmV3XCIgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUaW1lJyB8fCBxdWVzLnR5cGUgPT09ICdEYXRlJ1wiPlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0RhdGUnXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiZGF0ZS10aW1lIGNvbG9yZlwiPnt7IHF1ZXN0aW9uSXRlbT8uZGF0ZVRleHQgfX08L2xhYmVsPiAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZWFuZHRpbWVcIj5cbiAgICAgICAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XG4gICAgICAgICAgICAgICAgICA8IS0tIEhBIDAyRkVCMjQgQWRkaXRpb25hbCBwYXJhbSB0byB1cGRhdGUgdGhlIHF1ZXN0aW9uIC0tPlxuICAgICAgICAgICAgICAgICAgPG15LWRhdGUtcGlja2VyIG5hbWU9XCJteWRhdGVcIiBbb3B0aW9uc109XCJteURhdGVQaWNrZXJPcHRpb25zXCIgaWQ9XCJkYXRlXCIgc3R5bGU9XCJmb250LXNpemU6IDE4cHggIWltcG9ydGFudDtcIiAoZGF0ZUNoYW5nZWQpPVwib25EYXRlQ2hhbmdlZCgkZXZlbnQsIHF1ZXMpXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxEYXRlXCIgY2xhc3M9XCJkYXRlLXBpY2tlclwiIHBsYWNlaG9sZGVyPVwie3snc2VsZWN0RGF0ZScgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19XCIgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIiA+XG4gICAgICAgICAgICAgICAgICA8L215LWRhdGUtcGlja2VyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RpbWUnXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiZGF0ZS10aW1lIGNvbG9yZlwiPnt7IHF1ZXN0aW9uSXRlbT8udGltZVRleHQgfX08L2xhYmVsPiAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0ZWFuZHRpbWVcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnZHQtbGluZSBkYXRlLWxpbmUgbnh0LWR0LXRpbWUnOiBxYkl0ZW0/LnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVhbmRUaW1lOiAhcWJJdGVtPy5wcm9ncmVzc0Jhcn1cIiBcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cImRhdGVhbmRUaW1lXCIgW3N0eWxlLmJvcmRlci1jb2xvcl09XCJxdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCc6IHF1ZXN0aW9uSXRlbT8uaW5wdXQ/Lmxlbmd0aCA+IDAgPyAnJyA6ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiKGNsZWFyU1FFcnJvcikgXCI+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJob3Vyc1wiIGNsYXNzPVwiZGF0ZXRpbWUgc2hvd0hvdXIgbnh0bXl0LXRpbWUgbXl0LWhvdXJcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkSG91clwiIGlkPVwiaG91clwiXG4gICAgICAgICAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPkhIPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImhvdXJcIiAqbmdGb3I9XCJsZXQgaG91ciBvZiBob3Vyc1wiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGhvdXIgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb25cIj4gOiA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJtaW51dGVzXCIgY2xhc3M9XCJkYXRldGltZSBueHRzaG93bWludXRlIG54dG15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1pbnV0ZVwiIGlkPVwibWludXRlXCJcbiAgICAgICAgICAgICAgICAgICAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiPlxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+TU08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwibWludXRlXCIgKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBtaW51dGVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgbWludXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgY29sb24xOiBxYkl0ZW0/LnByb2dyZXNzQmFyIH1cIiAqbmdJZj1cInF1ZXN0aW9uSXRlbS54MjRIb3VycyA9PSBmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9uXCI+IDogPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJBTS9QTVwiIGNsYXNzPVwibnh0bXl0LXRpbWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTWVyaWRpZW1cIiBpZD1cIm1lcmlkaWVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkFNXCI+QU08L29wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiUE1cIj5QTTwvb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnRGF0ZVRpbWUnXCI+XG4gICAgICAgICAgICA8YXBwLWN1c3RvbS1kYXRlLXBpY2tlciBbbWluRGF0ZV09XCJxdWVzLm1pbkRhdGVcIiBbZGF0ZV09XCJxdWVzLmlucHV0XCIgKGRhdGVDaGFuZ2UpPVwiZGlzcGxheURhdGUoJGV2ZW50LHF1ZXMpXCI+PC9hcHAtY3VzdG9tLWRhdGUtcGlja2VyPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gVkQgdG8gc2hvdyBsYWJsZS0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdMYWJlbCdcIj5cbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLWxhYmVsIFtsYWJlbFN0eWxlXT1cInF1ZXMudGl0bGVcIiBbbGFiZWxWYWx1ZV09XCJxdWVzLnF1ZXN0aW9uXCI+XG4gICAgICAgICAgICA8L2FwcC1jdXN0b20tbGFiZWw+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RleHQnXCI+XG4gICAgICAgICAgICA8bGFiZWw+e3sgcXVlcy5xdWVzdGlvblRleHQgfX08L2xhYmVsPlxuICAgICAgICAgICAgPGFwcC1jdXN0b20taW5wdXRcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJxdWVzPy5pbnB1dFwiXG4gICAgICAgICAgICAgICAgICBbcXVlc3Rpb25dPVwicXVlc1wiIFxuICAgICAgICAgICAgICAgICAgW2lkVmFsdWVdPVwicXVlcz8udHJhY2tpbmdJZFwiXG4gICAgICAgICAgICAgICAgICBbZm9jdXNFdmVudF09XCJjbGVhclNRRXJyb3IocXVlcz8uaWQpXCJcbiAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJxdWVzPy5lcnJvclwiXG4gICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicXVlcz8ucXVlc3Rpb25cIlxuICAgICAgICAgICAgICAgICAgKGlucHV0VmFsdWUpPVwic2VsZWN0ZWRJbnB1dCgkZXZlbnQscXVlcylcIj5cbiAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnTG9jYXRpb24nXCI+XG4gICAgICAgICAgICA8IS0tIGZvciBwaWNrIGxvY2F0aW9uIC0tPlxuICAgICAgICAgICAgPCEtLSBIQTEwMDEyMDI0IEFkZGVkIEFwaSBrZXkgYXMgaW5wdXQgLS0+XG4gICAgICAgICAgICA8YXBwLXBpY2stbG9jYXRpb24gW2FwaUtleV09XCJxYkl0ZW1bJ2FwaUtleSddXCIgW2FkZHJlc3NdPVwicXVlcy5pbnB1dFwiIChsb2NhdGlvblNlbGVjdGVkKT1cImhhbmRsZUxvY2F0aW9uU2VsZWN0ZWQoJGV2ZW50LHF1ZXMpXCI+PC9hcHAtcGljay1sb2NhdGlvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIGZvciAgdGV4dCBhcmVhICAgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RleHRBcmVhJ1wiPlxuICAgICAgICAgICAgPGFwcC1jdXN0b20tdGV4dC1hcmVhIFt2YWx1ZV09XCJxdWVzLmlucHV0XCIgW3Jvd3NdPVwiM1wiIFtlcnJvcl09XCJxdWVzLmVycm9yXCIgW3BsYWNlaG9sZGVyXT1cInF1ZXMucXVlc3Rpb24gXCIgKHRleHRhcmVhVmFsdWVDaGFuZ2UpPVwiaGFuZGxlVGV4dGFyZWFWYWx1ZUNoYW5nZSgkZXZlbnQpXCI+PC9hcHAtY3VzdG9tLXRleHQtYXJlYT5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gRW1haWwgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0VtYWlsJ1wiPlxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJlbWFpbFwiIFsobmdNb2RlbCldPVwicXVlcy5pbnB1dFwiIFtpZF09XCJxdWVzLmlkXCIgcmVxdWlyZWQ9XCJcIiAoZm9jdXMpPVwiY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCJcbiAgICAgICAgICAgICAgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgcXVlcy5lcnJvciA/ICdyZWQnIDogJycgfX1cIiBwbGFjZWhvbGRlcj1cInt7IHF1ZXMucXVlc3Rpb24gfX1cIiAvPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ0ZpbGUnXCI+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXFiSXRlbS5wcm9ncmVzc0JhclwiPlxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJwaWN0dXJlLXVwbG9hZCBjdXN0b20tZmlsZS11cGxvYWQgYmdjb2xvci13XCIgZm9yPVwiZmlsZS11cGxvYWRcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBpY3R1cmUtdXBsb2FkLWNoaWxkXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWZpbGUtaW1hZ2UtbyBmYS01eCBpY29sb3JcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiXG4gICAgICAgICAgICAgICAgICAgIGZhIGZhLXBsdXMgZmEtMnhcbiAgICAgICAgICAgICAgICAgICAgcGljdHVyZS11cGxvYWQtY2hpbGRcbiAgICAgICAgICAgICAgICAgICAgcGljLXVwbG9hZFxuICAgICAgICAgICAgICAgICAgICBpY29sb3JcbiAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICA8aW5wdXQgaWQ9XCJmaWxlLXVwbG9hZFwiIHR5cGU9XCJmaWxlXCIgYWNjZXB0PVwie3sgYm9va0ZsYWdBY2NlcHQgfX1cIiAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50LHF1ZXMpXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8dWwgKm5nSWY9XCJcbiAgICAgICAgICAgICAgICBhdHRhY2htZW50cz8ubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgIHF1ZXMudHlwZSA9PT0gJ0ZpbGUnICYmXG4gICAgICAgICAgICAgICAgIXFiSXRlbS5wcm9ncmVzc0JhclxuICAgICAgICAgICAgICBcIiBjbGFzcz1cImF0dGFjaC11bGlzdCBjb2wtbWQtMTJcIj5cbiAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJhbGlnbi1sXCI+XG4gICAgICAgICAgICAgICAge3sgYXR0YWNobWVudC5hdHRhY2htZW50TmFtZVxuICAgICAgICAgICAgICAgIH19PHNwYW4gY2xhc3M9XCJhdHRhY2gtbGlzdFwiIChjbGljayk9XCJkZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnQuYXR0YWNobWVudElkKVwiPlg8L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15dC1ib3hcIiAqbmdJZj1cInFiSXRlbS5wcm9ncmVzc0JhclwiPlxuXG4gICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHNcIiBjbGFzcz1cIm54dGZpbGUtdXBsb2FkaW5nLWJveFwiPlxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAyeC5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXQxXCIgLz5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVwbG9hZGluZy1maWxlLW5hbWUgbXl0LWZvbnQxIGZvbnQtd2VpZ2h0OiBub3JtYWw7XCI+IHt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZGVsZXRlJTQwMngucG5nXCIgY2xhc3M9XCJkZWxldGVJY29uXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVBdHRhY2htZW50KGF0dGFjaG1lbnQuYXR0YWNobWVudElkKVwiIC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibnh0ZmlsZS11cGxvYWQtYm94XCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3sgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPyAncmVkJyA6ICcnIH19XCI+XG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDJ4LnBuZ1wiIGNsYXNzPVwibnh0LWljb24tZWRpdDFcIiAvPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZi1OYW1lXCI+e3sgcXVlcz8ucXVlc3Rpb24gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZmlsZS1sYWJlbCBcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIHN0eWxlPVwiY29sb3I6ICNjNTI4MWM7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eydhdHRhY2gnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiYXR0YWNobWVudFwiIHR5cGU9XCJmaWxlXCIgcGxhY2Vob2xkZXI9XCJ7eyd0b0J1eVRpY2tldCcgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19XCIgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgYWNjZXB0PVwiLnBkZiwgLnBuZywgLmpwZywgLmpwZWcsIC5oZWljLCAuYXBwbGljYXRpb24vcGRmXCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCxxdWVzKVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmlsZS11cGxvYWQtYnRuXCI+XG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwhLS0gVGFibGUgLS0+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RhYmxlJ1wiIGNsYXNzPVwiXCI+XG4gICAgICAgICAgICA8YXBwLWN1c3RvbS10YWJsZSBcbiAgICAgICAgICAgICAgW3F1ZXN0aW9uXT1cInF1ZXNcIlxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCI+XG4gICAgICAgICAgICA8L2FwcC1jdXN0b20tdGFibGU+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8IS0tIERyb3Bkb3duIC0tPlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdEcm9wZG93bidcIiBjbGFzcz1cIm54dGRyb3Bkb3duXCI+XG4gICAgICAgICAgICA8IS0tIGZvciBjb21tb24gZHJvcGRvd24gLS0+XG4gICAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICAgICAgPGFwcC1jdXN0b20tZHJvcGRvd24gW2Zyb21TaGVuZ2VsXT1cInFiSXRlbS5pc1NoZW5nZWxcIlxuICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJxdWVzLm9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICBbYXBpTWV0YV09XCJxdWVzLnN1YlRleHRcIlxuICAgICAgICAgICAgICAgICAgICBbaWRdPVwicXVlcy5OYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkVmFsdWVdPVwicXVlcy5pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiLS0te3snc2VsZWN0JyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX0tLS1cIlxuICAgICAgICAgICAgICAgICAgICBbZXJyb3JNZXNzYWdlXT1cInF1ZXM/LmVycm9yTWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJxdWVzPy5lcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJjaGlsZEV2ZW50Q2FwdHVyZSgkZXZlbnQsIHF1ZXMpOyBjbGVhclNRRXJyb3IocXVlcy5pZClcIj5cbiAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1kcm9wZG93bj5cbiAgICAgICAgICAgIDxhcHAtZHJvcGRvd24td2l0aC1mbGFnICpuZ0lmPVwicXVlcy5pc0RlcGVuZGVudFBpY2tsaXN0ICYmICFxdWVzLmRyb3BEb3duT25seVwiICBbY2VydGlmaWVkXT1cInF1ZXMuY2VydGlmaWVkRmxhZ1wiICBbSm9iUGVyZm9ybWVyQ2VydGlmaWNhdGVzXT1cInF1ZXMuY2VydGlmaWNhdGVMaXN0XCIgKGZsYWdEcm9wRG93bkNoYW5nZSk9XCJkZXBlbmRlbnRDaGFuZ2UoJGV2ZW50KVwiPjwvYXBwLWRyb3Bkb3duLXdpdGgtZmxhZz5cbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2hlY2sgXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0/LmlucHV0Py5sZW5ndGggPiAwXCI+PC9pPlxuICAgICAgICAgIDwvZGl2PiAgICAgICAgICBcbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLUxpc3Qgc3RhcnQtLT5cbiAgPGRpdiAqbmdJZj1cImxpc3RGbGFnXCI+XG4gICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JvdXBcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLXJvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uZXJyb3JcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDtcbiAgICAgICAgICAgIGNvbG9yOiByZWQ7XCI+e3txdWVzdGlvbkl0ZW0/LmVycm9yPy5lcnJvck1zZ319PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJueHQtbXl0LWFsaWduM1wiIFtjbGFzc109XCInY29sLW1kLScgKyBxdWVzLnNpemUgKyAnIHBhZGRpbmdub25lJ1wiXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXMgb2YgZ2V0TG9jYWxTdWJRdWVzdGlvbnMocXVlc3Rpb25JdGVtLmlkKTtsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibnh0LWRpcy1mbGV4IG15dC1mb250MyBteXQtZm9udDdcIj57eyBxdWVzPy5xdWVzdGlvbiB9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnVGV4dCdcIj5cbiAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwicXVlcy5pbnB1dFwiIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAnbnh0LWRpcy1mbGV4IGR0LWxpbmUgZGF0ZS1saW5lIG54dGJvb2tUZXh0IGJveG91dGxpbmUgbXl0LWZvbnQxJzogcWJJdGVtLnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgIHRleHRCb3g6ICFxYkl0ZW0ucHJvZ3Jlc3NCYXJcbiAgICAgICAgICAgIH1cIiBpZD1cInRleHRcIiBbaWRdPVwicXVlcy51bmlxdWVTdWJRSWRcIiByZXF1aXJlZD1cIlwiIChmb2N1cyk9XCJjbGVhckxvY2FsU3ViUXVlc0Vycm9yKHF1ZXMpXCJcbiAgICAgICAgICAgIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHF1ZXMuZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgcGxhY2Vob2xkZXI9XCJ7eyBxdWVzLnF1ZXN0aW9uIH19XCJcbiAgICAgICAgICAgIG9uaW5wdXQ9XCJ0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSgvW15hLXpBLVowLTlcXHMuOjssP10vZywnJyk7XCIgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJcIiAqbmdJZj1cImFkZEZsYWdcIj5cbiAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIkFkZChnZXRMb2NhbFN1YlF1ZXN0aW9ucyhxdWVzdGlvbkl0ZW0uaWQpKVwiIGNsYXNzPVwiYnRuXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzXCIgPjwvaT57eydhZGQnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fTwvYnV0dG9uPlxuICAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDwhLS1MaXN0IEVuZC0tPlxuXG4gIDwhLS0gQWN0aW9ucyAtLT5cbiAgPCEtLSBWRCBidXR0b24gY29uZGl0aW9uIHJlbW92ZWQtLT5cbiAgPGRpdiBjbGFzcz1cImZsZXhlclwiPlxuICAgIDwhLS0gQmFja3dhcmQgLyBCYWNrIC0tPlxuICAgIDwhLS0gSEEgMDJGRUIyNCBIaWRpbmcgdGhlIGJ1dHRvbiB3aGVuIHRoZXJlIGlzIG5vIHZhbHVlIGZyb20gdGhlIGJhY2tlbmQgLS0+XG4gICAgIDwhLS1WRCBkaXNhYmxlZCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiYmFja2J1dHRvblwiIFxuICAgICAgW3N0eWxlLnZpc2liaWxpdHldPVwicXVlc3Rpb25TdGFjay5sZW5ndGggPiAwID8gJ3Zpc2libGUnIDogJ2hpZGRlbidcIiAqbmdJZj1cInFiSXRlbS5iYWNrXCI+XG4gICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImlzQnV0dG9uRGlzYWJsZWRcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnbnh0LWxlZnQtYnQnOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIsXG4gICAgICAgICAgICAnbnh0LWJ0biBidG4tcHJpbWFyeSc6XG4gICAgICAgICAgICAgICFxYkl0ZW0ucHJvZ3Jlc3NCYXJcbiAgICAgICAgICB9XCIgKGNsaWNrKT1cImhhbmRsZUJhY2tDbGljaygpXCI+XG4gICAgICAgICAge3sgcWJJdGVtPy5iYWNrIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBGb3J3YXJkIC8gTmV4dCAtLT5cbiAgICA8IS0tIEhBIDAyRkVCMjQgSGlkaW5nIHRoZSBidXR0b24gd2hlbiB0aGVyZSBpcyBubyB2YWx1ZSBmcm9tIHRoZSBiYWNrZW5kIC0tPlxuICAgIDxkaXYgICpuZ0lmPVwicWJJdGVtLm5leHRcIiA+XG4gICAgICA8ZGl2IGNsYXNzPVwibnh0YnV0dG9uXCI+XG4gICAgICAgICA8IS0tVkQgZGlzYWJsZWQgLS0+XG4gICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImlzQnV0dG9uRGlzYWJsZWRcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAnbnh0LXJ1c3R5JzogcWJJdGVtLnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgJ254dC1idG4gYnRuLXByaW1hcnknOlxuICAgICAgICAgICAgICAhcWJJdGVtLnByb2dyZXNzQmFyXG4gICAgICAgICAgfVwiIChjbGljayk9XCJoYW5kbGVOZXh0Q2xpY2soKVwiPlxuICAgICAgICAgIHt7IHFiSXRlbS5uZXh0IH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gU3VtbWFyeSAtLT5cbjxkaXYgKm5nSWY9XCJ0aGlzLmFiSXRlbT8uc3RhdHVzID09PSAnQ29tcGxldGVkJ1wiIGNsYXNzPVwiY29sLWxnLTEyXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XG4gIDxoMj57e3RoaXMucWJJdGVtLnN1bW1hcnlUZXh0fX08L2gyPlxuICA8cD57e3RoaXMucWJJdGVtLnN1bW1hcnlTdWJUZXh0fX08L3A+XG48L2Rpdj5cblxuPGRpdiAqbmdJZj1cInN1bW1hcnkgJiYgc3VtbWFyeS5sZW5ndGggPiAwXCIgaGVpZ2h0PVwiMTAwJSAhaW1wb3J0YW50XCIgY2xhc3M9XCJjb2wtbWQtMTJcIiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdjb2wtbWQtMTInOiFxYkl0ZW0ucHJvZ3Jlc3NCYXJcbiAgICAgICAgICAgICAgIH1cIj5cbiAgICA8aDEgY2xhc3M9XCJueHQtaGVhZGVyMSBueHQtc3VtbWFyeXBhZGRcIiA+e3sgcWJJdGVtLnN1YlRpdGxlIH19PC9oMT4gICAgICAgICBcbiAgPGRpdiBpZD1cIm54dC1wcm9ncmVzczJcIiAqbmdJZj1cIiFxYkl0ZW0ucHJvZ3Jlc3NCYXIgJiYgdGhpcy5hYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnIFwiPlxuICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2Z1bGwtc3VtbWFyeSc6IHFiSXRlbS5wcm9ncmVzc0JhciB9XCI+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgcWEgb2Ygc3VtbWFyeVwiPlxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgbm9uOiAgcWJJdGVtLnByb2dyZXNzQmFyIH1cIj5cbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgc3VtbWFyeTogICFxYkl0ZW0ucHJvZ3Jlc3NCYXIgfVwiPlxuICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIXFiSXRlbS5lZGl0XCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncXVlc3Rpb24nOiB0aGlzLmFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCcgfVwiPlxuICAgICAgICAgICAgICA8cCBbbmdDbGFzc109XCJ7IGFzdW06IHRoaXMuYWJJdGVtLnN0YXR1cyA9PT0gJ0NvbXBsZXRlZCcgfVwiIChjbGljayk9XCJoYW5kbGVFZGl0Q2xpY2socWEucXVlc0lkKVwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRUZXh0KHFhLnF1ZXNWYWx1ZSlcIj57eyBxYS5xdWVzVmFsdWUgfX08L3A+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwhLS0gVkQgUXVlc3Rpb24gTm8gYWRkZWQgLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLmVkaXRcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdxdWVzdGlvbic6IHRoaXMuYWJJdGVtLnN0YXR1cyAhPSAnQ29tcGxldGVkJyB9XCI+XG4gICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAncXVlc3Rpb24nOiB0aGlzLmFiSXRlbS5zdGF0dXMgPT09ICdDb21wbGV0ZWQnIH1cIlxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+PHNwYW4+e3sgcWEucXVlc3Rpb25OdW1iZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAge3sgcWEucXVlc1ZhbHVlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibnh0LWFuc3dlclwiID5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWEucVR5cCA9PT0gJ0ZpbGUnXCI+XG4gICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMS5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXQtc3VtbWFyeVwiIC8+XG4gICAgICAgICAgICAgICAgICB7eyBxYS5hbnNWYWx1ZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwhLS0gSEEgMDJGRUIyNCBEaXNwbGF5aW5nIHRoZSBpbiBzdW1tYXJ5IGZvciBib29rIHR5cGUgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFhLnFUeXAgPT0gJ0Jvb2snXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCB2YWwgb2YgcWEubXlWYWxcIj5cbiAgICAgICAgICAgICAgICAgICAgPHA+e3sgdmFsLnF1ZXN0aW9uVGV4dCB9fTo8c3Bhbj57eyB2YWwuaW5wdXQgfX08L3NwYW4+PC9wPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBIQSAwMkZFQjI0IERpc3BsYXlpbmcgdGhlIHZhbHVlIGZvciBkaXJlY3QgcXVlc3Rpb24gLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFhLnFUeXAgIT0gJ0ZpbGUnICYmIHFhLnFUeXAgIT0gJ0Jvb2snXCI+e3sgcWEucXVlc3Rpb25UZXh0IH19IDxzcGFuPjwvc3Bhbj57eyBxYS5hbnNWYWx1ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0uZWRpdCAmJiB0aGlzLmFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCdcIiBzdHlsZT1cImJhY2tncm91bmQ6ICNkZWRkZGQ7XCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibnh0LWVkaXRcIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIj5cbiAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImRldmljZUluZm8ub3MgPT09ICdpT1MnXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWVkaXQlNDAyeC5wbmdcIiBzdHlsZT1cIndpZHRoOjUwJSFpbXBvcnRhbnQ7XCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0aW9zXCIvPlxuICAgICAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiZGV2aWNlSW5mby5vcyAhPT0gJ2lPUydcIiBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZWRpdCU0MDJ4LnBuZ1wiIGNsYXNzPVwibnh0LWljb24tZWRpdFwiIC8+XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuXG5cbiAgPGRpdiBpZD1cIm54dC1wcm9ncmVzczJcIiAqbmdJZj1cInFiSXRlbS5wcm9ncmVzc0JhciBcIj5cbiAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnYmdDb2xvciBueHRzdW1tYXJ5LXRvcCcgOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIgfVwiID5cbiAgICAgIDxkaXYgaWQ9XCJueHQtcHJvZ3Jlc3Mtc3VtbWFyeVwiICpuZ0lmPVwicWJJdGVtLnByb2dyZXNzQmFyXCI+XG4gICAgICAgIDxjaXJjbGUtcHJvZ3Jlc3MgY2xhc3M9XCJ0aXRsZWJhclwiIFtwZXJjZW50XT1cInRoaXMucGVyY2VudFwiIFtyYWRpdXNdPVwiNDBcIiBbc3BhY2VdPVwiLTRcIiBbb3V0ZXJTdHJva2VXaWR0aF09XCI0XCJcbiAgICAgICAgW2lubmVyU3Ryb2tlV2lkdGhdPVwiNFwiIFtvdXRlclN0cm9rZUNvbG9yXT1cIicjZTBiMWIwJ1wiIFtpbm5lclN0cm9rZUNvbG9yXT1cIicjZTdlOGVhJ1wiIFthbmltYXRpb25dPVwidHJ1ZVwiIFtiYWNrZ3JvdW5kUGFkZGluZ109IFwiMFwiXG4gICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPSBcIicjZGQyZTEzJ1wiIFtiYWNrZ3JvdW5kR3JhZGllbnRTdG9wQ29sb3JdPVwiJyNmOWJmYmQnXCIgW3RpdGxlQ29sb3JdPVwiJyNmM2VkZWQnXCIgXG4gICAgICAgIGNsYXNzPVwibmctc3Rhci1pbnNlcnRlZFwiIFt0aXRsZV09XCJ0aGlzLnBlcmNlbnQrJyUnXCIgW3Nob3dTdWJ0aXRsZV09XCJmYWxzZVwiIFtzaG93QmFja2dyb3VuZF09XCJ0cnVlXCIgW2FuaW1hdGlvbkR1cmF0aW9uXT1cIjMwMFwiXG4gICAgICAgIFtzdGFydEZyb21aZXJvXT1cImZhbHNlXCIgW3Jlc3BvbnNpdmVdPVwiZmFsc2VcIiA+XG4gICAgICA8L2NpcmNsZS1wcm9ncmVzcz5cbiAgICAgIFxuICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5zdW1tYXJ5VGV4dCAmJiBxYkl0ZW0ucHJvZ3Jlc3NCYXJcIiBcbiAgICAgIFtuZ0NsYXNzXT1cInsgc3VtbWFyeVRpdGxlOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIgfVwiPlxuICAgICAgICA8aDMgY2xhc3M9XCJueHQtc3ViVGl0bGVcIiA+e3sgcWJJdGVtLnN1bW1hcnlUZXh0IH19PC9oMz5cbiAgICAgICAgPGRpdiAqbmdJZj1cImFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCdcIiBjbGFzcz1cIm54dC1zdWJUaXRsZTFcIiA+e3sgcWJJdGVtLnN1bW1hcnlTdWJUZXh0fX08L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhcWJJdGVtLnByb2dyZXNzQmFyXCI+XG4gICAgICA8aDMgY2xhc3M9XCJzdW1tYXJ5LWhcIj5cbiAgICAgICAge3sgcWJJdGVtLnN1bW1hcnlUZXh0IH19XG4gICAgICA8L2gzPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBbbmdDbGFzc109XCJ7ICdmdWxsLXN1bW1hcnknOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIgfVwiPlxuICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5LWdyb3VwVGV4dCBteXQtZm9udDJcIj5cbiAgICAgIDwhLS0gPHA+SW5mb3JtZSBkZSBkYcOxbzwvcD4gLS0+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgcWEgb2Ygc3VtbWFyeVwiID5cbiAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7IG5vbjogIHFiSXRlbS5wcm9ncmVzc0JhciB9XCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnlcIj5cbiAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cIiFxYkl0ZW0uZWRpdFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3F1ZXN0aW9uIHN1bS1xdWVzIG15dC1mb250MyBteXQtZm9udDgnOiB0aGlzLmFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCcgfVwiPlxuICAgICAgICAgICAgICA8YSBbbmdDbGFzc109XCJ7IGFzdW06IHRoaXMuYWJJdGVtLnN0YXR1cyA9PT0gJ0NvbXBsZXRlZCcgfVwiIChjbGljayk9XCJoYW5kbGVFZGl0Q2xpY2socWEucXVlc0lkKVwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRUZXh0KHFhLnF1ZXNWYWx1ZSlcIj57eyBxYS5xdWVzVmFsdWUgfX08L2E+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0uZWRpdFwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3N1bS1xdWVzIHF1ZXN0aW9uIG15dC1mb250MyBteXQtZm9udDgnOiB0aGlzLmFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCcgfVwiPlxuICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ3N1bS1xdWVzMSBxdWVzdGlvbjEgc3VtbWFyeS1jb21wbGV0ZWQgbXl0LWZvbnQzIG15dC1mb250OCc6IHRoaXMuYWJJdGVtLnN0YXR1cyA9PT0gJ0NvbXBsZXRlZCcgfVwiXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRUZXh0KHFhLnF1ZXNWYWx1ZSlcIj5cbiAgICAgICAgICAgICAgICB7eyBxYS5xdWVzVmFsdWUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLmVkaXQgJiYgdGhpcy5hYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjZGVkZGRkO1wiPlxuICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwibnh0LWVkaXRcIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIj5cbiAgICAgICAgICAgICAgICA8aW1nICpuZ0lmPVwiZGV2aWNlSW5mby5vcyA9PT0gJ2lPUydcIiBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZWRpdCU0MDJ4LnBuZ1wiIHN0eWxlPVwid2lkdGg6NTAlIWltcG9ydGFudDtcIiBjbGFzcz1cIm54dC1pY29uLWVkaXRpb3NcIi8+XG4gICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImRldmljZUluZm8ub3MgIT09ICdpT1MnXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWVkaXQlNDAyeC5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXRcIiAvPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICBcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJueHQtYW5zd2VyXCI+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwID09PSAnRmlsZSdcIj5cbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMS5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXQtc3VtbWFyeVwiIC8+XG4gICAgICAgICAgICAgICAge3sgcWEuYW5zVmFsdWUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwICE9ICdGaWxlJ1wiPlxuICAgICAgICAgICAgICAgIHt7IHFhLmFuc1ZhbHVlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gPGRpdiBjbGFzcz1cImZsZXhlcjFcIiAqbmdJZj1cImFiSXRlbVwiPlxuICAgIDxkaXYgY2xhc3M9XCJcIiAqbmdJZj1cImFiSXRlbS5zdGF0dXMgPT0gJ0NvbXBsZXRlZCcgJiYgcWJJdGVtLmNhbmNlbFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxuICAgICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cInsnYnRuLXRleHQnOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ254dC1idG4gYnRuLXByaW1hcnkgYnRuLWxnIGJ0bi1ibG9jayBidG4tYmFjay1jb2xvcic6ICFxYkl0ZW0ucHJvZ3Jlc3NCYXJ9XCJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2FuY2VsQ2xpY2soKVwiPlxuICAgICAgICAgIHt7IHFiSXRlbS5jYW5jZWwgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+IC0tPlxuXG4gIDwhLS0gR3JvdXAgQWN0aW9ucyAtLT5cbiAgPGRpdiBjbGFzcz1cImFsaWduLWVkaXQtc3VibWl0XCIgKm5nSWY9XCJhYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnXCI+XG4gICAgPCEtLSBIQSAwMkZFQjI0IEhpZGluZyB0aGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gdmFsdWUgZnJvbSB0aGUgYmFja2VuZCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTZcIiAqbmdJZj1cInFiSXRlbS5zdWJtaXRcIj5cbiAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwieyAnYnRuLXRleHQyJzogcWJJdGVtLnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgYnRuLWJhY2stY29sb3InOiAhcWJJdGVtLnByb2dyZXNzQmFyIH1cIiBcbiAgICAgICAgKGNsaWNrKT1cImhhbmRsZVN1Ym1pdENsaWNrKClcIj5cbiAgICAgICAge3sgcWJJdGVtLnN1Ym1pdCB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPCEtLSBIQSAwMkZFQjI0IEhpZGluZyB0aGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gdmFsdWUgZnJvbSB0aGUgYmFja2VuZCAtLT5cbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwicWJJdGVtLmVkaXRcIj5cbiAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwieydncmV5JzogcWJJdGVtLnByb2dyZXNzQmFyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgYnRuLWJhY2stY29sb3InOiAhcWJJdGVtLnByb2dyZXNzQmFyfVwiIFxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQmFja0NsaWNrTmV3KClcIj5cbiAgICAgICAge3sgcWJJdGVtLmVkaXQgfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PiAtLT5cbiAgPC9kaXY+XG5cbjwvZGl2PiJdfQ==
|
|
2387
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlc3Rpb25uYWlyZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ueHQtYXBwL3NyYy9saWIvcGFnZXMvcXVlc3Rpb25uYWlyZS9xdWVzdGlvbm5haXJlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL254dC1hcHAvc3JjL2xpYi9wYWdlcy9xdWVzdGlvbm5haXJlL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsR0FHbEIsTUFBTSxlQUFlLENBQUM7QUFTdkIsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFakMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTlELE9BQU8sRUFDTCxRQUFRLEVBR1IsYUFBYSxFQUViLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsVUFBVSxFQUNWLGFBQWEsRUFDZCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUVMLFVBQVUsRUFNVixNQUFNLEVBRVAsTUFBTSxjQUFjLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVd0QixNQUFNLE9BQU8sc0JBQXNCO0lBNE12QjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBRUE7SUFFRDtJQXROQSxJQUFJLENBQVM7SUFDYixrQkFBa0IsQ0FBUztJQUMzQixJQUFJLENBQVM7SUFDYixHQUFHLENBQVM7SUFDWixHQUFHLENBQVMsQ0FBQyw4QkFBOEI7SUFDMUMsV0FBVyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7SUFDakMsVUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO0lB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QWdCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2xELGdCQUFnQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztZQUMxRCxnQkFBZ0IsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7WUFDbEUsZ0JBQWdCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ2xELGdCQUFnQixDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNwRCxnQkFBZ0IsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7WUFDMUQsZ0JBQWdCLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO1lBQzlELGdCQUFnQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQztZQUNsRSxnQkFBZ0IsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7WUFDbEUsZ0JBQWdCLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzVELGdCQUFnQixDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztZQUN0RSxnQkFBZ0IsQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixDQUFDO1lBQ3BGLGdCQUFnQixDQUFDLFlBQVksR0FBRyxF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QUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEMsQ0FBQzt3R0FyN0VXLHNCQUFzQjs0RkFBdEIsc0JBQXNCLG1UQUh0QixDQUFDLGFBQWEsQ0FBQywrQ0N0RDVCLGlodENBOHZCTTs7NEZEcnNCTyxzQkFBc0I7a0JBUGxDLFNBQVM7K0JBQ0UsbUJBQW1CLGlCQUVkLGlCQUFpQixDQUFDLElBQUksYUFDMUIsQ0FBQyxhQUFhLENBQUM7eVhBSWpCLElBQUk7c0JBQVosS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxHQUFHO3NCQUFYLEtBQUs7Z0JBQ0ksV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIE9uQ2hhbmdlcyxcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBFbGVtZW50UmVmLFxyXG4gIFNpbXBsZUNoYW5nZXMsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFBhcmFtcyB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgU2FsZXNmb3JjZVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc2FsZXNmb3JjZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IElNeURhdGVNb2RlbCwgSU15RHBPcHRpb25zIH0gZnJvbSBcIm15ZGF0ZXBpY2tlclwiO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIsIFNhZmVIdG1sIH0gZnJvbSBcIkBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXJcIjtcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IE5neFNwaW5uZXJTZXJ2aWNlIH0gZnJvbSBcIm5neC1zcGlubmVyXCI7XHJcbi8vaW1wb3J0IHsgTmd4SW5kZXhlZERCU2VydmljZSwgSW5kZXhEZXRhaWxzfSBmcm9tICduZ3gtaW5kZXhlZC1kYic7XHJcbmltcG9ydCB7IERldmljZURldGVjdG9yU2VydmljZSB9IGZyb20gJ25neC1kZXZpY2UtZGV0ZWN0b3InO1xyXG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50JztcclxuaW1wb3J0IHsgRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2hhbmdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTaGFyZWRTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3NoYXJlZC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7XHJcbiAgUXVlc3Rpb24sXHJcbiAgUXVlc3Rpb25Cb29rLFxyXG4gIEFuc3dlckJvb2ssXHJcbiAgQW5zd2VyV3JhcHBlcixcclxuICBPcHRpb24sXHJcbiAgT3B0aW9uVmFsdWUsXHJcbiAgQXR0YWNobWVudFdyYXBwZXIsXHJcbiAgQXR0YWNobWVudCxcclxuICBMb2NhbFF1ZXN0aW9uXHJcbn0gZnJvbSBcIi4uLy4uL3dyYXBwZXJcIjtcclxuaW1wb3J0IHsgRXJyb3JXcmFwcGVyIH0gZnJvbSBcIi4uLy4uL21vZGVsL2Vycm9yV3JhcHBlclwiO1xyXG5pbXBvcnQge1xyXG4gIFRFU1RRVUVTVElPTixcclxuICBEVFFVRVNUSU9OLFxyXG4gIEZJTEVRVUVTVElPTixcclxuICBUQVFVRVNUSU9OLFxyXG4gIFJBRElPUVVFU1RJT04sXHJcbiAgQ0hFQ0tRVUVTVElPTixcclxuICBCT09LUVVFU1RJT04sXHJcbiAgVEVTVFFCLFxyXG4gIFJUQVFVRVNUSU9OIC8vUlMgMDZKQU4yNVxyXG59IGZyb20gXCIuLi8uLi9zYW1wbGVcIjtcclxuaW1wb3J0IHsgZnJvbSB9IGZyb20gXCJyeGpzXCI7XHJcbi8vIEhBIDE5REVDMjMgaW1wb3J0ZWQgdHJhbnNsYXRpb24gc2VydmljZVxyXG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gXCIuLi8uLi9pMThuLnNlcnZpY2VcIjtcclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGliLXF1ZXN0aW9ubmFpcmVcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3F1ZXN0aW9ubmFpcmUuY29tcG9uZW50Lmh0bWxcIixcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHByb3ZpZGVyczogW0NoYW5nZVNlcnZpY2VdLFxyXG4gIHN0eWxlVXJsczogW1wiLi9xdWVzdGlvbm5haXJlLmNvbXBvbmVudC5jc3NcIl0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBRdWVzdGlvbm5haXJlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKSBxYklkOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgaW5zdXJhbmNlU3RhcnREYXRlOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc2Vydjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHRrbjogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGFwaTogc3RyaW5nOyAvLyBWRCBnZXR0aW5nIHRoZSBhcGkgYXMgaW5wdXRcclxuICBAT3V0cHV0KCkgaGFuZGxlRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGhhbmRsZVBhZ2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBoYW5kbGVRdWVzdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGhhbmRsZUJvb2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBoYW5kbGVTdWJtaXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBwYXJhbXM6IFBhcmFtcztcclxuICBwdWJsaWMgZGV2aWNlSW5mbyA9IG51bGw7XHJcbiAgcHVibGljIGFiSXRlbTogQW5zd2VyQm9vaztcclxuICBwdWJsaWMgcWJJdGVtOiBRdWVzdGlvbkJvb2s7XHJcbiAgcHVibGljIHF1ZXN0aW9uSXRlbTogUXVlc3Rpb247XHJcbiAgcHVibGljIGFuc3dlcldyYXA6IEFuc3dlcldyYXBwZXI7XHJcbiBcclxuICAvLyBDT05ESVRJT05BTCBUWVBFU1xyXG4gIHB1YmxpYyByYWRpb0ZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZGF0YUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuIFxyXG4gIC8vIE9QVElPTk9OTFkgVFlQRVNcclxuICBwdWJsaWMgZHJvcGRvd25GbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGNoZWNrYm94RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gXHJcbiAgLy8gVU5DT05ESVRJT05BTCBUWVBFU1xyXG4gIHB1YmxpYyB0ZXh0RmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyB0YUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgcnRhRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkdEZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgdGltZUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZGF0ZUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZmlsZUZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZW1haWxGbGFnOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIG51bWJlckZsYWc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgYWxwaGFudW1lcmljRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBib29rRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBsaXN0RmxhZzogYm9vbGVhbj0gZmFsc2U7XHJcbiAgLy9CYWNrIGJ1dHRvblxyXG4gIHB1YmxpYyBiYWNrQnV0dG9uRmxhZzogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8vIFZEIGRpc2FibGVkXHJcbiAgcHVibGljIGlzQnV0dG9uRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgb3B0aW9uVmFsdWVzOiBPcHRpb25WYWx1ZVtdID0gW107XHJcbiAgcHVibGljIHN1YlF1ZXN0aW9uczogUXVlc3Rpb25bXSA9IFtdO1xyXG4gIHB1YmxpYyBpbnBWYWx1ZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBhbnN3ZXJNYXAgPSBuZXcgTWFwKCk7XHJcbiAgcHVibGljIGRhdGVNYXAgPSBuZXcgTWFwKCk7XHJcbiAgcHVibGljIHNlbGVjdGVkaG91ck1hcCA9IG5ldyBNYXAoKTtcclxuICBwdWJsaWMgc2VsZWN0ZWRtaW51dGVNYXAgPSBuZXcgTWFwKCk7XHJcbiAgcHVibGljIGF0dGFjaG1lbnRzTWFwID0gbmV3IE1hcCgpO1xyXG4gIHB1YmxpYyBzcU9wdGlvbnMgPSBuZXcgTWFwKCk7XHJcbiAgcHVibGljIHN1YkFuc01hcCA9IG5ldyBNYXAoKTtcclxuICBwdWJsaWMgbG9jYWxTdWJRdWVzdGlvbnM6IExvY2FsUXVlc3Rpb25bXSA9IFtdO1xyXG4gIHB1YmxpYyBxdWVzdGlvblN0YWNrID0gW107XHJcbiAgcHVibGljIHF1ZXN0aW9uTmFtZSA9IFtdO1xyXG4gIHB1YmxpYyBhdHRhY2htZW50czogYW55W10gPSBbXTtcclxuICBwdWJsaWMgYXR0YWNobWVudElkTGlzdDogYW55W10gPSBbXTtcclxuICBwdWJsaWMgYXR0YWNobWVudElkOiBzdHJpbmcgPSBcIlwiO1xyXG4gIHB1YmxpYyBhdHRhY2htZW50OiBhbnk7XHJcbiAgcHVibGljIGFsbG93ZWRGaWxlRXh0ZW5zaW9uOiBzdHJpbmdbXTtcclxuICBwdWJsaWMgZmlsZUV4Y2VlZGVkTGltaXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgZmlsZVR5cGVJbmNvcnJlY3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgYmFjazogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBiYWNraWNvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIGNoZWNrOiBib29sZWFuO1xyXG4gIHB1YmxpYyBwb3A6IGJvb2xlYW47XHJcbiAgcHVibGljIGxvY2FsRGF0ZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBjdXJyZW50TmFtZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBwYXRocXVlc3Rpb246IG51bWJlcjtcclxuICBwdWJsaWMgcGVyY2VudDogbnVtYmVyO1xyXG4gIHB1YmxpYyBjb3VudDogbnVtYmVyO1xyXG4gIHB1YmxpYyB0YUZvY3VzT3V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIG5vdFZhbGlkQWNjTnVtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHNwbENDQmFja0NsaWNrOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIHN1bW1hcnkgPSBbXTtcclxuICBwdWJsaWMgbG9jYWxTdWJRTWFwID0gbmV3IE1hcCgpO1xyXG4gIHB1YmxpYyBrZXlJbmRleDogbnVtYmVyID0gMDtcclxuICAvL3B1YmxpYyBzcXVlczogc3RyaW5nO1xyXG4gIHB1YmxpYyBzZWxEYXRlOiBhbnkgPSB7fTtcclxuICBwdWJsaWMgc2VsZWN0RGF0ZTogc3RyaW5nO1xyXG4gIHByaXZhdGUgdG9kYXk6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gIHByaXZhdGUgZWw6IEhUTUxFbGVtZW50O1xyXG4gIHB1YmxpYyBpbm5lcmh0bWw6IGFueTtcclxuICBwdWJsaWMgcG9zc2liaWxpdGllczogYW55O1xyXG4gIHB1YmxpYyBpbm5lcmh0bWwxOiBhbnk7XHJcbiAgcHVibGljIHN1bW1hcnlEYXRhID1bXTtcclxuIFxyXG4gIHB1YmxpYyBob3VyczogYW55W10gPSBbXHJcbiAgICBcIjAxXCIsXHJcbiAgICBcIjAyXCIsXHJcbiAgICBcIjAzXCIsXHJcbiAgICBcIjA0XCIsXHJcbiAgICBcIjA1XCIsXHJcbiAgICBcIjA2XCIsXHJcbiAgICBcIjA3XCIsXHJcbiAgICBcIjA4XCIsXHJcbiAgICBcIjA5XCIsXHJcbiAgICBcIjEwXCIsXHJcbiAgICBcIjExXCIsXHJcbiAgICBcIjEyXCIsXHJcbiAgXTtcclxuIFxyXG4gIHB1YmxpYyBtaW51dGVzOiBzdHJpbmdbXSA9IFtcclxuICAgIFwiMDBcIixcclxuICAgIFwiMDFcIixcclxuICAgIFwiMDJcIixcclxuICAgIFwiMDNcIixcclxuICAgIFwiMDRcIixcclxuICAgIFwiMDVcIixcclxuICAgIFwiMDZcIixcclxuICAgIFwiMDdcIixcclxuICAgIFwiMDhcIixcclxuICAgIFwiMDlcIixcclxuICAgIFwiMTBcIixcclxuICAgIFwiMTFcIixcclxuICAgIFwiMTJcIixcclxuICAgIFwiMTNcIixcclxuICAgIFwiMTRcIixcclxuICAgIFwiMTVcIixcclxuICAgIFwiMTZcIixcclxuICAgIFwiMTdcIixcclxuICAgIFwiMThcIixcclxuICAgIFwiMTlcIixcclxuICAgIFwiMjBcIixcclxuICAgIFwiMjFcIixcclxuICAgIFwiMjJcIixcclxuICAgIFwiMjNcIixcclxuICAgIFwiMjRcIixcclxuICAgIFwiMjVcIixcclxuICAgIFwiMjZcIixcclxuICAgIFwiMjdcIixcclxuICAgIFwiMjhcIixcclxuICAgIFwiMjlcIixcclxuICAgIFwiMzBcIixcclxuICAgIFwiMzFcIixcclxuICAgIFwiMzJcIixcclxuICAgIFwiMzNcIixcclxuICAgIFwiMzRcIixcclxuICAgIFwiMzVcIixcclxuICAgIFwiMzZcIixcclxuICAgIFwiMzdcIixcclxuICAgIFwiMzhcIixcclxuICAgIFwiMzlcIixcclxuICAgIFwiNDBcIixcclxuICAgIFwiNDFcIixcclxuICAgIFwiNDJcIixcclxuICAgIFwiNDNcIixcclxuICAgIFwiNDRcIixcclxuICAgIFwiNDVcIixcclxuICAgIFwiNDZcIixcclxuICAgIFwiNDdcIixcclxuICAgIFwiNDhcIixcclxuICAgIFwiNDlcIixcclxuICAgIFwiNTBcIixcclxuICAgIFwiNTFcIixcclxuICAgIFwiNTJcIixcclxuICAgIFwiNTNcIixcclxuICAgIFwiNTRcIixcclxuICAgIFwiNTVcIixcclxuICAgIFwiNTZcIixcclxuICAgIFwiNTdcIixcclxuICAgIFwiNThcIixcclxuICAgIFwiNTlcIixcclxuICBdO1xyXG4gXHJcbiAgcHVibGljIHNlbGVjdGVkSG91cjogc3RyaW5nID0gXCJcIjtcclxuICBwdWJsaWMgc2VsZWN0ZWRNaW51dGU6IHN0cmluZyA9IFwiXCI7XHJcbiAgcHVibGljIHNlbGVjdGVkTWVyaWRpZW06IHN0cmluZyA9IFwiXCI7XHJcbiAgcHVibGljIHZhbHVlTmFtZTogc3RyaW5nID0gXCJcIjtcclxuICBwdWJsaWMgdmFsdWVOYW1lMTogc3RyaW5nID0gXCJcIjtcclxuICBwdWJsaWMgYm9va0ZsYWdBY2NlcHQ6IHN0cmluZ1tdO1xyXG4gIHB1YmxpYyByZWNvcmRJZDogc3RyaW5nO1xyXG4gIHB1YmxpYyBjdXJyZW50UXVlc3Rpb25JZDogc3RyaW5nO1xyXG4gIHB1YmxpYyBzcGlubmVyVHlwZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBzcGlubmVyTmFtZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBuZXh0VmFsdWU6c3RyaW5nID0nJztcclxuIFxyXG4gIHN0YXJ0X2RhdGU/OiBhbnk7XHJcbiBcclxuICAvL3NlYXJjaCBjb21wb25lbnRcclxuICBwdWJsaWMgdGVtcG9BZGRyZXNzOiBhbnlbXSA9IFtdO1xyXG4gIHB1YmxpYyBzZWxlY3RlZFZhbHVlOiBzdHJpbmc7XHJcbiAgcHVibGljIHNlbGVjdGVkUG9zdGFsY29kZTogc3RyaW5nO1xyXG4gIHB1YmxpYyBzZWxlY3RlZFByb3ZpbmNlOiBzdHJpbmc7XHJcbiAgcHVibGljIHNlbGVjdGVkQ2l0eTogc3RyaW5nO1xyXG4gIHB1YmxpYyBzZWxlY3RlZEFyZWE6IHN0cmluZztcclxuICBwdWJsaWMgbG9jYWxhZGRyZXNzOiBhbnlbXSA9IFtdO1xyXG4gIHB1YmxpYyBhbGxBZGRyZXNzIDphbnkgW10gPSBbXTtcclxuICBwdWJsaWMgUG9zdGFsQ29kZTpzdHJpbmc7XHJcbiAgcHVibGljIHBsYWNlczogYW55W10gPSBbXTtcclxuICBwdWJsaWMgcHJvdmluY2U6YW55W109W107XHJcbiBcclxuICAvLyBSRVEtMDEgUFJPR1JFU1MgQkFSXHJcbiAgcHVibGljIHByb2dyZXNzU3R5bGU6IHN0cmluZyA9IFwiMCVcIjtcclxuICBwdWJsaWMgYW5zd2VyQ291bnQ6IG51bWJlciA9IDA7XHJcbiAgcHVibGljIGluZGV4Q291bnQ6IG51bWJlciA9IDA7XHJcbiAgcHVibGljIGFkZEZsYWc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBteURhdGVQaWNrZXJPcHRpb25zOiBJTXlEcE9wdGlvbnMgPSB7fTtcclxuICBpbmRpdmlkdWFsQm9va0J1dHRvbjogYm9vbGVhbjtcclxuIFxyXG4gIHB1YmxpYyBhbGxJbnB1dFZhbHVlcyA9IFtdOyAvLyBIQSAwMkZFQjI0IFRvIHN0b3JlIGFsbCB0aGUgaW5wdXQgdmFsdWVzXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHNmU2VydmljZTogU2FsZXNmb3JjZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcclxuICAgIHByaXZhdGUgY2hhbmdlU2VydmljZTogQ2hhbmdlU2VydmljZSxcclxuICAgIHByaXZhdGUgc2hhcmVkU2VydmljZTogU2hhcmVkU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgcHJpdmF0ZSBzYW5pdGl6ZXI6IERvbVNhbml0aXplcixcclxuICAgIHByaXZhdGUgc3Bpbm5lcjogTmd4U3Bpbm5lclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9mb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gICAgLy9wcml2YXRlIGRiU2VydmljZTogTmd4SW5kZXhlZERCU2VydmljZSxcclxuICAgIHByaXZhdGUgZGV2aWNlU2VydmljZTogRGV2aWNlRGV0ZWN0b3JTZXJ2aWNlLFxyXG4gICAgZWw6IEVsZW1lbnRSZWYsXHJcbiAgICBwdWJsaWMgaTE4blNlcnZpY2U6IEkxOG5TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICAvLyBWRCAxMEF1ZzI0LXNwaW5uZXIgY2hhbmdlc1xyXG4gICAgdGhpcy5zcGlubmVyTmFtZSA9IFwic3AxXCI7XHJcbiAgICB0aGlzLnNwaW5uZXJUeXBlID0gXCJiYWxsLXNwaW4tY2xvY2t3aXNlLWZhZGVcIjtcclxuICB9XHJcbiBcclxuICAvLyBIQSAwMkZFQjI0IE9uIGRhdGUgY2hhbmdlIG5lZWQgdG8gc3RvcmUgdGhlIGNoYW5nZWQgdmFsdWUgc28gcGFzc2luZyB0aGUgcXVlc3Rpb25cclxuICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xyXG4gIG9uRGF0ZUNoYW5nZWQoZXZlbnQ6IElNeURhdGVNb2RlbCwgcXVlczogYW55KSB7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIG9uRGF0ZUNoYW5nZWQnKTtcclxuICAgIC8vdG8gY2hhbmdlIHRoZSBib3JkZXIgY29sb3JcclxuICAgIGlmICh0aGlzLnFiSXRlbS5wcm9ncmVzc0Jhcikge1xyXG4gICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIHByb2dyZXNzQmFyIGNvbmQnKTtcclxuICAgICAgdGhpcy5pbnBWYWx1ZSA9XHJcbiAgICAgICAgZXZlbnQuZGF0ZS5kYXkgKyBcIi9cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi9cIiArIGV2ZW50LmRhdGUueWVhcjtcclxuICAgICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0udHlwZSA9PVwiQm9va1wiKXtcclxuICAgICAgICB0aGlzLnNlbGVjdERhdGUgPSAgZXZlbnQuZGF0ZS5kYXkgKyBcIi9cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi9cIiArIGV2ZW50LmRhdGUueWVhcjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBFTFNFIG9mIHByb2dyZXNzQmFyIGNvbmQnKTtcclxuICAgICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0udHlwZSA9PVwiQm9va1wiKXtcclxuICAgICAgICB0aGlzLnNlbGVjdERhdGUgPSAgZXZlbnQuZGF0ZS5kYXkgKyBcIi1cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi1cIiArIGV2ZW50LmRhdGUueWVhcjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlucFZhbHVlID1cclxuICAgICAgICBldmVudC5kYXRlLnllYXIgKyBcIi1cIiArIGV2ZW50LmRhdGUubW9udGggKyBcIi1cIiArIGV2ZW50LmRhdGUuZGF5O1xyXG4gICAgfVxyXG4gICAgY29uc3QgaHRtbEVsZW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIm15ZHBcIik7XHJcbiAgICBodG1sRWxlbWVudFxyXG4gICAgICAuaXRlbSgwKVxyXG4gICAgICAuc2V0QXR0cmlidXRlKFwic3R5bGVcIiwgXCJib3JkZXItY29sb3I6Izg3YmUxYzt3aWR0aDoxMDAlXCIpO1xyXG4gICAgdGhpcy5kYXRlTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCwgZXZlbnQpO1xyXG4gICAgaWYgKFxyXG4gICAgICBldmVudC5kYXRlLmRheSA9PT0gMCAmJlxyXG4gICAgICBldmVudC5kYXRlLm1vbnRoID09PSAwICYmXHJcbiAgICAgIGV2ZW50LmRhdGUueWVhciA9PT0gMFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuZGF0ZU1hcC5kZWxldGUodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xyXG4gICAgICB0aGlzLmFuc3dlck1hcC5kZWxldGUodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xyXG4gICAgfVxyXG4gICAgLy9jb25zb2xlLmxvZygndGhpcy5pbnBWYWx1ZSA9ICcrdGhpcy5pbnBWYWx1ZSk7XHJcbiAgICAvL2NvbnNvbGUubG9nKCd0aGlzLnNlbGVjdERhdGUgPSAnK3RoaXMuc2VsZWN0RGF0ZSk7XHJcbiAgICAvLyBIQSAwMkZFQjI0IEFzc2lnbmluZyBpbnB1dCB2YWx1ZSB0byBxdWVzIGlucHV0XHJcbiAgICBxdWVzLmlucHV0ID0gdGhpcy5pbnBWYWx1ZTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5kZXZpY2VJbmZvID0gdGhpcy5kZXZpY2VTZXJ2aWNlLmdldERldmljZUluZm8oKTtcclxuICAgIHRoaXMucm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChwYXJhbXM6IFBhcmFtcykgPT4ge1xyXG4gICAgICBpZiAocGFyYW1zWydpZCddKSB7XHJcbiAgICAgICAgdGhpcy5pbmRpdmlkdWFsQm9va0J1dHRvbiA9IHRydWU7XHJcbiAgICAgIH1lbHNlIGlmKHBhcmFtc1snYm9va2xldElkJ10pe1xyXG4gICAgICAgIHRoaXMuaW5kaXZpZHVhbEJvb2tCdXR0b24gPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLmlucFZhbHVlID0gXCJcIjtcclxuICAgIHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9IFwiQU1cIjtcclxuICAgIHRoaXMucHJvY2Vzc1FCKCk7XHJcbiAgICAvL2NvbnNvbGUubG9nKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdhZGRyZXNzJykpO1xyXG4gICAgaWYobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJhZGRyZXNzXCIpKXtcclxuICAgICAgdGhpcy5sb2NhbGFkZHJlc3MgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiYWRkcmVzc1wiKSk7XHJcbiAgICAgIC8vY29uc29sZS5sb2coJ0xlbmd0aD0nK3RoaXMubG9jYWxhZGRyZXNzLmxlbmd0aCk7XHJcbiAgICAgIHRoaXMuYWxsQWRkcmVzcz10aGlzLmxvY2FsYWRkcmVzcy5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMubG9jYWxhZGRyZXNzLmluZGV4T2YoaXRlbSkgPT0gaW5kZXgpe1xyXG4gICAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5hbGxBZGRyZXNzLnNvcnQoZnVuY3Rpb24oYSwgYil7XHJcbiAgICAgICAgcmV0dXJuIGEuemlwQ29kZSAtIGIuemlwQ29kZVxyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZih0aGlzLmRldmljZUluZm8ub3MgPT09ICdpT1MnKXtcclxuICAgICAgICBsZXQgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3BlbihcImFkZHJlc3NEQlwiKTtcclxuICAgICAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSAoZXZlbnQpID0+IHtcclxuICAgICAgICAgIGNvbnN0IHRhcmdldE5ldyA9IGV2ZW50LnRhcmdldCBhcyBJREJSZXF1ZXN0O1xyXG4gICAgICAgICAgbGV0IGRiTmV3ID0gdGFyZ2V0TmV3LnJlc3VsdDtcclxuICAgICAgICAgIGNvbnN0IHJlcXVlc3ROZXcgPSBkYk5ldy50cmFuc2FjdGlvbignYWRkcmVzc1RhYmxlJylcclxuICAgICAgICAgICAgICAgIC5vYmplY3RTdG9yZSgnYWRkcmVzc1RhYmxlJylcclxuICAgICAgICAgICAgICAgIC5nZXQoMSk7XHJcbiAgICAgICAgICByZXF1ZXN0TmV3Lm9uc3VjY2VzcyA9ICgpPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRlbXBWYXIgPSByZXF1ZXN0TmV3LnJlc3VsdDtcclxuICAgICAgICAgICAgICB0aGlzLmxvY2FsYWRkcmVzcyA9IEpTT04ucGFyc2UodGVtcFZhci53aG9sZUFkZHJlc3NTdHJpbmcpO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxsQWRkcmVzcz10aGlzLmxvY2FsYWRkcmVzcy5maWx0ZXIoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sb2NhbGFkZHJlc3MuaW5kZXhPZihpdGVtKSA9PSBpbmRleCl7XHJcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxsQWRkcmVzcy5zb3J0KGZ1bmN0aW9uKGEsIGIpe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuemlwQ29kZSAtIGIuemlwQ29kZVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH1cclxuICB9XHJcbi8vIGNhbGwgd2hlbiBib29rSWQgY2hhbmdlc1xyXG4gIG5nT25DaGFuZ2VzKHNpbXBsZWNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmKHNpbXBsZWNoYW5nZXNbJ3FiSWQnXSl7XHJcbiAgICAgIHRoaXMucHJvY2Vzc1FCKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xyXG4gIGRhdGVfVGltZU1hcCgpIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRob3VyTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCwgdGhpcy5zZWxlY3RlZEhvdXIpO1xyXG4gICAgdGhpcy5zZWxlY3RlZG1pbnV0ZU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQsIHRoaXMuc2VsZWN0ZWRNaW51dGUpO1xyXG4gIH1cclxuIFxyXG4gIGRheSgpIHtcclxuICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucyA9IHtcclxuICAgICAgZGF0ZUZvcm1hdDogXCJkZC5tbS55eXl5XCIsXHJcbiAgICAgIHN1bkhpZ2hsaWdodDogZmFsc2UsXHJcbiAgICAgIGRpc2FibGVEYXRlUmFuZ2VzOiBbXSxcclxuICAgICAgc2hvd0NsZWFyRGF0ZUJ0bjogZmFsc2UsXHJcbiAgICAgIGRpc2FibGVTaW5jZToge1xyXG4gICAgICAgIHllYXI6IDAsXHJcbiAgICAgICAgbW9udGg6IDAsXHJcbiAgICAgICAgZGF5OiAwLFxyXG4gICAgICB9LFxyXG4gICAgICBkaXNhYmxlVW50aWw6IHtcclxuICAgICAgICB5ZWFyOiAwLFxyXG4gICAgICAgIG1vbnRoOiAwLFxyXG4gICAgICAgIGRheTogMCxcclxuICAgICAgfSxcclxuICAgICAgc2hvd1RvZGF5QnRuOiBmYWxzZSxcclxuICAgICAgZGF5TGFiZWxzOiB7XHJcbiAgICAgICAgc3U6IFwiRG9tXCIsXHJcbiAgICAgICAgbW86IFwiTHVuXCIsXHJcbiAgICAgICAgdHU6IFwiTWFyXCIsXHJcbiAgICAgICAgd2U6IFwiTWnDqVwiLFxyXG4gICAgICAgIHRoOiBcIkp1ZVwiLFxyXG4gICAgICAgIGZyOiBcIlZpZVwiLFxyXG4gICAgICAgIHNhOiBcIlPDoWJcIixcclxuICAgICAgfSxcclxuICAgICAgbW9udGhMYWJlbHM6IHtcclxuICAgICAgICAxOiBcIkVuZVwiLFxyXG4gICAgICAgIDI6IFwiRmViXCIsXHJcbiAgICAgICAgMzogXCJNYXJcIixcclxuICAgICAgICA0OiBcIkFiclwiLFxyXG4gICAgICAgIDU6IFwiTWF5b1wiLFxyXG4gICAgICAgIDY6IFwiSnVuXCIsXHJcbiAgICAgICAgNzogXCJKdWxcIixcclxuICAgICAgICA4OiBcIkFnb1wiLFxyXG4gICAgICAgIDk6IFwiU2VwXCIsXHJcbiAgICAgICAgMTA6IFwiT2N0XCIsXHJcbiAgICAgICAgMTE6IFwiTm92XCIsXHJcbiAgICAgICAgMTI6IFwiRGljXCIsXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gIH1cclxuIFxyXG4gIGNoYW5nZSgpIHtcclxuICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gd2luZG93LmRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJteWRwXCIpO1xyXG4gICAgaWYgKHRoaXMuc2VsRGF0ZSA9PT0gbnVsbCB8fCB0aGlzLmlucFZhbHVlLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICBodG1sRWxlbWVudFxyXG4gICAgICAgIC5pdGVtKDApXHJcbiAgICAgICAgLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwid2lkdGg6MTAwJTtib3JkZXI6IDFweCBzb2xpZCByZWRcIik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBodG1sRWxlbWVudFxyXG4gICAgICAgIC5pdGVtKDApXHJcbiAgICAgICAgLnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwiYm9yZGVyOiAxcHggc29saWQgIzg3YmUxYyA7d2lkdGg6MTAwJVwiKTtcclxuICAgIH1cclxuICB9XHJcbiBcclxuICBwcm9jZXNzUUIoKSB7XHJcbiAgICBcclxuICAgIGNvbnNvbGUubG9nKCdQcm9jZXNzUUInKTtcclxuICAgIC8vdGhpcy5xYkl0ZW1cclxuICAgIGNvbnNvbGUubG9nKHRoaXMucWJJZCk7XHJcbiAgICAvL2NvbnNvbGUubG9nKCdWZXJzaW9uIGluIHByb2Nlc3MgaXMgOGJmMTFlZmE3ZjkxYTM5MWQ5NTdiZjZiNTA3OGVkYzdlNjU2YjY3YycpO1xyXG4gICAgaWYgKHRoaXMucWJJZCkge1xyXG4gICAgICBpZiAodGhpcy5xYklkLmxlbmd0aCA9PSAxOCkge1xyXG4gICAgICAgIHRoaXMucmVhZFF1ZXN0aW9uQm9vayh0aGlzLnFiSWQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgZWxzZSBwYXJ0Jyk7XHJcbiAgICAgICAgLy9jb25zb2xlLmxvZygnU2V0dGluZyB0aGUgUXVlc3Rpb24gRGlyZWN0bHkgZm9yIHRlc3RpbmcnKTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbSA9IERUUVVFU1RJT047XHJcbiAgICAgICAgdGhpcy5xYkl0ZW0gPSBURVNUUUI7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzUXVlc3Rpb24oKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuIFxyXG4gIHRyaW1MYXN0RHVtbXkoaW5wdXQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIChpbnB1dCA9IGlucHV0LnN1YnN0cmluZygwLCBpbnB1dC5sZW5ndGggLSA2KSk7XHJcbiAgfVxyXG4gXHJcbiAgZ2V0UHJvcGVyVGltZShkZWY6IHN0cmluZywgaW5wdXQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGlucHV0ID09PSBcIlwiID8gZGVmIDogaW5wdXQ7XHJcbiAgfVxyXG4gICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xyXG4gIC8vU3VtbWFyeSBRdWVzdGlvbiBDbGlja2FibGUgTG9naWNcclxuICBoYW5kbGVFZGl0Q2xpY2sodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5iYWNraWNvbiA9IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuYWJJdGVtPy5zdGF0dXMgPT0gXCJQZW5kaW5nXCIpIHtcclxuICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZWFkUXVlc3Rpb24odmFsdWUpO1xyXG4gICAgICAvL2NvbnNvbGUubG9nKCcgaW4gc2lkZSBzdW1tYXJ5b3BlbicrIHRoaXMuc3VtbWFyeS5sZW5ndGgpO1xyXG4gXHJcbiAgICAgIC8vQXNzaWduIHF1ZXN0aW9uIHN0YWNrIGxlbmd0aCBmcm9tIHN1bW1hcnkgcGFydFxyXG4gICAgICB2YXIgYXJyYXlMZW5ndGggPSB0aGlzLnF1ZXN0aW9uU3RhY2subGVuZ3RoO1xyXG4gICAgICB2YXIgbGVuZ3RoVmFsdWUgPSB0aGlzLnF1ZXN0aW9uU3RhY2suaW5kZXhPZih2YWx1ZSk7XHJcbiBcclxuICAgICAgZm9yIChsZXQgaSA9IGFycmF5TGVuZ3RoOyBpID4gbGVuZ3RoVmFsdWU7IGktLSkge1xyXG4gICAgICAgICAgIHRoaXMucXVlc3Rpb25TdGFjay5wb3AoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIgPT09IHRydWUpIHtcclxuICAgICAgICB2YXIgYXJyYXlMZW5ndGgxID0gdGhpcy5xdWVzdGlvbk5hbWUubGVuZ3RoO1xyXG4gICAgICAgIGZvciAobGV0IGogPSBhcnJheUxlbmd0aDE7IGogPiBsZW5ndGhWYWx1ZTsgai0tKSB7XHJcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uTmFtZS5wb3AoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdW1tYXJ5ID0gW107XHJcbiAgICAgIHRoaXMuc3VtbWFyeURhdGEgPSBbXTtcclxuICAgIH1cclxuICB9XHJcbiBcclxuICBoYW5kbGVOZXh0Q2xpY2soKSB7XHJcbiAgIC8vIHRoaXMuc2hhcmVkU2VydmljZS5zaG93TG9hZGVyKCk7XHJcbiAgIHRoaXMuc3Bpbm5lci5zaG93KHRoaXMuc3Bpbm5lck5hbWUpO1xyXG4gICAgdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMuYmFja0J1dHRvbkZsYWcgPSBmYWxzZTtcclxuICAgIHRoaXMuQW5zd2VyU2F2ZSgpO1xyXG4gIH1cclxuIFxyXG4gIEFuc3dlclNhdmUoKXtcclxuICAgIC8vdGhpcy51cGRhdGVQcm9ncmVzcygpO1xyXG4gICAgaWYgKHRoaXMuY3VycmVudFF1ZXN0aW9uSWQgPT09IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdmFyIHF1ZXN0aW9uVHh0PScnO1xyXG4gICAgdGhpcy5jbGVhckVycm9yKCk7XHJcbiAgICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0ubmV4dFRyYWNraW5nSWQpO1xyXG4gICAgdGhpcy5yZWNvcmRJZCA9IG51bGw7XHJcbiAgICB2YXIgY1F1ZXN0aW9uOiBRdWVzdGlvbiA9IG5ldyBRdWVzdGlvbigpO1xyXG4gICAgY1F1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkl0ZW07XHJcbiAgICAvLyBNUiAzMEpBTjI0IC0gQWRkZWQgQ29uZGl0aW9uIGZvciB0aGlzLnF1ZXN0aW9uSXRlbS5RdWVzdGlvbnNfX3IgKEJvb2sgUXVlc3Rpb24gYW5kIE5vbi1Cb29rKVxyXG4gICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zKSB7XHJcbiAgICAgICAgLy8gQ3JlYXRlIGFuIGFycmF5IG9mIG9iamVjdHMgdG8gc3RvcmUgdGhlIHZhbHVlc1xyXG4gICAgICAgIGZvciAodmFyIGk9MDsgaTx0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnMubGVuZ3RoO2krKykge1xyXG4gICAgICAgICAgaWYodGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zW2ldLnF1ZXN0aW9uVGV4dCl7XHJcbiAgICAgICAgICAgIHZhciBxdWVzdGlvblRleHQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnNbaV0ucXVlc3Rpb25UZXh0LnJlcGxhY2UoLzxbXj5dKz4vZywgJycpOyAvLyBSZW1vdmUgSFRNTCB0YWdzIGZyb20gdGhlIHF1ZXN0aW9uVGV4dCB2YWx1ZVxyXG4gICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHF1ZXN0aW9uVGV4dCA9ICd1bmRlZmluZWQnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnNbaV0uaW5wdXQ7XHJcbiAgICAgICAgICBjb25zdCBvYmogPSB7IFtxdWVzdGlvblRleHRdOiBpbnB1dCB9OyAvLyBDcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlIHF1ZXN0aW9uVGV4dCBhcyB0aGUga2V5IGFuZCB0aGUgaW5wdXQgYXMgdGhlIHZhbHVlXHJcbiAgICAgICAgICB0aGlzLnN1bW1hcnlEYXRhLnB1c2gob2JqKTsgLy8gQWRkIHRoZSBvYmplY3QgdG8gdGhlIGRhdGEgYXJyYXlcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YXIgcXVlc3Rpb25UZXh0ID0gdGhpcy5xdWVzdGlvbkl0ZW0ucXVlc3Rpb25UZXh0LnJlcGxhY2UoLzxbXj5dKz4vZywgJycpO1xyXG4gICAgICBjb25zdCBpbnB1dCA9IHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xyXG4gICAgICBjb25zdCBvYmogPSB7IFtxdWVzdGlvblRleHRdOiBpbnB1dCB9OyAvLyBDcmVhdGUgYW4gb2JqZWN0IHdpdGggdGhlIHF1ZXN0aW9uVGV4dCBhcyB0aGUga2V5IGFuZCB0aGUgaW5wdXQgYXMgdGhlIHZhbHVlXHJcbiAgICAgIHRoaXMuc3VtbWFyeURhdGEucHVzaChvYmopOyAvLyBBZGQgdGhlIG9iamVjdCB0byB0aGUgZGF0YSBhcnJheVxyXG4gICAgfVxyXG4gXHJcbiAgICAgICAgIHZhciB0eXAgPSBjUXVlc3Rpb24udHlwZTtcclxuICAgIC8vIHRoaXMuc3F1ZXMgKz0gY1F1ZXN0aW9uLnF1ZXN0aW9uICsgJ0BAIyMkJCc7XHJcbiAgICB2YXIgcXVlc1ZhbHVlID0gY1F1ZXN0aW9uLnF1ZXN0aW9uVGV4dDtcclxuICAgIHZhciBtYWlsZm9ybWF0ID1cclxuICAgICAgXCJeW14uXVthLXpBLVowLTkhIyQlJicqKy0vPT9eX2B7fH1+XStbXi5dQFteLV1bYS16QS1aMC05Li1dK1teLV0uW2EtekEtWl17Mix9JFwiO1xyXG4gXHJcbiAgICAvLyBQcm9jZXNzIElucHV0c1xyXG4gICAgaWYgKHRoaXMuY2hlY2tib3hGbGFnKSB7XHJcbiAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xyXG4gICAgICAvLyBTYXZlIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBpbiB0aGUgaW5wVmFsdWVcclxuICAgICAgZm9yICh2YXIgb3Ygb2YgdGhpcy5vcHRpb25WYWx1ZXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmNoZWNrZWQpKSB7XHJcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSBvdi52YWx1ZSArIFwiQEAjIyQkXCI7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IG92Lm5leHRRdWVzdGlvbjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy50cmltTGFzdER1bW15KHRoaXMuaW5wVmFsdWUpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmVtYWlsRmxhZykge1xyXG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZSAmJiB0aGlzLmlucFZhbHVlLm1hdGNoKG1haWxmb3JtYXQpKSB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IHRoaXMucXVlc3Rpb25JdGVtLm5leHRRdWVzdGlvbjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5hbHBoYW51bWVyaWNGbGFnKSB7XHJcbiAgICAgIHZhciBpc05vdFZhbGlkQWNjTnVtID0gdGhpcy5pc05vdFZhbGlkQWNjTnVtYmVyKHRoaXMuaW5wVmFsdWUpO1xyXG4gICAgICBpZiAoaXNOb3RWYWxpZEFjY051bSkge1xyXG4gICAgICAgIHRoaXMubm90VmFsaWRBY2NOdW0gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS5uZXh0UXVlc3Rpb247XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubm90VmFsaWRBY2NOdW0gPSBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5udW1iZXJGbGFnKSB7XHJcbiAgICAgIGlmICh0aGlzLmlucFZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5yZWNvcmRJZCA9IHRoaXMucXVlc3Rpb25JdGVtLm5leHRRdWVzdGlvbjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5ib29rRmxhZykge1xyXG4gICAgICB0aGlzLmlucFZhbHVlID0gXCJcIjtcclxuICAgICAgdmFyIGhhc01pc3NpbmdJbnB1dCA9IGZhbHNlO1xyXG4gICAgICBmb3IgKHZhciBpdGVtIG9mIHRoaXMucXVlc3Rpb25JdGVtLnN1YlF1ZXN0aW9ucykge1xyXG4gICAgICAgIHZhciBjb3VudCA9IDA7XHJcbiBcclxuICAgICAgICBpZihpdGVtLnR5cGUgPT0gXCJEYXRlXCIgfHwgaXRlbS50eXBlID09IFwiVGltZVwiKSB7XHJcbiAgICAgICAgICAvL3RoaXMgb25lXHJcbiAgICAgICAgICB0aGlzLmNoYW5nZSgpO1xyXG4gICAgICAgICAgICBpZihpdGVtLnR5cGUgPT0gXCJEYXRlXCIpe1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgZGF0ZSB0eXBlIGNvbmQgPSAnK3RoaXMuc2VsZWN0RGF0ZSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuc2VsZWN0RGF0ZTtcclxuICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuaW5wVmFsdWUpXHJcbiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnNlbGVjdERhdGUpXHJcbiBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgIGlmKGl0ZW0udHlwZSA9PSBcIlRpbWVcIil7XHJcbiAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc2VsZWN0ZWRIb3VyK3RoaXMuc2VsZWN0ZWRNZXJpZGllbSt0aGlzLnNlbGVjdGVkTWludXRlKVxyXG4gXHJcbiAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0ueDI0SG91cnMgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxyXG4gICAgICAgICAgICAgICAgKHRoaXMuc2VsZWN0ZWRNZXJpZGllbSA9PT0gXCJQTVwiICYmIHRoaXMuc2VsZWN0ZWRIb3VyICE9IFwiMTJcIlxyXG4gICAgICAgICAgICAgICAgICA/IE51bWJlcih0aGlzLnNlbGVjdGVkSG91cikgKyAxMlxyXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRIb3VyKSArXHJcbiAgICAgICAgICAgICAgICBcIjpcIiArXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlICsgXCIgUE1cIjtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIkFNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgPT09IFwiMTJcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSBcIjAwXCIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGUgKyBcIiBBTVwiO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIpIHtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMuc2VsZWN0RGF0ZSl7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnNlbGVjdERhdGUrXCIgXCIrdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQ7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiIFwiK3RoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBpZih0aGlzLnNlbGVjdERhdGUpe1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy5zZWxlY3REYXRlK1wiIFwiK3RoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIiBcIit0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcclxuICAgICAgICAgICAgICAgIH1cclxuIFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0ueDI0SG91cnMgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciArIFwiOlwiICsgdGhpcy5zZWxlY3RlZE1pbnV0ZTtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dDtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gSEEgMzEtSkFOLTI0IFJlbW92ZWQgdGhlIHNlbGVjdEhvdXIgYW5kIHNlbGVjdE1pbnV0ZSBjb25kaXRpb25cclxuICAgICAgICAgIGlmICh0aGlzLnNlbERhdGUgPT09IG51bGwgfHwgdGhpcy5zZWxEYXRlID09PSB1bmRlZmluZWQgfHwgIXRoaXMuaW5wVmFsdWUgfHwgIXRoaXMuc2VsZWN0RGF0ZSkge1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIG51bGwgY29uZGl0aW9uIG9mIGlucHV0Jyk7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gICAgICAgICAgICBjb25zdCBodG1sRWxlbWVudCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwibXlkcFwiKTtcclxuICAgICAgICAgICAgaHRtbEVsZW1lbnRcclxuICAgICAgICAgICAgICAuaXRlbSgwKVxyXG4gICAgICAgICAgICAgIC5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcIndpZHRoOjEwMCU7Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJlZCAhaW1wb3J0YW50O1wiKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5kYXRlX1RpbWVNYXAoKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBIQSAzMS1KQU4tMjQgQWRkZWQgdGV4dCBlcnJvciBjb25kaXRpb25cclxuICAgICAgaWYoaXRlbS50eXBlPT0gXCJUZXh0XCIpe1xyXG4gICAgICAgIGlmICghaXRlbS5pbnB1dCkge1xyXG4gICAgICAgICAgaXRlbS5pbnB1dCA9IFwiXCI7XHJcbiAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gdGhpcy5pbnBWYWx1ZSA9IGl0ZW0uaW5wdXQ7IDYzNFxyXG4gICAgICB9XHJcbiBcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAhaXRlbS5pc09wdGlvbmFsICYmXHJcbiAgICAgICAgLy8gICgoaXRlbS50eXBlICE9IFwiRmlsZVwiICYmICFpdGVtLmlucHV0ICYmIGl0ZW0udHlwZSAhPSAnRGF0ZScgJiYgaXRlbS50eXBlICE9ICdUaW1lJykgfHxcclxuICAgICAgICAgLy8gICAoaXRlbS50eXBlID09IFwiRmlsZVwiICYmIHRoaXMuYXR0YWNobWVudHMubGVuZ3RoID09IDApKVxyXG4gICAgICAgICAoaXRlbS50eXBlID09IFwiRmlsZVwiICYmIHRoaXMuYXR0YWNobWVudHMubGVuZ3RoID09IDApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGl0ZW0udHlwZSA9PSBcIlJhZGlvXCIpIHtcclxuICAgICAgICAgIGlmICghaXRlbS5pbnB1dCkge1xyXG4gICAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gICAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbS50eXBlID09IFwiRHJvcGRvd25cIikge1xyXG4gICAgICAgICAgaWYgKCFpdGVtLmlucHV0KSB7XHJcbiAgICAgICAgICAgIGl0ZW0uaW5wdXQgPSBcIlwiO1xyXG4gICAgICAgICAgICBpdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gICAgICAgICAgICBoYXNNaXNzaW5nSW5wdXQgPSB0cnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXRlbS50eXBlID09IFwiRW1haWxcIikge1xyXG4gICAgICAgICAgaWYgKGl0ZW0uaW5wdXQgJiYgaXRlbS5pbnB1dC5tYXRjaChtYWlsZm9ybWF0KSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLm5leHRRdWVzdGlvbjtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XHJcbiAgICAgICAgICAgIGhhc01pc3NpbmdJbnB1dCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtLnR5cGUgPT0gXCJGaWxlXCIgJiYgdGhpcy5hdHRhY2htZW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBmb3IgKHZhciBhdHRhY2htZW50SXRlbSBvZiB0aGlzLmF0dGFjaG1lbnRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wVmFsdWUgKz1cclxuICAgICAgICAgICAgICBhdHRhY2htZW50SXRlbS5hdHRhY2htZW50SWQgK1xyXG4gICAgICAgICAgICAgIFwiQCMkXCIgK1xyXG4gICAgICAgICAgICAgIGF0dGFjaG1lbnRJdGVtLmF0dGFjaG1lbnROYW1lICtcclxuICAgICAgICAgICAgICBcIixcIjtcclxuICAgICAgICAgICAgaWYgKGl0ZW0uaW5wdXQgPT0gdGhpcy5pbnBWYWx1ZSkge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xyXG4gICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZScgKyByZWNvcmRJZCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICAgIC8vIHRoaXMuYXR0YWNobWVudHMgPSBbXTtcclxuICAgICAgICB9IC8vaXRlbS5pbnB1dCA9PSB0aGlzLmlucFZhbHVlO1xyXG4gXHJcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSAoaXRlbS5pbnB1dCAhPSB1bmRlZmluZWQgPyBpdGVtLmlucHV0IDogXCJcIikgKyBcIkBAIyMkJFwiO1xyXG4gICAgICAgIHF1ZXN0aW9uVHh0ICs9IGl0ZW0ucXVlc3Rpb24gKyBcIkBAIyMkJFwiO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBib29rMScgKyB0aGlzLmlucFZhbHVlKVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChoYXNNaXNzaW5nSW5wdXQpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMudHJpbUxhc3REdW1teSh0aGlzLmlucFZhbHVlKTtcclxuICAgICAgcXVlc3Rpb25UeHQgPSBxdWVzdGlvblR4dCA/IHRoaXMudHJpbUxhc3REdW1teShxdWVzdGlvblR4dCkgOiBxdWVzdGlvblR4dDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMubGlzdEZsYWcpIHtcclxuICAgICAgdGhpcy5pbnBWYWx1ZSA9ICcnO1xyXG4gICAgICB2YXIgaGFzTWlzc2luZ0lucHV0ID0gZmFsc2U7XHJcbiAgICAgIGlmKHRoaXMubG9jYWxTdWJRTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpe1xyXG4gICAgICAgIHRoaXMuc3ViQW5zTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgICAgIGZvciAodmFyIGxvY2FsUXVlcyBvZiB0aGlzLmxvY2FsU3ViUU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQpKSB7XHJcbiAgICAgICAgICAgIGlmKCFsb2NhbFF1ZXMuaW5wdXQpIHtcclxuICAgICAgICAgICAgICBsb2NhbFF1ZXMuZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XHJcbiAgICAgICAgICAgICAgaGFzTWlzc2luZ0lucHV0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgaWYoIXRoaXMuc3ViQW5zTWFwLmhhcyhsb2NhbFF1ZXMuaWQpKXtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBhbnMgbWFwJylcclxuICAgICAgICAgICAgdGhpcy5zdWJBbnNNYXAuc2V0KGxvY2FsUXVlcy5pZCxsb2NhbFF1ZXMuaW5wdXQpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBhbnMgbWFwIGVsc2UnKVxyXG4gICAgICAgICAgICB0aGlzLnN1YkFuc01hcC5zZXQobG9jYWxRdWVzLmlkLHRoaXMuc3ViQW5zTWFwLmdldChsb2NhbFF1ZXMuaWQpICsgJyQkQEAjIycrbG9jYWxRdWVzLmlucHV0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiBcclxuICAgICAgICBpZiAoaGFzTWlzc2luZ0lucHV0KSB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdmaWxlIHR3bycpXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc3ViQW5zTWFwLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdpbnNpZGUgTWFwJyApO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2codmFsdWUpO1xyXG4gICAgICAgICAgdGhpcy5pbnBWYWx1ZSArPSAodmFsdWUgIT0gdW5kZWZpbmVkID8gdmFsdWUgOiAnJykgKyAnQEAjIyQkJztcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmlucFZhbHVlID0gdGhpcy50cmltTGFzdER1bW15KHRoaXMuaW5wVmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmRyb3Bkb3duRmxhZykge1xyXG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZS5sZW5ndGggPD0gMSkge1xyXG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSBcIi5cIjtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmR0RmxhZyAmJiB0aGlzLmRhdGVGbGFnICYmIHRoaXMudGltZUZsYWcpIHtcclxuICAgICAgLy90aGlzIG9uZVxyXG4gICAgICB0aGlzLmNoYW5nZSgpO1xyXG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdGhpcy5nZXRQcm9wZXJUaW1lKFwiMTJcIiwgdGhpcy5zZWxlY3RlZEhvdXIpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSB0aGlzLmdldFByb3BlclRpbWUoXCIwMFwiLCB0aGlzLnNlbGVjdGVkTWludXRlKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTWVyaWRpZW0gPSB0aGlzLmdldFByb3BlclRpbWUoXCJBTVwiLCB0aGlzLnNlbGVjdGVkTWVyaWRpZW0pO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2codGhpcy5pbnBWYWx1ZS5sZW5ndGgpO1xyXG4gXHJcbiAgICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLngyNEhvdXJzID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPVxyXG4gICAgICAgICAgICAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIlBNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgIT0gXCIxMlwiXHJcbiAgICAgICAgICAgICAgPyBOdW1iZXIodGhpcy5zZWxlY3RlZEhvdXIpICsgMTJcclxuICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRIb3VyKSArXHJcbiAgICAgICAgICAgIFwiOlwiICtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSArIFwiIFBNXCI7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIkFNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgPT09IFwiMTJcIikge1xyXG4gICAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pbnB1dCA9IFwiMDBcIiArIFwiOlwiICsgdGhpcy5zZWxlY3RlZE1pbnV0ZSArIFwiIEFNXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyBcIiBcIiArIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyBcIlRcIiArIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0ueDI0SG91cnMgPT09IHRydWUpIHtcclxuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID1cclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRNaW51dGU7XHJcbiAgICAgICAgICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIpIHtcclxuICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyBcIiBcIiArIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUgKyBcIlRcIiArIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIpIHtcclxuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJhbnMgPT4gXCIgKyB0aGlzLmlucFZhbHVlKTtcclxuICAgICAgICAgIHZhciBkYXRlMTogYW55ID0gdGhpcy5pbnBWYWx1ZS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICBkYXRlMSA9IGRhdGUxWzBdLnNwbGl0KFwiL1wiKTtcclxuICAgICAgICAgIGRhdGUxID0gW2RhdGUxWzJdLCBkYXRlMVsxXSwgZGF0ZTFbMF1dLmpvaW4oXCItXCIpO1xyXG4gICAgICAgICAgZGF0ZTEgPSBuZXcgRGF0ZShkYXRlMSk7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKGRhdGUxKVxyXG4gICAgICAgICAgdmFyIGRhdGUyOiBhbnkgPSB0aGlzLmluc3VyYW5jZVN0YXJ0RGF0ZS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICBkYXRlMiA9IG5ldyBEYXRlKGRhdGUyWzBdKTtcclxuICAgICAgICAgIC8vY29uc29sZS5sb2coZGF0ZTIpO1xyXG4gICAgICAgICAgaWYgKGRhdGUxIDwgZGF0ZTIpIHtcclxuICAgICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XHJcbiAgICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yLmVycm9yTXNnID1cclxuICAgICAgICAgICAgICBcIk5vIGVzIHBvc2libGUgZGFyIGRlIGFsdGEgbGEgcmVjbGFtYWNpw7NuIGRlYmlkbyBhIHF1ZSBsYSBmZWNoYSBkZWwgaW5jaWRlbnRlIGVzIGFudGVyaW9yIGEgbGEgZmVjaGEgZGUgY29udHJhdGFjacOzbiBkZSBsYSBww7NsaXphXCI7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZScpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsRGF0ZSA9PT0gbnVsbCB8fCAhdGhpcy5pbnBWYWx1ZSkge1xyXG4gICAgICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBuZXcgRXJyb3JXcmFwcGVyKCk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGF0ZV9UaW1lTWFwKCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lRmxhZyAmJiB0aGlzLmR0RmxhZyAmJiAhdGhpcy5kYXRlRmxhZykge1xyXG4gICAgICB0aGlzLmRhdGVfVGltZU1hcCgpO1xyXG4gICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0ueDI0SG91cnMgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9XHJcbiAgICAgICAgICAodGhpcy5zZWxlY3RlZE1lcmlkaWVtID09PSBcIlBNXCIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgIT0gXCIxMlwiXHJcbiAgICAgICAgICAgID8gTnVtYmVyKHRoaXMuc2VsZWN0ZWRIb3VyKSArIDEyXHJcbiAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZEhvdXIpICtcclxuICAgICAgICAgIFwiOlwiICtcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRIb3VyICsgXCI6XCIgKyB0aGlzLnNlbGVjdGVkTWludXRlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmlucFZhbHVlLmxlbmd0aCA8IDUpIHtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodGhpcy5kYXRlRmxhZyAmJiB0aGlzLmR0RmxhZyAmJiAhdGhpcy50aW1lRmxhZykge1xyXG4gICAgICB0aGlzLmNoYW5nZSgpO1xyXG4gICAgICBpZiAodGhpcy5pbnBWYWx1ZS5sZW5ndGggPCA3IHx8IHRoaXMuc2VsRGF0ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0aGlzLmZpbGVGbGFnKSB7XHJcbiAgICAgIC8vY29uc29sZS5sb2coJ2ZvdXInKVxyXG4gICAgICB0aGlzLmlucFZhbHVlID0gXCJcIjtcclxuICAgICAgaWYgKHRoaXMuYXR0YWNobWVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZvciAodmFyIGF0dGFjaG1lbnRJdGVtIG9mIHRoaXMuYXR0YWNobWVudHMpIHtcclxuICAgICAgICAgIHRoaXMuaW5wVmFsdWUgKz1cclxuICAgICAgICAgICAgYXR0YWNobWVudEl0ZW0uYXR0YWNobWVudElkICtcclxuICAgICAgICAgICAgXCJAIyRcIiArXHJcbiAgICAgICAgICAgIGF0dGFjaG1lbnRJdGVtLmF0dGFjaG1lbnROYW1lICtcclxuICAgICAgICAgICAgXCIsXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmaWxlc3NzJyArIHRoaXMuaW5wVmFsdWUpO1xyXG4gICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlLnN1YnN0cigwLCB0aGlzLmlucFZhbHVlLmxlbmd0aCAtIDEpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID0gbmV3IEVycm9yV3JhcHBlcigpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gXHJcbiAgICAvLyBDaGVjayBmb3IgdGhlIGFuc3dlciBiZWZvcmUgc2F2aW5nIHRvIHRoZSBEQlxyXG4gICAgaWYgKCF0aGlzLnF1ZXN0aW9uSXRlbS5pc09wdGlvbmFsICYmICF0aGlzLmlucFZhbHVlKSB7XHJcbiAgICAgIC8vIFNob3cgZXJyb3IgdGhhdCB0aGUgcXVlc3Rpb24gbXVzdCBiZSBhbnN3ZXJlZFxyXG4gICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcclxuICAgICAgLy8gVkQgZGlzYWJsZWRcclxuICAgICAgLy90aGlzLnNoYXJlZFNlcnZpY2UuaGlkZUxvYWRlcigpO1xyXG4gICAgICB0aGlzLnNwaW5uZXIuaGlkZSh0aGlzLnNwaW5uZXJOYW1lKTtcclxuICAgICAgdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gZmFsc2VcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gU2F2ZSB0aGUgQW5zd2VyIGluIHRoZSBEQlxyXG4gICAgdGhpcy5hbnN3ZXJXcmFwID0gbmV3IEFuc3dlcldyYXBwZXIoKTtcclxuICAgIHRoaXMuYW5zd2VyV3JhcC5hYklkID0gdGhpcy5hYkl0ZW0uaWQ7XHJcbiAgICB0aGlzLmFuc3dlcldyYXAucXVlc0lkID0gY1F1ZXN0aW9uLmlkO1xyXG4gICAgdGhpcy5hbnN3ZXJXcmFwLnF1ZXNWYWx1ZSA9IHF1ZXNWYWx1ZTtcclxuICAgIHRoaXMuYW5zd2VyV3JhcC5xVHlwID0gdHlwO1xyXG4gICAgLy8gSEEgMDJGRUIyNCBUbyBkaXNwbGF5IHRoZSB2YWx1ZXMgaW4gc3VtbWFyeSB1c2luZyB0aGlzXHJcbiAgICB0aGlzLmFsbElucHV0VmFsdWVzID0gW107XHJcbiAgICB0aGlzLnN1YlF1ZXN0aW9ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICB2YXIgaW5wdXRWYWx1ZSA9IHt9O1xyXG4gICAgICBpbnB1dFZhbHVlWydJZCddID0gZWxlbWVudD8uaWQ7XHJcbiAgICAgIGlucHV0VmFsdWVbJ3R5cGUnXSA9IGVsZW1lbnQ/LnR5cGU7XHJcbiAgICAgIGlucHV0VmFsdWVbJ3JlZmVyZW5jZUZpZWxkJ10gPSBlbGVtZW50Py5yZWZlcmVuY2VGaWVsZDtcclxuICAgICAgaW5wdXRWYWx1ZVsncXVlc3Rpb25UZXh0J10gPSBlbGVtZW50Py5xdWVzdGlvblRleHQ7XHJcbiAgICAgIGlucHV0VmFsdWVbJ2lucHV0J10gPSBlbGVtZW50Py5pbnB1dDtcclxuICAgICAgaW5wdXRWYWx1ZSA/IHRoaXMuYWxsSW5wdXRWYWx1ZXMucHVzaChpbnB1dFZhbHVlKSA6IHRoaXMuYWxsSW5wdXRWYWx1ZXM7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuYW5zd2VyV3JhcC5teVZhbCA9IHRoaXMuYWxsSW5wdXRWYWx1ZXM7XHJcbiAgICB0aGlzLmFuc3dlcldyYXAuYW5zVmFsdWUgPSB0aGlzLmlucFZhbHVlO1xyXG4gICAgdGhpcy5hbnN3ZXJXcmFwLmdyb3VwVGV4dCA9IGNRdWVzdGlvbi5ncm91cE5hbWU7XHJcbiAgICBjb25zb2xlLmxvZygndGhpcy5hbnN3ZXJXcmFwLnFUeXAnLHRoaXMuYW5zd2VyV3JhcC5xVHlwKTtcclxuICAgaWYodGhpcy5hbnN3ZXJXcmFwLnFUeXAgPT0gXCJBbHBoYW51bWVyaWNcIil7XHJcbiAgICAgIHRoaXMuYW5zd2VyV3JhcC5hbnNWYWx1ZSA9ICdFUycrIHRoaXMuaW5wVmFsdWU7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdCYW5rIGNvbmRpdGlvbicpO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmFuc3dlcldyYXAuYW5zVmFsdWUpO1xyXG4gICAgfVxyXG4gICAgLyppZiAoY1F1ZXN0aW9uLnR5cGUgPT0gJ0Jvb2snKXtcclxuICAgIGZvciAodmFyIHFiIG9mIGNRdWVzdGlvbi5RdWVzdGlvbnNfX3IucmVjb3Jkcyl7XHJcbiAgICAgIC8vY29uc29sZS5sb2cocWIucXVlc3Rpb24rJyoqKionK1wiQEAjIyQkXCIpXHJcbiAgICB9XHJcbiAgfSovXHJcbiAgICAvL3RoaXMuYW5zd2VyV3JhcC5zcXVlc1ZhbHVlID0gY1F1ZXN0aW9uLnF1ZXN0aW9uO1xyXG4gICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSB0aGlzLmlucFZhbHVlO1xyXG4gICAgLy8gZW1pdCB0aGUgY3VycmVudCBxdWVzdGlvbiB3aXRoIGlucHV0IHRvIHBhcmVudFxyXG4gICAgbGV0IHF1ZXN0aW9uQW5zID0ge31cclxuICAgIHF1ZXN0aW9uQW5zWydxdWVzdGlvbkRldGFpbCddID0gdGhpcy5xdWVzdGlvbkl0ZW07XHJcbiAgICBxdWVzdGlvbkFuc1snYW5zd2VyQm9va0RldGFpbCddID0gdGhpcy5hYkl0ZW07XHJcbiAgICBjb25zb2xlLmxvZyhxdWVzdGlvbkFucyk7XHJcbiAgICB0aGlzLmhhbmRsZVF1ZXN0aW9uLmVtaXQocXVlc3Rpb25BbnMpO1xyXG4gICAgY29uc29sZS5sb2coJ3F1ZXN0aW9uSXRlbS0tPicpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5xdWVzdGlvbkl0ZW0pO1xyXG4gICAgdGhpcy5hbnN3ZXJXcmFwLnNxdWVzVmFsdWUgPSBxdWVzdGlvblR4dCA/IHF1ZXN0aW9uVHh0IDogY1F1ZXN0aW9uLnF1ZXN0aW9uO1xyXG4gICAgdGhpcy5zYXZlQW5zd2VyKCk7XHJcbiAgfVxyXG4gICAvLyBSUyAwOURFQzI0IENoYW5nZWQga2V5c1xyXG4gIG5leHQoKSB7XHJcbiAgICB2YXIgY1F1ZXN0aW9uOiBRdWVzdGlvbiA9IG5ldyBRdWVzdGlvbigpO1xyXG4gICAgY1F1ZXN0aW9uID0gdGhpcy5xdWVzdGlvbkl0ZW07XHJcbiAgICB2YXIgdHlwID0gY1F1ZXN0aW9uLnR5cGU7XHJcbiAgICAvLyBJZiBubyBlcnJvciB0aGVuIG1vdmUgdG8gbmV4dCBzdGVwc1xyXG4gICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLmVycm9yKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuIFxyXG4gICAgdGhpcy5xdWVzdGlvblN0YWNrLnB1c2goY1F1ZXN0aW9uLmlkKTtcclxuICAgIC8vICB0aGlzLnF1ZXN0aW9uTmFtZS5wdXNoKGNRdWVzdGlvbi5OYW1lKTtcclxuIFxyXG4gICAgLy8gQ09ORElUSU9OQUwgdnMgT1BUSU9OT05MWSAmIFVOQ09ORElUSU9OQUxcclxuICAgIC8vIEhBIDMxLUpBTi0yNCBBZGRlZCB0ZXJuYXJ5IGV2ZW4gaW4gZWxzZSBjb25kaXRpb25zIGJlbG93XHJcbiAgICBpZiAoY1F1ZXN0aW9uPy5SZWNvcmRUeXBlPy5OYW1lID09IFwiQ09ORElUSU9OQUxcIikge1xyXG4gICAgICBmb3IgKHZhciBjT3B0IG9mIGNRdWVzdGlvbi5vcHRpb25zKSB7XHJcbiAgICAgICAgLy8gUmFkaW8gLyBEYXRhXHJcbiAgICAgICAgLy9jb25zb2xlLmxvZygnT3B0aW9uID0+ICcgKyBjT3B0LnZhbHVlICsgJyBtYXRjaGluZyB3aXRoICcgKyBhbnNWYWwpO1xyXG4gICAgICAgIGlmIChjT3B0LnZhbHVlID09IHRoaXMuaW5wVmFsdWUpIHtcclxuICAgICAgICAgIC8vY29uc29sZS5sb2coJ01hdGNoIEZvdW5kIHVzaW5nICcgKyBjT3B0Lm5leHRRdWVzdGlvbik7XHJcbiAgICAgICAgICBpZihjT3B0Lm5leHRRdWVzdGlvbil7XHJcbiAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjT3B0Lm5leHRRdWVzdGlvbjtcclxuICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5uZXh0UXVlc3Rpb247XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdjb25kaXRpb25hbCByZWNvcmQgaWQnKyB0aGlzLnJlY29yZElkKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgLy8gQ291bGQgYmUgb2YgdHlwZSBEYXRhIGFuZCBleGlzdGluZyB2YWx1ZVxyXG4gICAgICBpZiAodGhpcy5yZWNvcmRJZCAmJiB0eXAgPT0gXCJEYXRhXCIpIHtcclxuICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLm5leHRRdWVzdGlvbjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChjUXVlc3Rpb24/LlJlY29yZFR5cGU/Lk5hbWUgPT0gXCJPUFRJT05PTkxZXCIpIHtcclxuICAgICAgLy8gIE9QVElPTk9OTFkgbG9naWNcclxuICAgICAgdGhpcy5yZWNvcmRJZCA9IGNRdWVzdGlvbi5uZXh0UXVlc3Rpb247XHJcbiAgICB9IGVsc2UgaWYgKGNRdWVzdGlvbj8uUmVjb3JkVHlwZT8uTmFtZSA9PSBcIlVOQ09ORElUSU9OQUxcIikge1xyXG4gICAgICAvL1VuY29uZGl0aW9uYWwgIGxvZ2ljXHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJpbnNpZGUgdW5jb25kaXRpb25hbFwiKTtcclxuICAgICAgLy9pbnNpZGUgQm9vayBUeXBlXHJcbiAgICAgIGlmIChjUXVlc3Rpb24udHlwZSA9PSBcIkJvb2tcIiAmJiBjUXVlc3Rpb24ucXVlc3Rpb25OdW1iZXIgIT0nNicpIHtcclxuICAgICAgICAvL2NvbnNvbGUubG9nKFwiaW5zaWRlIGJvb2tcIik7XHJcbiAgICAgICAgZm9yIChsZXQgb3B0IG9mIGNRdWVzdGlvbi5zdWJRdWVzdGlvbnMpIHtcclxuICAgICAgICAgIC8vY29uc29sZS5sb2cob3B0LnR5cGUpO1xyXG4gICAgICAgICAgaWYgKG9wdC50eXBlID09IFwiRHJvcGRvd25cIiB8fCBvcHQudHlwZSA9PSBcIlJhZGlvXCIpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgb3B0MSBvZiBvcHQub3B0aW9ucykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZU5hbWUgPT0gb3B0MS52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9b3B0MS5uZXh0UXVlc3Rpb24gfHwgY1F1ZXN0aW9uLm5leHRRdWVzdGlvbjtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnRWxzZScrdGhpcy5yZWNvcmRJZClcclxuICAgICAgICAgICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xyXG4gXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlY29yZElkID0gY1F1ZXN0aW9uLm5leHRRdWVzdGlvbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZihjUXVlc3Rpb24udHlwZSA9PSBcIkJvb2tcIiAmJiBjUXVlc3Rpb24ucXVlc3Rpb25OdW1iZXIgPT0nNicgKSB7XHJcbiAgICAgICAgZm9yIChsZXQgb3B0IG9mIGNRdWVzdGlvbi5zdWJRdWVzdGlvbnMpIHtcclxuICAgICAgICAgIGlmIChvcHQudHlwZSA9PSBcIkRyb3Bkb3duXCIgfHwgb3B0LnR5cGUgPT0gXCJSYWRpb1wiKXtcclxuICAgICAgICAgIGZvciAodmFyIG9wdDEgb2Ygb3B0Lm9wdGlvbnMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVOYW1lID09IG9wdDEudmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5yZWNvcmRJZCA9IG9wdDEubmV4dFF1ZXN0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gXHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBIQSAzMS1KQU4tMjQgQWRkZWQgZWxzZSB0byBrZWVwIHRoZSBhc3NpZ25tZW50IGRlZmF1bHRcclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMucmVjb3JkSWQgPSBjUXVlc3Rpb24ubmV4dFF1ZXN0aW9uO1xyXG4gICAgfVxyXG4gXHJcbiAgICAvLyBDQVRFR09SSVpBVElPTlxyXG4gICAgLy90aGlzLnN0ZXBwZXJDYXRlZygpO1xyXG4gXHJcbiAgICAvLyBDYWxsaW5nIHRoZSBwcm9ncmVzIGJhciB1cGRhdGUgZnVuY3Rpb25cclxuICAgIHRoaXMuYW5zd2VyQ291bnQrKztcclxuICAgIHRoaXMudXBkYXRlUHJvZ3Jlc3MoKTtcclxuIFxyXG4gXHJcbiAgICAvLyBDQVRFR09SSVpBVElPTlxyXG4gICAgLy90aGlzLnN0ZXBwZXJDYXRlZygpO1xyXG4gXHJcbiAgICBpZiAodGhpcy5yZWNvcmRJZCkge1xyXG4gICAgICB0aGlzLnJlYWRRdWVzdGlvbih0aGlzLnJlY29yZElkKTtcclxuICAgICAgdGhpcy5wb3AgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wb3AgPSBmYWxzZTtcclxuICAgICAgLy8gVkQgZGlzYWJsZWRcclxuICAgICAvLyB0aGlzLnNoYXJlZFNlcnZpY2UuaGlkZUxvYWRlcigpO1xyXG4gICAgICB0aGlzLnNwaW5uZXIuaGlkZSh0aGlzLnNwaW5uZXJOYW1lKTtcclxuICAgICAgdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgIC8vIFJlc2V0IHRoZSBWYXJpYWJsZXNcclxuICAgICAgdGhpcy5pbnBWYWx1ZSA9IFwiXCI7XHJcbiAgICAgIHRoaXMuYW5zd2VyV3JhcCA9IG5ldyBBbnN3ZXJXcmFwcGVyKCk7XHJcbiAgICAgIHRoaXMub3B0aW9uVmFsdWVzID0gW107XHJcbiAgICAgIHRoaXMuc3ViUXVlc3Rpb25zID0gW107XHJcbiBcclxuICAgICAgdGhpcy5yZXNldEZsYWcodHlwKTtcclxuICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0gPSBudWxsO1xyXG4gXHJcbiAgICAgIC8vIFNob3cgU3VtbWFyeVxyXG4gICAgICBmb3IgKHZhciBxIG9mIHRoaXMucXVlc3Rpb25TdGFjaykge1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coJ0hhbmRsaW5nIFF1ZXN0aW9uID0+ICcgKyBxKTtcclxuICAgICAgICB2YXIgYW5zV3JhcCA9IHRoaXMuYW5zd2VyTWFwLmdldChxKTtcclxuICAgICAgICBpZiAoYW5zV3JhcCkge1xyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZygnSGFuZGxpbmcgQW5zd2VyIGZvciAnICsgYW5zV3JhcC5xdWVzSWQgKyAnIG9mIHR5cGUgJyArIGFuc1dyYXAucVR5cCk7XHJcbiAgICAgICAgICBpZihhbnNXcmFwLnFUeXAgPT0gJ0ZpbGUnIHx8IGFuc1dyYXAucVR5cCA9PSAnQm9vayd8fGFuc1dyYXAucVR5cCA9PSAnTGlzdCcgfHwgYW5zV3JhcC5xVHlwID09ICdDaGVja2JveCcpe1xyXG4gICAgICAgICAgICB2YXIgbmV3U3RyID0gJyc7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGFuc1N0ciBvZiBhbnNXcmFwLmFuc1ZhbHVlLnNwbGl0KCdAQCMjJCQnKSkge1xyXG4gICAgICAgICAgICAgIGZvciAodmFyIGFuc1N0cjEgb2YgYW5zU3RyLnNwbGl0KCckJEBAIyMnKSkge1xyXG4gICAgICAgICAgICAgIC8vICBpZihhbnNTdHIxLmluY2x1ZGVzKCdhbnN3ZXJTdHJpbmcnKSl7IC8vcmVtb3ZlIHRoZSBhbnN3ZXIgc3RyaW5nXHJcbiAgICAgICAgICAgICAgIC8vICAgY29uc3Qgd2l0aG91dEFuc3dlclN0cmluZyA9IGFuc1N0cjEucmVwbGFjZShcImFuc3dlclN0cmluZzogXCIsIFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgLy8gIGFuc1N0cjEgPSB3aXRob3V0QW5zd2VyU3RyaW5nO1xyXG4gICAgICAgICAgICAgIC8vICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYW5zU3RyMS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgIGlmIChuZXdTdHIubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXdTdHIgPSBhbnNTdHIxO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5ld1N0ciArPSAnOyAnICsgYW5zU3RyMTsgIC8vY29tbWEoLCkgY2hhbmdlZCBhcyBzZW1pIGNvbG9uKDspIGJlY2F1c2Ugb2YgYWRkcmVzcyBjb250YWlucyBjb21tYSgsKVxyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuYXR0YWNobWVudHNNYXAuaGFzKGFuc1dyYXAucXVlc0lkKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGF0dCBvZiB0aGlzLmF0dGFjaG1lbnRzTWFwLmdldChhbnNXcmFwLnF1ZXNJZCkpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdTdHIgPSBuZXdTdHIucmVwbGFjZShhdHQuYXR0YWNobWVudElkLCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyID0gKG5ld1N0ci5yZXBsYWNlKCcsLCcsJywgJykpLnJlcGxhY2UoJywgLCcsJywgJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3U3RyID0gbmV3U3RyLnN0YXJ0c1dpdGgoJywnKSA/IG5ld1N0ci5zdWJzdHJpbmcoMSwgbmV3U3RyLmxlbmd0aCkgOiAobmV3U3RyLmVuZHNXaXRoKCcsJykgPyBuZXdTdHIuc3Vic3RyaW5nKDAsIG5ld1N0ci5sZW5ndGggLSAxKSA6IG5ld1N0cik7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYW5zV3JhcC5hbnNWYWx1ZSA9IG5ld1N0cjtcclxuICAgICAgICAgICAgYW5zV3JhcC5teVZhbCA9IHRoaXMuYWxsSW5wdXRWYWx1ZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICAgLy8gVkQgQ2hlY2sgaWYgdGhlIHN1bW1hcnkgYWxyZWFkeSBjb250YWlucyBhbiBlbnRyeSBmb3IgdGhlIHNhbWUgcXVlc0lkXHJcbiAgICAgICAgICBjb25zdCBleGlzdGluZ0Fuc1dyYXAgPSB0aGlzLnN1bW1hcnkuZmluZChpdGVtID0+IGl0ZW0ucXVlc0lkID09PSBhbnNXcmFwLnF1ZXNJZCk7XHJcbiAgICAgICAgICBpZiAoZXhpc3RpbmdBbnNXcmFwKSB7XHJcbiAgICAgICAgICAgIC8vIElmIGl0IGV4aXN0cywgdXBkYXRlIHRoZSBhbnNWYWx1ZSBhbmQgbXlWYWxcclxuICAgICAgICAgICAgZXhpc3RpbmdBbnNXcmFwLmFuc1ZhbHVlID0gYW5zV3JhcC5hbnNWYWx1ZTtcclxuICAgICAgICAgICAgZXhpc3RpbmdBbnNXcmFwLm15VmFsID0gYW5zV3JhcC5teVZhbDtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIElmIGl0IGRvZXNuJ3QgZXhpc3QsIHB1c2ggdGhlIGFuc1dyYXAgdG8gdGhlIHN1bW1hcnkgYXJyYXlcclxuICAgICAgICAgICAgdGhpcy5zdW1tYXJ5LnB1c2goYW5zV3JhcCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmJhY2tpY29uID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiBcclxuICBnZXRUZXh0KHZhbHVlKSB7XHJcbiAgICB2YXIgZG9jID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyh2YWx1ZSwgXCJ0ZXh0L2h0bWxcIik7XHJcbiAgICAvL2NvbnNvbGUubG9nKCBkb2MuZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50KTtcclxuICAgIHJldHVybiB0aGlzLnNhbml0aXplci5ieXBhc3NTZWN1cml0eVRydXN0SHRtbChcclxuICAgICAgZG9jLmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudFxyXG4gICAgKTtcclxuICB9XHJcbiBcclxuICBoYW5kbGVCYWNrQ2xpY2soKSB7XHJcbiAgICB0aGlzLmJhY2sgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMucG9wID09PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMucXVlc3Rpb25OYW1lLnBvcCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHRoaXMucWJJdGVtLmJhY2tUcmFja2luZ0lkKTtcclxuICAgIHZhciBjUXVlc3Rpb246IFF1ZXN0aW9uID0gbmV3IFF1ZXN0aW9uKCk7XHJcbiAgICBjUXVlc3Rpb24gPSB0aGlzLnF1ZXN0aW9uSXRlbTtcclxuICAgIGlmKGNRdWVzdGlvbi5xdWVzdGlvbk51bWJlciA9PScxJyl7XHJcbiAgICAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5iYWNrKTtcclxuICAgIH1cclxuIFxyXG4gXHJcbiAgICB0aGlzLmFuc3dlckNvdW50LS07XHJcbiAgICB0aGlzLnVwZGF0ZVByb2dyZXNzKCk7XHJcbiAgICAvLyBDQVRFR09SSVpBVElPTlxyXG4gICAgLy90aGlzLnN0ZXBwZXJDYXRlZygpO1xyXG4gXHJcbiAgICBpZiAodGhpcy5zdW1tYXJ5KSB7XHJcbiAgICAgIC8vY29uc29sZS5sb2coJ3N1bW1hcnkgdHJ1ZScpO1xyXG4gICAgICB0aGlzLnN1bW1hcnkgPSBbXTtcclxuICAgIH1cclxuICAgIGlmKHRoaXMuc3VtbWFyeURhdGEpe1xyXG4gICAgICB0aGlzLnN1bW1hcnlEYXRhID1bXTtcclxuICAgIH1cclxuIFxyXG4gICAgLy8gUmVhZCB0aGUgcHJldmlvdXMgcXVlc3Rpb24gZnJvbSBEQlxyXG4gICAgLy8gVkQgZGlzYWJsZWRcclxuICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLnNob3dMb2FkZXIoKTtcclxuICAgIHRoaXMuc3Bpbm5lci5zaG93KHRoaXMuc3Bpbm5lck5hbWUpO1xyXG4gICAgdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gdHJ1ZTtcclxuICAgIHRoaXMucmVhZFF1ZXN0aW9uKHRoaXMucXVlc3Rpb25TdGFjay5wb3AoKSk7XHJcbiAgICAvL2NvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25TdGFjayk7XHJcbiAgfVxyXG4gXHJcbiAgaGFuZGxlQmFja0NsaWNrTmV3KCkge1xyXG4gICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHRoaXMucWJJdGVtLmVkaXQpO1xyXG4gIH1cclxuIFxyXG4gIC8vdXBkYXRpbmcgc3RhdHVzIG9uY2UgUSZBIGNvbXBsZXRlZC5cclxuIFxyXG4gIHByaXZhdGUgdXBkYXRlQW5zd2VyQm9vayA9ICh1dWlkOiBzdHJpbmcpID0+IHtcclxuICAgIGlmKHRoaXMuc2VydiA9PSBcImFwaVwiKSB7XHJcbiAgICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcclxuICAgICAgLy8gICB0aGlzLnRrbixcclxuICAgICAgLy8gICBbXCJBbnN3ZXJCb29rXCIsIFwiVXBkYXRlXCIsIHV1aWRdLFxyXG4gICAgICAvLyAgIHRoaXMuc3VjY2Vzc3VwZGF0ZUFCLFxyXG4gICAgICAvLyAgIHRoaXMuZmFpbHVyZXVwZGF0ZUFCXHJcbiAgICAgIC8vICk7XHJcbiAgICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XHJcbiAgICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXHJcbiAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcclxuICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcclxuICAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnQW5zd2VyQm9vaycsJ1VwZGF0ZScsdXVpZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcclxuICAgICAgKGRhdGEpPT57XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3VwZGF0ZWQgc3VjY3Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICAgdGhpcy5zdWNjZXNzdXBkYXRlQUIoSlNPTi5wYXJzZShkYXRhKSlcclxuICAgICAgfSwoZXJyb3IpID0+IHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgICAgKVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gVkQgMTVGRUIyNCAtIHVzZWQgcHJvY2Vzc05ldyBtZXRob2RcclxuICAgICAgIC8vIFZEIDMxTk9WMjQgcGFyYW0gY2hhbmdlcyB3aXRoIG5ldyBtZXRob2RcclxuICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcclxuICAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xyXG4gICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xyXG4gICAgICBsZXQgcGFyYSA9IHtcclxuICAgICAgICBkYXRhVHlwZTogXCJBbnN3ZXJCb29rXCIsXHJcbiAgICAgICAgb3BlcmF0aW9uOiBcIlVwZGF0ZVwiLFxyXG4gICAgICAgIHBhcmFtMTogdXVpZCxcclxuICAgICAgICBwYXJhbUpTT046IEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSxcclxuICAgICAgICBsYW5ndWFnZUNvZGUgOiAnJ1xyXG4gICAgICB9XHJcbiAvLyBWRCAxMkp1bjI0IC0gdHJhbnNsYXRpb24gY2hhbmdlc1xyXG4gICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXHJcbiAgICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NEYXRhXCIsXHJcbiAgICAgICAgW0pTT04uc3RyaW5naWZ5KHBhcmEpXSxcclxuICAgICAgICB0aGlzLnN1Y2Nlc3N1cGRhdGVBQixcclxuICAgICAgICB0aGlzLmZhaWx1cmV1cGRhdGVBQlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuIFxyXG4gIHByaXZhdGUgc3VjY2Vzc3VwZGF0ZUFCID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICBsZXQgZGF0YSA9IHJlc3BvbnNlO1xyXG4gICAgaWYoZGF0YSl7XHJcbiAgICAgIHRoaXMuaGFuZGxlU3VibWl0LmVtaXQoZGF0YSk7XHJcbiAgICAgIHRoaXMuYWJJdGVtLnN0YXR1cyA9IFwiQ29tcGxldGVkXCI7XHJcbiAgICAgIHRoaXMuZGVsZXRlQW5zd2VycyhkYXRhLkFuc3dlckJvb2spXHJcbiAgICB9XHJcbiAgfTtcclxuIFxyXG4gIC8vIFZEIGZvciBkZWxldGUgYW5zd2Vyc1xyXG4gIGRlbGV0ZUFuc3dlcnMoYW5zd2VyYm9vayl7XHJcbiAgICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIil7XHJcbiAgICAgIGlmKGFuc3dlcmJvb2sgJiYgYW5zd2VyYm9vay5zdGF0dXMgPT0gJ0NvbXBsZXRlZCcpe1xyXG4gICAgICAgIGNvbnN0IGFuc0Jvb2tJZCA9IGFuc3dlcmJvb2suaWQ7XHJcbiAgICAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcclxuICAgICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxyXG4gICAgICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gJyc7XHJcbiAgICAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcclxuICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSUZyb21Ob2RlKCdBbnN3ZXJCb29rJywnZGVsZXRlJyxhbnNCb29rSWQsSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgKGRhdGEpPT57XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcclxuICAgICAgICAgIHRoaXMuc3VjY2Vzc0RlbGV0ZUFCKEpTT04ucGFyc2UoZGF0YSkpXHJcbiAgICAgICAgfSwoZXJyb3IpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vIFZEIGZvciBkZWxldGUgYW5zd2Vyc1xyXG4gIHByaXZhdGUgc3VjY2Vzc0RlbGV0ZUFCID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgICBpZihyZXNwb25zZS5zdGF0dXMgPT0gJ3N1Y2Nlc3MnKXtcclxuICAgICAgIGNvbnNvbGUubG9nKHJlc3BvbnNlLm1lc3NhZ2UpO1xyXG4gICAgfWVsc2Uge1xyXG4gICAgIGNvbnNvbGUuZXJyb3IoJ2Vycm9yJywgcmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICB9XHJcbiB9XHJcblxyXG4gcHJpdmF0ZSBmYWlsdXJldXBkYXRlQUIgPSAocmVzcG9uc2UpID0+IHtcclxuICAgLy9jb25zb2xlLmxvZygnc3RhdHVzIGZhaWxlZCcpXHJcbiB9O1xyXG5cclxuIHByaXZhdGUgcmVhZFF1ZXN0aW9uQm9vayA9ICh1dWlkOiBzdHJpbmcpID0+IHtcclxuICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcclxuICAgICAvLyB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXHJcbiAgICAgLy8gICB0aGlzLnRrbixcclxuICAgICAvLyAgIFtcIlF1ZXN0aW9uQm9va1wiLCBcInJlYWRcIiwgdXVpZF0sXHJcbiAgICAgLy8gICB0aGlzLnN1Y2Nlc3NSZWFkQm9vayxcclxuICAgICAvLyAgIHRoaXMuZmFpbHVyZVJlYWRCb29rXHJcbiAgICAgLy8gKTtcclxuICAgICAvL3RoaXMuc2hhcmVkU2VydmljZS5zaG93TG9hZGVyKCk7XHJcbiAgICAgdGhpcy5zcGlubmVyLnNob3codGhpcy5zcGlubmVyTmFtZSk7XHJcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogdHJ1ZSB9O1xyXG4gICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXHJcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xyXG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XHJcbiAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnUXVlc3Rpb25Cb29rJywncmVhZCcsdXVpZCxKU09OLnN0cmluZ2lmeShwYXJhbU1hcCksdGhpcy5hcGkpLnN1YnNjcmliZShcclxuICAgICAoZGF0YSk9PntcclxuICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGVMb2FkZXIoKTtcclxuICAgICAgLy8gdGhpcy5zcGlubmVyLmhpZGUodGhpcy5zcGlubmVyTmFtZSk7XHJcbiAgICAgICAvLyBWRCBkaXNhYmxlZFxyXG4gICAgICAgdGhpcy5pc0J1dHRvbkRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICBjb25zb2xlLmxvZyhkYXRhKTtcclxuICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGUoKTtcclxuICAgICAgIHRoaXMuc3VjY2Vzc1JlYWRCb29rKEpTT04ucGFyc2UoZGF0YSkpXHJcbiAgICAgfSwoZXJyb3IpID0+IHtcclxuICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcclxuICAgICB9XHJcbiAgICAgKVxyXG4gICB9IGVsc2Uge1xyXG4gICAgIC8vIE1SIDMwSkFOMjQgLSBQYXNzaW5nIGZsYWcgZnJvbSBOR05YVFxyXG4gICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IHRydWUgfTtcclxuICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxyXG4gICAgIC8vIFZEIDMxTk9WMjQgcGFyYW0gY2hhbmdlcyB3aXRoIG5ldyBtZXRob2RcclxuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XHJcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcclxuICAgICBsZXQgcGFyYTEgPSB7XHJcbiAgICAgIGRhdGFUeXBlOiBcIlF1ZXN0aW9uQm9va1wiLFxyXG4gICAgICBvcGVyYXRpb246IFwicmVhZFwiLFxyXG4gICAgICBwYXJhbTE6IHV1aWQsXHJcbiAgICAgIHBhcmFtSlNPTjogSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLFxyXG4gICAgICBsYW5ndWFnZUNvZGUgOiAnJ1xyXG4gICAgfVxyXG4gICAgIC8vICwgSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApXHJcbi8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXHJcbiAgICAgdGhpcy5zZlNlcnZpY2UucmVtb3RlQWN0aW9uKFxyXG4gICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXHJcbiAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc0RhdGFcIixcclxuICAgICAgIFtKU09OLnN0cmluZ2lmeShwYXJhMSldLFxyXG4gICAgICAgdGhpcy5zdWNjZXNzUmVhZEJvb2ssXHJcbiAgICAgICB0aGlzLmZhaWx1cmVSZWFkQm9va1xyXG4gICAgICk7XHJcbiAgIH1cclxuIH1cclxuIHByaXZhdGUgc3VjY2Vzc1JlYWRCb29rID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgIGNvbnNvbGUubG9nKCdJbnNpZGUgdGhlIHN1Y2Nlc3NSZWFkQm9vaycpO1xyXG4gICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgIGlmKHJlc3BvbnNlICE9IG51bGwgfHwgcmVzcG9uc2UgIT0gdW5kZWZpbmVkKXtcclxuICAgICB0aGlzLnFiSXRlbSA9IHJlc3BvbnNlLnF1ZXN0aW9uYm9vaztcclxuICAgICB0aGlzLmFiSXRlbSA9IHJlc3BvbnNlLmFuc3dlcmJvb2s7XHJcbiAgICAgdGhpcy5oYW5kbGVCb29rLmVtaXQocmVzcG9uc2UpO1xyXG5cclxuICAgfVxyXG4gIC8vIGNvbnNvbGUubG9nKCdyZWFkaW5nUXVlc3Rpb24gdXNpbmcgJyArIHRoaXMucWJJdGVtKTtcclxuICAgaWYgKHRoaXMuYWJJdGVtPy5zdGF0dXMgPT0gXCJQZW5kaW5nXCIpIHtcclxuICAgICBpZiAoXHJcbiAgICAgICB0aGlzLmFiSXRlbS5hbnN3ZXJzID09IG51bGwgfHxcclxuICAgICAgIHRoaXMuYWJJdGVtLmFuc3dlcnMubGVuZ3RoID09IDBcclxuICAgICApIHtcclxuICAgICAgIHRoaXMucmVhZFF1ZXN0aW9uKHRoaXMucWJJdGVtLmZpcnN0UXVlc3Rpb24pO1xyXG4gICAgIH0gZWxzZSB7XHJcbiAgICAgICAvLyBQb3B1bGF0ZSB0aGUgZXhpc3RpbmcgYW5zd2Vyc1xyXG4gICAgICAgdmFyIGxhc3RRdWVzdGlvbklkID0gXCJcIjtcclxuXHJcbiAgICAgICBmb3IgKHZhciBhbnNPYmplY3Qgb2YgdGhpcy5hYkl0ZW0uYW5zd2Vycykge1xyXG4gICAgICAgICBsYXN0UXVlc3Rpb25JZCA9IGFuc09iamVjdC5xdWVzSWQ7XHJcblxyXG4gICAgICAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucHVzaChhbnNPYmplY3QucXVlc0lkKTtcclxuXHJcbiAgICAgICAgIHRoaXMuYW5zd2VyTWFwLnNldChhbnNPYmplY3QucXVlc0lkLCB7XHJcbiAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnNPYmplY3QucXVlc1ZhbHVlLFxyXG4gICAgICAgICAgIGFuc1ZhbHVlOiBhbnNPYmplY3QuYW5zVmFsdWUsXHJcbiAgICAgICAgICAgcXVlc0lkOiBhbnNPYmplY3QucXVlc0lkLFxyXG4gICAgICAgICAgIHFUeXA6IGFuc09iamVjdC5xVHlwLFxyXG4gICAgICAgICAgIGdyb3VwVGV4dDphbnNPYmplY3QuZ3JvdXBUZXh0LFxyXG4gICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5xdWVzdGlvblN0YWNrKVxyXG4gICAgICAgICBpZiAoYW5zT2JqZWN0LnFUeXAgPT0gXCJCb29rXCIpIHtcclxuICAgICAgICAgICB2YXIgYXYxID0gYW5zT2JqZWN0LmFuc1ZhbHVlLnNwbGl0KFwiQEAjIyQkXCIpO1xyXG4gICAgICAgICAgIC8vIC8vY29uc29sZS5sb2coXCJib29rIGxvZ1wiKTtcclxuXHJcbiAgICAgICAgICAgLy8gIC8vY29uc29sZS5sb2coXCJib29raWRcIiArIGF2MVswXSk7XHJcbiAgICAgICAgICAgdGhpcy5hdHRhY2htZW50c01hcC5zZXQoYW5zT2JqZWN0LnF1ZXNJZCwgW1xyXG4gICAgICAgICAgICAgeyBhdHRhY2htZW50TmFtZTogYXYxWzFdLCBhdHRhY2htZW50SWQ6IGF2MVswXSB9LFxyXG4gICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgIC8vICAvL2NvbnNvbGUubG9nKHRoaXMuYXR0YWNobWVudHNNYXApO1xyXG4gICAgICAgICB9IGVsc2UgaWYgKGFuc09iamVjdC5xVHlwID09IFwiRmlsZVwiKSB7XHJcbiAgICAgICAgICAgLy8gIC8vY29uc29sZS5sb2coXCJpbnNpZGUgaWZcIik7XHJcbiAgICAgICAgICAgdmFyIGF0dExpc3Q7XHJcbiAgICAgICAgICAgdmFyIGF0dDtcclxuICAgICAgICAgICBmb3IgKHZhciBhdHRWYXIgb2YgYW5zT2JqZWN0LmFuc1ZhbHVlLnNwbGl0KFwiLFwiKSkge1xyXG4gICAgICAgICAgICAgdmFyIGF0dElkTmFtZSA9IGF0dFZhci5zcGxpdChcIkBAIyMkJFwiKTtcclxuICAgICAgICAgICAgIGF0dC5hdHRhY2htZW50TmFtZSA9IGF0dElkTmFtZVsxXTtcclxuICAgICAgICAgICAgIGF0dC5hdHRhY2htZW50SWQgPSBhdHRJZE5hbWVbMF07XHJcbiAgICAgICAgICAgICBhdHRMaXN0LnB1c2goYXR0KTtcclxuICAgICAgICAgICB9XHJcbiAgICAgICAgICAgdGhpcy5hdHRhY2htZW50c01hcC5zZXQoYW5zT2JqZWN0LnF1ZXNJZCwgYXR0TGlzdCk7XHJcbiAgICAgICAgICAgLy8gIC8vY29uc29sZS5sb2codGhpcy5hdHRhY2htZW50c01hcCk7XHJcbiAgICAgICAgIH1cclxuICAgICAgIH1cclxuXHJcbiAgICAgICB0aGlzLnF1ZXN0aW9uU3RhY2sucG9wKCk7XHJcbiAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuYW5zd2VyTWFwKTtcclxuICAgICAgIC8vIFJlYWQgdGhlIGxhc3QgYW5zd2VyZWQgcXVlc3Rpb25cclxuICAgICAgIHRoaXMucmVhZFF1ZXN0aW9uKGxhc3RRdWVzdGlvbklkKTtcclxuICAgICB9XHJcbiAgIH0gZWxzZSBpZiAodGhpcy5hYkl0ZW0/LnN0YXR1cyA9PSBcIkNvbXBsZXRlZFwiKSB7XHJcbiAgICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KFwiU3VtbWFyeXVwZGF0ZWRcIik7XHJcbiAgICAgdGhpcy5zcGlubmVyLmhpZGUodGhpcy5zcGlubmVyTmFtZSk7XHJcbiAgICAgLy8gVGVtcG9yYXJ5IEZpeCBmb3IgZHVwbGljYXRlIGFuc3dlcnMgb24gdGhlIHN1bW1hcnkuXHJcbiAgICAgdGhpcy5zdW1tYXJ5ID0gW107XHJcbiAgICAgdGhpcy5wZXJjZW50ID0gMTAwO1xyXG4gICAgIHRoaXMucHJvZ3Jlc3NTdHlsZSA9IFwiMTAwJVwiO1xyXG4gICAgIGlmKHRoaXMuc2VydiAhPSAnYXBpJyl7XHJcbiAgICAgIC8vIFZEIDMxTk9WMjQgd3JhcHBlciBjaGFuZ2VzXHJcbiAgICAgICBmb3IgKHZhciBhbnN3ZXIgb2YgdGhpcy5hYkl0ZW0uYW5zd2Vycykge1xyXG4gICAgICAgICB2YXIgYW5zd2VycyA9IHt9O1xyXG4gICAgICAgICBpZiAoYW5zd2VyLnFUeXAgPT0gXCJGaWxlXCIpIHtcclxuICAgICAgICAgICB2YXIgZmlsZXMgPSBcIlwiO1xyXG4gICAgICAgICAgIHZhciBmSW5kZXggPSAwO1xyXG4gICAgICAgICAgIHZhciBmaWxlTGlzdCA9IGFuc3dlci5hbnNWYWx1ZS5zcGxpdChcIixcIik7XHJcbiAgICAgICAgICAgZm9yICh2YXIgZmlsZUlkTmFtZSBvZiBmaWxlTGlzdCkge1xyXG4gICAgICAgICAgICAgdmFyIGZpbGVOYW1lID0gZmlsZUlkTmFtZS5zcGxpdChcIkAjJFwiKTtcclxuICAgICAgICAgICAgIGlmIChmSW5kZXggPT0gMCkge1xyXG4gICAgICAgICAgICAgICBmaWxlcyA9IGZpbGVOYW1lWzFdO1xyXG4gICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgZmlsZXMgPSBmaWxlcyArIFwiICxcIiArIGZpbGVOYW1lWzFdO1xyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgZkluZGV4Kys7XHJcbiAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICBhbnN3ZXJzID0ge1xyXG4gICAgICAgICAgICAgZ3JvdXBUZXh0OmFuc3dlci5ncm91cFRleHQsXHJcbiAgICAgICAgICAgICBxdWVzVmFsdWU6IGFuc3dlci5xdWVzVmFsdWUsXHJcbiAgICAgICAgICAgICBhbnNWYWx1ZTogZmlsZXMsXHJcbiAgICAgICAgICAgfTtcclxuICAgICAgICAgLy8gIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xyXG4gICAgICAgICB9IGVsc2UgaWYgKGFuc3dlci5xVHlwID09IFwiQm9va1wiKSB7XHJcbiAgICAgICAgICAgLyogIHZhciBxdWVzTm89MDtcclxuICAgICAgICAgIGlmKGFuc3dlci5hbnNWYWx1ZS5pbmNsdWRlcyhcIkBAIyMkJFwiKSl7XHJcbiAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdsaW5lIDEyMjMnKTtcclxuICAgICAgICAgICAgIGZvciAodmFyIGJxQW5zd2VyVmFsdWUgb2YgYW5zd2VyLmFuc1ZhbHVlLnNwbGl0KFwiQEAjIyQkXCIpKSB7XHJcbiAgICAgICAgICAgICAgIHZhciBxdWVzVmFsdWU9YW5zd2VyLnF1ZXN0aW9uVGV4dC5zcGxpdChcIkBAIyMkJFwiKTtcclxuICAgICAgICAgICAgICAgYW5zd2VycyA9IHt9O1xyXG4gICAgICAgICAgICAgICBhbnN3ZXJzID0ge1xyXG4gICAgICAgICAgICAgICAgLy8gZ3JvdXBUZXh0OmFuc3dlci5xdWVzdGlvblRleHQsXHJcbiAgICAgICAgICAgICAgICAgcXVlc1ZhbHVlOiAgXCImbHQ7cCZndDtcIisgcXVlc1ZhbHVlW3F1ZXNOb10rXCImbHQ7cCZndDtcIixcclxuICAgICAgICAgICAgICAgICBhbnNWYWx1ZTogYnFBbnN3ZXJWYWx1ZSxcclxuICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgcXVlc05vKys7XHJcbiAgICAgICAgICAgICAgIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xyXG4gICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9Ki9cclxuICAgICAgICAgICBpZihhbnN3ZXIuYW5zVmFsdWUuaW5jbHVkZXMoXCJAQCMjJCRcIikpe1xyXG4gICAgICAgICAgICAgdmFyIGFuc3dlcnZhbHVlcyA9IGFuc3dlci5hbnNWYWx1ZS5zcGxpdChcIkBAIyMkJFwiKTtcclxuICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ3ZhbHVlJylcclxuICAgICAgICAgICAgIGFuc3dlcnMgPSB7XHJcbiAgICAgICAgICAgICAgLy9ncm91cFRleHQ6YW5zd2VyLmdyb3VwVGV4dCxcclxuICAgICAgICAgICAgICBxdWVzVmFsdWU6IGFuc3dlci5xdWVzVmFsdWUsXHJcbiAgICAgICAgICAgICAgYW5zVmFsdWU6IGFuc3dlcnZhbHVlcyxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhhbnN3ZXJzKVxyXG4gICAgICAgICAgIC8vIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgIGFuc3dlcnMgPSB7XHJcbiAgICAgICAgICAgICAgIC8vZ3JvdXBUZXh0OmFuc3dlci5ncm91cFRleHQsXHJcbiAgICAgICAgICAgICAgIHF1ZXNWYWx1ZTogYW5zd2VyLnF1ZXNWYWx1ZSxcclxuICAgICAgICAgICAgICAgYW5zVmFsdWU6IGFuc3dlci5hbnNWYWx1ZSxcclxuICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIC8vIHRoaXMuc3VtbWFyeS5wdXNoKGFuc3dlcnMpO1xyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIHZhciBhbnMxID0gYW5zd2VyLmFuc1ZhbHVlLnNwbGl0KFwiQEAjIyQkXCIpO1xyXG4gICAgICAgICAgIGFuc3dlcnMgPSB7XHJcbiAgICAgICAgICAgICAvL2dyb3VwVGV4dDphbnN3ZXIuZ3JvdXBUZXh0LFxyXG4gICAgICAgICAgICAgcXVlc1ZhbHVlOiBhbnN3ZXIucXVlc1ZhbHVlLFxyXG4gICAgICAgICAgICAgYW5zVmFsdWU6IGFuc3dlci5hbnNWYWx1ZSxcclxuICAgICAgICAgICB9O1xyXG4gICAgICAgICAgLy8gdGhpcy5zdW1tYXJ5LnB1c2goYW5zd2Vycyk7XHJcbiAgICAgICAgIH1cclxuICAgICAgIH1cclxuICAgICB9XHJcblxyXG4gICB9XHJcbiB9O1xyXG5cclxuIHByaXZhdGUgZmFpbHVyZVJlYWRCb29rID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgIGNvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGZhaWx1cmVSZWFkQm9vaycpO1xyXG4gICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiB9O1xyXG5cclxuIHByaXZhdGUgcmVhZEFuc3dlcmJvb2sgPSAodXVpZDogc3RyaW5nKSA9PiB7XHJcbiAgIGlmKHRoaXMuc2VydiA9IFwiYXBpXCIpIHtcclxuICAgICB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXHJcbiAgICAgICB0aGlzLnRrbixcclxuICAgICAgIFtcIkFuc3dlckJvb2tcIiwgXCJyZWFkXCIsIHV1aWRdLFxyXG4gICAgICAgdGhpcy5zdWNjZXNzQW5zd2VyQm9va1JlYWQsXHJcbiAgICAgICB0aGlzLmZhaWx1cmVBbnN3ZXJCb29rUmVhZFxyXG4gICAgICk7XHJcbiAgIH0gZWxzZSB7XHJcbiAgICAgLy8gVkQgMTVGRUIyNCAtIHVzZWQgcHJvY2Vzc05ldyBtZXRob2RcclxuICAgICBsZXQgcGFyYW1NYXAgPSB7IGNyZWF0ZUFuc3dlckJvb2tGbGFnOiBmYWxzZSB9O1xyXG4gICAgIHBhcmFtTWFwWydjX19xYl9pZCddID0gdXVpZDtcclxuICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xyXG4gICAgIC8vIFZEIDMxTk9WMjQgcGFyYW0gY2hhbmdlcyB3aXRoIG5ldyBtZXRob2RcclxuICAgICBsZXQgcGFyYTIgPSB7XHJcbiAgICAgIGRhdGFUeXBlOiBcIkFuc3dlckJvb2tcIixcclxuICAgICAgb3BlcmF0aW9uOiBcInJlYWRcIixcclxuICAgICAgcGFyYW0xOiB1dWlkLFxyXG4gICAgICBwYXJhbUpTT046IEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSxcclxuICAgICAgbGFuZ3VhZ2VDb2RlIDogJydcclxuICAgIH1cclxuLy8gVkQgMTJKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcclxuICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXHJcbiAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc0RhdGFcIixcclxuICAgICAgIFtKU09OLnN0cmluZ2lmeShwYXJhMildLFxyXG4gICAgICAgdGhpcy5zdWNjZXNzQW5zd2VyQm9va1JlYWQsXHJcbiAgICAgICB0aGlzLmZhaWx1cmVBbnN3ZXJCb29rUmVhZFxyXG4gICAgICk7XHJcbiAgIH1cclxuIH1cclxuXHJcblxyXG4gcHJpdmF0ZSBzdWNjZXNzQW5zd2VyQm9va1JlYWQgPSAocmVzcG9uc2UpID0+IHtcclxuICAgaWYgKHRoaXMuYWJJdGVtPy5zdGF0dXMgPT0gXCJDb21wbGV0ZWRcIikge1xyXG4gICAgIGZvciAodmFyIGFuc3dlciBvZiB0aGlzLmFiSXRlbS5hbnN3ZXJzKSB7XHJcbiAgICAgICB2YXIgYXYgPSBhbnN3ZXIuYW5zVmFsdWUuc3BsaXQoXCJAQCMjJCRcIik7XHJcbiAgICAgICB2YXIgYW5zd2VycyA9IHsgcXVlc1ZhbHVlOiBhbnN3ZXIucXVlc1ZhbHVlLCBhbnNWYWx1ZTogYXYsIGdyb3VwVGV4dDphbnN3ZXIuZ3JvdXBUZXh0IH07XHJcbiAgICAgICAvL2NvbnNvbGUubG9nKGFuc3dlcnMpXHJcbiAgICAgICB0aGlzLnN1bW1hcnkucHVzaChhbnN3ZXJzKTtcclxuICAgICB9XHJcbiAgICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KFwiU3VtbWFyeXVwZGF0ZWRcIik7XHJcbiAgIH1cclxuIH07XHJcblxyXG4gcHJpdmF0ZSBmYWlsdXJlQW5zd2VyQm9va1JlYWQgPSAocmVzcG9uc2UpID0+IHtcclxuICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZhaWx1cmVyZWFkJyk7XHJcbiAgIC8vY29uc29sZS5sb2cocmVzcG9uc2UpO1xyXG4gfTtcclxuXHJcbiBwcml2YXRlIHJlYWRRdWVzdGlvbiA9ICh1dWlkOiBzdHJpbmcpID0+IHtcclxuICAgaWYodGhpcy5zZXJ2ID09IFwiYXBpXCIpIHtcclxuICAgICAvLyB0aGlzLmRhdGFTZXJ2aWNlLmdldEFQSURhdGEoXHJcbiAgICAgLy8gICB0aGlzLnRrbixcclxuICAgICAvLyAgIFtcIlF1ZXN0aW9uXCIsIFwicmVhZFwiLCB1dWlkXSxcclxuICAgICAvLyAgIHRoaXMuc3VjY2Vzc1JlYWQsXHJcbiAgICAgLy8gICB0aGlzLmZhaWx1cmVSZWFkXHJcbiAgICAgLy8gKTtcclxuICAgICAvL3RoaXMuc2hhcmVkU2VydmljZS5zaG93TG9hZGVyKCk7XHJcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogdHJ1ZSB9O1xyXG4gICAgIC8vIEhBIDA5RkVCMjQgdG8gY2xlYXIgdGhlIGVycm9yOiBjcmVhdGVBbnN3ZXJCb29rIGlzIGZhbHNlXHJcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSB1dWlkO1xyXG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XHJcbiAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnUXVlc3Rpb24nLCdyZWFkJyx1dWlkLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxyXG4gICAgICAgKGRhdGEpPT57XHJcbiAgICAgICAgLy8gdGhpcy5zaGFyZWRTZXJ2aWNlLmhpZGVMb2FkZXIoKTtcclxuICAgICAgICAgdGhpcy5zcGlubmVyLmhpZGUodGhpcy5zcGlubmVyTmFtZSk7XHJcbiAgICAgICAgIC8vIFZEIGRpc2FibGVkXHJcbiAgICAgICAgIHRoaXMuaXNCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgICAgICBjb25zb2xlLmxvZygnZGF0YSBjYW1lIHN1Y2Vzc2Z1bGx5Jyk7XHJcbiAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgICB0aGlzLnN1Y2Nlc3NSZWFkKEpTT04ucGFyc2UoZGF0YSkpXHJcbiAgICAgICB9LChlcnJvcikgPT4ge1xyXG4gICAgICAgICAvL3RoaXMuc2hhcmVkU2VydmljZS5oaWRlTG9hZGVyKCk7XHJcbiAgICAgICAgIHRoaXMuc3Bpbm5lci5oaWRlKHRoaXMuc3Bpbm5lck5hbWUpO1xyXG4gICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmV0Y2ggcXVlc3Rpb24gYm9va3MnLCBlcnJvcik7XHJcbiAgICAgICB9XHJcbiAgICAgICApXHJcbiAgIH0gZWxzZSB7XHJcbiAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcclxuICAgICAvLyAvLyBWRCAxNUZFQjI0IC0gbWFrZSBjcmVhdGVBbnN3ZXJCb29rRmxhZyBmYWxzZSBvbmx5XHJcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcclxuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9IHV1aWQ7XHJcbiAgICAgcGFyYW1NYXBbXCJjX19yZWNvcmRfaWRcIl0gPSAnJztcclxuICAgICAvLyBWRCAzMU5PVjI0IHBhcmFtIGNoYW5nZXMgd2l0aCBuZXcgbWV0aG9kXHJcbiAgICAgbGV0IHBhcmEyID0ge1xyXG4gICAgICBkYXRhVHlwZTogXCJRdWVzdGlvblwiLFxyXG4gICAgICBvcGVyYXRpb246IFwicmVhZFwiLFxyXG4gICAgICBwYXJhbTE6IHV1aWQsXHJcbiAgICAgIHBhcmFtSlNPTjogSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLFxyXG4gICAgICBsYW5ndWFnZUNvZGUgOiAnJ1xyXG4gICAgfVxyXG4gICAgIHRoaXMuc2ZTZXJ2aWNlLnJlbW90ZUFjdGlvbihcclxuICAgICAvLyBIQSAwOUZFQjI0IHRvIGNsZWFyIHRoZSBlcnJvcjogY3JlYXRlQW5zd2VyQm9vayBpcyBmYWxzZVxyXG4gICAgICAgXCJOeHRDb250cm9sbGVyLnByb2Nlc3NEYXRhXCIsXHJcbiAgICAgICBbSlNPTi5zdHJpbmdpZnkocGFyYTIpXSxcclxuICAgICAgIHRoaXMuc3VjY2Vzc1JlYWQsXHJcbiAgICAgICB0aGlzLmZhaWx1cmVSZWFkXHJcbiAgICAgKTtcclxuICAgfVxyXG4gfVxyXG5cclxuIHByaXZhdGUgc3VjY2Vzc1JlYWQgPSAocmVzcG9uc2UpID0+IHtcclxuICB0aGlzLnNwaW5uZXIuaGlkZSh0aGlzLnNwaW5uZXJOYW1lKTtcclxuICAvLyBWRCBkaXNhYmxlZFxyXG4gIHRoaXMuaXNCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xyXG4gICBjb25zb2xlLmxvZygnSW5zaWRlIHRoZSBzdWNjZXNzUmVhZCcpO1xyXG4gICBjb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiAgIC8vIEhBIDAyRkVCMjQgRm9yIHRlc3RpbmcgZm9yIHVzZWQgdGhpcyBhbmQgaW4gZnV0dXJlIGl0IGNhbiBiZSB1c2VkIHRvIHRlc3Qgd2l0aCBzdGF0aWMgZGF0YVxyXG4gICAvLyB2YXIgYWIgPSBbJ2ZpcnN0JywnbGFzdCcsJzEyMycsJzEyLTEyLTIwMDAnLCcyMicsJ01hbGUnLCcxMiBjcm9zcyAxJywnRW1Db250YWN0JywnOTg3NjUnLCdBJywnU2luZ2xlJ107XHJcbiAgIC8vIGZvcihjb25zdCBbaW5kZXgsaXRlbV0gb2YgcmVzcG9uc2UucXVlc3Rpb24uc3ViUXVlc3Rpb25zLmVudHJpZXMoKSl7XHJcbiAgIC8vICAgaXRlbS5pbnB1dCA9IGFiW2luZGV4XTtcclxuICAgLy8gfVxyXG4gICAvLyBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uSXRlbSk7XHJcbiAgIC8vIFJlc2V0IHRoZSBWYXJpYWJsZXNcclxuXHJcbiAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbSkge1xyXG4gICAgIHRoaXMuaW5wVmFsdWUgPSBcIlwiO1xyXG4gICAgIHRoaXMuYW5zd2VyV3JhcCA9IG5ldyBBbnN3ZXJXcmFwcGVyKCk7XHJcbiAgICAgdGhpcy5vcHRpb25WYWx1ZXMgPSBbXTtcclxuICAgICB0aGlzLnN1YlF1ZXN0aW9ucyA9IFtdO1xyXG4gICAgIHRoaXMucmVzZXRGbGFnKHRoaXMucXVlc3Rpb25JdGVtLnR5cGUpO1xyXG4gICB9XHJcbiAgIHRoaXMucXVlc3Rpb25JdGVtID0gcmVzcG9uc2UucXVlc3Rpb247XHJcbiAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtKTtcclxuXHJcbiAgIGlmKHRoaXMucXVlc3Rpb25JdGVtLnR5cGUgPT09ICdBbHBoYW51bWVyaWMnKXtcclxuICAgICB0aGlzLnNwbENDQmFja0NsaWNrID0gdHJ1ZTtcclxuICAgfVxyXG5cclxuICAgdGhpcy5jdXJyZW50UXVlc3Rpb25JZCA9IHRoaXMucXVlc3Rpb25JdGVtLmlkO1xyXG4gICB0aGlzLmhhbmRsZVBhZ2UuZW1pdCh0aGlzLnF1ZXN0aW9uSXRlbS50cmFja2luZ0lkKTtcclxuICAgLy8gSGFuZGxlIHRoZSBzdWJRdWVzdGlvbiBvcHRpb25zXHJcbiAgIGlmIChyZXNwb25zZS5zcU9wdGlvbnMpIHtcclxuICAgICAvL3ZhciBuZXdSZWNvcmRzID0gW107XHJcbiAgICAgZm9yICh2YXIgcSBvZiB0aGlzLnF1ZXN0aW9uSXRlbS5zdWJRdWVzdGlvbnMpIHtcclxuICAgICAgIC8vY29uc29sZS5sb2cocS5OYW1lKTtcclxuICAgICAgIHZhciBzcSA9IHJlc3BvbnNlLnNxT3B0aW9uc1txLmlkXTtcclxuICAgICAgIGlmIChzcSkge1xyXG4gICAgICAgICAvL2NvbnNvbGUubG9nKCdmb3VuZCBvcHRpb25zIGZvciBzdWJxdWVzdGlvbiAnICsgcS5OYW1lKTtcclxuICAgICAgICAgaWYgKCFxLm9wdGlvbnMpIHtcclxuICAgICAgICAgICBxLm9wdGlvbnMgPSBzcS5vcHRpb25zO1xyXG4gICAgICAgICB9XHJcbiAgICAgICB9XHJcbiAgICAgfVxyXG4gICB9XHJcbiAgIHRoaXMucHJvY2Vzc1F1ZXN0aW9uKCk7XHJcbiAgIHRoaXMuaW5uZXJodG1sID0gdGhpcy5zYW5pdGl6ZXIuYnlwYXNzU2VjdXJpdHlUcnVzdEh0bWwoXHJcbiAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uYWRkaXRpb25hbFJpY2hDb250ZW50XHJcbiAgICk7XHJcbiAgIHRoaXMudHJhY2tJZCgpO1xyXG4gfTtcclxuXHJcbiB0cmFja0lkKCkge1xyXG4gICB2YXIgcXRyYWNrSWQgPSB0aGlzLnF1ZXN0aW9uSXRlbS50cmFja2luZ0lkO1xyXG4gICAvL2NvbnNvbGUubG9nKCd0cmFja0lkLXF1ZXN0aW9uJytxdHJhY2tJZCk7XHJcbiB9XHJcblxyXG4gcHJpdmF0ZSBmYWlsdXJlUmVhZCA9IChyZXNwb25zZSkgPT4ge1xyXG4gICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgZmFpbHVyZXJlYWQnKTtcclxuICAgLy9jb25zb2xlLmxvZyhyZXNwb25zZSk7XHJcbiB9O1xyXG5cclxuIHByaXZhdGUgc2F2ZUFuc3dlciA9ICgpID0+IHtcclxuICAgLy8gU2V0IHRoZSBBbnN3ZXIgTnVtYmVyIGJhc2VkIG9uIHRoZSBRdWVzdGlvbiBTdGFjayBMZW5ndGhcclxuICAgaWYgKHRoaXMuaW5wVmFsdWUgIT0gXCIuXCIpIHtcclxuICAgICB0aGlzLmN1cnJlbnRRdWVzdGlvbklkID0gbnVsbDtcclxuICAgfVxyXG4gICB0aGlzLmFuc3dlcldyYXAuYW5zTnVtYmVyID0gdGhpcy5xdWVzdGlvblN0YWNrLmxlbmd0aCArIDE7XHJcblxyXG4gICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIikge1xyXG4gICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcclxuICAgICAvLyAgIHRoaXMudGtuLFxyXG4gICAgIC8vICAgW1wiQW5zd2VyXCIsIFwiY3JlYXRlXCIsIEpTT04uc3RyaW5naWZ5KHRoaXMuYW5zd2VyV3JhcCldLFxyXG4gICAgIC8vICAgdGhpcy5zdWNjZXNzU2F2ZSxcclxuICAgICAvLyAgIHRoaXMuZmFpbHVyZVNhdmVcclxuICAgICAvLyApO1xyXG4gICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XHJcbiAgICAgLy8gSEEgMDlGRUIyNCB0byBjbGVhciB0aGUgZXJyb3I6IGNyZWF0ZUFuc3dlckJvb2sgaXMgZmFsc2VcclxuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xyXG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XHJcbiAgICAgdGhpcy5kYXRhU2VydmljZS5nZXRBUElGcm9tTm9kZSgnQW5zd2VyJywnY3JlYXRlJyxKU09OLnN0cmluZ2lmeSh0aGlzLmFuc3dlcldyYXApLEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSx0aGlzLmFwaSkuc3Vic2NyaWJlKFxyXG4gICAgIChkYXRhKT0+e1xyXG4gICAgICAgY29uc29sZS5sb2coJ2RhdGEgY2FtZSBzdWNlc3NmdWxseScpO1xyXG4gICAgICAgY29uc29sZS5sb2coZGF0YSk7XHJcbiAgICAgICB0aGlzLnN1Y2Nlc3NTYXZlKEpTT04ucGFyc2UoZGF0YSkpXHJcbiAgICAgfSwoZXJyb3IpID0+IHtcclxuICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcclxuICAgICB9XHJcbiAgICAgKVxyXG4gICB9IGVsc2Uge1xyXG4gICAgIC8vIFZEIDE1RkVCMjQgLSB1c2VkIHByb2Nlc3NOZXcgbWV0aG9kXHJcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcclxuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xyXG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XHJcbiAgICAgLy8gVkQgMzFOT1YyNCBwYXJhbSBjaGFuZ2VzIHdpdGggbmV3IG1ldGhvZFxyXG4gICAgIGxldCBwYXJhMyA9IHtcclxuICAgICAgZGF0YVR5cGU6IFwiQW5zd2VyXCIsXHJcbiAgICAgIG9wZXJhdGlvbjogXCJjcmVhdGVcIixcclxuICAgICAgcGFyYW0xOiBKU09OLnN0cmluZ2lmeSh0aGlzLmFuc3dlcldyYXApLFxyXG4gICAgICBwYXJhbUpTT046IEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSxcclxuICAgICAgbGFuZ3VhZ2VDb2RlIDogJydcclxuICAgIH1cclxuLy8gVkQgMTJKdW4yNCAtIHRyYW5zbGF0aW9uIGNoYW5nZXNcclxuICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXHJcbiAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc0RhdGFcIixcclxuICAgICAgIFtKU09OLnN0cmluZ2lmeShwYXJhMyldLFxyXG4gICAgICAgdGhpcy5zdWNjZXNzU2F2ZSxcclxuICAgICAgIHRoaXMuZmFpbHVyZVNhdmVcclxuICAgICApO1xyXG4gICB9XHJcbiB9O1xyXG5cclxuIGh0bWxEZWNvZGUoaW5wdXQpIHtcclxuICAgdmFyIGRvYyA9IG5ldyBET01QYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoaW5wdXQsIFwidGV4dC9odG1sXCIpO1xyXG4gICByZXR1cm4gZG9jLmRvY3VtZW50RWxlbWVudC50ZXh0Q29udGVudDtcclxuIH1cclxuXHJcbiBwcml2YXRlIHN1Y2Nlc3NTYXZlID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgIGlmIChyZXNwb25zZS5zdGF0dXMgPT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAvL3RoaXMuYWJJdGVtID0gcmVzcG9uc2UuYW5zd2VyYm9vaztcclxuICAgICB0aGlzLmFuc3dlck1hcC5zZXQocmVzcG9uc2UuYW5zd2VyLnF1ZXNJZCwgcmVzcG9uc2UuYW5zd2VyKTtcclxuICAgfSBlbHNlIHtcclxuICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA9IG5ldyBFcnJvcldyYXBwZXIoKTtcclxuICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvci5lcnJvck1zZyA9IHJlc3BvbnNlLmVycm9yLmVycm9yTXNnO1xyXG4gICB9XHJcbiAgIGlmKCF0aGlzLmJhY2tCdXR0b25GbGFnKXtcclxuICAgICB0aGlzLm5leHQoKTtcclxuICAgfVxyXG4gfTtcclxuXHJcbiBwcml2YXRlIGZhaWx1cmVTYXZlID0gKHJlc3BvbnNlKSA9PiB7XHJcbiAgIC8vY29uc29sZS5sb2coJ2luc2lkZSBmYWlsdXJlU2F2ZScpO1xyXG4gICAvL2NvbnNvbGUubG9nKHJlc3BvbnNlKTtcclxuIH07XHJcblxyXG4gcHJpdmF0ZSBwcm9jZXNzUXVlc3Rpb24gPSAoKSA9PiB7XHJcbiAgIC8vIGNvbnNvbGUubG9nKCdJbnNpZGUgdGhlIHByb2Nlc3NRdWVzdGlvbicpO1xyXG4gICAvLyBjb25zb2xlLmxvZygnc3BsQ0NCYWNrQ2xpY2sgPSAnK3RoaXMuc3BsQ0NCYWNrQ2xpY2spO1xyXG4gICAvLyBjb25zb2xlLmxvZyh0aGlzLnF1ZXN0aW9uU3RhY2spO1xyXG4gICAvL2NvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtKTtcclxuICAgdGhpcy5wb3AgPSB0cnVlO1xyXG5cclxuICAgLy8gaWYoIXRoaXMuYmFjayl7XHJcbiAgIC8vICAgdGhpcy5xdWVzdGlvbk5hbWUucHVzaCh0aGlzLnF1ZXN0aW9uSXRlbS5OYW1lKVxyXG4gICAvLyB9XHJcblxyXG4gICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIgPT09IHRydWUpIHtcclxuICAgICBpZiAoIXRoaXMuYmFjaykge1xyXG4gICAgICAgdGhpcy5xdWVzdGlvbk5hbWUucHVzaCh0aGlzLnF1ZXN0aW9uSXRlbS5OYW1lKTtcclxuICAgICB9XHJcbiAgICAgdGhpcy5iYWNrID0gZmFsc2U7XHJcbiAgICAgaWYgKHRoaXMucXVlc3Rpb25OYW1lWzBdID09PSB0aGlzLnF1ZXN0aW9uTmFtZVsxXSkge1xyXG4gICAgICAgdGhpcy5xdWVzdGlvbk5hbWUucG9wKCk7XHJcbiAgICAgfVxyXG5cclxuICAgICB0aGlzLmN1cnJlbnROYW1lID0gdGhpcy5xdWVzdGlvbkl0ZW0uTmFtZTtcclxuICAgICB0aGlzLnBhdGhxdWVzdGlvbiA9IHRoaXMucXVlc3Rpb25OYW1lLmluZGV4T2YodGhpcy5jdXJyZW50TmFtZSk7XHJcbiAgICAgdGhpcy5wb3NzaWJpbGl0aWVzID0gdGhpcy5xYkl0ZW0ucG9zc2liaWxpdGllcztcclxuICAgfVxyXG5cclxuICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zO1xyXG4gICB0aGlzLmRheSgpO1xyXG4gICAvL2NvbnNvbGUubG9nKCdwcm9jZXNzaW5nIHF1ZXN0aW9uICcgKyB0aGlzLnF1ZXN0aW9uSXRlbS5OYW1lICsgJyBleGlzdGluZyBhbnN3ZXJzIGFyZSAnICsgdGhpcy5hbnN3ZXJNYXAuc2l6ZSk7IC8vID0+ICcgKyBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXN0aW9uSXRlbSkpO1xyXG5cclxuICAgLy8gU2V0IHRoZSBGbGFncyB0byBzaG93IHJpZ2h0IGZpZWxkc1xyXG4gICB0aGlzLnNldEZsYWcodGhpcy5xdWVzdGlvbkl0ZW0udHlwZSk7XHJcbiAgIC8vY29uc29sZS5sb2coJ0FmdGVyIHRoZSBzZXRGbGFnIG1ldGhvZCBkdEZsYWcgPSAnK3RoaXMuZHRGbGFnKTtcclxuXHJcbiAgIC8vIENoZWNrIHRoZSBleGlzdGluZyBhbnN3ZXIgZnJvbSBhbnN3ZXJNYXBcclxuICAgaWYgKHRoaXMuYW5zd2VyTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpIHtcclxuICAgICAvLyAgLy9jb25zb2xlLmxvZyhcImV4aXN0aW5nIGFuc3dlciBmb3VuZCBmb3IgdGhpcy5xdWVzdGlvbkl0ZW0uTmFtZVwiKTtcclxuICAgICB2YXIgZUFuc3dlciA9IHRoaXMuYW5zd2VyTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XHJcbiAgICAgLy8gR2V0IHRoZSBleGlzdGluZyBhbnN3ZXIgZnJvbSB0aGUgTWFwXHJcbiAgICAgdGhpcy5pbnBWYWx1ZSA9IGVBbnN3ZXIuYW5zVmFsdWU7XHJcbiAgICAgLy9jb25zb2xlLmxvZygnaW5wVmFsdWUgaGFzIGJlZW4gc2V0IHRvICcgKyB0aGlzLmlucFZhbHVlKTtcclxuICAgICBpZiAodGhpcy5hdHRhY2htZW50c01hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uaWQpKSB7XHJcbiAgICAgICB0aGlzLmF0dGFjaG1lbnRzID0gdGhpcy5hdHRhY2htZW50c01hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xyXG4gICAgIH1cclxuICAgfSBlbHNlIHtcclxuICAgICAvL2NvbnNvbGUubG9nKCdpbnNpZGUgcmVtb3ZpbmcgYXR0YWNobWVudCBhcnJheScpO1xyXG4gICAgIHRoaXMuYXR0YWNobWVudHMgPSBbXTtcclxuICAgfVxyXG4gICAvLyBjb25zb2xlLmxvZyh0aGlzLmlucFZhbHVlKTtcclxuICAgaWYodGhpcy5zcGxDQ0JhY2tDbGljayAmJiB0aGlzLmlucFZhbHVlICYmIHRoaXMuaW5wVmFsdWUuaW5jbHVkZXMoJ0VTJykpe1xyXG4gICAgIC8vIGNvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGlmIGNvbmQnKTtcclxuICAgICB0aGlzLnNwbENDQmFja0NsaWNrID0gZmFsc2U7XHJcbiAgICAgdGhpcy5pbnBWYWx1ZSA9IHRoaXMuaW5wVmFsdWUucmVwbGFjZSgnRVMnLCcnKTtcclxuICAgfVxyXG5cclxuICAgaWYgKHRoaXMuY2hlY2tib3hGbGFnKSB7XHJcbiAgICAgLy8gU2V0IHRoZSBPcHRpb25zIGZvciBDaGVja2JveFxyXG4gICAgIHRoaXMuc2V0T3B0aW9ucyh0aGlzLnF1ZXN0aW9uSXRlbS5vcHRpb25zKTtcclxuICAgfSBlbHNlIGlmICh0aGlzLmJvb2tGbGFnKSB7XHJcbiAgICAgLy9jb25zb2xlLmxvZygnSW5pc2UgdGhlIGV4cGVjdGVkIGJvb2tGbGFnIGNvbmQnKTtcclxuICAgICAvL2NvbnNvbGUubG9nKCdkdEZsYWcgPSAnK3RoaXMuZHRGbGFnKTtcclxuLy8gIEhBIDIwRkVCMjQgTGFiZWwgRml4XHJcbiAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICBlbGVtZW50LnF1ZXN0aW9uVGV4dCA9IGVsZW1lbnQucXVlc3Rpb25UZXh0LnJlcGxhY2UoLzxbXj5dKz4vZywgJycpO1xyXG4gICAgIH0pO1xyXG4gICAgIHRoaXMuc2V0U3ViUXVlc3Rpb25zKHRoaXMucXVlc3Rpb25JdGVtLnN1YlF1ZXN0aW9ucyk7XHJcbiAgIH0gZWxzZSBpZiAodGhpcy5saXN0RmxhZykge1xyXG4gICAgIC8vIFNldCB0aGUgTG9jYWxTdWJRdWVzdGlvbnNcclxuICAgICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIGxpc3QgZmxhZycpO1xyXG4gICAgIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtLlF1ZXN0aW9uc19fci5yZWNvcmRzKTtcclxuICAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmFiSXRlbS5RdWVzdGlvbnNfX3IucmVjb3Jkcyk7XHJcbiAgICAgaWYoIXRoaXMubG9jYWxTdWJRTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpe1xyXG4gICAgICAgdGhpcy5zZXRTdWJRdWVzdGlvbnModGhpcy5xdWVzdGlvbkl0ZW0uc3ViUXVlc3Rpb25zKTtcclxuICAgICB9XHJcbiAgIH0gZWxzZSBpZiAodGhpcy5kdEZsYWcpIHtcclxuICAgICAvL2NvbnNvbGUubG9nKCdJbmlzZSB0aGUgdW5leHBlY3RlZCBkdEZsYWcgY29uZCcpO1xyXG4gICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gXCJcIjtcclxuICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gXCJcIjtcclxuICAgICB0aGlzLnNlbERhdGUgPSBcIlwiO1xyXG4gICAgIC8vIDIwMjEtNS0xNlQwMDowMFxyXG4gICAgIGlmICh0aGlzLmRhdGVNYXAuaGFzKHRoaXMucXVlc3Rpb25JdGVtLmlkKSkge1xyXG4gICAgICAgdGhpcy5zZWxEYXRlID0gdGhpcy5kYXRlTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XHJcbiAgICAgfVxyXG4gICAgIGlmICh0aGlzLnNlbGVjdGVkaG91ck1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uaWQpKSB7XHJcbiAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHRoaXMuc2VsZWN0ZWRob3VyTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XHJcbiAgICAgfVxyXG4gICAgIGlmICh0aGlzLnNlbGVjdGVkbWludXRlTWFwLmhhcyh0aGlzLnF1ZXN0aW9uSXRlbS5pZCkpIHtcclxuICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSB0aGlzLnNlbGVjdGVkbWludXRlTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XHJcbiAgICAgfVxyXG4gICAgIGlmICh0aGlzLnF1ZXN0aW9uSXRlbS54MjRIb3VycyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgdGhpcy5ob3Vycy5wdXNoKFxyXG4gICAgICAgICBcIjEzXCIsXHJcbiAgICAgICAgIFwiMTRcIixcclxuICAgICAgICAgXCIxNVwiLFxyXG4gICAgICAgICBcIjE2XCIsXHJcbiAgICAgICAgIFwiMTdcIixcclxuICAgICAgICAgXCIxOFwiLFxyXG4gICAgICAgICBcIjE5XCIsXHJcbiAgICAgICAgIFwiMjBcIixcclxuICAgICAgICAgXCIyMVwiLFxyXG4gICAgICAgICBcIjIyXCIsXHJcbiAgICAgICAgIFwiMjNcIixcclxuICAgICAgICAgXCIwMFwiXHJcbiAgICAgICApO1xyXG4gICAgIH1cclxuICAgICBpZiAodGhpcy5xdWVzdGlvbkl0ZW0ueDI0SG91cnMgPT09IGZhbHNlKSB7XHJcbiAgICAgICB0aGlzLmhvdXJzID0gdGhpcy5ob3Vycy5zbGljZSgwLCAxMik7XHJcbiAgICAgfVxyXG4gICAgIGlmICh0aGlzLmR0RmxhZyAmJiB0aGlzLmlucFZhbHVlKSB7XHJcbiAgICAgICB2YXIgZHRWYWwgPSB0aGlzLmlucFZhbHVlLnNwbGl0KFwiVFwiKTtcclxuICAgICAgIHZhciBkdHZhbDAgPSB0aGlzLmlucFZhbHVlLnNwbGl0KFwiIFwiKTtcclxuICAgICAgIHRoaXMuaW5wVmFsdWUgPSBkdFZhbFswXTtcclxuICAgICAgIHRoaXMuaW5wVmFsdWUgPSBkdHZhbDBbMF07XHJcblxyXG4gICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaW5wdXQgPSBkdFZhbFsxXTtcclxuICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmlucHV0ID0gZHR2YWwwWzFdO1xyXG4gICAgIH1cclxuICAgICBpZiAoXHJcbiAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5pc0RhdGVCYWNrd2FyZCB8fFxyXG4gICAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uaXNEYXRlRm9yd2FyZFxyXG4gICAgICkge1xyXG4gICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLmlzRGF0ZUJhY2t3YXJkID09PSB0cnVlKSB7XHJcbiAgICAgICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucy5kaXNhYmxlU2luY2UgPSB7XHJcbiAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxyXG4gICAgICAgICAgIG1vbnRoOiB0aGlzLnRvZGF5LmdldE1vbnRoKCkgKyAxLFxyXG4gICAgICAgICAgIGRheTogdGhpcy50b2RheS5nZXREYXRlKCkgKyAxLFxyXG4gICAgICAgICB9O1xyXG4gICAgICAgfVxyXG4gICAgICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLmlzRGF0ZUZvcndhcmQgPT09IHRydWUpIHtcclxuICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVVbnRpbCA9IHtcclxuICAgICAgICAgICB5ZWFyOiB0aGlzLnRvZGF5LmdldEZ1bGxZZWFyKCksXHJcbiAgICAgICAgICAgbW9udGg6IHRoaXMudG9kYXkuZ2V0TW9udGgoKSArIDEsXHJcbiAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSxcclxuICAgICAgICAgfTtcclxuICAgICAgIH1cclxuICAgICB9XHJcbiAgIH0gZWxzZSBpZiAodGhpcy5maWxlRmxhZykge1xyXG4gICAgIHRoaXMuZmlsZVVJKCk7XHJcbiAgICAgLy8gbG9naWNcclxuICAgICB0aGlzLmFsbG93ZWRGaWxlRXh0ZW5zaW9uID1cclxuICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5hbGxvd2VkRmlsZUV4dGVuc2lvbnM/LnNwbGl0KFwiO1wiKTtcclxuICAgICAvL2NvbnNvbGUubG9nKHRoaXMuYWxsb3dlZEZpbGVFeHRlbnNpb24pO1xyXG4gICB9XHJcblxyXG4gICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIgPT09IHRydWUpIHtcclxuICAgICB0aGlzLnVwZGF0ZVByb2dyZXNzKCk7XHJcbiAgIH1cclxuIH07XHJcblxyXG4gc2V0RmxhZyh0eXApIHtcclxuICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIHNldEZsYWcgZm9yICcgKyB0eXApO1xyXG5cclxuICAgaWYgKHR5cCkge1xyXG4gICAgIC8vIFNldCB0aGUgRmxhZ3NcclxuICAgICBpZiAodHlwID09IFwiVGV4dFwiKSB7XHJcbiAgICAgICB0aGlzLnRleHRGbGFnID0gdHJ1ZTtcclxuXHJcbiAgICAgICAvL3RoaXMubnVtYmVyRmxhZyA9IHRydWU7XHJcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJOdW1iZXJcIikge1xyXG4gICAgICAgdGhpcy5udW1iZXJGbGFnID0gdHJ1ZTtcclxuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkFscGhhTnVtZXJpY1wiKSB7XHJcbiAgICAgICB0aGlzLmFscGhhbnVtZXJpY0ZsYWcgPSB0cnVlO1xyXG4gICAgICAgLyppZih0aGlzLmlucFZhbHVlLmxlbmd0aCA9PT0gMCl7XHJcbiAgICAgICAgIHRoaXMuaW5wVmFsdWU9J0VTJ1xyXG4gICAgICAgfSovXHJcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJFbWFpbFwiKSB7XHJcbiAgICAgICB0aGlzLmVtYWlsRmxhZyA9IHRydWU7XHJcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJGaWxlXCIpIHtcclxuICAgICAgIHRoaXMuZmlsZUZsYWcgPSB0cnVlO1xyXG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiRGF0ZVRpbWVcIikge1xyXG4gICAgICAgdGhpcy5kdEZsYWcgPSB0cnVlO1xyXG4gICAgICAgdGhpcy50aW1lRmxhZyA9IHRydWU7XHJcbiAgICAgICB0aGlzLmRhdGVGbGFnID0gdHJ1ZTtcclxuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlRleHRBcmVhXCIpIHtcclxuICAgICAgIHRoaXMudGFGbGFnID0gdHJ1ZTtcclxuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlJhZGlvXCIpIHtcclxuICAgICAgIHRoaXMucmFkaW9GbGFnID0gdHJ1ZTtcclxuICAgICAgfSBcclxuICAgIC8vICAgZWxzZSBpZiAodHlwID09IFwiUmljaFRleHRBcmVhXCIpIHtcclxuICAgIC8vICAgICB0aGlzLnJ0YUZsYWcgPSB0cnVlO1xyXG4gICAgLy8gIH0gXHJcbiAgICAgZWxzZSBpZiAodHlwID09IFwiRHJvcGRvd25cIikge1xyXG4gICAgICAgdGhpcy5kcm9wZG93bkZsYWcgPSB0cnVlO1xyXG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiQ2hlY2tib3hcIikge1xyXG4gICAgICAgdGhpcy5jaGVja2JveEZsYWcgPSB0cnVlO1xyXG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiQm9va1wiKSB7XHJcbiAgICAgICB0aGlzLmJvb2tGbGFnID0gdHJ1ZTtcclxuICAgICB9ZWxzZSBpZiAodHlwID09ICdMaXN0Jyl7XHJcbiAgICAgICB0aGlzLmxpc3RGbGFnID0gdHJ1ZTtcclxuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlRpbWVcIikge1xyXG4gICAgICAgLy9jb25zb2xlLmxvZygnSW5zaWRlIHRoZSBUaW1lIGNvbmQnKTtcclxuICAgICAgIHRoaXMuZHRGbGFnID0gdHJ1ZTtcclxuICAgICAgIHRoaXMudGltZUZsYWcgPSB0cnVlO1xyXG4gICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmR0RmxhZyk7XHJcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJEYXRlXCIpIHtcclxuICAgICAgIC8vY29uc29sZS5sb2coJ0luc2lkZSB0aGUgRGF0ZSBjb25kJyk7XHJcbiAgICAgICB0aGlzLmR0RmxhZyA9IHRydWU7XHJcbiAgICAgICB0aGlzLmRhdGVGbGFnID0gdHJ1ZTtcclxuICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kdEZsYWcpO1xyXG4gICAgIH1cclxuICAgfVxyXG4gfVxyXG5cclxuIHJlc2V0RmxhZyh0eXApIHtcclxuICAgaWYgKHR5cCkge1xyXG4gICAgIC8vIFNldCB0aGUgRmxhZ3NcclxuICAgICBpZiAodHlwID09IFwiVGV4dFwiKSB7XHJcbiAgICAgICB0aGlzLnRleHRGbGFnID0gZmFsc2U7XHJcbiAgICAgICAvL3RoaXMubnVtYmVyRmxhZyA9IGZhbHNlO1xyXG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiTnVtYmVyXCIpIHtcclxuICAgICAgIHRoaXMubnVtYmVyRmxhZyA9IGZhbHNlO1xyXG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiQWxwaGFudW1lcmljXCIpIHtcclxuICAgICAgIHRoaXMuYWxwaGFudW1lcmljRmxhZyA9IGZhbHNlO1xyXG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiRW1haWxcIikge1xyXG4gICAgICAgdGhpcy5lbWFpbEZsYWcgPSBmYWxzZTtcclxuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkZpbGVcIikge1xyXG4gICAgICAgdGhpcy5maWxlRmxhZyA9IGZhbHNlO1xyXG4gICAgICB9IFxyXG4gICAgLy8gICBlbHNlIGlmICh0eXAgPT0gXCJSaWNoVGV4dEFyZWFcIikge1xyXG4gICAgLy8gICAgIHRoaXMucnRhRmxhZyA9IGZhbHNlO1xyXG4gICAgLy8gIH0gXHJcbiAgICAgZWxzZSBpZiAodHlwID09IFwiRGF0ZVRpbWVcIikge1xyXG4gICAgICAgdGhpcy5kdEZsYWcgPSBmYWxzZTtcclxuICAgICAgIHRoaXMuZGF0ZUZsYWcgPSBmYWxzZTtcclxuICAgICAgIHRoaXMudGltZUZsYWcgPSBmYWxzZTtcclxuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIlRleHRBcmVhXCIpIHtcclxuICAgICAgIHRoaXMudGFGbGFnID0gZmFsc2U7XHJcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJSYWRpb1wiKSB7XHJcbiAgICAgICB0aGlzLnJhZGlvRmxhZyA9IGZhbHNlO1xyXG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiRHJvcGRvd25cIikge1xyXG4gICAgICAgdGhpcy5kcm9wZG93bkZsYWcgPSBmYWxzZTtcclxuICAgICB9IGVsc2UgaWYgKHR5cCA9PSBcIkNoZWNrYm94XCIpIHtcclxuICAgICAgIHRoaXMuY2hlY2tib3hGbGFnID0gZmFsc2U7XHJcbiAgICAgfSBlbHNlIGlmICh0eXAgPT0gXCJCb29rXCIpIHtcclxuICAgICAgIHRoaXMuYm9va0ZsYWcgPSBmYWxzZTtcclxuICAgICB9IGVsc2UgaWYgKHR5cCA9PSAnTGlzdCcpe1xyXG4gICAgICAgdGhpcy5saXN0RmxhZyA9IGZhbHNlO1xyXG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiVGltZVwiKSB7XHJcbiAgICAgICB0aGlzLmR0RmxhZyA9IGZhbHNlO1xyXG4gICAgICAgdGhpcy50aW1lRmxhZyA9IGZhbHNlO1xyXG4gICAgIH0gZWxzZSBpZiAodHlwID09IFwiRGF0ZVwiKSB7XHJcbiAgICAgICB0aGlzLmR0RmxhZyA9IGZhbHNlO1xyXG4gICAgICAgdGhpcy5kYXRlRmxhZyA9IGZhbHNlO1xyXG4gICAgIH1cclxuICAgfVxyXG4gfVxyXG5cclxuIHNldE9wdGlvbnMocmVjb3Jkcykge1xyXG4gICBmb3IgKHZhciBvcHQgb2YgcmVjb3Jkcykge1xyXG4gICAgIHZhciBvdiA9IG5ldyBPcHRpb25WYWx1ZSgpO1xyXG4gICAgIG92LmlkID0gb3B0LmlkO1xyXG4gICAgIG92Lk5hbWUgPSBvcHQuTmFtZTtcclxuICAgICBvdi52YWx1ZSA9IG9wdC52YWx1ZTtcclxuICAgICBvdi5uZXh0UXVlc3Rpb24gPSBvcHQubmV4dFF1ZXN0aW9uO1xyXG4gICAgIG92LmNoZWNrZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgaWYgKFxyXG4gICAgICAgdGhpcy5pbnBWYWx1ZSAmJlxyXG4gICAgICAgdGhpcy5pbnBWYWx1ZS5zcGxpdChcIkBAIyMkJFwiKS5pbmNsdWRlcyhvcHQudmFsdWUpXHJcbiAgICAgKSB7XHJcbiAgICAgICBvdi5jaGVja2VkID0gdHJ1ZTtcclxuICAgICB9XHJcblxyXG4gICAgIHRoaXMub3B0aW9uVmFsdWVzLnB1c2gob3YpO1xyXG4gICB9XHJcbiB9XHJcblxyXG4gLy8gQ2FwdHVyZSBhbmQgUHJvY2VzcyBDaGlsZCBFdmVudFxyXG4gY2hpbGRFdmVudENhcHR1cmUoZXZlbnQsIHF1ZXM/OmFueSkge1xyXG4gICBjb25zb2xlLmxvZygnaW5zaWRlIGNoaWxkRXZlbnRDYXB0dXJlICcpO1xyXG4gICBjb25zb2xlLmxvZyhldmVudCk7XHJcbiAgIHRoaXMuY2hhbmdlU2VydmljZS5hbm5vdW5jZUNoYW5nZShldmVudCk7XHJcbiAgIC8vIEhBIDMxLUpBTi0yNCBBc3NpZ24gdmFsdWVzIHRvIGRyb3Bkb3duIHF1ZXN0aW9uXHJcbiAgIHF1ZXMuaW5wdXQgPSBldmVudD8udmFsdWVPYmo7XHJcbiAgIC8vcXVlcy5pbnB1dCA9IGV2ZW50OyAvLyBoZXJlIHdoZW4gdXNpbmcgdGhlIG5nLXNlbGVjdCBnb3QgZXZlbnQgYXMgdmFsdWVcclxuIH1cclxuXHJcbi8vICBSUyAwNkpBTjI1XHJcbi8vIGZvciByaWNodGV4dFxyXG4gaGFuZGxlUmljaFRleHRDaGFuZ2UodmFsdWU6IHN0cmluZykge1xyXG4gIC8vIHRoaXMuaW5wVmFsdWUgPSB2YWx1ZTtcclxuICAvLyB0aGlzLmNsZWFyRXJyb3IoKTsgXHJcbiAgICBjb25zb2xlLmxvZygnUmljaCBUZXh0IENoYW5nZSBDYXB0dXJlZDonLCB2YWx1ZSk7XHJcbn1cclxuXHJcbiBzZXRTdWJRdWVzdGlvbnMocmVjb3Jkcykge1xyXG4gICAvLyBjb25zb2xlLmxvZygnaW5zaWRlIHNldFN1YlF1ZXN0aW9ucycpO1xyXG4gICAvLyBjb25zb2xlLmxvZyhyZWNvcmRzKTtcclxuICAgdmFyIHFhTWFwID0gbmV3IE1hcCgpO1xyXG4gICAvLyBjb25zb2xlLmxvZyh0aGlzLmlucFZhbHVlKTtcclxuICAgaWYgKHRoaXMuaW5wVmFsdWUpIHtcclxuICAgICB2YXIgYUluZGV4ID0gMDtcclxuICAgICAvLyBzZWFyY2ggY2hhbmdlZCBhcyBzZW1pIGNvbG9uIGJlY2F1c2Ugb2YgYWRkcmVzcyBjb250YWlucyBjb21tYVxyXG4gICAgIGlmICgodGhpcy5pbnBWYWx1ZS5zZWFyY2goXCI7IFwiKSA9PSAtMSkpIHtcclxuICAgICAgLy8gY29uc3Qgd2l0aG91dEFuc3dlclN0cmluZyA9IHRoaXMuaW5wVmFsdWUucmVwbGFjZShcImFuc3dlclN0cmluZzogXCIsIFwiXCIpOyAvL3JlbW92ZSB0aGUgYW5zd2VyIHN0cmluZ1xyXG4gICAgICAvLyB0aGlzLmlucFZhbHVlID0gd2l0aG91dEFuc3dlclN0cmluZztcclxuICAgICAgIHRoaXMuaW5wVmFsdWUgPSB0aGlzLmlucFZhbHVlICsgJ0BAIyMkJCcgO1xyXG4gICAgICAgZm9yICh2YXIgYW5zU3RyIG9mIHRoaXMuaW5wVmFsdWUuc3BsaXQoXCJAQCMjJCRcIikpIHtcclxuICAgICAgICAgYUluZGV4Kys7XHJcbiAgICAgICAgIHFhTWFwLnNldChhSW5kZXgsIGFuc1N0cik7XHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coJ1NldHRpbmcgdGhlIHFhTWFwIGZvciAnICsgYUluZGV4ICsgJyB3aXRoICcgKyBhbnNTdHIpO1xyXG4gICAgICAgfVxyXG4gICAgIH0gZWxzZSB7XHJcbiAgICAgICBmb3IgKHZhciBhbnNTdHIgb2YgdGhpcy5pbnBWYWx1ZS5zcGxpdChcIjsgXCIpKSB7XHJcbiAgICAgICAgIGFJbmRleCsrO1xyXG4gICAgICAgICBxYU1hcC5zZXQoYUluZGV4LCBhbnNTdHIpO1xyXG4gICAgICAgICAvL2NvbnNvbGUubG9nKCdTZXR0aW5nIHRoZSBxYU1hcCAnICsgYUluZGV4ICsgJyB3aXRoICcgKyBhbnNTdHIpO1xyXG4gICAgICAgfVxyXG4gICAgIH1cclxuICAgfVxyXG4gICAvLyBjb25zb2xlLmxvZygnYWZ0ZXIgc2V0dGluZyB2YWx1ZXMgZnJvbSBpbnB2YWx1ZSBxYSBtYXAgYXJlJyk7XHJcbiAgIC8vIGNvbnNvbGUubG9nKHFhTWFwKTtcclxuXHJcbiAgIGZvciAodmFyIHF1ZXMgb2YgcmVjb3Jkcykge1xyXG4gICAgIGlmIChxdWVzLnR5cGUgPT0gXCJGaWxlXCIpIHtcclxuICAgICAgIHRoaXMudmFsdWVOYW1lMSA9IHF1ZXMuYWxsb3dlZEZpbGVFeHRlbnNpb25zO1xyXG4gICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnZhbHVlTmFtZTEpO1xyXG4gICAgIH1cclxuXHJcbiAgICAgdmFyIGFucyA9ICcnO1xyXG4gICAgIGlmIChxYU1hcC5oYXMocXVlcy5xdWVzdGlvbk51bWJlcikpIHtcclxuICAgICAgICAgcXVlcy5pbnB1dCA9IHFhTWFwLmdldChxdWVzLnF1ZXN0aW9uTnVtYmVyKTtcclxuICAgICAgICAgLy8gY29uc29sZS5sb2coJ2FmdGVyIGZldGNoaW5nIG1hcCB2YWx1ZXMnKTtcclxuICAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcy5pbnB1dCk7XHJcbiAgICAgICAgIGlmKHF1ZXMuaW5wdXQuaW5kZXhPZignJCRAQCMjJykgPiAwKXtcclxuICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnYW5zd2VyIHN1cHBvc2VkIHRvIGJlIHRyaW1tZWQnKTtcclxuICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVzLmlucHV0KTtcclxuICAgICAgICAgICBhbnMgPSBxdWVzLmlucHV0LnN1YnN0cmluZyhxdWVzLmlucHV0LmluZGV4T2YoJyQkQEAjIycpKzYscXVlcy5pbnB1dC5sZW5ndGgpO1xyXG4gICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGFucyk7XHJcbiAgICAgICAgICAgcXVlcy5pbnB1dCA9IHF1ZXMuaW5wdXQuc3Vic3RyaW5nKDAscXVlcy5pbnB1dC5pbmRleE9mKCckJEBAIyMnKSk7XHJcbiAgICAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcy5pbnB1dCk7XHJcbiAgICAgICAgIH1cclxuICAgICAgIH1cclxuXHJcbiAgICAgaWYgKChxdWVzLnR5cGUgPT09IFwiRGF0ZVwiKSAmJiAocXVlcy5pc0RhdGVCYWNrd2FyZCB8fCBxdWVzLmlzRGF0ZUZvcndhcmQpKSB7XHJcbiAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGRhdGUgYmFja3dhcmQvZm9yd2FyZCBjb25kJyk7XHJcbiAgICAgICBpZiAocXVlcy5pc0RhdGVCYWNrd2FyZCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGlzRGF0ZUJhY2t3YXJkJyk7XHJcbiAgICAgICAgIHRoaXMubXlEYXRlUGlja2VyT3B0aW9ucy5kaXNhYmxlU2luY2UgPSB7XHJcbiAgICAgICAgICAgeWVhcjogdGhpcy50b2RheS5nZXRGdWxsWWVhcigpLFxyXG4gICAgICAgICAgIG1vbnRoOiB0aGlzLnRvZGF5LmdldE1vbnRoKCkgKyAxLFxyXG4gICAgICAgICAgIGRheTogdGhpcy50b2RheS5nZXREYXRlKCkgKyAxLFxyXG4gICAgICAgICB9O1xyXG4gICAgICAgfVxyXG4gICAgICAgaWYgKHF1ZXMuaXNEYXRlRm9yd2FyZCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAvL2NvbnNvbGUubG9nKCdJbnNpZGUgdGhlIGlzRGF0ZUZvcndhcmQnKTtcclxuICAgICAgICAgdGhpcy5teURhdGVQaWNrZXJPcHRpb25zLmRpc2FibGVVbnRpbCA9IHtcclxuICAgICAgICAgICB5ZWFyOiB0aGlzLnRvZGF5LmdldEZ1bGxZZWFyKCksXHJcbiAgICAgICAgICAgbW9udGg6IHRoaXMudG9kYXkuZ2V0TW9udGgoKSArIDEsXHJcbiAgICAgICAgICAgZGF5OiB0aGlzLnRvZGF5LmdldERhdGUoKSxcclxuICAgICAgICAgfTtcclxuICAgICAgIH1cclxuICAgICAgIC8vY29uc29sZS5sb2codGhpcy5teURhdGVQaWNrZXJPcHRpb25zKTtcclxuICAgICB9XHJcblxyXG4gICAgIHRoaXMuc3ViUXVlc3Rpb25zLnB1c2gocXVlcyk7XHJcbiAgICAgZm9yKHZhciBpPTA7IGk8dGhpcy5zdWJRdWVzdGlvbnMubGVuZ3RoO2krKyl7XHJcbiAgICAgICAvLyB0byBzaG93L2hpZGUgdGhlIGRlcGVuZGVudCBkcm9wZG93biBvbmx5IGZpZWxkIHVzaW5nIHRoZSBkcm9wRG93bk9ubHkgYm9vbGVhblxyXG4gICAgICAgaWYodGhpcy5zdWJRdWVzdGlvbnNbaV0uc2l6ZSA9PSA0KXtcclxuICAgICAgICAgdGhpcy5zdWJRdWVzdGlvbnNbaV0uZHJvcERvd25Pbmx5ID0gdHJ1ZTtcclxuICAgICAgIH1lbHNle1xyXG4gICAgICAgICB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5kcm9wRG93bk9ubHkgPSBmYWxzZTtcclxuICAgICAgIH1cclxuICAgICB9XHJcbiAgICAgaWYoYW5zICE9ICcnKXtcclxuICAgICAgIGZvcih2YXIgYW4gb2YgKGFucy5zcGxpdCgnJCRAQCMjJykpKXtcclxuICAgICAgICAgdmFyIHNRID0gbmV3IFF1ZXN0aW9uKCk7XHJcbiAgICAgICAgIE9iamVjdC5hc3NpZ24oc1EscXVlcyk7XHJcbiAgICAgICAgIHNRLmlucHV0ID0gYW47XHJcbiAgICAgICAgIHRoaXMuc3ViUXVlc3Rpb25zLnB1c2goc1EpO1xyXG4gICAgICAgfVxyXG4gICAgIH1cclxuICAgfVxyXG4gICBpZiAodGhpcy52YWx1ZU5hbWUxICE9IG51bGwgJiYgdGhpcy52YWx1ZU5hbWUxLmxlbmd0aCA+IDApIHtcclxuICAgICB0aGlzLmJvb2tGbGFnQWNjZXB0ID0gdGhpcy52YWx1ZU5hbWUxLnNwbGl0KFwiO1wiKTtcclxuICAgICAvL2NvbnNvbGUubG9nKHRoaXMuc3ViUXVlc3Rpb25zKTtcclxuICAgfVxyXG4gICB0aGlzLnN0cnVjdExvY2FsU3ViUXVlc3Rpb24obnVsbCk7XHJcbiAgIC8vIEhBIDAyRkVCMjQgT24gRWRpdCB0byBkaXNwbGF5IHRoZSB2YWx1ZSB1c2lpbmcgdGhpc1xyXG4gICBpZih0aGlzLmFsbElucHV0VmFsdWVzLmxlbmd0aCA+IDApe1xyXG4gICAgIHRoaXMuc3ViUXVlc3Rpb25zLmZvckVhY2goZWxlbWVudCA9PiB7XHJcbiAgICAgICBmb3IobGV0IHNpbmdsZUlucHV0IG9mIHRoaXMuYWxsSW5wdXRWYWx1ZXMpe1xyXG4gICAgICAgICBpZihlbGVtZW50LmlkID09IHNpbmdsZUlucHV0LmlkKXtcclxuICAgICAgICAgICBlbGVtZW50LmlucHV0ID0gc2luZ2xlSW5wdXQuaW5wdXQ7XHJcbiAgICAgICAgIH1cclxuICAgICAgIH1cclxuICAgICB9KTtcclxuICAgfVxyXG4gfVxyXG5cclxuIG9wdGlvbkNoYW5nZShzZWxWYWx1ZSkge1xyXG4gICBsZXQgcmFkaW9UcmFja2luZ0lkOiBzdHJpbmcgPSBcIlwiO1xyXG4gICBmb3IgKHZhciBvcHQgb2YgdGhpcy5xdWVzdGlvbkl0ZW0ub3B0aW9ucykge1xyXG4gICAgIC8vY29uc29sZS5sb2coJ29wdGlvbkNoYW5nZSBUcmFja2luZ0lkJytvcHQudHJhY2tpbmdJZCk7XHJcbiAgICAgaWYgKG9wdC52YWx1ZSA9PSBzZWxWYWx1ZSkge1xyXG4gICAgICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGlmJytvcHQudHJhY2tpbmdJZClcclxuICAgICAgIHJhZGlvVHJhY2tpbmdJZCA9IG9wdC50cmFja2luZ0lkO1xyXG4gICAgIH1cclxuICAgfVxyXG5cclxuICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KHJhZGlvVHJhY2tpbmdJZCk7XHJcbiAgIHRoaXMuY2xlYXJFcnJvcigpO1xyXG4gICAvLyAvL2NvbnNvbGUubG9nKCdpbnNpZGUgb3B0aW9uQ2hhbmdlIHVzaW5nICcgKyBzZWxWYWx1ZSk7XHJcblxyXG4gICB0aGlzLmlucFZhbHVlID0gc2VsVmFsdWU7XHJcbiB9XHJcblxyXG4gY2xlYXJFcnJvcigpIHtcclxuICAgaWYgKHRoaXMucXVlc3Rpb25JdGVtLmVycm9yKSB7XHJcbiAgICAgdGhpcy5xdWVzdGlvbkl0ZW0uZXJyb3IgPSBudWxsO1xyXG4gICB9XHJcbiB9XHJcblxyXG4gY2xlYXJMb2NhbFN1YlF1ZXNFcnJvcihxdWVzSWQpIHtcclxuICAgcXVlc0lkLmVycm9yID0gbnVsbDtcclxuIH1cclxuXHJcbiBpbnB1dFZhbGlkYXRlKGUpIHtcclxuICAgdmFyIGtleUNvZGUgPSBlLmtleUNvZGUgfHwgZS53aGljaDtcclxuICAgLy8gT25seSBBU0NJSSBjaGFyYWN0ZXIgaW4gdGhhdCByYW5nZSBhbGxvd2VkXHJcbiAgIHZhciBBU0NJSUNvZGUgPSAoZS53aGljaCkgPyBlLndoaWNoIDogZS5rZXlDb2RlO1xyXG4gICBpZiAoQVNDSUlDb2RlID4gMzEgJiYgKEFTQ0lJQ29kZSA8IDQ4IHx8IEFTQ0lJQ29kZSA+IDU3KSl7XHJcbiAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICB9ZWxzZXtcclxuICAgICByZXR1cm4gdHJ1ZTtcclxuICAgfVxyXG4gfVxyXG5cclxuIENDT25DaGFuZ2UoaW5wVmFsdWU6IHN0cmluZykge1xyXG5cclxuICAgICBpZiAoaW5wVmFsdWUubGVuZ3RoID09IDIpIHtcclxuICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XHJcbiAgICAgfVxyXG4gICAgIGVsc2UgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSA3KSB7XHJcbiAgICAgICB0aGlzLmlucFZhbHVlICs9IFwiIFwiO1xyXG4gICAgIH1cclxuICAgICBlbHNlIGlmIChpbnBWYWx1ZS5sZW5ndGggPT0gMTIpIHtcclxuICAgICAgIHRoaXMuaW5wVmFsdWUgKz0gXCIgXCI7XHJcbiAgICAgfVxyXG4gICAgIGVsc2UgaWYgKGlucFZhbHVlLmxlbmd0aCA9PSAxNykge1xyXG4gICAgICAgdGhpcy5pbnBWYWx1ZSArPSBcIiBcIjtcclxuICAgICB9XHJcbiAgICAgZWxzZSBpZiAoaW5wVmFsdWUubGVuZ3RoID09IDIyKSB7XHJcbiAgICAgICB0aGlzLmlucFZhbHVlICs9IFwiIFwiO1xyXG4gICAgIH1cclxuXHJcbiB9XHJcblxyXG4gaXNOb3RWYWxpZEFjY051bWJlcihzOiBzdHJpbmcpIHtcclxuICAgcyA9IHMucmVwbGFjZSgvXFxzKy9nLCBcIlwiKTtcclxuICAgcyA9ICdFUycgKyBzO1xyXG4gICB2YXIgaXNOb3RWYWxpZFN0ciA9IGZhbHNlO1xyXG4gICBpZiAocy5sZW5ndGggPT0gMjQpIHtcclxuICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgIGlmIChpIDw9IDEgJiYgL1thLXpBLVpdLy50ZXN0KHMuY2hhckF0KGkpKSkge1xyXG4gICAgICAgICAvL2NvbnNvbGUubG9nKFwiVmFsaWQgY2hhcjogXCIgKyBzLmNoYXJBdChpKSk7XHJcbiAgICAgICB9IGVsc2UgaWYgKGkgPiAxICYmIC9bMC05XS8udGVzdChzLmNoYXJBdChpKSkpIHtcclxuICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlZhbGlkIG51bWVyaWM6IFwiICsgcy5jaGFyQXQoaSkpO1xyXG4gICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgaXNOb3RWYWxpZFN0ciA9IHRydWU7XHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coXCJOb3QgYSB2YWxpZCBjaGFyXCIpO1xyXG4gICAgICAgfVxyXG4gICAgIH1cclxuICAgfSBlbHNlIHtcclxuICAgICBpc05vdFZhbGlkU3RyID0gdHJ1ZTtcclxuICAgICAvL2NvbnNvbGUubG9nKFwiTm90IGEgdmFsaWQgYWNjIG51bWJlclwiKTtcclxuICAgfVxyXG4gICByZXR1cm4gaXNOb3RWYWxpZFN0cjtcclxuIH1cclxuXHJcbiBjbGVhclNRRXJyb3IocXVlc0lkKSB7XHJcbiAgIHZhciBzcUxpc3QgPSB0aGlzLnN1YlF1ZXN0aW9ucy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uaWQgPT0gcXVlc0lkKTtcclxuICAgZm9yICh2YXIgc3Egb2Ygc3FMaXN0KSB7XHJcbiAgICAgc3EuZXJyb3IgPSBudWxsO1xyXG4gICB9XHJcbiB9XHJcblxyXG4gdXBsb2FkRmlsZShldmVudCxxdWVzPzphbnkpIHtcclxuICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIHVwbG9hZCcpO1xyXG4gICB0aGlzLmNsZWFyRXJyb3IoKTtcclxuICAgdGhpcy5maWxlVHlwZUluY29ycmVjdCA9IGZhbHNlO1xyXG4gICB2YXIgbG9jYWwgPSB0aGlzO1xyXG4gICBsb2NhbC5hdHRhY2htZW50ID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdO1xyXG4gICAvLyBWYWxpZGF0ZSB0aGUgZmlsZSBleHRlbnNpb25cclxuICAgLy9jb25zb2xlLmxvZyhsb2NhbC5hdHRhY2htZW50KTtcclxuICAgbGV0IGZpbGVOYW1lV2l0aFR5cGU6IHN0cmluZyA9XHJcbiAgICAgbG9jYWwuYXR0YWNobWVudCAmJiBsb2NhbC5hdHRhY2htZW50Lm5hbWUudG9Mb3dlckNhc2UoKTtcclxuICAgaWYgKFxyXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLmpwZ1wiKSAmJlxyXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLnBuZ1wiKSAmJlxyXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLnBkZlwiKSAmJlxyXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLmpwZWdcIikgJiZcclxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5oZWljXCIpICYmXHJcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuaGVpZlwiKSAmJlxyXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLkpQR1wiKSAmJlxyXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLlBOR1wiKSAmJlxyXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLlBERlwiKSAmJlxyXG4gICAgICFmaWxlTmFtZVdpdGhUeXBlLmVuZHNXaXRoKFwiLkpQRUdcIikgJiZcclxuICAgICAhZmlsZU5hbWVXaXRoVHlwZS5lbmRzV2l0aChcIi5IRUlDXCIpICYmXHJcbiAgICAgIWZpbGVOYW1lV2l0aFR5cGUuZW5kc1dpdGgoXCIuSEVJRlwiKVxyXG4gICApIHtcclxuICAgICBsb2NhbC5maWxlVHlwZUluY29ycmVjdCA9IHRydWU7XHJcbiAgIH1cclxuICAgLy8gUmV0dXJuIHdoZW4gdGhlIGZpbGUgdHlwZSBpcyBpbmNvcnJlY3RcclxuICAgaWYgKGxvY2FsLmZpbGVUeXBlSW5jb3JyZWN0KSB7XHJcbiAgICAgcmV0dXJuO1xyXG4gICB9XHJcbiAgIGxldCBmaWxlQ29udGVudDogYW55O1xyXG4gICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcclxuXHJcbiAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgZmlsZUNvbnRlbnQgPSByZWFkZXIucmVzdWx0O1xyXG4gICAgIGxvY2FsLmZpbGVFeGNlZWRlZExpbWl0ID0gbG9jYWwuYXR0YWNobWVudC5zaXplID4gMzI0Mjg4MDsgLy9WYWxpZGF0aW5nIGZpbGUgc2l6ZVxyXG4gICAgIC8vIFVwbG9hZCB0aGUgZmlsZSB0byBTYWxlc2ZvcmNlIHdoZW4gdGhlIGxpbWl0IGlzIHdpdGhpbiByYW5nZVxyXG4gICAgIGlmICghbG9jYWwuZmlsZUV4Y2VlZGVkTGltaXQpIHtcclxuICAgICAgIGxldCBmaWxlV3JhcHBlciA9IG5ldyBBdHRhY2htZW50V3JhcHBlcigpO1xyXG4gICAgICAgZmlsZVdyYXBwZXIucGFyZW50SWQgPSBsb2NhbC5hYkl0ZW0uaWQ7XHJcbiAgICAgICBmaWxlV3JhcHBlci5maWxlTmFtZSA9IGxvY2FsLmF0dGFjaG1lbnQubmFtZTtcclxuICAgICAgIGZpbGVXcmFwcGVyLmZpbGVDb250ZW50ID0gZmlsZUNvbnRlbnQ7XHJcbiAgICAgICBsb2NhbC5jcmVhdGVBdHRhY2htZW50KGZpbGVXcmFwcGVyKTtcclxuICAgICAgIHF1ZXMuaW5wdXQgPSBmaWxlV3JhcHBlci5maWxlTmFtZTtcclxuICAgICB9XHJcbiAgIH07XHJcbiAgIHRoaXMuc3Bpbm5lci5zaG93KHRoaXMuc3Bpbm5lck5hbWUpO1xyXG4gICByZWFkZXIucmVhZEFzRGF0YVVSTChldmVudC50YXJnZXQuZmlsZXNbMF0pO1xyXG4gfVxyXG5cclxuIHByaXZhdGUgc3VjY2Vzc0F0dGFjaG1lbnRDcmVhdGUgPSAocmVzcG9uc2UpID0+IHtcclxuICAgbGV0IGNyZWF0ZWRBdHRhY2htZW50OiBBdHRhY2htZW50ID0gbmV3IEF0dGFjaG1lbnQoXHJcbiAgICAgcmVzcG9uc2UuYXR0YWNobWVudElkLFxyXG4gICAgIHJlc3BvbnNlLmF0dGFjaG1lbnROYW1lLFxyXG4gICAgIHRoaXMuYXR0YWNobWVudC5sYXN0TW9kaWZpZWREYXRlXHJcbiAgICk7XHJcbiAgIHRoaXMuYXR0YWNobWVudHMucHVzaChjcmVhdGVkQXR0YWNobWVudCk7XHJcbiAgIHRoaXMuYXR0YWNobWVudHNNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkLCB0aGlzLmF0dGFjaG1lbnRzKTtcclxuICAgdGhpcy5zcGlubmVyLmhpZGUodGhpcy5zcGlubmVyTmFtZSk7XHJcbiB9O1xyXG5cclxuIHByaXZhdGUgc3VjY2Vzc0F0dGFjaG1lbnREZWxldGUgPSAocmVzcG9uc2UpID0+IHtcclxuICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgaWYgKHRoaXMuYXR0YWNobWVudHNbaV0uYXR0YWNobWVudElkID09PSB0aGlzLmF0dGFjaG1lbnRJZCkge1xyXG4gICAgICAgdGhpcy5hdHRhY2htZW50cy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgfVxyXG4gICB9XHJcbiB9O1xyXG5cclxuIHByaXZhdGUgZmFpbHVyZUF0dGFjaG1lbnRDcmVhdGUgPSAocmVzcG9uc2UpID0+IHtcclxuICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZhaWx1cmVBdHRhY2htZW50Q3JlYXRlJyk7XHJcbiB9O1xyXG5cclxuIHByaXZhdGUgZmFpbHVyZUF0dGFjaG1lbnREZWxldGUgPSAocmVzcG9uc2UpID0+IHtcclxuICAgLy9jb25zb2xlLmxvZygnaW5zaWRlIGZhaWx1cmVBdHRhY2htZW50RGVsZXRlJyk7XHJcbiB9O1xyXG5cclxuIGhhbmRsZVN1Ym1pdENsaWNrKCkge1xyXG4gICB0aGlzLmhhbmRsZUV2ZW50LmVtaXQodGhpcy5xYkl0ZW0uc3VibWl0VHJhY2tpbmdJZCk7XHJcbiAgIHRoaXMudXBkYXRlQW5zd2VyQm9vayh0aGlzLmFiSXRlbS5pZCk7XHJcbiB9XHJcblxyXG4gaGFuZGxlQ2FuY2VsQ2xpY2soKSB7XHJcbiAgIHRoaXMuaGFuZGxlRXZlbnQuZW1pdCh0aGlzLnFiSXRlbS5jYW5jZWxUcmFja2luZ0lkKTtcclxuIH1cclxuXHJcbiBwcml2YXRlIGNyZWF0ZUF0dGFjaG1lbnQgPSAoZmlsZVdyYXBwZXI6IGFueSkgPT4ge1xyXG4gICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIikge1xyXG4gICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcclxuICAgICAvLyAgIHRoaXMudGtuLFxyXG4gICAgIC8vICAgW1wiQXR0YWNobWVudFwiLCBcImNyZWF0ZVwiLCBKU09OLnN0cmluZ2lmeShmaWxlV3JhcHBlcildLFxyXG4gICAgIC8vICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudENyZWF0ZSxcclxuICAgICAvLyAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnRDcmVhdGVcclxuICAgICAvLyApO1xyXG4gICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XHJcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcclxuICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xyXG4gICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ0F0dGFjaG1lbnQnLCdjcmVhdGUnLCBKU09OLnN0cmluZ2lmeShmaWxlV3JhcHBlciksSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXHJcbiAgICAgKGRhdGEpPT57XHJcbiAgICAgICBjb25zb2xlLmxvZygndXBkYXRlZCBzdWNjdXNzZnVsbHknKTtcclxuICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudENyZWF0ZShKU09OLnBhcnNlKGRhdGEpKVxyXG4gICAgIH0sKGVycm9yKSA9PiB7XHJcbiAgICAgICB0aGlzLmZhaWx1cmVBdHRhY2htZW50Q3JlYXRlKGVycm9yKTtcclxuICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcclxuICAgICB9XHJcbiAgICAgKVxyXG4gICB9IGVsc2Uge1xyXG4gICAgIC8vIFZEIDE1RkVCMjQgLSB1c2VkIHByb2Nlc3NOZXcgbWV0aG9kXHJcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcclxuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xyXG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XHJcbiAgIC8vIFZEIDEySnVuMjQgLSB0cmFuc2xhdGlvbiBjaGFuZ2VzXHJcbiAgIC8vIFZEIDMxTk9WMjQgcGFyYW0gY2hhbmdlcyB3aXRoIG5ldyBtZXRob2RcclxuICAgIGxldCBwYXJhMyA9IHtcclxuICAgICAgZGF0YVR5cGU6IFwiQXR0YWNobWVudFwiLFxyXG4gICAgICBvcGVyYXRpb246IFwiY3JlYXRlXCIsXHJcbiAgICAgIHBhcmFtMTogSlNPTi5zdHJpbmdpZnkoZmlsZVdyYXBwZXIpLFxyXG4gICAgICBwYXJhbUpTT046IEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSxcclxuICAgICAgbGFuZ3VhZ2VDb2RlIDogJydcclxuICAgIH1cclxuICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXHJcbiAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc0RhdGFcIixcclxuICAgICAgIFtKU09OLnN0cmluZ2lmeShwYXJhMyldLFxyXG4gICAgICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudENyZWF0ZSxcclxuICAgICAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnRDcmVhdGVcclxuICAgICApO1xyXG4gICB9XHJcbiB9XHJcblxyXG4gZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50SWQ6IHN0cmluZykge1xyXG4gICB0aGlzLmF0dGFjaG1lbnRJZCA9IGF0dGFjaG1lbnRJZDtcclxuICAgdGhpcy5oYW5kbGVFdmVudC5lbWl0KFwiZGVsZXRlQXR0YWNobWVudFwiKTtcclxuICAgdGhpcy5kZWxldGVTRkF0dGFjaG1lbnQoYXR0YWNobWVudElkKTtcclxuIH1cclxuXHJcbiBwcml2YXRlIGRlbGV0ZVNGQXR0YWNobWVudCA9IChmaWxlSWQ6IHN0cmluZykgPT4ge1xyXG4gICBpZih0aGlzLnNlcnYgPT0gXCJhcGlcIikge1xyXG4gICAgIC8vIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRGF0YShcclxuICAgICAvLyAgIHRoaXMudGtuLFxyXG4gICAgIC8vICAgW1wiQXR0YWNobWVudFwiLCBcImRlbGV0ZVwiLCBmaWxlSWRdLFxyXG4gICAgIC8vICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudERlbGV0ZSxcclxuICAgICAvLyAgIHRoaXMuZmFpbHVyZUF0dGFjaG1lbnREZWxldGVcclxuICAgICAvLyApO1xyXG4gICAgIGxldCBwYXJhbU1hcCA9IHsgY3JlYXRlQW5zd2VyQm9va0ZsYWc6IGZhbHNlIH07XHJcbiAgICAgcGFyYW1NYXBbJ2NfX3FiX2lkJ10gPSAnJztcclxuICAgICBwYXJhbU1hcFtcImNfX3JlY29yZF9pZFwiXSA9ICcnO1xyXG4gICAgIHRoaXMuZGF0YVNlcnZpY2UuZ2V0QVBJRnJvbU5vZGUoJ0F0dGFjaG1lbnQnLCdkZWxldGUnLGZpbGVJZCAsSlNPTi5zdHJpbmdpZnkocGFyYW1NYXApLHRoaXMuYXBpKS5zdWJzY3JpYmUoXHJcbiAgICAgKGRhdGEpPT57XHJcbiAgICAgICBjb25zb2xlLmxvZygndXBkYXRlZCBzdWNjdXNzZnVsbHknKTtcclxuICAgICAgIGNvbnNvbGUubG9nKGRhdGEpO1xyXG4gICAgICAgdGhpcy5zdWNjZXNzQXR0YWNobWVudERlbGV0ZShKU09OLnBhcnNlKGRhdGEpKVxyXG4gICAgIH0sKGVycm9yKSA9PiB7XHJcbiAgICAgICB0aGlzLmZhaWx1cmVBdHRhY2htZW50RGVsZXRlKGVycm9yKTtcclxuICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBmZXRjaCBxdWVzdGlvbiBib29rcycsIGVycm9yKTtcclxuICAgICB9XHJcbiAgICAgKVxyXG4gICB9IGVsc2Uge1xyXG4gICAgIC8vIFZEIDE1RkVCMjQgLSB1c2VkIHByb2Nlc3NOZXcgbWV0aG9kXHJcbiAgICAgbGV0IHBhcmFtTWFwID0geyBjcmVhdGVBbnN3ZXJCb29rRmxhZzogZmFsc2UgfTtcclxuICAgICBwYXJhbU1hcFsnY19fcWJfaWQnXSA9ICcnO1xyXG4gICAgIHBhcmFtTWFwW1wiY19fcmVjb3JkX2lkXCJdID0gJyc7XHJcbiAgICAgLy8gVkQgMzFOT1YyNCBwYXJhbSBjaGFuZ2VzIHdpdGggbmV3IG1ldGhvZFxyXG4gICAgIGxldCBwYXJhNCA9IHtcclxuICAgICAgZGF0YVR5cGU6IFwiQXR0YWNobWVudFwiLFxyXG4gICAgICBvcGVyYXRpb246IFwiZGVsZXRlXCIsXHJcbiAgICAgIHBhcmFtMTogZmlsZUlkLFxyXG4gICAgICBwYXJhbUpTT046IEpTT04uc3RyaW5naWZ5KHBhcmFtTWFwKSxcclxuICAgICAgbGFuZ3VhZ2VDb2RlIDogJydcclxuICAgIH1cclxuICAgICB0aGlzLnNmU2VydmljZS5yZW1vdGVBY3Rpb24oXHJcbiAgICAgICBcIk54dENvbnRyb2xsZXIucHJvY2Vzc0RhdGFcIixcclxuICAgICAgIFtmaWxlSWQsSlNPTi5zdHJpbmdpZnkocGFyYTQpXSxcclxuICAgICAgIHRoaXMuc3VjY2Vzc0F0dGFjaG1lbnREZWxldGUsXHJcbiAgICAgICB0aGlzLmZhaWx1cmVBdHRhY2htZW50RGVsZXRlXHJcbiAgICAgKTtcclxuICAgfVxyXG4gfVxyXG5cclxuIGdldEZpbGVOYW1lKGZpbGVOYW1ld2l0aElkYW5kVHlwZSkge1xyXG4gICAvL3RydW5jYXRlIGZpbGUgcGF0aFxyXG4gICB2YXIgZmlsZU5hbWVXaXRoVHlwZSA9IGZpbGVOYW1ld2l0aElkYW5kVHlwZS5zdWJzdHIoXHJcbiAgICAgZmlsZU5hbWV3aXRoSWRhbmRUeXBlLmluZGV4T2YoXCI6Ojo6XCIpICsgNFxyXG4gICApO1xyXG4gICByZXR1cm4gZmlsZU5hbWVXaXRoVHlwZTsgLy9maWxlTmFtZVdpdGhUeXBlLnJlcGxhY2UoL14oLiooXFwvfFxcXFwpKSguKykkLywgJyQzJyk7XHJcbiB9XHJcbiBmaWxlVUkoKSB7XHJcbiAgIGlmICh0aGlzLmF0dGFjaG1lbnRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICB9XHJcbiB9XHJcblxyXG4gLy9VcGRhdGUgZnVuY3Rpb24gZm9yIGNhdGVnb3JpemF0aW9uXHJcbiAvLyBzdGVwcGVyQ2F0ZWcoKSB7XHJcbiAvLyAgIHRoaXMuZmlyc3RGb3JtR3JvdXAgPSB0aGlzLl9mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAvLyAgICAgZmlyc3RDdHJsOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAvLyAgIH0pO1xyXG4gLy8gICB0aGlzLnNlY29uZEZvcm1Hcm91cCA9IHRoaXMuX2Zvcm1CdWlsZGVyLmdyb3VwKHtcclxuIC8vICAgICBzZWNvbmRDdHJsOiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAvLyAgIH0pO1xyXG5cclxuIC8vIH1cclxuXHJcbiAvLyBVcGRhdGUgRnVuY3Rpb24gZm9yIHRoZSBQcm9ncmVzcyBCYXJcclxuIHVwZGF0ZVByb2dyZXNzKCkge1xyXG4gICBpZiAodGhpcy5xYkl0ZW0ucHJvZ3Jlc3NCYXIgPT09IHRydWUpIHtcclxuICAgICBsZXQgaiA9IFtdO1xyXG4gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wb3NzaWJpbGl0aWVzLnRvdGFsOyBpKyspIHtcclxuICAgICAgIHZhciBwYXRocG9zcyA9IE9iamVjdC52YWx1ZXModGhpcy5wb3NzaWJpbGl0aWVzLnBhdGhzW2ldLnF1ZXN0aW9ucyk7XHJcbiAgICAgICBpZiAocGF0aHBvc3NbdGhpcy5wYXRocXVlc3Rpb25dID09PSB0aGlzLmN1cnJlbnROYW1lKSB7XHJcbiAgICAgICAgIGoucHVzaChpKTtcclxuICAgICAgICAgdGhpcy5jaGVjayA9IHRydWU7XHJcbiAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICB0aGlzLmNoZWNrID0gZmFsc2U7XHJcbiAgICAgICB9XHJcbiAgICAgfVxyXG4gICAgIGlmIChqLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgdGhpcy5jb3VudCA9IGpbMF07XHJcbiAgICAgfVxyXG4gICAgIGlmIChqLmxlbmd0aCA+IDEpIHtcclxuICAgICAgIHZhciB3aWR0aCA9XHJcbiAgICAgICAgIDkwICogKHRoaXMucXVlc3Rpb25TdGFjay5sZW5ndGggLyB0aGlzLnBvc3NpYmlsaXRpZXMubWF4UXVlc3Rpb25zKTtcclxuICAgICAgIHRoaXMucHJvZ3Jlc3NTdHlsZSA9IE1hdGgucm91bmQod2lkdGgpICsgXCIlXCI7XHJcbiAgICAgfSBlbHNlIGlmIChqLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgdmFyIHdpZHRoID1cclxuICAgICAgICAgOTAgKlxyXG4gICAgICAgICAodGhpcy5xdWVzdGlvblN0YWNrLmxlbmd0aCAvXHJcbiAgICAgICAgICAgdGhpcy5wb3NzaWJpbGl0aWVzLnBhdGhzW3RoaXMuY291bnRdLmNvdW50KTtcclxuICAgICAgIHRoaXMucHJvZ3Jlc3NTdHlsZSA9IE1hdGgucm91bmQod2lkdGgpICsgXCIlXCI7XHJcbiAgICAgfVxyXG4gICAgIHRoaXMucGVyY2VudCA9ICtNYXRoLnJvdW5kKHdpZHRoKTtcclxuICAgfVxyXG4gfVxyXG5cclxuIHRvd25OYW1lKGFyZWEpIHtcclxuICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gYXJlYS50b3duO1xyXG4gICAvL2NvbnNvbGUubG9nKCd0aGlzIHZhbHVlPScrdGhpcy5zZWxlY3RlZFZhbHVlKVxyXG4gICB0aGlzLnRlbXBvQWRkcmVzcyA9IFtdO1xyXG4gfVxyXG5cclxuIGdldFRvd25Mb2NhbCgpIHtcclxuICAgdGhpcy50ZW1wb0FkZHJlc3MgPSBbXTtcclxuICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgZm9yICh2YXIgdmFsIG9mIHRoaXMubG9jYWxhZGRyZXNzKSB7XHJcbiAgICAgICBpZiAoXHJcbiAgICAgICAgIHZhbC50b3duLnN1YnN0cmluZygwLCB0aGlzLnNlbGVjdGVkVmFsdWUubGVuZ3RoKSA9PSB0aGlzLnNlbGVjdGVkVmFsdWVcclxuICAgICAgICkge1xyXG4gICAgICAgICAvL2NvbnNvbGUubG9nKHZhbC5jb3VudHJ5KVxyXG4gICAgICAgICB0aGlzLnRlbXBvQWRkcmVzcy5wdXNoKHZhbCk7XHJcbiAgICAgICAgIC8vY29uc29sZS5sb2coJ3RlbXBvQWRkcmVzcycrdGhpcy50ZW1wb0FkZHJlc3MpXHJcbiAgICAgICAgIGlmICh0aGlzLnRlbXBvQWRkcmVzcy5sZW5ndGggPT0gNikge1xyXG4gICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICB9XHJcbiAgICAgICB9XHJcbiAgICAgfVxyXG4gICB9XHJcbiAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VsZWN0TGlzdFwiKS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xyXG4gICB0aGlzLnNldFNlYXJjaExpc3RXaWR0aCgpO1xyXG4gfVxyXG5cclxuIGNsZWFyTGlzdCgpIHtcclxuICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgdGhpcy50ZW1wb0FkZHJlc3MgPSBbXTtcclxuICAgfSwgNTAwKTtcclxuIH1cclxuXHJcbiBzZXRTZWFyY2hMaXN0V2lkdGgoKSB7XHJcbiAgIC8vdG8gcmVzaXplIHNlYXJjaCBsaXN0IGJhc2VkIG9uIHRoZSBzY3JlZW4gc2l6ZVxyXG4gICBjb25zdCBzZWFyY2hCb3hXaWR0aCA9IHdpbmRvdy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImF1dG9jb21wbGV0ZS1pbnB1dFwiKS5vZmZzZXRXaWR0aDtcclxuICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWxlY3RMaXN0XCIpLnN0eWxlLndpZHRoID0gc2VhcmNoQm94V2lkdGggKyBcInB4XCI7XHJcbiB9XHJcblxyXG4gICBnZXRDb2RlKCl7XHJcbiAgICAgdGhpcy50ZW1wb0FkZHJlc3MgPSBbXTtcclxuICAgICBpZiAodGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUubGVuZ3RoID4gMCkge1xyXG4gICAgICAgZm9yICh2YXIgdmFsIG9mIHRoaXMuYWxsQWRkcmVzcykge1xyXG4gICAgICAgICBpZiAodmFsLnppcENvZGUuc3Vic3RyaW5nKDAsIHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlLmxlbmd0aCkgPT0gdGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUpIHtcclxuICAgICAgICAgICAvL2NvbnNvbGUubG9nKHZhbC5jb3VudHJ5KVxyXG4gICAgICAgICAgIHRoaXMudGVtcG9BZGRyZXNzLnB1c2godmFsKTtcclxuICAgICAgICAgICAvL2NvbnNvbGUubG9nKCd0ZW1wb0FkZHJlc3MnK3RoaXMudGVtcG9BZGRyZXNzKVxyXG4gICAgICAgICAgIGlmICh0aGlzLnRlbXBvQWRkcmVzcy5sZW5ndGggPT0gNikge1xyXG4gICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgfVxyXG4gICAgICAgICB9XHJcbiAgICAgICB9XHJcbiAgICAgfVxyXG4gICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VsZWN0TGlzdFwiKS5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xyXG4gICAgIHRoaXMuc2V0U2VhcmNoTGlzdFdpZHRoKCk7XHJcbiAgIH1cclxuICAgZ2V0UG9zdGFsY29kZSh2YWx1ZSl7XHJcbiAgICB0aGlzLnBsYWNlcz1bXTtcclxuICAgIHRoaXMucHJvdmluY2U9W107XHJcbiAgICAgdmFyIHByb3ZpbmNlO1xyXG4gICAgIHZhciB0b3duO1xyXG4gICAgIHRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlID0gdmFsdWUuemlwQ29kZTtcclxuICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZS5jb3VudHJ5O1xyXG4gICAgIHRoaXMudGVtcG9BZGRyZXNzPVtdO1xyXG5cclxuXHJcbiAgICAgZm9yKHZhciB2YWwgb2YgdGhpcy5sb2NhbGFkZHJlc3Mpe1xyXG4gICAgICAgaWYodGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUgPT0gdmFsLnppcENvZGUgKXtcclxuICAgICAgICAgdGhpcy5wbGFjZXMucHVzaCh2YWwpO1xyXG4gICAgICAgICB0aGlzLnByb3ZpbmNlLnB1c2godmFsKTtcclxuICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsLmNvdW50cnk7XHJcbiAgICAgICAgIHByb3ZpbmNlID0gdmFsLnByb3ZpbmNlXHJcbiAgICAgICAgIHRvd24gPSB2YWwudG93bjtcclxuICAgICAgIH1cclxuICAgICB9XHJcbiAgICAgaWYodGhpcy5wbGFjZXMubGVuZ3RoID09IDEpe1xyXG5cclxuICAgICAgIHRoaXMuc2VsZWN0ZWRQcm92aW5jZSA9cHJvdmluY2U7XHJcbiAgICAgICB0aGlzLnNlbGVjdGVkQ2l0eSA9IHRvd247XHJcbiAgICAgfWVsc2UgaWYodGhpcy5wbGFjZXMubGVuZ3RoID4xIHx8IHRoaXMucGxhY2VzLmxlbmd0aCA9PTApe1xyXG5cclxuICAgICAgICAgdGhpcy5zZWxlY3RlZENpdHkgPScnO1xyXG4gICAgICAgICB0aGlzLnNlbGVjdGVkUHJvdmluY2U9Jyc7XHJcbiAgICAgfVxyXG4gICB9XHJcbiAgIGNsb3NlRHJvcGRvd24oKSB7XHJcbiAgICAgaWYodGhpcy5zZWxlY3RlZFBvc3RhbGNvZGUubGVuZ3RoID09IDUpe1xyXG4gICAgICAgdGhpcy5nZXRQb3N0YWxjb2RlKHt6aXBDb2RlOnRoaXMuc2VsZWN0ZWRQb3N0YWxjb2RlfSk7XHJcbiAgICAgfVxyXG5cclxuICBzZXRUaW1lb3V0KCgpPT4ge1xyXG4gICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWxlY3RMaXN0Jykuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xyXG4gICB9LCA1MDApO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vUGx1cyBidXR0b24gaW1wbGVtZW50YXRpb24uXHJcbiAgc3RydWN0TG9jYWxTdWJRdWVzdGlvbihxdWVzOiBMb2NhbFF1ZXN0aW9uKXtcclxuICAgLy8gY29uc29sZS5sb2coJ2luc2lkZSBzdHJ1Y3RMb2NhbFN1YlF1ZXN0aW9uJyk7XHJcbiAgICAgZm9yKHZhciBpID0gMDsgaSA8IHRoaXMuc3ViUXVlc3Rpb25zLmxlbmd0aDsgaSsrKXtcclxuICAgICAgIHZhciBsb2NhbFN1YlF1ZXN0aW9uID0gbmV3IExvY2FsUXVlc3Rpb24oKTtcclxuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5pZCA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLmlkO1xyXG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLk5hbWUgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5OYW1lO1xyXG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLnF1ZXN0aW9uID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0ucXVlc3Rpb247XHJcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24ucXVlc3Rpb25UZXh0ID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0ucXVlc3Rpb25UZXh0O1xyXG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLnR5cGUgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS50eXBlO1xyXG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLnRpdGxlID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0udGl0bGU7XHJcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uc3ViVGl0bGUgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5zdWJUaXRsZTtcclxuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5pc09wdGlvbmFsID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0uaXNPcHRpb25hbDtcclxuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5lcnJvck1lc3NhZ2UgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5lcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24ubmV4dFF1ZXN0aW9uID0gdGhpcy5zdWJRdWVzdGlvbnNbaV0ubmV4dFF1ZXN0aW9uO1xyXG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLmdyb3VwTmFtZSA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLmdyb3VwTmFtZTtcclxuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi5xdWVzdGlvbk51bWJlciA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLnF1ZXN0aW9uTnVtYmVyO1xyXG4gICAgICAgICBsb2NhbFN1YlF1ZXN0aW9uLmFsbG93ZWRGaWxlRXh0ZW5zaW9ucyA9IHRoaXMuc3ViUXVlc3Rpb25zW2ldLmFsbG93ZWRGaWxlRXh0ZW5zaW9ucztcclxuICAgICAgICAgbG9jYWxTdWJRdWVzdGlvbi51bmlxdWVTdWJRSWQgPSAnJyt0aGlzLnN1YlF1ZXN0aW9uc1tpXS5pZCArIGk7XHJcbiAgICAgICAgIGxvY2FsU3ViUXVlc3Rpb24uaW5wdXQgPSB0aGlzLnN1YlF1ZXN0aW9uc1tpXS5pbnB1dDtcclxuICAgICAgICAgdGhpcy5sb2NhbFN1YlF1ZXN0aW9ucy5wdXNoKGxvY2FsU3ViUXVlc3Rpb24pO1xyXG4gICAgIH1cclxuIC8vIGNvbnNvbGUubG9nKCdmaW5hbCBsb2NhbCBzdWIgcXVlc3Rpb25zJyk7XHJcbiAvLyBjb25zb2xlLmxvZyh0aGlzLmxvY2FsU3ViUXVlc3Rpb25zKTtcclxuIC8vIGNvbnNvbGUubG9nKHRoaXMucXVlc3Rpb25JdGVtLmlkKTtcclxuIHRoaXMubG9jYWxTdWJRTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCx0aGlzLmxvY2FsU3ViUXVlc3Rpb25zKTtcclxuIHRoaXMubG9jYWxTdWJRdWVzdGlvbnMgPSBbXTtcclxuIC8vIGNvbnNvbGUubG9nKCdmaW5hbCBrZXkgbG9jYWxTdWJRTWFwIG1hcCcpO1xyXG4gLy8gY29uc29sZS5sb2codGhpcy5sb2NhbFN1YlFNYXApO1xyXG4gfVxyXG5cclxuIGFkZElucHV0Qm94KHF1ZXN0aW9uOiBMb2NhbFF1ZXN0aW9uLCBpbmRleDogbnVtYmVyKXtcclxuICAgdmFyIGFycmEgPSB0aGlzLmxvY2FsU3ViUU1hcC5nZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQpO1xyXG4gICB2YXIgcUluZGV4ID0gYXJyYS5pbmRleE9mKHF1ZXN0aW9uKTtcclxuICAgdmFyIHF1ZXM6IExvY2FsUXVlc3Rpb24gPSBuZXcgTG9jYWxRdWVzdGlvbigpO1xyXG4gICBPYmplY3QuYXNzaWduKHF1ZXMsIHF1ZXN0aW9uKTtcclxuICAgLy9jb25zb2xlLmxvZygocXVlcy51bmlxdWVTdWJRSWQpLnN1YnN0cmluZygxOCwgKHF1ZXMudW5pcXVlU3ViUUlkKS5sZW5ndGgpKzEpO1xyXG4gICBpZih0aGlzLmtleUluZGV4ID09IGluZGV4KXtcclxuICAgICBxdWVzLnVuaXF1ZVN1YlFJZCA9IHF1ZXMuaWQgKyAoU3RyaW5nKGluZGV4KzEpKTtcclxuICAgICB0aGlzLmtleUluZGV4Kys7XHJcbiAgIH1lbHNle1xyXG4gICAgIHRoaXMua2V5SW5kZXgrKztcclxuICAgICBxdWVzLnVuaXF1ZVN1YlFJZCA9IHF1ZXMuaWQgKyAoU3RyaW5nKHRoaXMua2V5SW5kZXgpKTtcclxuICAgfVxyXG4gICBxdWVzLmlucHV0ID0gJyc7XHJcbiAgIGFycmEuc3BsaWNlKHFJbmRleCsxLCAwLCBxdWVzKTtcclxuXHJcbiAgIHRoaXMubG9jYWxTdWJRTWFwLnNldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCxhcnJhKTtcclxuICAgLy9jb25zb2xlLmxvZyh0aGlzLmxvY2FsU3ViUU1hcCk7XHJcbiB9XHJcblxyXG4gcmVtb3ZlQWRkcmVzcyhxdWVzVW5pcXVlSWQ6IHN0cmluZywgcU5hbWU6IHN0cmluZykge1xyXG4gICAvL2NvbnNvbGUubG9nKHF1ZXNVbmlxdWVJZClcclxuICAgdmFyIHZhbCA9IHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XHJcbiAgIHZhciBrZXlpbmRleCA9IDA7XHJcblxyXG4gICBmb3IobGV0IGk9MDsgaTx2YWwubGVuZ3RoOyBpKyspe1xyXG4gICAgIGlmKHZhbFtpXS5OYW1lID09IHFOYW1lKXtcclxuICAgICAgIGtleWluZGV4Kys7XHJcbiAgICAgfVxyXG4gICB9XHJcblxyXG4gICBpZih0aGlzLmxvY2FsU3ViUU1hcC5oYXModGhpcy5xdWVzdGlvbkl0ZW0uaWQpICYmIGtleWluZGV4ID4xKXtcclxuICAgICB2YXIgcmVvcmRlciA9IHZhbC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udW5pcXVlU3ViUUlkICE9PSBxdWVzVW5pcXVlSWQpXHJcbiAgICAgdGhpcy5sb2NhbFN1YlFNYXAuc2V0KHRoaXMucXVlc3Rpb25JdGVtLmlkLHJlb3JkZXIpO1xyXG4gICAgIGtleWluZGV4LS07XHJcbiAgIH1cclxuIH1cclxuXHJcbiBnZXRMb2NhbFN1YlF1ZXN0aW9ucyhpZDogU3RyaW5nKXtcclxuICAgcmV0dXJuIHRoaXMubG9jYWxTdWJRTWFwLmdldChpZCk7XHJcbiB9XHJcblxyXG4gLy9TaW5nbGUgQWRkIGJ1dHRvbiBmdW5jdGlvbmFsaXR5IGZvciBMaXN0IHR5cGVcclxuQWRkKHF1ZXN0aW9uOiBMb2NhbFF1ZXN0aW9uKXtcclxuICAgdGhpcy5hZGRGbGFnID0gIGZhbHNlO1xyXG4gICB2YXIgYXJyYSA9IHRoaXMubG9jYWxTdWJRTWFwLmdldCh0aGlzLnF1ZXN0aW9uSXRlbS5pZCk7XHJcbiAgIHZhciBpbmRleCAgPSBhcnJhLmxlbmd0aDtcclxuICAgdmFyIGEgPSBhcnJhLnNsaWNlKC0xKS5wb3AoKTtcclxuICAgdGhpcy5pbmRleENvdW50ICA9IGEucXVlc3Rpb25OdW1iZXI7XHJcblxyXG4gICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW5kZXhDb3VudCA7IGkrKykge1xyXG4gICAgIHZhciBxdWVzOiBMb2NhbFF1ZXN0aW9uID0gbmV3IExvY2FsUXVlc3Rpb24oKTtcclxuICAgICBPYmplY3QuYXNzaWduKHF1ZXMsIHF1ZXN0aW9uW2ldKTtcclxuICAgICB0aGlzLmtleUluZGV4Kys7XHJcbiAgICAgcXVlcy51bmlxdWVTdWJRSWQgPSBxdWVzLmlkICsgKFN0cmluZyh0aGlzLmtleUluZGV4KSk7XHJcbiAgICAgcXVlcy5pbnB1dCA9ICcnO1xyXG4gICAgIGFycmEuc3BsaWNlKGluZGV4Kyh0aGlzLmluZGV4Q291bnQtMSksIDAsIHF1ZXMpO1xyXG4gICB0aGlzLmxvY2FsU3ViUU1hcC5zZXQodGhpcy5xdWVzdGlvbkl0ZW0uaWQsYXJyYSk7XHJcbiAgIH1cclxuICAgdGhpcy5hZGRGbGFnID0gdHJ1ZTtcclxuIH1cclxuXHJcbiBoYW5kbGVMb2NhdGlvblNlbGVjdGVkKGxvY2F0aW9uOiBhbnkscXVlczphbnkpIHtcclxuICAgcXVlcy5pbnB1dCA9IGxvY2F0aW9uO1xyXG4gfVxyXG5cclxuIHNlbGVjdGVkSW5wdXQoaW5wdXQ6YW55ICxxdWVzOmFueSl7XHJcbiAgIHF1ZXMuaW5wdXQgPSBpbnB1dDtcclxuIH1cclxuXHJcbiBoYW5kbGVUZXh0YXJlYVZhbHVlQ2hhbmdlKHZhbHVlIDpzdHJpbmcpe1xyXG4gICBjb25zb2xlLmxvZygnU2VsZWN0ZWQgdGV4dC1hcmVhIHRleHQ6JywgdmFsdWUpO1xyXG4gfVxyXG4gZ2V0RGF0YShkYXRhOmFueSl7XHJcbiAgY29uc29sZS5sb2coJ3RhYmxlIGRhdGEnLGRhdGEpO1xyXG4gfVxyXG5cclxuIGRlcGVuZGVudENoYW5nZSh2YWx1ZTphbnkpe1xyXG4gdGhpcy5uZXh0VmFsdWUgPSB2YWx1ZTtcclxuIH1cclxuXHJcbiBkaXNwbGF5RGF0ZShkYXRlU2VsZWN0ZWQ6IGFueSxxdWVzOmFueSl7XHJcbiAgIC8vIFBhcnNlIHRoZSBkYXRlIHN0cmluZyB1c2luZyBtb21lbnQgYW5kIGFzc2lnbiBpdCB0byB0aGlzLnNlbGVjdGVkRGF0ZVxyXG4gICBxdWVzLmlucHV0ID0gbW9tZW50KGRhdGVTZWxlY3RlZC52YWx1ZSAsICdZWVlZLU1NLUREIEhIOm1tOnNzJykuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJykudG9TdHJpbmcoKTtcclxuIH1cclxuXHJcbiBnZXRLZXkoaXRlbTogYW55KTogYW55IHtcclxuICAgcmV0dXJuIE9iamVjdC5rZXlzKGl0ZW0pWzBdO1xyXG4gfVxyXG5cclxuIGdldFZhbHVlKGl0ZW06IGFueSk6IGFueSB7XHJcbiAgIHJldHVybiBPYmplY3QudmFsdWVzKGl0ZW0pWzBdO1xyXG4gfVxyXG59IiwiPCEtLSBTcGlubmVyIC0tPlxyXG48bmd4LXNwaW5uZXIgc2l6ZT1cIm1lZGl1bVwiIFtuYW1lXT1cInNwaW5uZXJOYW1lXCIgW3R5cGVdPVwic3Bpbm5lclR5cGVcIj48L25neC1zcGlubmVyPlxyXG48IS0tIGN1c3RvbSBsb2FkZXIgLS0+XHJcbjwhLS0gPGFwcC1sb2FkZXI+PC9hcHAtbG9hZGVyPiAtLT5cclxuPCEtLSBCYWNrIFByb2Nlc3NpbmcgLS0+XHJcbjwhLS0gPGRpdiAqbmdJZj1cImJhY2tpY29uID09IGZhbHNlXCIgPlxyXG4gIDxkaXYgY2xhc3M9XCJiYWNraWNvblwiID5cclxuICAgIDxidXR0b24gKGNsaWNrKT1cImhhbmRsZUJhY2tDbGljaygpXCIgW2NsYXNzXT1cIiBhYkl0ZW0/LnN0YXR1cyA9PSAnQ29tcGxldGVkJyA/ICdzdW1tYXJ5LXZvbHZlcic6J2FwcC1iYWNrMSdcIj5cclxuICAgIDxpbWcgY2xhc3M9XCJpY29uLWFycm93LWJhY2tcIiBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tYXJyb3ctYmFjay5wbmdcIiBhbHQ9XCJTY3JvbGwgZG93blwiPiB7eyBxYkl0ZW0/LmJhY2sgfX1cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj4gLS0+XHJcblxyXG48IS0tIFF1ZXN0aW9uIEhhbmxkaW5nIC0tPlxyXG48IS0tIFZEIHJlbW92ZWQgdW53YW50ZWQgY29uZGl0aW9uIC0tPlxyXG48IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XHJcbjxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW1cIiBjbGFzcz1cInF1ZXN0aW9uZGl2MSBwYWRkLWJvdHRvbVwiPlxyXG4gIDwhLS0gUHJvZ3Jlc3MgQmFyICYgVGl0bGUgLS0+XHJcbiAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS50aXRsZVwiPlxyXG4gICAgPGgxPnt7IHF1ZXN0aW9uSXRlbT8udGl0bGUgfX08L2gxPlxyXG4gICAgPGRpdj57eyBxdWVzdGlvbkl0ZW0/LnN1YlRpdGxlIH19PC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gUHJvZ3Jlc3MgJiBHcm91cGluZyAtLT5cclxuICA8ZGl2PlxyXG4gICAgPCEtLSBQaWUgQ2hhcnQgUHJvZ3Jlc3MgLS0+XHJcbiAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgYmdDb2xvcjogcWJJdGVtPy5wcm9ncmVzc0JhciB9XCI+XHJcbiAgICAgIDxkaXYgaWQ9XCJueHQtcHJvZ3Jlc3NcIiAqbmdJZj1cInFiSXRlbT8ucHJvZ3Jlc3NCYXJcIj5cclxuICAgICAgICA8Y2lyY2xlLXByb2dyZXNzIGNsYXNzPVwidGl0bGViYXJcIiBbcGVyY2VudF09XCJ0aGlzLnBlcmNlbnRcIiBbcmFkaXVzXT1cIjQwXCIgW3NwYWNlXT1cIi00XCIgW291dGVyU3Ryb2tlV2lkdGhdPVwiNFwiXHJcbiAgICAgICAgW2lubmVyU3Ryb2tlV2lkdGhdPVwiNFwiIFtvdXRlclN0cm9rZUNvbG9yXT1cIicjZTBiMWIwJ1wiIFtpbm5lclN0cm9rZUNvbG9yXT1cIicjZTdlOGVhJ1wiIFthbmltYXRpb25dPVwidHJ1ZVwiIFtiYWNrZ3JvdW5kUGFkZGluZ109IFwiMFwiXHJcbiAgICAgICAgW2JhY2tncm91bmRDb2xvcl09IFwiJyNkZDJlMTMnXCIgW2JhY2tncm91bmRHcmFkaWVudFN0b3BDb2xvcl09XCInI2Y5YmZiZCdcIiBbdGl0bGVDb2xvcl09XCInI2YzZWRlZCdcIiBcclxuICAgICAgICBjbGFzcz1cIm5nLXN0YXItaW5zZXJ0ZWRcIiBbdGl0bGVdPVwidGhpcy5wZXJjZW50KyclJ1wiIFtzaG93U3VidGl0bGVdPVwiZmFsc2VcIiBbc2hvd0JhY2tncm91bmRdPVwidHJ1ZVwiIFthbmltYXRpb25EdXJhdGlvbl09XCIzMDBcIlxyXG4gICAgICAgIFtzdGFydEZyb21aZXJvXT1cImZhbHNlXCIgW3Jlc3BvbnNpdmVdPVwiZmFsc2VcIiA+XHJcbiAgICAgICAgPC9jaXJjbGUtcHJvZ3Jlc3M+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XHJcbiAgICA8IS0tIFNob3cgdGhlIEdyb3VwL01vZHVsZSByZWxhdGVkIHRvIHRoZSBQcm9ncmVzcyAtLT5cclxuICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uZ3JvdXBOYW1lICYmIHFiSXRlbS5wcm9ncmVzc0JhclwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwieyBxdWVzdGlvbmFsaWduOiAhcWJJdGVtPy5wcm9ncmVzc0JhciB9XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJueHQtbGFyZ2VUaXRsZVwiPlxyXG4gICAgICAgIDxoMyBjbGFzcz1cIm15dC1mb250NiBteXQtdGV4dDNcIj5cclxuICAgICAgICAgIHt7IHF1ZXN0aW9uSXRlbT8uZ3JvdXBOYW1lIH19XHJcbiAgICAgICAgPC9oMz5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLnN1YlRleHQgIT0gJ8K/RW4gcXXDqSBwYcOtcyBvY3VycmnDsz8nXCIgY2xhc3M9XCJteXQtZm9udDUgbXl0LXRleHQxXCI+e3txdWVzdGlvbkl0ZW0/LnN1YlRleHR9fTwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uc3ViVGV4dCA9PT0gJ8K/RW4gcXXDqSBwYcOtcyBvY3VycmnDsz8nXCIgY2xhc3M9XCJteXQtZm9udDEwIG15dC10ZXh0MlwiPnt7cXVlc3Rpb25JdGVtPy5zdWJUZXh0fX08L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XHJcbiAgPCEtLSBRdWVzdGlvbiBIYW5kbGluZyAtLT5cclxuICAgIDwhLS0gVkQgMTBBdWcyNC0gcXVlc3Rpb24gbm8gLS0+XHJcbiAgPGRpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0ucXVlc3Rpb25UZXh0XCIgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiPlxyXG4gICAgICA8c3Bhbj57e3F1ZXN0aW9uSXRlbT8ucXVlc3Rpb25OdW1iZXJ9fS48L3NwYW4+XHJcbiAgICAgIDxwIGNsYXNzPVwibnh0LWxhYmVsXCIgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0KVwiPlxyXG4gICAgICAge3txdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dH19XHJcbiAgICAgIDwvcD5cclxuICAgIDwvZGl2PlxyXG4gICAgPCEtLSBUaXRsZSAtLT5cclxuICAgIDwhLS0gPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5pc1RpdGxlXCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0udHlwZSAhPSAnQm9vaycgJiYgcXVlc3Rpb25JdGVtLnF1ZXN0aW9uTnVtYmVyIT0nNicgJiYgcXVlc3Rpb25JdGVtLnF1ZXN0aW9uTnVtYmVyIT0nOSdcIj4gXHJcbiAgICAgICAgPGgzIGNsYXNzPVwicXVlc3Rpb25hbGlnbiAgbXl0LWZvbnQzIG15dC1hbGlnbiBteXQtdGV4dDRcIiBbaW5uZXJIVE1MXT1cImdldFRleHQocXVlc3Rpb25JdGVtPy5xdWVzdGlvblRleHQpXCI+XHJcbiAgICAgICAgICB7e3F1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0fX1cclxuICAgICAgICA8L2gzPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PiAtLT5cclxuICAgIDwhLS0gSEEgMzEtSkFOLTI0IFJlbW92ZWQgdGhlIHVud2FudGVkIHN0eWxpbmcgY2xhc3MgLS0+XHJcbiAgICA8IS0tIDxkaXYgKm5nSWY9XCIhcXVlc3Rpb25JdGVtLmlzVGl0bGVcIiBbY2xhc3NdPVwicWJJdGVtLmlzU2hlbmdlbCA/ICdoZWFkZXItc3R5bGUnIDogJ3F1ZXN0aW9uLWYtc2l6ZSdcIj5cclxuICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImdldFRleHQocXVlc3Rpb25JdGVtPy5xdWVzdGlvblRleHQpXCIgPlxyXG4gICAgICAgIHt7IHF1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0IH19XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+IC0tPlxyXG5cclxuICAgIDwhLS0gVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCB3aXRoIEN1c3RvbSBTdHlsaW5nIC0gTVIgLSAxMUFVRzIzIC0tPlxyXG4gICAgPCEtLSA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLnR5cGUgPT0gJ0Jvb2snXCI+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0ucXVlc3Rpb25OdW1iZXI9PSc2J1wiPlxyXG4gICAgICAgIDxoMyBjbGFzcz1cIm15dC0zMjFcIiBbaW5uZXJIVE1MXT1cImdldFRleHQocXVlc3Rpb25JdGVtPy5xdWVzdGlvblRleHQpXCI+XHJcbiAgICAgICAgICB7eyBxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dCB9fVxyXG4gICAgICAgIDwvaDM+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+IC0tPlxyXG4gICAgXHJcbiAgICA8IS0tIFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgd2l0aCBDdXN0b20gU3R5bGluZyAtIE1SIC0gMTFBVUcyMyAtLT5cclxuICAgIDwhLS0gPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS50eXBlID09ICdGaWxlJyBcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbS5xdWVzdGlvbk51bWJlcj09JzknXCI+XHJcbiAgICAgICAgPGgzIGNsYXNzPVwibXl0LTM0NVwiIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dClcIj5cclxuICAgICAgICAgIHt7cXVlc3Rpb25JdGVtPy5xdWVzdGlvblRleHR9fVxyXG4gICAgICAgIDwvaDM+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+IC0tPlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIEFkZGl0aW9uYWwgSW5mbyAtLT5cclxuICA8IS0tIFRoZSBiZWxvdyBjb2RlIGNhbiBiZSB3cml0dGVuIGVmZmVjdGl2ZWx5IG5lc3RlZCBuZ0lmIGZvciBSaWNoIFRleHQgJiBPdGhlciBvbncgZm9yIFByb2dyZXNzIEJhciAtLT5cclxuICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb25JdGVtLmFkZGl0aW9uYWxSaWNoQ29udGVudCAmJiBxYkl0ZW0ucHJvZ3Jlc3NCYXJcIiA+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwibnh0LWFkZGl0aW9uYWwgXCIgW2lubmVySFRNTF09XCJpbm5lcmh0bWxcIj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uYWRkaXRpb25hbFJpY2hDb250ZW50ICYmICFxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJpbmZvLWFsZXJ0IHF1ZXMtYWxlcnQxXCI+XHJcbiAgICAgIDxpIGNsYXNzPVwiZmEgZmEtaW5mbyBmYS0zeCBpcG9zaXRpb24gaWNvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5mb2RpdlwiIFtpbm5lckhUTUxdPVwiaW5uZXJodG1sXCI+PC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBEcm9wZG93bi0tPlxyXG4gIDxkaXYgKm5nSWY9XCJkcm9wZG93bkZsYWdcIiA+XHJcbiAgICA8ZGl2IGNsYXNzPVwibnh0LWRpcy1mbGV4XCI+XHJcbiAgICAgIDxzZWxlY3QgY2xhc3M9XCJueHRkcm9wZG93blwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgJ2R0LWxpbmUgbnh0LW15dC1hbGlnbjMgbnh0LW15dC1hbGlnbjIgZHBEb3duIG54dC1kcm9wYm94IGRvd24xIG15dC1kcm9wYm94IG15dC1ib3JkZXItciBteXQtZm9udDEnOiBxYkl0ZW0/LnByb2dyZXNzQmFyLFxyXG4gICAgICAgICAgJ2N1c3RvbS1zZWxlY3QnOiAhcWJJdGVtPy5wcm9ncmVzc0JhclxyXG4gICAgICAgIH1cIiBjbGFzcz1cIm1yLXNtLTIgZGQtaGVpZ2h0IG54dC1kcm9wYm94IFwiICBpZD1cImRyb3Bkb3duXCIgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIChjaGFuZ2UpPVwiY2xlYXJFcnJvcigpXCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3tcclxuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtPy5lcnJvciA/ICdyZWQnIDogaW5wVmFsdWU/Lmxlbmd0aCA+IDAgPyAnI2ZmZicgOiAnJ1xyXG4gICAgICAgIH19XCIgc3R5bGUuY29sb3I9XCJ7eyBxdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiPlxyXG4gICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IG9wdCBvZiBxdWVzdGlvbkl0ZW0ub3B0aW9uc1wiIGNsYXNzPVwib3B0aW9uXCIgdmFsdWU9XCJ7eyBvcHQudmFsdWUgfX1cIj5cclxuICAgICAgICAgIHt7IG9wdC52YWx1ZSB9fVxyXG4gICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XHJcbiAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIi5cIiBkaXNhYmxlZCBoaWRkZW4+e3sncGxlYXNlTWFrZUNob2ljZScgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19PC9vcHRpb24+XHJcbiAgICAgIDwvc2VsZWN0PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS1WRCBSYWRpbyB1cGRhdGUgLS0+XHJcbiAgPGRpdiAqbmdJZj1cInJhZGlvRmxhZyB8fCBkYXRhRmxhZ1wiIGNsYXNzPVwiXCI+XHJcbiAgICA8c3BhbiAqbmdJZj1cInRoaXMucXVlc3Rpb25JdGVtLmVycm9yXCIgY2xhc3M9XCJueHQtZXJyb3ItbXNnXCI+IHt7IHF1ZXN0aW9uSXRlbT8uZXJyb3JNZXNzYWdlIH19PC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cIm54dC1jdXN0b20tcmFkaW8tY29udGFpbmVyXCI+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdCBvZiBxdWVzdGlvbkl0ZW0ub3B0aW9uc1wiIFxyXG4gICAgICBbY2xhc3NdPVwiIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yID8gJ254dC1jdXN0b20tcmFkaW8tb3B0aW9uIGludmFsaWQnIDogJ254dC1jdXN0b20tcmFkaW8tb3B0aW9uJ1wiPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgdHlwZT1cInJhZGlvXCJcclxuICAgICAgICAgIFtpZF09XCJvcHQudmFsdWVcIlxyXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiXHJcbiAgICAgICAgICBuYW1lPVwiaW5wVmFsdWVcIlxyXG4gICAgICAgICAgW3ZhbHVlXT1cIm9wdC52YWx1ZVwiXHJcbiAgICAgICAgICAoY2hhbmdlKT1cIm9wdGlvbkNoYW5nZShvcHQudmFsdWUpXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cIm54dC1yYWRpby1sYWJlbFwiIFtmb3JdPVwib3B0LnZhbHVlXCI+IHt7IG9wdC52YWx1ZSB9fTwvbGFiZWw+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSA8ZGl2IGNsYXNzPVwibnh0LWRpcy1mbGV4XCI+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IG9wdCBvZiBxdWVzdGlvbkl0ZW0ub3B0aW9ucy5yZWNvcmRzXCIgY2xhc3M9XCJyYWRpbyBueHQtcmFkaW9PcHRpb25cIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJueHQtcmFkaW9jb250YWluZXIgY29udGFpbmVyIG15dC1mb250NFwiPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIFtpZF09XCJvcHQuaWRcIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgbmFtZT1cImlucFZhbHVlXCIgW3ZhbHVlXT1cIm9wdC52YWx1ZVwiXHJcbiAgICAgICAgICAgIChjaGFuZ2UpPVwib3B0aW9uQ2hhbmdlKG9wdC52YWx1ZSlcIiAvPlxyXG4gICAgICAgICAge3sgb3B0LnZhbHVlIH19XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj4gLS0+XHJcbiAgPC9kaXY+ICBcclxuICA8IS0tIENoZWNrYm94IC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJjaGVja2JveEZsYWdcIiBjbGFzcz1cIlwiPlxyXG4gICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uSXRlbT8uZXJyb3JcIiBjbGFzcz1cImNvbmQtZGl2MlwiPlxyXG4gICAgICB7eyBxdWVzdGlvbkl0ZW0/LmVycm9yTWVzc2FnZSB9fVxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwibnh0LWNoZWNrYm94LWNvbnRhaW5lclwiPlxyXG4gICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIG9wdGlvblZhbHVlc1wiIGNsYXNzPVwibnh0LWNoZWNrYm94LXdyYXBwZXJcIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJueHQtY29udGFpbmVyMVwiPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJueHQtY2hlY2tib3hcIiBbaWRdPVwiaXRlbS5pZFwiIFsobmdNb2RlbCldPVwiaXRlbS5jaGVja2VkXCIgKGNsaWNrKT1cImNsZWFyRXJyb3IoKVwiIC8+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm54dC1jaGVja2JveC1sYWJlbFwiPnt7IGl0ZW0udmFsdWUgfX08L3NwYW4+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSBUZXh0IC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJ0ZXh0RmxhZ1wiPlxyXG4gICAgPCEtLSBIQSAzMS1KQU4tMjQgVG8gcmVkdWNlIHRoZSBtYXJnaW4gLS0+XHJcbiAgICA8ZGl2IFtjbGFzc109XCInY29sLW1kLScgKyBxdWVzdGlvbkl0ZW0/LnNpemUgKyAnIHBhZGRpbmdub25lJ1wiPlxyXG4gICAgICA8aW5wdXQgY2xhc3M9XCJueHQtaW5wdXRcIiB0eXBlPVwidGV4dFwiIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiBcclxuICAgICAgIGlkPVwidGV4dC1pbnB1dC1pZFwiIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7XHJcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbT8uZXJyb3JcclxuICAgICAgICAgICAgPyAncmVkJ1xyXG4gICAgICAgICAgICA6ICcnXHJcbiAgICAgICAgfX1cIiBvbmlucHV0PVwidGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teYS16QS1aMC05XFxzLjo7LD9dL2csJycpO1wiIC8+XHJcbiAgICAgIDwhLS0gPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBueHQtY2hlY2staWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwiaW5wVmFsdWU/Lmxlbmd0aCA+IDBcIj48L2k+IC0tPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gVGV4dCBBcmVhIC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJ0YUZsYWdcIiA+XHJcbiAgICA8ZGl2PlxyXG4gICAgICA8dGV4dGFyZWEgY2xhc3M9XCJueHQtaW5wdXQgbnh0LXRleHQtYXJlYVwiIGlkPVwidGEtaW5wdXQtaWRcIiBbKG5nTW9kZWwpXT1cImlucFZhbHVlXCIgKGNsaWNrKT1cImNsZWFyRXJyb3IoKVwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7XHJcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbT8uZXJyb3JcclxuICAgICAgICAgICAgPyAncmVkJ1xyXG4gICAgICAgICAgICA6IGlucFZhbHVlPy5sZW5ndGggPiAwICYmIHRhRm9jdXNPdXRcclxuICAgICAgICAgICAgPyAnIzg3YmUxYydcclxuICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgIH19XCIgKGZvY3Vzb3V0KT1cInRhRm9jdXNPdXQgPSB0cnVlXCJcclxuICAgICAgICBvbmlucHV0PVwidGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teYS16QS1aMC05XFxzLjo7LD9dL2csJycpO1wiPjwvdGV4dGFyZWE+XHJcbiAgICAgIDwhLS0gPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBueHQtY2hlY2staWNvblwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwiaW5wVmFsdWU/Lmxlbmd0aCA+IDAgJiYgdGFGb2N1c091dFwiIHN0eWxlPVwiZGlzcGxheTogZmxleDsganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcIj48L2k+IC0tPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG5cclxuICA8IS0tIFJTIDA2SkFOMjUgLS0+XHJcbiAgIDwhLS0gZm9yIHJpY2ggdGV4dCAtLT5cclxuICA8ZGl2ICpuZ0lmPVwicnRhRmxhZ1wiPlxyXG4gICAgPGRpdiBbY2xhc3NdPVwiJ2NvbC1tZC0nICsgcXVlc3Rpb25JdGVtPy5zaXplICsgJyBwYWRkaW5nbm9uZSdcIj5cclxuICAgICAgPGFwcC1jdXN0b20tcmljaC10ZXh0XHJcbiAgICAgICAgW3ZhbHVlXT1cImlucFZhbHVlXCJcclxuICAgICAgICBbcXVlc3Rpb25dPVwicXVlc3Rpb25JdGVtXCJcclxuICAgICAgICBbZXJyb3JdPVwicXVlc3Rpb25JdGVtPy5lcnJvclwiXHJcbiAgICAgICAgKHRleHRWYWx1ZUNoYW5nZSk9XCJoYW5kbGVSaWNoVGV4dENoYW5nZSgkZXZlbnQpXCI+XHJcbiAgICAgIDwvYXBwLWN1c3RvbS1yaWNoLXRleHQ+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICBcclxuICAgICAgICBcclxuICA8IS0tIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdSaWNoVGV4dEFyZWEnXCI+XHJcblxyXG4gICAgPGFwcC1jdXN0b20tcmljaC10ZXh0XHJcbiAgICAgIFt2YWx1ZV09XCJxdWVzLmlucHV0XCJcclxuICAgICAgW3Jvd3NdPVwiM1wiXHJcbiAgICAgIFtlcnJvcl09XCJxdWVzLmVycm9yXCIgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInF1ZXMucXVlc3Rpb24gXCIgXHJcbiAgICAgICh0ZXh0VmFsdWVDaGFuZ2UpPVwiaGFuZGxlUmljaFRleHRDaGFuZ2UoJGV2ZW50KVwiPlxyXG4gICAgPC9hcHAtY3VzdG9tLXJpY2gtdGV4dD5cclxuPC9kaXY+IC0tPlxyXG4gIDwhLS0gQ0MgTnVtYmVyIEZvcm1hdCAtLT5cclxuICA8IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XHJcbiAgPGRpdiAqbmdJZj1cIm51bWJlckZsYWdcIiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgPGRpdiBjbGFzcz1cIm54dC1kaXMtZmxleFwiPlxyXG4gICAgICA8aW5wdXQgdHlwZT1cIlRleHRcIiBwbGFjZWhvbGRlcj1cIjAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwXCIgW25nQ2xhc3NdPVwieyBib3hvdXRsaW5lOiBxYkl0ZW0/LnByb2dyZXNzQmFyIH1cIlxyXG4gICAgICAgIFsobmdNb2RlbCldPVwiaW5wVmFsdWVcIiBpZD1cIm51bWJlci1pbnB1dC1pZFwiIChuZ01vZGVsQ2hhbmdlKT1cIkNDT25DaGFuZ2UoJGV2ZW50KVwiIHJlcXVpcmVkPVwiXCIgbWF4bGVuZ3RoPVwiMjlcIlxyXG4gICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIiBvbmlucHV0PVwidGhpcy52YWx1ZT10aGlzLnZhbHVlLnJlcGxhY2UoL1teMC05IF0vZywnJyk7XCJcclxuICAgICAgICBzdHlsZT1cIndpZHRoOi13ZWJraXQtZmlsbC1hdmFpbGFibGU7XCIgc3R5bGUuYm9yZGVyLWNvbG9yPVwie3tcclxuICAgICAgICAgIHRoaXMucXVlc3Rpb25JdGVtLmVycm9yXHJcbiAgICAgICAgICAgID8gJ3JlZCdcclxuICAgICAgICAgICAgOiBpbnBWYWx1ZT8ubGVuZ3RoID4gMFxyXG4gICAgICAgICAgICA/ICcjODdiZTFjJ1xyXG4gICAgICAgICAgICA6ICcnXHJcbiAgICAgICAgfX1cIiAvPlxyXG4gICAgICA8aSBjbGFzcz1cImZhIGZhLWNoZWNrXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgc3R5bGU9XCJjb2xvcjogIzg3YmUxYzsgbWFyZ2luLWxlZnQ6IC0ycmVtOyB6LWluZGV4OiAxOyBwYWRkaW5nOiA1cHg7XCJcclxuICAgICAgICAqbmdJZj1cImlucFZhbHVlPy5sZW5ndGggPiAwXCI+PC9pPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPCEtLSBFTkQtLT5cclxuXHJcbiAgPCEtLSBBbHBoYU51bWVyaWMgLS0+XHJcbiAgPGRpdiAqbmdJZj1cImFscGhhbnVtZXJpY0ZsYWdcIiBjbGFzcz1cImNvbC1tZC0xMlwiPiA8IS0tVUkgbm90IGNvbXBsZXRlZC0tPlxyXG4gICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOnJlbGF0aXZlO1wiPlxyXG4gICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxyXG4gICAgICA8aW5wdXQgdHlwZT10ZXh0IHBsYWNlaG9sZGVyPVwie3snemVyb09mWmVybycgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19XCIgc3R5bGU9XCJwYWRkaW5nOjVweCA1cHggNXB4IDE1MHB4O1wiIGlkPVwieW91cmlkaGVyZVwiLz5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG5cclxuICA8IS0tIEVtYWlsIC0tPlxyXG4gIDwhLS0gUlMgMDlERUMyNCBDaGFuZ2VkIGtleXMtLT5cclxuICA8ZGl2ICpuZ0lmPVwiZW1haWxGbGFnXCIgY2xhc3M9XCJjb2wtbWQtMTJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJueHQtZGlzLWZsZXhcIj5cclxuICAgICAgPGlucHV0IHR5cGU9XCJlbWFpbFwiIFtuZ0NsYXNzXT1cInsgYm94b3V0bGluZTogcWJJdGVtPy5wcm9ncmVzc0JhciB9XCIgWyhuZ01vZGVsKV09XCJpbnBWYWx1ZVwiIGlkPVwiZW1haWwtaW5wdXQtaWRcIlxyXG4gICAgICAgIHJlcXVpcmVkPVwiXCIgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7XHJcbiAgICAgICAgICB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvclxyXG4gICAgICAgICAgICA/ICdyZWQnXHJcbiAgICAgICAgICAgIDogaW5wVmFsdWU/Lmxlbmd0aCA+IDBcclxuICAgICAgICAgICAgPyAnIzg3YmUxYydcclxuICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgIH19XCIgLz5cclxuICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVja1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIHN0eWxlPVwiY29sb3I6ICM4N2JlMWM7IG1hcmdpbi1sZWZ0OiAtMnJlbTsgei1pbmRleDogMTsgcGFkZGluZzogNXB4XCJcclxuICAgICAgICAqbmdJZj1cImlucFZhbHVlPy5sZW5ndGggPiAwXCI+PC9pPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gRGF0ZVRpbWUgLS0+XHJcbiAgPGRpdiAqbmdJZj1cImR0RmxhZ1wiIGNsYXNzPVwiY29sLW1kLTEyIHBhZGRpbmdaZXJvIG54dG15dC10aW1lMVwiID5cclxuICAgIDwhLS0gRXJyb3IgSGFuZGxpbmcgLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uZXJyb3JcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDtcclxuICAgIGNvbG9yOiByZWQ7XCI+e3txdWVzdGlvbkl0ZW0/LmVycm9yPy5lcnJvck1zZ319PC9kaXY+XHJcblxyXG4gICAgPCEtLSBEYXRlIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cImRhdGVGbGFnXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxyXG4gICAgICAgIDwhLS0gSEEgMzEtSkFOLTI0IFRoZXNlIGxhYmVscyB3ZXJlIG9jY3VwaW5nIHRoZSBlbXB0eSBzcGFjZSB3aGVuIGRhdGUgcXVlc3Rpb24gY29tZXMtLT5cclxuICAgICAgICA8IS0tIDxsYWJlbCBjbGFzcz1cImRhdGUtdGltZSBjb2xvcmZcIj57eyBxdWVzdGlvbkl0ZW0/LmRhdGVUZXh0IH19PC9sYWJlbD4gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm54dC1kaXMtZmxleFwiPlxyXG4gICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cclxuICAgICAgICAgIDwhLS0gSEEgMDJGRUIyNCBBZGRpdGlvbmFsIHBhcmFtIHRvIHVwZGF0ZSB0aGUgcXVlc3Rpb24gLS0+XHJcbiAgICAgICAgICA8bXktZGF0ZS1waWNrZXIgbmFtZT1cIm15ZGF0ZVwiIFtvcHRpb25zXT1cIm15RGF0ZVBpY2tlck9wdGlvbnNcIiBpZD1cImRhdGVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweCAhaW1wb3J0YW50O1wiIChkYXRlQ2hhbmdlZCk9XCJvbkRhdGVDaGFuZ2VkKCRldmVudCwgcXVlc3Rpb25JdGVtKVwiXHJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsRGF0ZVwiIGNsYXNzPVwiZGF0ZS1waWNrZXJcIiBwbGFjZWhvbGRlcj1cInt7J3NlbGVjdERhdGUnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVwiIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cclxuICAgICAgICAgIDwvbXktZGF0ZS1waWNrZXI+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBUaW1lIC0tPlxyXG4gICAgPGRpdiAqbmdJZj1cInRpbWVGbGFnXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxyXG4gICAgICAgIDwhLS0gPGxhYmVsIGNsYXNzPVwiZGF0ZS10aW1lIGNvbG9yZlwiPnt7IHF1ZXN0aW9uSXRlbT8udGltZVRleHQgfX08L2xhYmVsPiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibnh0LWRpcy1mbGV4XCI+XHJcbiAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieydkdC1saW5lIGRhdGUtbGluZSBueHQtZHQtdGltZSc6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVhbmRUaW1lOiAhcWJJdGVtPy5wcm9ncmVzc0Jhcn1cIiBcclxuICAgICAgICAgICAgICBpZD1cImRhdGVhbmRUaW1lXCIgW3N0eWxlLmJvcmRlci1jb2xvcl09XCJxdWVzdGlvbkl0ZW0/LmVycm9yID8gJ3JlZCc6IHF1ZXN0aW9uSXRlbT8uaW5wdXQ/Lmxlbmd0aCA+IDAgPyAnJyA6ICcnXCJcclxuICAgICAgICAgICAgICAoZm9jdXMpPVwiKGNsZWFyU1FFcnJvcikgXCI+XHJcbiAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJob3Vyc1wiIGNsYXNzPVwiZGF0ZXRpbWUgc2hvd0hvdXIgbnh0bXl0LXRpbWUgbXl0LWhvdXJcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkSG91clwiIGlkPVwiaG91clwiXHJcbiAgICAgICAgICAgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIj5cclxuICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPkhIPC9vcHRpb24+XHJcbiAgICAgICAgICAgIDxvcHRpb24gW3ZhbHVlXT1cImhvdXJcIiAqbmdGb3I9XCJsZXQgaG91ciBvZiBob3Vyc1wiPlxyXG4gICAgICAgICAgICAgIHt7IGhvdXIgfX1cclxuICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY29sb25cIj4gOiA8L3NwYW4+XHJcbiAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJtaW51dGVzXCIgY2xhc3M9XCJkYXRldGltZSBueHRzaG93bWludXRlIG54dG15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1pbnV0ZVwiIGlkPVwibWludXRlXCJcclxuICAgICAgICAgICAgKGZvY3VzKT1cImNsZWFyRXJyb3IoKVwiPlxyXG4gICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCI+TU08L29wdGlvbj5cclxuICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwibWludXRlXCIgKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBtaW51dGVzXCI+XHJcbiAgICAgICAgICAgICAge3sgbWludXRlIH19XHJcbiAgICAgICAgICAgIDwvb3B0aW9uPlxyXG4gICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgY29sb24xOiBxYkl0ZW0/LnByb2dyZXNzQmFyIH1cIiAqbmdJZj1cInF1ZXN0aW9uSXRlbT8ueDI0SG91cnMgPT0gZmFsc2VcIj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvblwiPiA6IDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNlbGVjdCBuYW1lPVwiQU0vUE1cIiBjbGFzcz1cIm54dG15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1lcmlkaWVtXCIgaWQ9XCJtZXJpZGllbVwiPlxyXG4gICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJBTVwiPkFNPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlBNXCI+UE08L29wdGlvbj5cclxuICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiBbbmdDbGFzc109XCJ7Jyc6IHFiSXRlbS5wcm9ncmVzc0JhciwgJ2RhdGVhbmRUaW1lJzogIXFiSXRlbS5wcm9ncmVzc0Jhcn1cIj48L2Rpdj4gLS0+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8aSBjbGFzcz1cImZhIGNoZWNrLWljb24zXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0/LmlucHV0Py5sZW5ndGggPiAwXCI+PC9pPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gQXR0YWNobWVudCAvIEZpbGUgLS0+XHJcbiAgPGRpdiAqbmdJZj1cImZpbGVGbGFnXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIXFiSXRlbS5wcm9ncmVzc0JhclwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiaW5mby1hbGVydFwiIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHRoaXMucXVlc3Rpb25JdGVtPy5lcnJvciA/ICdyZWQnIDogJycgfX1cIj5cclxuICAgICAgICA8bGFiZWwgY2xhc3M9XCJwaWN0dXJlLXVwbG9hZFwiIGZvcj1cImZpbGUtdXBsb2FkXCI+XHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInBpY3R1cmUtdXBsb2FkLWNoaWxkXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtZmlsZS1pbWFnZS1vIGZhLTV4IGljb2xvclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmEgZmEtcGx1cyBmYS0yeCBwaWN0dXJlLXVwbG9hZC1jaGlsZCBwaWMtdXBsb2FkIGljb2xvclwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cIlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2xhYmVsPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGlucHV0IGlkPVwiZmlsZS11cGxvYWRcIiB0eXBlPVwiZmlsZVwiIGFjY2VwdD1cInt7IGFsbG93ZWRGaWxlRXh0ZW5zaW9uIH19XCIgKGNoYW5nZSk9XCJ1cGxvYWRGaWxlKCRldmVudCx0aGlzLnF1ZXN0aW9uSXRlbSlcIiAvPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8dWwgKm5nSWY9XCJcclxuICAgICAgICBhdHRhY2htZW50cz8ubGVuZ3RoID4gMCAmJlxyXG4gICAgICAgIHF1ZXN0aW9uSXRlbT8udHlwZSA9PT0gJ0ZpbGUnICYmXHJcbiAgICAgICAgIXFiSXRlbT8ucHJvZ3Jlc3NCYXJcclxuICAgICAgXCIgY2xhc3M9XCJhdHRhY2gtdWxpc3QgY29sLW1kLTEyXCI+XHJcbiAgICAgIDxsaSAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBhdHRhY2htZW50c1wiIGNsYXNzPVwiYWxpZ24tbFwiPlxyXG4gICAgICAgIHt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWV9fTxzcGFuIGNsYXNzPVwiYXR0YWNoLWxpc3RcIiAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIj5YPC9zcGFuPlxyXG4gICAgICA8L2xpPlxyXG4gICAgPC91bD5cclxuXHJcbiAgICA8IS0tIEF0dGFjaG1lbnQgUHJvZ3Jlc3MgLS0+XHJcbiAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLnByb2dyZXNzQmFyXCI+XHJcbiAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGF0dGFjaG1lbnQgb2YgYXR0YWNobWVudHNcIiBjbGFzcz1cIm54dGZpbGUtdXBsb2FkaW5nLWJveFwiPlxyXG4gICAgICAgIDwhLS08aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMngucG5nXCIgY2xhc3M9XCJpY29uLWVkaXQxXCIgLz4tLT5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInVwbG9hZGluZy1maWxlLW5hbWUgXCI+e3sgYXR0YWNobWVudC5hdHRhY2htZW50TmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kZWxldGUlNDAyeC5wbmdcIiBjbGFzcz1cImRlbGV0ZUljb25cIlxyXG4gICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUF0dGFjaG1lbnQoYXR0YWNobWVudC5hdHRhY2htZW50SWQpXCIgLz5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJueHRmaWxlLXVwbG9hZC1ib3hcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7eyB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA/ICdyZWQnIDogJycgfX1cIj5cclxuICAgICAgXHJcbiAgICAgICAgPCEtLTxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAyeC5wbmdcIiBjbGFzcz1cImljb24tZWRpdDFcIiAvPi0tPlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZi1OYW1lXCIgW2lubmVySFRNTF09XCJnZXRUZXh0KHF1ZXN0aW9uSXRlbT8ucXVlc3Rpb25UZXh0KVwiPiB7eyBxdWVzdGlvbkl0ZW0/LnF1ZXN0aW9uVGV4dH19PC9zcGFuPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZpbGUtbGFiZWwgXCI+XHJcbiAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vZmlsZS11cGxvYWQucG5nXCIgY2xhc3M9XCJmaWxlLWljb25cIi8+XHJcbiAgICAgICAgICA8IS0tIEhBIDIwREVDMjMgRm9yIFRyYW5zbGF0aW9uIC0tPlxyXG4gICAgICAgICAgPGlucHV0IG5hbWU9XCJhdHRhY2htZW50XCIgdHlwZT1cImZpbGVcIiBwbGFjZWhvbGRlcj1cInt7J3RvQnV5VGlja2V0JyB8IGkxOG46aTE4blNlcnZpY2UuY3VycmVudExhbmd1YWdlfX1cIiBtdWx0aXBsZVxyXG4gICAgICAgICAgICBhY2NlcHQ9XCIucGRmLCAucG5nLCAuanBnLCAuanBlZywgLmhlaWMsIC5hcHBsaWNhdGlvbi9wZGZcIiAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZmlsZS11cGxvYWQtYnRuXCI+XHJcbiAgICAgICAgPC9sYWJlbD5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8IS0tIFJTIDA5REVDMjQgQ2hhbmdlZCBrZXlzLS0+XHJcbiAgPCEtLSBCb29rIC0tPlxyXG4gIDxkaXYgKm5nSWY9XCJib29rRmxhZ1wiPlxyXG4gICAgPGRpdiBbY2xhc3NdPVwicWJJdGVtLmlzU2hlbmdlbCA/ICdmb3JtLWdyb3VwIGNvbnRlbnQtYm94JyA6ICdmb3JtLWdyb3VwJ1wiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uZXJyb3JcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDtcclxuICAgICAgICAgICAgY29sb3I6IHJlZDtcIj57e3F1ZXN0aW9uSXRlbT8uZXJyb3I/LmVycm9yTXNnfX08L2Rpdj5cclxuICAgICAgICA8ZGl2IFtjbGFzc109XCJxYkl0ZW0uaXNTaGVuZ2VsID8gJycgOiAnbnh0LW15dC1hbGlnbjMnXCIgW2NsYXNzXT1cInFiSXRlbS5pc1NoZW5nZWwgPyAnY29sLWxnLScgKyBxdWVzLnNpemUgKyAnIHBhZGRpbmdub25lJyA6ICdjb2wtbWQtJyArIHF1ZXMuc2l6ZSArICcgcGFkZGluZ25vbmUnXCJcclxuICAgICAgICAgICpuZ0Zvcj1cImxldCBxdWVzIG9mIHN1YlF1ZXN0aW9ucztsZXQgaSA9IGluZGV4XCIgW2lkXT1cInF1ZXMuaWRcIj5cclxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBkb3duMjogcWJJdGVtPy5wcm9ncmVzc0JhciB9XCI+XHJcbiAgICAgICAgICAgIDxzcGFuPnt7IHF1ZXM/LnF1ZXN0aW9uVGV4dCB9fTwvc3Bhbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBwYWRkaW5nWmVybyBueHRteXQtZGF0ZVRpbWVOZXdcIiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RpbWUnIHx8IHF1ZXMudHlwZSA9PT0gJ0RhdGUnXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdEYXRlJ1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8bGFiZWwgY2xhc3M9XCJkYXRlLXRpbWUgY29sb3JmXCI+e3sgcXVlc3Rpb25JdGVtPy5kYXRlVGV4dCB9fTwvbGFiZWw+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVhbmR0aW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gSEEgMDJGRUIyNCBBZGRpdGlvbmFsIHBhcmFtIHRvIHVwZGF0ZSB0aGUgcXVlc3Rpb24gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxteS1kYXRlLXBpY2tlciBuYW1lPVwibXlkYXRlXCIgW29wdGlvbnNdPVwibXlEYXRlUGlja2VyT3B0aW9uc1wiIGlkPVwiZGF0ZVwiIHN0eWxlPVwiZm9udC1zaXplOiAxOHB4ICFpbXBvcnRhbnQ7XCIgKGRhdGVDaGFuZ2VkKT1cIm9uRGF0ZUNoYW5nZWQoJGV2ZW50LCBxdWVzKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzZWxEYXRlXCIgY2xhc3M9XCJkYXRlLXBpY2tlclwiIHBsYWNlaG9sZGVyPVwie3snc2VsZWN0RGF0ZScgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19XCIgIChmb2N1cyk9XCJjbGVhckVycm9yKClcIiA+XHJcbiAgICAgICAgICAgICAgICAgIDwvbXktZGF0ZS1waWNrZXI+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUaW1lJ1wiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgcGFkZGluZ0JvdHRvbVwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSA8bGFiZWwgY2xhc3M9XCJkYXRlLXRpbWUgY29sb3JmXCI+e3sgcXVlc3Rpb25JdGVtPy50aW1lVGV4dCB9fTwvbGFiZWw+IC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGVhbmR0aW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsnZHQtbGluZSBkYXRlLWxpbmUgbnh0LWR0LXRpbWUnOiBxYkl0ZW0/LnByb2dyZXNzQmFyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZWFuZFRpbWU6ICFxYkl0ZW0/LnByb2dyZXNzQmFyfVwiIFxyXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJkYXRlYW5kVGltZVwiIFtzdHlsZS5ib3JkZXItY29sb3JdPVwicXVlc3Rpb25JdGVtPy5lcnJvciA/ICdyZWQnOiBxdWVzdGlvbkl0ZW0/LmlucHV0Py5sZW5ndGggPiAwID8gJycgOiAnJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiKGNsZWFyU1FFcnJvcikgXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgbmFtZT1cImhvdXJzXCIgY2xhc3M9XCJkYXRldGltZSBzaG93SG91ciBueHRteXQtdGltZSBteXQtaG91clwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRIb3VyXCIgaWQ9XCJob3VyXCJcclxuICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPkhIPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiaG91clwiICpuZ0Zvcj1cImxldCBob3VyIG9mIGhvdXJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBob3VyIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNvbG9uXCI+IDogPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJtaW51dGVzXCIgY2xhc3M9XCJkYXRldGltZSBueHRzaG93bWludXRlIG54dG15dC10aW1lXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZE1pbnV0ZVwiIGlkPVwibWludXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAoZm9jdXMpPVwiY2xlYXJFcnJvcigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlwiPk1NPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwibWludXRlXCIgKm5nRm9yPVwibGV0IG1pbnV0ZSBvZiBtaW51dGVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7eyBtaW51dGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBjb2xvbjE6IHFiSXRlbT8ucHJvZ3Jlc3NCYXIgfVwiICpuZ0lmPVwicXVlc3Rpb25JdGVtLngyNEhvdXJzID09IGZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjb2xvblwiPiA6IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IG5hbWU9XCJBTS9QTVwiIGNsYXNzPVwibnh0bXl0LXRpbWVcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkTWVyaWRpZW1cIiBpZD1cIm1lcmlkaWVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQU1cIj5BTTwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIlBNXCI+UE08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdEYXRlVGltZSdcIj5cclxuICAgICAgICAgICAgPGFwcC1jdXN0b20tZGF0ZS1waWNrZXIgW21pbkRhdGVdPVwicXVlcy5taW5EYXRlXCIgW2RhdGVdPVwicXVlcy5pbnB1dFwiIChkYXRlQ2hhbmdlKT1cImRpc3BsYXlEYXRlKCRldmVudCxxdWVzKVwiPjwvYXBwLWN1c3RvbS1kYXRlLXBpY2tlcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPCEtLSBWRCB0byBzaG93IGxhYmxlLS0+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnTGFiZWwnXCI+XHJcbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLWxhYmVsIFtsYWJlbFN0eWxlXT1cInF1ZXMudGl0bGVcIiBbbGFiZWxWYWx1ZV09XCJxdWVzLnF1ZXN0aW9uXCI+XHJcbiAgICAgICAgICAgIDwvYXBwLWN1c3RvbS1sYWJlbD5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RleHQnXCI+XHJcbiAgICAgICAgICAgIDxsYWJlbD57eyBxdWVzLnF1ZXN0aW9uVGV4dCB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLWlucHV0XHJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJxdWVzPy5pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCIgXHJcbiAgICAgICAgICAgICAgICAgIFtpZFZhbHVlXT1cInF1ZXM/LnRyYWNraW5nSWRcIlxyXG4gICAgICAgICAgICAgICAgICBbZm9jdXNFdmVudF09XCJjbGVhclNRRXJyb3IocXVlcz8uaWQpXCJcclxuICAgICAgICAgICAgICAgICAgW2Vycm9yXT1cInF1ZXM/LmVycm9yXCJcclxuICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInF1ZXM/LnF1ZXN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgKGlucHV0VmFsdWUpPVwic2VsZWN0ZWRJbnB1dCgkZXZlbnQscXVlcylcIj5cclxuICAgICAgICAgICAgPC9hcHAtY3VzdG9tLWlucHV0PlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnTG9jYXRpb24nXCI+XHJcbiAgICAgICAgICAgIDwhLS0gZm9yIHBpY2sgbG9jYXRpb24gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gSEExMDAxMjAyNCBBZGRlZCBBcGkga2V5IGFzIGlucHV0IC0tPlxyXG4gICAgICAgICAgICA8YXBwLXBpY2stbG9jYXRpb24gW2FwaUtleV09XCJxYkl0ZW1bJ2FwaUtleSddXCIgW2FkZHJlc3NdPVwicXVlcy5pbnB1dFwiIChsb2NhdGlvblNlbGVjdGVkKT1cImhhbmRsZUxvY2F0aW9uU2VsZWN0ZWQoJGV2ZW50LHF1ZXMpXCI+PC9hcHAtcGljay1sb2NhdGlvbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPCEtLSBmb3IgIHRleHQgYXJlYSAgIC0tPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RleHRBcmVhJ1wiPlxyXG4gICAgICAgICAgICA8YXBwLWN1c3RvbS10ZXh0LWFyZWEgW3ZhbHVlXT1cInF1ZXMuaW5wdXRcIiBbcm93c109XCIzXCIgW2Vycm9yXT1cInF1ZXMuZXJyb3JcIiBbcGxhY2Vob2xkZXJdPVwicXVlcy5xdWVzdGlvbiBcIiAodGV4dGFyZWFWYWx1ZUNoYW5nZSk9XCJoYW5kbGVUZXh0YXJlYVZhbHVlQ2hhbmdlKCRldmVudClcIj48L2FwcC1jdXN0b20tdGV4dC1hcmVhPlxyXG4gICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgPCEtLSBFbWFpbCAtLT5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdFbWFpbCdcIj5cclxuICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJlbWFpbFwiIFsobmdNb2RlbCldPVwicXVlcy5pbnB1dFwiIFtpZF09XCJxdWVzLmlkXCIgcmVxdWlyZWQ9XCJcIiAoZm9jdXMpPVwiY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCJcclxuICAgICAgICAgICAgICBzdHlsZS5ib3JkZXItY29sb3I9XCJ7eyBxdWVzLmVycm9yID8gJ3JlZCcgOiAnJyB9fVwiIHBsYWNlaG9sZGVyPVwie3sgcXVlcy5xdWVzdGlvbiB9fVwiIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnRmlsZSdcIj5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cclxuICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJwaWN0dXJlLXVwbG9hZCBjdXN0b20tZmlsZS11cGxvYWQgYmdjb2xvci13XCIgZm9yPVwiZmlsZS11cGxvYWRcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGljdHVyZS11cGxvYWQtY2hpbGRcIj5cclxuICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1maWxlLWltYWdlLW8gZmEtNXggaWNvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJcclxuICAgICAgICAgICAgICAgICAgICBmYSBmYS1wbHVzIGZhLTJ4XHJcbiAgICAgICAgICAgICAgICAgICAgcGljdHVyZS11cGxvYWQtY2hpbGRcclxuICAgICAgICAgICAgICAgICAgICBwaWMtdXBsb2FkXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbG9yXHJcbiAgICAgICAgICAgICAgICAgIFwiPlxyXG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cIlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDxpbnB1dCBpZD1cImZpbGUtdXBsb2FkXCIgdHlwZT1cImZpbGVcIiBhY2NlcHQ9XCJ7eyBib29rRmxhZ0FjY2VwdCB9fVwiIChjaGFuZ2UpPVwidXBsb2FkRmlsZSgkZXZlbnQscXVlcylcIiAvPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDx1bCAqbmdJZj1cIlxyXG4gICAgICAgICAgICAgICAgYXR0YWNobWVudHM/Lmxlbmd0aCA+IDAgJiZcclxuICAgICAgICAgICAgICAgIHF1ZXMudHlwZSA9PT0gJ0ZpbGUnICYmXHJcbiAgICAgICAgICAgICAgICAhcWJJdGVtLnByb2dyZXNzQmFyXHJcbiAgICAgICAgICAgICAgXCIgY2xhc3M9XCJhdHRhY2gtdWxpc3QgY29sLW1kLTEyXCI+XHJcbiAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBhdHRhY2htZW50IG9mIGF0dGFjaG1lbnRzXCIgY2xhc3M9XCJhbGlnbi1sXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBhdHRhY2htZW50LmF0dGFjaG1lbnROYW1lXHJcbiAgICAgICAgICAgICAgICB9fTxzcGFuIGNsYXNzPVwiYXR0YWNoLWxpc3RcIiAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIj5YPC9zcGFuPlxyXG4gICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteXQtYm94XCIgKm5nSWY9XCJxYkl0ZW0ucHJvZ3Jlc3NCYXJcIj5cclxuXHJcbiAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYXR0YWNobWVudCBvZiBhdHRhY2htZW50c1wiIGNsYXNzPVwibnh0ZmlsZS11cGxvYWRpbmctYm94XCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMngucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0MVwiIC8+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVwbG9hZGluZy1maWxlLW5hbWUgbXl0LWZvbnQxIGZvbnQtd2VpZ2h0OiBub3JtYWw7XCI+IHt7IGF0dGFjaG1lbnQuYXR0YWNobWVudE5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kZWxldGUlNDAyeC5wbmdcIiBjbGFzcz1cImRlbGV0ZUljb25cIlxyXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQXR0YWNobWVudChhdHRhY2htZW50LmF0dGFjaG1lbnRJZClcIiAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJueHRmaWxlLXVwbG9hZC1ib3hcIiBzdHlsZS5ib3JkZXItY29sb3I9XCJ7eyB0aGlzLnF1ZXN0aW9uSXRlbS5lcnJvciA/ICdyZWQnIDogJycgfX1cIj5cclxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWRvYy1pbWclNDAyeC5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXQxXCIgLz5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZi1OYW1lXCI+e3sgcXVlcz8ucXVlc3Rpb24gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmaWxlLWxhYmVsIFwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiBzdHlsZT1cImNvbG9yOiAjYzUyODFjO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICB7eydhdHRhY2gnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fVxyXG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XHJcbiAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPVwiYXR0YWNobWVudFwiIHR5cGU9XCJmaWxlXCIgcGxhY2Vob2xkZXI9XCJ7eyd0b0J1eVRpY2tldCcgfCBpMThuOmkxOG5TZXJ2aWNlLmN1cnJlbnRMYW5ndWFnZX19XCIgbXVsdGlwbGVcclxuICAgICAgICAgICAgICAgICAgICBhY2NlcHQ9XCIucGRmLCAucG5nLCAuanBnLCAuanBlZywgLmhlaWMsIC5hcHBsaWNhdGlvbi9wZGZcIiAoY2hhbmdlKT1cInVwbG9hZEZpbGUoJGV2ZW50LHF1ZXMpXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZpbGUtdXBsb2FkLWJ0blwiPlxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICA8IS0tIFRhYmxlIC0tPlxyXG4gICAgICAgICAgPGRpdiAqbmdJZj1cInF1ZXMudHlwZSA9PT0gJ1RhYmxlJ1wiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLXRhYmxlIFxyXG4gICAgICAgICAgICAgIFtxdWVzdGlvbl09XCJxdWVzXCJcclxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiY2hpbGRFdmVudENhcHR1cmUoJGV2ZW50LCBxdWVzKTsgY2xlYXJTUUVycm9yKHF1ZXMuaWQpXCI+XHJcbiAgICAgICAgICAgIDwvYXBwLWN1c3RvbS10YWJsZT5cclxuICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgIDwhLS0gRHJvcGRvd24gLS0+XHJcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwicXVlcy50eXBlID09PSAnRHJvcGRvd24nXCIgY2xhc3M9XCJueHRkcm9wZG93blwiPlxyXG4gICAgICAgICAgICA8IS0tIGZvciBjb21tb24gZHJvcGRvd24gLS0+XHJcbiAgICAgICAgICAgIDwhLS0gSEEgMjBERUMyMyBGb3IgVHJhbnNsYXRpb24gLS0+XHJcbiAgICAgICAgICAgIDxhcHAtY3VzdG9tLWRyb3Bkb3duIFtmcm9tU2hlbmdlbF09XCJxYkl0ZW0uaXNTaGVuZ2VsXCJcclxuICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJxdWVzLm9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFthcGlNZXRhXT1cInF1ZXMuc3ViVGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2lkXT1cInF1ZXMuTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkVmFsdWVdPVwicXVlcy5pbnB1dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCItLS17eydzZWxlY3QnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fS0tLVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Vycm9yTWVzc2FnZV09XCJxdWVzPy5lcnJvck1lc3NhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtlcnJvcl09XCJxdWVzPy5lcnJvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImNoaWxkRXZlbnRDYXB0dXJlKCRldmVudCwgcXVlcyk7IGNsZWFyU1FFcnJvcihxdWVzLmlkKVwiPlxyXG4gICAgICAgICAgICA8L2FwcC1jdXN0b20tZHJvcGRvd24+XHJcbiAgICAgICAgICAgIDxhcHAtZHJvcGRvd24td2l0aC1mbGFnICpuZ0lmPVwicXVlcy5pc0RlcGVuZGVudFBpY2tsaXN0ICYmICFxdWVzLmRyb3BEb3duT25seVwiICBbY2VydGlmaWVkXT1cInF1ZXMuY2VydGlmaWVkRmxhZ1wiICBbSm9iUGVyZm9ybWVyQ2VydGlmaWNhdGVzXT1cInF1ZXMuY2VydGlmaWNhdGVMaXN0XCIgKGZsYWdEcm9wRG93bkNoYW5nZSk9XCJkZXBlbmRlbnRDaGFuZ2UoJGV2ZW50KVwiPjwvYXBwLWRyb3Bkb3duLXdpdGgtZmxhZz5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jaGVjayBcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cInF1ZXN0aW9uSXRlbT8uaW5wdXQ/Lmxlbmd0aCA+IDBcIj48L2k+XHJcbiAgICAgICAgICA8L2Rpdj4gICAgICAgICAgXHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS1MaXN0IHN0YXJ0LS0+XHJcbiAgPGRpdiAqbmdJZj1cImxpc3RGbGFnXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncm91cFwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1yb3dcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyXCIgKm5nSWY9XCJxdWVzdGlvbkl0ZW0uZXJyb3JcIiBzdHlsZT1cImZvbnQtc2l6ZTogMThweDtcclxuICAgICAgICAgICAgY29sb3I6IHJlZDtcIj57e3F1ZXN0aW9uSXRlbT8uZXJyb3I/LmVycm9yTXNnfX08L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibnh0LW15dC1hbGlnbjNcIiBbY2xhc3NdPVwiJ2NvbC1tZC0nICsgcXVlcy5zaXplICsgJyBwYWRkaW5nbm9uZSdcIlxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHF1ZXMgb2YgZ2V0TG9jYWxTdWJRdWVzdGlvbnMocXVlc3Rpb25JdGVtLmlkKTtsZXQgaSA9IGluZGV4XCI+XHJcbiAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm54dC1kaXMtZmxleCBteXQtZm9udDMgbXl0LWZvbnQ3XCI+e3sgcXVlcz8ucXVlc3Rpb24gfX08L3NwYW4+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJxdWVzLnR5cGUgPT09ICdUZXh0J1wiPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbKG5nTW9kZWwpXT1cInF1ZXMuaW5wdXRcIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAnbnh0LWRpcy1mbGV4IGR0LWxpbmUgZGF0ZS1saW5lIG54dGJvb2tUZXh0IGJveG91dGxpbmUgbXl0LWZvbnQxJzogcWJJdGVtLnByb2dyZXNzQmFyLFxyXG4gICAgICAgICAgICAgdGV4dEJveDogIXFiSXRlbS5wcm9ncmVzc0JhclxyXG4gICAgICAgICAgICB9XCIgaWQ9XCJ0ZXh0XCIgW2lkXT1cInF1ZXMudW5pcXVlU3ViUUlkXCIgcmVxdWlyZWQ9XCJcIiAoZm9jdXMpPVwiY2xlYXJMb2NhbFN1YlF1ZXNFcnJvcihxdWVzKVwiXHJcbiAgICAgICAgICAgIHN0eWxlLmJvcmRlci1jb2xvcj1cInt7IHF1ZXMuZXJyb3IgPyAncmVkJyA6ICcnIH19XCIgcGxhY2Vob2xkZXI9XCJ7eyBxdWVzLnF1ZXN0aW9uIH19XCJcclxuICAgICAgICAgICAgb25pbnB1dD1cInRoaXMudmFsdWU9dGhpcy52YWx1ZS5yZXBsYWNlKC9bXmEtekEtWjAtOVxccy46Oyw/XS9nLCcnKTtcIiAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIlwiICpuZ0lmPVwiYWRkRmxhZ1wiPlxyXG4gICAgICAgICAgPCEtLSBIQSAyMERFQzIzIEZvciBUcmFuc2xhdGlvbiAtLT5cclxuICAgICAgICAgIDxidXR0b24gKGNsaWNrKT1cIkFkZChnZXRMb2NhbFN1YlF1ZXN0aW9ucyhxdWVzdGlvbkl0ZW0uaWQpKVwiIGNsYXNzPVwiYnRuXCI+PGkgY2xhc3M9XCJmYSBmYS1wbHVzXCIgPjwvaT57eydhZGQnIHwgaTE4bjppMThuU2VydmljZS5jdXJyZW50TGFuZ3VhZ2V9fTwvYnV0dG9uPlxyXG4gICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8IS0tTGlzdCBFbmQtLT5cclxuXHJcbiAgPCEtLSBBY3Rpb25zIC0tPlxyXG4gIDwhLS0gVkQgYnV0dG9uIGNvbmRpdGlvbiByZW1vdmVkLS0+XHJcbiAgPGRpdiBjbGFzcz1cImZsZXhlclwiPlxyXG4gICAgPCEtLSBCYWNrd2FyZCAvIEJhY2sgLS0+XHJcbiAgICA8IS0tIEhBIDAyRkVCMjQgSGlkaW5nIHRoZSBidXR0b24gd2hlbiB0aGVyZSBpcyBubyB2YWx1ZSBmcm9tIHRoZSBiYWNrZW5kIC0tPlxyXG4gICAgIDwhLS1WRCBkaXNhYmxlZCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJiYWNrYnV0dG9uXCIgXHJcbiAgICAgIFtzdHlsZS52aXNpYmlsaXR5XT1cInF1ZXN0aW9uU3RhY2subGVuZ3RoID4gMCA/ICd2aXNpYmxlJyA6ICdoaWRkZW4nXCIgKm5nSWY9XCJxYkl0ZW0uYmFja1wiPlxyXG4gICAgICAgIDxidXR0b24gW2Rpc2FibGVkXT1cImlzQnV0dG9uRGlzYWJsZWRcIiBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICdueHQtbGVmdC1idCc6IHFiSXRlbS5wcm9ncmVzc0JhcixcclxuICAgICAgICAgICAgJ254dC1idG4gYnRuLXByaW1hcnknOlxyXG4gICAgICAgICAgICAgICFxYkl0ZW0ucHJvZ3Jlc3NCYXJcclxuICAgICAgICAgIH1cIiAoY2xpY2spPVwiaGFuZGxlQmFja0NsaWNrKClcIj5cclxuICAgICAgICAgIHt7IHFiSXRlbT8uYmFjayB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcblxyXG4gICAgPCEtLSBGb3J3YXJkIC8gTmV4dCAtLT5cclxuICAgIDwhLS0gSEEgMDJGRUIyNCBIaWRpbmcgdGhlIGJ1dHRvbiB3aGVuIHRoZXJlIGlzIG5vIHZhbHVlIGZyb20gdGhlIGJhY2tlbmQgLS0+XHJcbiAgICA8ZGl2ICAqbmdJZj1cInFiSXRlbS5uZXh0XCIgPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibnh0YnV0dG9uXCI+XHJcbiAgICAgICAgIDwhLS1WRCBkaXNhYmxlZCAtLT5cclxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCJpc0J1dHRvbkRpc2FibGVkXCIgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAnbnh0LXJ1c3R5JzogcWJJdGVtLnByb2dyZXNzQmFyLFxyXG4gICAgICAgICAgICAnbnh0LWJ0biBidG4tcHJpbWFyeSc6XHJcbiAgICAgICAgICAgICAgIXFiSXRlbS5wcm9ncmVzc0JhclxyXG4gICAgICAgICAgfVwiIChjbGljayk9XCJoYW5kbGVOZXh0Q2xpY2soKVwiPlxyXG4gICAgICAgICAge3sgcWJJdGVtLm5leHQgfX1cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcblxyXG48IS0tIFN1bW1hcnkgLS0+XHJcbjxkaXYgKm5nSWY9XCJ0aGlzLmFiSXRlbT8uc3RhdHVzID09PSAnQ29tcGxldGVkJ1wiIGNsYXNzPVwiY29sLWxnLTEyXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7XCI+XHJcbiAgPGgyPnt7dGhpcy5xYkl0ZW0uc3VtbWFyeVRleHR9fTwvaDI+XHJcbiAgPHA+e3t0aGlzLnFiSXRlbS5zdW1tYXJ5U3ViVGV4dH19PC9wPlxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJzdW1tYXJ5ICYmIHN1bW1hcnkubGVuZ3RoID4gMFwiIGhlaWdodD1cIjEwMCUgIWltcG9ydGFudFwiIGNsYXNzPVwiY29sLW1kLTEyXCIgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICdjb2wtbWQtMTInOiFxYkl0ZW0ucHJvZ3Jlc3NCYXJcclxuICAgICAgICAgICAgICAgfVwiPlxyXG4gICAgPGgxIGNsYXNzPVwibnh0LWhlYWRlcjEgbnh0LXN1bW1hcnlwYWRkXCIgPnt7IHFiSXRlbS5zdWJUaXRsZSB9fTwvaDE+ICAgICAgICAgXHJcbiAgPGRpdiBpZD1cIm54dC1wcm9ncmVzczJcIiAqbmdJZj1cIiFxYkl0ZW0ucHJvZ3Jlc3NCYXIgJiYgdGhpcy5hYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnIFwiPlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwieyAnZnVsbC1zdW1tYXJ5JzogcWJJdGVtLnByb2dyZXNzQmFyIH1cIj5cclxuICAgIDxkaXYgKm5nRm9yPVwibGV0IHFhIG9mIHN1bW1hcnlcIj5cclxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgbm9uOiAgcWJJdGVtLnByb2dyZXNzQmFyIH1cIj5cclxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBzdW1tYXJ5OiAgIXFiSXRlbS5wcm9ncmVzc0JhciB9XCI+XHJcbiAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFxYkl0ZW0uZWRpdFwiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncXVlc3Rpb24nOiB0aGlzLmFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCcgfVwiPlxyXG4gICAgICAgICAgICAgIDxwIFtuZ0NsYXNzXT1cInsgYXN1bTogdGhpcy5hYkl0ZW0uc3RhdHVzID09PSAnQ29tcGxldGVkJyB9XCIgKGNsaWNrKT1cImhhbmRsZUVkaXRDbGljayhxYS5xdWVzSWQpXCJcclxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+e3sgcWEucXVlc1ZhbHVlIH19PC9wPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLSBWRCBRdWVzdGlvbiBObyBhZGRlZCAtLT5cclxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5lZGl0XCJcclxuICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdxdWVzdGlvbic6IHRoaXMuYWJJdGVtLnN0YXR1cyAhPSAnQ29tcGxldGVkJyB9XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCJ7ICdxdWVzdGlvbic6IHRoaXMuYWJJdGVtLnN0YXR1cyA9PT0gJ0NvbXBsZXRlZCcgfVwiXHJcbiAgICAgICAgICAgICAgICBbaW5uZXJIVE1MXT1cImdldFRleHQocWEucXVlc1ZhbHVlKVwiPjxzcGFuPnt7IHFhLnF1ZXN0aW9uTnVtYmVyIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAge3sgcWEucXVlc1ZhbHVlIH19XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibnh0LWFuc3dlclwiID5cclxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwID09PSAnRmlsZSdcIj5cclxuICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCJodHRwczovL3JueHQuczMuYW1hem9uYXdzLmNvbS9NeXRJY29uL2ljb24tZG9jLWltZyU0MDEucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0LXN1bW1hcnlcIiAvPlxyXG4gICAgICAgICAgICAgICAgICB7eyBxYS5hbnNWYWx1ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIEhBIDAyRkVCMjQgRGlzcGxheWluZyB0aGUgaW4gc3VtbWFyeSBmb3IgYm9vayB0eXBlIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFhLnFUeXAgPT0gJ0Jvb2snXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHZhbCBvZiBxYS5teVZhbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwPnt7IHZhbC5xdWVzdGlvblRleHQgfX06PHNwYW4+e3sgdmFsLmlucHV0IH19PC9zcGFuPjwvcD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gSEEgMDJGRUIyNCBEaXNwbGF5aW5nIHRoZSB2YWx1ZSBmb3IgZGlyZWN0IHF1ZXN0aW9uIC0tPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFhLnFUeXAgIT0gJ0ZpbGUnICYmIHFhLnFUeXAgIT0gJ0Jvb2snXCI+e3sgcWEucXVlc3Rpb25UZXh0IH19IDxzcGFuPjwvc3Bhbj57eyBxYS5hbnNWYWx1ZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cInFiSXRlbS5lZGl0ICYmIHRoaXMuYWJJdGVtLnN0YXR1cyAhPSAnQ29tcGxldGVkJ1wiIHN0eWxlPVwiYmFja2dyb3VuZDogI2RlZGRkZDtcIj5cclxuICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm54dC1lZGl0XCIgKGNsaWNrKT1cImhhbmRsZUVkaXRDbGljayhxYS5xdWVzSWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImRldmljZUluZm8ub3MgPT09ICdpT1MnXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWVkaXQlNDAyeC5wbmdcIiBzdHlsZT1cIndpZHRoOjUwJSFpbXBvcnRhbnQ7XCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0aW9zXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgKm5nSWY9XCJkZXZpY2VJbmZvLm9zICE9PSAnaU9TJ1wiIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1lZGl0JTQwMngucG5nXCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcblxyXG5cclxuICA8ZGl2IGlkPVwibnh0LXByb2dyZXNzMlwiICpuZ0lmPVwicWJJdGVtLnByb2dyZXNzQmFyIFwiPlxyXG4gICAgPGRpdiBbbmdDbGFzc109XCJ7J2JnQ29sb3Igbnh0c3VtbWFyeS10b3AnIDogcWJJdGVtLnByb2dyZXNzQmFyIH1cIiA+XHJcbiAgICAgIDxkaXYgaWQ9XCJueHQtcHJvZ3Jlc3Mtc3VtbWFyeVwiICpuZ0lmPVwicWJJdGVtLnByb2dyZXNzQmFyXCI+XHJcbiAgICAgICAgPGNpcmNsZS1wcm9ncmVzcyBjbGFzcz1cInRpdGxlYmFyXCIgW3BlcmNlbnRdPVwidGhpcy5wZXJjZW50XCIgW3JhZGl1c109XCI0MFwiIFtzcGFjZV09XCItNFwiIFtvdXRlclN0cm9rZVdpZHRoXT1cIjRcIlxyXG4gICAgICAgIFtpbm5lclN0cm9rZVdpZHRoXT1cIjRcIiBbb3V0ZXJTdHJva2VDb2xvcl09XCInI2UwYjFiMCdcIiBbaW5uZXJTdHJva2VDb2xvcl09XCInI2U3ZThlYSdcIiBbYW5pbWF0aW9uXT1cInRydWVcIiBbYmFja2dyb3VuZFBhZGRpbmddPSBcIjBcIlxyXG4gICAgICAgIFtiYWNrZ3JvdW5kQ29sb3JdPSBcIicjZGQyZTEzJ1wiIFtiYWNrZ3JvdW5kR3JhZGllbnRTdG9wQ29sb3JdPVwiJyNmOWJmYmQnXCIgW3RpdGxlQ29sb3JdPVwiJyNmM2VkZWQnXCIgXHJcbiAgICAgICAgY2xhc3M9XCJuZy1zdGFyLWluc2VydGVkXCIgW3RpdGxlXT1cInRoaXMucGVyY2VudCsnJSdcIiBbc2hvd1N1YnRpdGxlXT1cImZhbHNlXCIgW3Nob3dCYWNrZ3JvdW5kXT1cInRydWVcIiBbYW5pbWF0aW9uRHVyYXRpb25dPVwiMzAwXCJcclxuICAgICAgICBbc3RhcnRGcm9tWmVyb109XCJmYWxzZVwiIFtyZXNwb25zaXZlXT1cImZhbHNlXCIgPlxyXG4gICAgICA8L2NpcmNsZS1wcm9ncmVzcz5cclxuICAgICAgXHJcbiAgICAgIDxkaXYgKm5nSWY9XCJxYkl0ZW0uc3VtbWFyeVRleHQgJiYgcWJJdGVtLnByb2dyZXNzQmFyXCIgXHJcbiAgICAgIFtuZ0NsYXNzXT1cInsgc3VtbWFyeVRpdGxlOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIgfVwiPlxyXG4gICAgICAgIDxoMyBjbGFzcz1cIm54dC1zdWJUaXRsZVwiID57eyBxYkl0ZW0uc3VtbWFyeVRleHQgfX08L2gzPlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJhYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnXCIgY2xhc3M9XCJueHQtc3ViVGl0bGUxXCIgPnt7IHFiSXRlbS5zdW1tYXJ5U3ViVGV4dH19PC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIXFiSXRlbS5wcm9ncmVzc0JhclwiPlxyXG4gICAgICA8aDMgY2xhc3M9XCJzdW1tYXJ5LWhcIj5cclxuICAgICAgICB7eyBxYkl0ZW0uc3VtbWFyeVRleHQgfX1cclxuICAgICAgPC9oMz5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwieyAnZnVsbC1zdW1tYXJ5JzogcWJJdGVtLnByb2dyZXNzQmFyIH1cIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5LWdyb3VwVGV4dCBteXQtZm9udDJcIj5cclxuICAgICAgPCEtLSA8cD5JbmZvcm1lIGRlIGRhw7FvPC9wPiAtLT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdGb3I9XCJsZXQgcWEgb2Ygc3VtbWFyeVwiID5cclxuICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgbm9uOiAgcWJJdGVtLnByb2dyZXNzQmFyIH1cIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5XCI+XHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiAqbmdJZj1cIiFxYkl0ZW0uZWRpdFwiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAncXVlc3Rpb24gc3VtLXF1ZXMgbXl0LWZvbnQzIG15dC1mb250OCc6IHRoaXMuYWJJdGVtLnN0YXR1cyAhPSAnQ29tcGxldGVkJyB9XCI+XHJcbiAgICAgICAgICAgICAgPGEgW25nQ2xhc3NdPVwieyBhc3VtOiB0aGlzLmFiSXRlbS5zdGF0dXMgPT09ICdDb21wbGV0ZWQnIH1cIiAoY2xpY2spPVwiaGFuZGxlRWRpdENsaWNrKHFhLnF1ZXNJZClcIlxyXG4gICAgICAgICAgICAgICAgW2lubmVySFRNTF09XCJnZXRUZXh0KHFhLnF1ZXNWYWx1ZSlcIj57eyBxYS5xdWVzVmFsdWUgfX08L2E+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLmVkaXRcIlxyXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ3N1bS1xdWVzIHF1ZXN0aW9uIG15dC1mb250MyBteXQtZm9udDgnOiB0aGlzLmFiSXRlbS5zdGF0dXMgIT0gJ0NvbXBsZXRlZCcgfVwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAnc3VtLXF1ZXMxIHF1ZXN0aW9uMSBzdW1tYXJ5LWNvbXBsZXRlZCBteXQtZm9udDMgbXl0LWZvbnQ4JzogdGhpcy5hYkl0ZW0uc3RhdHVzID09PSAnQ29tcGxldGVkJyB9XCJcclxuICAgICAgICAgICAgICAgIFtpbm5lckhUTUxdPVwiZ2V0VGV4dChxYS5xdWVzVmFsdWUpXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBxYS5xdWVzVmFsdWUgfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWJJdGVtLmVkaXQgJiYgdGhpcy5hYkl0ZW0uc3RhdHVzICE9ICdDb21wbGV0ZWQnXCIgc3R5bGU9XCJiYWNrZ3JvdW5kOiAjZGVkZGRkO1wiPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJueHQtZWRpdFwiIChjbGljayk9XCJoYW5kbGVFZGl0Q2xpY2socWEucXVlc0lkKVwiPlxyXG4gICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImRldmljZUluZm8ub3MgPT09ICdpT1MnXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWVkaXQlNDAyeC5wbmdcIiBzdHlsZT1cIndpZHRoOjUwJSFpbXBvcnRhbnQ7XCIgY2xhc3M9XCJueHQtaWNvbi1lZGl0aW9zXCIvPlxyXG4gICAgICAgICAgICAgICAgPGltZyAqbmdJZj1cImRldmljZUluZm8ub3MgIT09ICdpT1MnXCIgc3JjPVwiaHR0cHM6Ly9ybnh0LnMzLmFtYXpvbmF3cy5jb20vTXl0SWNvbi9pY29uLWVkaXQlNDAyeC5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXRcIiAvPlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICBcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm54dC1hbnN3ZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwicWEucVR5cCA9PT0gJ0ZpbGUnXCI+XHJcbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cImh0dHBzOi8vcm54dC5zMy5hbWF6b25hd3MuY29tL015dEljb24vaWNvbi1kb2MtaW1nJTQwMS5wbmdcIiBjbGFzcz1cIm54dC1pY29uLWVkaXQtc3VtbWFyeVwiIC8+XHJcbiAgICAgICAgICAgICAgICB7eyBxYS5hbnNWYWx1ZSB9fVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJxYS5xVHlwICE9ICdGaWxlJ1wiPlxyXG4gICAgICAgICAgICAgICAge3sgcWEuYW5zVmFsdWUgfX1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPCEtLSA8ZGl2IGNsYXNzPVwiZmxleGVyMVwiICpuZ0lmPVwiYWJJdGVtXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiXCIgKm5nSWY9XCJhYkl0ZW0uc3RhdHVzID09ICdDb21wbGV0ZWQnICYmIHFiSXRlbS5jYW5jZWxcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMlwiPlxyXG4gICAgICAgIDxidXR0b24gW25nQ2xhc3NdPVwieydidG4tdGV4dCc6IHFiSXRlbS5wcm9ncmVzc0JhcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgYnRuLWJhY2stY29sb3InOiAhcWJJdGVtLnByb2dyZXNzQmFyfVwiXHJcbiAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQ2FuY2VsQ2xpY2soKVwiPlxyXG4gICAgICAgICAge3sgcWJJdGVtLmNhbmNlbCB9fVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PiAtLT5cclxuXHJcbiAgPCEtLSBHcm91cCBBY3Rpb25zIC0tPlxyXG4gIDxkaXYgY2xhc3M9XCJhbGlnbi1lZGl0LXN1Ym1pdFwiICpuZ0lmPVwiYWJJdGVtLnN0YXR1cyAhPSAnQ29tcGxldGVkJ1wiPlxyXG4gICAgPCEtLSBIQSAwMkZFQjI0IEhpZGluZyB0aGUgYnV0dG9uIHdoZW4gdGhlcmUgaXMgbm8gdmFsdWUgZnJvbSB0aGUgYmFja2VuZCAtLT5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwicWJJdGVtLnN1Ym1pdFwiPlxyXG4gICAgICA8YnV0dG9uIFtuZ0NsYXNzXT1cInsgJ2J0bi10ZXh0Mic6IHFiSXRlbS5wcm9ncmVzc0JhcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdueHQtYnRuIGJ0bi1wcmltYXJ5IGJ0bi1sZyBidG4tYmxvY2sgYnRuLWJhY2stY29sb3InOiAhcWJJdGVtLnByb2dyZXNzQmFyIH1cIiBcclxuICAgICAgICAoY2xpY2spPVwiaGFuZGxlU3VibWl0Q2xpY2soKVwiPlxyXG4gICAgICAgIHt7IHFiSXRlbS5zdWJtaXQgfX1cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDwhLS0gSEEgMDJGRUIyNCBIaWRpbmcgdGhlIGJ1dHRvbiB3aGVuIHRoZXJlIGlzIG5vIHZhbHVlIGZyb20gdGhlIGJhY2tlbmQgLS0+XHJcbiAgICA8IS0tIDxkaXYgY2xhc3M9XCJjb2wtbWQtNlwiICpuZ0lmPVwicWJJdGVtLmVkaXRcIj5cclxuICAgICAgPGJ1dHRvbiBbbmdDbGFzc109XCJ7J2dyZXknOiBxYkl0ZW0ucHJvZ3Jlc3NCYXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnh0LWJ0biBidG4tcHJpbWFyeSBidG4tbGcgYnRuLWJsb2NrIGJ0bi1iYWNrLWNvbG9yJzogIXFiSXRlbS5wcm9ncmVzc0Jhcn1cIiBcclxuICAgICAgICAgICAgICAoY2xpY2spPVwiaGFuZGxlQmFja0NsaWNrTmV3KClcIj5cclxuICAgICAgICB7eyBxYkl0ZW0uZWRpdCB9fVxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PiAtLT5cclxuICA8L2Rpdj5cclxuXHJcbjwvZGl2PiJdfQ==
|