@piserve-tech/form-submission 1.3.319 → 1.3.320
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 +24 -24
- package/assets/icons/close-sidebar-mark-icon.svg +3 -3
- package/assets/icons/copy-icon.svg +5 -5
- package/assets/icons/delete-icon.svg +7 -7
- package/assets/icons/delete-no-outline-icon.svg +7 -7
- package/esm2022/form-fields/aggregate-function/aggregate-function.component.mjs +3 -3
- package/esm2022/form-fields/check-box-fields/check-box-fields.component.mjs +10 -7
- package/esm2022/form-fields/currency-fields/currency-fields.component.mjs +11 -8
- package/esm2022/form-fields/date-time-fields/date-time-fields.component.mjs +12 -9
- package/esm2022/form-fields/drop-down-fields/drop-down-fields.component.mjs +11 -8
- package/esm2022/form-fields/file-picker-fields/file-picker-fields.component.mjs +11 -8
- package/esm2022/form-fields/form-fields.module.mjs +1 -1
- package/esm2022/form-fields/hidden-field/hidden-field.component.mjs +26 -19
- package/esm2022/form-fields/iframe-fields/iframe-fields.component.mjs +21 -21
- package/esm2022/form-fields/location-fields/location-fields.component.mjs +3 -3
- package/esm2022/form-fields/mail-fields/mail-fields.component.mjs +11 -8
- package/esm2022/form-fields/mobile-fields/mobile-fields.component.mjs +12 -9
- package/esm2022/form-fields/number-fields/number-fields.component.mjs +11 -8
- package/esm2022/form-fields/password-fields/password-fields.component.mjs +11 -8
- package/esm2022/form-fields/radio-button-fields/radio-button-fields.component.mjs +11 -8
- package/esm2022/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.mjs +12 -9
- package/esm2022/form-fields/section-fields/section-fields.component.mjs +3 -3
- package/esm2022/form-fields/selection-matrix-fields/selection-matrix-fields.component.mjs +11 -8
- package/esm2022/form-fields/signature-fields/signature-fields.component.mjs +3 -3
- package/esm2022/form-fields/slider-fields/slider-fields.component.mjs +12 -9
- package/esm2022/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.mjs +9 -7
- package/esm2022/form-fields/text-area-fields/text-area-fields.component.mjs +11 -8
- package/esm2022/form-fields/text-fields/text-fields.component.mjs +11 -8
- package/esm2022/form-fields/toggle-switch-fields/toggle-switch-fields.component.mjs +10 -7
- package/esm2022/form-fields/url-fields/url-fields.component.mjs +11 -8
- package/esm2022/form-submission/form-submission.module.mjs +1 -1
- package/esm2022/form-submission/header/header.component.mjs +3 -3
- package/esm2022/form-submission/navigation-tabs/navigation-tabs.component.mjs +3 -3
- package/esm2022/form-submission/next-prev-navigation/next-prev-navigation.component.mjs +3 -3
- package/esm2022/form-submission/save-as-draft/saveDraftModalComponent .mjs +3 -3
- package/esm2022/form-submission/submit-form/submit-form.component.mjs +25 -22
- package/esm2022/lib/form-submission.component.mjs +3 -3
- package/esm2022/lib/form-submission.module.mjs +1 -1
- package/esm2022/models/aggregate.model.mjs +1 -1
- package/esm2022/models/answer.model.mjs +1 -1
- package/esm2022/models/appearance.model.mjs +1 -1
- package/esm2022/models/attachment.model.mjs +1 -1
- package/esm2022/models/defaultAnswerEntry.model.mjs +1 -1
- package/esm2022/models/defaultAnswersModel.model.mjs +1 -1
- package/esm2022/models/defaultQuestionAnswer.model.mjs +1 -1
- package/esm2022/models/elementOptionAPI.model.mjs +1 -1
- package/esm2022/models/elementOptionDB.model.mjs +1 -1
- package/esm2022/models/emitters.model.mjs +1 -1
- package/esm2022/models/formElement.model.mjs +1 -1
- package/esm2022/models/grid.model.mjs +1 -1
- package/esm2022/models/hiddenField.model.mjs +1 -1
- package/esm2022/models/iFrameProperties.model.mjs +1 -1
- package/esm2022/models/multifields.model.mjs +1 -1
- package/esm2022/models/page.model.mjs +1 -1
- package/esm2022/models/publicForm.model.mjs +1 -1
- package/esm2022/models/question.model.mjs +1 -1
- package/esm2022/models/questionGroup.model.mjs +1 -1
- package/esm2022/models/scoring.model.mjs +1 -1
- package/esm2022/models/section.model.mjs +1 -1
- package/esm2022/models/subForm.model.mjs +1 -1
- package/esm2022/models/subformConfiguration.model.mjs +1 -1
- package/esm2022/models/subformPropery.model.mjs +1 -1
- package/esm2022/models/submission.model.mjs +1 -1
- package/esm2022/models/submissionCopyConfig.mopdel.mjs +1 -1
- package/esm2022/models/whenClause.model.mjs +1 -1
- package/esm2022/models/whenClauseCondition.model.mjs +1 -1
- package/esm2022/models/whenClauseElements.model.mjs +1 -1
- package/esm2022/question/card-subform/card-subform.component.mjs +83 -53
- package/esm2022/question/confirm-dialog/confirm-dialog.component.mjs +3 -3
- package/esm2022/question/form-elements/form-elements.component.mjs +3 -3
- package/esm2022/question/inline-multiple-subform/inline-multiple-subform.component.mjs +37 -30
- package/esm2022/question/multifields/multifields.component.mjs +3 -3
- package/esm2022/question/multiple-subform/multiple-subform.component.mjs +3 -3
- package/esm2022/question/question/question.component.mjs +3 -3
- package/esm2022/question/question-group/question-group.component.mjs +3 -3
- package/esm2022/question/recursive-logic/recursive-logic.component.mjs +3 -3
- package/esm2022/question/sub-form/sub-form.component.mjs +3 -3
- package/esm2022/services/aggregate.service.mjs +1 -1
- package/esm2022/services/countryService.mjs +1 -1
- package/esm2022/services/data.service.mjs +1 -1
- package/esm2022/services/form-validation.service.mjs +1 -1
- package/esm2022/services/form.service.mjs +1 -1
- package/esm2022/services/hidden-field.service.mjs +160 -0
- package/esm2022/services/mapper.service.mjs +3 -2
- package/esm2022/services/recaptcha.service.mjs +1 -1
- package/esm2022/services/score.service.mjs +1 -1
- package/esm2022/services/subform-copy.service.mjs +1 -1
- package/esm2022/services/whenClause.service.mjs +1 -1
- package/esm2022/shared/shared.module.mjs +1 -1
- package/esm2022/sub-form/submission-modal/submission-modal.component.mjs +3 -3
- package/fesm2022/piserve-tech-form-submission.mjs +457 -225
- package/fesm2022/piserve-tech-form-submission.mjs.map +1 -1
- package/form-fields/check-box-fields/check-box-fields.component.d.ts +3 -1
- package/form-fields/currency-fields/currency-fields.component.d.ts +3 -1
- package/form-fields/date-time-fields/date-time-fields.component.d.ts +3 -1
- package/form-fields/drop-down-fields/drop-down-fields.component.d.ts +3 -1
- package/form-fields/file-picker-fields/file-picker-fields.component.d.ts +3 -1
- package/form-fields/hidden-field/hidden-field.component.d.ts +6 -1
- package/form-fields/mail-fields/mail-fields.component.d.ts +3 -1
- package/form-fields/mobile-fields/mobile-fields.component.d.ts +3 -1
- package/form-fields/number-fields/number-fields.component.d.ts +3 -1
- package/form-fields/password-fields/password-fields.component.d.ts +3 -1
- package/form-fields/radio-button-fields/radio-button-fields.component.d.ts +3 -1
- package/form-fields/rich-text-editor-fields/rich-text-editor-fields.component.d.ts +3 -1
- package/form-fields/selection-matrix-fields/selection-matrix-fields.component.d.ts +3 -1
- package/form-fields/slider-fields/slider-fields.component.d.ts +3 -1
- package/form-fields/terms-and-condition-fields/terms-and-condition-fields.component.d.ts +3 -1
- package/form-fields/text-area-fields/text-area-fields.component.d.ts +3 -1
- package/form-fields/text-fields/text-fields.component.d.ts +3 -1
- package/form-fields/toggle-switch-fields/toggle-switch-fields.component.d.ts +3 -0
- package/form-fields/url-fields/url-fields.component.d.ts +3 -1
- package/form-submission/submit-form/submit-form.component.d.ts +3 -1
- package/models/hiddenField.model.d.ts +1 -0
- package/package.json +1 -1
- package/question/card-subform/card-subform.component.d.ts +7 -1
- package/question/inline-multiple-subform/inline-multiple-subform.component.d.ts +4 -1
- package/services/hidden-field.service.d.ts +31 -0
|
@@ -4,14 +4,16 @@ import * as i1 from "../../services/validation.service";
|
|
|
4
4
|
import * as i2 from "../../services/element-tracker.service";
|
|
5
5
|
import * as i3 from "../../services/aggregate.service";
|
|
6
6
|
import * as i4 from "../../services/whenClause.service";
|
|
7
|
-
import * as i5 from "
|
|
8
|
-
import * as i6 from "@angular/
|
|
7
|
+
import * as i5 from "../../services/hidden-field.service";
|
|
8
|
+
import * as i6 from "@angular/common";
|
|
9
|
+
import * as i7 from "@angular/forms";
|
|
9
10
|
export class NumberFieldsComponent {
|
|
10
|
-
constructor(validationService, tracker, aggregateService, whenClauseService) {
|
|
11
|
+
constructor(validationService, tracker, aggregateService, whenClauseService, hiddenFieldService) {
|
|
11
12
|
this.validationService = validationService;
|
|
12
13
|
this.tracker = tracker;
|
|
13
14
|
this.aggregateService = aggregateService;
|
|
14
15
|
this.whenClauseService = whenClauseService;
|
|
16
|
+
this.hiddenFieldService = hiddenFieldService;
|
|
15
17
|
this.question = {};
|
|
16
18
|
this.inLine = false;
|
|
17
19
|
this.inCard = false;
|
|
@@ -125,6 +127,7 @@ export class NumberFieldsComponent {
|
|
|
125
127
|
}
|
|
126
128
|
this.answerChange.emit({ answer: this.question.answer, maxPossibleScore: 0 });
|
|
127
129
|
this.whenClauseService.setQuestionAnswer(this.question.id, this.question.answer);
|
|
130
|
+
this.hiddenFieldService.updateHiddenFieldsOnChange();
|
|
128
131
|
}
|
|
129
132
|
updateChildLogics(question) {
|
|
130
133
|
if (question.childLogics && Array.isArray(question.childLogics)) {
|
|
@@ -218,13 +221,13 @@ export class NumberFieldsComponent {
|
|
|
218
221
|
this.tracker.unregisterElement(this.elementId);
|
|
219
222
|
}
|
|
220
223
|
}
|
|
221
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NumberFieldsComponent, deps: [{ token: i1.ValidationService }, { token: i2.ElementTrackerService }, { token: i3.AggregationFunctionService }, { token: i4.WhenClauseService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
222
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NumberFieldsComponent, selector: "lib-number-fields", inputs: { question: "question", inLine: "inLine", inCard: "inCard", submissionIndex: "submissionIndex", rowId: "rowId", disableEdit: "disableEdit" }, outputs: { answerChange: "answerChange" }, ngImport: i0, template: "<div\
|
|
224
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NumberFieldsComponent, deps: [{ token: i1.ValidationService }, { token: i2.ElementTrackerService }, { token: i3.AggregationFunctionService }, { token: i4.WhenClauseService }, { token: i5.HiddenFieldService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
225
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: NumberFieldsComponent, selector: "lib-number-fields", inputs: { question: "question", inLine: "inLine", inCard: "inCard", submissionIndex: "submissionIndex", rowId: "rowId", disableEdit: "disableEdit" }, outputs: { answerChange: "answerChange" }, ngImport: i0, template: "<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span>\n <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <input\n type=\"number\"\n class=\"form-control mb-2 height\"\n [placeholder]=\"placeholder\"\n [class.hide-spin-buttons]=\"!upDown\"\n (blur)=\"validateNumber()\"\n [(ngModel)]=\"enteredNumber\"\n [class.invalid]=\"validationFailed\"\n [class.invalid-question]=\"isInvalid && (!inLine || !enteredNumber)\"\n (input)=\"validateInput($event)\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n (wheel)=\"preventNumberScroll($event)\"\n [disabled]=\"disableEdit\"\n />\n <div *ngIf=\"isInvalid && (!inLine || !enteredNumber)\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n {{ validationMessage }}\n </div>\n</div>\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-inline-start:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);right:0;padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;min-width:300px;word-wrap:break-word;word-break:break-word;text-align:center;white-space:normal}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}::ng-deep html lib-formSubmission{font-family:var(--library-font-family)!important;font-size:var(--library-font-size)!important}::ng-deep .timepicker-overlay{z-index:1000!important}::ng-deep .timepicker-backdrop-overlay{z-index:1000!important}.space{width:5px}.error-message{color:#f44336;font-size:.8em;margin-top:4px;padding:0 8px}@keyframes fadeIn{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.hide-spin-buttons::-webkit-outer-spin-button,.hide-spin-buttons::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.invalid-question{border:2px solid #f44336;border-radius:4px;padding:8px;margin-bottom:4px}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.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: i7.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
223
226
|
}
|
|
224
227
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NumberFieldsComponent, decorators: [{
|
|
225
228
|
type: Component,
|
|
226
|
-
args: [{ selector: 'lib-number-fields', template: "<div\
|
|
227
|
-
}], ctorParameters: function () { return [{ type: i1.ValidationService }, { type: i2.ElementTrackerService }, { type: i3.AggregationFunctionService }, { type: i4.WhenClauseService }]; }, propDecorators: { question: [{
|
|
229
|
+
args: [{ selector: 'lib-number-fields', template: "<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span>\n <label>{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <input\n type=\"number\"\n class=\"form-control mb-2 height\"\n [placeholder]=\"placeholder\"\n [class.hide-spin-buttons]=\"!upDown\"\n (blur)=\"validateNumber()\"\n [(ngModel)]=\"enteredNumber\"\n [class.invalid]=\"validationFailed\"\n [class.invalid-question]=\"isInvalid && (!inLine || !enteredNumber)\"\n (input)=\"validateInput($event)\"\n [attr.min]=\"min\"\n [attr.max]=\"max\"\n (wheel)=\"preventNumberScroll($event)\"\n [disabled]=\"disableEdit\"\n />\n <div *ngIf=\"isInvalid && (!inLine || !enteredNumber)\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger error-message\">\n {{ validationMessage }}\n </div>\n</div>\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-inline-start:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);right:0;padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;min-width:300px;word-wrap:break-word;word-break:break-word;text-align:center;white-space:normal}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}::ng-deep html lib-formSubmission{font-family:var(--library-font-family)!important;font-size:var(--library-font-size)!important}::ng-deep .timepicker-overlay{z-index:1000!important}::ng-deep .timepicker-backdrop-overlay{z-index:1000!important}.space{width:5px}.error-message{color:#f44336;font-size:.8em;margin-top:4px;padding:0 8px}@keyframes fadeIn{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.hide-spin-buttons::-webkit-outer-spin-button,.hide-spin-buttons::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.invalid-question{border:2px solid #f44336;border-radius:4px;padding:8px;margin-bottom:4px}\n"] }]
|
|
230
|
+
}], ctorParameters: function () { return [{ type: i1.ValidationService }, { type: i2.ElementTrackerService }, { type: i3.AggregationFunctionService }, { type: i4.WhenClauseService }, { type: i5.HiddenFieldService }]; }, propDecorators: { question: [{
|
|
228
231
|
type: Input
|
|
229
232
|
}], inLine: [{
|
|
230
233
|
type: Input
|
|
@@ -239,4 +242,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
239
242
|
}], disableEdit: [{
|
|
240
243
|
type: Input
|
|
241
244
|
}] } });
|
|
242
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL251bWJlci1maWVsZHMvbnVtYmVyLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL251bWJlci1maWVsZHMvbnVtYmVyLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7OztBQVl2RSxNQUFNLE9BQU8scUJBQXFCO0lBdUJoQyxZQUNZLGlCQUFvQyxFQUNwQyxPQUE4QixFQUM5QixnQkFBMkMsRUFDM0MsaUJBQW1DO1FBSG5DLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsWUFBTyxHQUFQLE9BQU8sQ0FBdUI7UUFDOUIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUEyQjtRQUMzQyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBMUJ0QyxhQUFRLEdBQVEsRUFBRSxDQUFDO1FBQ25CLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFDeEIsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUV2QixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUE4QyxDQUFDO1FBR3hGLFVBQUssR0FBVyxDQUFDLENBQUM7UUFDbEIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixTQUFJLEdBQVcsRUFBRSxDQUFDO1FBR2xCLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBSXpCLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNsQyxzQkFBaUIsR0FBVyxFQUFFLENBQUM7UUFFdEIsZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFDOUIsY0FBUyxHQUFT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QUFTLENBQUMsQ0FBQztTQUNoRDtJQUNILENBQUM7K0dBbFBVLHFCQUFxQjttR0FBckIscUJBQXFCLDBQQ1psQyxvekZBc0VBOzs0RkQxRGEscUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLG1CQUFtQjtxTkFLcEIsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTTtnQkFDRSxLQUFLO3NCQUFiLEtBQUs7Z0JBY0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IExvZ2ljIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2xvZ2ljLm1vZGVsJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbGVtZW50VHJhY2tlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbGVtZW50LXRyYWNrZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uRnVuY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWdncmVnYXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXaGVuQ2xhdXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3doZW5DbGF1c2Uuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1udW1iZXItZmllbGRzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbnVtYmVyLWZpZWxkcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vbnVtYmVyLWZpZWxkcy5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTnVtYmVyRmllbGRzQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBxdWVzdGlvbjogYW55ID0ge307XHJcbiAgQElucHV0KCkgaW5MaW5lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaW5DYXJkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc3VibWlzc2lvbkluZGV4ITogbnVtYmVyO1xyXG4gIEBPdXRwdXQoKSBhbnN3ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgYW5zd2VyOiBhbnk7IG1heFBvc3NpYmxlU2NvcmU/OiBudW1iZXIgfT4oKTtcclxuICBASW5wdXQoKSByb3dJZDogYW55O1xyXG5cclxuICBjb3VudDogbnVtYmVyID0gMDtcclxuICByZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIGhpbnQ6IHN0cmluZyA9ICcnO1xyXG4gIHVwRG93biE6IGJvb2xlYW47XHJcbiAgYWxsb3dOZWdhdGl2ZVZhbHVlcyE6IGJvb2xlYW47XHJcbiAgcGxhY2Vob2xkZXI6IHN0cmluZyA9ICcnO1xyXG4gIG1pbiE6IG51bWJlcjtcclxuICBtYXghOiBudW1iZXI7XHJcbiAgZW50ZXJlZE51bWJlciE6IG51bWJlcjtcclxuICB2YWxpZGF0aW9uRmFpbGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZyA9ICcnO1xyXG4gIGRlZmF1bHRWYWx1ZSE6IG51bWJlcjtcclxuICBASW5wdXQoKSBkaXNhYmxlRWRpdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgZWxlbWVudElkOiBzdHJpbmc9Jyc7XHJcbiAgcHJpdmF0ZSBzdWJzY3JpYmVkVG9XaGVuQ2xhdXNlID0gZmFsc2U7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAgIHByaXZhdGUgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHRyYWNrZXI6IEVsZW1lbnRUcmFja2VyU2VydmljZSxcclxuICAgICAgcHJpdmF0ZSBhZ2dyZWdhdGVTZXJ2aWNlOkFnZ3JlZ2F0aW9uRnVuY3Rpb25TZXJ2aWNlLFxyXG4gICAgICBwcml2YXRlIHdoZW5DbGF1c2VTZXJ2aWNlOldoZW5DbGF1c2VTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy52YWx1ZUFzc2lnbmVkKCk7XHJcbiAgfVxyXG5cclxuICB2YWx1ZUFzc2lnbmVkKCkge1xyXG4gICAgdGhpcy5jb3VudCA9IHRoaXMucXVlc3Rpb24uY291bnQ7XHJcbiAgICB0aGlzLnJlcXVpcmVkID0gdGhpcy5xdWVzdGlvbi5yZXF1aXJlZDtcclxuICAgIHRoaXMuaGludCA9IHRoaXMucXVlc3Rpb24uaGludDtcclxuICAgIHRoaXMudXBEb3duID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5hcHBlYXJhbmNlLnVwQW5kRG93bkJ1dHRvbjtcclxuICAgIHRoaXMuYWxsb3dOZWdhdGl2ZVZhbHVlcyA9XHJcbiAgICAgIHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQuYXBwZWFyYW5jZS5hbGxvd05lZ2F0aXZlVmFsdWVzO1xyXG4gICAgdGhpcy5wbGFjZWhvbGRlciA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQ/LmFwcGVhcmFuY2U/LnBsYWNlaG9sZGVyIHx8ICcnO1xyXG4gICAgdGhpcy5taW4gPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnZhbGlkYXRpb24ubWluO1xyXG4gICAgdGhpcy5tYXggPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnZhbGlkYXRpb24ubWF4O1xyXG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSB0aGlzLnF1ZXN0aW9uPy5kZWZhdWx0VmFsdWU7XHJcbiAgICB0aGlzLmRpc2FibGVFZGl0ID0gdGhpcy5kaXNhYmxlRWRpdCA/PyB0aGlzLnF1ZXN0aW9uPy5kaXNhYmxlRWRpdCA/PyBmYWxzZTtcclxuICAgIHRoaXMuZW50ZXJlZE51bWJlciA9IHRoaXMuZGVmYXVsdFZhbHVlO1xyXG4gICAgaWYodGhpcy5xdWVzdGlvbi5hbnN3ZXIpe1xyXG4gICAgICB0aGlzLmVudGVyZWROdW1iZXIgPSB0aGlzLnF1ZXN0aW9uPy5hbnN3ZXI7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMud2hlbkNsYXVzZVNlcnZpY2Uuc2V0UXVlc3Rpb25BbnN3ZXIodGhpcy5xdWVzdGlvbi5pZCx0aGlzLmVudGVyZWROdW1iZXIsdHJ1ZSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfWVsc2UgaWYodGhpcy5kZWZhdWx0VmFsdWUgJiYgIXRoaXMucXVlc3Rpb24uYW5zd2VyKXtcclxuICAgICAgdGhpcy5xdWVzdGlvbi5hbnN3ZXIgPSB0aGlzLmRlZmF1bHRWYWx1ZTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy53aGVuQ2xhdXNlU2VydmljZS5zZXRRdWVzdGlvbkFuc3dlcih0aGlzLnF1ZXN0aW9uLmlkLHRoaXMucXVlc3Rpb24uYW5zd2VyLHRydWUpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZXtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy53aGVuQ2xhdXNlU2VydmljZS5zZXRRdWVzdGlvbkFuc3dlcih0aGlzLnF1ZXN0aW9uLmlkLCcnLHRydWUpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmNoaWxkTG9naWNzICYmIHRoaXMucXVlc3Rpb24uYW5zd2VyKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlQ2hpbGRMb2dpY3ModGhpcy5xdWVzdGlvbik7XHJcbiAgICB9XHJcbiAgICB0aGlzLmFnZ3JlZ2F0ZVNlcnZpY2Uuc2V0TnVtYmVyRmllbGQodGhpcy5yb3dJZCx0aGlzLnF1ZXN0aW9uLmlkLHRoaXMucXVlc3Rpb24uYW5zd2VyKTtcclxuICB9XHJcblxyXG4gIHByZXZlbnROdW1iZXJTY3JvbGwoZXZlbnQ6IFdoZWVsRXZlbnQpIHtcclxuICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBldmVudC50YXJnZXQpIHtcclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHZhbGlkYXRlTnVtYmVyKCkge1xyXG4gICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmNsZWFySW52YWxpZCh0aGlzLmJ1aWxkRWxlbWVudElkKCkpO1xyXG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICcnO1xyXG4gICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIXRoaXMuZW50ZXJlZE51bWJlciAmJiB0aGlzLnF1ZXN0aW9uLnJlcXVpcmVkKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGEgdmFsaWQgbnVtYmVyYDtcclxuICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGEgdmFsaWQgbnVtYmVyYDtcclxuICAgICAgICAgICBpZiAoIXRoaXMuc3Vic2NyaWJlZFRvV2hlbkNsYXVzZSkge1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlZFRvV2hlbkNsYXVzZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy53aGVuQ2xhdXNlU2VydmljZS5vblF1ZXN0aW9uQ2hhbmdlKCkuc3Vic2NyaWJlKGNoYW5nZSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnZhbGlkYXRlTnVtYmVyKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgICB9IGVsc2UgaWYgKCF0aGlzLmFsbG93TmVnYXRpdmVWYWx1ZXMgJiYgdGhpcy5lbnRlcmVkTnVtYmVyIDwgMCkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gJ1BsZWFzZSBlbnRlciBhIHBvc2l0aXZlIG51bWJlcic7XHJcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb25NZXNzYWdlID0gJ1BsZWFzZSBlbnRlciBhIHBvc2l0aXZlIG51bWJlcic7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAodGhpcy5taW4gIT09IHVuZGVmaW5lZCAmJiB0aGlzLmVudGVyZWROdW1iZXIgPCB0aGlzLm1pbikgfHxcclxuICAgICAgKHRoaXMubWF4ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5lbnRlcmVkTnVtYmVyID4gdGhpcy5tYXgpXHJcbiAgICApIHtcclxuICAgICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gdHJ1ZTtcclxuXHJcbiAgICAgIC8vIENvbnN0cnVjdCBhcHByb3ByaWF0ZSB2YWxpZGF0aW9uIG1lc3NhZ2UgYmFzZWQgb24gd2hldGhlciBtaW4sIG1heCwgb3IgYm90aCBhcmUgcHJvdmlkZWRcclxuICAgICAgaWYgKHRoaXMubWluICE9PSB1bmRlZmluZWQgJiYgdGhpcy5tYXggIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGEgdmFsaWQgbnVtYmVyIGJldHdlZW4gJHt0aGlzLm1pbn0gYW5kICR7dGhpcy5tYXh9YDtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb25NZXNzYWdlID0gYFBsZWFzZSBlbnRlciBhIHZhbGlkIG51bWJlciBiZXR3ZWVuICR7dGhpcy5taW59IGFuZCAke3RoaXMubWF4fWA7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5taW4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAke3RoaXMubWlufWA7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uTWVzc2FnZSA9IGBQbGVhc2UgZW50ZXIgYSBudW1iZXIgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICR7dGhpcy5taW59YDtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLm1heCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9IGBQbGVhc2UgZW50ZXIgYSBudW1iZXIgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICR7dGhpcy5tYXh9YDtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb25NZXNzYWdlID0gYFBsZWFzZSBlbnRlciBhIG51bWJlciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJHt0aGlzLm1heH1gO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5jaGlsZExvZ2ljcykge1xyXG4gICAgICB0aGlzLnVwZGF0ZUNoaWxkTG9naWNzKHRoaXMucXVlc3Rpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVJbnB1dChldmVudDogYW55KSB7XHJcbiAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmNsZWFySW52YWxpZCh0aGlzLmJ1aWxkRWxlbWVudElkKCkpO1xyXG4gICAgdGhpcy5xdWVzdGlvbi5hbnN3ZXIgPSBldmVudC50YXJnZXQudmFsdWU7XHJcbiAgICB0aGlzLmFnZ3JlZ2F0ZVNlcnZpY2Uuc2V0TnVtYmVyRmllbGQodGhpcy5yb3dJZCx0aGlzLnF1ZXN0aW9uLmlkLCBldmVudC50YXJnZXQudmFsdWUpO1xyXG4gICAgaWYgKHRoaXMucXVlc3Rpb24uY2hpbGRMb2dpY3MpIHtcclxuICAgICAgdGhpcy51cGRhdGVDaGlsZExvZ2ljcyh0aGlzLnF1ZXN0aW9uKTtcclxuICAgIH1cclxuICAgIHRoaXMuYW5zd2VyQ2hhbmdlLmVtaXQoe2Fuc3dlcjp0aGlzLnF1ZXN0aW9uLmFuc3dlcixtYXhQb3NzaWJsZVNjb3JlOjB9KTtcclxuICAgIHRoaXMud2hlbkNsYXVzZVNlcnZpY2Uuc2V0UXVlc3Rpb25BbnN3ZXIodGhpcy5xdWVzdGlvbi5pZCx0aGlzLnF1ZXN0aW9uLmFuc3dlcik7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVDaGlsZExvZ2ljcyhxdWVzdGlvbjogYW55KSB7XHJcbiAgICBpZiAocXVlc3Rpb24uY2hpbGRMb2dpY3MgJiYgQXJyYXkuaXNBcnJheShxdWVzdGlvbi5jaGlsZExvZ2ljcykpIHtcclxuICAgICAgcXVlc3Rpb24uY2hpbGRMb2dpY3MuZm9yRWFjaCgoY2hpbGRMb2dpYzogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5ldmFsdWF0ZUNvbmRpdGlvbihcclxuICAgICAgICAgICAgcXVlc3Rpb24uYW5zd2VyLFxyXG4gICAgICAgICAgICBjaGlsZExvZ2ljLmNvbmRpdGlvbixcclxuICAgICAgICAgICAgY2hpbGRMb2dpYy5pbnB1dFZhbHVlXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBjaGlsZExvZ2ljLnNob3dMb2dpYyA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNoaWxkTG9naWMuc2hvd0xvZ2ljID0gZmFsc2U7XHJcbiAgICAgICAgICB0aGlzLmNsZWFyQW5zd2Vyc1JlY3Vyc2l2ZWx5KGNoaWxkTG9naWMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhckFuc3dlcnNSZWN1cnNpdmVseShsb2dpYzogYW55KSB7XHJcbiAgICBpZiAoIWxvZ2ljIHx8ICFsb2dpYy5yb3dzKSByZXR1cm47XHJcblxyXG4gICAgbG9naWMucm93cy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xyXG4gICAgICByb3cuZ3JpZC5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gaXRlbS5lbGVtZW50O1xyXG5cclxuICAgICAgICBpZiAoaXRlbS5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nICYmIGVsZW1lbnQpIHtcclxuICAgICAgICAgIC8vIENsZWFyIGFuc3dlciBpZiBwcmVzZW50XHJcbiAgICAgICAgICBpZiAoJ2Fuc3dlcicgaW4gZWxlbWVudCkge1xyXG4gICAgICAgICAgICBlbGVtZW50LmFuc3dlciA9ICcnO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNsZWFyIGNoaWxkTG9naWNzIGlmIGFueVxyXG4gICAgICAgICAgaWYgKGVsZW1lbnQuY2hpbGRMb2dpY3MgJiYgZWxlbWVudC5jaGlsZExvZ2ljcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY2hpbGRMb2dpY3MuZm9yRWFjaCgoY2hpbGRMb2dpYzogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jbGVhckFuc3dlcnNSZWN1cnNpdmVseShjaGlsZExvZ2ljKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaXRlbS5lbnRpdHlUeXBlID09PSAnU1VCRk9STScgJiYgZWxlbWVudCAmJiBlbGVtZW50LnJvd3MpIHtcclxuICAgICAgICAgIC8vIFNVQkZPUk0gY29udGFpbnMgaXRzIG93biByb3dzIHN0cnVjdHVyZSBsaWtlIGEgZm9ybVxyXG4gICAgICAgICAgdGhpcy5jbGVhckFuc3dlcnNSZWN1cnNpdmVseSh7IHJvd3M6IGVsZW1lbnQucm93cyB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBldmFsdWF0ZUNvbmRpdGlvbihhbnN3ZXI6IGFueSwgY29uZGl0aW9uOiBhbnksIGlucHV0VmFsdWU6IGFueSkge1xyXG4gICAgc3dpdGNoIChjb25kaXRpb24pIHtcclxuICAgICAgY2FzZSAnPic6XHJcbiAgICAgICAgcmV0dXJuIGFuc3dlciA+IE51bWJlcihpbnB1dFZhbHVlKTtcclxuICAgICAgY2FzZSAnPCc6XHJcbiAgICAgICAgcmV0dXJuIGFuc3dlciA8IE51bWJlcihpbnB1dFZhbHVlKTtcclxuICAgICAgY2FzZSAnPj0nOlxyXG4gICAgICAgIHJldHVybiBhbnN3ZXIgPj0gTnVtYmVyKGlucHV0VmFsdWUpO1xyXG4gICAgICBjYXNlICc8PSc6XHJcbiAgICAgICAgcmV0dXJuIGFuc3dlciA8PSBOdW1iZXIoaW5wdXRWYWx1ZSk7XHJcbiAgICAgIGNhc2UgJz0nOlxyXG4gICAgICAgIHJldHVybiBhbnN3ZXIgPT0gaW5wdXRWYWx1ZTtcclxuICAgICAgY2FzZSAnIT0nOlxyXG4gICAgICAgIHJldHVybiBhbnN3ZXIgIT0gaW5wdXRWYWx1ZTtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGhhbmRsZVZhbGlkYXRpb24oaXNWYWxpZDogYm9vbGVhbiwgbWVzc2FnZTogc3RyaW5nID0gJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnKSB7XHJcbiAgICBpZiAoaXNWYWxpZCkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmNsZWFySW52YWxpZCh0aGlzLmJ1aWxkRWxlbWVudElkKCkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdGhpcy52YWxpZGF0aW9uU2VydmljZS5zZXRJbnZhbGlkKHRoaXMucXVlc3Rpb24uaWQsIG1lc3NhZ2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZEVsZW1lbnRJZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICh0aGlzLmluTGluZSB8fCB0aGlzLmluQ2FyZClcclxuICAgICAgPyBgJHt0aGlzLnN1Ym1pc3Npb25JbmRleH0tJHt0aGlzLnF1ZXN0aW9uLmlkfWBcclxuICAgICAgOiBgJHt0aGlzLnF1ZXN0aW9uLmlkfWA7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNJbnZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICEhdGhpcy52YWxpZGF0aW9uU2VydmljZS5nZXRFcnJvck1lc3NhZ2UodGhpcy5idWlsZEVsZW1lbnRJZCgpKTtcclxuICB9XHJcblxyXG4gIGdldCBlcnJvck1lc3NhZ2UoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0aW9uU2VydmljZS5nZXRFcnJvck1lc3NhZ2UodGhpcy5idWlsZEVsZW1lbnRJZCgpKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGlmICh0aGlzLmluTGluZSB8fCB0aGlzLmluQ2FyZCkge1xyXG4gICAgICB0aGlzLmVsZW1lbnRJZCA9IGBxdWVzdGlvbi0ke3RoaXMuc3VibWlzc2lvbkluZGV4fS0ke3RoaXMucXVlc3Rpb24uaWR9YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZWxlbWVudElkID0gYHF1ZXN0aW9uLSR7dGhpcy5xdWVzdGlvbi5pZH1gO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudHJhY2tlci5yZWdpc3RlckVsZW1lbnQodGhpcy5lbGVtZW50SWQpO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMud2hlbkNsYXVzZVNlcnZpY2UubWFya0xvYWRDb21wbGV0ZWQoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICBpZiAodGhpcy5lbGVtZW50SWQpIHtcclxuICAgICAgdGhpcy50cmFja2VyLnVucmVnaXN0ZXJFbGVtZW50KHRoaXMuZWxlbWVudElkKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdlxyXG4gIFtuZ0NsYXNzXT1cInsgJ21iLTQnOiAhaW5MaW5lIH1cIlxyXG4gIGNsYXNzPVwicHgtM1wiXHJcbiAgW2lkXT1cIihpbkxpbmUgfHwgaW5DYXJkKSA/ICdxdWVzdGlvbi0nICsgc3VibWlzc2lvbkluZGV4ICsgJy0nICsgcXVlc3Rpb24uaWQgOiAncXVlc3Rpb24tJyArIHF1ZXN0aW9uLmlkXCJcclxuICBbYXR0ci5uYW1lXT1cInF1ZXN0aW9uLnRlc3RFbGVtZW50TmFtZVwiXHJcbj5cclxuICA8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcHBlciBtYi0yXCIgKm5nSWY9XCIhaW5MaW5lXCI+XHJcbiAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25OdW1iZXJcIiBbaW5uZXJIVE1MXT1cInF1ZXN0aW9uLnF1ZXN0aW9uTnVtYmVyXCI+PC9kaXY+XHJcbiAgICA8c3BhbiAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uTnVtYmVyXCIgY2xhc3M9XCJzcGFjZVwiPjwvc3Bhbj5cclxuICAgIDxsYWJlbD57eyBxdWVzdGlvbi5xdWVzdGlvbiB9fTwvbGFiZWxcclxuICAgID4mbmJzcDtcclxuICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cInF1ZXN0aW9uPy5yZXF1aXJlZFwiPio8L3NwYW4+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGNsYXNzPVwic3ZnLXdyYXBwZXIgbWItMiBoaW50SWNvblwiXHJcbiAgICAgIFthdHRyLmRhdGEtdGl0bGVdPVwiaGludFwiXHJcbiAgICAgICpuZ0lmPVwiaGludFwiXHJcbiAgICA+XHJcbiAgICAgIDxzdmdcclxuICAgICAgICBjbGFzcz1cImhpbnRTdmdcIlxyXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMzAgMzBcIlxyXG4gICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHBhdGhcclxuICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXHJcbiAgICAgICAgICBkPVwiTTE1IDI2LjI1VjI2LjI1QzguNzg2MjUgMjYuMjUgMy43NSAyMS4yMTM4IDMuNzUgMTVWMTVDMy43NSA4Ljc4NjI1IDguNzg2MjUgMy43NSAxNSAzLjc1VjMuNzVDMjEuMjEzOCAzLjc1IDI2LjI1IDguNzg2MjUgMjYuMjUgMTVWMTVDMjYuMjUgMjEuMjEzOCAyMS4yMTM4IDI2LjI1IDE1IDI2LjI1WlwiXHJcbiAgICAgICAgICBzdHJva2U9XCIjMzIzMjMyXCJcclxuICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXHJcbiAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxwYXRoXHJcbiAgICAgICAgICBkPVwiTTE1IDE2LjU2MjNWMTYuMjQ5OEMxNSAxNS4yMjg1IDE1LjYzMTIgMTQuNjc0OCAxNi4yNjM3IDE0LjI0OThDMTYuODgxMiAxMy44MzM1IDE3LjUgMTMuMjkxIDE3LjUgMTIuMjkxQzE3LjUgMTAuOTA5OCAxNi4zODEzIDkuNzkxMDIgMTUgOS43OTEwMkMxMy42MTg3IDkuNzkxMDIgMTIuNSAxMC45MDk4IDEyLjUgMTIuMjkxXCJcclxuICAgICAgICAgIHN0cm9rZT1cIiMzMjMyMzJcIlxyXG4gICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcclxuICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgPHBhdGhcclxuICAgICAgICAgIGQ9XCJNMTQuOTk4OCAyMEMxNC44MjYzIDIwIDE0LjY4NjMgMjAuMTQgMTQuNjg3NSAyMC4zMTI1QzE0LjY4NzUgMjAuNDg1IDE0LjgyNzUgMjAuNjI1IDE1IDIwLjYyNUMxNS4xNzI1IDIwLjYyNSAxNS4zMTI1IDIwLjQ4NSAxNS4zMTI1IDIwLjMxMjVDMTUuMzEyNSAyMC4xNCAxNS4xNzI1IDIwIDE0Ljk5ODggMjBcIlxyXG4gICAgICAgICAgc3Ryb2tlPVwiIzMyMzIzMlwiXHJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxyXG4gICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9zdmc+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8aW5wdXRcclxuICAgIHR5cGU9XCJudW1iZXJcIlxyXG4gICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbWItMiBoZWlnaHRcIlxyXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcclxuICAgIFtjbGFzcy5oaWRlLXNwaW4tYnV0dG9uc109XCIhdXBEb3duXCJcclxuICAgIChibHVyKT1cInZhbGlkYXRlTnVtYmVyKClcIlxyXG4gICAgWyhuZ01vZGVsKV09XCJlbnRlcmVkTnVtYmVyXCJcclxuICAgIFtjbGFzcy5pbnZhbGlkXT1cInZhbGlkYXRpb25GYWlsZWRcIlxyXG4gICAgW2NsYXNzLmludmFsaWQtcXVlc3Rpb25dPVwiaXNJbnZhbGlkICYmICghaW5MaW5lIHx8ICFlbnRlcmVkTnVtYmVyKVwiXHJcbiAgICAoaW5wdXQpPVwidmFsaWRhdGVJbnB1dCgkZXZlbnQpXCJcclxuICAgIFthdHRyLm1pbl09XCJtaW5cIlxyXG4gICAgW2F0dHIubWF4XT1cIm1heFwiXHJcbiAgICAod2hlZWwpPVwicHJldmVudE51bWJlclNjcm9sbCgkZXZlbnQpXCJcclxuICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlRWRpdFwiXHJcbiAgLz5cclxuICA8ZGl2ICpuZ0lmPVwiaXNJbnZhbGlkICYmICghaW5MaW5lIHx8ICFlbnRlcmVkTnVtYmVyKVwiIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiPlxyXG4gICAge3sgZXJyb3JNZXNzYWdlIH19XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAqbmdJZj1cInZhbGlkYXRpb25GYWlsZWQgJiYgIWlzSW52YWxpZFwiIGNsYXNzPVwidGV4dC1kYW5nZXIgZXJyb3ItbWVzc2FnZVwiPlxyXG4gICAge3sgdmFsaWRhdGlvbk1lc3NhZ2UgfX1cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbiJdfQ==
|
|
245
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLWZpZWxkcy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL251bWJlci1maWVsZHMvbnVtYmVyLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL251bWJlci1maWVsZHMvbnVtYmVyLWZpZWxkcy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7Ozs7Ozs7QUFhdkUsTUFBTSxPQUFPLHFCQUFxQjtJQXVCaEMsWUFDWSxpQkFBb0MsRUFDcEMsT0FBOEIsRUFDOUIsZ0JBQTJDLEVBQzNDLGlCQUFtQyxFQUNuQyxrQkFBcUM7UUFKckMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxZQUFPLEdBQVAsT0FBTyxDQUF1QjtRQUM5QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQTJCO1FBQzNDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFDbkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFtQjtRQTNCeEMsYUFBUSxHQUFRLEVBQUUsQ0FBQztRQUNuQixXQUFNLEdBQVksS0FBSyxDQUFDO1FBQ3hCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFFdkIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBOEMsQ0FBQztRQUd4RixVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBQ2xCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsU0FBSSxHQUFXLEVBQUUsQ0FBQztRQUdsQixnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUl6QixxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDbEMsc0JBQWlCLEdBQVcsRUFBRSxD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QztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDaEQ7SUFDSCxDQUFDOytHQXBQVSxxQkFBcUI7bUdBQXJCLHFCQUFxQiwwUENibEMsd3FGQXNFQTs7NEZEekRhLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxtQkFBbUI7c1BBS3BCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0UsS0FBSztzQkFBYixLQUFLO2dCQWNHLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTG9naWMgfSBmcm9tICcuLi8uLi9tb2RlbHMvbG9naWMubW9kZWwnO1xuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWxlbWVudFRyYWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWxlbWVudC10cmFja2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQWdncmVnYXRpb25GdW5jdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hZ2dyZWdhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBXaGVuQ2xhdXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3doZW5DbGF1c2Uuc2VydmljZSc7XG5pbXBvcnQgeyBIaWRkZW5GaWVsZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9oaWRkZW4tZmllbGQuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1udW1iZXItZmllbGRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL251bWJlci1maWVsZHMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9udW1iZXItZmllbGRzLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIE51bWJlckZpZWxkc0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHF1ZXN0aW9uOiBhbnkgPSB7fTtcbiAgQElucHV0KCkgaW5MaW5lOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGluQ2FyZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzdWJtaXNzaW9uSW5kZXghOiBudW1iZXI7XG4gIEBPdXRwdXQoKSBhbnN3ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgYW5zd2VyOiBhbnk7IG1heFBvc3NpYmxlU2NvcmU/OiBudW1iZXIgfT4oKTtcbiAgQElucHV0KCkgcm93SWQ6IGFueTtcblxuICBjb3VudDogbnVtYmVyID0gMDtcbiAgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaGludDogc3RyaW5nID0gJyc7XG4gIHVwRG93biE6IGJvb2xlYW47XG4gIGFsbG93TmVnYXRpdmVWYWx1ZXMhOiBib29sZWFuO1xuICBwbGFjZWhvbGRlcjogc3RyaW5nID0gJyc7XG4gIG1pbiE6IG51bWJlcjtcbiAgbWF4ITogbnVtYmVyO1xuICBlbnRlcmVkTnVtYmVyITogbnVtYmVyO1xuICB2YWxpZGF0aW9uRmFpbGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHZhbGlkYXRpb25NZXNzYWdlOiBzdHJpbmcgPSAnJztcbiAgZGVmYXVsdFZhbHVlITogbnVtYmVyO1xuICBASW5wdXQoKSBkaXNhYmxlRWRpdDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGVsZW1lbnRJZDogc3RyaW5nPScnO1xuICBwcml2YXRlIHN1YnNjcmliZWRUb1doZW5DbGF1c2UgPSBmYWxzZTtcbiAgY29uc3RydWN0b3IoXG4gICAgICBwcml2YXRlIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZSxcbiAgICAgIHByaXZhdGUgdHJhY2tlcjogRWxlbWVudFRyYWNrZXJTZXJ2aWNlLFxuICAgICAgcHJpdmF0ZSBhZ2dyZWdhdGVTZXJ2aWNlOkFnZ3JlZ2F0aW9uRnVuY3Rpb25TZXJ2aWNlLFxuICAgICAgcHJpdmF0ZSB3aGVuQ2xhdXNlU2VydmljZTpXaGVuQ2xhdXNlU2VydmljZSxcbiAgICAgIHByaXZhdGUgaGlkZGVuRmllbGRTZXJ2aWNlOkhpZGRlbkZpZWxkU2VydmljZVxuICAgICkge1xuICAgIH1cblxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMudmFsdWVBc3NpZ25lZCgpO1xuICB9XG5cbiAgdmFsdWVBc3NpZ25lZCgpIHtcbiAgICB0aGlzLmNvdW50ID0gdGhpcy5xdWVzdGlvbi5jb3VudDtcbiAgICB0aGlzLnJlcXVpcmVkID0gdGhpcy5xdWVzdGlvbi5yZXF1aXJlZDtcbiAgICB0aGlzLmhpbnQgPSB0aGlzLnF1ZXN0aW9uLmhpbnQ7XG4gICAgdGhpcy51cERvd24gPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LmFwcGVhcmFuY2UudXBBbmREb3duQnV0dG9uO1xuICAgIHRoaXMuYWxsb3dOZWdhdGl2ZVZhbHVlcyA9XG4gICAgICB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LmFwcGVhcmFuY2UuYWxsb3dOZWdhdGl2ZVZhbHVlcztcbiAgICB0aGlzLnBsYWNlaG9sZGVyID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudD8uYXBwZWFyYW5jZT8ucGxhY2Vob2xkZXIgfHwgJyc7XG4gICAgdGhpcy5taW4gPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnZhbGlkYXRpb24ubWluO1xuICAgIHRoaXMubWF4ID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC52YWxpZGF0aW9uLm1heDtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IHRoaXMucXVlc3Rpb24/LmRlZmF1bHRWYWx1ZTtcbiAgICB0aGlzLmRpc2FibGVFZGl0ID0gdGhpcy5kaXNhYmxlRWRpdCA/PyB0aGlzLnF1ZXN0aW9uPy5kaXNhYmxlRWRpdCA/PyBmYWxzZTtcbiAgICB0aGlzLmVudGVyZWROdW1iZXIgPSB0aGlzLmRlZmF1bHRWYWx1ZTtcbiAgICBpZih0aGlzLnF1ZXN0aW9uLmFuc3dlcil7XG4gICAgICB0aGlzLmVudGVyZWROdW1iZXIgPSB0aGlzLnF1ZXN0aW9uPy5hbnN3ZXI7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy53aGVuQ2xhdXNlU2VydmljZS5zZXRRdWVzdGlvbkFuc3dlcih0aGlzLnF1ZXN0aW9uLmlkLHRoaXMuZW50ZXJlZE51bWJlcix0cnVlKTtcbiAgICAgIH0pO1xuICAgIH1lbHNlIGlmKHRoaXMuZGVmYXVsdFZhbHVlICYmICF0aGlzLnF1ZXN0aW9uLmFuc3dlcil7XG4gICAgICB0aGlzLnF1ZXN0aW9uLmFuc3dlciA9IHRoaXMuZGVmYXVsdFZhbHVlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMud2hlbkNsYXVzZVNlcnZpY2Uuc2V0UXVlc3Rpb25BbnN3ZXIodGhpcy5xdWVzdGlvbi5pZCx0aGlzLnF1ZXN0aW9uLmFuc3dlcix0cnVlKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZXtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLndoZW5DbGF1c2VTZXJ2aWNlLnNldFF1ZXN0aW9uQW5zd2VyKHRoaXMucXVlc3Rpb24uaWQsJycsdHJ1ZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlc3Rpb24uY2hpbGRMb2dpY3MgJiYgdGhpcy5xdWVzdGlvbi5hbnN3ZXIpIHtcbiAgICAgIHRoaXMudXBkYXRlQ2hpbGRMb2dpY3ModGhpcy5xdWVzdGlvbik7XG4gICAgfVxuICAgIHRoaXMuYWdncmVnYXRlU2VydmljZS5zZXROdW1iZXJGaWVsZCh0aGlzLnJvd0lkLHRoaXMucXVlc3Rpb24uaWQsdGhpcy5xdWVzdGlvbi5hbnN3ZXIpO1xuICB9XG5cbiAgcHJldmVudE51bWJlclNjcm9sbChldmVudDogV2hlZWxFdmVudCkge1xuICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBldmVudC50YXJnZXQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVOdW1iZXIoKSB7XG4gICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gZmFsc2U7XG4gICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5jbGVhckludmFsaWQodGhpcy5idWlsZEVsZW1lbnRJZCgpKTtcbiAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gJyc7XG4gICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIXRoaXMuZW50ZXJlZE51bWJlciAmJiB0aGlzLnF1ZXN0aW9uLnJlcXVpcmVkKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQgPSB0cnVlO1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9IGBQbGVhc2UgZW50ZXIgYSB2YWxpZCBudW1iZXJgO1xuICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gZmFsc2U7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb25NZXNzYWdlID0gYFBsZWFzZSBlbnRlciBhIHZhbGlkIG51bWJlcmA7XG4gICAgICAgICAgIGlmICghdGhpcy5zdWJzY3JpYmVkVG9XaGVuQ2xhdXNlKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlZFRvV2hlbkNsYXVzZSA9IHRydWU7XG4gICAgICAgIHRoaXMud2hlbkNsYXVzZVNlcnZpY2Uub25RdWVzdGlvbkNoYW5nZSgpLnN1YnNjcmliZShjaGFuZ2UgPT4ge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGVOdW1iZXIoKTtcbiAgICB9KTtcbiAgfVxuICAgIH0gZWxzZSBpZiAoIXRoaXMuYWxsb3dOZWdhdGl2ZVZhbHVlcyAmJiB0aGlzLmVudGVyZWROdW1iZXIgPCAwKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQgPSB0cnVlO1xuICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICdQbGVhc2UgZW50ZXIgYSBwb3NpdGl2ZSBudW1iZXInO1xuICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gZmFsc2U7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb25NZXNzYWdlID0gJ1BsZWFzZSBlbnRlciBhIHBvc2l0aXZlIG51bWJlcic7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgICh0aGlzLm1pbiAhPT0gdW5kZWZpbmVkICYmIHRoaXMuZW50ZXJlZE51bWJlciA8IHRoaXMubWluKSB8fFxuICAgICAgKHRoaXMubWF4ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5lbnRlcmVkTnVtYmVyID4gdGhpcy5tYXgpXG4gICAgKSB7XG4gICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQgPSB0cnVlO1xuXG4gICAgICAvLyBDb25zdHJ1Y3QgYXBwcm9wcmlhdGUgdmFsaWRhdGlvbiBtZXNzYWdlIGJhc2VkIG9uIHdoZXRoZXIgbWluLCBtYXgsIG9yIGJvdGggYXJlIHByb3ZpZGVkXG4gICAgICBpZiAodGhpcy5taW4gIT09IHVuZGVmaW5lZCAmJiB0aGlzLm1heCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGEgdmFsaWQgbnVtYmVyIGJldHdlZW4gJHt0aGlzLm1pbn0gYW5kICR7dGhpcy5tYXh9YDtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uTWVzc2FnZSA9IGBQbGVhc2UgZW50ZXIgYSB2YWxpZCBudW1iZXIgYmV0d2VlbiAke3RoaXMubWlufSBhbmQgJHt0aGlzLm1heH1gO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLm1pbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAke3RoaXMubWlufWA7XG4gICAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAke3RoaXMubWlufWA7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubWF4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9IGBQbGVhc2UgZW50ZXIgYSBudW1iZXIgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICR7dGhpcy5tYXh9YDtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uTWVzc2FnZSA9IGBQbGVhc2UgZW50ZXIgYSBudW1iZXIgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICR7dGhpcy5tYXh9YDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLnF1ZXN0aW9uLmNoaWxkTG9naWNzKSB7XG4gICAgICB0aGlzLnVwZGF0ZUNoaWxkTG9naWNzKHRoaXMucXVlc3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlSW5wdXQoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuY2xlYXJJbnZhbGlkKHRoaXMuYnVpbGRFbGVtZW50SWQoKSk7XG4gICAgdGhpcy5xdWVzdGlvbi5hbnN3ZXIgPSBldmVudC50YXJnZXQudmFsdWU7XG4gICAgdGhpcy5hZ2dyZWdhdGVTZXJ2aWNlLnNldE51bWJlckZpZWxkKHRoaXMucm93SWQsdGhpcy5xdWVzdGlvbi5pZCwgZXZlbnQudGFyZ2V0LnZhbHVlKTtcbiAgICBpZiAodGhpcy5xdWVzdGlvbi5jaGlsZExvZ2ljcykge1xuICAgICAgdGhpcy51cGRhdGVDaGlsZExvZ2ljcyh0aGlzLnF1ZXN0aW9uKTtcbiAgICB9XG4gICAgdGhpcy5hbnN3ZXJDaGFuZ2UuZW1pdCh7YW5zd2VyOnRoaXMucXVlc3Rpb24uYW5zd2VyLG1heFBvc3NpYmxlU2NvcmU6MH0pO1xuICAgIHRoaXMud2hlbkNsYXVzZVNlcnZpY2Uuc2V0UXVlc3Rpb25BbnN3ZXIodGhpcy5xdWVzdGlvbi5pZCx0aGlzLnF1ZXN0aW9uLmFuc3dlcik7XG4gICAgdGhpcy5oaWRkZW5GaWVsZFNlcnZpY2UudXBkYXRlSGlkZGVuRmllbGRzT25DaGFuZ2UoKTtcbiAgfVxuXG4gIHVwZGF0ZUNoaWxkTG9naWNzKHF1ZXN0aW9uOiBhbnkpIHtcbiAgICBpZiAocXVlc3Rpb24uY2hpbGRMb2dpY3MgJiYgQXJyYXkuaXNBcnJheShxdWVzdGlvbi5jaGlsZExvZ2ljcykpIHtcbiAgICAgIHF1ZXN0aW9uLmNoaWxkTG9naWNzLmZvckVhY2goKGNoaWxkTG9naWM6IGFueSkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5ldmFsdWF0ZUNvbmRpdGlvbihcbiAgICAgICAgICAgIHF1ZXN0aW9uLmFuc3dlcixcbiAgICAgICAgICAgIGNoaWxkTG9naWMuY29uZGl0aW9uLFxuICAgICAgICAgICAgY2hpbGRMb2dpYy5pbnB1dFZhbHVlXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBjaGlsZExvZ2ljLnNob3dMb2dpYyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2hpbGRMb2dpYy5zaG93TG9naWMgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmNsZWFyQW5zd2Vyc1JlY3Vyc2l2ZWx5KGNoaWxkTG9naWMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjbGVhckFuc3dlcnNSZWN1cnNpdmVseShsb2dpYzogYW55KSB7XG4gICAgaWYgKCFsb2dpYyB8fCAhbG9naWMucm93cykgcmV0dXJuO1xuXG4gICAgbG9naWMucm93cy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgcm93LmdyaWQuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBpdGVtLmVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKGl0ZW0uZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OJyAmJiBlbGVtZW50KSB7XG4gICAgICAgICAgLy8gQ2xlYXIgYW5zd2VyIGlmIHByZXNlbnRcbiAgICAgICAgICBpZiAoJ2Fuc3dlcicgaW4gZWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbWVudC5hbnN3ZXIgPSAnJztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBjbGVhciBjaGlsZExvZ2ljcyBpZiBhbnlcbiAgICAgICAgICBpZiAoZWxlbWVudC5jaGlsZExvZ2ljcyAmJiBlbGVtZW50LmNoaWxkTG9naWNzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnQuY2hpbGRMb2dpY3MuZm9yRWFjaCgoY2hpbGRMb2dpYzogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY2xlYXJBbnN3ZXJzUmVjdXJzaXZlbHkoY2hpbGRMb2dpYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXRlbS5lbnRpdHlUeXBlID09PSAnU1VCRk9STScgJiYgZWxlbWVudCAmJiBlbGVtZW50LnJvd3MpIHtcbiAgICAgICAgICAvLyBTVUJGT1JNIGNvbnRhaW5zIGl0cyBvd24gcm93cyBzdHJ1Y3R1cmUgbGlrZSBhIGZvcm1cbiAgICAgICAgICB0aGlzLmNsZWFyQW5zd2Vyc1JlY3Vyc2l2ZWx5KHsgcm93czogZWxlbWVudC5yb3dzIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGV2YWx1YXRlQ29uZGl0aW9uKGFuc3dlcjogYW55LCBjb25kaXRpb246IGFueSwgaW5wdXRWYWx1ZTogYW55KSB7XG4gICAgc3dpdGNoIChjb25kaXRpb24pIHtcbiAgICAgIGNhc2UgJz4nOlxuICAgICAgICByZXR1cm4gYW5zd2VyID4gTnVtYmVyKGlucHV0VmFsdWUpO1xuICAgICAgY2FzZSAnPCc6XG4gICAgICAgIHJldHVybiBhbnN3ZXIgPCBOdW1iZXIoaW5wdXRWYWx1ZSk7XG4gICAgICBjYXNlICc+PSc6XG4gICAgICAgIHJldHVybiBhbnN3ZXIgPj0gTnVtYmVyKGlucHV0VmFsdWUpO1xuICAgICAgY2FzZSAnPD0nOlxuICAgICAgICByZXR1cm4gYW5zd2VyIDw9IE51bWJlcihpbnB1dFZhbHVlKTtcbiAgICAgIGNhc2UgJz0nOlxuICAgICAgICByZXR1cm4gYW5zd2VyID09IGlucHV0VmFsdWU7XG4gICAgICBjYXNlICchPSc6XG4gICAgICAgIHJldHVybiBhbnN3ZXIgIT0gaW5wdXRWYWx1ZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuXG5cbiAgaGFuZGxlVmFsaWRhdGlvbihpc1ZhbGlkOiBib29sZWFuLCBtZXNzYWdlOiBzdHJpbmcgPSAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCcpIHtcbiAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5jbGVhckludmFsaWQodGhpcy5idWlsZEVsZW1lbnRJZCgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcy52YWxpZGF0aW9uU2VydmljZS5zZXRJbnZhbGlkKHRoaXMucXVlc3Rpb24uaWQsIG1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRFbGVtZW50SWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMuaW5MaW5lIHx8IHRoaXMuaW5DYXJkKVxuICAgICAgPyBgJHt0aGlzLnN1Ym1pc3Npb25JbmRleH0tJHt0aGlzLnF1ZXN0aW9uLmlkfWBcbiAgICAgIDogYCR7dGhpcy5xdWVzdGlvbi5pZH1gO1xuICB9XG5cbiAgZ2V0IGlzSW52YWxpZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmdldEVycm9yTWVzc2FnZSh0aGlzLmJ1aWxkRWxlbWVudElkKCkpO1xuICB9XG5cbiAgZ2V0IGVycm9yTWVzc2FnZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0aW9uU2VydmljZS5nZXRFcnJvck1lc3NhZ2UodGhpcy5idWlsZEVsZW1lbnRJZCgpKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5pbkxpbmUgfHwgdGhpcy5pbkNhcmQpIHtcbiAgICAgIHRoaXMuZWxlbWVudElkID0gYHF1ZXN0aW9uLSR7dGhpcy5zdWJtaXNzaW9uSW5kZXh9LSR7dGhpcy5xdWVzdGlvbi5pZH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVsZW1lbnRJZCA9IGBxdWVzdGlvbi0ke3RoaXMucXVlc3Rpb24uaWR9YDtcbiAgICB9XG5cbiAgICB0aGlzLnRyYWNrZXIucmVnaXN0ZXJFbGVtZW50KHRoaXMuZWxlbWVudElkKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMud2hlbkNsYXVzZVNlcnZpY2UubWFya0xvYWRDb21wbGV0ZWQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmVsZW1lbnRJZCkge1xuICAgICAgdGhpcy50cmFja2VyLnVucmVnaXN0ZXJFbGVtZW50KHRoaXMuZWxlbWVudElkKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXZcbiAgW25nQ2xhc3NdPVwieyAnbWItNCc6ICFpbkxpbmUgfVwiXG4gIGNsYXNzPVwicHgtM1wiXG4gIFtpZF09XCIoaW5MaW5lIHx8IGluQ2FyZCkgPyAncXVlc3Rpb24tJyArIHN1Ym1pc3Npb25JbmRleCArICctJyArIHF1ZXN0aW9uLmlkIDogJ3F1ZXN0aW9uLScgKyBxdWVzdGlvbi5pZFwiXG4gIFthdHRyLm5hbWVdPVwicXVlc3Rpb24udGVzdEVsZW1lbnROYW1lXCJcbj5cbiAgPGRpdiBjbGFzcz1cImlucHV0LXdyYXBwZXIgbWItMlwiICpuZ0lmPVwiIWluTGluZVwiPlxuICAgIDxkaXYgKm5nSWY9XCJxdWVzdGlvbi5xdWVzdGlvbk51bWJlclwiIFtpbm5lckhUTUxdPVwicXVlc3Rpb24ucXVlc3Rpb25OdW1iZXJcIj48L2Rpdj5cbiAgICA8c3BhbiAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uTnVtYmVyXCIgY2xhc3M9XCJzcGFjZVwiPjwvc3Bhbj5cbiAgICA8bGFiZWw+e3sgcXVlc3Rpb24ucXVlc3Rpb24gfX08L2xhYmVsXG4gICAgPiZuYnNwO1xuICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cInF1ZXN0aW9uPy5yZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgPGRpdlxuICAgICAgY2xhc3M9XCJzdmctd3JhcHBlciBtYi0yIGhpbnRJY29uXCJcbiAgICAgIFthdHRyLmRhdGEtdGl0bGVdPVwiaGludFwiXG4gICAgICAqbmdJZj1cImhpbnRcIlxuICAgID5cbiAgICAgIDxzdmdcbiAgICAgICAgY2xhc3M9XCJoaW50U3ZnXCJcbiAgICAgICAgdmlld0JveD1cIjAgMCAzMCAzMFwiXG4gICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgPlxuICAgICAgICA8cGF0aFxuICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgIGQ9XCJNMTUgMjYuMjVWMjYuMjVDOC43ODYyNSAyNi4yNSAzLjc1IDIxLjIxMzggMy43NSAxNVYxNUMzLjc1IDguNzg2MjUgOC43ODYyNSAzLjc1IDE1IDMuNzVWMy43NUMyMS4yMTM4IDMuNzUgMjYuMjUgOC43ODYyNSAyNi4yNSAxNVYxNUMyNi4yNSAyMS4yMTM4IDIxLjIxMzggMjYuMjUgMTUgMjYuMjVaXCJcbiAgICAgICAgICBzdHJva2U9XCIjMzIzMjMyXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBkPVwiTTE1IDE2LjU2MjNWMTYuMjQ5OEMxNSAxNS4yMjg1IDE1LjYzMTIgMTQuNjc0OCAxNi4yNjM3IDE0LjI0OThDMTYuODgxMiAxMy44MzM1IDE3LjUgMTMuMjkxIDE3LjUgMTIuMjkxQzE3LjUgMTAuOTA5OCAxNi4zODEzIDkuNzkxMDIgMTUgOS43OTEwMkMxMy42MTg3IDkuNzkxMDIgMTIuNSAxMC45MDk4IDEyLjUgMTIuMjkxXCJcbiAgICAgICAgICBzdHJva2U9XCIjMzIzMjMyXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgLz5cbiAgICAgICAgPHBhdGhcbiAgICAgICAgICBkPVwiTTE0Ljk5ODggMjBDMTQuODI2MyAyMCAxNC42ODYzIDIwLjE0IDE0LjY4NzUgMjAuMzEyNUMxNC42ODc1IDIwLjQ4NSAxNC44Mjc1IDIwLjYyNSAxNSAyMC42MjVDMTUuMTcyNSAyMC42MjUgMTUuMzEyNSAyMC40ODUgMTUuMzEyNSAyMC4zMTI1QzE1LjMxMjUgMjAuMTQgMTUuMTcyNSAyMCAxNC45OTg4IDIwXCJcbiAgICAgICAgICBzdHJva2U9XCIjMzIzMjMyXCJcbiAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgLz5cbiAgICAgIDwvc3ZnPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGlucHV0XG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbWItMiBoZWlnaHRcIlxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgW2NsYXNzLmhpZGUtc3Bpbi1idXR0b25zXT1cIiF1cERvd25cIlxuICAgIChibHVyKT1cInZhbGlkYXRlTnVtYmVyKClcIlxuICAgIFsobmdNb2RlbCldPVwiZW50ZXJlZE51bWJlclwiXG4gICAgW2NsYXNzLmludmFsaWRdPVwidmFsaWRhdGlvbkZhaWxlZFwiXG4gICAgW2NsYXNzLmludmFsaWQtcXVlc3Rpb25dPVwiaXNJbnZhbGlkICYmICghaW5MaW5lIHx8ICFlbnRlcmVkTnVtYmVyKVwiXG4gICAgKGlucHV0KT1cInZhbGlkYXRlSW5wdXQoJGV2ZW50KVwiXG4gICAgW2F0dHIubWluXT1cIm1pblwiXG4gICAgW2F0dHIubWF4XT1cIm1heFwiXG4gICAgKHdoZWVsKT1cInByZXZlbnROdW1iZXJTY3JvbGwoJGV2ZW50KVwiXG4gICAgW2Rpc2FibGVkXT1cImRpc2FibGVFZGl0XCJcbiAgLz5cbiAgPGRpdiAqbmdJZj1cImlzSW52YWxpZCAmJiAoIWluTGluZSB8fCAhZW50ZXJlZE51bWJlcilcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5cbiAgICB7eyBlcnJvck1lc3NhZ2UgfX1cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCJ2YWxpZGF0aW9uRmFpbGVkICYmICFpc0ludmFsaWRcIiBjbGFzcz1cInRleHQtZGFuZ2VyIGVycm9yLW1lc3NhZ2VcIj5cbiAgICB7eyB2YWxpZGF0aW9uTWVzc2FnZSB9fVxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
@@ -2,12 +2,14 @@ import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
import * as i1 from "../../services/validation.service";
|
|
4
4
|
import * as i2 from "../../services/element-tracker.service";
|
|
5
|
-
import * as i3 from "
|
|
6
|
-
import * as i4 from "@angular/
|
|
5
|
+
import * as i3 from "../../services/hidden-field.service";
|
|
6
|
+
import * as i4 from "@angular/common";
|
|
7
|
+
import * as i5 from "@angular/forms";
|
|
7
8
|
export class PasswordFieldsComponent {
|
|
8
|
-
constructor(validationService, tracker) {
|
|
9
|
+
constructor(validationService, tracker, hiddenFieldService) {
|
|
9
10
|
this.validationService = validationService;
|
|
10
11
|
this.tracker = tracker;
|
|
12
|
+
this.hiddenFieldService = hiddenFieldService;
|
|
11
13
|
this.question = {};
|
|
12
14
|
this.inLine = false;
|
|
13
15
|
this.inCard = false;
|
|
@@ -188,6 +190,7 @@ export class PasswordFieldsComponent {
|
|
|
188
190
|
this.question.answer = sanitizedValue;
|
|
189
191
|
this.validatePassword();
|
|
190
192
|
this.answerChange.emit({ answer: this.question.answer, maxPossibleScore: 0 });
|
|
193
|
+
this.hiddenFieldService.updateHiddenFieldsOnChange();
|
|
191
194
|
}
|
|
192
195
|
validateCnfrm(event) {
|
|
193
196
|
const sanitizedValue = event.target.value.replace(/\s+/g, '');
|
|
@@ -235,13 +238,13 @@ export class PasswordFieldsComponent {
|
|
|
235
238
|
this.tracker.unregisterElement(this.elementId);
|
|
236
239
|
}
|
|
237
240
|
}
|
|
238
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PasswordFieldsComponent, deps: [{ token: i1.ValidationService }, { token: i2.ElementTrackerService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
239
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PasswordFieldsComponent, selector: "lib-password-fields", inputs: { question: "question", inLine: "inLine", inCard: "inCard", submissionIndex: "submissionIndex", disableEdit: "disableEdit" }, outputs: { answerChange: "answerChange" }, ngImport: i0, template: "<div\
|
|
241
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PasswordFieldsComponent, deps: [{ token: i1.ValidationService }, { token: i2.ElementTrackerService }, { token: i3.HiddenFieldService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
242
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PasswordFieldsComponent, selector: "lib-password-fields", inputs: { question: "question", inLine: "inLine", inCard: "inCard", submissionIndex: "submissionIndex", disableEdit: "disableEdit" }, outputs: { answerChange: "answerChange" }, ngImport: i0, template: "<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span>\n <label [for]=\"'passwordField' + questionId\">{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <div class=\"passwordWrapper\">\n <input\n type=\"password\"\n class=\"form-control mb-2 height\"\n [id]=\"'passwordField' + questionId\"\n (blur)=\"validatePassword()\"\n [(ngModel)]=\"enteredPassword\"\n [class.invalid]=\"validationFailed\"\n [class.invalid-question]=\"isInvalid && (!inLine || !enteredPassword)\"\n (input)=\"validateInput($event)\"\n [disabled]=\"disableEdit\"\n />\n <button\n id=\"togglePasswordBtn\"\n class=\"toggle-password-btn\"\n (click)=\"togglePasswordVisibility()\"\n *ngIf=\"viewButton\"\n >\n <i class=\"bi bi-eye-fill\" [id]=\"'passwordEyeIcon' + questionId\"></i>\n </button>\n </div>\n <div class=\"password-strength-meter\" *ngIf=\"displayStrength\">\n <div class=\"progress\">\n <div\n class=\"progress-bar\"\n role=\"progressbar\"\n [style.width]=\"passwordStrength + '%'\"\n [class.bg-danger]=\"passwordStrength < 30\"\n [class.bg-warning]=\"passwordStrength >= 30 && passwordStrength < 70\"\n [class.bg-success]=\"passwordStrength >= 70\"\n ></div>\n </div>\n </div>\n <div *ngIf=\"isInvalid && (!inLine || !enteredPassword)\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger mb-2\">\n {{ validationMessage }}\n </div>\n\n <div class=\"cnfrmPasswordWrapper\" *ngIf=\"confirmPassword\">\n <label for=\"'cnfrmPasswordField'+questionId\">Confirm password</label>\n <input\n type=\"password\"\n class=\"form-control mb-2 height\"\n [id]=\"'cnfrmPasswordField' + questionId\"\n (blur)=\"checkPasswordMatch()\"\n [(ngModel)]=\"enteredCnfrmPassword\"\n [class.invalid]=\"validatedCnfrmPassword\"\n (input)=\"validateCnfrm($event)\"\n [disabled]=\"disableEdit\"\n />\n <button\n id=\"toggleCnfrmPasswordBtn\"\n class=\"toggle-password-btn\"\n (click)=\"toggleCnfrmPasswordVisibility()\"\n *ngIf=\"viewButton\"\n >\n <i class=\"bi bi-eye-fill\" [id]=\"'CnfrmPasswordEyeIcon' + questionId\"></i>\n </button>\n </div>\n <div *ngIf=\"validatedCnfrmPassword\" class=\"text-danger error-message\">\n {{ cnfrmValidationMessage }}\n </div>\n</div>\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-inline-start:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);right:0;padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;min-width:300px;word-wrap:break-word;word-break:break-word;text-align:center;white-space:normal}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}::ng-deep html lib-formSubmission{font-family:var(--library-font-family)!important;font-size:var(--library-font-size)!important}::ng-deep .timepicker-overlay{z-index:1000!important}::ng-deep .timepicker-backdrop-overlay{z-index:1000!important}.space{width:5px}.error-message{color:#f44336;font-size:.8em;margin-top:4px;padding:0 8px}@keyframes fadeIn{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.form-control,.password-input-wrapper{position:relative}.password-input{padding-right:40px}.toggle-password-btn{position:absolute;top:70%;right:15px;transform:translateY(-50%);border:none;background-color:transparent;cursor:pointer}.toggle-password-btn:focus{outline:none}.passwordWrapper,.cnfrmPasswordWrapper{position:relative}.password-strength-meter{width:40%;margin-top:10px;margin-left:auto}.progress{height:10px}.progress-bar{transition:width .3s ease-in-out}.bi{font-size:20px}.invalid-question{border:2px solid #f44336;border-radius:4px;padding:8px;margin-bottom:4px}\n"], dependencies: [{ kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.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: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }] }); }
|
|
240
243
|
}
|
|
241
244
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PasswordFieldsComponent, decorators: [{
|
|
242
245
|
type: Component,
|
|
243
|
-
args: [{ selector: 'lib-password-fields', template: "<div\
|
|
244
|
-
}], ctorParameters: function () { return [{ type: i1.ValidationService }, { type: i2.ElementTrackerService }]; }, propDecorators: { question: [{
|
|
246
|
+
args: [{ selector: 'lib-password-fields', template: "<div\n [ngClass]=\"{ 'mb-4': !inLine }\"\n class=\"px-3\"\n [id]=\"(inLine || inCard) ? 'question-' + submissionIndex + '-' + question.id : 'question-' + question.id\"\n [attr.name]=\"question.testElementName\"\n>\n <div class=\"input-wrapper mb-2\" *ngIf=\"!inLine\">\n <div *ngIf=\"question.questionNumber\" [innerHTML]=\"question.questionNumber\"></div>\n <span *ngIf=\"question.questionNumber\" class=\"space\"></span>\n <label [for]=\"'passwordField' + questionId\">{{ question.question }}</label\n > \n <span class=\"text-danger\" *ngIf=\"question?.required\">*</span>\n <div\n class=\"svg-wrapper mb-2 hintIcon\"\n [attr.data-title]=\"hint\"\n *ngIf=\"hint\"\n >\n <svg\n class=\"hintSvg\"\n viewBox=\"0 0 30 30\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M15 26.25V26.25C8.78625 26.25 3.75 21.2138 3.75 15V15C3.75 8.78625 8.78625 3.75 15 3.75V3.75C21.2138 3.75 26.25 8.78625 26.25 15V15C26.25 21.2138 21.2138 26.25 15 26.25Z\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M15 16.5623V16.2498C15 15.2285 15.6312 14.6748 16.2637 14.2498C16.8812 13.8335 17.5 13.291 17.5 12.291C17.5 10.9098 16.3813 9.79102 15 9.79102C13.6187 9.79102 12.5 10.9098 12.5 12.291\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n <path\n d=\"M14.9988 20C14.8263 20 14.6863 20.14 14.6875 20.3125C14.6875 20.485 14.8275 20.625 15 20.625C15.1725 20.625 15.3125 20.485 15.3125 20.3125C15.3125 20.14 15.1725 20 14.9988 20\"\n stroke=\"#323232\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </div>\n </div>\n <div class=\"passwordWrapper\">\n <input\n type=\"password\"\n class=\"form-control mb-2 height\"\n [id]=\"'passwordField' + questionId\"\n (blur)=\"validatePassword()\"\n [(ngModel)]=\"enteredPassword\"\n [class.invalid]=\"validationFailed\"\n [class.invalid-question]=\"isInvalid && (!inLine || !enteredPassword)\"\n (input)=\"validateInput($event)\"\n [disabled]=\"disableEdit\"\n />\n <button\n id=\"togglePasswordBtn\"\n class=\"toggle-password-btn\"\n (click)=\"togglePasswordVisibility()\"\n *ngIf=\"viewButton\"\n >\n <i class=\"bi bi-eye-fill\" [id]=\"'passwordEyeIcon' + questionId\"></i>\n </button>\n </div>\n <div class=\"password-strength-meter\" *ngIf=\"displayStrength\">\n <div class=\"progress\">\n <div\n class=\"progress-bar\"\n role=\"progressbar\"\n [style.width]=\"passwordStrength + '%'\"\n [class.bg-danger]=\"passwordStrength < 30\"\n [class.bg-warning]=\"passwordStrength >= 30 && passwordStrength < 70\"\n [class.bg-success]=\"passwordStrength >= 70\"\n ></div>\n </div>\n </div>\n <div *ngIf=\"isInvalid && (!inLine || !enteredPassword)\" class=\"error-message\">\n {{ errorMessage }}\n </div>\n <div *ngIf=\"validationFailed && !isInvalid\" class=\"text-danger mb-2\">\n {{ validationMessage }}\n </div>\n\n <div class=\"cnfrmPasswordWrapper\" *ngIf=\"confirmPassword\">\n <label for=\"'cnfrmPasswordField'+questionId\">Confirm password</label>\n <input\n type=\"password\"\n class=\"form-control mb-2 height\"\n [id]=\"'cnfrmPasswordField' + questionId\"\n (blur)=\"checkPasswordMatch()\"\n [(ngModel)]=\"enteredCnfrmPassword\"\n [class.invalid]=\"validatedCnfrmPassword\"\n (input)=\"validateCnfrm($event)\"\n [disabled]=\"disableEdit\"\n />\n <button\n id=\"toggleCnfrmPasswordBtn\"\n class=\"toggle-password-btn\"\n (click)=\"toggleCnfrmPasswordVisibility()\"\n *ngIf=\"viewButton\"\n >\n <i class=\"bi bi-eye-fill\" [id]=\"'CnfrmPasswordEyeIcon' + questionId\"></i>\n </button>\n </div>\n <div *ngIf=\"validatedCnfrmPassword\" class=\"text-danger error-message\">\n {{ cnfrmValidationMessage }}\n </div>\n</div>\n", styles: [".input-wrapper{display:flex;align-items:flex-start}.svg-wrapper{margin-inline-start:auto;z-index:999}.hintIcon{position:relative;cursor:pointer}.hintIcon:hover:before{content:attr(data-title);position:absolute;top:calc(100% + 2px);right:0;padding:4px 8px;border-radius:4px;background-color:#1d252d;color:#8e9aa0;font-size:14px;min-width:300px;word-wrap:break-word;word-break:break-word;text-align:center;white-space:normal}.hintIcon:hover:after{content:\"\";position:absolute;top:calc(100% - 26px);left:50%;border:solid transparent;border-width:18px;border-bottom-color:#1d252d;transform:translate(-50%)}.height{height:42px}.invalid{border-color:red}.hintSvg{width:30px;height:30px;fill:none}::ng-deep html lib-formSubmission{font-family:var(--library-font-family)!important;font-size:var(--library-font-size)!important}::ng-deep .timepicker-overlay{z-index:1000!important}::ng-deep .timepicker-backdrop-overlay{z-index:1000!important}.space{width:5px}.error-message{color:#f44336;font-size:.8em;margin-top:4px;padding:0 8px}@keyframes fadeIn{0%{opacity:0;transform:translateY(-5px)}to{opacity:1;transform:translateY(0)}}.form-control,.password-input-wrapper{position:relative}.password-input{padding-right:40px}.toggle-password-btn{position:absolute;top:70%;right:15px;transform:translateY(-50%);border:none;background-color:transparent;cursor:pointer}.toggle-password-btn:focus{outline:none}.passwordWrapper,.cnfrmPasswordWrapper{position:relative}.password-strength-meter{width:40%;margin-top:10px;margin-left:auto}.progress{height:10px}.progress-bar{transition:width .3s ease-in-out}.bi{font-size:20px}.invalid-question{border:2px solid #f44336;border-radius:4px;padding:8px;margin-bottom:4px}\n"] }]
|
|
247
|
+
}], ctorParameters: function () { return [{ type: i1.ValidationService }, { type: i2.ElementTrackerService }, { type: i3.HiddenFieldService }]; }, propDecorators: { question: [{
|
|
245
248
|
type: Input
|
|
246
249
|
}], inLine: [{
|
|
247
250
|
type: Input
|
|
@@ -254,4 +257,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
254
257
|
}], disableEdit: [{
|
|
255
258
|
type: Input
|
|
256
259
|
}] } });
|
|
257
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQtZmllbGRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Zvcm0tc3VibWlzc2lvbi9zcmMvZm9ybS1maWVsZHMvcGFzc3dvcmQtZmllbGRzL3Bhc3N3b3JkLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL3Bhc3N3b3JkLWZpZWxkcy9wYXNzd29yZC1maWVsZHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7O0FBU3ZFLE1BQU0sT0FBTyx1QkFBdUI7SUErQmxDLFlBQ1UsaUJBQW9DLEVBQ3BDLE9BQThCO1FBRDlCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsWUFBTyxHQUFQLE9BQU8sQ0FBdUI7UUFoQy9CLGFBQVEsR0FBUSxFQUFFLENBQUM7UUFDbkIsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUN4QixXQUFNLEdBQVksS0FBSyxDQUFDO1FBRXZCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQThDLENBQUM7UUFFeEYsVUFBSyxHQUFXLENBQUMsQ0FBQztRQUNsQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLFNBQUksR0FBVyxFQUFFLENBQUM7UUFVbEIsNkJBQXdCLEdBQWEsRUFBRSxDQUFDO1FBQ3hDLHNCQUFpQixHQUFXLEVBQUUsQ0FBQztRQUMvQiwyQkFBc0IsR0FBVyxFQUFFLENBQUM7UUFDcEMscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQ2xDLDJCQUFzQixHQUFZLEtBQUssQ0FBQztRQUN4QyxvQkFBZSxHQUFXLEVBQUUsQ0FBQztRQUM3Qix5QkFBb0IsR0FBVyxFQUFFLENBQUM7UUFDbEMscUJBQWdC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QUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUM5QixJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1NBQ3pFO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxHQUFHLFlBQVksSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztTQUNqRDtRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNoRDtJQUNILENBQUM7K0dBclFRLHVCQUF1QjttR0FBdkIsdUJBQXVCLDRPQ1RwQyxnaEpBaUhBOzs0RkR4R2EsdUJBQXVCO2tCQUxuQyxTQUFTOytCQUNFLHFCQUFxQjs0SUFLdEIsUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0ksWUFBWTtzQkFBckIsTUFBTTtnQkF3QkUsV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEVsZW1lbnRUcmFja2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VsZW1lbnQtdHJhY2tlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItcGFzc3dvcmQtZmllbGRzJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcGFzc3dvcmQtZmllbGRzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9wYXNzd29yZC1maWVsZHMuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFBhc3N3b3JkRmllbGRzQ29tcG9uZW50IHtcclxuICBASW5wdXQoKSBxdWVzdGlvbjogYW55ID0ge307XHJcbiAgQElucHV0KCkgaW5MaW5lOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgaW5DYXJkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgc3VibWlzc2lvbkluZGV4ITogbnVtYmVyO1xyXG4gIEBPdXRwdXQoKSBhbnN3ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgYW5zd2VyOiBhbnk7IG1heFBvc3NpYmxlU2NvcmU/OiBudW1iZXIgfT4oKTtcclxuXHJcbiAgY291bnQ6IG51bWJlciA9IDA7XHJcbiAgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBoaW50OiBzdHJpbmcgPSAnJztcclxuICBjb25maXJtUGFzc3dvcmQhOiBib29sZWFuO1xyXG4gIGRpc3BsYXlTdHJlbmd0aCE6IGJvb2xlYW47XHJcbiAgdmlld0J1dHRvbiE6IGJvb2xlYW47XHJcbiAgbWF4TGVuZ3RoITogbnVtYmVyO1xyXG4gIG1pbkxlbmd0aCE6IG51bWJlcjtcclxuICByZXF1aXJlTG93ZXJjYXNlTGV0dGVycyE6IGJvb2xlYW47XHJcbiAgcmVxdWlyZVVwcGVyY2FzZUxldHRlcnMhOiBib29sZWFuO1xyXG4gIHJlcXVpcmVOdW1iZXJzITogYm9vbGVhbjtcclxuICByZXF1aXJlU3BlY2lhbENoYXJhY3RlcnMhOiBib29sZWFuO1xyXG4gIGFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVyczogc3RyaW5nW10gPSBbXTtcclxuICB2YWxpZGF0aW9uTWVzc2FnZTogc3RyaW5nID0gJyc7XHJcbiAgY25mcm1WYWxpZGF0aW9uTWVzc2FnZTogc3RyaW5nID0gJyc7XHJcbiAgdmFsaWRhdGlvbkZhaWxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHZhbGlkYXRlZENuZnJtUGFzc3dvcmQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBlbnRlcmVkUGFzc3dvcmQ6IHN0cmluZyA9ICcnO1xyXG4gIGVudGVyZWRDbmZybVBhc3N3b3JkOiBzdHJpbmcgPSAnJztcclxuICBwYXNzd29yZFN0cmVuZ3RoOiBudW1iZXIgPSAwO1xyXG4gIHF1ZXN0aW9uSWQ6c3RyaW5nPScnO1xyXG4gIHByaXZhdGUgZWxlbWVudElkOiBzdHJpbmc9Jyc7XHJcbiAgQElucHV0KCkgZGlzYWJsZUVkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0cmFja2VyOiBFbGVtZW50VHJhY2tlclNlcnZpY2VcclxuICApIHtcclxuICB9XHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnZhbHVlQXNzaWduZWQoKTtcclxuICB9XHJcblxyXG4gIHZhbHVlQXNzaWduZWQoKSB7XHJcbiAgICB0aGlzLnF1ZXN0aW9uSWQ9dGhpcy5xdWVzdGlvbi5pZDtcclxuICAgIHRoaXMuY291bnQgPSB0aGlzLnF1ZXN0aW9uLmNvdW50O1xyXG4gICAgdGhpcy5yZXF1aXJlZCA9IHRoaXMucXVlc3Rpb24ucmVxdWlyZWQ7XHJcbiAgICB0aGlzLmhpbnQgPSB0aGlzLnF1ZXN0aW9uLmhpbnQ7XHJcbiAgICB0aGlzLmNvbmZpcm1QYXNzd29yZCA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQuYXBwZWFyYW5jZS5jb25maXJtUGFzc3dvcmQ7XHJcbiAgICB0aGlzLmRpc3BsYXlTdHJlbmd0aCA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQuYXBwZWFyYW5jZS5kaXNwbGF5U3Ryb25nO1xyXG4gICAgdGhpcy52aWV3QnV0dG9uID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5hcHBlYXJhbmNlLnZpZXdCdXR0b247XHJcbiAgICB0aGlzLm1heExlbmd0aCA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQudmFsaWRhdGlvbi5tYXhMZW5ndGg7XHJcbiAgICB0aGlzLm1pbkxlbmd0aCA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQudmFsaWRhdGlvbi5taW5MZW5ndGg7XHJcbiAgICB0aGlzLnJlcXVpcmVMb3dlcmNhc2VMZXR0ZXJzID1cclxuICAgICAgdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC52YWxpZGF0aW9uLnJlcXVpcmVMb3dlcmNhc2VMZXR0ZXJzO1xyXG4gICAgdGhpcy5yZXF1aXJlVXBwZXJjYXNlTGV0dGVycyA9XHJcbiAgICAgIHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQudmFsaWRhdGlvbi5yZXF1aXJlVXBwZXJjYXNlTGV0dGVycztcclxuICAgIHRoaXMucmVxdWlyZU51bWJlcnMgPSB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnZhbGlkYXRpb24ucmVxdWlyZU51bWJlcnM7XHJcbiAgICB0aGlzLnJlcXVpcmVTcGVjaWFsQ2hhcmFjdGVycyA9XHJcbiAgICAgIHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQudmFsaWRhdGlvbi5yZXF1aXJlU3BlY2lhbENoYXJhY3RlcnM7XHJcbiAgICBpZiAodGhpcy5yZXF1aXJlU3BlY2lhbENoYXJhY3RlcnMpIHtcclxuICAgICAgdGhpcy5hbGxvd2VkU3BlY2lhbENoYXJhY3RlcnMgPVxyXG4gICAgICAgIHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQudmFsaWRhdGlvbi5hbGxvd2VkU3BlY2lhbENoYXJhY3RlcnNcclxuICAgICAgICAgIC5zcGxpdCgnLCcpXHJcbiAgICAgICAgICAubWFwKChjaGFyOiBhbnkpID0+IGNoYXIudHJpbSgpKTtcclxuICAgIH1cclxuICAgIHRoaXMuZW50ZXJlZFBhc3N3b3JkID0gdGhpcy5xdWVzdGlvbj8uYW5zd2VyO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlUGFzc3dvcmRWaXNpYmlsaXR5KCkge1xyXG4gICAgbGV0IHBhc3N3b3JkRmllbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgJ3Bhc3N3b3JkRmllbGQnK3RoaXMucXVlc3Rpb25JZFxyXG4gICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgbGV0IGV5ZUljb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgJ3Bhc3N3b3JkRXllSWNvbicrdGhpcy5xdWVzdGlvbklkXHJcbiAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcblxyXG4gICAgaWYgKHBhc3N3b3JkRmllbGQudHlwZSA9PT0gJ3Bhc3N3b3JkJykge1xyXG4gICAgICBwYXNzd29yZEZpZWxkLnR5cGUgPSAndGV4dCc7XHJcbiAgICAgIGV5ZUljb24uY2xhc3NMaXN0LnJlbW92ZSgnYmktZXllLWZpbGwnKTtcclxuICAgICAgZXllSWNvbi5jbGFzc0xpc3QuYWRkKCdiaS1leWUtc2xhc2gtZmlsbCcpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcGFzc3dvcmRGaWVsZC50eXBlID0gJ3Bhc3N3b3JkJztcclxuICAgICAgZXllSWNvbi5jbGFzc0xpc3QucmVtb3ZlKCdiaS1leWUtc2xhc2gtZmlsbCcpO1xyXG4gICAgICBleWVJY29uLmNsYXNzTGlzdC5hZGQoJ2JpLWV5ZS1maWxsJyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHRvZ2dsZUNuZnJtUGFzc3dvcmRWaXNpYmlsaXR5KCkge1xyXG4gICAgbGV0IHBhc3N3b3JkRmllbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgJ2NuZnJtUGFzc3dvcmRGaWVsZCcrdGhpcy5xdWVzdGlvbklkXHJcbiAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XHJcbiAgICBsZXQgZXllSWNvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxyXG4gICAgICAnQ25mcm1QYXNzd29yZEV5ZUljb24nK3RoaXMucXVlc3Rpb25JZFxyXG4gICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG5cclxuICAgIGlmIChwYXNzd29yZEZpZWxkLnR5cGUgPT09ICdwYXNzd29yZCcpIHtcclxuICAgICAgcGFzc3dvcmRGaWVsZC50eXBlID0gJ3RleHQnO1xyXG4gICAgICBleWVJY29uLmNsYXNzTGlzdC5yZW1vdmUoJ2JpLWV5ZS1maWxsJyk7XHJcbiAgICAgIGV5ZUljb24uY2xhc3NMaXN0LmFkZCgnYmktZXllLXNsYXNoLWZpbGwnKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHBhc3N3b3JkRmllbGQudHlwZSA9ICdwYXNzd29yZCc7XHJcbiAgICAgIGV5ZUljb24uY2xhc3NMaXN0LnJlbW92ZSgnYmktZXllLXNsYXNoLWZpbGwnKTtcclxuICAgICAgZXllSWNvbi5jbGFzc0xpc3QuYWRkKCdiaS1leWUtZmlsbCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tQYXNzd29yZE1hdGNoKCkge1xyXG4gICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5jbGVhckludmFsaWQodGhpcy5idWlsZEVsZW1lbnRJZCgpKTtcclxuICAgIHRoaXMudmFsaWRhdGVkQ25mcm1QYXNzd29yZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5jbmZybVZhbGlkYXRpb25NZXNzYWdlID0gJyc7XHJcbiAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiB0aGlzLmNvbmZpcm1QYXNzd29yZCAmJiAhdGhpcy5lbnRlcmVkQ25mcm1QYXNzd29yZCkge1xyXG4gICAgICB0aGlzLnZhbGlkYXRlZENuZnJtUGFzc3dvcmQgPSB0cnVlO1xyXG4gICAgICB0aGlzLmNuZnJtVmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGEgdmFsaWQgcGFzc3dvcmRgO1xyXG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuZW50ZXJlZFBhc3N3b3JkICE9IHRoaXMuZW50ZXJlZENuZnJtUGFzc3dvcmQgJiYgdGhpcy5jb25maXJtUGFzc3dvcmQpIHtcclxuICAgICAgdGhpcy52YWxpZGF0ZWRDbmZybVBhc3N3b3JkID0gdHJ1ZTtcclxuICAgICAgdGhpcy5jbmZybVZhbGlkYXRpb25NZXNzYWdlID0gJ1Bhc3N3b3JkcyBkbyBub3QgbWF0Y2gnO1xyXG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGVsc2V7XHJcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLnZhbGlkYXRlUGFzc3dvcmQoKTtcclxuICB9XHJcblxyXG4gIFxyXG5cclxuICB2YWxpZGF0ZVBhc3N3b3JkKCkge1xyXG4gICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmNsZWFySW52YWxpZCh0aGlzLmJ1aWxkRWxlbWVudElkKCkpO1xyXG4gICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICcnO1xyXG4gICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIXRoaXMuZW50ZXJlZFBhc3N3b3JkKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IHRydWU7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGEgdmFsaWQgcGFzc3dvcmRgO1xyXG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSBmYWxzZTtcclxuICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uTWVzc2FnZSA9IGBQbGVhc2UgZW50ZXIgYSB2YWxpZCBwYXNzd29yZGA7XHJcbiAgICB9IGVsc2UgaWYgKFxyXG4gICAgICB0aGlzLnJlcXVpcmVMb3dlcmNhc2VMZXR0ZXJzIHx8XHJcbiAgICAgIHRoaXMucmVxdWlyZVVwcGVyY2FzZUxldHRlcnMgfHxcclxuICAgICAgdGhpcy5yZXF1aXJlTnVtYmVycyB8fFxyXG4gICAgICB0aGlzLnJlcXVpcmVTcGVjaWFsQ2hhcmFjdGVycyB8fFxyXG4gICAgICB0aGlzLm1pbkxlbmd0aCB8fFxyXG4gICAgICB0aGlzLm1heExlbmd0aFxyXG4gICAgKSB7ICAgICAgXHJcbiAgICAgIGNvbnN0IGxvd2VyY2FzZVJlZ2V4ID0gL1thLXpdLztcclxuICAgICAgY29uc3QgdXBwZXJjYXNlUmVnZXggPSAvW0EtWl0vO1xyXG4gICAgICBjb25zdCBudW1iZXJSZWdleCA9IC9cXGQvO1xyXG4gICAgICBjb25zdCBzcGVjaWFsQ2hhcmFjdGVyUmVnZXggPSBuZXcgUmVnRXhwKGBbJHt0aGlzLmFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVycy5qb2luKCcnKX1dYCk7XHJcbiAgICAgIGNvbnN0IG90aGVyU3BlY2lhbENoYXJhY3RlclJlZ2V4ID0gbmV3IFJlZ0V4cChgW15hLXpBLVowLTkke3RoaXMuYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzLmpvaW4oJycpfV1gKTtcclxuICBcclxuICAgICAgbGV0IGxvd2VyQ2FzZVZhbGlkYXRlID0gbG93ZXJjYXNlUmVnZXgudGVzdCh0aGlzLmVudGVyZWRQYXNzd29yZCk7XHJcbiAgICAgIGxldCB1cHBlckNhc2VWYWxpZGF0ZSA9IHVwcGVyY2FzZVJlZ2V4LnRlc3QodGhpcy5lbnRlcmVkUGFzc3dvcmQpO1xyXG4gICAgICBsZXQgY29udGFpbnNOdW1iZXIgPSBudW1iZXJSZWdleC50ZXN0KHRoaXMuZW50ZXJlZFBhc3N3b3JkKTtcclxuICAgICAgbGV0IGNvbnRhaW5zU3BlY2lhbENoYXJhY3RlciA9IHNwZWNpYWxDaGFyYWN0ZXJSZWdleC50ZXN0KHRoaXMuZW50ZXJlZFBhc3N3b3JkKTtcclxuICAgICAgbGV0IGNvbnRhaW5zT3RoZXJTcGVjaWFsQ2hhcmFjdGVyID0gb3RoZXJTcGVjaWFsQ2hhcmFjdGVyUmVnZXgudGVzdCh0aGlzLmVudGVyZWRQYXNzd29yZCk7XHJcbiAgXHJcbiAgICAgIGlmICghbG93ZXJDYXNlVmFsaWRhdGUgJiYgdGhpcy5yZXF1aXJlTG93ZXJjYXNlTGV0dGVycykge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICdQYXNzd29yZCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGxvd2VyY2FzZSBsZXR0ZXInO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbk1lc3NhZ2UgPSAnUGFzc3dvcmQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSBsb3dlcmNhc2UgbGV0dGVyJztcclxuICAgICAgfSBlbHNlIGlmICghdXBwZXJDYXNlVmFsaWRhdGUgJiYgdGhpcy5yZXF1aXJlVXBwZXJjYXNlTGV0dGVycykge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICdQYXNzd29yZCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHVwcGVyY2FzZSBsZXR0ZXInO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbk1lc3NhZ2UgPSAnUGFzc3dvcmQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSB1cHBlcmNhc2UgbGV0dGVyJztcclxuICAgICAgfSBlbHNlIGlmICghY29udGFpbnNOdW1iZXIgJiYgdGhpcy5yZXF1aXJlTnVtYmVycykge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICdQYXNzd29yZCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIG51bWJlcic7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uTWVzc2FnZSA9ICdQYXNzd29yZCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIG51bWJlcic7XHJcbiAgICAgIH1lbHNlIGlmICh0aGlzLmVudGVyZWRQYXNzd29yZC5sZW5ndGggPCB0aGlzLm1pbkxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9IGBQYXNzd29yZCBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJHt0aGlzLm1pbkxlbmd0aH0gY2hhcmFjdGVyc2A7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uTWVzc2FnZSA9IGBQYXNzd29yZCBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgJHt0aGlzLm1pbkxlbmd0aH0gY2hhcmFjdGVyc2A7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5lbnRlcmVkUGFzc3dvcmQubGVuZ3RoID4gdGhpcy5tYXhMZW5ndGgpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGFzc3dvcmQgbXVzdCBiZSBsZXNzIHRoYW4gJHt0aGlzLm1heExlbmd0aH0gY2hhcmFjdGVyc2A7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uTWVzc2FnZSA9IGBQYXNzd29yZCBtdXN0IGJlIGxlc3MgdGhhbiAke3RoaXMubWF4TGVuZ3RofSBjaGFyYWN0ZXJzYDtcclxuICAgICAgfSBlbHNlIGlmICghY29udGFpbnNTcGVjaWFsQ2hhcmFjdGVyICYmIHRoaXMuYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzLmxlbmd0aD4wKSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gYFBhc3N3b3JkIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgc3BlY2lhbCBjaGFyYWN0ZXIgZnJvbSAke3RoaXMuYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzfWA7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uTWVzc2FnZSA9IGBQYXNzd29yZCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIHNwZWNpYWwgY2hhcmFjdGVyIGZyb20gJHt0aGlzLmFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVyc31gO1xyXG4gICAgICB9IGVsc2UgaWYoY29udGFpbnNPdGhlclNwZWNpYWxDaGFyYWN0ZXIgJiYgdGhpcy5hbGxvd2VkU3BlY2lhbENoYXJhY3RlcnMubGVuZ3RoPjApe1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICdQYXNzd29yZCBjb250YWlucyBhbiBpbnZhbGlkIHNwZWNpYWwgY2hhcmFjdGVyJztcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb25NZXNzYWdlID0gJ1Bhc3N3b3JkIGNvbnRhaW5zIGFuIGludmFsaWQgc3BlY2lhbCBjaGFyYWN0ZXInO1xyXG4gICAgICB9IGVsc2UgaWYodGhpcy5jb25maXJtUGFzc3dvcmQpe1xyXG4gICAgICAgIHRoaXMuY2hlY2tQYXNzd29yZE1hdGNoKCk7XHJcbiAgICAgIH1cclxuICAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IHRydWU7XHJcbiAgICAgIH0gICAgXHJcbiAgICB9IGVsc2UgeyAgICAgICAgICAgIFxyXG4gICAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGg9dGhpcy5jYWxjdWxhdGVTdHJlbmd0aCh0aGlzLmVudGVyZWRQYXNzd29yZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGggPSB0aGlzLmNhbGN1bGF0ZVN0cmVuZ3RoKHRoaXMuZW50ZXJlZFBhc3N3b3JkKVxyXG59XHJcblxyXG4gIHZhbGlkYXRlSW5wdXQoZXZlbnQ6YW55KXtcclxuICAgIGNvbnN0IHNhbml0aXplZFZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlLnJlcGxhY2UoL1xccysvZywgJycpO1xyXG4gICAgdGhpcy5lbnRlcmVkUGFzc3dvcmQgPSBzYW5pdGl6ZWRWYWx1ZTtcclxuICAgIHRoaXMucXVlc3Rpb24uYW5zd2VyPXNhbml0aXplZFZhbHVlO1xyXG4gICAgdGhpcy52YWxpZGF0ZVBhc3N3b3JkKCk7ICBcclxuICAgIHRoaXMuYW5zd2VyQ2hhbmdlLmVtaXQoe2Fuc3dlcjp0aGlzLnF1ZXN0aW9uLmFuc3dlcixtYXhQb3NzaWJsZVNjb3JlOjB9KTsgXHJcbiAgICB9XHJcblxyXG4gICAgdmFsaWRhdGVDbmZybShldmVudDphbnkpe1xyXG4gICAgICBjb25zdCBzYW5pdGl6ZWRWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZS5yZXBsYWNlKC9cXHMrL2csICcnKTtcclxuICAgICAgdGhpcy5lbnRlcmVkQ25mcm1QYXNzd29yZCA9IHNhbml0aXplZFZhbHVlO1xyXG4gICAgICB0aGlzLmNoZWNrUGFzc3dvcmRNYXRjaCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNhbGN1bGF0ZVN0cmVuZ3RoKHBhc3N3b3JkOmFueSkge1xyXG4gICAgICBjb25zdCBsZW5ndGhTdHJlbmd0aCA9IE1hdGgubWluKDEwMCwgKHBhc3N3b3JkLmxlbmd0aCAvIDEyKSAqIDEwMCk7IC8vIEFzc3VtZSBtYXhpbXVtIGxlbmd0aCBvZiAxMiBmb3IgZnVsbCBwb2ludHNcclxuICAgICAgY29uc3QgbG93ZXJjYXNlU3RyZW5ndGggPSAvW2Etel0vLnRlc3QocGFzc3dvcmQpID8gMjAgOiAwO1xyXG4gICAgICBjb25zdCB1cHBlcmNhc2VTdHJlbmd0aCA9IC9bQS1aXS8udGVzdChwYXNzd29yZCkgPyAyMCA6IDA7XHJcbiAgICAgIGNvbnN0IG51bWJlclN0cmVuZ3RoID0gL1xcZC8udGVzdChwYXNzd29yZCkgPyAyMCA6IDA7XHJcbiAgICAgIGNvbnN0IHNwZWNpYWxDaGFyYWN0ZXJTdHJlbmd0aCA9IC9bIUAjJCVeJiooKSwuP1wiOnt9fDw+XS8udGVzdChwYXNzd29yZCkgPyAyMCA6IDA7IC8vIEFkanVzdCB0aGlzIHJlZ2V4IGJhc2VkIG9uIHlvdXIgYWxsb3dlZCBzcGVjaWFsIGNoYXJhY3RlcnNcclxuICAgIFxyXG4gICAgICByZXR1cm4gbGVuZ3RoU3RyZW5ndGggKyBsb3dlcmNhc2VTdHJlbmd0aCArIHVwcGVyY2FzZVN0cmVuZ3RoICsgbnVtYmVyU3RyZW5ndGggKyBzcGVjaWFsQ2hhcmFjdGVyU3RyZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlVmFsaWRhdGlvbihpc1ZhbGlkOiBib29sZWFuLCBtZXNzYWdlOiBzdHJpbmcgPSAnVGhpcyBmaWVsZCBpcyByZXF1aXJlZCcpIHtcclxuICAgICAgaWYgKGlzVmFsaWQpIHtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmNsZWFySW52YWxpZCh0aGlzLmJ1aWxkRWxlbWVudElkKCkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uuc2V0SW52YWxpZCh0aGlzLnF1ZXN0aW9uLmlkLCBtZXNzYWdlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYnVpbGRFbGVtZW50SWQoKTogc3RyaW5nIHtcclxuICAgICAgcmV0dXJuICh0aGlzLmluTGluZSB8fCB0aGlzLmluQ2FyZClcclxuICAgICAgICA/IGAke3RoaXMuc3VibWlzc2lvbkluZGV4fS0ke3RoaXMucXVlc3Rpb24uaWR9YFxyXG4gICAgICAgIDogYCR7dGhpcy5xdWVzdGlvbi5pZH1gO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgZ2V0IGlzSW52YWxpZCgpOiBib29sZWFuIHtcclxuICAgICAgcmV0dXJuICEhdGhpcy52YWxpZGF0aW9uU2VydmljZS5nZXRFcnJvck1lc3NhZ2UodGhpcy5idWlsZEVsZW1lbnRJZCgpKTtcclxuICAgIH1cclxuICBcclxuICAgIGdldCBlcnJvck1lc3NhZ2UoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmdldEVycm9yTWVzc2FnZSh0aGlzLmJ1aWxkRWxlbWVudElkKCkpO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICBpZiAodGhpcy5pbkxpbmUgfHwgdGhpcy5pbkNhcmQpIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnRJZCA9IGBxdWVzdGlvbi0ke3RoaXMuc3VibWlzc2lvbkluZGV4fS0ke3RoaXMucXVlc3Rpb24uaWR9YDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmVsZW1lbnRJZCA9IGBxdWVzdGlvbi0ke3RoaXMucXVlc3Rpb24uaWR9YDtcclxuICAgICAgfVxyXG4gICAgXHJcbiAgICAgIHRoaXMudHJhY2tlci5yZWdpc3RlckVsZW1lbnQodGhpcy5lbGVtZW50SWQpO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgIGlmICh0aGlzLmVsZW1lbnRJZCkge1xyXG4gICAgICAgIHRoaXMudHJhY2tlci51bnJlZ2lzdGVyRWxlbWVudCh0aGlzLmVsZW1lbnRJZCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuIiwiPGRpdlxyXG4gIFtuZ0NsYXNzXT1cInsgJ21iLTQnOiAhaW5MaW5lIH1cIlxyXG4gIGNsYXNzPVwicHgtM1wiXHJcbiAgW2lkXT1cIihpbkxpbmUgfHwgaW5DYXJkKSA/ICdxdWVzdGlvbi0nICsgc3VibWlzc2lvbkluZGV4ICsgJy0nICsgcXVlc3Rpb24uaWQgOiAncXVlc3Rpb24tJyArIHF1ZXN0aW9uLmlkXCJcclxuICBbYXR0ci5uYW1lXT1cInF1ZXN0aW9uLnRlc3RFbGVtZW50TmFtZVwiXHJcbj5cclxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC13cmFwcGVyIG1iLTJcIiAqbmdJZj1cIiFpbkxpbmVcIj5cclxuICAgICAgPGRpdiAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uTnVtYmVyXCIgW2lubmVySFRNTF09XCJxdWVzdGlvbi5xdWVzdGlvbk51bWJlclwiPjwvZGl2PlxyXG4gICAgICA8c3BhbiAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uTnVtYmVyXCIgY2xhc3M9XCJzcGFjZVwiPjwvc3Bhbj5cclxuICAgICAgPGxhYmVsIFtmb3JdPVwiJ3Bhc3N3b3JkRmllbGQnICsgcXVlc3Rpb25JZFwiPnt7IHF1ZXN0aW9uLnF1ZXN0aW9uIH19PC9sYWJlbFxyXG4gICAgICA+Jm5ic3A7XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cInF1ZXN0aW9uPy5yZXF1aXJlZFwiPio8L3NwYW4+XHJcbiAgICAgIDxkaXZcclxuICAgICAgICBjbGFzcz1cInN2Zy13cmFwcGVyIG1iLTIgaGludEljb25cIlxyXG4gICAgICAgIFthdHRyLmRhdGEtdGl0bGVdPVwiaGludFwiXHJcbiAgICAgICAgKm5nSWY9XCJoaW50XCJcclxuICAgICAgPlxyXG4gICAgICAgIDxzdmdcclxuICAgICAgICAgIGNsYXNzPVwiaGludFN2Z1wiXHJcbiAgICAgICAgICB2aWV3Qm94PVwiMCAwIDMwIDMwXCJcclxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICBjbGlwLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICAgICAgZD1cIk0xNSAyNi4yNVYyNi4yNUM4Ljc4NjI1IDI2LjI1IDMuNzUgMjEuMjEzOCAzLjc1IDE1VjE1QzMuNzUgOC43ODYyNSA4Ljc4NjI1IDMuNzUgMTUgMy43NVYzLjc1QzIxLjIxMzggMy43NSAyNi4yNSA4Ljc4NjI1IDI2LjI1IDE1VjE1QzI2LjI1IDIxLjIxMzggMjEuMjEzOCAyNi4yNSAxNSAyNi4yNVpcIlxyXG4gICAgICAgICAgICBzdHJva2U9XCIjMzIzMjMyXCJcclxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcclxuICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICBkPVwiTTE1IDE2LjU2MjNWMTYuMjQ5OEMxNSAxNS4yMjg1IDE1LjYzMTIgMTQuNjc0OCAxNi4yNjM3IDE0LjI0OThDMTYuODgxMiAxMy44MzM1IDE3LjUgMTMuMjkxIDE3LjUgMTIuMjkxQzE3LjUgMTAuOTA5OCAxNi4zODEzIDkuNzkxMDIgMTUgOS43OTEwMkMxMy42MTg3IDkuNzkxMDIgMTIuNSAxMC45MDk4IDEyLjUgMTIuMjkxXCJcclxuICAgICAgICAgICAgc3Ryb2tlPVwiIzMyMzIzMlwiXHJcbiAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXHJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgZD1cIk0xNC45OTg4IDIwQzE0LjgyNjMgMjAgMTQuNjg2MyAyMC4xNCAxNC42ODc1IDIwLjMxMjVDMTQuNjg3NSAyMC40ODUgMTQuODI3NSAyMC42MjUgMTUgMjAuNjI1QzE1LjE3MjUgMjAuNjI1IDE1LjMxMjUgMjAuNDg1IDE1LjMxMjUgMjAuMzEyNUMxNS4zMTI1IDIwLjE0IDE1LjE3MjUgMjAgMTQuOTk4OCAyMFwiXHJcbiAgICAgICAgICAgIHN0cm9rZT1cIiMzMjMyMzJcIlxyXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxyXG4gICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L3N2Zz5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJwYXNzd29yZFdyYXBwZXJcIj5cclxuICAgICAgPGlucHV0XHJcbiAgICAgIHR5cGU9XCJwYXNzd29yZFwiXHJcbiAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIG1iLTIgaGVpZ2h0XCJcclxuICAgICAgW2lkXT1cIidwYXNzd29yZEZpZWxkJyArIHF1ZXN0aW9uSWRcIlxyXG4gICAgICAoYmx1cik9XCJ2YWxpZGF0ZVBhc3N3b3JkKClcIlxyXG4gICAgICBbKG5nTW9kZWwpXT1cImVudGVyZWRQYXNzd29yZFwiXHJcbiAgICAgIFtjbGFzcy5pbnZhbGlkXT1cInZhbGlkYXRpb25GYWlsZWRcIlxyXG4gICAgICBbY2xhc3MuaW52YWxpZC1xdWVzdGlvbl09XCJpc0ludmFsaWQgJiYgKCFpbkxpbmUgfHwgIWVudGVyZWRQYXNzd29yZClcIlxyXG4gICAgICAoaW5wdXQpPVwidmFsaWRhdGVJbnB1dCgkZXZlbnQpXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVFZGl0XCJcclxuICAgIC8+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIGlkPVwidG9nZ2xlUGFzc3dvcmRCdG5cIlxyXG4gICAgICBjbGFzcz1cInRvZ2dsZS1wYXNzd29yZC1idG5cIlxyXG4gICAgICAoY2xpY2spPVwidG9nZ2xlUGFzc3dvcmRWaXNpYmlsaXR5KClcIlxyXG4gICAgICAqbmdJZj1cInZpZXdCdXR0b25cIlxyXG4gICAgPlxyXG4gICAgICA8aSBjbGFzcz1cImJpIGJpLWV5ZS1maWxsXCIgW2lkXT1cIidwYXNzd29yZEV5ZUljb24nICsgcXVlc3Rpb25JZFwiPjwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cInBhc3N3b3JkLXN0cmVuZ3RoLW1ldGVyXCIgKm5nSWY9XCJkaXNwbGF5U3RyZW5ndGhcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJwcm9ncmVzc1wiPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgY2xhc3M9XCJwcm9ncmVzcy1iYXJcIlxyXG4gICAgICAgIHJvbGU9XCJwcm9ncmVzc2JhclwiXHJcbiAgICAgICAgW3N0eWxlLndpZHRoXT1cInBhc3N3b3JkU3RyZW5ndGggKyAnJSdcIlxyXG4gICAgICAgIFtjbGFzcy5iZy1kYW5nZXJdPVwicGFzc3dvcmRTdHJlbmd0aCA8IDMwXCJcclxuICAgICAgICBbY2xhc3MuYmctd2FybmluZ109XCJwYXNzd29yZFN0cmVuZ3RoID49IDMwICYmIHBhc3N3b3JkU3RyZW5ndGggPCA3MFwiXHJcbiAgICAgICAgW2NsYXNzLmJnLXN1Y2Nlc3NdPVwicGFzc3dvcmRTdHJlbmd0aCA+PSA3MFwiXHJcbiAgICAgID48L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJpc0ludmFsaWQgJiYgKCFpbkxpbmUgfHwgIWVudGVyZWRQYXNzd29yZClcIiBjbGFzcz1cImVycm9yLW1lc3NhZ2VcIj5cclxuICAgIHt7IGVycm9yTWVzc2FnZSB9fVxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJ2YWxpZGF0aW9uRmFpbGVkICYmICFpc0ludmFsaWRcIiBjbGFzcz1cInRleHQtZGFuZ2VyIG1iLTJcIj5cclxuICAgIHt7IHZhbGlkYXRpb25NZXNzYWdlIH19XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgY2xhc3M9XCJjbmZybVBhc3N3b3JkV3JhcHBlclwiICpuZ0lmPVwiY29uZmlybVBhc3N3b3JkXCI+XHJcbiAgICA8bGFiZWwgZm9yPVwiJ2NuZnJtUGFzc3dvcmRGaWVsZCcrcXVlc3Rpb25JZFwiPkNvbmZpcm0gcGFzc3dvcmQ8L2xhYmVsPlxyXG4gICAgPGlucHV0XHJcbiAgICAgIHR5cGU9XCJwYXNzd29yZFwiXHJcbiAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIG1iLTIgaGVpZ2h0XCJcclxuICAgICAgW2lkXT1cIidjbmZybVBhc3N3b3JkRmllbGQnICsgcXVlc3Rpb25JZFwiXHJcbiAgICAgIChibHVyKT1cImNoZWNrUGFzc3dvcmRNYXRjaCgpXCJcclxuICAgICAgWyhuZ01vZGVsKV09XCJlbnRlcmVkQ25mcm1QYXNzd29yZFwiXHJcbiAgICAgIFtjbGFzcy5pbnZhbGlkXT1cInZhbGlkYXRlZENuZnJtUGFzc3dvcmRcIlxyXG4gICAgICAoaW5wdXQpPVwidmFsaWRhdGVDbmZybSgkZXZlbnQpXCJcclxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVFZGl0XCJcclxuICAgIC8+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgIGlkPVwidG9nZ2xlQ25mcm1QYXNzd29yZEJ0blwiXHJcbiAgICAgIGNsYXNzPVwidG9nZ2xlLXBhc3N3b3JkLWJ0blwiXHJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVDbmZybVBhc3N3b3JkVmlzaWJpbGl0eSgpXCJcclxuICAgICAgKm5nSWY9XCJ2aWV3QnV0dG9uXCJcclxuICAgID5cclxuICAgICAgPGkgY2xhc3M9XCJiaSBiaS1leWUtZmlsbFwiIFtpZF09XCInQ25mcm1QYXNzd29yZEV5ZUljb24nICsgcXVlc3Rpb25JZFwiPjwvaT5cclxuICAgIDwvYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCJ2YWxpZGF0ZWRDbmZybVBhc3N3b3JkXCIgY2xhc3M9XCJ0ZXh0LWRhbmdlciBlcnJvci1tZXNzYWdlXCI+XHJcbiAgICB7eyBjbmZybVZhbGlkYXRpb25NZXNzYWdlIH19XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
260
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFzc3dvcmQtZmllbGRzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Zvcm0tc3VibWlzc2lvbi9zcmMvZm9ybS1maWVsZHMvcGFzc3dvcmQtZmllbGRzL3Bhc3N3b3JkLWZpZWxkcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mb3JtLXN1Ym1pc3Npb24vc3JjL2Zvcm0tZmllbGRzL3Bhc3N3b3JkLWZpZWxkcy9wYXNzd29yZC1maWVsZHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7OztBQVV2RSxNQUFNLE9BQU8sdUJBQXVCO0lBK0JsQyxZQUNVLGlCQUFvQyxFQUNwQyxPQUE4QixFQUM5QixrQkFBcUM7UUFGckMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxZQUFPLEdBQVAsT0FBTyxDQUF1QjtRQUM5Qix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW1CO1FBakN0QyxhQUFRLEdBQVEsRUFBRSxDQUFDO1FBQ25CLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFDeEIsV0FBTSxHQUFZLEtBQUssQ0FBQztRQUV2QixpQkFBWSxHQUFHLElBQUksWUFBWSxFQUE4QyxDQUFDO1FBRXhGLFVBQUssR0FBVyxDQUFDLENBQUM7UUFDbEIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixTQUFJLEdBQVcsRUFBRSxDQUFDO1FBVWxCLDZCQUF3QixHQUFhLEVBQUUsQ0FBQztRQUN4QyxzQkFBaUIsR0FBVyxFQUFFLENBQUM7UUFDL0IsMkJBQXNCLEdBQVcsRUFBRSxDQUFDO1FBQ3BDLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUNsQywyQkFBc0IsR0FBWSxLQUFLLENBQUM7UUFDeEMsb0JBQWUsR0FBVyxFQUFF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TyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsQ0FBQztTQUN6RTthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsR0FBRyxZQUFZLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7U0FDakQ7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDaEQ7SUFDSCxDQUFDOytHQXZRUSx1QkFBdUI7bUdBQXZCLHVCQUF1Qiw0T0NWcEMsOHlJQWlIQTs7NEZEdkdhLHVCQUF1QjtrQkFMbkMsU0FBUzsrQkFDRSxxQkFBcUI7NktBS3RCLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csTUFBTTtzQkFBZCxLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNJLFlBQVk7c0JBQXJCLE1BQU07Z0JBd0JFLFdBQVc7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRWxlbWVudFRyYWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZWxlbWVudC10cmFja2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy92YWxpZGF0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgSGlkZGVuRmllbGRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvaGlkZGVuLWZpZWxkLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItcGFzc3dvcmQtZmllbGRzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Bhc3N3b3JkLWZpZWxkcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3Bhc3N3b3JkLWZpZWxkcy5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBQYXNzd29yZEZpZWxkc0NvbXBvbmVudCB7XG4gIEBJbnB1dCgpIHF1ZXN0aW9uOiBhbnkgPSB7fTtcbiAgQElucHV0KCkgaW5MaW5lOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGluQ2FyZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzdWJtaXNzaW9uSW5kZXghOiBudW1iZXI7XG4gIEBPdXRwdXQoKSBhbnN3ZXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgYW5zd2VyOiBhbnk7IG1heFBvc3NpYmxlU2NvcmU/OiBudW1iZXIgfT4oKTtcblxuICBjb3VudDogbnVtYmVyID0gMDtcbiAgcmVxdWlyZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgaGludDogc3RyaW5nID0gJyc7XG4gIGNvbmZpcm1QYXNzd29yZCE6IGJvb2xlYW47XG4gIGRpc3BsYXlTdHJlbmd0aCE6IGJvb2xlYW47XG4gIHZpZXdCdXR0b24hOiBib29sZWFuO1xuICBtYXhMZW5ndGghOiBudW1iZXI7XG4gIG1pbkxlbmd0aCE6IG51bWJlcjtcbiAgcmVxdWlyZUxvd2VyY2FzZUxldHRlcnMhOiBib29sZWFuO1xuICByZXF1aXJlVXBwZXJjYXNlTGV0dGVycyE6IGJvb2xlYW47XG4gIHJlcXVpcmVOdW1iZXJzITogYm9vbGVhbjtcbiAgcmVxdWlyZVNwZWNpYWxDaGFyYWN0ZXJzITogYm9vbGVhbjtcbiAgYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzOiBzdHJpbmdbXSA9IFtdO1xuICB2YWxpZGF0aW9uTWVzc2FnZTogc3RyaW5nID0gJyc7XG4gIGNuZnJtVmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICB2YWxpZGF0aW9uRmFpbGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHZhbGlkYXRlZENuZnJtUGFzc3dvcmQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZW50ZXJlZFBhc3N3b3JkOiBzdHJpbmcgPSAnJztcbiAgZW50ZXJlZENuZnJtUGFzc3dvcmQ6IHN0cmluZyA9ICcnO1xuICBwYXNzd29yZFN0cmVuZ3RoOiBudW1iZXIgPSAwO1xuICBxdWVzdGlvbklkOnN0cmluZz0nJztcbiAgcHJpdmF0ZSBlbGVtZW50SWQ6IHN0cmluZz0nJztcbiAgQElucHV0KCkgZGlzYWJsZUVkaXQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhY2tlcjogRWxlbWVudFRyYWNrZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgaGlkZGVuRmllbGRTZXJ2aWNlOkhpZGRlbkZpZWxkU2VydmljZVxuICApIHtcbiAgfVxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnZhbHVlQXNzaWduZWQoKTtcbiAgfVxuXG4gIHZhbHVlQXNzaWduZWQoKSB7XG4gICAgdGhpcy5xdWVzdGlvbklkPXRoaXMucXVlc3Rpb24uaWQ7XG4gICAgdGhpcy5jb3VudCA9IHRoaXMucXVlc3Rpb24uY291bnQ7XG4gICAgdGhpcy5yZXF1aXJlZCA9IHRoaXMucXVlc3Rpb24ucmVxdWlyZWQ7XG4gICAgdGhpcy5oaW50ID0gdGhpcy5xdWVzdGlvbi5oaW50O1xuICAgIHRoaXMuY29uZmlybVBhc3N3b3JkID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC5hcHBlYXJhbmNlLmNvbmZpcm1QYXNzd29yZDtcbiAgICB0aGlzLmRpc3BsYXlTdHJlbmd0aCA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQuYXBwZWFyYW5jZS5kaXNwbGF5U3Ryb25nO1xuICAgIHRoaXMudmlld0J1dHRvbiA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQuYXBwZWFyYW5jZS52aWV3QnV0dG9uO1xuICAgIHRoaXMubWF4TGVuZ3RoID0gdGhpcy5xdWVzdGlvbi5mb3JtRWxlbWVudC52YWxpZGF0aW9uLm1heExlbmd0aDtcbiAgICB0aGlzLm1pbkxlbmd0aCA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQudmFsaWRhdGlvbi5taW5MZW5ndGg7XG4gICAgdGhpcy5yZXF1aXJlTG93ZXJjYXNlTGV0dGVycyA9XG4gICAgICB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnZhbGlkYXRpb24ucmVxdWlyZUxvd2VyY2FzZUxldHRlcnM7XG4gICAgdGhpcy5yZXF1aXJlVXBwZXJjYXNlTGV0dGVycyA9XG4gICAgICB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnZhbGlkYXRpb24ucmVxdWlyZVVwcGVyY2FzZUxldHRlcnM7XG4gICAgdGhpcy5yZXF1aXJlTnVtYmVycyA9IHRoaXMucXVlc3Rpb24uZm9ybUVsZW1lbnQudmFsaWRhdGlvbi5yZXF1aXJlTnVtYmVycztcbiAgICB0aGlzLnJlcXVpcmVTcGVjaWFsQ2hhcmFjdGVycyA9XG4gICAgICB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnZhbGlkYXRpb24ucmVxdWlyZVNwZWNpYWxDaGFyYWN0ZXJzO1xuICAgIGlmICh0aGlzLnJlcXVpcmVTcGVjaWFsQ2hhcmFjdGVycykge1xuICAgICAgdGhpcy5hbGxvd2VkU3BlY2lhbENoYXJhY3RlcnMgPVxuICAgICAgICB0aGlzLnF1ZXN0aW9uLmZvcm1FbGVtZW50LnZhbGlkYXRpb24uYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzXG4gICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAubWFwKChjaGFyOiBhbnkpID0+IGNoYXIudHJpbSgpKTtcbiAgICB9XG4gICAgdGhpcy5lbnRlcmVkUGFzc3dvcmQgPSB0aGlzLnF1ZXN0aW9uPy5hbnN3ZXI7XG4gIH1cblxuICB0b2dnbGVQYXNzd29yZFZpc2liaWxpdHkoKSB7XG4gICAgbGV0IHBhc3N3b3JkRmllbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICAgICdwYXNzd29yZEZpZWxkJyt0aGlzLnF1ZXN0aW9uSWRcbiAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgbGV0IGV5ZUljb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICAgICdwYXNzd29yZEV5ZUljb24nK3RoaXMucXVlc3Rpb25JZFxuICAgICkgYXMgSFRNTElucHV0RWxlbWVudDtcblxuICAgIGlmIChwYXNzd29yZEZpZWxkLnR5cGUgPT09ICdwYXNzd29yZCcpIHtcbiAgICAgIHBhc3N3b3JkRmllbGQudHlwZSA9ICd0ZXh0JztcbiAgICAgIGV5ZUljb24uY2xhc3NMaXN0LnJlbW92ZSgnYmktZXllLWZpbGwnKTtcbiAgICAgIGV5ZUljb24uY2xhc3NMaXN0LmFkZCgnYmktZXllLXNsYXNoLWZpbGwnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFzc3dvcmRGaWVsZC50eXBlID0gJ3Bhc3N3b3JkJztcbiAgICAgIGV5ZUljb24uY2xhc3NMaXN0LnJlbW92ZSgnYmktZXllLXNsYXNoLWZpbGwnKTtcbiAgICAgIGV5ZUljb24uY2xhc3NMaXN0LmFkZCgnYmktZXllLWZpbGwnKTtcbiAgICB9XG4gIH1cbiAgdG9nZ2xlQ25mcm1QYXNzd29yZFZpc2liaWxpdHkoKSB7XG4gICAgbGV0IHBhc3N3b3JkRmllbGQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcbiAgICAgICdjbmZybVBhc3N3b3JkRmllbGQnK3RoaXMucXVlc3Rpb25JZFxuICAgICkgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICBsZXQgZXllSWNvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxuICAgICAgJ0NuZnJtUGFzc3dvcmRFeWVJY29uJyt0aGlzLnF1ZXN0aW9uSWRcbiAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgICBpZiAocGFzc3dvcmRGaWVsZC50eXBlID09PSAncGFzc3dvcmQnKSB7XG4gICAgICBwYXNzd29yZEZpZWxkLnR5cGUgPSAndGV4dCc7XG4gICAgICBleWVJY29uLmNsYXNzTGlzdC5yZW1vdmUoJ2JpLWV5ZS1maWxsJyk7XG4gICAgICBleWVJY29uLmNsYXNzTGlzdC5hZGQoJ2JpLWV5ZS1zbGFzaC1maWxsJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhc3N3b3JkRmllbGQudHlwZSA9ICdwYXNzd29yZCc7XG4gICAgICBleWVJY29uLmNsYXNzTGlzdC5yZW1vdmUoJ2JpLWV5ZS1zbGFzaC1maWxsJyk7XG4gICAgICBleWVJY29uLmNsYXNzTGlzdC5hZGQoJ2JpLWV5ZS1maWxsJyk7XG4gICAgfVxuICB9XG5cbiAgY2hlY2tQYXNzd29yZE1hdGNoKCkge1xuICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuY2xlYXJJbnZhbGlkKHRoaXMuYnVpbGRFbGVtZW50SWQoKSk7XG4gICAgdGhpcy52YWxpZGF0ZWRDbmZybVBhc3N3b3JkID0gZmFsc2U7XG4gICAgdGhpcy5jbmZybVZhbGlkYXRpb25NZXNzYWdlID0gJyc7XG4gICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgdGhpcy5jb25maXJtUGFzc3dvcmQgJiYgIXRoaXMuZW50ZXJlZENuZnJtUGFzc3dvcmQpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVkQ25mcm1QYXNzd29yZCA9IHRydWU7XG4gICAgICB0aGlzLmNuZnJtVmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGxlYXNlIGVudGVyIGEgdmFsaWQgcGFzc3dvcmRgO1xuICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRoaXMuZW50ZXJlZFBhc3N3b3JkICE9IHRoaXMuZW50ZXJlZENuZnJtUGFzc3dvcmQgJiYgdGhpcy5jb25maXJtUGFzc3dvcmQpIHtcbiAgICAgIHRoaXMudmFsaWRhdGVkQ25mcm1QYXNzd29yZCA9IHRydWU7XG4gICAgICB0aGlzLmNuZnJtVmFsaWRhdGlvbk1lc3NhZ2UgPSAnUGFzc3dvcmRzIGRvIG5vdCBtYXRjaCc7XG4gICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGVQYXNzd29yZCgpO1xuICB9XG5cbiAgXG5cbiAgdmFsaWRhdGVQYXNzd29yZCgpIHtcbiAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQgPSBmYWxzZTtcbiAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmNsZWFySW52YWxpZCh0aGlzLmJ1aWxkRWxlbWVudElkKCkpO1xuICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSAnJztcbiAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAhdGhpcy5lbnRlcmVkUGFzc3dvcmQpIHtcbiAgICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IHRydWU7XG4gICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gYFBsZWFzZSBlbnRlciBhIHZhbGlkIHBhc3N3b3JkYDtcbiAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uTWVzc2FnZSA9IGBQbGVhc2UgZW50ZXIgYSB2YWxpZCBwYXNzd29yZGA7XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMucmVxdWlyZUxvd2VyY2FzZUxldHRlcnMgfHxcbiAgICAgIHRoaXMucmVxdWlyZVVwcGVyY2FzZUxldHRlcnMgfHxcbiAgICAgIHRoaXMucmVxdWlyZU51bWJlcnMgfHxcbiAgICAgIHRoaXMucmVxdWlyZVNwZWNpYWxDaGFyYWN0ZXJzIHx8XG4gICAgICB0aGlzLm1pbkxlbmd0aCB8fFxuICAgICAgdGhpcy5tYXhMZW5ndGhcbiAgICApIHsgICAgICBcbiAgICAgIGNvbnN0IGxvd2VyY2FzZVJlZ2V4ID0gL1thLXpdLztcbiAgICAgIGNvbnN0IHVwcGVyY2FzZVJlZ2V4ID0gL1tBLVpdLztcbiAgICAgIGNvbnN0IG51bWJlclJlZ2V4ID0gL1xcZC87XG4gICAgICBjb25zdCBzcGVjaWFsQ2hhcmFjdGVyUmVnZXggPSBuZXcgUmVnRXhwKGBbJHt0aGlzLmFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVycy5qb2luKCcnKX1dYCk7XG4gICAgICBjb25zdCBvdGhlclNwZWNpYWxDaGFyYWN0ZXJSZWdleCA9IG5ldyBSZWdFeHAoYFteYS16QS1aMC05JHt0aGlzLmFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVycy5qb2luKCcnKX1dYCk7XG4gIFxuICAgICAgbGV0IGxvd2VyQ2FzZVZhbGlkYXRlID0gbG93ZXJjYXNlUmVnZXgudGVzdCh0aGlzLmVudGVyZWRQYXNzd29yZCk7XG4gICAgICBsZXQgdXBwZXJDYXNlVmFsaWRhdGUgPSB1cHBlcmNhc2VSZWdleC50ZXN0KHRoaXMuZW50ZXJlZFBhc3N3b3JkKTtcbiAgICAgIGxldCBjb250YWluc051bWJlciA9IG51bWJlclJlZ2V4LnRlc3QodGhpcy5lbnRlcmVkUGFzc3dvcmQpO1xuICAgICAgbGV0IGNvbnRhaW5zU3BlY2lhbENoYXJhY3RlciA9IHNwZWNpYWxDaGFyYWN0ZXJSZWdleC50ZXN0KHRoaXMuZW50ZXJlZFBhc3N3b3JkKTtcbiAgICAgIGxldCBjb250YWluc090aGVyU3BlY2lhbENoYXJhY3RlciA9IG90aGVyU3BlY2lhbENoYXJhY3RlclJlZ2V4LnRlc3QodGhpcy5lbnRlcmVkUGFzc3dvcmQpO1xuICBcbiAgICAgIGlmICghbG93ZXJDYXNlVmFsaWRhdGUgJiYgdGhpcy5yZXF1aXJlTG93ZXJjYXNlTGV0dGVycykge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gJ1Bhc3N3b3JkIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgbG93ZXJjYXNlIGxldHRlcic7XG4gICAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb25NZXNzYWdlID0gJ1Bhc3N3b3JkIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgbG93ZXJjYXNlIGxldHRlcic7XG4gICAgICB9IGVsc2UgaWYgKCF1cHBlckNhc2VWYWxpZGF0ZSAmJiB0aGlzLnJlcXVpcmVVcHBlcmNhc2VMZXR0ZXJzKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbkZhaWxlZCA9IHRydWU7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSAnUGFzc3dvcmQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSB1cHBlcmNhc2UgbGV0dGVyJztcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gZmFsc2U7XG4gICAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbk1lc3NhZ2UgPSAnUGFzc3dvcmQgbXVzdCBjb250YWluIGF0IGxlYXN0IG9uZSB1cHBlcmNhc2UgbGV0dGVyJztcbiAgICAgIH0gZWxzZSBpZiAoIWNvbnRhaW5zTnVtYmVyICYmIHRoaXMucmVxdWlyZU51bWJlcnMpIHtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uRmFpbGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICdQYXNzd29yZCBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIG51bWJlcic7XG4gICAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb25NZXNzYWdlID0gJ1Bhc3N3b3JkIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgbnVtYmVyJztcbiAgICAgIH1lbHNlIGlmICh0aGlzLmVudGVyZWRQYXNzd29yZC5sZW5ndGggPCB0aGlzLm1pbkxlbmd0aCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gYFBhc3N3b3JkIG11c3QgY29udGFpbiBhdCBsZWFzdCAke3RoaXMubWluTGVuZ3RofSBjaGFyYWN0ZXJzYDtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uID0gZmFsc2U7XG4gICAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbk1lc3NhZ2UgPSBgUGFzc3dvcmQgbXVzdCBjb250YWluIGF0IGxlYXN0ICR7dGhpcy5taW5MZW5ndGh9IGNoYXJhY3RlcnNgO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLmVudGVyZWRQYXNzd29yZC5sZW5ndGggPiB0aGlzLm1heExlbmd0aCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gYFBhc3N3b3JkIG11c3QgYmUgbGVzcyB0aGFuICR7dGhpcy5tYXhMZW5ndGh9IGNoYXJhY3RlcnNgO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uTWVzc2FnZSA9IGBQYXNzd29yZCBtdXN0IGJlIGxlc3MgdGhhbiAke3RoaXMubWF4TGVuZ3RofSBjaGFyYWN0ZXJzYDtcbiAgICAgIH0gZWxzZSBpZiAoIWNvbnRhaW5zU3BlY2lhbENoYXJhY3RlciAmJiB0aGlzLmFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVycy5sZW5ndGg+MCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gYFBhc3N3b3JkIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgc3BlY2lhbCBjaGFyYWN0ZXIgZnJvbSAke3RoaXMuYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzfWA7XG4gICAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb25NZXNzYWdlID0gYFBhc3N3b3JkIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgc3BlY2lhbCBjaGFyYWN0ZXIgZnJvbSAke3RoaXMuYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzfWA7XG4gICAgICB9IGVsc2UgaWYoY29udGFpbnNPdGhlclNwZWNpYWxDaGFyYWN0ZXIgJiYgdGhpcy5hbGxvd2VkU3BlY2lhbENoYXJhY3RlcnMubGVuZ3RoPjApe1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25GYWlsZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gJ1Bhc3N3b3JkIGNvbnRhaW5zIGFuIGludmFsaWQgc3BlY2lhbCBjaGFyYWN0ZXInO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uLnZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5xdWVzdGlvbi52YWxpZGF0aW9uTWVzc2FnZSA9ICdQYXNzd29yZCBjb250YWlucyBhbiBpbnZhbGlkIHNwZWNpYWwgY2hhcmFjdGVyJztcbiAgICAgIH0gZWxzZSBpZih0aGlzLmNvbmZpcm1QYXNzd29yZCl7XG4gICAgICAgIHRoaXMuY2hlY2tQYXNzd29yZE1hdGNoKCk7XG4gICAgICB9XG4gICAgICAgZWxzZSB7XG4gICAgICAgIHRoaXMucXVlc3Rpb24udmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICB9ICAgIFxuICAgIH0gZWxzZSB7ICAgICAgICAgICAgXG4gICAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGg9dGhpcy5jYWxjdWxhdGVTdHJlbmd0aCh0aGlzLmVudGVyZWRQYXNzd29yZCk7XG4gICAgfVxuICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aCA9IHRoaXMuY2FsY3VsYXRlU3RyZW5ndGgodGhpcy5lbnRlcmVkUGFzc3dvcmQpXG59XG5cbiAgdmFsaWRhdGVJbnB1dChldmVudDphbnkpe1xuICAgIGNvbnN0IHNhbml0aXplZFZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlLnJlcGxhY2UoL1xccysvZywgJycpO1xuICAgIHRoaXMuZW50ZXJlZFBhc3N3b3JkID0gc2FuaXRpemVkVmFsdWU7XG4gICAgdGhpcy5xdWVzdGlvbi5hbnN3ZXI9c2FuaXRpemVkVmFsdWU7XG4gICAgdGhpcy52YWxpZGF0ZVBhc3N3b3JkKCk7ICBcbiAgICB0aGlzLmFuc3dlckNoYW5nZS5lbWl0KHthbnN3ZXI6dGhpcy5xdWVzdGlvbi5hbnN3ZXIsbWF4UG9zc2libGVTY29yZTowfSk7IFxuICAgIHRoaXMuaGlkZGVuRmllbGRTZXJ2aWNlLnVwZGF0ZUhpZGRlbkZpZWxkc09uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVDbmZybShldmVudDphbnkpe1xuICAgICAgY29uc3Qgc2FuaXRpemVkVmFsdWUgPSBldmVudC50YXJnZXQudmFsdWUucmVwbGFjZSgvXFxzKy9nLCAnJyk7XG4gICAgICB0aGlzLmVudGVyZWRDbmZybVBhc3N3b3JkID0gc2FuaXRpemVkVmFsdWU7XG4gICAgICB0aGlzLmNoZWNrUGFzc3dvcmRNYXRjaCgpO1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZVN0cmVuZ3RoKHBhc3N3b3JkOmFueSkge1xuICAgICAgY29uc3QgbGVuZ3RoU3RyZW5ndGggPSBNYXRoLm1pbigxMDAsIChwYXNzd29yZC5sZW5ndGggLyAxMikgKiAxMDApOyAvLyBBc3N1bWUgbWF4aW11bSBsZW5ndGggb2YgMTIgZm9yIGZ1bGwgcG9pbnRzXG4gICAgICBjb25zdCBsb3dlcmNhc2VTdHJlbmd0aCA9IC9bYS16XS8udGVzdChwYXNzd29yZCkgPyAyMCA6IDA7XG4gICAgICBjb25zdCB1cHBlcmNhc2VTdHJlbmd0aCA9IC9bQS1aXS8udGVzdChwYXNzd29yZCkgPyAyMCA6IDA7XG4gICAgICBjb25zdCBudW1iZXJTdHJlbmd0aCA9IC9cXGQvLnRlc3QocGFzc3dvcmQpID8gMjAgOiAwO1xuICAgICAgY29uc3Qgc3BlY2lhbENoYXJhY3RlclN0cmVuZ3RoID0gL1shQCMkJV4mKigpLC4/XCI6e318PD5dLy50ZXN0KHBhc3N3b3JkKSA/IDIwIDogMDsgLy8gQWRqdXN0IHRoaXMgcmVnZXggYmFzZWQgb24geW91ciBhbGxvd2VkIHNwZWNpYWwgY2hhcmFjdGVyc1xuICAgIFxuICAgICAgcmV0dXJuIGxlbmd0aFN0cmVuZ3RoICsgbG93ZXJjYXNlU3RyZW5ndGggKyB1cHBlcmNhc2VTdHJlbmd0aCArIG51bWJlclN0cmVuZ3RoICsgc3BlY2lhbENoYXJhY3RlclN0cmVuZ3RoO1xuICAgIH1cblxuICAgIGhhbmRsZVZhbGlkYXRpb24oaXNWYWxpZDogYm9vbGVhbiwgbWVzc2FnZTogc3RyaW5nID0gJ1RoaXMgZmllbGQgaXMgcmVxdWlyZWQnKSB7XG4gICAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmNsZWFySW52YWxpZCh0aGlzLmJ1aWxkRWxlbWVudElkKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhpcy52YWxpZGF0aW9uU2VydmljZS5zZXRJbnZhbGlkKHRoaXMucXVlc3Rpb24uaWQsIG1lc3NhZ2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRFbGVtZW50SWQoKTogc3RyaW5nIHtcbiAgICAgIHJldHVybiAodGhpcy5pbkxpbmUgfHwgdGhpcy5pbkNhcmQpXG4gICAgICAgID8gYCR7dGhpcy5zdWJtaXNzaW9uSW5kZXh9LSR7dGhpcy5xdWVzdGlvbi5pZH1gXG4gICAgICAgIDogYCR7dGhpcy5xdWVzdGlvbi5pZH1gO1xuICAgIH1cbiAgXG4gICAgZ2V0IGlzSW52YWxpZCgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmFsaWRhdGlvblNlcnZpY2UuZ2V0RXJyb3JNZXNzYWdlKHRoaXMuYnVpbGRFbGVtZW50SWQoKSk7XG4gICAgfVxuICBcbiAgICBnZXQgZXJyb3JNZXNzYWdlKCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuZ2V0RXJyb3JNZXNzYWdlKHRoaXMuYnVpbGRFbGVtZW50SWQoKSk7XG4gICAgfVxuICBcbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICBpZiAodGhpcy5pbkxpbmUgfHwgdGhpcy5pbkNhcmQpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50SWQgPSBgcXVlc3Rpb24tJHt0aGlzLnN1Ym1pc3Npb25JbmRleH0tJHt0aGlzLnF1ZXN0aW9uLmlkfWA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVsZW1lbnRJZCA9IGBxdWVzdGlvbi0ke3RoaXMucXVlc3Rpb24uaWR9YDtcbiAgICAgIH1cbiAgICBcbiAgICAgIHRoaXMudHJhY2tlci5yZWdpc3RlckVsZW1lbnQodGhpcy5lbGVtZW50SWQpO1xuICAgIH1cbiAgXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICBpZiAodGhpcy5lbGVtZW50SWQpIHtcbiAgICAgICAgdGhpcy50cmFja2VyLnVucmVnaXN0ZXJFbGVtZW50KHRoaXMuZWxlbWVudElkKTtcbiAgICAgIH1cbiAgICB9XG59XG5cbiIsIjxkaXZcbiAgW25nQ2xhc3NdPVwieyAnbWItNCc6ICFpbkxpbmUgfVwiXG4gIGNsYXNzPVwicHgtM1wiXG4gIFtpZF09XCIoaW5MaW5lIHx8IGluQ2FyZCkgPyAncXVlc3Rpb24tJyArIHN1Ym1pc3Npb25JbmRleCArICctJyArIHF1ZXN0aW9uLmlkIDogJ3F1ZXN0aW9uLScgKyBxdWVzdGlvbi5pZFwiXG4gIFthdHRyLm5hbWVdPVwicXVlc3Rpb24udGVzdEVsZW1lbnROYW1lXCJcbj5cbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtd3JhcHBlciBtYi0yXCIgKm5nSWY9XCIhaW5MaW5lXCI+XG4gICAgICA8ZGl2ICpuZ0lmPVwicXVlc3Rpb24ucXVlc3Rpb25OdW1iZXJcIiBbaW5uZXJIVE1MXT1cInF1ZXN0aW9uLnF1ZXN0aW9uTnVtYmVyXCI+PC9kaXY+XG4gICAgICA8c3BhbiAqbmdJZj1cInF1ZXN0aW9uLnF1ZXN0aW9uTnVtYmVyXCIgY2xhc3M9XCJzcGFjZVwiPjwvc3Bhbj5cbiAgICAgIDxsYWJlbCBbZm9yXT1cIidwYXNzd29yZEZpZWxkJyArIHF1ZXN0aW9uSWRcIj57eyBxdWVzdGlvbi5xdWVzdGlvbiB9fTwvbGFiZWxcbiAgICAgID4mbmJzcDtcbiAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIiAqbmdJZj1cInF1ZXN0aW9uPy5yZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwic3ZnLXdyYXBwZXIgbWItMiBoaW50SWNvblwiXG4gICAgICAgIFthdHRyLmRhdGEtdGl0bGVdPVwiaGludFwiXG4gICAgICAgICpuZ0lmPVwiaGludFwiXG4gICAgICA+XG4gICAgICAgIDxzdmdcbiAgICAgICAgICBjbGFzcz1cImhpbnRTdmdcIlxuICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMzAgMzBcIlxuICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICA+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGZpbGwtcnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgY2xpcC1ydWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICBkPVwiTTE1IDI2LjI1VjI2LjI1QzguNzg2MjUgMjYuMjUgMy43NSAyMS4yMTM4IDMuNzUgMTVWMTVDMy43NSA4Ljc4NjI1IDguNzg2MjUgMy43NSAxNSAzLjc1VjMuNzVDMjEuMjEzOCAzLjc1IDI2LjI1IDguNzg2MjUgMjYuMjUgMTVWMTVDMjYuMjUgMjEuMjEzOCAyMS4yMTM4IDI2LjI1IDE1IDI2LjI1WlwiXG4gICAgICAgICAgICBzdHJva2U9XCIjMzIzMjMyXCJcbiAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuNVwiXG4gICAgICAgICAgICBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICBkPVwiTTE1IDE2LjU2MjNWMTYuMjQ5OEMxNSAxNS4yMjg1IDE1LjYzMTIgMTQuNjc0OCAxNi4yNjM3IDE0LjI0OThDMTYuODgxMiAxMy44MzM1IDE3LjUgMTMuMjkxIDE3LjUgMTIuMjkxQzE3LjUgMTAuOTA5OCAxNi4zODEzIDkuNzkxMDIgMTUgOS43OTEwMkMxMy42MTg3IDkuNzkxMDIgMTIuNSAxMC45MDk4IDEyLjUgMTIuMjkxXCJcbiAgICAgICAgICAgIHN0cm9rZT1cIiMzMjMyMzJcIlxuICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS41XCJcbiAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgIGQ9XCJNMTQuOTk4OCAyMEMxNC44MjYzIDIwIDE0LjY4NjMgMjAuMTQgMTQuNjg3NSAyMC4zMTI1QzE0LjY4NzUgMjAuNDg1IDE0LjgyNzUgMjAuNjI1IDE1IDIwLjYyNUMxNS4xNzI1IDIwLjYyNSAxNS4zMTI1IDIwLjQ4NSAxNS4zMTI1IDIwLjMxMjVDMTUuMzEyNSAyMC4xNCAxNS4xNzI1IDIwIDE0Ljk5ODggMjBcIlxuICAgICAgICAgICAgc3Ryb2tlPVwiIzMyMzIzMlwiXG4gICAgICAgICAgICBzdHJva2Utd2lkdGg9XCIxLjVcIlxuICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zdmc+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwicGFzc3dvcmRXcmFwcGVyXCI+XG4gICAgICA8aW5wdXRcbiAgICAgIHR5cGU9XCJwYXNzd29yZFwiXG4gICAgICBjbGFzcz1cImZvcm0tY29udHJvbCBtYi0yIGhlaWdodFwiXG4gICAgICBbaWRdPVwiJ3Bhc3N3b3JkRmllbGQnICsgcXVlc3Rpb25JZFwiXG4gICAgICAoYmx1cik9XCJ2YWxpZGF0ZVBhc3N3b3JkKClcIlxuICAgICAgWyhuZ01vZGVsKV09XCJlbnRlcmVkUGFzc3dvcmRcIlxuICAgICAgW2NsYXNzLmludmFsaWRdPVwidmFsaWRhdGlvbkZhaWxlZFwiXG4gICAgICBbY2xhc3MuaW52YWxpZC1xdWVzdGlvbl09XCJpc0ludmFsaWQgJiYgKCFpbkxpbmUgfHwgIWVudGVyZWRQYXNzd29yZClcIlxuICAgICAgKGlucHV0KT1cInZhbGlkYXRlSW5wdXQoJGV2ZW50KVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZUVkaXRcIlxuICAgIC8+XG4gICAgPGJ1dHRvblxuICAgICAgaWQ9XCJ0b2dnbGVQYXNzd29yZEJ0blwiXG4gICAgICBjbGFzcz1cInRvZ2dsZS1wYXNzd29yZC1idG5cIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZVBhc3N3b3JkVmlzaWJpbGl0eSgpXCJcbiAgICAgICpuZ0lmPVwidmlld0J1dHRvblwiXG4gICAgPlxuICAgICAgPGkgY2xhc3M9XCJiaSBiaS1leWUtZmlsbFwiIFtpZF09XCIncGFzc3dvcmRFeWVJY29uJyArIHF1ZXN0aW9uSWRcIj48L2k+XG4gICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJwYXNzd29yZC1zdHJlbmd0aC1tZXRlclwiICpuZ0lmPVwiZGlzcGxheVN0cmVuZ3RoXCI+XG4gICAgPGRpdiBjbGFzcz1cInByb2dyZXNzXCI+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCJcbiAgICAgICAgcm9sZT1cInByb2dyZXNzYmFyXCJcbiAgICAgICAgW3N0eWxlLndpZHRoXT1cInBhc3N3b3JkU3RyZW5ndGggKyAnJSdcIlxuICAgICAgICBbY2xhc3MuYmctZGFuZ2VyXT1cInBhc3N3b3JkU3RyZW5ndGggPCAzMFwiXG4gICAgICAgIFtjbGFzcy5iZy13YXJuaW5nXT1cInBhc3N3b3JkU3RyZW5ndGggPj0gMzAgJiYgcGFzc3dvcmRTdHJlbmd0aCA8IDcwXCJcbiAgICAgICAgW2NsYXNzLmJnLXN1Y2Nlc3NdPVwicGFzc3dvcmRTdHJlbmd0aCA+PSA3MFwiXG4gICAgICA+PC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwiaXNJbnZhbGlkICYmICghaW5MaW5lIHx8ICFlbnRlcmVkUGFzc3dvcmQpXCIgY2xhc3M9XCJlcnJvci1tZXNzYWdlXCI+XG4gICAge3sgZXJyb3JNZXNzYWdlIH19XG4gIDwvZGl2PlxuICA8ZGl2ICpuZ0lmPVwidmFsaWRhdGlvbkZhaWxlZCAmJiAhaXNJbnZhbGlkXCIgY2xhc3M9XCJ0ZXh0LWRhbmdlciBtYi0yXCI+XG4gICAge3sgdmFsaWRhdGlvbk1lc3NhZ2UgfX1cbiAgPC9kaXY+XG5cbiAgPGRpdiBjbGFzcz1cImNuZnJtUGFzc3dvcmRXcmFwcGVyXCIgKm5nSWY9XCJjb25maXJtUGFzc3dvcmRcIj5cbiAgICA8bGFiZWwgZm9yPVwiJ2NuZnJtUGFzc3dvcmRGaWVsZCcrcXVlc3Rpb25JZFwiPkNvbmZpcm0gcGFzc3dvcmQ8L2xhYmVsPlxuICAgIDxpbnB1dFxuICAgICAgdHlwZT1cInBhc3N3b3JkXCJcbiAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIG1iLTIgaGVpZ2h0XCJcbiAgICAgIFtpZF09XCInY25mcm1QYXNzd29yZEZpZWxkJyArIHF1ZXN0aW9uSWRcIlxuICAgICAgKGJsdXIpPVwiY2hlY2tQYXNzd29yZE1hdGNoKClcIlxuICAgICAgWyhuZ01vZGVsKV09XCJlbnRlcmVkQ25mcm1QYXNzd29yZFwiXG4gICAgICBbY2xhc3MuaW52YWxpZF09XCJ2YWxpZGF0ZWRDbmZybVBhc3N3b3JkXCJcbiAgICAgIChpbnB1dCk9XCJ2YWxpZGF0ZUNuZnJtKCRldmVudClcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVFZGl0XCJcbiAgICAvPlxuICAgIDxidXR0b25cbiAgICAgIGlkPVwidG9nZ2xlQ25mcm1QYXNzd29yZEJ0blwiXG4gICAgICBjbGFzcz1cInRvZ2dsZS1wYXNzd29yZC1idG5cIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZUNuZnJtUGFzc3dvcmRWaXNpYmlsaXR5KClcIlxuICAgICAgKm5nSWY9XCJ2aWV3QnV0dG9uXCJcbiAgICA+XG4gICAgICA8aSBjbGFzcz1cImJpIGJpLWV5ZS1maWxsXCIgW2lkXT1cIidDbmZybVBhc3N3b3JkRXllSWNvbicgKyBxdWVzdGlvbklkXCI+PC9pPlxuICAgIDwvYnV0dG9uPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cInZhbGlkYXRlZENuZnJtUGFzc3dvcmRcIiBjbGFzcz1cInRleHQtZGFuZ2VyIGVycm9yLW1lc3NhZ2VcIj5cbiAgICB7eyBjbmZybVZhbGlkYXRpb25NZXNzYWdlIH19XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|